| [3] | 1 | #include "../BasicCompiler_Common/common.h"
 | 
|---|
 | 2 | 
 | 
|---|
 | 3 | //デバッグ用
 | 
|---|
 | 4 | #include "../BasicCompiler_Common/debug.h"
 | 
|---|
 | 5 | 
 | 
|---|
 | 6 | //変数リストのツリーハンドル
 | 
|---|
 | 7 | HWND hVarTree_Global,hVarTree_Local,hVarTree_This;
 | 
|---|
 | 8 | 
 | 
|---|
 | 9 | int VarList_Array(HWND hVarTree,HTREEITEM hParent,DWORD offset,int type,int *SubScripts,LONG_PTR lpIndex);
 | 
|---|
 | 10 | void VarList_Member(HWND hVarTree,HTREEITEM hParent,DWORD pTopOffset,CClass *pobj_c,BOOL bPtr);
 | 
|---|
 | 11 | void VarList_Insert(HWND hVarTree,TV_INSERTSTRUCT *lptv,char *VarName,int type,DWORD offset,LONG_PTR lpIndex){
 | 
|---|
 | 12 |     extern HANDLE hDebugProcess;
 | 
|---|
 | 13 |     int i2;
 | 
|---|
 | 14 |     char temporary[255],temp2[255];
 | 
|---|
 | 15 |     DWORD dwData,dwAccessByte;
 | 
|---|
 | 16 |     double dbl;
 | 
|---|
 | 17 |     float flt;
 | 
|---|
 | 18 |     WORD wData;
 | 
|---|
 | 19 |     BYTE byteData;
 | 
|---|
 | 20 |     HTREEITEM hParent;
 | 
|---|
 | 21 | 
 | 
|---|
 | 22 |     if(type==DEF_OBJECT){
 | 
|---|
 | 23 |         sprintf(lptv->item.pszText,"%s %s(&H%X)",VarName,STRING_OBJECT,offset);
 | 
|---|
 | 24 |         lptv->item.iImage=1;
 | 
|---|
 | 25 |         lptv->item.iSelectedImage=1;
 | 
|---|
 | 26 |         hParent=TreeView_InsertItem(hVarTree,lptv);
 | 
|---|
 | 27 | 
 | 
|---|
 | 28 |         VarList_Member(hVarTree,hParent,offset,(CClass *)lpIndex,0);
 | 
|---|
 | 29 |         return;
 | 
|---|
 | 30 |     }
 | 
|---|
 | 31 |     if(type==DEF_PTR_OBJECT){
 | 
|---|
 | 32 |         i2=ReadProcessMemory(hDebugProcess,(void *)offset,&dwData,sizeof(DWORD),&dwAccessByte);
 | 
|---|
 | 33 | 
 | 
|---|
 | 34 |         sprintf(lptv->item.pszText,"%s %s(&H%X)",VarName,STRING_POINTEROFOBJECT,dwData);
 | 
|---|
 | 35 |         lptv->item.iImage=4;
 | 
|---|
 | 36 |         lptv->item.iSelectedImage=4;
 | 
|---|
 | 37 |         hParent=TreeView_InsertItem(hVarTree,lptv);
 | 
|---|
 | 38 | 
 | 
|---|
 | 39 |         if(i2) VarList_Member(hVarTree,hParent,dwData,(CClass *)lpIndex,1);
 | 
|---|
 | 40 |         return;
 | 
|---|
 | 41 |     }
 | 
|---|
 | 42 |     else{
 | 
|---|
 | 43 |         if(type==DEF_PTR_BYTE){
 | 
|---|
 | 44 |             if(ReadProcessMemory(hDebugProcess,(void *)offset,&dwData,sizeof(DWORD),&dwAccessByte)){
 | 
|---|
 | 45 |                 for(i2=0;;i2++){
 | 
|---|
 | 46 |                     if(!ReadProcessMemory(hDebugProcess,(void *)(dwData+i2),&temporary[i2],1,&dwAccessByte)){
 | 
|---|
 | 47 |                         i2=-1;
 | 
|---|
 | 48 |                         break;
 | 
|---|
 | 49 |                     }
 | 
|---|
 | 50 |                     if(temporary[i2]=='\0') break;
 | 
|---|
 | 51 |                     if(i2==64){
 | 
|---|
 | 52 |                         lstrcpy(temporary+i2,"...");
 | 
|---|
 | 53 |                         break;
 | 
|---|
 | 54 |                     }
 | 
|---|
 | 55 |                 }
 | 
|---|
 | 56 |                 if(i2==-1) sprintf(lptv->item.pszText,"%s %d(&H%X)",VarName,dwData,dwData);
 | 
|---|
 | 57 |                 else sprintf(lptv->item.pszText,"%s %d(&H%X) \"%s\"",VarName,dwData,dwData,temporary);
 | 
|---|
 | 58 |             }
 | 
|---|
 | 59 |             else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
 | 
|---|
 | 60 |         }
 | 
|---|
 | 61 |         else if(type==DEF_DOUBLE){
 | 
|---|
 | 62 |             if(ReadProcessMemory(hDebugProcess,(void *)offset,&dbl,sizeof(double),&dwAccessByte)){
 | 
|---|
 | 63 |                 sprintf(lptv->item.pszText,"%s %.15g",VarName,dbl);
 | 
|---|
 | 64 |             }
 | 
|---|
 | 65 |             else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
 | 
|---|
 | 66 |         }
 | 
|---|
 | 67 |         else if(type==DEF_SINGLE){
 | 
|---|
 | 68 |             if(ReadProcessMemory(hDebugProcess,(void *)offset,&flt,sizeof(float),&dwAccessByte)){
 | 
|---|
 | 69 |                 sprintf(lptv->item.pszText,"%s %.6g",VarName,flt);
 | 
|---|
 | 70 |             }
 | 
|---|
 | 71 |             else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
 | 
|---|
 | 72 |         }
 | 
|---|
 | 73 |         else if(type==DEF_INT64){
 | 
|---|
 | 74 |             _int64 i64data;
 | 
|---|
 | 75 |             if(ReadProcessMemory(hDebugProcess,(void *)offset,&i64data,sizeof(_int64),&dwAccessByte)){
 | 
|---|
 | 76 |                 _i64toa(i64data,temporary,10);
 | 
|---|
 | 77 |                 _i64toa(i64data,temp2,16);
 | 
|---|
 | 78 |                 CharUpper(temp2);
 | 
|---|
 | 79 |                 sprintf(lptv->item.pszText,"%s %s(&H%s)",VarName,temporary,temp2);
 | 
|---|
 | 80 |             }
 | 
|---|
 | 81 |             else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
 | 
|---|
 | 82 |         }
 | 
|---|
 | 83 |         else if(type==DEF_QWORD){
 | 
|---|
 | 84 |             _int64 i64data;
 | 
|---|
 | 85 |             if(ReadProcessMemory(hDebugProcess,(void *)offset,&i64data,sizeof(_int64),&dwAccessByte)){
 | 
|---|
 | 86 |                 _ui64toa(i64data,temporary,10);
 | 
|---|
 | 87 |                 _ui64toa(i64data,temp2,16);
 | 
|---|
 | 88 |                 CharUpper(temp2);
 | 
|---|
 | 89 |                 sprintf(lptv->item.pszText,"%s %s(&H%s)",VarName,temporary,temp2);
 | 
|---|
 | 90 |             }
 | 
|---|
 | 91 |             else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
 | 
|---|
 | 92 |         }
 | 
|---|
 | 93 |         else if(type==DEF_LONG){
 | 
|---|
 | 94 |             if(ReadProcessMemory(hDebugProcess,(void *)offset,&dwData,sizeof(DWORD),&dwAccessByte)){
 | 
|---|
 | 95 |                 sprintf(lptv->item.pszText,"%s %d(&H%X)",VarName,dwData,dwData);
 | 
|---|
 | 96 |             }
 | 
|---|
 | 97 |             else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
 | 
|---|
 | 98 |         }
 | 
|---|
 | 99 |         else if(type==DEF_DWORD||IsPtrType(type)){
 | 
|---|
 | 100 |             if(ReadProcessMemory(hDebugProcess,(void *)offset,&dwData,sizeof(DWORD),&dwAccessByte)){
 | 
|---|
 | 101 |                 sprintf(lptv->item.pszText,"%s %u(&H%X)",VarName,dwData,dwData);
 | 
|---|
 | 102 |             }
 | 
|---|
 | 103 |             else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
 | 
|---|
 | 104 |         }
 | 
|---|
| [55] | 105 |         else if(type==DEF_INTEGER || (isUnicode&&type==DEF_CHAR)){
 | 
|---|
| [3] | 106 |             if(ReadProcessMemory(hDebugProcess,(void *)offset,&wData,sizeof(WORD),&dwAccessByte)){
 | 
|---|
 | 107 |                 sprintf(lptv->item.pszText,"%s %d(&H%X)",VarName,(short)wData,(short)wData);
 | 
|---|
 | 108 |             }
 | 
|---|
 | 109 |             else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
 | 
|---|
 | 110 |         }
 | 
|---|
 | 111 |         else if(type==DEF_WORD){
 | 
|---|
 | 112 |             if(ReadProcessMemory(hDebugProcess,(void *)offset,&wData,sizeof(WORD),&dwAccessByte)){
 | 
|---|
 | 113 |                 sprintf(lptv->item.pszText,"%s %u(&H%X)",VarName,wData,wData);
 | 
|---|
 | 114 |             }
 | 
|---|
 | 115 |             else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
 | 
|---|
 | 116 |         }
 | 
|---|
| [55] | 117 |         else if(type==DEF_SBYTE || (isUnicode==false&&type==DEF_CHAR)){
 | 
|---|
| [3] | 118 |             if(ReadProcessMemory(hDebugProcess,(void *)offset,&byteData,sizeof(BYTE),&dwAccessByte)){
 | 
|---|
 | 119 |                 temporary[0]=byteData;
 | 
|---|
 | 120 |                 temporary[1]=0;
 | 
|---|
 | 121 |                 sprintf(lptv->item.pszText,"%s %d(&H%X)'%s'",VarName,(char)byteData,byteData,temporary);
 | 
|---|
 | 122 |             }
 | 
|---|
 | 123 |             else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
 | 
|---|
 | 124 |         }
 | 
|---|
 | 125 |         else if(type==DEF_BYTE){
 | 
|---|
 | 126 |             if(ReadProcessMemory(hDebugProcess,(void *)offset,&byteData,sizeof(BYTE),&dwAccessByte)){
 | 
|---|
 | 127 |                 temporary[0]=byteData;
 | 
|---|
 | 128 |                 temporary[1]=0;
 | 
|---|
 | 129 |                 sprintf(lptv->item.pszText,"%s %d(&H%X)'%s'",VarName,byteData,byteData,temporary);
 | 
|---|
 | 130 |             }
 | 
|---|
 | 131 |             else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
 | 
|---|
 | 132 |         }
 | 
|---|
| [36] | 133 |         else if(type==DEF_BOOLEAN){
 | 
|---|
 | 134 |             if(ReadProcessMemory(hDebugProcess,(void *)offset,&byteData,sizeof(BYTE),&dwAccessByte)){
 | 
|---|
 | 135 |                 if( byteData ) lstrcpy( temporary, "True" );
 | 
|---|
 | 136 |                 else lstrcpy( temporary, "False" );
 | 
|---|
 | 137 |                 sprintf(lptv->item.pszText,"%s %s",VarName,temporary);
 | 
|---|
 | 138 |             }
 | 
|---|
 | 139 |             else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
 | 
|---|
 | 140 |         }
 | 
|---|
| [3] | 141 |         lptv->item.iImage=2;
 | 
|---|
 | 142 |         lptv->item.iSelectedImage=2;
 | 
|---|
 | 143 |     }
 | 
|---|
 | 144 |     TreeView_InsertItem(hVarTree,lptv);
 | 
|---|
 | 145 | }
 | 
|---|
 | 146 | void VarList_Member(HWND hVarTree,HTREEITEM hParent,DWORD pTopOffset,CClass *pobj_c,BOOL bPtr){
 | 
|---|
 | 147 |     int i,i2;
 | 
|---|
 | 148 |     char VarData[VN_SIZE],VarName[VN_SIZE];
 | 
|---|
 | 149 |     TV_INSERTSTRUCT tv;
 | 
|---|
 | 150 | 
 | 
|---|
 | 151 |     memset(&tv,0,sizeof(TV_INSERTSTRUCT));
 | 
|---|
 | 152 |     tv.hInsertAfter=TVI_LAST;
 | 
|---|
 | 153 |     tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
 | 
|---|
 | 154 |     tv.hParent=hParent;
 | 
|---|
 | 155 |     tv.item.pszText=VarData;
 | 
|---|
 | 156 | 
 | 
|---|
 | 157 |     for(i=0;i<pobj_c->iMemberNum;i++){
 | 
|---|
 | 158 |         if(bPtr){
 | 
|---|
 | 159 |             lstrcpy(VarName,"->");
 | 
|---|
 | 160 |             lstrcat(VarName,pobj_c->ppobj_Member[i]->name);
 | 
|---|
 | 161 |         }
 | 
|---|
 | 162 |         else{
 | 
|---|
 | 163 |             lstrcpy(VarName,".");
 | 
|---|
 | 164 |             lstrcat(VarName,pobj_c->ppobj_Member[i]->name);
 | 
|---|
 | 165 |         }
 | 
|---|
 | 166 | 
 | 
|---|
| [63] | 167 |         LONG_PTR offset = pobj_c->GetMemberOffset( pobj_c->ppobj_Member[i]->name, &i2 );
 | 
|---|
| [3] | 168 | 
 | 
|---|
 | 169 |         if(pobj_c->ppobj_Member[i]->SubScripts[0]!=-1){
 | 
|---|
 | 170 |             //構造体内の配列
 | 
|---|
 | 171 |             sprintf(VarData,"%s %s(&H%X)",VarName,STRING_ARRAY,pTopOffset+offset);
 | 
|---|
 | 172 |             tv.item.iImage=0;
 | 
|---|
 | 173 |             tv.item.iSelectedImage=0;
 | 
|---|
 | 174 |             hParent=TreeView_InsertItem(hVarTree,&tv);
 | 
|---|
 | 175 | 
 | 
|---|
 | 176 |             VarList_Array(hVarTree,hParent,
 | 
|---|
 | 177 |                 pTopOffset+offset,
 | 
|---|
 | 178 |                 pobj_c->ppobj_Member[i]->TypeInfo.type,
 | 
|---|
 | 179 |                 pobj_c->ppobj_Member[i]->SubScripts,
 | 
|---|
 | 180 |                 pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex);
 | 
|---|
 | 181 |         }
 | 
|---|
 | 182 |         else{
 | 
|---|
 | 183 |             //メンバ変数
 | 
|---|
 | 184 |             VarList_Insert(hVarTree,
 | 
|---|
 | 185 |                 &tv,
 | 
|---|
 | 186 |                 VarName,
 | 
|---|
 | 187 |                 pobj_c->ppobj_Member[i]->TypeInfo.type,
 | 
|---|
 | 188 |                 pTopOffset+offset,
 | 
|---|
 | 189 |                 pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex);
 | 
|---|
 | 190 |         }
 | 
|---|
 | 191 |     }
 | 
|---|
 | 192 | }
 | 
|---|
 | 193 | int VarList_Array(HWND hVarTree,HTREEITEM hParent,DWORD offset,int type,int *SubScripts,LONG_PTR lpIndex){
 | 
|---|
 | 194 |     int i,i2,i3,ElementNum,MemCounter,UseCount[255],TypeSize;
 | 
|---|
 | 195 |     char temporary[VN_SIZE],temp2[DIGIT_SIZE];
 | 
|---|
 | 196 | 
 | 
|---|
 | 197 |     TV_INSERTSTRUCT tv;
 | 
|---|
 | 198 |     memset(&tv,0,sizeof(TV_INSERTSTRUCT));
 | 
|---|
 | 199 |     tv.hInsertAfter=TVI_LAST;
 | 
|---|
 | 200 |     tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
 | 
|---|
 | 201 |     tv.hParent=hParent;
 | 
|---|
 | 202 |     tv.item.pszText=temporary;
 | 
|---|
 | 203 | 
 | 
|---|
 | 204 |     TypeSize=GetTypeSize(type,lpIndex);
 | 
|---|
 | 205 | 
 | 
|---|
 | 206 |     for(i=0;i<255;i++){
 | 
|---|
 | 207 |         if(SubScripts[i]==-1) break;
 | 
|---|
 | 208 |         UseCount[i]=0;
 | 
|---|
 | 209 |     }
 | 
|---|
 | 210 |     UseCount[i]=-2;
 | 
|---|
 | 211 |     MemCounter=0;
 | 
|---|
 | 212 |     while(1){
 | 
|---|
 | 213 |         UseCount[i]++;
 | 
|---|
 | 214 |         for(ElementNum=0;SubScripts[i-ElementNum]<UseCount[i-ElementNum];ElementNum++){
 | 
|---|
 | 215 |             UseCount[i-ElementNum]=0;
 | 
|---|
 | 216 |             if(i-ElementNum-1<0) return MemCounter;
 | 
|---|
 | 217 |             UseCount[i-ElementNum-1]++;
 | 
|---|
 | 218 |         }
 | 
|---|
 | 219 | 
 | 
|---|
 | 220 |         if(MemCounter<50){
 | 
|---|
 | 221 |             temporary[0]='[';
 | 
|---|
 | 222 |             temporary[1]=0;
 | 
|---|
 | 223 |             for(i2=0;i2<i;i2++){
 | 
|---|
 | 224 |                 sprintf(temp2,"%d",UseCount[i2]);
 | 
|---|
 | 225 |                 lstrcat(temporary,temp2);
 | 
|---|
 | 226 |                 lstrcat(temporary,",");
 | 
|---|
 | 227 |             }
 | 
|---|
 | 228 |             i3=lstrlen(temporary);
 | 
|---|
 | 229 |             temporary[i3-1]=']';
 | 
|---|
 | 230 |             temporary[i3]=0;
 | 
|---|
 | 231 | 
 | 
|---|
 | 232 |             VarList_Insert(hVarTree,&tv,temporary,type,offset+MemCounter*TypeSize,lpIndex);
 | 
|---|
 | 233 |         }
 | 
|---|
 | 234 | 
 | 
|---|
 | 235 |         MemCounter++;
 | 
|---|
 | 236 |         if(MemCounter==50){
 | 
|---|
 | 237 |             lstrcpy(tv.item.pszText,"...");
 | 
|---|
 | 238 |             TreeView_InsertItem(hVarTree,&tv);
 | 
|---|
 | 239 |         }
 | 
|---|
 | 240 |     }
 | 
|---|
 | 241 |     return 0;
 | 
|---|
 | 242 | }
 | 
|---|
 | 243 | void RefreshGlobalVar(void){
 | 
|---|
 | 244 |     extern DWORD ImageBase;
 | 
|---|
 | 245 |     int i;
 | 
|---|
 | 246 |     char temporary[VN_SIZE];
 | 
|---|
 | 247 |     TV_INSERTSTRUCT tv;
 | 
|---|
 | 248 |     HTREEITEM hParent;
 | 
|---|
 | 249 | 
 | 
|---|
 | 250 |     TreeView_DeleteAllItems(hVarTree_Global);
 | 
|---|
 | 251 | 
 | 
|---|
 | 252 |     memset(&tv,0,sizeof(TV_INSERTSTRUCT));
 | 
|---|
 | 253 |     tv.hInsertAfter=TVI_LAST;
 | 
|---|
 | 254 |     tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
 | 
|---|
 | 255 |     tv.hParent=TVI_ROOT;
 | 
|---|
 | 256 |     tv.item.pszText=temporary;
 | 
|---|
 | 257 | 
 | 
|---|
 | 258 |     extern HANDLE hDebugProcess;
 | 
|---|
 | 259 |     extern int MemPos_RWSection;
 | 
|---|
 | 260 |     extern int MaxGlobalVarNum;
 | 
|---|
 | 261 |     extern VARIABLE *GlobalVar;
 | 
|---|
 | 262 | 
 | 
|---|
 | 263 |     for(i=0;i<MaxGlobalVarNum;i++){
 | 
|---|
 | 264 |         VARIABLE *pVar=&GlobalVar[i];
 | 
|---|
 | 265 | 
 | 
|---|
 | 266 |         //スコープ外の場合は無視
 | 
|---|
 | 267 |         if(pVar->ScopeLevel!=0){
 | 
|---|
 | 268 |             if(rva_to_real(pVar->ScopeStartAddress) <= pobj_dti->lplpObp[0]  &&
 | 
|---|
 | 269 |                 pobj_dti->lplpObp[0] < rva_to_real(pVar->ScopeEndAddress)){
 | 
|---|
 | 270 |                 //範囲内
 | 
|---|
 | 271 |             }
 | 
|---|
 | 272 |             else{
 | 
|---|
 | 273 |                 //範囲外
 | 
|---|
 | 274 |                 continue;
 | 
|---|
 | 275 |             }
 | 
|---|
 | 276 |         }
 | 
|---|
 | 277 | 
 | 
|---|
 | 278 |         if(!pobj_nv->bShow_DefaultSystem_Var){
 | 
|---|
 | 279 |             if(memcmp(pVar->name,"_System_",8)==0||
 | 
|---|
 | 280 |                 memcmp(pVar->name,"_DebugSys_",10)==0||
 | 
|---|
 | 281 |                 memcmp(pVar->name,"_PromptSys_",11)==0) continue;
 | 
|---|
 | 282 |         }
 | 
|---|
 | 283 |         if(!pobj_nv->bShow_Rad_Var){
 | 
|---|
 | 284 |             if(memcmp(pVar->name,"_RadSys_",8)==0) continue;
 | 
|---|
 | 285 |         }
 | 
|---|
 | 286 |         if(!pobj_nv->bShow_GUID_Var){
 | 
|---|
 | 287 |             if(memcmp(pVar->name,"GUID_",5)==0||
 | 
|---|
 | 288 |                 memcmp(pVar->name,"IID_",4)==0||
 | 
|---|
 | 289 |                 memcmp(pVar->name,"CLSID_",6)==0) continue;
 | 
|---|
 | 290 |         }
 | 
|---|
 | 291 | 
 | 
|---|
 | 292 |         //静的メンバ
 | 
|---|
 | 293 |         if(strstr(pVar->name,".")) continue;
 | 
|---|
 | 294 | 
 | 
|---|
 | 295 |         if(pVar->bArray){
 | 
|---|
 | 296 |             sprintf(temporary,"%s %s(&H%X)",
 | 
|---|
 | 297 |                 pVar->name,
 | 
|---|
 | 298 |                 STRING_ARRAY,
 | 
|---|
 | 299 |                 ImageBase+MemPos_RWSection+pVar->offset);
 | 
|---|
 | 300 |             tv.item.iImage=0;
 | 
|---|
 | 301 |             tv.item.iSelectedImage=0;
 | 
|---|
 | 302 |             hParent=TreeView_InsertItem(hVarTree_Global,&tv);
 | 
|---|
 | 303 | 
 | 
|---|
 | 304 |             VarList_Array(hVarTree_Global,hParent,
 | 
|---|
 | 305 |                 ImageBase+MemPos_RWSection+pVar->offset,
 | 
|---|
 | 306 |                 pVar->type,
 | 
|---|
 | 307 |                 pVar->SubScripts,
 | 
|---|
 | 308 |                 pVar->u.index);
 | 
|---|
 | 309 |         }
 | 
|---|
 | 310 |         else{
 | 
|---|
 | 311 |             VarList_Insert(hVarTree_Global,
 | 
|---|
 | 312 |                 &tv,
 | 
|---|
 | 313 |                 pVar->name,
 | 
|---|
 | 314 |                 pVar->type,
 | 
|---|
 | 315 |                 ImageBase+MemPos_RWSection+pVar->offset,
 | 
|---|
 | 316 |                 pVar->u.index);
 | 
|---|
 | 317 |         }
 | 
|---|
 | 318 |     }
 | 
|---|
 | 319 | }
 | 
|---|
 | 320 | void RefreshLocalVar(void){
 | 
|---|
 | 321 |     int i,i2,i3,sw;
 | 
|---|
 | 322 |     char temporary[VN_SIZE];
 | 
|---|
 | 323 |     TV_INSERTSTRUCT tv;
 | 
|---|
 | 324 |     HTREEITEM hParent;
 | 
|---|
 | 325 |     ULONG_PTR lpData;
 | 
|---|
 | 326 |     LONG_PTR offset;
 | 
|---|
 | 327 |     ULONG_PTR lpAccBytes;
 | 
|---|
 | 328 | 
 | 
|---|
 | 329 |     TreeView_DeleteAllItems(hVarTree_Local);
 | 
|---|
 | 330 | 
 | 
|---|
 | 331 |     memset(&tv,0,sizeof(TV_INSERTSTRUCT));
 | 
|---|
 | 332 |     tv.hInsertAfter=TVI_LAST;
 | 
|---|
 | 333 |     tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
 | 
|---|
 | 334 |     tv.hParent=TVI_ROOT;
 | 
|---|
 | 335 |     tv.item.pszText=temporary;
 | 
|---|
 | 336 | 
 | 
|---|
 | 337 |     extern HANDLE hDebugProcess;
 | 
|---|
 | 338 |     extern HWND hDebugWnd;
 | 
|---|
 | 339 |     i2=SendDlgItemMessage(hDebugWnd,IDC_PROCCOMBO,CB_GETCURSEL,0,0);
 | 
|---|
 | 340 |     i2=pobj_dti->iProcLevel-i2;
 | 
|---|
 | 341 | 
 | 
|---|
 | 342 |     if(pobj_dti->lplpSpBase[i2]==0) return;
 | 
|---|
 | 343 | 
 | 
|---|
 | 344 |     extern SUBINFO **ppSubHash;
 | 
|---|
 | 345 |     SUBINFO *psi;
 | 
|---|
 | 346 |     for(i3=0,sw=0;i3<MAX_HASH;i3++){
 | 
|---|
 | 347 |         psi=ppSubHash[i3];
 | 
|---|
 | 348 |         while(psi){
 | 
|---|
 | 349 |             if(rva_to_real(psi->CompileAddress) <= pobj_dti->lplpObp[i2]  &&
 | 
|---|
 | 350 |                 pobj_dti->lplpObp[i2] < rva_to_real(psi->EndOpAddr)){
 | 
|---|
 | 351 |                 sw=1;
 | 
|---|
 | 352 |                 break;
 | 
|---|
 | 353 |             }
 | 
|---|
 | 354 | 
 | 
|---|
 | 355 |             psi=psi->pNextData;
 | 
|---|
 | 356 |         }
 | 
|---|
 | 357 |         if(sw) break;
 | 
|---|
 | 358 |     }
 | 
|---|
 | 359 |     if(!psi) return;
 | 
|---|
 | 360 | 
 | 
|---|
 | 361 |     for(i=0;i<psi->VarNum;i++){
 | 
|---|
 | 362 |         VARIABLE *pVar=&psi->pVar[i];
 | 
|---|
 | 363 | 
 | 
|---|
 | 364 |         //スコープ外の場合は無視
 | 
|---|
 | 365 |         if(pVar->ScopeLevel!=0){
 | 
|---|
 | 366 |             if(rva_to_real(pVar->ScopeStartAddress) <= pobj_dti->lplpObp[i2]  &&
 | 
|---|
 | 367 |                 pobj_dti->lplpObp[i2] < rva_to_real(pVar->ScopeEndAddress)){
 | 
|---|
 | 368 |                 //範囲内
 | 
|---|
 | 369 |             }
 | 
|---|
 | 370 |             else{
 | 
|---|
 | 371 |                 //範囲外
 | 
|---|
 | 372 |                 continue;
 | 
|---|
 | 373 |             }
 | 
|---|
 | 374 |         }
 | 
|---|
 | 375 | 
 | 
|---|
 | 376 |         if(pVar->bArray){
 | 
|---|
 | 377 |             sprintf(temporary,"%s %s(&H%X)",
 | 
|---|
 | 378 |                 pVar->name,
 | 
|---|
 | 379 |                 STRING_ARRAY,
 | 
|---|
 | 380 |                 pobj_dti->lplpSpBase[i2]+pVar->offset);
 | 
|---|
 | 381 |             tv.item.iImage=0;
 | 
|---|
 | 382 |             tv.item.iSelectedImage=0;
 | 
|---|
 | 383 |             hParent=TreeView_InsertItem(hVarTree_Local,&tv);
 | 
|---|
 | 384 | 
 | 
|---|
 | 385 |             VarList_Array(hVarTree_Local,hParent,
 | 
|---|
 | 386 |                 pobj_dti->lplpSpBase[i2]+pVar->offset,
 | 
|---|
 | 387 |                 pVar->type,
 | 
|---|
 | 388 |                 pVar->SubScripts,
 | 
|---|
 | 389 |                 pVar->u.index);
 | 
|---|
 | 390 |         }
 | 
|---|
 | 391 |         else{
 | 
|---|
 | 392 |             offset=pobj_dti->lplpSpBase[i2]+pVar->offset;
 | 
|---|
 | 393 |             if(pVar->fRef){
 | 
|---|
 | 394 |                 ReadProcessMemory(hDebugProcess,(void *)offset,&lpData,sizeof(ULONG_PTR),&lpAccBytes);
 | 
|---|
 | 395 |                 offset=lpData;
 | 
|---|
 | 396 |             }
 | 
|---|
 | 397 |             VarList_Insert(hVarTree_Local,&tv,
 | 
|---|
 | 398 |                 pVar->name,
 | 
|---|
 | 399 |                 pVar->type,
 | 
|---|
 | 400 |                 offset,
 | 
|---|
 | 401 |                 pVar->u.index);
 | 
|---|
 | 402 |         }
 | 
|---|
 | 403 |     }
 | 
|---|
 | 404 | 
 | 
|---|
 | 405 | 
 | 
|---|
 | 406 | 
 | 
|---|
 | 407 |     /////////////////////////////
 | 
|---|
 | 408 |     // Thisオブジェクトのリスト
 | 
|---|
 | 409 |     /////////////////////////////
 | 
|---|
 | 410 | 
 | 
|---|
 | 411 |     TreeView_DeleteAllItems(hVarTree_This);
 | 
|---|
 | 412 |     if(!psi->pobj_ParentClass) return;
 | 
|---|
 | 413 | 
 | 
|---|
 | 414 |     //Thisポインタを取得
 | 
|---|
 | 415 |     LONG_PTR pThis;
 | 
|---|
 | 416 |     for(i=0;i<psi->VarNum;i++){
 | 
|---|
 | 417 |         if(lstrcmp(psi->pVar[i].name,"_System_LocalThis")==0) break;
 | 
|---|
 | 418 |     }
 | 
|---|
 | 419 |     if(i==psi->VarNum) return;
 | 
|---|
 | 420 |     lpData=pobj_dti->lplpSpBase[i2]+psi->pVar[i].offset;
 | 
|---|
 | 421 |     ReadProcessMemory(hDebugProcess,(void *)lpData,&pThis,sizeof(LONG_PTR),&lpAccBytes);
 | 
|---|
 | 422 | 
 | 
|---|
 | 423 |     for(i=0;i<psi->pobj_ParentClass->iMemberNum;i++){
 | 
|---|
| [63] | 424 |         offset = psi->pobj_ParentClass->GetMemberOffset( psi->pobj_ParentClass->ppobj_Member[i]->name, &i2 );
 | 
|---|
| [3] | 425 | 
 | 
|---|
 | 426 |         if(psi->pobj_ParentClass->ppobj_Member[i]->SubScripts[0]!=-1){
 | 
|---|
 | 427 |             //配列
 | 
|---|
 | 428 |             sprintf(temporary,"%s %s(&H%X)",
 | 
|---|
 | 429 |                 psi->pobj_ParentClass->ppobj_Member[i]->name,
 | 
|---|
 | 430 |                 STRING_ARRAY,
 | 
|---|
 | 431 |                 offset);
 | 
|---|
 | 432 |             tv.item.iImage=0;
 | 
|---|
 | 433 |             tv.item.iSelectedImage=0;
 | 
|---|
 | 434 |             hParent=TreeView_InsertItem(hVarTree_This,&tv);
 | 
|---|
 | 435 | 
 | 
|---|
 | 436 |             VarList_Array(hVarTree_This,hParent,
 | 
|---|
 | 437 |                 pThis+offset,
 | 
|---|
 | 438 |                 psi->pobj_ParentClass->ppobj_Member[i]->TypeInfo.type,
 | 
|---|
 | 439 |                 psi->pobj_ParentClass->ppobj_Member[i]->SubScripts,
 | 
|---|
 | 440 |                 psi->pobj_ParentClass->ppobj_Member[i]->TypeInfo.u.lpIndex);
 | 
|---|
 | 441 |         }
 | 
|---|
 | 442 |         else{
 | 
|---|
 | 443 |             VarList_Insert(hVarTree_This,&tv,
 | 
|---|
 | 444 |                 psi->pobj_ParentClass->ppobj_Member[i]->name,
 | 
|---|
 | 445 |                 psi->pobj_ParentClass->ppobj_Member[i]->TypeInfo.type,
 | 
|---|
 | 446 |                 pThis+offset,
 | 
|---|
 | 447 |                 psi->pobj_ParentClass->ppobj_Member[i]->TypeInfo.u.lpIndex);
 | 
|---|
 | 448 |         }
 | 
|---|
 | 449 |     }
 | 
|---|
 | 450 | }
 | 
|---|
 | 451 | void RefreshGlobalVar_with_WindowLock(void){
 | 
|---|
 | 452 |     extern HWND hDebugWnd;
 | 
|---|
 | 453 | 
 | 
|---|
 | 454 |     //処理時間を短くするため、一時的に非表示にする
 | 
|---|
 | 455 |     LockWindowUpdate(hDebugWnd);
 | 
|---|
 | 456 |     ShowWindow(GetParent(hVarTree_Global),SW_HIDE);
 | 
|---|
 | 457 | 
 | 
|---|
 | 458 |     //リフレッシュ
 | 
|---|
 | 459 |     RefreshGlobalVar();
 | 
|---|
 | 460 | 
 | 
|---|
 | 461 |     LockWindowUpdate(NULL);
 | 
|---|
 | 462 |     ShowWindow(GetParent(hVarTree_Global),SW_SHOW);
 | 
|---|
 | 463 | }
 | 
|---|
 | 464 | void RefreshLocalVar_with_WindowLock(void){
 | 
|---|
 | 465 |     extern HWND hDebugWnd;
 | 
|---|
 | 466 | 
 | 
|---|
 | 467 |     //処理時間を短くするため、一時的に非表示にする
 | 
|---|
 | 468 |     LockWindowUpdate(hDebugWnd);
 | 
|---|
 | 469 |     ShowWindow(GetParent(hVarTree_Local),SW_HIDE);
 | 
|---|
 | 470 | 
 | 
|---|
 | 471 |     //リフレッシュ
 | 
|---|
 | 472 |     RefreshLocalVar();
 | 
|---|
 | 473 | 
 | 
|---|
 | 474 |     LockWindowUpdate(NULL);
 | 
|---|
 | 475 |     ShowWindow(GetParent(hVarTree_Local),SW_SHOW);
 | 
|---|
 | 476 | }
 | 
|---|
 | 477 | 
 | 
|---|
 | 478 | void SetCalcToWatchList(HWND hListView,int iItem,char *buffer){
 | 
|---|
 | 479 |     int i;
 | 
|---|
 | 480 |     char temporary[255],temp2[255];
 | 
|---|
 | 481 | 
 | 
|---|
 | 482 |     //エスケープシーケンスをセット
 | 
|---|
 | 483 |     SetEscapeSequenceFormat(buffer);
 | 
|---|
 | 484 | 
 | 
|---|
 | 485 |     //ブランクを除去
 | 
|---|
 | 486 |     KillStringSpaces(buffer);
 | 
|---|
 | 487 | 
 | 
|---|
 | 488 |     //カッコを相互チェック
 | 
|---|
 | 489 |     if(!CheckParenthesis2(buffer)){
 | 
|---|
 | 490 |         ListView_SetItemText(hListView,iItem,1,"式の解析に失敗");
 | 
|---|
 | 491 |         return;
 | 
|---|
 | 492 |     }
 | 
|---|
 | 493 | 
 | 
|---|
 | 494 |     double dbl;
 | 
|---|
 | 495 |     _int64 i64data;
 | 
|---|
 | 496 |     i=StaticCalculation(true, buffer,0,&i64data,0,1);
 | 
|---|
 | 497 |     if(IsRealNumberType(i)){
 | 
|---|
 | 498 |         memcpy(&dbl,&i64data,sizeof(double));
 | 
|---|
 | 499 |     }
 | 
|---|
 | 500 | 
 | 
|---|
 | 501 |     if(i==0){
 | 
|---|
 | 502 |         ListView_SetItemText(hListView,iItem,1,"式の解析に失敗");
 | 
|---|
 | 503 |     }
 | 
|---|
 | 504 |     else if(i==-1){
 | 
|---|
 | 505 |         ListView_SetItemText(hListView,iItem,1,STRING_CANNOTACCESS);
 | 
|---|
 | 506 |     }
 | 
|---|
 | 507 |     else{
 | 
|---|
 | 508 |         if(IsRealNumberType(i))
 | 
|---|
 | 509 |             sprintf(temporary,"%.15g (&H%08X)",dbl,(int)dbl);
 | 
|---|
 | 510 |         else if(Is64Type(i)){
 | 
|---|
 | 511 |             _i64toa(i64data,temporary,10);
 | 
|---|
 | 512 |             _i64toa(i64data,temp2,16);
 | 
|---|
 | 513 |             CharUpper(temp2);
 | 
|---|
 | 514 |             sprintf(temporary+lstrlen(temporary)," (&H%s)",temp2);
 | 
|---|
 | 515 |         }
 | 
|---|
 | 516 |         else sprintf(temporary,"%d (&H%08X)",(long)i64data,(long)i64data);
 | 
|---|
 | 517 | 
 | 
|---|
 | 518 |         ListView_SetItemText(hListView,iItem,1,temporary);
 | 
|---|
 | 519 |     }
 | 
|---|
 | 520 | }
 | 
|---|
 | 521 | void RefreshWatchList(void){
 | 
|---|
 | 522 |     extern HWND hDebugWnd;
 | 
|---|
 | 523 |     HWND hListView;
 | 
|---|
 | 524 |     int i,i2;
 | 
|---|
 | 525 |     char temporary[VN_SIZE];
 | 
|---|
 | 526 | 
 | 
|---|
 | 527 |     hListView=GetDlgItem(hDebugWnd,IDC_WATCHLIST);
 | 
|---|
 | 528 |     i2=ListView_GetItemCount(hListView);
 | 
|---|
 | 529 |     for(i=0;i<i2-1;i++){
 | 
|---|
 | 530 |         ListView_GetItemText(hListView,i,0,temporary,VN_SIZE);
 | 
|---|
 | 531 | 
 | 
|---|
 | 532 |         //演算結果を表示
 | 
|---|
 | 533 |         SetCalcToWatchList(hListView,i,temporary);
 | 
|---|
 | 534 |     }
 | 
|---|
 | 535 | }
 | 
|---|
 | 536 | 
 | 
|---|
 | 537 | BOOL SetDebugProcCombo(HWND hProcCombo){
 | 
|---|
 | 538 |     int i2,i3;
 | 
|---|
 | 539 |     char temporary[255];
 | 
|---|
 | 540 | 
 | 
|---|
 | 541 |     extern DWORD ImageBase;
 | 
|---|
 | 542 |     extern int MemPos_CodeSection;
 | 
|---|
 | 543 | 
 | 
|---|
 | 544 |     //行番号情報
 | 
|---|
 | 545 |     extern int MaxLineInfoNum;
 | 
|---|
 | 546 |     extern LINEINFO *pLineInfo;
 | 
|---|
 | 547 |     for(i3=0;i3<(int)pobj_dti->iProcLevel+1;i3++){
 | 
|---|
 | 548 |         for(i2=0;i2<MaxLineInfoNum-1;i2++){
 | 
|---|
 | 549 |             if((pLineInfo[i2].TopObp+ImageBase+MemPos_CodeSection)<=pobj_dti->lplpObp[i3]&&
 | 
|---|
 | 550 |                 pobj_dti->lplpObp[i3]<=(pLineInfo[i2+1].TopObp+ImageBase+MemPos_CodeSection)) break;
 | 
|---|
 | 551 |         }
 | 
|---|
 | 552 |         if(i2==MaxLineInfoNum) pobj_dti->lpdwCp[i3]=-1;
 | 
|---|
 | 553 |         else{
 | 
|---|
 | 554 |             pobj_dti->lpdwCp[i3]=pLineInfo[i2].TopCp;
 | 
|---|
 | 555 |         }
 | 
|---|
 | 556 |     }
 | 
|---|
 | 557 |     for(i3=0;i3<(int)pobj_dti->iProcLevel+1;i3++){
 | 
|---|
 | 558 |         if(pobj_dti->lpdwCp[i3]==-1){
 | 
|---|
 | 559 |             pobj_dti->iProcLevel--;
 | 
|---|
 | 560 |             for(i2=i3;i2<(int)pobj_dti->iProcLevel+1;i2++){
 | 
|---|
 | 561 |                 pobj_dti->lplpObp[i2]=pobj_dti->lplpObp[i2+1];
 | 
|---|
 | 562 |                 pobj_dti->lplpSpBase[i2]=pobj_dti->lplpSpBase[i2+1];
 | 
|---|
 | 563 |                 pobj_dti->lpdwCp[i2]=pobj_dti->lpdwCp[i2+1];
 | 
|---|
 | 564 |             }
 | 
|---|
 | 565 |             i3--;
 | 
|---|
 | 566 |             continue;
 | 
|---|
 | 567 |         }
 | 
|---|
 | 568 |     }
 | 
|---|
 | 569 | 
 | 
|---|
 | 570 |     if(!GetLineNum(pobj_dti->lpdwCp[pobj_dti->iProcLevel],&i2,temporary)){
 | 
|---|
 | 571 |         extern HWND hMainDlg;
 | 
|---|
 | 572 |         //"デバッグ情報の取得に失敗"
 | 
|---|
 | 573 |         MessageBox(hMainDlg,STRING_DEBUG_FAILED,"ActiveBasic error",MB_OK);
 | 
|---|
 | 574 |         return 0;
 | 
|---|
 | 575 |     }
 | 
|---|
 | 576 |     ShowErrorLine(i2,temporary);
 | 
|---|
 | 577 | 
 | 
|---|
 | 578 |     //プロシージャ コンボボックス
 | 
|---|
 | 579 |     extern SUBINFO **ppSubHash;
 | 
|---|
 | 580 |     SUBINFO *psi;
 | 
|---|
 | 581 |     int sw;
 | 
|---|
 | 582 |     SendMessage(hProcCombo,CB_RESETCONTENT,0,0);
 | 
|---|
 | 583 |     for(i2=pobj_dti->iProcLevel;i2>=0;i2--){
 | 
|---|
 | 584 |         for(i3=0,sw=0;i3<MAX_HASH;i3++){
 | 
|---|
 | 585 |             psi=ppSubHash[i3];
 | 
|---|
 | 586 |             while(psi){
 | 
|---|
 | 587 |                 if(rva_to_real(psi->CompileAddress) <= pobj_dti->lplpObp[i2]  &&
 | 
|---|
 | 588 |                     pobj_dti->lplpObp[i2] < rva_to_real(psi->EndOpAddr)){
 | 
|---|
 | 589 |                     lstrcpy(temporary,psi->name);
 | 
|---|
 | 590 |                     sw=1;
 | 
|---|
 | 591 |                     break;
 | 
|---|
 | 592 |                 }
 | 
|---|
 | 593 |                 psi=psi->pNextData;
 | 
|---|
 | 594 |             }
 | 
|---|
 | 595 |             if(sw) break;
 | 
|---|
 | 596 |         }
 | 
|---|
 | 597 |         if(!psi){
 | 
|---|
 | 598 |             if(i2==0){
 | 
|---|
 | 599 |                 lstrcpy(temporary,"Global");
 | 
|---|
 | 600 |                 pobj_dti->lplpSpBase[i2]=0;
 | 
|---|
 | 601 |             }
 | 
|---|
 | 602 |             else lstrcpy(temporary,"error");
 | 
|---|
 | 603 |         }
 | 
|---|
 | 604 |         SendMessage(hProcCombo,CB_ADDSTRING,0,(long)temporary);
 | 
|---|
 | 605 |     }
 | 
|---|
 | 606 |     SendMessage(hProcCombo,CB_SETCURSEL,0,0);
 | 
|---|
 | 607 | 
 | 
|---|
 | 608 |     return pobj_dti->iProcLevel;
 | 
|---|
 | 609 | }
 | 
|---|
 | 610 | 
 | 
|---|
 | 611 | //IDC_THREADCOMBOプロシージャ
 | 
|---|
 | 612 | LRESULT CALLBACK ThreadComboProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
 | 
|---|
 | 613 |     extern WNDPROC OldThreadComboProc;
 | 
|---|
 | 614 |     int i2;
 | 
|---|
 | 615 |     DWORD dwThreadID;
 | 
|---|
 | 616 |     char temporary[255];
 | 
|---|
 | 617 | 
 | 
|---|
 | 618 |     switch(message){
 | 
|---|
 | 619 |         case WM_COMMAND:
 | 
|---|
 | 620 |             if(HIWORD(wParam)==CBN_SELCHANGE){
 | 
|---|
 | 621 |                 SendMessage(hwnd,CB_GETLBTEXT,SendMessage(hwnd,CB_GETCURSEL,0,0),(long)temporary);
 | 
|---|
 | 622 |                 sscanf(temporary+2,"%X",&dwThreadID);
 | 
|---|
 | 623 | 
 | 
|---|
 | 624 |                 i2=0;
 | 
|---|
 | 625 |                 while(_DebugSys_dwThreadID[i2]!=dwThreadID) i2++;
 | 
|---|
 | 626 | 
 | 
|---|
 | 627 |                 //次回のステップ実行対象を指定
 | 
|---|
 | 628 |                 extern int NextStepThreadNum;
 | 
|---|
 | 629 |                 NextStepThreadNum=i2;
 | 
|---|
 | 630 | 
 | 
|---|
 | 631 |                 //スレッド情報をリフレッシュ
 | 
|---|
 | 632 |                 pobj_dti->Reflesh(i2);
 | 
|---|
 | 633 | 
 | 
|---|
 | 634 |                 SetDebugProcCombo(GetDlgItem(GetParent(hwnd),IDC_PROCCOMBO));
 | 
|---|
 | 635 | 
 | 
|---|
 | 636 |                 SendDlgItemMessage(GetParent(hwnd),IDC_PROCCOMBO,WM_COMMAND,MAKELONG(0,CBN_SELCHANGE),0);
 | 
|---|
 | 637 |             }
 | 
|---|
 | 638 |             break;
 | 
|---|
 | 639 |     }
 | 
|---|
 | 640 |     return CallWindowProc(OldThreadComboProc,hwnd,message,wParam,lParam);
 | 
|---|
 | 641 | }
 | 
|---|
 | 642 | //IDC_PROCCOMBOプロシージャ
 | 
|---|
 | 643 | LRESULT CALLBACK ProcComboProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
 | 
|---|
 | 644 |     extern WNDPROC OldProcComboProc;
 | 
|---|
 | 645 |     int i2,i3;
 | 
|---|
 | 646 |     char temporary[MAX_PATH];
 | 
|---|
 | 647 | 
 | 
|---|
 | 648 |     switch(message){
 | 
|---|
 | 649 |         case WM_COMMAND:
 | 
|---|
 | 650 |             if(HIWORD(wParam)==CBN_SELCHANGE){
 | 
|---|
 | 651 |                 i2=SendMessage(hwnd,CB_GETCURSEL,0,0);
 | 
|---|
 | 652 |                 GetLineNum(pobj_dti->lpdwCp[pobj_dti->iProcLevel-i2],&i3,temporary);
 | 
|---|
 | 653 |                 ShowErrorLine(i3,temporary);
 | 
|---|
 | 654 | 
 | 
|---|
 | 655 |                 RefreshLocalVar_with_WindowLock();
 | 
|---|
 | 656 |             }
 | 
|---|
 | 657 |             break;
 | 
|---|
 | 658 |     }
 | 
|---|
 | 659 |     return CallWindowProc(OldProcComboProc,hwnd,message,wParam,lParam);
 | 
|---|
 | 660 | }
 | 
|---|
 | 661 | void InitVarList(DWORD dwThreadId){
 | 
|---|
 | 662 |     extern HWND hDebugWnd;
 | 
|---|
 | 663 |     int i2,i3,i5;
 | 
|---|
 | 664 |     char temporary[255];
 | 
|---|
 | 665 | 
 | 
|---|
 | 666 | 
 | 
|---|
 | 667 |     //スレッド
 | 
|---|
 | 668 |     SendDlgItemMessage(hDebugWnd,IDC_THREADCOMBO,CB_RESETCONTENT,0,0);
 | 
|---|
 | 669 |     extern DWORD _DebugSys_dwThreadID[256];
 | 
|---|
 | 670 |     for(i2=0;i2<256;i2++){
 | 
|---|
 | 671 |         if(_DebugSys_dwThreadID[i2]){
 | 
|---|
 | 672 |             sprintf(temporary,"&H%08X",_DebugSys_dwThreadID[i2]);
 | 
|---|
 | 673 |             SendDlgItemMessage(hDebugWnd,IDC_THREADCOMBO,CB_ADDSTRING,0,(LPARAM)temporary);
 | 
|---|
 | 674 |             if(_DebugSys_dwThreadID[i2]==dwThreadId){
 | 
|---|
 | 675 |                 extern int NextStepThreadNum;
 | 
|---|
 | 676 |                 NextStepThreadNum=i2;
 | 
|---|
 | 677 |             }
 | 
|---|
 | 678 |         }
 | 
|---|
 | 679 |     }
 | 
|---|
 | 680 |     sprintf(temporary,"&H%08X",dwThreadId);
 | 
|---|
 | 681 |     i5=(int)SendDlgItemMessage(hDebugWnd,IDC_THREADCOMBO,CB_FINDSTRING,0,(LPARAM)temporary);
 | 
|---|
 | 682 |     SendDlgItemMessage(hDebugWnd,IDC_THREADCOMBO,CB_SETCURSEL,i5,0);
 | 
|---|
 | 683 | 
 | 
|---|
 | 684 |     i2=SetDebugProcCombo(GetDlgItem(hDebugWnd,IDC_PROCCOMBO));
 | 
|---|
 | 685 | 
 | 
|---|
 | 686 | 
 | 
|---|
 | 687 |     ///////////////////////////////////////////////
 | 
|---|
 | 688 |     // 実行中のプロシージャのローカル変数をセット
 | 
|---|
 | 689 |     ///////////////////////////////////////////////
 | 
|---|
 | 690 | 
 | 
|---|
 | 691 |     extern VARIABLE *LocalVar;
 | 
|---|
 | 692 |     extern int MaxLocalVarNum;
 | 
|---|
 | 693 |     int sw;
 | 
|---|
 | 694 | 
 | 
|---|
 | 695 |     MaxLocalVarNum=0;
 | 
|---|
 | 696 |     pobj_CompilingClass=0;
 | 
|---|
 | 697 | 
 | 
|---|
 | 698 |     i2=SendDlgItemMessage(hDebugWnd,IDC_PROCCOMBO,CB_GETCURSEL,0,0);
 | 
|---|
 | 699 |     i2=pobj_dti->iProcLevel-i2;
 | 
|---|
 | 700 | 
 | 
|---|
 | 701 |     if(pobj_dti->lplpSpBase[i2]){
 | 
|---|
 | 702 |         extern SUBINFO **ppSubHash;
 | 
|---|
 | 703 |         SUBINFO *psi;
 | 
|---|
 | 704 |         for(i3=0,sw=0;i3<MAX_HASH;i3++){
 | 
|---|
 | 705 |             psi=ppSubHash[i3];
 | 
|---|
 | 706 |             while(psi){
 | 
|---|
 | 707 |                 if(rva_to_real(psi->CompileAddress) <= pobj_dti->lplpObp[i2]  &&
 | 
|---|
 | 708 |                     pobj_dti->lplpObp[i2] < rva_to_real(psi->EndOpAddr)){
 | 
|---|
 | 709 |                     sw=1;
 | 
|---|
 | 710 |                     break;
 | 
|---|
 | 711 |                 }
 | 
|---|
 | 712 | 
 | 
|---|
 | 713 |                 psi=psi->pNextData;
 | 
|---|
 | 714 |             }
 | 
|---|
 | 715 |             if(sw) break;
 | 
|---|
 | 716 |         }
 | 
|---|
 | 717 | 
 | 
|---|
 | 718 | 
 | 
|---|
 | 719 |         if(psi){
 | 
|---|
 | 720 |             LocalVar=psi->pVar;
 | 
|---|
 | 721 |             MaxLocalVarNum=psi->VarNum;
 | 
|---|
 | 722 | 
 | 
|---|
 | 723 |             pobj_CompilingClass=psi->pobj_ParentClass;
 | 
|---|
 | 724 |         }
 | 
|---|
 | 725 |     }
 | 
|---|
 | 726 | 
 | 
|---|
 | 727 | 
 | 
|---|
 | 728 |     ////////////////////////
 | 
|---|
 | 729 |     // 変数リストを再表示
 | 
|---|
 | 730 |     ////////////////////////
 | 
|---|
 | 731 | 
 | 
|---|
 | 732 |     //処理時間を短くするため、一時的に非表示にする
 | 
|---|
 | 733 |     LockWindowUpdate(hDebugWnd);
 | 
|---|
 | 734 |     ShowWindow(GetParent(hVarTree_Global),SW_HIDE);
 | 
|---|
 | 735 |     ShowWindow(GetDlgItem(hDebugWnd,IDC_WATCHLIST),SW_HIDE);
 | 
|---|
 | 736 | 
 | 
|---|
 | 737 |     //リフレッシュ
 | 
|---|
 | 738 |     RefreshLocalVar();
 | 
|---|
 | 739 |     RefreshGlobalVar();
 | 
|---|
 | 740 |     RefreshWatchList();
 | 
|---|
 | 741 | 
 | 
|---|
 | 742 |     LockWindowUpdate(NULL);
 | 
|---|
 | 743 |     ShowWindow(GetParent(hVarTree_Global),SW_SHOW);
 | 
|---|
 | 744 |     ShowWindow(GetDlgItem(hDebugWnd,IDC_WATCHLIST),SW_SHOW);
 | 
|---|
 | 745 | }
 | 
|---|
 | 746 | 
 | 
|---|
 | 747 | 
 | 
|---|
 | 748 | 
 | 
|---|
 | 749 | 
 | 
|---|
 | 750 | //////////////////////////////////////
 | 
|---|
 | 751 | // エディタに埋め込み表示のデバッガ
 | 
|---|
 | 752 | //////////////////////////////////////
 | 
|---|
 | 753 | 
 | 
|---|
 | 754 | BOOL CALLBACK DebuggerButtonsProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
 | 
|---|
 | 755 |     extern HINSTANCE hInst;
 | 
|---|
 | 756 |     extern DWORD dwStepRun;
 | 
|---|
 | 757 | 
 | 
|---|
 | 758 |     //デバッガ用ツールバー
 | 
|---|
 | 759 | #define BMPNUM_DEBUGGERTOOLBAR 3
 | 
|---|
 | 760 | #define BTNNUM_DEBUGGERTOOLBAR 4
 | 
|---|
 | 761 |     TBBUTTON DebuggerToolBar[]={
 | 
|---|
 | 762 |         {0,IDC_DEBUG_START,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0},
 | 
|---|
 | 763 |         {0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0},
 | 
|---|
 | 764 |         {1,IDC_DEBUG_STEPOVER,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0},
 | 
|---|
 | 765 |         {2,IDC_DEBUG_STEPIN,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0},
 | 
|---|
 | 766 |     };
 | 
|---|
 | 767 |     TOOLTIPTEXT *pTipText;
 | 
|---|
 | 768 | 
 | 
|---|
 | 769 |     static HIMAGELIST hImageList,hImageList_Disabled;
 | 
|---|
 | 770 | 
 | 
|---|
 | 771 |     switch(message){
 | 
|---|
 | 772 |         case WM_INITDIALOG:
 | 
|---|
 | 773 |             //ツールバーを生成
 | 
|---|
 | 774 |             extern HWND hDebuggerToolbar;
 | 
|---|
 | 775 |             hDebuggerToolbar=CreateToolbarEx(hwnd,WS_CHILD|WS_VISIBLE|CCS_NODIVIDER|TBSTYLE_FLAT|TBSTYLE_TOOLTIPS|WS_CLIPSIBLINGS,
 | 
|---|
 | 776 |                 NULL,
 | 
|---|
 | 777 |                 0,0,0,
 | 
|---|
 | 778 |                 DebuggerToolBar,
 | 
|---|
 | 779 |                 BTNNUM_DEBUGGERTOOLBAR, /*アイテムの個数*/
 | 
|---|
 | 780 |                 0,0,16,15,sizeof(TBBUTTON));
 | 
|---|
 | 781 | 
 | 
|---|
 | 782 |             hImageList = ImageList_LoadImage(hInst, MAKEINTRESOURCE(IDR_DEBUGGERTOOLBAR),
 | 
|---|
 | 783 |                 16, 0, RGB(192,192,192),IMAGE_BITMAP, LR_CREATEDIBSECTION);
 | 
|---|
 | 784 |             SendMessage(hDebuggerToolbar, TB_SETIMAGELIST, 0, (LPARAM)hImageList);
 | 
|---|
 | 785 |             hImageList_Disabled = ImageList_LoadImage(hInst, MAKEINTRESOURCE(IDR_DEBUGGERTOOLBAR_DISABLED),
 | 
|---|
 | 786 |                 16, 0, RGB(192,192,192),IMAGE_BITMAP, LR_CREATEDIBSECTION);
 | 
|---|
 | 787 |             SendMessage(hDebuggerToolbar, TB_SETDISABLEDIMAGELIST, 0, (LPARAM)hImageList_Disabled);
 | 
|---|
 | 788 | 
 | 
|---|
 | 789 |             break;
 | 
|---|
 | 790 |         case WM_COMMAND:
 | 
|---|
 | 791 |             switch(LOWORD(wParam)){
 | 
|---|
 | 792 |                 case IDC_DEBUG_START:
 | 
|---|
 | 793 |                     DestroyWindow(GetParent(hwnd));
 | 
|---|
 | 794 |                     return 1;
 | 
|---|
 | 795 |                 case IDC_DEBUG_STEPIN:
 | 
|---|
 | 796 |                     Debugger_StepIn();
 | 
|---|
 | 797 |                     return 1;
 | 
|---|
 | 798 |                 case IDC_DEBUG_STEPOVER:
 | 
|---|
 | 799 |                     Debugger_StepOver();
 | 
|---|
 | 800 |                     return 1;
 | 
|---|
 | 801 |             }
 | 
|---|
 | 802 |             break;
 | 
|---|
 | 803 |         case WM_NOTIFY:
 | 
|---|
 | 804 |             pTipText=(TOOLTIPTEXT *)lParam;
 | 
|---|
 | 805 |             if(pTipText->hdr.code==TTN_NEEDTEXT){
 | 
|---|
 | 806 |                 //ツールチップを表示
 | 
|---|
 | 807 |                 switch(pTipText->hdr.idFrom){
 | 
|---|
 | 808 |                     case IDC_DEBUG_START:
 | 
|---|
 | 809 |                         pTipText->lpszText="実行";
 | 
|---|
 | 810 |                         break;
 | 
|---|
 | 811 |                     case IDC_DEBUG_STEPOVER:
 | 
|---|
 | 812 |                         pTipText->lpszText="ステップ アウト";
 | 
|---|
 | 813 |                         break;
 | 
|---|
 | 814 |                     case IDC_DEBUG_STEPIN:
 | 
|---|
 | 815 |                         pTipText->lpszText="ステップ イン";
 | 
|---|
 | 816 |                         break;
 | 
|---|
 | 817 |                 }
 | 
|---|
 | 818 |             }
 | 
|---|
 | 819 |             break;
 | 
|---|
 | 820 |         case WM_SIZE:
 | 
|---|
 | 821 |             MoveWindow(hDebuggerToolbar,0,0,LOWORD(lParam),HIWORD(lParam),1);
 | 
|---|
 | 822 |             return 1;
 | 
|---|
 | 823 | 
 | 
|---|
 | 824 |         case WM_DESTROY:
 | 
|---|
 | 825 |             ImageList_Destroy(hImageList);
 | 
|---|
 | 826 |             ImageList_Destroy(hImageList_Disabled);
 | 
|---|
 | 827 |             return 1;
 | 
|---|
 | 828 |     }
 | 
|---|
 | 829 |     return 0;
 | 
|---|
 | 830 | }
 | 
|---|
 | 831 | 
 | 
|---|
 | 832 | WNDPROC OldTabProc;
 | 
|---|
 | 833 | LRESULT CALLBACK TabProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
 | 
|---|
 | 834 |     extern HINSTANCE hInst;
 | 
|---|
 | 835 | 
 | 
|---|
 | 836 |     static HMENU hDummyMenu,hMenu=0;
 | 
|---|
 | 837 | 
 | 
|---|
 | 838 |     switch(message){
 | 
|---|
 | 839 |         case WM_CONTEXTMENU:
 | 
|---|
 | 840 |             if(hMenu==0){
 | 
|---|
 | 841 |                 hDummyMenu=LoadMenu(hInst,MAKEINTRESOURCE(IDR_DEBUGGER_VARLIST_MENU));
 | 
|---|
 | 842 |                 hMenu=GetSubMenu(hDummyMenu,0);
 | 
|---|
 | 843 |             }
 | 
|---|
 | 844 | 
 | 
|---|
 | 845 |             MENUITEMINFO mi;
 | 
|---|
 | 846 |             mi.cbSize=sizeof(MENUITEMINFO);
 | 
|---|
 | 847 |             mi.fMask=MIIM_STATE;
 | 
|---|
 | 848 |             mi.fState=MFS_CHECKED;
 | 
|---|
 | 849 | 
 | 
|---|
 | 850 |             if(pobj_nv->bShow_DefaultSystem_Var)
 | 
|---|
 | 851 |                 SetMenuItemInfo(hMenu,IDM_SHOW_DEFAULTSYSTEM_VAR,0,&mi);
 | 
|---|
 | 852 |             if(pobj_nv->bShow_Rad_Var)
 | 
|---|
 | 853 |                 SetMenuItemInfo(hMenu,IDM_SHOW_RAD_VAR,0,&mi);
 | 
|---|
 | 854 |             if(pobj_nv->bShow_GUID_Var)
 | 
|---|
 | 855 |                 SetMenuItemInfo(hMenu,IDM_SHOW_GUID_VAR,0,&mi);
 | 
|---|
 | 856 | 
 | 
|---|
 | 857 |             TrackPopupMenu(hMenu,TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
 | 
|---|
 | 858 | 
 | 
|---|
 | 859 |             break;
 | 
|---|
 | 860 |         case WM_COMMAND:
 | 
|---|
 | 861 |             mi.cbSize=sizeof(MENUITEMINFO);
 | 
|---|
 | 862 |             mi.fMask=MIIM_STATE;
 | 
|---|
 | 863 |             switch(LOWORD(wParam)){
 | 
|---|
 | 864 |                 case IDM_SHOW_DEFAULTSYSTEM_VAR:
 | 
|---|
 | 865 |                     if(pobj_nv->bShow_DefaultSystem_Var){
 | 
|---|
 | 866 |                         pobj_nv->bShow_DefaultSystem_Var=0;
 | 
|---|
 | 867 |                         mi.fState=MFS_UNCHECKED;
 | 
|---|
 | 868 |                     }
 | 
|---|
 | 869 |                     else{
 | 
|---|
 | 870 |                         pobj_nv->bShow_DefaultSystem_Var=1;
 | 
|---|
 | 871 |                         mi.fState=MFS_CHECKED;
 | 
|---|
 | 872 |                     }
 | 
|---|
 | 873 |                     SetMenuItemInfo(hMenu,IDM_SHOW_DEFAULTSYSTEM_VAR,0,&mi);
 | 
|---|
 | 874 |                     RefreshGlobalVar_with_WindowLock();
 | 
|---|
 | 875 |                     break;
 | 
|---|
 | 876 |                 case IDM_SHOW_RAD_VAR:
 | 
|---|
 | 877 |                     if(pobj_nv->bShow_Rad_Var){
 | 
|---|
 | 878 |                         pobj_nv->bShow_Rad_Var=0;
 | 
|---|
 | 879 |                         mi.fState=MFS_UNCHECKED;
 | 
|---|
 | 880 |                     }
 | 
|---|
 | 881 |                     else{
 | 
|---|
 | 882 |                         pobj_nv->bShow_Rad_Var=1;
 | 
|---|
 | 883 |                         mi.fState=MFS_CHECKED;
 | 
|---|
 | 884 |                     }
 | 
|---|
 | 885 |                     SetMenuItemInfo(hMenu,IDM_SHOW_RAD_VAR,0,&mi);
 | 
|---|
 | 886 |                     RefreshGlobalVar_with_WindowLock();
 | 
|---|
 | 887 |                     break;
 | 
|---|
 | 888 |                 case IDM_SHOW_GUID_VAR:
 | 
|---|
 | 889 |                     if(pobj_nv->bShow_GUID_Var){
 | 
|---|
 | 890 |                         pobj_nv->bShow_GUID_Var=0;
 | 
|---|
 | 891 |                         mi.fState=MFS_UNCHECKED;
 | 
|---|
 | 892 |                     }
 | 
|---|
 | 893 |                     else{
 | 
|---|
 | 894 |                         pobj_nv->bShow_GUID_Var=1;
 | 
|---|
 | 895 |                         mi.fState=MFS_CHECKED;
 | 
|---|
 | 896 |                     }
 | 
|---|
 | 897 |                     SetMenuItemInfo(hMenu,IDM_SHOW_GUID_VAR,0,&mi);
 | 
|---|
 | 898 |                     RefreshGlobalVar_with_WindowLock();
 | 
|---|
 | 899 |                     break;
 | 
|---|
 | 900 |             }
 | 
|---|
 | 901 |             break;
 | 
|---|
 | 902 |         case WM_DESTROY:
 | 
|---|
 | 903 |             DestroyMenu(hMenu);
 | 
|---|
 | 904 |             hMenu=0;
 | 
|---|
 | 905 |             break;
 | 
|---|
 | 906 |     }
 | 
|---|
 | 907 |     return CallWindowProc(OldTabProc,hwnd,message,wParam,lParam);
 | 
|---|
 | 908 | }
 | 
|---|
 | 909 | 
 | 
|---|
 | 910 | BOOL CALLBACK DlgDebugger(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
 | 
|---|
 | 911 |     extern HANDLE hHeap;
 | 
|---|
 | 912 |     extern HINSTANCE hInst;
 | 
|---|
 | 913 |     extern DWORD dwStepRun;
 | 
|---|
 | 914 |     extern double width_ratio_VarList;
 | 
|---|
 | 915 |     RECT rect;
 | 
|---|
 | 916 |     int i,i2,i3;
 | 
|---|
 | 917 |     char temporary[VN_SIZE];
 | 
|---|
 | 918 |     LV_DISPINFO *lvinfo;
 | 
|---|
 | 919 |     LVITEM ListView_Item;
 | 
|---|
 | 920 | 
 | 
|---|
 | 921 |     static POINT pos_VarList;
 | 
|---|
 | 922 |     static POINT pos_WatchList;
 | 
|---|
 | 923 | 
 | 
|---|
 | 924 |     switch(message){
 | 
|---|
 | 925 |         case WM_INITDIALOG:
 | 
|---|
 | 926 |             extern HWND hDebugWnd;
 | 
|---|
 | 927 |             hDebugWnd=hwnd;
 | 
|---|
 | 928 | 
 | 
|---|
 | 929 |             //変数リストの初期位置を取得
 | 
|---|
 | 930 |             GetWindowRect(GetDlgItem(hwnd,IDC_VARPOS),&rect);
 | 
|---|
 | 931 |             pos_VarList.x=rect.left;
 | 
|---|
 | 932 |             pos_VarList.y=rect.top;
 | 
|---|
 | 933 |             ScreenToClient(hwnd,&pos_VarList);
 | 
|---|
 | 934 | 
 | 
|---|
 | 935 |             //ウォッチリストの初期位置を取得
 | 
|---|
 | 936 |             pos_WatchList.x=pos_VarList.x+(rect.right-rect.left)+LEVER_THICK;
 | 
|---|
 | 937 |             pos_WatchList.y=0;
 | 
|---|
 | 938 | 
 | 
|---|
 | 939 |             //ツールバーのベースウィンドウを生成
 | 
|---|
 | 940 |             static HWND hBase_ToolBar;
 | 
|---|
 | 941 |             hBase_ToolBar=CreateDialog(hInst,MAKEINTRESOURCE(IDD_DEBUGGER_TOOLBARBASE),hwnd,DebuggerButtonsProc);
 | 
|---|
 | 942 |             MoveWindow(hBase_ToolBar,50,0,20*BTNNUM_DEBUGGERTOOLBAR,22,1);
 | 
|---|
 | 943 | 
 | 
|---|
 | 944 |             extern WNDPROC OldThreadComboProc;
 | 
|---|
 | 945 |             OldThreadComboProc=(WNDPROC)GetWindowLong(GetDlgItem(hwnd,IDC_THREADCOMBO),GWL_WNDPROC);
 | 
|---|
 | 946 |             SetWindowLong(GetDlgItem(hwnd,IDC_THREADCOMBO),GWL_WNDPROC,(long)ThreadComboProc);
 | 
|---|
 | 947 | 
 | 
|---|
 | 948 |             extern WNDPROC OldProcComboProc;
 | 
|---|
 | 949 |             OldProcComboProc=(WNDPROC)GetWindowLong(GetDlgItem(hwnd,IDC_PROCCOMBO),GWL_WNDPROC);
 | 
|---|
 | 950 |             SetWindowLong(GetDlgItem(hwnd,IDC_PROCCOMBO),GWL_WNDPROC,(long)ProcComboProc);
 | 
|---|
 | 951 | 
 | 
|---|
 | 952 | 
 | 
|---|
 | 953 |             ///////////////////////////
 | 
|---|
 | 954 |             // タブコントロールを生成
 | 
|---|
 | 955 |             ///////////////////////////
 | 
|---|
 | 956 | 
 | 
|---|
 | 957 |             static HWND hTab;
 | 
|---|
 | 958 |             HFONT hFont;
 | 
|---|
 | 959 |             hFont=(HFONT)SendMessage(hwnd,WM_GETFONT,0,0);
 | 
|---|
 | 960 |             hTab=CreateWindow(WC_TABCONTROL,NULL,
 | 
|---|
 | 961 |                 WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE,
 | 
|---|
 | 962 |                 0,0,0,0,hwnd,0,hInst,0);
 | 
|---|
 | 963 |             SendMessage(hTab,WM_SETFONT,(long)hFont,0);
 | 
|---|
 | 964 |             OldTabProc=(WNDPROC)GetWindowLong(hTab,GWL_WNDPROC);
 | 
|---|
 | 965 |             SetWindowLong(hTab,GWL_WNDPROC,(long)TabProc);
 | 
|---|
 | 966 | 
 | 
|---|
 | 967 |             //タブを設定
 | 
|---|
 | 968 |             TC_ITEM tcItem;
 | 
|---|
 | 969 |             tcItem.mask=TCIF_TEXT;
 | 
|---|
 | 970 |             tcItem.pszText="グローバル";
 | 
|---|
 | 971 |             SendMessage(hTab,TCM_INSERTITEM,0,(LPARAM)&tcItem);
 | 
|---|
 | 972 |             tcItem.mask=TCIF_TEXT;
 | 
|---|
 | 973 |             tcItem.pszText="ローカル";
 | 
|---|
 | 974 |             SendMessage(hTab,TCM_INSERTITEM,1,(LPARAM)&tcItem);
 | 
|---|
 | 975 |             tcItem.mask=TCIF_TEXT;
 | 
|---|
 | 976 |             tcItem.pszText="This";
 | 
|---|
 | 977 |             SendMessage(hTab,TCM_INSERTITEM,2,(LPARAM)&tcItem);
 | 
|---|
 | 978 | 
 | 
|---|
 | 979 |             //グローバル変数リストのツリーを作成
 | 
|---|
 | 980 |             hVarTree_Global=CreateWindowEx(WS_EX_CLIENTEDGE,WC_TREEVIEW,"",
 | 
|---|
 | 981 |                 WS_CHILD|TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS,
 | 
|---|
 | 982 |                 0,0,0,0,
 | 
|---|
 | 983 |                 hTab,0,hInst,0);
 | 
|---|
 | 984 | 
 | 
|---|
 | 985 |             //ローカル変数リストのツリーを作成
 | 
|---|
 | 986 |             hVarTree_Local=CreateWindowEx(WS_EX_CLIENTEDGE,WC_TREEVIEW,"",
 | 
|---|
 | 987 |                 WS_CHILD|TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS,
 | 
|---|
 | 988 |                 0,0,0,0,
 | 
|---|
 | 989 |                 hTab,0,hInst,0);
 | 
|---|
 | 990 | 
 | 
|---|
 | 991 |             //This変数リストのツリーを作成
 | 
|---|
 | 992 |             hVarTree_This=CreateWindowEx(WS_EX_CLIENTEDGE,WC_TREEVIEW,"",
 | 
|---|
 | 993 |                 WS_CHILD|TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS,
 | 
|---|
 | 994 |                 0,0,0,0,
 | 
|---|
 | 995 |                 hTab,0,hInst,0);
 | 
|---|
 | 996 | 
 | 
|---|
 | 997 |             ShowWindow(hVarTree_Global,SW_SHOW);
 | 
|---|
 | 998 | 
 | 
|---|
 | 999 | 
 | 
|---|
 | 1000 |             //イメージリスト読み込み、設定
 | 
|---|
 | 1001 |             static HIMAGELIST hVariOrderImageList;
 | 
|---|
 | 1002 |             hVariOrderImageList=ImageList_Create(16,16,ILC_COLOR4|ILC_MASK,4,0);
 | 
|---|
 | 1003 |             ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARARRAY)));
 | 
|---|
 | 1004 |             ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARSTRUCT)));
 | 
|---|
 | 1005 |             ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARDATA)));
 | 
|---|
 | 1006 |             ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARSTR)));
 | 
|---|
 | 1007 |             ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARPTRSTRUCT)));
 | 
|---|
 | 1008 |             TreeView_SetImageList(hVarTree_Global,hVariOrderImageList,TVSIL_NORMAL);
 | 
|---|
 | 1009 |             TreeView_SetImageList(hVarTree_Local,hVariOrderImageList,TVSIL_NORMAL);
 | 
|---|
 | 1010 |             TreeView_SetImageList(hVarTree_This,hVariOrderImageList,TVSIL_NORMAL);
 | 
|---|
 | 1011 | 
 | 
|---|
 | 1012 | 
 | 
|---|
 | 1013 |             /////////////////////////
 | 
|---|
 | 1014 |             // ウォッチリスト
 | 
|---|
 | 1015 |             /////////////////////////
 | 
|---|
 | 1016 | 
 | 
|---|
 | 1017 |             //コラムの設定
 | 
|---|
 | 1018 |             static HWND hListView;
 | 
|---|
 | 1019 |             LV_COLUMN ListView_Column;
 | 
|---|
 | 1020 |             DWORD dwStyle;
 | 
|---|
 | 1021 | 
 | 
|---|
 | 1022 |             hListView=GetDlgItem(hwnd,IDC_WATCHLIST);
 | 
|---|
 | 1023 |             GetClientRect(hListView,&rect);
 | 
|---|
 | 1024 |             dwStyle=ListView_GetExtendedListViewStyle(hListView);
 | 
|---|
 | 1025 |             dwStyle|=LVS_EX_FULLROWSELECT;
 | 
|---|
 | 1026 |             ListView_SetExtendedListViewStyle(hListView,dwStyle);
 | 
|---|
 | 1027 | 
 | 
|---|
 | 1028 |             ListView_Column.mask=LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
 | 
|---|
 | 1029 |             ListView_Column.fmt=LVCFMT_LEFT;
 | 
|---|
 | 1030 | 
 | 
|---|
 | 1031 |             extern int width_WatchColumn_Expression;
 | 
|---|
 | 1032 |             ListView_Column.cx=width_WatchColumn_Expression;
 | 
|---|
 | 1033 |             ListView_Column.pszText="ウォッチ式";
 | 
|---|
 | 1034 |             ListView_Column.iSubItem=0;
 | 
|---|
 | 1035 |             ListView_InsertColumn(hListView,0,&ListView_Column);
 | 
|---|
 | 1036 | 
 | 
|---|
 | 1037 |             extern int width_WatchColumn_Value;
 | 
|---|
 | 1038 |             ListView_Column.cx=width_WatchColumn_Value;
 | 
|---|
 | 1039 |             ListView_Column.pszText="値";
 | 
|---|
 | 1040 |             ListView_Column.iSubItem=1;
 | 
|---|
 | 1041 |             ListView_InsertColumn(hListView,1,&ListView_Column);
 | 
|---|
 | 1042 | 
 | 
|---|
 | 1043 |             //アイテムの設定
 | 
|---|
 | 1044 |             ListView_Item.mask=LVIF_TEXT;
 | 
|---|
 | 1045 |             ListView_Item.iSubItem=0;
 | 
|---|
 | 1046 |             for(i=0;i<pobj_nv->WatchNum;i++){
 | 
|---|
 | 1047 |                 ListView_Item.pszText=pobj_nv->ppWatchStr[i];
 | 
|---|
 | 1048 |                 ListView_Item.iItem=i;
 | 
|---|
 | 1049 |                 ListView_InsertItem(hListView,&ListView_Item);
 | 
|---|
 | 1050 |             }
 | 
|---|
 | 1051 |             ListView_Item.pszText="...";
 | 
|---|
 | 1052 |             ListView_Item.iItem=i;
 | 
|---|
 | 1053 |             ListView_InsertItem(hListView,&ListView_Item);
 | 
|---|
 | 1054 | 
 | 
|---|
 | 1055 | 
 | 
|---|
 | 1056 |             ///////////////////////
 | 
|---|
 | 1057 |             // 変数リストの初期化
 | 
|---|
 | 1058 |             ///////////////////////
 | 
|---|
 | 1059 |             InitVarList((DWORD)lParam);
 | 
|---|
 | 1060 | 
 | 
|---|
 | 1061 |             break;
 | 
|---|
 | 1062 |         case WM_NOTIFY:
 | 
|---|
 | 1063 |             NMHDR *hdr;
 | 
|---|
 | 1064 |             hdr=(NMHDR *)lParam;
 | 
|---|
 | 1065 |             if(hdr->hwndFrom==hTab&&hdr->code==TCN_SELCHANGE){
 | 
|---|
 | 1066 |                 i=TabCtrl_GetCurSel(hTab);
 | 
|---|
 | 1067 | 
 | 
|---|
 | 1068 |                 if(i==0){
 | 
|---|
 | 1069 |                     //グローバル変数を表示
 | 
|---|
 | 1070 |                     ShowWindow(hVarTree_Global,SW_SHOW);
 | 
|---|
 | 1071 |                     ShowWindow(hVarTree_Local,SW_HIDE);
 | 
|---|
 | 1072 |                     ShowWindow(hVarTree_This,SW_HIDE);
 | 
|---|
 | 1073 |                 }
 | 
|---|
 | 1074 |                 else if(i==1){
 | 
|---|
 | 1075 |                     //ローカル変数を表示
 | 
|---|
 | 1076 |                     ShowWindow(hVarTree_Global,SW_HIDE);
 | 
|---|
 | 1077 |                     ShowWindow(hVarTree_Local,SW_SHOW);
 | 
|---|
 | 1078 |                     ShowWindow(hVarTree_This,SW_HIDE);
 | 
|---|
 | 1079 |                 }
 | 
|---|
 | 1080 |                 else if(i==2){
 | 
|---|
 | 1081 |                     //This変数を表示
 | 
|---|
 | 1082 |                     ShowWindow(hVarTree_Global,SW_HIDE);
 | 
|---|
 | 1083 |                     ShowWindow(hVarTree_Local,SW_HIDE);
 | 
|---|
 | 1084 |                     ShowWindow(hVarTree_This,SW_SHOW);
 | 
|---|
 | 1085 |                 }
 | 
|---|
 | 1086 |             }
 | 
|---|
 | 1087 | 
 | 
|---|
 | 1088 |             if(hdr->hwndFrom==hListView){
 | 
|---|
 | 1089 |                 lvinfo=(LV_DISPINFO *)hdr;
 | 
|---|
 | 1090 |                 if(hdr->code==NM_DBLCLK){
 | 
|---|
 | 1091 |                     i2=ListView_GetItemCount(hListView);
 | 
|---|
 | 1092 |                     for(i=0;i<i2;i++){
 | 
|---|
 | 1093 |                         if(ListView_GetItemState(hListView,i,LVIS_SELECTED)) break;
 | 
|---|
 | 1094 |                     }
 | 
|---|
 | 1095 |                     if(i==i2) break;
 | 
|---|
 | 1096 | 
 | 
|---|
 | 1097 |                     ListView_EditLabel(hListView,i);
 | 
|---|
 | 1098 |                 }
 | 
|---|
 | 1099 | 
 | 
|---|
 | 1100 |                 static HWND hEdit;
 | 
|---|
 | 1101 |                 if(hdr->code==LVN_BEGINLABELEDIT){
 | 
|---|
 | 1102 |                     hEdit=ListView_GetEditControl(hListView);
 | 
|---|
 | 1103 | 
 | 
|---|
 | 1104 |                     GetWindowText(hEdit,temporary,VN_SIZE);
 | 
|---|
 | 1105 |                     if(lstrcmp(temporary,"...")==0) SetWindowText(hEdit,"");
 | 
|---|
 | 1106 |                 }
 | 
|---|
 | 1107 |                 if(hdr->code==LVN_ENDLABELEDIT){
 | 
|---|
 | 1108 |                     GetWindowText(hEdit,temporary,VN_SIZE);
 | 
|---|
 | 1109 |                     if(temporary[0]=='\0'){
 | 
|---|
 | 1110 |                         if(ListView_GetItemCount(hListView)-1==lvinfo->item.iItem) break;
 | 
|---|
 | 1111 | 
 | 
|---|
 | 1112 |                         //空白入力の場合はそのアイテムを削除する
 | 
|---|
 | 1113 |                         ListView_DeleteItem(hListView,lvinfo->item.iItem);
 | 
|---|
 | 1114 |                         break;
 | 
|---|
 | 1115 |                     }
 | 
|---|
 | 1116 |                     ListView_SetItemText(hListView,lvinfo->item.iItem,0,temporary);
 | 
|---|
 | 1117 | 
 | 
|---|
 | 1118 |                     //演算結果を表示
 | 
|---|
 | 1119 |                     SetCalcToWatchList(hListView,lvinfo->item.iItem,temporary);
 | 
|---|
 | 1120 | 
 | 
|---|
 | 1121 |                     if(lvinfo->item.iItem==ListView_GetItemCount(hListView)-1){
 | 
|---|
 | 1122 |                         //リストアイテムを追加
 | 
|---|
 | 1123 |                         ListView_Item.mask=LVIF_TEXT;
 | 
|---|
 | 1124 |                         ListView_Item.pszText="...";
 | 
|---|
 | 1125 |                         ListView_Item.iItem=lvinfo->item.iItem+1;
 | 
|---|
 | 1126 |                         ListView_Item.iSubItem=0;
 | 
|---|
 | 1127 |                         ListView_InsertItem(hListView,&ListView_Item);
 | 
|---|
 | 1128 |                     }
 | 
|---|
 | 1129 |                 }
 | 
|---|
 | 1130 | 
 | 
|---|
 | 1131 |                 if(hdr->code==LVN_KEYDOWN){
 | 
|---|
 | 1132 |                     LV_KEYDOWN *plvKeydown;
 | 
|---|
 | 1133 |                     plvKeydown=(LV_KEYDOWN *)hdr;
 | 
|---|
 | 1134 |                     if(plvKeydown->wVKey==VK_DELETE){
 | 
|---|
 | 1135 |                         i2=ListView_GetItemCount(hListView);
 | 
|---|
 | 1136 |                         for(i=i2-2;i>=0;i--){
 | 
|---|
 | 1137 |                             if(ListView_GetItemState(hListView,i,LVIS_SELECTED)){
 | 
|---|
 | 1138 |                                 ListView_DeleteItem(hListView,i);
 | 
|---|
 | 1139 |                                 i3=i;
 | 
|---|
 | 1140 |                             }
 | 
|---|
 | 1141 |                         }
 | 
|---|
 | 1142 | 
 | 
|---|
 | 1143 |                         ListView_SetItemState(hListView,i3,LVIS_SELECTED,LVIS_SELECTED);
 | 
|---|
 | 1144 |                     }
 | 
|---|
 | 1145 |                 }
 | 
|---|
 | 1146 |             }
 | 
|---|
 | 1147 |             break;
 | 
|---|
 | 1148 | 
 | 
|---|
 | 1149 |         case WM_SIZE:
 | 
|---|
 | 1150 |             //変数リストの位置
 | 
|---|
 | 1151 |             int width_VarList;
 | 
|---|
 | 1152 |             width_VarList=
 | 
|---|
 | 1153 |                 (int)((double)(LOWORD(lParam)-pos_VarList.x)*width_ratio_VarList);
 | 
|---|
 | 1154 | 
 | 
|---|
 | 1155 |             MoveWindow(hTab,
 | 
|---|
 | 1156 |                 pos_VarList.x,
 | 
|---|
 | 1157 |                 pos_VarList.y,
 | 
|---|
 | 1158 |                 width_VarList,
 | 
|---|
 | 1159 |                 HIWORD(lParam)-pos_VarList.y,
 | 
|---|
 | 1160 |                 1);
 | 
|---|
 | 1161 | 
 | 
|---|
 | 1162 |             GetClientRect(hTab,&rect);
 | 
|---|
 | 1163 |             TabCtrl_AdjustRect(hTab,FALSE,&rect);
 | 
|---|
 | 1164 |             rect.left-=2;
 | 
|---|
 | 1165 |             rect.right++;
 | 
|---|
 | 1166 |             rect.bottom++;
 | 
|---|
 | 1167 | 
 | 
|---|
 | 1168 |             MoveWindow(hVarTree_Global,
 | 
|---|
 | 1169 |                 rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,1);
 | 
|---|
 | 1170 |             MoveWindow(hVarTree_Local,
 | 
|---|
 | 1171 |                 rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,1);
 | 
|---|
 | 1172 |             MoveWindow(hVarTree_This,
 | 
|---|
 | 1173 |                 rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,1);
 | 
|---|
 | 1174 | 
 | 
|---|
 | 1175 |             pos_WatchList.x=pos_VarList.x+width_VarList+LEVER_THICK;
 | 
|---|
 | 1176 |             pos_WatchList.y=0;
 | 
|---|
 | 1177 | 
 | 
|---|
 | 1178 |             //ウォッチリストの位置
 | 
|---|
 | 1179 |             MoveWindow(GetDlgItem(hwnd,IDC_WATCHLIST),
 | 
|---|
 | 1180 |                 pos_WatchList.x,
 | 
|---|
 | 1181 |                 pos_WatchList.y,
 | 
|---|
 | 1182 |                 LOWORD(lParam)-pos_WatchList.x,
 | 
|---|
 | 1183 |                 HIWORD(lParam)-pos_WatchList.y,
 | 
|---|
 | 1184 |                 1);
 | 
|---|
 | 1185 | 
 | 
|---|
 | 1186 |             return 1;
 | 
|---|
 | 1187 | 
 | 
|---|
 | 1188 |         case WM_VARLIST_CLOSE:
 | 
|---|
 | 1189 |             DestroyWindow(hwnd);
 | 
|---|
 | 1190 |             return 1;
 | 
|---|
 | 1191 |         case WM_DESTROY:
 | 
|---|
 | 1192 |             ImageList_Destroy(hVariOrderImageList);
 | 
|---|
 | 1193 | 
 | 
|---|
 | 1194 | 
 | 
|---|
 | 1195 |             //////////////////////////////////////////////////////////////
 | 
|---|
 | 1196 |             // ウォッチリストの以前の内容を破棄し、新しい内容に書き換える
 | 
|---|
 | 1197 |             //////////////////////////////////////////////////////////////
 | 
|---|
 | 1198 | 
 | 
|---|
 | 1199 |             for(i=0;i<pobj_nv->WatchNum;i++){
 | 
|---|
 | 1200 |                 HeapDefaultFree(pobj_nv->ppWatchStr[i]);
 | 
|---|
 | 1201 |             }
 | 
|---|
 | 1202 |             HeapDefaultFree(pobj_nv->ppWatchStr);
 | 
|---|
 | 1203 | 
 | 
|---|
 | 1204 |             pobj_nv->WatchNum=ListView_GetItemCount(hListView)-1;
 | 
|---|
 | 1205 |             pobj_nv->ppWatchStr=(char **)HeapAlloc(hHeap,0,pobj_nv->WatchNum*sizeof(char *)+1);
 | 
|---|
 | 1206 |             for(i=0;i<pobj_nv->WatchNum;i++){
 | 
|---|
 | 1207 |                 ListView_GetItemText(hListView,i,0,temporary,VN_SIZE);
 | 
|---|
 | 1208 |                 pobj_nv->ppWatchStr[i]=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
 | 
|---|
 | 1209 |                 lstrcpy(pobj_nv->ppWatchStr[i],temporary);
 | 
|---|
 | 1210 |             }
 | 
|---|
 | 1211 | 
 | 
|---|
 | 1212 | 
 | 
|---|
 | 1213 |             //////////////////////////////
 | 
|---|
 | 1214 |             // デバッグダイアログを破棄
 | 
|---|
 | 1215 |             //////////////////////////////
 | 
|---|
 | 1216 | 
 | 
|---|
 | 1217 |             hDebugWnd=0;
 | 
|---|
 | 1218 | 
 | 
|---|
 | 1219 |             extern BOOL bClipCompileView;
 | 
|---|
 | 1220 |             if(bClipCompileView){
 | 
|---|
 | 1221 |                 extern HWND hOwnerEditor;
 | 
|---|
 | 1222 |                 SendMessage(hOwnerEditor,WM_DESTROYDEBUGGERVIEW,0,0);
 | 
|---|
 | 1223 |             }
 | 
|---|
 | 1224 | 
 | 
|---|
 | 1225 |             return 1;
 | 
|---|
 | 1226 | 
 | 
|---|
 | 1227 | 
 | 
|---|
 | 1228 | 
 | 
|---|
 | 1229 |         ///////////////////////
 | 
|---|
 | 1230 |         // デバッグコマンド
 | 
|---|
 | 1231 |         ///////////////////////
 | 
|---|
 | 1232 | 
 | 
|---|
 | 1233 |         case WM_DEBUG_CONTINUE:
 | 
|---|
 | 1234 |             DestroyWindow(hwnd);
 | 
|---|
 | 1235 |             return 1;
 | 
|---|
 | 1236 |         case WM_STEP_IN:
 | 
|---|
 | 1237 |             Debugger_StepIn();
 | 
|---|
 | 1238 |             return 1;
 | 
|---|
 | 1239 |         case WM_STEP_OVER:
 | 
|---|
 | 1240 |             Debugger_StepOver();
 | 
|---|
 | 1241 |             return 1;
 | 
|---|
 | 1242 |         case WM_STEP_CURSOR:
 | 
|---|
 | 1243 |             Debugger_StepCursor();
 | 
|---|
 | 1244 |             return 1;
 | 
|---|
 | 1245 |     }
 | 
|---|
 | 1246 |     return 0;
 | 
|---|
 | 1247 | }
 | 
|---|
 | 1248 | 
 | 
|---|
 | 1249 | 
 | 
|---|
 | 1250 | 
 | 
|---|
 | 1251 | 
 | 
|---|
 | 1252 | //////////////////////////////////
 | 
|---|
 | 1253 | // ポップアップ表示の変数リスト
 | 
|---|
 | 1254 | //////////////////////////////////
 | 
|---|
 | 1255 | 
 | 
|---|
 | 1256 | BOOL CALLBACK DlgVarList(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
 | 
|---|
 | 1257 |     extern HANDLE hHeap;
 | 
|---|
 | 1258 |     extern HINSTANCE hInst;
 | 
|---|
 | 1259 |     extern DWORD dwStepRun;
 | 
|---|
 | 1260 |     RECT rect;
 | 
|---|
 | 1261 |     POINT pos;
 | 
|---|
 | 1262 |     SIZE size;
 | 
|---|
 | 1263 | 
 | 
|---|
 | 1264 |     switch(message){
 | 
|---|
 | 1265 |         case WM_INITDIALOG:
 | 
|---|
 | 1266 |             extern HWND hDebugWnd;
 | 
|---|
 | 1267 |             hDebugWnd=hwnd;
 | 
|---|
 | 1268 | 
 | 
|---|
 | 1269 |             pos.x=pobj_nv->VarDlgRect.left;
 | 
|---|
 | 1270 |             pos.y=pobj_nv->VarDlgRect.top;
 | 
|---|
 | 1271 |             size.cx=pobj_nv->VarDlgRect.right-pobj_nv->VarDlgRect.left;
 | 
|---|
 | 1272 |             size.cy=pobj_nv->VarDlgRect.bottom-pobj_nv->VarDlgRect.top;
 | 
|---|
 | 1273 |             MoveWindow(hwnd,pos.x,pos.y,size.cx,size.cy,1);
 | 
|---|
 | 1274 | 
 | 
|---|
 | 1275 |             extern WNDPROC OldThreadComboProc;
 | 
|---|
 | 1276 |             OldThreadComboProc=(WNDPROC)GetWindowLong(GetDlgItem(hwnd,IDC_THREADCOMBO),GWL_WNDPROC);
 | 
|---|
 | 1277 |             SetWindowLong(GetDlgItem(hwnd,IDC_THREADCOMBO),GWL_WNDPROC,(long)ThreadComboProc);
 | 
|---|
 | 1278 | 
 | 
|---|
 | 1279 |             extern WNDPROC OldProcComboProc;
 | 
|---|
 | 1280 |             OldProcComboProc=(WNDPROC)GetWindowLong(GetDlgItem(hwnd,IDC_PROCCOMBO),GWL_WNDPROC);
 | 
|---|
 | 1281 |             SetWindowLong(GetDlgItem(hwnd,IDC_PROCCOMBO),GWL_WNDPROC,(long)ProcComboProc);
 | 
|---|
 | 1282 | 
 | 
|---|
 | 1283 |             //イメージリスト読み込み、設定
 | 
|---|
 | 1284 |             static HIMAGELIST hVariOrderImageList;
 | 
|---|
 | 1285 |             hVariOrderImageList=ImageList_Create(16,16,ILC_COLOR4|ILC_MASK,4,0);
 | 
|---|
 | 1286 |             ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARARRAY)));
 | 
|---|
 | 1287 |             ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARSTRUCT)));
 | 
|---|
 | 1288 |             ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARDATA)));
 | 
|---|
 | 1289 |             ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARSTR)));
 | 
|---|
 | 1290 |             ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARPTRSTRUCT)));
 | 
|---|
 | 1291 |             TreeView_SetImageList(GetDlgItem(hwnd,IDC_VARTREE),hVariOrderImageList,TVSIL_NORMAL);
 | 
|---|
 | 1292 | 
 | 
|---|
 | 1293 |             InitVarList((DWORD)lParam);
 | 
|---|
 | 1294 |             break;
 | 
|---|
 | 1295 |         case WM_COMMAND:
 | 
|---|
 | 1296 |             switch(LOWORD(wParam)){
 | 
|---|
 | 1297 |                 case IDCANCEL:
 | 
|---|
 | 1298 |                     DestroyWindow(hwnd);
 | 
|---|
 | 1299 |                     return 1;
 | 
|---|
 | 1300 |                 case IDC_STEPIN:
 | 
|---|
 | 1301 |                     Debugger_StepIn();
 | 
|---|
 | 1302 |                     return 1;
 | 
|---|
 | 1303 |                 case IDC_STEPOVER:
 | 
|---|
 | 1304 |                     Debugger_StepOver();
 | 
|---|
 | 1305 |                     return 1;
 | 
|---|
 | 1306 |             }
 | 
|---|
 | 1307 |             break;
 | 
|---|
 | 1308 |         case WM_SIZE:
 | 
|---|
 | 1309 |             GetWindowRect(GetDlgItem(hwnd,IDC_VARTREE),&rect);
 | 
|---|
 | 1310 |             pos.x=rect.left;
 | 
|---|
 | 1311 |             pos.y=rect.top;
 | 
|---|
 | 1312 |             ScreenToClient(hwnd,&pos);
 | 
|---|
 | 1313 |             MoveWindow(GetDlgItem(hwnd,IDC_VARTREE),0,pos.y,LOWORD(lParam),HIWORD(lParam)-pos.y,TRUE);
 | 
|---|
 | 1314 |             SetWindowPos(GetDlgItem(hwnd,IDCANCEL),0,LOWORD(lParam)-91,9,0,0,SWP_NOSIZE);
 | 
|---|
 | 1315 |             return 1;
 | 
|---|
 | 1316 |         case WM_VARLIST_CLOSE:
 | 
|---|
 | 1317 |             DestroyWindow(hwnd);
 | 
|---|
 | 1318 |             return 1;
 | 
|---|
 | 1319 |         case WM_DESTROY:
 | 
|---|
 | 1320 |             ImageList_Destroy(hVariOrderImageList);
 | 
|---|
 | 1321 | 
 | 
|---|
 | 1322 |             GetWindowRect(hwnd,&pobj_nv->VarDlgRect);
 | 
|---|
 | 1323 | 
 | 
|---|
 | 1324 |             hDebugWnd=0;
 | 
|---|
 | 1325 | 
 | 
|---|
 | 1326 |             return 1;
 | 
|---|
 | 1327 |     }
 | 
|---|
 | 1328 |     return 0;
 | 
|---|
 | 1329 | }
 | 
|---|