Changeset 551 for trunk/dll/treecnr.c
- Timestamp:
- Feb 28, 2007, 2:33:51 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/dll/treecnr.c
r549 r551 52 52 #pragma alloc_text(STARTUP,StartTreeCnr) 53 53 54 APIRET16 APIENTRY16 Dos16MemAvail (PULONG pulAvailMem); 55 56 typedef struct APPNOTIFY { 57 HAPP happ; 58 CHAR device; 54 APIRET16 APIENTRY16 Dos16MemAvail(PULONG pulAvailMem); 55 56 typedef struct APPNOTIFY 57 { 58 HAPP happ; 59 CHAR device; 59 60 struct APPNOTIFY *next; 60 61 struct APPNOTIFY *prev; 61 } APPNOTIFY;62 63 64 MRESULT EXPENTRY OpenButtonProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)62 } 63 APPNOTIFY; 64 65 MRESULT EXPENTRY OpenButtonProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) 65 66 { 66 67 static BOOL emphasized = FALSE; 67 68 68 switch(msg) { 69 case WM_CREATE: 70 { 71 MRESULT rc; 72 73 rc = PFNWPButton(hwnd,msg,mp1,mp2); 74 WinSetPresParam(hwnd,PP_FONTNAMESIZE, 75 strlen(GetPString(IDS_8TIMESNEWROMANTEXT)) + 1, 76 (PVOID)GetPString(IDS_8TIMESNEWROMANTEXT)); 77 return rc; 78 } 79 80 case WM_MOUSEMOVE: 81 BubbleHelp(hwnd, 82 TRUE, 83 FALSE, 84 TRUE, 85 GetPString(IDS_OPENBUTTONHELP)); 86 break; 87 88 case WM_CONTEXTMENU: 89 PostMsg(WinQueryWindow(hwnd,QW_PARENT), 90 WM_COMMAND, 91 MPFROM2SHORT(IDM_OPENWALK,0), 92 MPVOID); 93 return 0; 94 95 case DM_DRAGOVER: 96 if(!emphasized) { 97 emphasized = TRUE; 98 EmphasizeButton(hwnd,emphasized); 99 } 100 if(AcceptOneDrop(mp1,mp2)) 101 return MRFROM2SHORT(DOR_DROP, 102 DO_MOVE); 103 return MRFROM2SHORT(DOR_NEVERDROP,0); 104 105 case DM_DRAGLEAVE: 106 if(emphasized) { 69 switch (msg) { 70 case WM_CREATE: 71 { 72 MRESULT rc; 73 74 rc = PFNWPButton(hwnd, msg, mp1, mp2); 75 WinSetPresParam(hwnd, PP_FONTNAMESIZE, 76 strlen(GetPString(IDS_8TIMESNEWROMANTEXT)) + 1, 77 (PVOID) GetPString(IDS_8TIMESNEWROMANTEXT)); 78 return rc; 79 } 80 81 case WM_MOUSEMOVE: 82 BubbleHelp(hwnd, TRUE, FALSE, TRUE, GetPString(IDS_OPENBUTTONHELP)); 83 break; 84 85 case WM_CONTEXTMENU: 86 PostMsg(WinQueryWindow(hwnd, QW_PARENT), 87 WM_COMMAND, MPFROM2SHORT(IDM_OPENWALK, 0), MPVOID); 88 return 0; 89 90 case DM_DRAGOVER: 91 if (!emphasized) { 92 emphasized = TRUE; 93 EmphasizeButton(hwnd, emphasized); 94 } 95 if (AcceptOneDrop(mp1, mp2)) 96 return MRFROM2SHORT(DOR_DROP, DO_MOVE); 97 return MRFROM2SHORT(DOR_NEVERDROP, 0); 98 99 case DM_DRAGLEAVE: 100 if (emphasized) { 101 emphasized = FALSE; 102 EmphasizeButton(hwnd, emphasized); 103 } 104 break; 105 106 case DM_DROPHELP: 107 DropHelp(mp1, mp2, hwnd, GetPString(IDS_OPENDROPHELP)); 108 return 0; 109 110 case DM_DROP: 111 { 112 char szFrom[CCHMAXPATH + 2]; 113 114 if (emphasized) { 107 115 emphasized = FALSE; 108 EmphasizeButton(hwnd,emphasized); 109 } 110 break; 111 112 case DM_DROPHELP: 113 DropHelp(mp1,mp2,hwnd,GetPString(IDS_OPENDROPHELP)); 114 return 0; 115 116 case DM_DROP: 117 { 118 char szFrom[CCHMAXPATH + 2]; 119 120 if(emphasized) { 121 emphasized = FALSE; 122 EmphasizeButton(hwnd,emphasized); 123 } 124 if(GetOneDrop(mp1,mp2,szFrom,sizeof(szFrom))) { 125 MakeValidDir(szFrom); 126 WinSendMsg(WinQueryWindow(hwnd,QW_PARENT), 127 UM_OPENWINDOWFORME, 128 MPFROMP(szFrom), 129 MPVOID); 130 } 131 } 132 return 0; 116 EmphasizeButton(hwnd, emphasized); 117 } 118 if (GetOneDrop(mp1, mp2, szFrom, sizeof(szFrom))) { 119 MakeValidDir(szFrom); 120 WinSendMsg(WinQueryWindow(hwnd, QW_PARENT), 121 UM_OPENWINDOWFORME, MPFROMP(szFrom), MPVOID); 122 } 123 } 124 return 0; 133 125 134 126 } 135 return PFNWPButton(hwnd, msg,mp1,mp2);127 return PFNWPButton(hwnd, msg, mp1, mp2); 136 128 } 137 129 138 139 VOID ShowTreeRec (HWND hwndCnr,CHAR *dirname,BOOL collapsefirst,BOOL maketop)130 VOID ShowTreeRec(HWND hwndCnr, CHAR * dirname, BOOL collapsefirst, 131 BOOL maketop) 140 132 { 141 133 /* Find a record in tree view, move it so it shows in container and 142 134 make it the current record */ 143 135 144 PCNRITEM pci,pciToSelect,pciP;145 BOOL 146 CHAR szDir[CCHMAXPATH],*p;136 PCNRITEM pci, pciToSelect, pciP; 137 BOOL quickbail = FALSE; 138 CHAR szDir[CCHMAXPATH], *p; 147 139 148 140 /* is it already the current record? */ 149 141 pci = WinSendMsg(hwndCnr, 150 142 CM_QUERYRECORDEMPHASIS, 151 MPFROMLONG(CMA_FIRST), 152 MPFROMSHORT(CRA_CURSORED)); 153 if(pci && 154 (INT)pci != -1 && 155 !stricmp(pci->szFileName,dirname)) { 143 MPFROMLONG(CMA_FIRST), MPFROMSHORT(CRA_CURSORED)); 144 if (pci && (INT) pci != -1 && !stricmp(pci->szFileName, dirname)) { 156 145 quickbail = TRUE; 157 goto MakeTop; 146 goto MakeTop; /* skip lookup bullsh*t */ 158 147 } 159 WinEnableWindowUpdate(hwndCnr,FALSE); 160 pci = FindCnrRecord(hwndCnr, 161 dirname, 162 NULL, 163 TRUE, 164 FALSE, 165 TRUE); 166 if(!pci || (INT)pci == -1) { 167 *szDir = *dirname; 148 WinEnableWindowUpdate(hwndCnr, FALSE); 149 pci = FindCnrRecord(hwndCnr, dirname, NULL, TRUE, FALSE, TRUE); 150 if (!pci || (INT) pci == -1) { 151 *szDir = *dirname; 168 152 szDir[1] = ':'; 169 153 szDir[2] = '\\'; 170 154 szDir[3] = 0; 171 155 p = szDir + 3; 172 for(;;) { 173 pciP = FindCnrRecord(hwndCnr, 174 szDir, 175 NULL, 176 TRUE, 177 FALSE, 178 TRUE); 179 if(pciP && 180 (INT)pciP != -1) { 181 if(!stricmp(dirname,pciP->szFileName)) 156 for (;;) { 157 pciP = FindCnrRecord(hwndCnr, szDir, NULL, TRUE, FALSE, TRUE); 158 if (pciP && (INT) pciP != -1) { 159 if (!stricmp(dirname, pciP->szFileName)) 182 160 break; 183 if(!(pciP->rc.flRecordAttr & CRA_EXPANDED)) 184 WinSendMsg(hwndCnr, 185 CM_EXPANDTREE, 186 MPFROMP(pciP), 187 MPVOID); 188 strcpy(szDir,dirname); 189 if(p - szDir >= strlen(szDir)) 161 if (!(pciP->rc.flRecordAttr & CRA_EXPANDED)) 162 WinSendMsg(hwndCnr, CM_EXPANDTREE, MPFROMP(pciP), MPVOID); 163 strcpy(szDir, dirname); 164 if (p - szDir >= strlen(szDir)) 190 165 break; 191 p = strchr(p, '\\');192 if (p) {166 p = strchr(p, '\\'); 167 if (p) { 193 168 *p = 0; 194 169 p++; … … 201 176 DosSleep(0L); 202 177 } 203 pci = FindCnrRecord(hwndCnr, 204 dirname, 205 NULL, 206 TRUE, 207 FALSE, 208 TRUE); 178 pci = FindCnrRecord(hwndCnr, dirname, NULL, TRUE, FALSE, TRUE); 209 179 } 210 if(pci && 211 (INT)pci != -1) { 212 if(!(pci->rc.flRecordAttr & CRA_CURSORED)) { 213 if(collapsefirst) { 180 if (pci && (INT) pci != -1) { 181 if (!(pci->rc.flRecordAttr & CRA_CURSORED)) { 182 if (collapsefirst) { 214 183 /* collapse top level of all branches */ 215 184 pciP = WinSendMsg(hwndCnr, 216 185 CM_QUERYRECORD, 217 MPVOID, 218 MPFROM2SHORT(CMA_FIRST,CMA_ITEMORDER)); 219 while(pciP && (INT)pciP != -1) { 220 if(toupper(*pciP->szFileName) == toupper(*dirname)) 186 MPVOID, MPFROM2SHORT(CMA_FIRST, CMA_ITEMORDER)); 187 while (pciP && (INT) pciP != -1) { 188 if (toupper(*pciP->szFileName) == toupper(*dirname)) 221 189 /* collapse all levels if branch is our drive */ 222 ExpandAll(hwndCnr, 223 FALSE, 224 pciP); 225 else if(pciP->rc.flRecordAttr & CRA_EXPANDED) 226 WinSendMsg(hwndCnr, 227 CM_COLLAPSETREE, 228 MPFROMP(pciP), 229 MPVOID); 190 ExpandAll(hwndCnr, FALSE, pciP); 191 else if (pciP->rc.flRecordAttr & CRA_EXPANDED) 192 WinSendMsg(hwndCnr, CM_COLLAPSETREE, MPFROMP(pciP), MPVOID); 230 193 pciP = WinSendMsg(hwndCnr, 231 194 CM_QUERYRECORD, 232 195 MPFROMP(pciP), 233 MPFROM2SHORT(CMA_NEXT, CMA_ITEMORDER));196 MPFROM2SHORT(CMA_NEXT, CMA_ITEMORDER)); 234 197 } 235 198 } 236 199 /* expand all parent branches */ 237 200 pciToSelect = pci; 238 for (;;) {201 for (;;) { 239 202 pciP = WinSendMsg(hwndCnr, 240 203 CM_QUERYRECORD, 241 204 MPFROMP(pciToSelect), 242 MPFROM2SHORT(CMA_PARENT,CMA_ITEMORDER)); 243 if(pciP && (INT)pciP != -1) { 244 if(!(pciP->rc.flRecordAttr & CRA_EXPANDED)) 245 WinSendMsg(hwndCnr, 246 CM_EXPANDTREE, 247 MPFROMP(pciP), 248 MPVOID); 205 MPFROM2SHORT(CMA_PARENT, CMA_ITEMORDER)); 206 if (pciP && (INT) pciP != -1) { 207 if (!(pciP->rc.flRecordAttr & CRA_EXPANDED)) 208 WinSendMsg(hwndCnr, CM_EXPANDTREE, MPFROMP(pciP), MPVOID); 249 209 pciToSelect = pciP; 250 210 } … … 255 215 } 256 216 /* make record visible */ 257 MakeTop:217 MakeTop: 258 218 pciToSelect = pci; 259 if(pciToSelect && (INT)pciToSelect != -1) { 260 if(fTopDir || maketop) 261 ShowCnrRecord(hwndCnr, 262 (PMINIRECORDCORE)pciToSelect); 263 if(fSwitchTreeExpand && 264 !(pciToSelect->rc.flRecordAttr & CRA_EXPANDED)) 265 WinSendMsg(hwndCnr, 266 CM_EXPANDTREE, 267 MPFROMP(pciToSelect), 268 MPVOID); 269 if(quickbail) { 270 WinEnableWindowUpdate(hwndCnr,TRUE); 219 if (pciToSelect && (INT) pciToSelect != -1) { 220 if (fTopDir || maketop) 221 ShowCnrRecord(hwndCnr, (PMINIRECORDCORE) pciToSelect); 222 if (fSwitchTreeExpand && !(pciToSelect->rc.flRecordAttr & CRA_EXPANDED)) 223 WinSendMsg(hwndCnr, CM_EXPANDTREE, MPFROMP(pciToSelect), MPVOID); 224 if (quickbail) { 225 WinEnableWindowUpdate(hwndCnr, TRUE); 271 226 return; 272 227 } … … 274 229 CM_SETRECORDEMPHASIS, 275 230 MPFROMP(pciToSelect), 276 MPFROM2SHORT(TRUE, CRA_SELECTED | CRA_CURSORED));231 MPFROM2SHORT(TRUE, CRA_SELECTED | CRA_CURSORED)); 277 232 } 278 233 } 279 WinEnableWindowUpdate(hwndCnr, TRUE);234 WinEnableWindowUpdate(hwndCnr, TRUE); 280 235 } 281 236 282 283 MRESULT EXPENTRY TreeTitleWndProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)237 MRESULT EXPENTRY TreeTitleWndProc(HWND hwnd, ULONG msg, MPARAM mp1, 238 MPARAM mp2) 284 239 { 285 PFNWP oldproc = (PFNWP)WinQueryWindowPtr(hwnd,QWL_USER); 286 287 switch(msg) { 288 case WM_CONTEXTMENU: 289 return WinSendMsg(WinQueryWindow(hwnd,QW_PARENT), 290 UM_CONTEXTMENU, 291 mp1, 292 mp2); 240 PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd, QWL_USER); 241 242 switch (msg) { 243 case WM_CONTEXTMENU: 244 return WinSendMsg(WinQueryWindow(hwnd, QW_PARENT), 245 UM_CONTEXTMENU, mp1, mp2); 293 246 } 294 return oldproc(hwnd, msg,mp1,mp2);247 return oldproc(hwnd, msg, mp1, mp2); 295 248 } 296 249 297 298 MRESULT EXPENTRY TreeStatProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) 250 MRESULT EXPENTRY TreeStatProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) 299 251 { 300 switch(msg) { 301 case WM_CREATE: 302 return CommonTextProc(hwnd,msg,mp1,mp2); 303 304 case WM_CONTEXTMENU: 305 PostMsg(WinQueryWindow(hwnd,QW_PARENT),msg,mp1,mp2); 306 return 0; 307 308 case WM_PAINT: 252 switch (msg) { 253 case WM_CREATE: 254 return CommonTextProc(hwnd, msg, mp1, mp2); 255 256 case WM_CONTEXTMENU: 257 PostMsg(WinQueryWindow(hwnd, QW_PARENT), msg, mp1, mp2); 258 return 0; 259 260 case WM_PAINT: 261 { 262 MRESULT mr = PFNWPStatic(hwnd, msg, mp1, mp2); 263 264 PaintRecessedWindow(hwnd, (HPS) 0, FALSE, FALSE); 265 return mr; 266 } 267 268 case WM_SETFOCUS: 269 if (mp2) 270 PostMsg(hwnd, UM_FOCUSME, MPVOID, MPVOID); 271 break; 272 273 case UM_FOCUSME: 274 WinSetFocus(HWND_DESKTOP, WinQueryWindow(hwnd, QW_PARENT)); 275 return 0; 276 } 277 return PFNWPStatic(hwnd, msg, mp1, mp2); 278 } 279 280 MRESULT EXPENTRY TreeFrameWndProc(HWND hwnd, ULONG msg, MPARAM mp1, 281 MPARAM mp2) 282 { 283 switch (msg) { 284 case UM_RESCAN: 285 PostMsg(WinQueryWindow(hwnd, QW_PARENT), msg, mp1, mp2); 286 return 0; 287 288 case WM_ADJUSTWINDOWPOS: 289 { 290 SWP *pswp; 291 292 pswp = (SWP *) mp1; 293 if (ParentIsDesktop(hwnd, (HWND) 0)) { 294 if (pswp->fl & (SWP_HIDE | SWP_MINIMIZE)) 295 HideNote(); 296 } 297 } 298 break; 299 300 case WM_TRACKFRAME: 301 if (!fFreeTree && !ParentIsDesktop(hwnd, (HWND) 0)) { 302 switch (SHORT1FROMMP(mp1) & TF_MOVE) { 303 case TF_MOVE: 304 case TF_LEFT: 305 case TF_TOP: 306 case (TF_LEFT | TF_BOTTOM): 307 case (TF_LEFT | TF_TOP): 308 { 309 SWP swp; 310 311 WinQueryWindowPos(hwnd, &swp); 312 if (!(swp.fl & SWP_ACTIVATE)) 313 WinSetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, 314 SWP_ZORDER | SWP_ACTIVATE); 315 } 316 return 0; 317 } 318 } 319 break; 320 321 case WM_CALCFRAMERECT: 322 if (*(ULONG *) realappname != FM3UL) { 323 324 MRESULT mr; 325 PRECTL prectl; 326 327 mr = CommonFrameWndProc(TREE_CNR, hwnd, msg, mp1, mp2); 328 329 /* 330 * Calculate the position of the client rectangle. 331 * Otherwise, we'll see a lot of redraw when we move the 332 * client during WM_FORMATFRAME. 333 */ 334 335 if (mr && mp2) { 336 prectl = (PRECTL) mp1; 337 prectl->yTop -= 22; 338 } 339 return mr; 340 } 341 break; 342 343 case WM_FORMATFRAME: 344 { 345 SHORT sCount; 346 PSWP pswp, pswpClient, pswpNew; 347 348 sCount = (SHORT) CommonFrameWndProc(TREE_CNR, hwnd, msg, mp1, mp2); 349 350 /* 351 * Reformat the frame to "squeeze" the client 352 */ 353 354 pswp = (PSWP) mp1; 309 355 { 310 MRESULT mr = PFNWPStatic(hwnd,msg,mp1,mp2); 311 312 PaintRecessedWindow(hwnd,(HPS)0,FALSE,FALSE); 313 return mr; 314 } 315 316 case WM_SETFOCUS: 317 if(mp2) 318 PostMsg(hwnd,UM_FOCUSME,MPVOID,MPVOID); 319 break; 320 321 case UM_FOCUSME: 322 WinSetFocus(HWND_DESKTOP,WinQueryWindow(hwnd,QW_PARENT)); 323 return 0; 356 SHORT x; 357 358 for (x = 0; x < sCount; x++) { 359 if (WinQueryWindowUShort(pswp->hwnd, QWS_ID) == FID_CLIENT) { 360 pswpClient = pswp; 361 break; 362 } 363 pswp++; 364 } 365 } 366 pswpNew = (PSWP) mp1 + sCount; 367 *pswpNew = *pswpClient; 368 pswpNew->hwnd = WinWindowFromID(hwnd, MAIN_STATUS); 369 if (*(ULONG *) realappname == FM3UL) { 370 371 PSWP pswpTitlebar = (PSWP) 0, pswpMinbutton = (PSWP) 0; 372 SHORT x; 373 374 pswpNew->hwnd = WinWindowFromID(hwnd, IDM_OPENWINDOW); 375 pswp = (PSWP) mp1; 376 for (x = 0; x < sCount; x++) { 377 if (WinQueryWindowUShort(pswp->hwnd, QWS_ID) == FID_TITLEBAR) 378 pswpTitlebar = pswp; 379 else if (WinQueryWindowUShort(pswp->hwnd, QWS_ID) == FID_MINMAX) 380 pswpMinbutton = pswp; 381 if (pswpTitlebar && pswpMinbutton) 382 break; 383 pswp++; 384 } 385 pswpNew->cy = pswpMinbutton->cy + 3; 386 pswpNew->cx = min(pswpNew->cy, (pswpMinbutton->cx / 2) + 3); 387 pswpTitlebar->cx -= (pswpNew->cx + 1); 388 pswpNew->x = pswpTitlebar->x + pswpTitlebar->cx; 389 pswpNew->y = pswpMinbutton->y - 1; 390 } 391 else { 392 pswpNew->x = pswpClient->x + 3; 393 pswpNew->y = (pswpClient->y + pswpClient->cy) - 20; 394 pswpNew->cx = pswpClient->cx - 6; 395 pswpNew->cy = 18; 396 pswpClient->cy -= 22; 397 } 398 sCount++; 399 return MRFROMSHORT(sCount); 400 } 401 402 case WM_QUERYFRAMECTLCOUNT: 403 { 404 SHORT sCount; 405 406 sCount = (SHORT) CommonFrameWndProc(TREE_CNR, hwnd, msg, mp1, mp2); 407 sCount++; 408 return MRFROMSHORT(sCount); 409 } 324 410 } 325 return PFNWPStatic(hwnd,msg,mp1,mp2);411 return CommonFrameWndProc(TREE_CNR, hwnd, msg, mp1, mp2); 326 412 } 327 413 328 329 MRESULT EXPENTRY TreeFrameWndProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)414 MRESULT EXPENTRY TreeClientWndProc(HWND hwnd, ULONG msg, MPARAM mp1, 415 MPARAM mp2) 330 416 { 331 switch(msg) { 332 case UM_RESCAN: 333 PostMsg(WinQueryWindow(hwnd,QW_PARENT),msg,mp1,mp2); 334 return 0; 335 336 case WM_ADJUSTWINDOWPOS: 337 { 338 SWP *pswp; 339 340 pswp = (SWP *)mp1; 341 if(ParentIsDesktop(hwnd,(HWND)0)) { 342 if(pswp->fl & (SWP_HIDE | SWP_MINIMIZE)) 343 HideNote(); 344 } 345 } 346 break; 347 348 case WM_TRACKFRAME: 349 if(!fFreeTree && !ParentIsDesktop(hwnd,(HWND)0)) { 350 switch(SHORT1FROMMP(mp1) & TF_MOVE) { 351 case TF_MOVE: 352 case TF_LEFT: 353 case TF_TOP: 354 case (TF_LEFT | TF_BOTTOM): 355 case (TF_LEFT | TF_TOP): 356 { 357 SWP swp; 358 359 WinQueryWindowPos(hwnd,&swp); 360 if(!(swp.fl & SWP_ACTIVATE)) 361 WinSetWindowPos(hwnd,HWND_TOP,0,0,0,0, 362 SWP_ZORDER | SWP_ACTIVATE); 363 } 364 return 0; 365 } 366 } 367 break; 368 369 case WM_CALCFRAMERECT: 370 if(*(ULONG *)realappname != FM3UL) { 371 372 MRESULT mr; 373 PRECTL prectl; 374 375 mr = CommonFrameWndProc(TREE_CNR,hwnd,msg,mp1,mp2); 376 377 /* 378 * Calculate the position of the client rectangle. 379 * Otherwise, we'll see a lot of redraw when we move the 380 * client during WM_FORMATFRAME. 381 */ 382 383 if(mr && mp2) { 384 prectl = (PRECTL)mp1; 385 prectl->yTop -= 22; 386 } 387 return mr; 388 } 389 break; 390 391 case WM_FORMATFRAME: 392 { 393 SHORT sCount; 394 PSWP pswp,pswpClient,pswpNew; 395 396 sCount = (SHORT)CommonFrameWndProc(TREE_CNR,hwnd,msg,mp1,mp2); 397 398 /* 399 * Reformat the frame to "squeeze" the client 400 */ 401 402 pswp = (PSWP)mp1; 403 { 404 SHORT x; 405 406 for(x = 0;x < sCount;x++) { 407 if(WinQueryWindowUShort(pswp->hwnd,QWS_ID) == FID_CLIENT) { 408 pswpClient = pswp; 409 break; 410 } 411 pswp++; 412 } 413 } 414 pswpNew = (PSWP)mp1 + sCount; 415 *pswpNew = *pswpClient; 416 pswpNew->hwnd = WinWindowFromID(hwnd,MAIN_STATUS); 417 if(*(ULONG *)realappname == FM3UL) { 418 419 PSWP pswpTitlebar = (PSWP)0,pswpMinbutton = (PSWP)0; 420 SHORT x; 421 422 pswpNew->hwnd = WinWindowFromID(hwnd,IDM_OPENWINDOW); 423 pswp = (PSWP)mp1; 424 for(x = 0;x < sCount;x++) { 425 if(WinQueryWindowUShort(pswp->hwnd,QWS_ID) == FID_TITLEBAR) 426 pswpTitlebar = pswp; 427 else if(WinQueryWindowUShort(pswp->hwnd,QWS_ID) == FID_MINMAX) 428 pswpMinbutton = pswp; 429 if(pswpTitlebar && pswpMinbutton) 430 break; 431 pswp++; 432 } 433 pswpNew->cy = pswpMinbutton->cy + 3; 434 pswpNew->cx = min(pswpNew->cy,(pswpMinbutton->cx / 2) + 3); 435 pswpTitlebar->cx -= (pswpNew->cx + 1); 436 pswpNew->x = pswpTitlebar->x + pswpTitlebar->cx; 437 pswpNew->y = pswpMinbutton->y - 1; 438 } 439 else { 440 pswpNew->x = pswpClient->x + 3; 441 pswpNew->y = (pswpClient->y + pswpClient->cy) - 20; 442 pswpNew->cx = pswpClient->cx - 6; 443 pswpNew->cy = 18; 444 pswpClient->cy -= 22; 445 } 446 sCount++; 447 return MRFROMSHORT(sCount); 448 } 449 450 case WM_QUERYFRAMECTLCOUNT: 451 { 452 SHORT sCount; 453 454 sCount = (SHORT)CommonFrameWndProc(TREE_CNR,hwnd,msg,mp1,mp2); 455 sCount++; 456 return MRFROMSHORT(sCount); 457 } 417 418 switch (msg) { 419 case UM_CONTAINERHWND: 420 return MRFROMLONG(WinWindowFromID(hwnd, TREE_CNR)); 421 422 case UM_VIEWSMENU: 423 return MRFROMLONG(CheckMenu(&TreeCnrMenu, TREECNR_POPUP)); 424 425 case UM_TIMER: 426 case UM_ACTION: 427 case UM_SHOWME: 428 case UM_OPENWINDOWFORME: 429 case UM_MINIMIZE: 430 case UM_MAXIMIZE: 431 case WM_INITMENU: 432 case UM_INITMENU: 433 case UM_FILTER: 434 case UM_FILESMENU: 435 case UM_UPDATERECORD: 436 case UM_UPDATERECORDLIST: 437 case MM_PORTHOLEINIT: 438 case UM_DRIVECMD: 439 case WM_CLOSE: 440 case WM_CONTROL: 441 case UM_COMMAND: 442 case WM_COMMAND: 443 return WinSendMsg(WinWindowFromID(hwnd, TREE_CNR), msg, mp1, mp2); 444 445 case WM_PSETFOCUS: 446 case WM_SETFOCUS: 447 if (mp2) 448 PostMsg(hwnd, UM_FOCUSME, MPVOID, MPVOID); 449 break; 450 451 case UM_FOCUSME: 452 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, TREE_CNR)); 453 break; 454 455 case WM_ERASEBACKGROUND: 456 WinFillRect((HPS) mp1, (PRECTL) mp2, 0x00d0d0d0); 457 return 0; 458 459 case WM_PAINT: 460 { 461 HPS hps; 462 RECTL rcl; 463 464 hps = WinBeginPaint(hwnd, (HPS) 0, NULL); 465 if (hps) { 466 WinQueryWindowRect(hwnd, &rcl); 467 WinFillRect(hps, &rcl, CLR_PALEGRAY); 468 PaintRecessedWindow(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT), 469 MAIN_STATUS), hps, FALSE, FALSE); 470 WinEndPaint(hps); 471 } 472 } 473 break; 474 475 case WM_SIZE: 476 WinSetWindowPos(WinWindowFromID(hwnd, TREE_CNR), 477 HWND_TOP, 478 0, 479 0, 480 SHORT1FROMMP(mp2), 481 SHORT2FROMMP(mp2), SWP_SHOW | SWP_MOVE | SWP_SIZE); 482 if (hwndMain) 483 PostMsg(hwndMain, UM_SIZE, MPVOID, MPVOID); 484 break; 485 486 case WM_CONTEXTMENU: 487 case UM_CONTEXTMENU: 488 PostMsg(WinWindowFromID(hwnd, TREE_CNR), 489 WM_CONTROL, MPFROM2SHORT(TREE_CNR, CN_CONTEXTMENU), MPVOID); 490 return 0; 458 491 } 459 return CommonFrameWndProc(TREE_CNR,hwnd,msg,mp1,mp2);492 return WinDefWindowProc(hwnd, msg, mp1, mp2); 460 493 } 461 494 462 463 MRESULT EXPENTRY TreeClientWndProc (HWND hwnd,ULONG msg,MPARAM mp1, 464 MPARAM mp2) { 465 466 switch(msg) { 467 case UM_CONTAINERHWND: 468 return MRFROMLONG(WinWindowFromID(hwnd, 469 TREE_CNR)); 470 471 case UM_VIEWSMENU: 472 return MRFROMLONG(CheckMenu(&TreeCnrMenu, 473 TREECNR_POPUP)); 474 475 case UM_TIMER: 476 case UM_ACTION: 477 case UM_SHOWME: 478 case UM_OPENWINDOWFORME: 479 case UM_MINIMIZE: 480 case UM_MAXIMIZE: 481 case WM_INITMENU: 482 case UM_INITMENU: 483 case UM_FILTER: 484 case UM_FILESMENU: 485 case UM_UPDATERECORD: 486 case UM_UPDATERECORDLIST: 487 case MM_PORTHOLEINIT: 488 case UM_DRIVECMD: 489 case WM_CLOSE: 490 case WM_CONTROL: 491 case UM_COMMAND: 492 case WM_COMMAND: 493 return WinSendMsg(WinWindowFromID(hwnd,TREE_CNR), 494 msg, 495 mp1, 496 mp2); 497 498 case WM_PSETFOCUS: 499 case WM_SETFOCUS: 500 if(mp2) 501 PostMsg(hwnd, 502 UM_FOCUSME, 503 MPVOID, 504 MPVOID); 505 break; 506 507 case UM_FOCUSME: 508 WinSetFocus(HWND_DESKTOP, 509 WinWindowFromID(hwnd,TREE_CNR)); 510 break; 511 512 case WM_ERASEBACKGROUND: 513 WinFillRect((HPS)mp1, 514 (PRECTL)mp2, 515 0x00d0d0d0); 516 return 0; 517 518 case WM_PAINT: 519 { 520 HPS hps; 521 RECTL rcl; 522 523 hps = WinBeginPaint(hwnd, 524 (HPS)0, 525 NULL); 526 if(hps) { 527 WinQueryWindowRect(hwnd, 528 &rcl); 529 WinFillRect(hps, 530 &rcl, 531 CLR_PALEGRAY); 532 PaintRecessedWindow(WinWindowFromID(WinQueryWindow(hwnd,QW_PARENT), 533 MAIN_STATUS), 534 hps, 535 FALSE, 536 FALSE); 537 WinEndPaint(hps); 538 } 539 } 540 break; 541 542 case WM_SIZE: 543 WinSetWindowPos(WinWindowFromID(hwnd,TREE_CNR), 544 HWND_TOP, 545 0, 546 0, 547 SHORT1FROMMP(mp2), 548 SHORT2FROMMP(mp2), 549 SWP_SHOW | SWP_MOVE | SWP_SIZE); 550 if(hwndMain) 551 PostMsg(hwndMain, 552 UM_SIZE, 553 MPVOID, 554 MPVOID); 555 break; 556 557 case WM_CONTEXTMENU: 558 case UM_CONTEXTMENU: 559 PostMsg(WinWindowFromID(hwnd,TREE_CNR), 560 WM_CONTROL, 561 MPFROM2SHORT(TREE_CNR,CN_CONTEXTMENU), 562 MPVOID); 563 return 0; 564 } 565 return WinDefWindowProc(hwnd,msg,mp1,mp2); 566 } 567 568 569 MRESULT EXPENTRY TreeObjWndProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) 495 MRESULT EXPENTRY TreeObjWndProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) 570 496 { 571 497 DIRCNRDATA *dcd; 572 498 573 switch(msg) 574 { 575 case WM_CREATE: 576 break; 577 578 case UM_SHOWME: 579 if(mp1) 499 switch (msg) { 500 case WM_CREATE: 501 break; 502 503 case UM_SHOWME: 504 if (mp1) { 505 dcd = INSTDATA(hwnd); 506 if (dcd) { 507 BOOL tempsusp, tempfollow, temptop; 508 509 tempsusp = dcd->suspendview; 510 dcd->suspendview = TRUE; 511 tempfollow = fFollowTree; 512 fFollowTree = FALSE; 513 if (mp2) { 514 temptop = fTopDir; 515 fTopDir = TRUE; 516 } 517 ShowTreeRec(dcd->hwndCnr, (CHAR *) mp1, fCollapseFirst, TRUE); 518 dcd->suspendview = tempsusp; 519 fFollowTree = tempfollow; 520 if (mp2) 521 fTopDir = temptop; 522 } 523 free((CHAR *) mp1); 524 } 525 return 0; 526 527 case DM_PRINTOBJECT: 528 return MRFROMLONG(DRR_TARGET); 529 530 case DM_DISCARDOBJECT: 531 dcd = INSTDATA(hwnd); 532 if (fFM2Deletes && dcd) { 533 534 LISTINFO *li; 535 CNRDRAGINFO cni; 536 537 cni.pRecord = NULL; 538 cni.pDragInfo = (PDRAGINFO) mp1; 539 li = DoFileDrop(dcd->hwndCnr, 540 dcd->directory, FALSE, MPVOID, MPFROMP(&cni)); 541 if (li) { 542 li->type = ((fDefaultDeletePerm) ? IDM_PERMDELETE : IDM_DELETE); 543 if (!PostMsg(hwnd, UM_MASSACTION, MPFROMP(li), MPVOID)) 544 FreeListInfo(li); 545 else 546 return MRFROMLONG(DRR_SOURCE); 547 } 548 } 549 return MRFROMLONG(DRR_TARGET); 550 551 case UM_EXPAND: 552 dcd = WinQueryWindowPtr(hwnd, QWL_USER); 553 if (!dcd) 554 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT); 555 else { 556 BOOL tempsusp = dcd->suspendview; 557 558 dcd->suspendview = TRUE; 559 ExpandAll(dcd->hwndCnr, 560 (SHORT1FROMMP(mp1) == IDM_EXPAND), (PCNRITEM) mp2); 561 dcd->suspendview = tempsusp; 562 PostMsg(dcd->hwndCnr, UM_FILTER, MPVOID, MPVOID); 563 } 564 return 0; 565 566 case UM_UPDATERECORDLIST: 567 dcd = WinQueryWindowPtr(hwnd, QWL_USER); 568 if (!dcd || !mp1) 569 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT); 570 else { 571 INT numentries = 0; 572 CHAR **list = (CHAR **) mp1; 573 574 while (list[numentries]) 575 numentries++; 576 if (numentries) 577 UpdateCnrList(dcd->hwndCnr, list, numentries, TRUE, dcd); 578 } 579 return 0; 580 581 case UM_SETUP: 582 dcd = WinQueryWindowPtr(hwnd, QWL_USER); 583 if (!dcd) 584 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT); 585 else { 586 dcd->hwndObject = hwnd; 587 if (ParentIsDesktop(hwnd, dcd->hwndParent)) 588 DosSleep(250L); 589 } 590 return 0; 591 592 case UM_RESCAN2: 593 dcd = WinQueryWindowPtr(hwnd, QWL_USER); 594 if (!dcd) 595 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT); 596 // Bypass if not running integrated (i.e if vtree) 597 else if (hwndStatus && 598 dcd->hwndFrame == WinQueryActiveWindow(dcd->hwndParent)) { 599 CHAR s[CCHMAXPATH * 2]; 600 PCNRITEM pci = (PCNRITEM) mp1; 601 FSALLOCATE fsa; 602 struct 580 603 { 581 dcd = INSTDATA(hwnd); 582 if(dcd) 583 { 584 BOOL tempsusp,tempfollow,temptop; 585 586 tempsusp = dcd->suspendview; 587 dcd->suspendview = TRUE; 588 tempfollow = fFollowTree; 589 fFollowTree = FALSE; 590 if(mp2) { 591 temptop = fTopDir; 592 fTopDir = TRUE; 593 } 594 ShowTreeRec(dcd->hwndCnr, 595 (CHAR *)mp1, 596 fCollapseFirst, 597 TRUE); 598 dcd->suspendview = tempsusp; 599 fFollowTree = tempfollow; 600 if(mp2) 601 fTopDir = temptop; 602 } 603 free((CHAR *)mp1); 604 } 605 return 0; 606 607 case DM_PRINTOBJECT: 608 return MRFROMLONG(DRR_TARGET); 609 610 case DM_DISCARDOBJECT: 611 dcd = INSTDATA(hwnd); 612 if(fFM2Deletes && dcd) { 613 614 LISTINFO *li; 615 CNRDRAGINFO cni; 616 617 cni.pRecord = NULL; 618 cni.pDragInfo = (PDRAGINFO)mp1; 619 li = DoFileDrop(dcd->hwndCnr, 620 dcd->directory, 621 FALSE, 622 MPVOID, 623 MPFROMP(&cni)); 624 if(li) { 625 li->type = ((fDefaultDeletePerm) ? 626 IDM_PERMDELETE : 627 IDM_DELETE); 628 if(!PostMsg(hwnd, 629 UM_MASSACTION, 630 MPFROMP(li), 631 MPVOID)) 632 FreeListInfo(li); 633 else 634 return MRFROMLONG(DRR_SOURCE); 635 } 636 } 637 return MRFROMLONG(DRR_TARGET); 638 639 case UM_EXPAND: 640 dcd = WinQueryWindowPtr(hwnd,QWL_USER); 641 if (!dcd) 642 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT); 643 else { 644 BOOL tempsusp = dcd->suspendview; 645 646 dcd->suspendview = TRUE; 647 ExpandAll(dcd->hwndCnr, 648 (SHORT1FROMMP(mp1) == IDM_EXPAND), 649 (PCNRITEM)mp2); 650 dcd->suspendview = tempsusp; 651 PostMsg(dcd->hwndCnr, 652 UM_FILTER, 653 MPVOID, 654 MPVOID); 655 } 656 return 0; 657 658 case UM_UPDATERECORDLIST: 659 dcd = WinQueryWindowPtr(hwnd,QWL_USER); 660 if (!dcd || !mp1) 661 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT); 662 else { 663 INT numentries = 0; 664 CHAR **list = (CHAR **)mp1; 665 666 while(list[numentries]) 667 numentries++; 668 if(numentries) 669 UpdateCnrList(dcd->hwndCnr, 670 list, 671 numentries, 672 TRUE, 673 dcd); 674 } 675 return 0; 676 677 case UM_SETUP: 678 dcd = WinQueryWindowPtr(hwnd,QWL_USER); 679 if (!dcd) 680 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT); 681 else { 682 dcd->hwndObject = hwnd; 683 if(ParentIsDesktop(hwnd,dcd->hwndParent)) 684 DosSleep(250L); 685 } 686 return 0; 687 688 case UM_RESCAN2: 689 dcd = WinQueryWindowPtr(hwnd,QWL_USER); 690 if (!dcd) 691 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT); 692 // Bypass if not running integrated (i.e if vtree) 693 else if (hwndStatus && 694 dcd->hwndFrame == WinQueryActiveWindow(dcd->hwndParent)) { 695 CHAR s[CCHMAXPATH * 2]; 696 PCNRITEM pci = (PCNRITEM)mp1; 697 FSALLOCATE fsa; 698 struct 699 { 700 ULONG serial; 701 CHAR volumelength; 702 CHAR volumelabel[CCHMAXPATH]; 703 } volser; 704 CHAR tb[64]; 705 CHAR szFree[64]; 706 CNRINFO cnri; 707 708 strcpy(s,GetPString(IDS_TREETEXT)); 709 memset(&cnri,0,sizeof(CNRINFO)); 710 cnri.cb = sizeof(CNRINFO); 711 WinSendMsg(dcd->hwndCnr, 712 CM_QUERYCNRINFO, 713 MPFROMP(&cnri), 714 MPFROMLONG(sizeof(CNRINFO))); 715 if (cnri.cRecords) 716 { 717 sprintf(s, 718 GetPString(IDS_NUMDRIVESTEXT), 719 cnri.cRecords); 720 if (pci) 721 { 722 if (!(driveflags[toupper(*pci->szFileName) - 'A'] & 723 DRIVE_REMOVABLE) || 724 driveserial[toupper(*pci->szFileName) - 'A'] != -1) 725 { 726 memset(&volser,0,sizeof(volser)); 604 ULONG serial; 605 CHAR volumelength; 606 CHAR volumelabel[CCHMAXPATH]; 607 } 608 volser; 609 CHAR tb[64]; 610 CHAR szFree[64]; 611 CNRINFO cnri; 612 613 strcpy(s, GetPString(IDS_TREETEXT)); 614 memset(&cnri, 0, sizeof(CNRINFO)); 615 cnri.cb = sizeof(CNRINFO); 616 WinSendMsg(dcd->hwndCnr, 617 CM_QUERYCNRINFO, 618 MPFROMP(&cnri), MPFROMLONG(sizeof(CNRINFO))); 619 if (cnri.cRecords) { 620 sprintf(s, GetPString(IDS_NUMDRIVESTEXT), cnri.cRecords); 621 if (pci) { 622 if (!(driveflags[toupper(*pci->szFileName) - 'A'] & 623 DRIVE_REMOVABLE) || 624 driveserial[toupper(*pci->szFileName) - 'A'] != -1) { 625 memset(&volser, 0, sizeof(volser)); 626 DosError(FERR_DISABLEHARDERR); 627 if (!DosQueryFSInfo(toupper(*pci->szFileName) - '@', 628 FSIL_VOLSER, 629 &volser, 630 (ULONG) sizeof(volser)) && 631 dcd->hwndFrame == WinQueryActiveWindow(dcd->hwndParent)) { 727 632 DosError(FERR_DISABLEHARDERR); 728 633 if (!DosQueryFSInfo(toupper(*pci->szFileName) - '@', 729 FSIL_VOLSER, 730 &volser, 731 (ULONG)sizeof(volser)) && 732 dcd->hwndFrame == WinQueryActiveWindow(dcd->hwndParent)) 733 { 734 DosError(FERR_DISABLEHARDERR); 735 if (!DosQueryFSInfo(toupper(*pci->szFileName) - '@', 736 FSIL_ALLOC, 737 &fsa, 738 sizeof(FSALLOCATE))) 739 { 740 CommaFmtULL(tb,sizeof(tb), 741 (ULONGLONG)fsa.cUnitAvail * (fsa.cSectorUnit * fsa.cbSector), 742 'M'); 743 sprintf(szFree, " %s %s", 744 tb,GetPString(IDS_FREETEXT)); 745 } 746 else 747 *szFree = 0; 748 driveserial[toupper(*pci->szFileName) - 'A'] = volser.serial; 749 sprintf(&s[strlen(s)], 750 GetPString(IDS_TREESTATUSSTARTTEXT), 751 toupper(*pci->szFileName), 752 volser.volumelabel, 753 volser.serial,szFree); 754 if (!fMoreButtons) 755 { 756 if (*dcd->mask.szMask || 757 (dcd->mask.attrFile != ALLATTRS || 758 ((fFilesInTree || 759 (driveflags[toupper(*pci->szFileName)] & 760 DRIVE_INCLUDEFILES)) ? 761 dcd->mask.antiattr : 762 (dcd->mask.antiattr && 763 dcd->mask.antiattr != FILE_DIRECTORY)))) 764 { 765 sprintf (&s[strlen(s)], 766 " (%s)", 767 (*dcd->mask.szMask) ? 768 dcd->mask.szMask : 769 GetPString(IDS_ATTRTEXT)); 770 } 634 FSIL_ALLOC, &fsa, sizeof(FSALLOCATE))) { 635 CommaFmtULL(tb, sizeof(tb), 636 (ULONGLONG) fsa.cUnitAvail * (fsa.cSectorUnit * 637 fsa.cbSector), 'M'); 638 sprintf(szFree, " %s %s", tb, GetPString(IDS_FREETEXT)); 639 } 640 else 641 *szFree = 0; 642 driveserial[toupper(*pci->szFileName) - 'A'] = volser.serial; 643 sprintf(&s[strlen(s)], 644 GetPString(IDS_TREESTATUSSTARTTEXT), 645 toupper(*pci->szFileName), 646 volser.volumelabel, volser.serial, szFree); 647 if (!fMoreButtons) { 648 if (*dcd->mask.szMask || 649 (dcd->mask.attrFile != ALLATTRS || 650 ((fFilesInTree || 651 (driveflags[toupper(*pci->szFileName)] & 652 DRIVE_INCLUDEFILES)) ? 653 dcd->mask.antiattr : 654 (dcd->mask.antiattr && 655 dcd->mask.antiattr != FILE_DIRECTORY)))) { 656 sprintf(&s[strlen(s)], 657 " (%s)", 658 (*dcd->mask.szMask) ? 659 dcd->mask.szMask : GetPString(IDS_ATTRTEXT)); 771 660 } 772 661 } 773 662 } 774 else 775 { 776 /* find root record and strip it */ 777 pci = FindParentRecord(dcd->hwndCnr,pci); 778 driveserial[toupper(*pci->szFileName) - 'A'] = -1; 779 UnFlesh(dcd->hwndCnr,pci); 780 } 781 } 782 } 783 if (dcd->hwndFrame == WinQueryActiveWindow(dcd->hwndParent)) 784 WinSetWindowText(hwndStatus,s); 785 } 663 } 664 else { 665 /* find root record and strip it */ 666 pci = FindParentRecord(dcd->hwndCnr, pci); 667 driveserial[toupper(*pci->szFileName) - 'A'] = -1; 668 UnFlesh(dcd->hwndCnr, pci); 669 } 670 } 671 } 672 if (dcd->hwndFrame == WinQueryActiveWindow(dcd->hwndParent)) 673 WinSetWindowText(hwndStatus, s); 674 } 675 return 0; 676 677 case UM_RESCAN: 678 /* 679 * populate container 680 */ 681 dcd = WinQueryWindowPtr(hwnd, QWL_USER); 682 if (!dcd) 683 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT); 684 else { 685 WinSendMsg(dcd->hwndCnr, 686 CM_REMOVERECORD, 687 MPVOID, 688 MPFROM2SHORT(0, CMA_FREE | CMA_INVALIDATE | CMA_ERASE)); 689 WinSendMsg(dcd->hwndCnr, 690 CM_SCROLLWINDOW, MPFROMSHORT(CMA_VERTICAL), MPFROMLONG(-1)); 691 WinSendMsg(dcd->hwndCnr, 692 CM_SCROLLWINDOW, 693 MPFROMSHORT(CMA_HORIZONTAL), MPFROMLONG(-1)); 694 FillTreeCnr(dcd->hwndCnr, dcd->hwndParent); 695 if (fOkayMinimize) { 696 PostMsg(dcd->hwndCnr, UM_MINIMIZE, MPVOID, MPVOID); 697 fOkayMinimize = FALSE; 698 } 699 WinSendMsg(dcd->hwndCnr, 700 CM_INVALIDATERECORD, 701 MPVOID, MPFROM2SHORT(0, CMA_ERASE | CMA_REPOSITION)); 702 PostMsg(dcd->hwndCnr, UM_RESCAN, MPVOID, MPVOID); 703 } 704 return 0; 705 706 case UM_COMMAND: 707 if (mp1) { 708 709 LISTINFO *li = (LISTINFO *) mp1; 710 711 switch (li->type) { 712 case IDM_DOITYOURSELF: 713 case IDM_APPENDTOCLIP: 714 case IDM_SAVETOCLIP: 715 case IDM_ARCHIVE: 716 case IDM_VIEW: 717 case IDM_EDIT: 718 case IDM_OBJECT: 719 case IDM_SHADOW: 720 case IDM_SHADOW2: 721 case IDM_PRINT: 722 case IDM_ATTRS: 723 case IDM_DELETE: 724 case IDM_PERMDELETE: 725 if (PostMsg(hwnd, UM_MASSACTION, mp1, mp2)) 726 return (MRESULT) TRUE; 727 default: 728 if (PostMsg(hwnd, UM_ACTION, mp1, mp2)) 729 return (MRESULT) TRUE; 730 } 731 } 732 return 0; 733 734 case UM_MASSACTION: 735 if (mp1) { 736 737 dcd = WinQueryWindowPtr(hwnd, QWL_USER); 738 if (!dcd) 739 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT); 740 else { 741 WORKER *wk; 742 743 wk = xmallocz(sizeof(WORKER), pszSrcFile, __LINE__); 744 if (!wk) 745 FreeListInfo((LISTINFO *) mp1); 746 else { 747 wk->size = sizeof(WORKER); 748 wk->hwndCnr = dcd->hwndCnr; 749 wk->hwndParent = dcd->hwndParent; 750 wk->hwndFrame = dcd->hwndFrame; 751 wk->hwndClient = dcd->hwndClient; 752 wk->li = (LISTINFO *) mp1; 753 strcpy(wk->directory, dcd->directory); 754 if (_beginthread(MassAction, NULL, 122880, (PVOID) wk) == -1) { 755 Runtime_Error(pszSrcFile, __LINE__, 756 GetPString(IDS_COULDNTSTARTTHREADTEXT)); 757 free(wk); 758 FreeListInfo((LISTINFO *) mp1); 759 } 760 } 761 } 762 } 763 return 0; 764 765 case UM_ACTION: 766 if (mp1) { 767 768 dcd = WinQueryWindowPtr(hwnd, QWL_USER); 769 if (!dcd) 770 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT); 771 else { 772 WORKER *wk; 773 774 wk = xmallocz(sizeof(WORKER), pszSrcFile, __LINE__); 775 if (!wk) 776 FreeListInfo((LISTINFO *) mp1); 777 else { 778 wk->size = sizeof(WORKER); 779 wk->hwndCnr = dcd->hwndCnr; 780 wk->hwndParent = dcd->hwndParent; 781 wk->hwndFrame = dcd->hwndFrame; 782 wk->hwndClient = dcd->hwndClient; 783 wk->li = (LISTINFO *) mp1; 784 strcpy(wk->directory, dcd->directory); 785 if (_beginthread(Action, NULL, 122880, (PVOID) wk) == -1) { 786 Runtime_Error(pszSrcFile, __LINE__, 787 GetPString(IDS_COULDNTSTARTTHREADTEXT)); 788 free(wk); 789 FreeListInfo((LISTINFO *) mp1); 790 } 791 } 792 } 793 } 794 return 0; 795 796 case WM_CLOSE: 797 WinDestroyWindow(hwnd); 798 break; 799 800 case WM_DESTROY: 801 hwndTree = (HWND) 0; 802 dcd = WinQueryWindowPtr(hwnd, QWL_USER); 803 if (dcd) { 804 WinSendMsg(dcd->hwndCnr, 805 UM_CLOSE, MPFROMLONG(dcd->dontclose != FALSE), MPVOID); 806 free(dcd); 807 } 808 DosPostEventSem(CompactSem); 809 if (!PostMsg((HWND) 0, WM_QUIT, MPVOID, MPVOID)) 810 WinSendMsg((HWND) 0, WM_QUIT, MPVOID, MPVOID); 811 break; 812 } 813 return WinDefWindowProc(hwnd, msg, mp1, mp2); 814 } 815 816 MRESULT EXPENTRY TreeCnrWndProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) 817 { 818 static APPNOTIFY *apphead = NULL, *apptail = NULL; 819 DIRCNRDATA *dcd = WinQueryWindowPtr(hwnd, QWL_USER); 820 821 switch (msg) { 822 case DM_PRINTOBJECT: 823 return MRFROMLONG(DRR_TARGET); 824 825 case DM_DISCARDOBJECT: 826 if (dcd) 827 return WinSendMsg(dcd->hwndObject, msg, mp1, mp2); 828 else 829 return MRFROMLONG(DRR_TARGET); 830 831 case WM_CHAR: 832 shiftstate = (SHORT1FROMMP(mp1) & (KC_SHIFT | KC_ALT | KC_CTRL)); 833 if (SHORT1FROMMP(mp1) & KC_KEYUP) 834 return (MRESULT) TRUE; 835 if (SHORT1FROMMP(mp1) & KC_VIRTUALKEY) { 836 switch (SHORT2FROMMP(mp2)) { 837 case VK_INSERT: 838 if ((shiftstate & KC_CTRL) == KC_CTRL) 839 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(IDM_MKDIR, 0), MPVOID); 840 break; 841 case VK_DELETE: 842 if ((shiftstate & KC_CTRL) == KC_CTRL) 843 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(IDM_PERMDELETE, 0), MPVOID); 844 else if ((shiftstate & KC_SHIFT) == KC_SHIFT) 845 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(IDM_SAVETOCLIP, 0), MPVOID); 846 else 847 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(IDM_DELETE, 0), MPVOID); 848 break; 849 } 850 } 851 if (shiftstate || fNoSearch) 852 break; 853 if (SHORT1FROMMP(mp1) & KC_CHAR) { 854 855 ULONG thistime, len; 856 SEARCHSTRING srch; 857 PCNRITEM pci; 858 859 if (!dcd) 860 break; 861 switch (SHORT1FROMMP(mp2)) { 862 case '\x1b': 863 case '\r': 864 case '\n': 865 dcd->lasttime = 0; 866 *dcd->szCommonName = 0; 867 break; 868 default: 869 thistime = WinQueryMsgTime(WinQueryAnchorBlock(hwnd)); 870 if (thistime > dcd->lasttime + 1250) 871 *dcd->szCommonName = 0; 872 dcd->lasttime = thistime; 873 if (SHORT1FROMMP(mp2) == ' ' && !*dcd->szCommonName) 874 break; 875 KbdRetry: 876 len = strlen(dcd->szCommonName); 877 if (len >= CCHMAXPATH - 1) { 878 *dcd->szCommonName = 0; 879 len = 0; 880 } 881 dcd->szCommonName[len] = toupper(SHORT1FROMMP(mp2)); 882 dcd->szCommonName[len + 1] = 0; 883 memset(&srch, 0, sizeof(SEARCHSTRING)); 884 srch.cb = (ULONG) sizeof(SEARCHSTRING); 885 srch.pszSearch = (PSZ) dcd->szCommonName; 886 srch.fsPrefix = TRUE; 887 srch.fsCaseSensitive = FALSE; 888 srch.usView = CV_ICON; 889 pci = WinSendMsg(hwnd, 890 CM_SEARCHSTRING, 891 MPFROMP(&srch), MPFROMLONG(CMA_FIRST)); 892 if (pci && (INT) pci != -1) { 893 /* make found item current item */ 894 WinSendMsg(hwnd, 895 CM_SETRECORDEMPHASIS, 896 MPFROMP(pci), MPFROM2SHORT(TRUE, CRA_CURSORED)); 897 /* make sure that record shows in viewport */ 898 ShowCnrRecord(hwnd, (PMINIRECORDCORE) pci); 899 return (MRESULT) TRUE; 900 } 901 else { 902 if (SHORT1FROMMP(mp2) == ' ') { 903 dcd->szCommonName[len] = 0; 904 break; 905 } 906 *dcd->szCommonName = 0; 907 dcd->lasttime = 0; 908 if (len) // retry as first letter if no match 909 goto KbdRetry; 910 } 911 break; 912 } 913 } 914 break; 915 916 case WM_MOUSEMOVE: 917 case WM_BUTTON1UP: 918 case WM_BUTTON2UP: 919 case WM_BUTTON3UP: 920 shiftstate = (SHORT2FROMMP(mp2) & (KC_SHIFT | KC_ALT | KC_CTRL)); 921 break; 922 923 case UM_TIMER: 924 if (dcd && dcd->hwndFrame == WinQueryActiveWindow(dcd->hwndParent) && 925 hwndStatus2) { 926 FILEFINDBUF3 ffb; 927 ULONG nm = 1L; 928 HDIR hdir = HDIR_CREATE; 929 930 if (*SwapperDat) { 931 if (!DosFindFirst(SwapperDat, 932 &hdir, 933 FILE_NORMAL | FILE_HIDDEN | 934 FILE_SYSTEM | FILE_ARCHIVED | FILE_READONLY, 935 &ffb, sizeof(ffb), &nm, FIL_STANDARD)) { 936 CHAR tb[39], tm[39], tpm[39], s[163]; 937 ULONG amem; 938 939 priority_bumped(); 940 DosFindClose(hdir); 941 if (!DosQuerySysInfo(QSV_TOTAVAILMEM, 942 QSV_TOTAVAILMEM, 943 (PVOID) & amem, sizeof(amem))) { 944 CommaFmtULL(tpm, sizeof(tpm), amem, 'M'); 945 } 946 else 947 *tpm = 0; 948 if (!Dos16MemAvail(&amem)) 949 CommaFmtULL(tm, sizeof(tm), amem, 'M'); 950 else 951 *tm = 0; 952 CommaFmtULL(tb, sizeof(tb), ffb.cbFile, 'M'); 953 sprintf(s, " %s %s%s%s%s%s", 954 GetPString(IDS_SWAPFILETEXT), 955 tb, 956 *tm ? GetPString(IDS_TREEMEMTEXT) : NullStr, 957 tm, *tpm ? "/" : NullStr, tpm); 958 WinSetWindowText(hwndStatus2, s); 959 } 960 else 961 WinSetWindowText(hwndStatus2, NullStr); 962 } 963 else 964 WinSetWindowText(hwndStatus2, NullStr); 965 } 966 if (msg == UM_TIMER) 786 967 return 0; 787 788 case UM_RESCAN: 789 /* 790 * populate container 791 */ 792 dcd = WinQueryWindowPtr(hwnd,QWL_USER); 793 if (!dcd) 794 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT); 795 else { 796 WinSendMsg(dcd->hwndCnr, 797 CM_REMOVERECORD, 798 MPVOID, 799 MPFROM2SHORT(0,CMA_FREE | CMA_INVALIDATE | CMA_ERASE)); 800 WinSendMsg(dcd->hwndCnr, 801 CM_SCROLLWINDOW, 802 MPFROMSHORT(CMA_VERTICAL), 803 MPFROMLONG(-1)); 804 WinSendMsg(dcd->hwndCnr, 805 CM_SCROLLWINDOW, 806 MPFROMSHORT(CMA_HORIZONTAL), 807 MPFROMLONG(-1)); 808 FillTreeCnr(dcd->hwndCnr, 809 dcd->hwndParent); 810 if(fOkayMinimize) { 811 PostMsg(dcd->hwndCnr, 812 UM_MINIMIZE, 813 MPVOID, 814 MPVOID); 815 fOkayMinimize = FALSE; 816 } 817 WinSendMsg(dcd->hwndCnr, 818 CM_INVALIDATERECORD, 819 MPVOID, 820 MPFROM2SHORT(0,CMA_ERASE | CMA_REPOSITION)); 821 PostMsg(dcd->hwndCnr, 822 UM_RESCAN, 823 MPVOID, 824 MPVOID); 825 } 826 return 0; 827 828 case UM_COMMAND: 829 if(mp1) { 830 831 LISTINFO *li = (LISTINFO *)mp1; 832 833 switch(li->type) { 834 case IDM_DOITYOURSELF: 835 case IDM_APPENDTOCLIP: 836 case IDM_SAVETOCLIP: 837 case IDM_ARCHIVE: 838 case IDM_VIEW: 839 case IDM_EDIT: 840 case IDM_OBJECT: 841 case IDM_SHADOW: 842 case IDM_SHADOW2: 843 case IDM_PRINT: 844 case IDM_ATTRS: 845 case IDM_DELETE: 846 case IDM_PERMDELETE: 847 if(PostMsg(hwnd, 848 UM_MASSACTION, 849 mp1, 850 mp2)) 851 return (MRESULT)TRUE; 852 default: 853 if(PostMsg(hwnd, 854 UM_ACTION, 855 mp1, 856 mp2)) 857 return (MRESULT)TRUE; 858 } 859 } 860 return 0; 861 862 case UM_MASSACTION: 863 if(mp1) { 864 865 dcd = WinQueryWindowPtr(hwnd,QWL_USER); 866 if (!dcd) 867 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT); 968 break; 969 970 case WM_PRESPARAMCHANGED: 971 PresParamChanged(hwnd, "TreeCnr", mp1, mp2); 972 break; 973 974 case UM_FILESMENU: 975 { 976 PCNRITEM pci; 977 HWND menuHwnd = (HWND) 0; 978 979 pci = (PCNRITEM) CurrentRecord(hwnd); 980 if (pci && (INT) pci != -1) { 981 if (IsRoot(pci->szFileName)) 982 menuHwnd = CheckMenu(&TreeMenu, TREE_POPUP); 868 983 else { 869 WORKER *wk; 870 871 wk = xmallocz(sizeof(WORKER), pszSrcFile, __LINE__); 872 if (!wk) 873 FreeListInfo((LISTINFO *)mp1); 874 else { 875 wk->size = sizeof(WORKER); 876 wk->hwndCnr = dcd->hwndCnr; 877 wk->hwndParent = dcd->hwndParent; 878 wk->hwndFrame = dcd->hwndFrame; 879 wk->hwndClient = dcd->hwndClient; 880 wk->li = (LISTINFO *)mp1; 881 strcpy(wk->directory,dcd->directory); 882 if (_beginthread(MassAction,NULL,122880,(PVOID)wk) == -1) { 883 Runtime_Error(pszSrcFile, __LINE__, GetPString(IDS_COULDNTSTARTTHREADTEXT)); 884 free(wk); 885 FreeListInfo((LISTINFO *)mp1); 886 } 887 } 888 } 889 } 890 return 0; 891 892 case UM_ACTION: 893 if(mp1) { 894 895 dcd = WinQueryWindowPtr(hwnd,QWL_USER); 896 if (!dcd) 897 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT); 898 else { 899 WORKER *wk; 900 901 wk = xmallocz(sizeof(WORKER), pszSrcFile,__LINE__); 902 if (!wk) 903 FreeListInfo((LISTINFO *)mp1); 904 else { 905 wk->size = sizeof(WORKER); 906 wk->hwndCnr = dcd->hwndCnr; 907 wk->hwndParent = dcd->hwndParent; 908 wk->hwndFrame = dcd->hwndFrame; 909 wk->hwndClient = dcd->hwndClient; 910 wk->li = (LISTINFO *)mp1; 911 strcpy(wk->directory,dcd->directory); 912 if (_beginthread(Action,NULL,122880,(PVOID)wk) == -1) { 913 Runtime_Error(pszSrcFile, __LINE__, GetPString(IDS_COULDNTSTARTTHREADTEXT)); 914 free(wk); 915 FreeListInfo((LISTINFO *)mp1); 916 } 917 } 918 } 919 } 920 return 0; 921 922 case WM_CLOSE: 923 WinDestroyWindow(hwnd); 924 break; 925 926 case WM_DESTROY: 927 hwndTree = (HWND)0; 928 dcd = WinQueryWindowPtr(hwnd,QWL_USER); 929 if (dcd) { 930 WinSendMsg(dcd->hwndCnr, 931 UM_CLOSE, 932 MPFROMLONG(dcd->dontclose != FALSE), 933 MPVOID); 934 free(dcd); 935 } 936 DosPostEventSem(CompactSem); 937 if(!PostMsg((HWND)0, 938 WM_QUIT, 939 MPVOID, 940 MPVOID)) 941 WinSendMsg((HWND)0, 942 WM_QUIT, 943 MPVOID, 944 MPVOID); 945 break; 946 } 947 return WinDefWindowProc(hwnd,msg,mp1,mp2); 948 } 949 950 951 MRESULT EXPENTRY TreeCnrWndProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) 952 { 953 static APPNOTIFY *apphead = NULL,*apptail = NULL; 954 DIRCNRDATA *dcd = WinQueryWindowPtr(hwnd,QWL_USER); 955 956 switch(msg) { 957 case DM_PRINTOBJECT: 958 return MRFROMLONG(DRR_TARGET); 959 960 case DM_DISCARDOBJECT: 961 if(dcd) 962 return WinSendMsg(dcd->hwndObject, 963 msg, 964 mp1, 965 mp2); 966 else 967 return MRFROMLONG(DRR_TARGET); 968 969 case WM_CHAR: 970 shiftstate = (SHORT1FROMMP(mp1) & (KC_SHIFT | KC_ALT | KC_CTRL)); 971 if(SHORT1FROMMP(mp1) & KC_KEYUP) 972 return (MRESULT)TRUE; 973 if(SHORT1FROMMP(mp1) & KC_VIRTUALKEY) { 974 switch(SHORT2FROMMP(mp2)) { 975 case VK_INSERT: 976 if((shiftstate & KC_CTRL) == KC_CTRL) 977 PostMsg(hwnd, 978 WM_COMMAND, 979 MPFROM2SHORT(IDM_MKDIR,0), 980 MPVOID); 981 break; 982 case VK_DELETE: 983 if((shiftstate & KC_CTRL) == KC_CTRL) 984 PostMsg(hwnd, 985 WM_COMMAND, 986 MPFROM2SHORT(IDM_PERMDELETE,0), 987 MPVOID); 988 else if((shiftstate & KC_SHIFT) == KC_SHIFT) 989 PostMsg(hwnd, 990 WM_COMMAND, 991 MPFROM2SHORT(IDM_SAVETOCLIP,0), 992 MPVOID); 993 else 994 PostMsg(hwnd, 995 WM_COMMAND, 996 MPFROM2SHORT(IDM_DELETE,0), 997 MPVOID); 998 break; 999 } 1000 } 1001 if(shiftstate || fNoSearch) 1002 break; 1003 if(SHORT1FROMMP(mp1) & KC_CHAR) { 1004 1005 ULONG thistime,len; 1006 SEARCHSTRING srch; 1007 PCNRITEM pci; 1008 1009 if(!dcd) 1010 break; 1011 switch(SHORT1FROMMP(mp2)) { 1012 case '\x1b': 1013 case '\r': 1014 case '\n': 1015 dcd->lasttime = 0; 1016 *dcd->szCommonName = 0; 1017 break; 1018 default: 1019 thistime = WinQueryMsgTime(WinQueryAnchorBlock(hwnd)); 1020 if(thistime > dcd->lasttime + 1250) 1021 *dcd->szCommonName = 0; 1022 dcd->lasttime = thistime; 1023 if(SHORT1FROMMP(mp2) == ' ' && !*dcd->szCommonName) 1024 break; 1025 KbdRetry: 1026 len = strlen(dcd->szCommonName); 1027 if(len >= CCHMAXPATH - 1) { 1028 *dcd->szCommonName = 0; 1029 len = 0; 1030 } 1031 dcd->szCommonName[len] = toupper(SHORT1FROMMP(mp2)); 1032 dcd->szCommonName[len + 1] = 0; 1033 memset(&srch,0,sizeof(SEARCHSTRING)); 1034 srch.cb = (ULONG)sizeof(SEARCHSTRING); 1035 srch.pszSearch = (PSZ)dcd->szCommonName; 1036 srch.fsPrefix = TRUE; 1037 srch.fsCaseSensitive = FALSE; 1038 srch.usView = CV_ICON; 1039 pci = WinSendMsg(hwnd, 1040 CM_SEARCHSTRING, 1041 MPFROMP(&srch), 1042 MPFROMLONG(CMA_FIRST)); 1043 if(pci && (INT)pci != -1) { 1044 /* make found item current item */ 1045 WinSendMsg(hwnd, 1046 CM_SETRECORDEMPHASIS, 1047 MPFROMP(pci), 1048 MPFROM2SHORT(TRUE,CRA_CURSORED)); 1049 /* make sure that record shows in viewport */ 1050 ShowCnrRecord(hwnd, 1051 (PMINIRECORDCORE)pci); 1052 return (MRESULT)TRUE; 1053 } 1054 else { 1055 if(SHORT1FROMMP(mp2) == ' ') { 1056 dcd->szCommonName[len] = 0; 1057 break; 1058 } 1059 *dcd->szCommonName = 0; 1060 dcd->lasttime = 0; 1061 if(len) // retry as first letter if no match 1062 goto KbdRetry; 1063 } 1064 break; 1065 } 1066 } 1067 break; 1068 1069 case WM_MOUSEMOVE: 1070 case WM_BUTTON1UP: 1071 case WM_BUTTON2UP: 1072 case WM_BUTTON3UP: 1073 shiftstate = (SHORT2FROMMP(mp2) & (KC_SHIFT | KC_ALT | KC_CTRL)); 1074 break; 1075 1076 case UM_TIMER: 1077 if(dcd && dcd->hwndFrame == WinQueryActiveWindow(dcd->hwndParent) && 1078 hwndStatus2) 1079 { 1080 FILEFINDBUF3 ffb; 1081 ULONG nm = 1L; 1082 HDIR hdir = HDIR_CREATE; 1083 1084 if(*SwapperDat) 1085 { 1086 if (!DosFindFirst(SwapperDat, 1087 &hdir, 1088 FILE_NORMAL | FILE_HIDDEN | 1089 FILE_SYSTEM | FILE_ARCHIVED | FILE_READONLY, 1090 &ffb, 1091 sizeof(ffb), 1092 &nm, 1093 FIL_STANDARD)) 1094 { 1095 CHAR tb[39],tm[39],tpm[39],s[163]; 1096 ULONG amem; 1097 1098 priority_bumped(); 1099 DosFindClose(hdir); 1100 if (!DosQuerySysInfo(QSV_TOTAVAILMEM, 1101 QSV_TOTAVAILMEM, 1102 (PVOID)&amem, 1103 sizeof(amem))) 1104 { 1105 CommaFmtULL(tpm,sizeof(tpm),amem,'M'); 1106 } 1107 else 1108 *tpm = 0; 1109 if (!Dos16MemAvail(&amem)) 1110 CommaFmtULL(tm,sizeof(tm),amem,'M'); 1111 else 1112 *tm = 0; 1113 CommaFmtULL(tb,sizeof(tb),ffb.cbFile,'M'); 1114 sprintf(s," %s %s%s%s%s%s", 1115 GetPString(IDS_SWAPFILETEXT), 1116 tb, 1117 *tm ? GetPString(IDS_TREEMEMTEXT) : NullStr, 1118 tm, 1119 *tpm ? "/" : NullStr, 1120 tpm); 1121 WinSetWindowText(hwndStatus2,s); 1122 } 1123 else 1124 WinSetWindowText(hwndStatus2,NullStr); 1125 } 1126 else 1127 WinSetWindowText(hwndStatus2,NullStr); 1128 } 1129 if(msg == UM_TIMER) 1130 return 0; 1131 break; 1132 1133 case WM_PRESPARAMCHANGED: 1134 PresParamChanged(hwnd, 1135 "TreeCnr", 1136 mp1, 1137 mp2); 1138 break; 1139 1140 case UM_FILESMENU: 1141 { 1142 PCNRITEM pci; 1143 HWND menuHwnd = (HWND)0; 1144 1145 pci = (PCNRITEM)CurrentRecord(hwnd); 1146 if(pci && (INT)pci != -1) { 1147 if(IsRoot(pci->szFileName)) 1148 menuHwnd = CheckMenu(&TreeMenu, 1149 TREE_POPUP); 1150 else { 1151 menuHwnd = CheckMenu(&DirMenu, 1152 DIR_POPUP); 984 menuHwnd = CheckMenu(&DirMenu, DIR_POPUP); 1153 985 // WinEnableMenuItem(DirMenu, 1154 986 // IDM_TREE, 1155 987 // FALSE); 1156 } 1157 if(!(pci->attrFile & FILE_DIRECTORY)) 1158 menuHwnd = CheckMenu(&FileMenu, 1159 FILE_POPUP); 1160 } 1161 return MRFROMLONG(menuHwnd); 1162 } 1163 1164 case UM_COMPARE: 1165 if(dcd && mp1 && mp2) { 1166 1167 COMPARE *cmp; 1168 CHAR *leftdir = (CHAR *)mp1,*rightdir = (CHAR *)mp2; 1169 1170 if (!IsFile(leftdir) && !IsFile(rightdir)) { 1171 cmp = xmallocz(sizeof(COMPARE),pszSrcFile,__LINE__); 1172 if(cmp) { 1173 cmp->size = sizeof(COMPARE); 1174 strcpy(cmp->leftdir,leftdir); 1175 strcpy(cmp->rightdir,rightdir); 1176 cmp->hwndParent = dcd->hwndParent; 1177 cmp->dcd.hwndParent = dcd->hwndParent; 1178 WinDlgBox(HWND_DESKTOP, 1179 HWND_DESKTOP, 1180 CompareDlgProc, 1181 FM3ModHandle, 1182 COMP_FRAME, 1183 MPFROMP(cmp)); 1184 } 1185 } 1186 } 988 } 989 if (!(pci->attrFile & FILE_DIRECTORY)) 990 menuHwnd = CheckMenu(&FileMenu, FILE_POPUP); 991 } 992 return MRFROMLONG(menuHwnd); 993 } 994 995 case UM_COMPARE: 996 if (dcd && mp1 && mp2) { 997 998 COMPARE *cmp; 999 CHAR *leftdir = (CHAR *) mp1, *rightdir = (CHAR *) mp2; 1000 1001 if (!IsFile(leftdir) && !IsFile(rightdir)) { 1002 cmp = xmallocz(sizeof(COMPARE), pszSrcFile, __LINE__); 1003 if (cmp) { 1004 cmp->size = sizeof(COMPARE); 1005 strcpy(cmp->leftdir, leftdir); 1006 strcpy(cmp->rightdir, rightdir); 1007 cmp->hwndParent = dcd->hwndParent; 1008 cmp->dcd.hwndParent = dcd->hwndParent; 1009 WinDlgBox(HWND_DESKTOP, 1010 HWND_DESKTOP, 1011 CompareDlgProc, FM3ModHandle, COMP_FRAME, MPFROMP(cmp)); 1012 } 1013 } 1014 } 1015 return 0; 1016 1017 case UM_UPDATERECORDLIST: 1018 if (dcd && mp1) 1019 WinSendMsg(dcd->hwndObject, msg, mp1, mp2); 1020 return 0; 1021 1022 case UM_UPDATERECORD: 1023 if (dcd && mp1) { 1024 1025 CHAR *filename; 1026 1027 filename = mp1; 1028 if (filename) 1029 UpdateCnrRecord(hwnd, filename, TRUE, dcd); 1030 } 1031 return 0; 1032 1033 case WM_SETFOCUS: 1034 if (dcd && hwndStatus && mp2) { 1035 WinSendMsg(hwnd, UM_RESCAN, MPVOID, MPVOID); 1036 if (hwndMain) 1037 PostMsg(hwndMain, UM_ADVISEFOCUS, MPFROMLONG(dcd->hwndFrame), MPVOID); 1038 } 1039 break; 1040 1041 case UM_RESCAN: 1042 if (dcd && dcd->hwndFrame == WinQueryActiveWindow(dcd->hwndParent)) { 1043 /* 1044 * put name of our window on status line 1045 */ 1046 1047 PCNRITEM pci = NULL; 1048 CHAR str[CCHMAXPATH + 6]; 1049 1050 if (fAutoView && hwndMain) { 1051 pci = WinSendMsg(hwnd, 1052 CM_QUERYRECORDEMPHASIS, 1053 MPFROMLONG(CMA_FIRST), MPFROMSHORT(CRA_CURSORED)); 1054 if (pci && (INT) pci != -1 && fComments && 1055 !(driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_SLOW)) 1056 WinSendMsg(hwndMain, UM_LOADFILE, MPFROMP(pci->szFileName), MPVOID); 1057 else 1058 WinSendMsg(hwndMain, UM_LOADFILE, MPVOID, MPVOID); 1059 } 1060 if (!fAutoView || !hwndMain) 1061 pci = (PCNRITEM) WinSendMsg(hwnd, 1062 CM_QUERYRECORDEMPHASIS, 1063 MPFROMLONG(CMA_FIRST), 1064 MPFROMSHORT(CRA_CURSORED)); 1065 if ((INT) pci == -1) 1066 pci = NULL; 1067 if (pci) { 1068 if (*(ULONG *) realappname == FM3UL) { 1069 sprintf(str, "%s %s", GetPString(IDS_DTTEXT), pci->szFileName); 1070 WinSetWindowText(dcd->hwndFrame, str); 1071 WinSetWindowText(WinWindowFromID(dcd->hwndFrame, FID_TITLEBAR), 1072 str); 1073 } 1074 else 1075 WinSetWindowText(WinWindowFromID(dcd->hwndFrame, 1076 MAIN_STATUS), pci->szFileName); 1077 if (fMoreButtons && hwndName) { 1078 WinSetWindowText(hwndName, pci->szFileName); 1079 sprintf(str, 1080 "%04u/%02u/%02u %02u:%02u:%02u", 1081 pci->date.year, 1082 pci->date.month, 1083 pci->date.day, 1084 pci->time.hours, pci->time.minutes, pci->time.seconds); 1085 WinSetWindowText(hwndDate, str); 1086 WinSetWindowText(hwndAttr, pci->pszDispAttr); 1087 } 1088 } 1089 PostMsg(dcd->hwndObject, UM_RESCAN2, MPFROMP(pci), MPVOID); 1090 if (hwndStatus2) 1091 PostMsg(hwnd, UM_TIMER, MPVOID, MPVOID); 1092 } 1093 return 0; 1094 1095 case UM_SETUP2: 1096 { 1097 PCNRITEM pci = (PCNRITEM) mp1; 1098 1099 if (pci) 1100 NotifyError(pci->szFileName, (ULONG) mp2); 1101 } 1102 return 0; 1103 1104 case UM_SETUP: 1105 if (!dcd) { 1106 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT); 1107 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID); 1187 1108 return 0; 1188 1189 case UM_UPDATERECORDLIST: 1190 if(dcd && mp1) 1191 WinSendMsg(dcd->hwndObject, 1192 msg, 1193 mp1, 1194 mp2); 1195 return 0; 1196 1197 case UM_UPDATERECORD: 1198 if(dcd && mp1) { 1199 1200 CHAR *filename; 1201 1202 filename = mp1; 1203 if(filename) 1204 UpdateCnrRecord(hwnd, 1205 filename, 1206 TRUE, 1207 dcd); 1208 } 1209 return 0; 1210 1211 case WM_SETFOCUS: 1212 if(dcd && hwndStatus && mp2) { 1109 } 1110 else { 1111 if (!dcd->hwndObject) { 1112 /* 1113 * first time through -- set things up 1114 */ 1115 1116 CNRINFO cnri; 1117 1118 RestorePresParams(hwnd, "TreeCnr"); 1119 memset(&cnri, 0, sizeof(CNRINFO)); 1120 cnri.cb = sizeof(CNRINFO); 1213 1121 WinSendMsg(hwnd, 1214 UM_RESCAN, 1215 MPVOID, 1216 MPVOID); 1217 if(hwndMain) 1218 PostMsg(hwndMain, 1219 UM_ADVISEFOCUS, 1220 MPFROMLONG(dcd->hwndFrame), 1221 MPVOID); 1222 } 1223 break; 1224 1225 case UM_RESCAN: 1226 if(dcd && dcd->hwndFrame == WinQueryActiveWindow(dcd->hwndParent)) { 1227 /* 1228 * put name of our window on status line 1229 */ 1230 1231 PCNRITEM pci = NULL; 1232 CHAR str[CCHMAXPATH + 6]; 1233 1234 if(fAutoView && hwndMain) { 1235 pci = WinSendMsg(hwnd, 1236 CM_QUERYRECORDEMPHASIS, 1237 MPFROMLONG(CMA_FIRST), 1238 MPFROMSHORT(CRA_CURSORED)); 1239 if(pci && (INT)pci != -1 && fComments && 1240 !(driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_SLOW)) 1241 WinSendMsg(hwndMain, 1242 UM_LOADFILE, 1243 MPFROMP(pci->szFileName), 1244 MPVOID); 1245 else 1246 WinSendMsg(hwndMain, 1247 UM_LOADFILE, 1248 MPVOID, 1249 MPVOID); 1250 } 1251 if(!fAutoView || 1252 !hwndMain) 1253 pci = (PCNRITEM)WinSendMsg(hwnd, 1254 CM_QUERYRECORDEMPHASIS, 1255 MPFROMLONG(CMA_FIRST), 1256 MPFROMSHORT(CRA_CURSORED)); 1257 if((INT)pci == -1) 1258 pci = NULL; 1259 if(pci) { 1260 if(*(ULONG *)realappname == FM3UL) { 1261 sprintf(str, 1262 "%s %s", 1263 GetPString(IDS_DTTEXT), 1264 pci->szFileName); 1265 WinSetWindowText(dcd->hwndFrame, 1266 str); 1267 WinSetWindowText(WinWindowFromID(dcd->hwndFrame,FID_TITLEBAR), 1268 str); 1269 } 1270 else 1271 WinSetWindowText(WinWindowFromID(dcd->hwndFrame, 1272 MAIN_STATUS), 1273 pci->szFileName); 1274 if(fMoreButtons && hwndName) { 1275 WinSetWindowText(hwndName, 1276 pci->szFileName); 1277 sprintf(str, 1278 "%04u/%02u/%02u %02u:%02u:%02u", 1279 pci->date.year, 1280 pci->date.month, 1281 pci->date.day, 1282 pci->time.hours, 1283 pci->time.minutes, 1284 pci->time.seconds); 1285 WinSetWindowText(hwndDate, 1286 str); 1287 WinSetWindowText(hwndAttr, 1288 pci->pszDispAttr); 1289 } 1290 } 1291 PostMsg(dcd->hwndObject, 1292 UM_RESCAN2, 1293 MPFROMP(pci), 1294 MPVOID); 1295 if(hwndStatus2) 1296 PostMsg(hwnd, 1297 UM_TIMER, 1298 MPVOID, 1299 MPVOID); 1300 } 1301 return 0; 1302 1303 case UM_SETUP2: 1304 { 1305 PCNRITEM pci = (PCNRITEM)mp1; 1306 1307 if(pci) 1308 NotifyError(pci->szFileName, 1309 (ULONG)mp2); 1310 } 1311 return 0; 1312 1313 case UM_SETUP: 1314 if (!dcd) { 1315 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT); 1316 PostMsg(hwnd,WM_CLOSE,MPVOID,MPVOID); 1122 CM_QUERYCNRINFO, 1123 MPFROMP(&cnri), MPFROMLONG(sizeof(CNRINFO))); 1124 cnri.cyLineSpacing = 0; 1125 cnri.cxTreeIndent = 12L; 1126 cnri.pSortRecord = (PVOID) SortTreeCnr; 1127 cnri.flWindowAttr &= (~(CV_NAME | CV_DETAIL | CV_TEXT)); 1128 cnri.flWindowAttr |= (CV_TREE | CA_TREELINE | CV_ICON | CV_MINI); 1129 { 1130 ULONG size = sizeof(ULONG); 1131 1132 PrfQueryProfileData(fmprof, 1133 appname, 1134 "TreeflWindowAttr", 1135 (PVOID) & cnri.flWindowAttr, &size); 1136 size = sizeof(MASK); 1137 *dcd->mask.prompt = 0; 1138 if (!*dcd->mask.szMask && !dcd->mask.attrFile) { 1139 if (PrfQueryProfileSize(fmprof, 1140 appname, "TreeFilter", &size) && size) { 1141 PrfQueryProfileData(fmprof, 1142 appname, "TreeFilter", &dcd->mask, &size); 1143 SetMask(NULL, &dcd->mask); 1144 } 1145 else 1146 dcd->mask.attrFile = (FILE_READONLY | FILE_NORMAL | 1147 FILE_ARCHIVED | FILE_DIRECTORY | 1148 FILE_HIDDEN | FILE_SYSTEM); 1149 } 1150 dcd->mask.attrFile |= FILE_DIRECTORY; 1151 } 1152 cnri.flWindowAttr &= (~(CA_MIXEDTARGETEMPH | CA_ORDEREDTARGETEMPH)); 1153 cnri.flWindowAttr |= CV_FLOW; 1154 dcd->flWindowAttr = cnri.flWindowAttr; 1155 WinSendMsg(hwnd, 1156 CM_SETCNRINFO, 1157 MPFROMP(&cnri), 1158 MPFROMLONG(CMA_FLWINDOWATTR | CMA_LINESPACING | 1159 CMA_CXTREEINDENT | CMA_PSORTRECORD)); 1160 if (_beginthread(MakeObjWin, NULL, 327680, (PVOID) dcd) == -1) { 1161 Runtime_Error(pszSrcFile, __LINE__, 1162 GetPString(IDS_COULDNTSTARTTHREADTEXT)); 1163 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID); 1164 return 0; 1165 } 1166 else 1167 DosSleep(1L); 1168 } 1169 } 1170 return 0; 1171 1172 case WM_BUTTON3CLICK: 1173 case WM_CHORD: 1174 { 1175 PCNRITEM pci = NULL; 1176 QUERYRECFROMRECT pqr; 1177 NOTIFYRECORDENTER nr; 1178 BOOL tbool = fDCOpens; 1179 RECTL rectl; 1180 POINTL ptl; 1181 1182 shiftstate = (SHORT2FROMMP(mp2) & (KC_SHIFT | KC_ALT | KC_CTRL)); 1183 if (msg == WM_CHORD) { 1184 if (!WinQueryPointerPos(HWND_DESKTOP, &ptl)) 1185 break; 1186 WinMapWindowPoints(HWND_DESKTOP, hwnd, &ptl, 1L); 1187 } 1188 else { 1189 ptl.x = SHORT1FROMMP(mp1); 1190 ptl.y = SHORT2FROMMP(mp1); 1191 } 1192 memset(&rectl, 0, sizeof(rectl)); 1193 memset(&pqr, 0, sizeof(pqr)); 1194 pqr.cb = sizeof(pqr); 1195 pqr.rect.xLeft = ptl.x - 1; 1196 pqr.rect.xRight = ptl.x + 1; 1197 pqr.rect.yTop = ptl.y + 1; 1198 pqr.rect.yBottom = ptl.y - 1; 1199 pqr.fsSearch = CMA_PARTIAL; 1200 pci = (PCNRITEM) WinSendMsg(hwnd, 1201 CM_QUERYRECORDFROMRECT, 1202 MPFROMLONG(CMA_FIRST), MPFROMP(&pqr)); 1203 if (!pci || (INT) pci == -1) 1204 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT); 1205 else { 1206 memset(&nr, 0, sizeof(nr)); 1207 nr.hwndCnr = hwnd; 1208 nr.pRecord = (PRECORDCORE) pci; 1209 fDCOpens = TRUE; 1210 WinSendMsg(hwnd, 1211 WM_CONTROL, 1212 MPFROM2SHORT(WinQueryWindowUShort(hwnd, 1213 QWS_ID), 1214 CN_ENTER), MPFROMP(&nr)); 1215 PostMsg(hwnd, UM_RESTOREDC, MPFROMLONG(tbool), MPVOID); 1216 } 1217 } 1218 break; 1219 1220 case UM_RESTOREDC: 1221 fDCOpens = (BOOL) mp1; 1222 return 0; 1223 1224 case WM_CONTROL: 1225 DosError(FERR_DISABLEHARDERR); 1226 if (dcd) { 1227 switch (SHORT2FROMMP(mp1)) { 1228 case CN_BEGINEDIT: 1229 case CN_REALLOCPSZ: 1230 case CN_ENDEDIT: 1231 { 1232 MRESULT mre; 1233 1234 mre = CnrDirectEdit(hwnd, msg, mp1, mp2); 1235 if (mre != (MRESULT) - 1) 1236 return mre; 1237 } 1238 break; 1239 1240 case CN_DRAGLEAVE: 1241 if (mp2) { 1242 1243 PDRAGINFO pDInfo; 1244 1245 pDInfo = ((PCNRDRAGINFO) mp2)->pDragInfo; 1246 DrgAccessDraginfo(pDInfo); 1247 DrgFreeDraginfo(pDInfo); 1248 } 1317 1249 return 0; 1318 } 1319 else { 1320 if(!dcd->hwndObject) { 1321 /* 1322 * first time through -- set things up 1323 */ 1324 1325 CNRINFO cnri; 1326 1327 RestorePresParams(hwnd,"TreeCnr"); 1328 memset(&cnri,0,sizeof(CNRINFO)); 1329 cnri.cb = sizeof(CNRINFO); 1330 WinSendMsg(hwnd, 1331 CM_QUERYCNRINFO, 1332 MPFROMP(&cnri), 1333 MPFROMLONG(sizeof(CNRINFO))); 1334 cnri.cyLineSpacing = 0; 1335 cnri.cxTreeIndent = 12L; 1336 cnri.pSortRecord = (PVOID)SortTreeCnr; 1337 cnri.flWindowAttr &= (~(CV_NAME | CV_DETAIL | CV_TEXT)); 1338 cnri.flWindowAttr |= (CV_TREE | CA_TREELINE | CV_ICON | CV_MINI); 1339 { 1340 ULONG size = sizeof(ULONG); 1341 1342 PrfQueryProfileData(fmprof, 1343 appname, 1344 "TreeflWindowAttr", 1345 (PVOID)&cnri.flWindowAttr, 1346 &size); 1347 size = sizeof(MASK); 1348 *dcd->mask.prompt = 0; 1349 if(!*dcd->mask.szMask && !dcd->mask.attrFile) { 1350 if(PrfQueryProfileSize(fmprof, 1351 appname, 1352 "TreeFilter", 1353 &size) && 1354 size) { 1355 PrfQueryProfileData(fmprof, 1356 appname, 1357 "TreeFilter", 1358 &dcd->mask, 1359 &size); 1360 SetMask(NULL,&dcd->mask); 1250 1251 case CN_DRAGAFTER: 1252 case CN_DRAGOVER: 1253 if (mp2) { 1254 1255 PDRAGITEM pDItem; 1256 PDRAGINFO pDInfo; 1257 PCNRITEM pci; 1258 USHORT uso; 1259 1260 pDInfo = ((PCNRDRAGINFO) mp2)->pDragInfo; 1261 DrgAccessDraginfo(pDInfo); 1262 pci = (PCNRITEM) ((PCNRDRAGINFO) mp2)->pRecord; 1263 if ((INT) pci == -1) 1264 pci = NULL; 1265 if (pci && (pci->flags & (RECFLAGS_ENV | RECFLAGS_NODROP))) { 1266 DrgFreeDraginfo(pDInfo); 1267 return MRFROM2SHORT(DOR_NODROP, 0); 1268 } 1269 if (!pDInfo) { 1270 DrgFreeDraginfo(pDInfo); 1271 return MRFROM2SHORT(DOR_NODROP, 0); 1272 } 1273 if (!WinIsWindowEnabled(dcd->hwndFrame)) { 1274 DrgFreeDraginfo(pDInfo); 1275 return MRFROM2SHORT(DOR_NODROP, 0); 1276 } 1277 if (pci) { 1278 uso = pDInfo->usOperation; 1279 if (uso == DO_DEFAULT) 1280 uso = (fCopyDefault) ? DO_COPY : DO_MOVE; 1281 if (!(pci->attrFile & FILE_DIRECTORY)) { 1282 if (uso != DO_LINK && uso != DO_COPY && uso != DO_MOVE) { 1283 DrgFreeDraginfo(pDInfo); 1284 return (MRFROM2SHORT(DOR_NODROP, 0)); 1285 } 1286 if (uso != DO_LINK && 1287 !(driveflags[toupper(*pci->szFileName) - 'A'] & 1288 DRIVE_NOTWRITEABLE)) { 1289 1290 ARC_TYPE *info; 1291 1292 if (!fQuickArcFind && 1293 !(driveflags[toupper(*pci->szFileName) - 'A'] & 1294 DRIVE_SLOW)) 1295 info = find_type(pci->szFileName, NULL); 1296 else 1297 info = quick_find_type(pci->szFileName, NULL); 1298 if (!info || ((uso == DO_MOVE && !info->move) || 1299 (uso == DO_COPY && !info->create))) { 1300 DrgFreeDraginfo(pDInfo); 1301 return (MRFROM2SHORT(DOR_NODROP, 0)); 1302 } 1303 } 1304 } 1305 } 1306 pDItem = DrgQueryDragitemPtr(pDInfo, /* Access DRAGITEM */ 1307 0); /* Index to DRAGITEM */ 1308 if (DrgVerifyRMF(pDItem, /* Check valid rendering */ 1309 DRM_OS2FILE, /* mechanisms and data */ 1310 NULL) || DrgVerifyRMF(pDItem, DRM_FM2ARCMEMBER, DRF_FM2ARCHIVE)) { /* formats */ 1311 DrgFreeDraginfo(pDInfo); /* Free DRAGINFO */ 1312 if (!pci || (INT) pci == -1) 1313 return MRFROM2SHORT(DOR_DROP, DO_MOVE); 1314 if (driveflags[toupper(*pci->szFileName) - 'A'] & 1315 DRIVE_NOTWRITEABLE) 1316 return MRFROM2SHORT(DOR_DROP, DO_LINK); 1317 if (toupper(*pci->szFileName) < 'C') 1318 return MRFROM2SHORT(DOR_DROP, DO_COPY); 1319 return MRFROM2SHORT(DOR_DROP, /* Return okay to drop */ 1320 ((fCopyDefault) ? DO_COPY : DO_MOVE)); 1321 } 1322 DrgFreeDraginfo(pDInfo); /* Free DRAGINFO */ 1323 } 1324 return MRFROM2SHORT(DOR_NODROP, 0); /* Drop not valid */ 1325 1326 case CN_INITDRAG: 1327 { 1328 PCNRDRAGINIT pcd = (PCNRDRAGINIT) mp2; 1329 PCNRITEM pci; 1330 1331 if (!pcd) { 1332 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT); 1333 break; 1334 } 1335 else { 1336 pci = (PCNRITEM) pcd->pRecord; 1337 if (!pci || (INT) pci == -1) { 1338 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT); 1339 break; 1340 } 1341 if (pci->flags & (RECFLAGS_ENV | RECFLAGS_NODRAG)) { 1342 Runtime_Error(pszSrcFile, __LINE__, "drag not allowed"); 1343 break; 1344 } 1345 if (hwndStatus2) { 1346 WinSetWindowText(hwndStatus2, (IsRoot(pci->szFileName)) ? 1347 GetPString(IDS_DRAGROOTTEXT) : 1348 (pci->attrFile & FILE_DIRECTORY) ? 1349 GetPString(IDS_DRAGDIRTEXT) : 1350 GetPString(IDS_DRAGFILETEXT)); 1351 } 1352 DoFileDrag(hwnd, dcd->hwndObject, mp2, NULL, NULL, TRUE); 1353 if (hwndStatus2) { 1354 PostMsg(hwnd, UM_RESCAN, MPVOID, MPVOID); 1355 } 1356 } 1357 } 1358 return 0; 1359 1360 case CN_DROP: 1361 { 1362 LISTINFO *li; 1363 ULONG action = UM_ACTION; 1364 1365 li = DoFileDrop(hwnd, NULL, TRUE, mp1, mp2); 1366 if (li) { 1367 if (!*li->targetpath) { 1368 if (li->list[0]) 1369 PMMkDir(dcd->hwndParent, li->list[0], FALSE); 1370 FreeListInfo(li); 1371 return 0; 1372 } 1373 if (li->list && li->list[0] && IsRoot(li->list[0])) 1374 li->type = DO_LINK; 1375 else if (fDragndropDlg && (!*li->arcname || !li->info)) { 1376 1377 CHECKLIST cl; 1378 1379 memset(&cl, 0, sizeof(cl)); 1380 cl.size = sizeof(cl); 1381 cl.flags = li->type; 1382 cl.list = li->list; 1383 cl.cmd = li->type; 1384 cl.prompt = li->targetpath; 1385 li->type = WinDlgBox(HWND_DESKTOP, 1386 dcd->hwndParent, 1387 DropListProc, 1388 FM3ModHandle, DND_FRAME, MPFROMP(&cl)); 1389 if (!li->type) { 1390 FreeListInfo(li); 1391 return 0; 1392 } 1393 li->list = cl.list; 1394 if (!li->list || !li->list[0]) { 1395 FreeListInfo(li); 1396 return 0; 1397 } 1398 } 1399 switch (li->type) { 1400 case DO_LINK: 1401 if (fLinkSetsIcon) { 1402 li->type = IDM_SETICON; 1403 action = UM_MASSACTION; 1361 1404 } 1362 1405 else 1363 dcd->mask.attrFile = (FILE_READONLY | FILE_NORMAL | 1364 FILE_ARCHIVED | FILE_DIRECTORY | 1365 FILE_HIDDEN | FILE_SYSTEM); 1366 } 1367 dcd->mask.attrFile |= FILE_DIRECTORY; 1368 } 1369 cnri.flWindowAttr &= (~(CA_MIXEDTARGETEMPH | CA_ORDEREDTARGETEMPH)); 1370 cnri.flWindowAttr |= CV_FLOW; 1371 dcd->flWindowAttr = cnri.flWindowAttr; 1372 WinSendMsg(hwnd, 1373 CM_SETCNRINFO, 1374 MPFROMP(&cnri), 1375 MPFROMLONG(CMA_FLWINDOWATTR | CMA_LINESPACING | 1376 CMA_CXTREEINDENT | CMA_PSORTRECORD)); 1377 if (_beginthread(MakeObjWin,NULL,327680,(PVOID)dcd) == -1) { 1378 Runtime_Error(pszSrcFile, __LINE__, GetPString(IDS_COULDNTSTARTTHREADTEXT)); 1379 PostMsg(hwnd, 1380 WM_CLOSE, 1381 MPVOID, 1382 MPVOID); 1383 return 0; 1384 } 1385 else 1386 DosSleep(1L); 1387 } 1388 } 1389 return 0; 1390 1391 case WM_BUTTON3CLICK: 1392 case WM_CHORD: 1393 { 1394 PCNRITEM pci = NULL; 1395 QUERYRECFROMRECT pqr; 1396 NOTIFYRECORDENTER nr; 1397 BOOL tbool = fDCOpens; 1398 RECTL rectl; 1399 POINTL ptl; 1400 1401 shiftstate = (SHORT2FROMMP(mp2) & (KC_SHIFT | KC_ALT | KC_CTRL)); 1402 if(msg == WM_CHORD) { 1403 if(!WinQueryPointerPos(HWND_DESKTOP, 1404 &ptl)) 1405 break; 1406 WinMapWindowPoints(HWND_DESKTOP, 1407 hwnd, 1408 &ptl, 1409 1L); 1410 } 1411 else { 1412 ptl.x = SHORT1FROMMP(mp1); 1413 ptl.y = SHORT2FROMMP(mp1); 1414 } 1415 memset(&rectl,0,sizeof(rectl)); 1416 memset(&pqr,0,sizeof(pqr)); 1417 pqr.cb = sizeof(pqr); 1418 pqr.rect.xLeft = ptl.x - 1; 1419 pqr.rect.xRight = ptl.x + 1; 1420 pqr.rect.yTop = ptl.y + 1; 1421 pqr.rect.yBottom = ptl.y - 1; 1422 pqr.fsSearch = CMA_PARTIAL; 1423 pci = (PCNRITEM)WinSendMsg(hwnd, 1424 CM_QUERYRECORDFROMRECT, 1425 MPFROMLONG(CMA_FIRST), 1426 MPFROMP(&pqr)); 1427 if(!pci || (INT)pci == -1) 1428 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT); 1429 else { 1430 memset(&nr,0,sizeof(nr)); 1431 nr.hwndCnr = hwnd; 1432 nr.pRecord = (PRECORDCORE)pci; 1433 fDCOpens = TRUE; 1434 WinSendMsg(hwnd, 1435 WM_CONTROL, 1436 MPFROM2SHORT(WinQueryWindowUShort(hwnd, 1437 QWS_ID), 1438 CN_ENTER), 1439 MPFROMP(&nr)); 1440 PostMsg(hwnd, 1441 UM_RESTOREDC, 1442 MPFROMLONG(tbool), 1443 MPVOID); 1444 } 1445 } 1446 break; 1447 1448 case UM_RESTOREDC: 1449 fDCOpens = (BOOL)mp1; 1450 return 0; 1451 1452 case WM_CONTROL: 1453 DosError(FERR_DISABLEHARDERR); 1454 if(dcd) { 1455 switch(SHORT2FROMMP(mp1)) { 1456 case CN_BEGINEDIT: 1457 case CN_REALLOCPSZ: 1458 case CN_ENDEDIT: 1459 { 1460 MRESULT mre; 1461 1462 mre = CnrDirectEdit(hwnd, 1463 msg, 1464 mp1, 1465 mp2); 1466 if(mre != (MRESULT)-1) 1467 return mre; 1468 } 1469 break; 1470 1471 case CN_DRAGLEAVE: 1472 if(mp2) { 1473 1474 PDRAGINFO pDInfo; 1475 1476 pDInfo = ((PCNRDRAGINFO)mp2)->pDragInfo; 1477 DrgAccessDraginfo(pDInfo); 1478 DrgFreeDraginfo(pDInfo); 1479 } 1480 return 0; 1481 1482 case CN_DRAGAFTER: 1483 case CN_DRAGOVER: 1484 if(mp2) { 1485 1486 PDRAGITEM pDItem; 1487 PDRAGINFO pDInfo; 1488 PCNRITEM pci; 1489 USHORT uso; 1490 1491 pDInfo = ((PCNRDRAGINFO)mp2)->pDragInfo; 1492 DrgAccessDraginfo(pDInfo); 1493 pci = (PCNRITEM)((PCNRDRAGINFO)mp2)->pRecord; 1494 if((INT)pci == -1) 1495 pci = NULL; 1496 if(pci && 1497 (pci->flags & (RECFLAGS_ENV | RECFLAGS_NODROP))) { 1498 DrgFreeDraginfo(pDInfo); 1499 return MRFROM2SHORT(DOR_NODROP,0); 1406 li->type = IDM_COMPARE; 1407 break; 1408 case DND_EXTRACT: 1409 if (*li->targetpath && !IsFile(li->targetpath)) 1410 li->type = IDM_EXTRACT; 1411 break; 1412 case DND_MOVE: 1413 li->type = IDM_MOVE; 1414 if (*li->targetpath && IsFile(li->targetpath) == 1) { 1415 action = UM_MASSACTION; 1416 li->type = IDM_ARCHIVEM; 1500 1417 } 1501 if(!pDInfo) { 1502 DrgFreeDraginfo(pDInfo); 1503 return MRFROM2SHORT(DOR_NODROP,0); 1418 break; 1419 case DND_WILDMOVE: 1420 li->type = IDM_WILDMOVE; 1421 if (*li->targetpath && IsFile(li->targetpath) == 1) { 1422 action = UM_MASSACTION; 1423 li->type = IDM_ARCHIVEM; 1504 1424 } 1505 if(!WinIsWindowEnabled(dcd->hwndFrame)) { 1506 DrgFreeDraginfo(pDInfo); 1507 return MRFROM2SHORT(DOR_NODROP,0); 1425 break; 1426 case DND_OBJECT: 1427 li->type = IDM_OBJECT; 1428 action = UM_MASSACTION; 1429 break; 1430 case DND_SHADOW: 1431 li->type = IDM_SHADOW; 1432 action = UM_MASSACTION; 1433 break; 1434 case DND_COMPARE: 1435 li->type = IDM_COMPARE; 1436 break; 1437 case DND_SETICON: 1438 action = UM_MASSACTION; 1439 li->type = IDM_SETICON; 1440 break; 1441 case DND_COPY: 1442 li->type = IDM_COPY; 1443 if (*li->targetpath && IsFile(li->targetpath) == 1) { 1444 action = UM_MASSACTION; 1445 li->type = IDM_ARCHIVE; 1508 1446 } 1509 if(pci) { 1510 uso = pDInfo->usOperation; 1511 if(uso == DO_DEFAULT) 1512 uso = (fCopyDefault) ? DO_COPY : DO_MOVE; 1513 if(!(pci->attrFile & FILE_DIRECTORY)) { 1514 if(uso != DO_LINK && 1515 uso != DO_COPY && 1516 uso != DO_MOVE) { 1517 DrgFreeDraginfo(pDInfo); 1518 return(MRFROM2SHORT(DOR_NODROP,0)); 1519 } 1520 if(uso != DO_LINK && 1521 !(driveflags[toupper(*pci->szFileName) - 'A'] & 1522 DRIVE_NOTWRITEABLE)) { 1523 1524 ARC_TYPE *info; 1525 1526 if(!fQuickArcFind && 1527 !(driveflags[toupper(*pci->szFileName) - 'A'] & 1528 DRIVE_SLOW)) 1529 info = find_type(pci->szFileName,NULL); 1530 else 1531 info = quick_find_type(pci->szFileName,NULL); 1532 if(!info || ((uso == DO_MOVE && !info->move) || 1533 (uso == DO_COPY && !info->create))) { 1534 DrgFreeDraginfo(pDInfo); 1535 return(MRFROM2SHORT(DOR_NODROP,0)); 1536 } 1447 break; 1448 case DND_WILDCOPY: 1449 li->type = IDM_WILDCOPY; 1450 if (*li->targetpath && IsFile(li->targetpath) == 1) { 1451 action = UM_MASSACTION; 1452 li->type = IDM_ARCHIVE; 1453 } 1454 break; 1455 default: 1456 if (*li->arcname && li->info) { 1457 action = UM_MASSACTION; 1458 li->type = (li->type == DO_MOVE) ? 1459 IDM_FAKEEXTRACTM : IDM_FAKEEXTRACT; 1460 } 1461 else if (*li->targetpath && IsFile(li->targetpath) == 1) { 1462 action = UM_MASSACTION; 1463 li->type = (li->type == DO_MOVE) ? IDM_ARCHIVEM : IDM_ARCHIVE; 1464 } 1465 else 1466 li->type = (li->type == DO_MOVE) ? IDM_MOVE : IDM_COPY; 1467 break; 1468 } 1469 if (!li->list || !li->list[0]) 1470 FreeListInfo(li); 1471 else if (!PostMsg(dcd->hwndObject, action, MPFROMP(li), MPVOID)) 1472 FreeListInfo(li); 1473 else { 1474 1475 USHORT usop = 0; 1476 1477 switch (li->type) { 1478 case IDM_COPY: 1479 case IDM_WILDCOPY: 1480 usop = DO_COPY; 1481 break; 1482 case IDM_MOVE: 1483 case IDM_WILDMOVE: 1484 case IDM_ARCHIVEM: 1485 usop = DO_MOVE; 1486 break; 1487 } 1488 if (usop) 1489 return MRFROM2SHORT(DOR_DROP, usop); 1490 } 1491 } 1492 } 1493 return 0; 1494 1495 case CN_EMPHASIS: 1496 if (!fDummy) { 1497 1498 PNOTIFYRECORDEMPHASIS pre = mp2; 1499 1500 if (pre->fEmphasisMask & CRA_SELECTED) { 1501 if (pre->pRecord->flRecordAttr & CRA_SELECTED) { 1502 if (((PCNRITEM) (pre->pRecord))->attrFile & FILE_DIRECTORY) { 1503 PostMsg(hwnd, UM_RESCAN, MPVOID, MPVOID); 1504 if (fFollowTree && 1505 !(driveflags 1506 [toupper(*((PCNRITEM) pre->pRecord)->szFileName) - 1507 'A'] & DRIVE_INVALID)) { 1508 if (!LastDir && !ParentIsDesktop(hwnd, dcd->hwndParent)) 1509 LastDir = FindDirCnr(dcd->hwndParent); 1510 if (LastDir) { 1511 1512 NOTIFYRECORDENTER pri; 1513 BOOL tbool = fDCOpens; 1514 1515 fDCOpens = FALSE; 1516 memset(&pri, 0, sizeof(pri)); 1517 pri.hwndCnr = hwnd; 1518 pri.fKey = FALSE; 1519 pri.pRecord = pre->pRecord; 1520 WinSendMsg(hwnd, 1521 WM_CONTROL, 1522 MPFROM2SHORT(SHORT1FROMMP(mp1), 1523 CN_ENTER), MPFROMP(&pri)); 1524 fDCOpens = tbool; 1537 1525 } 1538 1526 } 1527 if (*(ULONG *) realappname != FM3UL) 1528 WinSetWindowText(WinWindowFromID(dcd->hwndFrame, 1529 MAIN_STATUS), 1530 ((PCNRITEM) (pre->pRecord))->szFileName); 1539 1531 } 1540 pDItem = DrgQueryDragitemPtr(pDInfo, /* Access DRAGITEM */ 1541 0); /* Index to DRAGITEM */ 1542 if(DrgVerifyRMF(pDItem, /* Check valid rendering */ 1543 DRM_OS2FILE, /* mechanisms and data */ 1544 NULL) || 1545 DrgVerifyRMF(pDItem,DRM_FM2ARCMEMBER, 1546 DRF_FM2ARCHIVE)) { /* formats */ 1547 DrgFreeDraginfo(pDInfo); /* Free DRAGINFO */ 1548 if(!pci || (INT)pci == -1) 1549 return MRFROM2SHORT(DOR_DROP,DO_MOVE); 1550 if(driveflags[toupper(*pci->szFileName) - 'A'] & 1551 DRIVE_NOTWRITEABLE) 1552 return MRFROM2SHORT(DOR_DROP,DO_LINK); 1553 if(toupper(*pci->szFileName) < 'C') 1554 return MRFROM2SHORT(DOR_DROP,DO_COPY); 1555 return MRFROM2SHORT(DOR_DROP, /* Return okay to drop */ 1556 ((fCopyDefault) ? 1557 DO_COPY : 1558 DO_MOVE)); 1532 } 1533 } 1534 } 1535 break; 1536 1537 case CN_CONTEXTMENU: 1538 { 1539 PCNRITEM pci = (PCNRITEM) mp2; 1540 BOOL wasFollowing; 1541 1542 DosEnterCritSec(); 1543 wasFollowing = fFollowTree; 1544 fFollowTree = FALSE; 1545 DosExitCritSec(); 1546 if (pci && (INT) pci != -1 && !(pci->flags & RECFLAGS_ENV)) { 1547 WinSendMsg(hwnd, 1548 CM_SETRECORDEMPHASIS, 1549 MPFROMP(pci), MPFROM2SHORT(TRUE, CRA_CURSORED)); 1550 MarkAll(hwnd, FALSE, FALSE, TRUE); 1551 if (!(pci->attrFile & FILE_DIRECTORY)) 1552 dcd->hwndLastMenu = CheckMenu(&FileMenu, FILE_POPUP); 1553 else if (!IsRoot(pci->szFileName)) 1554 dcd->hwndLastMenu = CheckMenu(&DirMenu, DIR_POPUP); 1555 else 1556 dcd->hwndLastMenu = CheckMenu(&TreeMenu, TREE_POPUP); 1557 } 1558 else { 1559 dcd->hwndLastMenu = CheckMenu(&TreeCnrMenu, TREECNR_POPUP); 1560 if (dcd->hwndLastMenu && !dcd->cnremphasized) { 1561 WinSendMsg(hwnd, CM_SETRECORDEMPHASIS, MPVOID, 1562 MPFROM2SHORT(TRUE, CRA_SOURCE)); 1563 dcd->cnremphasized = TRUE; 1564 } 1565 } 1566 if (dcd->hwndLastMenu) { 1567 if (dcd->hwndLastMenu == DirMenu) 1568 WinEnableMenuItem(DirMenu, IDM_TREE, FALSE); 1569 if (dcd->hwndLastMenu == TreeCnrMenu) { 1570 if (dcd->flWindowAttr & CV_MINI) 1571 WinCheckMenuItem(dcd->hwndLastMenu, IDM_MINIICONS, TRUE); 1572 } 1573 if (!PopupMenu(hwnd, hwnd, dcd->hwndLastMenu)) { 1574 if (dcd->cnremphasized) { 1575 WinSendMsg(hwnd, CM_SETRECORDEMPHASIS, MPVOID, 1576 MPFROM2SHORT(FALSE, CRA_SOURCE)); 1577 dcd->cnremphasized = FALSE; 1559 1578 } 1560 DrgFreeDraginfo(pDInfo); /* Free DRAGINFO */ 1561 } 1562 return MRFROM2SHORT(DOR_NODROP,0); /* Drop not valid */ 1563 1564 case CN_INITDRAG: 1565 { 1566 PCNRDRAGINIT pcd = (PCNRDRAGINIT)mp2; 1567 PCNRITEM pci; 1568 1569 if (!pcd) { 1570 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT); 1571 break; 1579 if (dcd->hwndLastMenu != TreeCnrMenu) 1580 MarkAll(hwnd, TRUE, FALSE, TRUE); 1581 } 1582 } 1583 DosEnterCritSec(); 1584 fFollowTree = wasFollowing; 1585 DosExitCritSec(); 1586 } 1587 break; 1588 1589 case CN_ENTER: 1590 if (mp2) { 1591 PCNRITEM pci = (PCNRITEM) ((PNOTIFYRECORDENTER) mp2)->pRecord; 1592 1593 PostMsg(hwnd, UM_ENTER, MPFROMP(pci), MPVOID); 1594 } 1595 break; 1596 1597 case CN_COLLAPSETREE: 1598 case CN_EXPANDTREE: 1599 { 1600 PCNRITEM pci = (PCNRITEM) mp2; 1601 1602 if (pci && (INT) pci != -1 && !(pci->flags & RECFLAGS_ENV)) { 1603 if (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_REMOVABLE) { 1604 1605 struct 1606 { 1607 ULONG serial; 1608 CHAR volumelength; 1609 CHAR volumelabel[CCHMAXPATH]; 1610 } 1611 volser; 1612 1613 memset(&volser, 0, sizeof(volser)); 1614 DosError(FERR_DISABLEHARDERR); 1615 if (!DosQueryFSInfo(toupper(*pci->szFileName) - '@', 1616 FSIL_VOLSER, &volser, 1617 (ULONG) sizeof(volser))) { 1618 if (SHORT2FROMMP(mp1) == CN_COLLAPSETREE && 1619 !volser.serial || 1620 driveserial[toupper(*pci->szFileName) - 'A'] != 1621 volser.serial) 1622 UnFlesh(hwnd, pci); 1623 if (SHORT2FROMMP(mp1) != CN_COLLAPSETREE || 1624 (!volser.serial || 1625 driveserial[toupper(*pci->szFileName) - 'A'] != 1626 volser.serial)) { 1627 if (Flesh(hwnd, pci) && 1628 SHORT2FROMMP(mp1) == CN_EXPANDTREE && 1629 !dcd->suspendview && fTopDir) 1630 PostMsg(hwnd, UM_TOPDIR, MPFROMP(pci), MPVOID); 1631 } 1632 driveserial[toupper(*pci->szFileName) - 'A'] = volser.serial; 1572 1633 } 1573 1634 else { 1574 pci = (PCNRITEM)pcd->pRecord; 1575 if (!pci || (INT)pci == -1) { 1576 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT); 1577 break; 1578 } 1579 if (pci->flags & (RECFLAGS_ENV | RECFLAGS_NODRAG)) { 1580 Runtime_Error(pszSrcFile, __LINE__, "drag not allowed"); 1581 break; 1582 } 1583 if(hwndStatus2) { 1584 WinSetWindowText(hwndStatus2,(IsRoot(pci->szFileName)) ? 1585 GetPString(IDS_DRAGROOTTEXT) : 1586 (pci->attrFile & FILE_DIRECTORY) ? 1587 GetPString(IDS_DRAGDIRTEXT) : 1588 GetPString(IDS_DRAGFILETEXT)); 1589 } 1590 DoFileDrag(hwnd, 1591 dcd->hwndObject, 1592 mp2, 1593 NULL, 1594 NULL, 1595 TRUE); 1596 if(hwndStatus2) { 1597 PostMsg(hwnd, 1598 UM_RESCAN, 1599 MPVOID, 1600 MPVOID); 1601 } 1635 driveserial[toupper(*pci->szFileName) - 'A'] = -1; 1636 UnFlesh(hwnd, pci); 1637 PostMsg(hwnd, UM_RESCAN, MPVOID, MPVOID); 1638 DosBeep(250, 100); 1602 1639 } 1603 1640 } 1604 return 0; 1605 1606 case CN_DROP: 1607 { 1608 LISTINFO *li; 1609 ULONG action = UM_ACTION; 1610 1611 li = DoFileDrop(hwnd, 1612 NULL, 1613 TRUE, 1614 mp1, 1615 mp2); 1616 if(li) { 1617 if(!*li->targetpath) { 1618 if(li->list[0]) 1619 PMMkDir(dcd->hwndParent, 1620 li->list[0], 1621 FALSE); 1622 FreeListInfo(li); 1623 return 0; 1624 } 1625 if(li->list && 1626 li->list[0] && 1627 IsRoot(li->list[0])) 1628 li->type = DO_LINK; 1629 else if(fDragndropDlg && 1630 (!*li->arcname || !li->info)) { 1631 1632 CHECKLIST cl; 1633 1634 memset(&cl,0,sizeof(cl)); 1635 cl.size = sizeof(cl); 1636 cl.flags = li->type; 1637 cl.list = li->list; 1638 cl.cmd = li->type; 1639 cl.prompt = li->targetpath; 1640 li->type = WinDlgBox(HWND_DESKTOP, 1641 dcd->hwndParent, 1642 DropListProc, 1643 FM3ModHandle, 1644 DND_FRAME, 1645 MPFROMP(&cl)); 1646 if(!li->type) { 1647 FreeListInfo(li); 1648 return 0; 1649 } 1650 li->list = cl.list; 1651 if(!li->list || !li->list[0]) { 1652 FreeListInfo(li); 1653 return 0; 1654 } 1655 } 1656 switch(li->type) { 1657 case DO_LINK: 1658 if(fLinkSetsIcon) { 1659 li->type = IDM_SETICON; 1660 action = UM_MASSACTION; 1661 } 1662 else 1663 li->type = IDM_COMPARE; 1664 break; 1665 case DND_EXTRACT: 1666 if(*li->targetpath && 1667 !IsFile(li->targetpath)) 1668 li->type = IDM_EXTRACT; 1669 break; 1670 case DND_MOVE: 1671 li->type = IDM_MOVE; 1672 if(*li->targetpath && 1673 IsFile(li->targetpath) == 1) { 1674 action = UM_MASSACTION; 1675 li->type = IDM_ARCHIVEM; 1676 } 1677 break; 1678 case DND_WILDMOVE: 1679 li->type = IDM_WILDMOVE; 1680 if(*li->targetpath && 1681 IsFile(li->targetpath) == 1) { 1682 action = UM_MASSACTION; 1683 li->type = IDM_ARCHIVEM; 1684 } 1685 break; 1686 case DND_OBJECT: 1687 li->type = IDM_OBJECT; 1688 action = UM_MASSACTION; 1689 break; 1690 case DND_SHADOW: 1691 li->type = IDM_SHADOW; 1692 action = UM_MASSACTION; 1693 break; 1694 case DND_COMPARE: 1695 li->type = IDM_COMPARE; 1696 break; 1697 case DND_SETICON: 1698 action = UM_MASSACTION; 1699 li->type = IDM_SETICON; 1700 break; 1701 case DND_COPY: 1702 li->type = IDM_COPY; 1703 if(*li->targetpath && 1704 IsFile(li->targetpath) == 1) { 1705 action = UM_MASSACTION; 1706 li->type = IDM_ARCHIVE; 1707 } 1708 break; 1709 case DND_WILDCOPY: 1710 li->type = IDM_WILDCOPY; 1711 if(*li->targetpath && 1712 IsFile(li->targetpath) == 1) { 1713 action = UM_MASSACTION; 1714 li->type = IDM_ARCHIVE; 1715 } 1716 break; 1717 default: 1718 if(*li->arcname && li->info) { 1719 action = UM_MASSACTION; 1720 li->type = (li->type == DO_MOVE) ? 1721 IDM_FAKEEXTRACTM : 1722 IDM_FAKEEXTRACT; 1723 } 1724 else if(*li->targetpath && 1725 IsFile(li->targetpath) == 1) { 1726 action = UM_MASSACTION; 1727 li->type = (li->type == DO_MOVE) ? 1728 IDM_ARCHIVEM : 1729 IDM_ARCHIVE; 1730 } 1731 else 1732 li->type = (li->type == DO_MOVE) ? 1733 IDM_MOVE : 1734 IDM_COPY; 1735 break; 1736 } 1737 if(!li->list || !li->list[0]) 1738 FreeListInfo(li); 1739 else if(!PostMsg(dcd->hwndObject, 1740 action, 1741 MPFROMP(li), 1742 MPVOID)) 1743 FreeListInfo(li); 1744 else { 1745 1746 USHORT usop = 0; 1747 1748 switch(li->type) { 1749 case IDM_COPY: 1750 case IDM_WILDCOPY: 1751 usop = DO_COPY; 1752 break; 1753 case IDM_MOVE: 1754 case IDM_WILDMOVE: 1755 case IDM_ARCHIVEM: 1756 usop = DO_MOVE; 1757 break; 1758 } 1759 if(usop) 1760 return MRFROM2SHORT(DOR_DROP,usop); 1761 } 1762 } 1763 } 1764 return 0; 1765 1766 case CN_EMPHASIS: 1767 if(!fDummy) { 1768 1769 PNOTIFYRECORDEMPHASIS pre = mp2; 1770 1771 if(pre->fEmphasisMask & CRA_SELECTED) { 1772 if(pre->pRecord->flRecordAttr & CRA_SELECTED) { 1773 if(((PCNRITEM)(pre->pRecord))->attrFile & FILE_DIRECTORY) { 1774 PostMsg(hwnd, 1775 UM_RESCAN, 1776 MPVOID, 1777 MPVOID); 1778 if(fFollowTree && 1779 !(driveflags[toupper(*((PCNRITEM)pre->pRecord)->szFileName) - 'A'] & 1780 DRIVE_INVALID)) { 1781 if(!LastDir && 1782 !ParentIsDesktop(hwnd,dcd->hwndParent)) 1783 LastDir = FindDirCnr(dcd->hwndParent); 1784 if(LastDir) { 1785 1786 NOTIFYRECORDENTER pri; 1787 BOOL tbool = fDCOpens; 1788 1789 fDCOpens = FALSE; 1790 memset(&pri,0,sizeof(pri)); 1791 pri.hwndCnr = hwnd; 1792 pri.fKey = FALSE; 1793 pri.pRecord = pre->pRecord; 1794 WinSendMsg(hwnd, 1795 WM_CONTROL, 1796 MPFROM2SHORT(SHORT1FROMMP(mp1), 1797 CN_ENTER), 1798 MPFROMP(&pri)); 1799 fDCOpens = tbool; 1800 } 1801 } 1802 if(*(ULONG *)realappname != FM3UL) 1803 WinSetWindowText(WinWindowFromID(dcd->hwndFrame, 1804 MAIN_STATUS), 1805 ((PCNRITEM)(pre->pRecord))->szFileName); 1806 } 1807 } 1808 } 1809 } 1810 break; 1811 1812 case CN_CONTEXTMENU: 1813 { 1814 PCNRITEM pci = (PCNRITEM)mp2; 1815 BOOL wasFollowing; 1816 1817 DosEnterCritSec(); 1818 wasFollowing = fFollowTree; 1819 fFollowTree = FALSE; 1820 DosExitCritSec(); 1821 if(pci && (INT)pci != -1 && !(pci->flags & RECFLAGS_ENV)) { 1822 WinSendMsg(hwnd, 1823 CM_SETRECORDEMPHASIS, 1824 MPFROMP(pci), 1825 MPFROM2SHORT(TRUE,CRA_CURSORED)); 1826 MarkAll(hwnd, 1827 FALSE, 1828 FALSE, 1829 TRUE); 1830 if(!(pci->attrFile & FILE_DIRECTORY)) 1831 dcd->hwndLastMenu = CheckMenu(&FileMenu,FILE_POPUP); 1832 else if(!IsRoot(pci->szFileName)) 1833 dcd->hwndLastMenu = CheckMenu(&DirMenu,DIR_POPUP); 1834 else 1835 dcd->hwndLastMenu = CheckMenu(&TreeMenu,TREE_POPUP); 1836 } 1837 else { 1838 dcd->hwndLastMenu = CheckMenu(&TreeCnrMenu,TREECNR_POPUP); 1839 if(dcd->hwndLastMenu && !dcd->cnremphasized) { 1840 WinSendMsg(hwnd,CM_SETRECORDEMPHASIS,MPVOID, 1841 MPFROM2SHORT(TRUE,CRA_SOURCE)); 1842 dcd->cnremphasized = TRUE; 1843 } 1844 } 1845 if(dcd->hwndLastMenu) { 1846 if(dcd->hwndLastMenu == DirMenu) 1847 WinEnableMenuItem(DirMenu,IDM_TREE,FALSE); 1848 if(dcd->hwndLastMenu == TreeCnrMenu) { 1849 if(dcd->flWindowAttr & CV_MINI) 1850 WinCheckMenuItem(dcd->hwndLastMenu,IDM_MINIICONS,TRUE); 1851 } 1852 if(!PopupMenu(hwnd,hwnd,dcd->hwndLastMenu)) { 1853 if(dcd->cnremphasized) { 1854 WinSendMsg(hwnd,CM_SETRECORDEMPHASIS,MPVOID, 1855 MPFROM2SHORT(FALSE,CRA_SOURCE)); 1856 dcd->cnremphasized = FALSE; 1857 } 1858 if(dcd->hwndLastMenu != TreeCnrMenu) 1859 MarkAll(hwnd,TRUE,FALSE,TRUE); 1860 } 1861 } 1862 DosEnterCritSec(); 1863 fFollowTree = wasFollowing; 1864 DosExitCritSec(); 1865 } 1866 break; 1867 1868 case CN_ENTER: 1869 if(mp2) 1870 { 1871 PCNRITEM pci = (PCNRITEM)((PNOTIFYRECORDENTER)mp2)->pRecord; 1872 1873 PostMsg(hwnd,UM_ENTER,MPFROMP(pci),MPVOID); 1874 } 1875 break; 1876 1877 case CN_COLLAPSETREE: 1878 case CN_EXPANDTREE: 1879 { 1880 PCNRITEM pci = (PCNRITEM)mp2; 1881 1882 if(pci && (INT)pci != -1 && !(pci->flags & RECFLAGS_ENV)) { 1883 if(driveflags[toupper(*pci->szFileName) - 'A'] & 1884 DRIVE_REMOVABLE) { 1885 1886 struct { 1887 ULONG serial; 1888 CHAR volumelength; 1889 CHAR volumelabel[CCHMAXPATH]; 1890 } volser; 1891 1892 memset(&volser,0,sizeof(volser)); 1893 DosError(FERR_DISABLEHARDERR); 1894 if(!DosQueryFSInfo(toupper(*pci->szFileName) - '@', 1895 FSIL_VOLSER,&volser, 1896 (ULONG)sizeof(volser))) { 1897 if(SHORT2FROMMP(mp1) == CN_COLLAPSETREE && 1898 !volser.serial || 1899 driveserial[toupper(*pci->szFileName) - 'A'] != 1900 volser.serial) 1901 UnFlesh(hwnd,pci); 1902 if(SHORT2FROMMP(mp1) != CN_COLLAPSETREE || 1903 (!volser.serial || 1904 driveserial[toupper(*pci->szFileName) - 'A'] != 1905 volser.serial)) { 1906 if(Flesh(hwnd,pci) && 1907 SHORT2FROMMP(mp1) == CN_EXPANDTREE && 1908 !dcd->suspendview && fTopDir) 1909 PostMsg(hwnd,UM_TOPDIR,MPFROMP(pci),MPVOID); 1910 } 1911 driveserial[toupper(*pci->szFileName) - 'A'] = 1912 volser.serial; 1913 } 1914 else { 1915 driveserial[toupper(*pci->szFileName) - 'A'] = -1; 1916 UnFlesh(hwnd,pci); 1917 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID); 1918 DosBeep(250,100); 1919 } 1920 } 1921 else if(SHORT2FROMMP(mp1) == CN_EXPANDTREE) { 1922 if(Flesh(hwnd,pci) && !dcd->suspendview && fTopDir) 1923 PostMsg(hwnd,UM_TOPDIR,MPFROMP(pci),MPVOID); 1924 } 1925 if(SHORT2FROMMP(mp1) == CN_EXPANDTREE && !dcd->suspendview) 1926 WinSendMsg(hwnd,UM_FILTER,MPVOID,MPVOID); 1927 } 1928 } 1929 break; 1930 } // switch WM_CONTROL 1931 } 1932 return 0; 1933 1934 case UM_ACTION: 1935 if(mp1) { 1936 1937 LISTINFO *li = mp1; 1938 ULONG action = (ULONG)mp2; 1939 1940 if(!li->list || !li->list[0] || 1941 !PostMsg(dcd->hwndObject, 1942 action, 1943 MPFROMP(li), 1944 MPVOID)) 1945 FreeListInfo(li); 1946 } 1947 return 0; 1948 1949 case UM_SHOWME: 1950 if(mp1 && dcd) { 1951 CHAR *dir = xstrdup((CHAR *)mp1, pszSrcFile, __LINE__); 1952 if (dir) { 1953 if(!PostMsg(dcd->hwndObject, 1954 UM_SHOWME, 1955 MPFROMP(dir), 1956 MPVOID)) 1957 free(dir); 1958 } 1959 } 1960 return 0; 1961 1962 case UM_TOPDIR: 1963 if(mp1) { 1964 1965 PCNRITEM pci = (PCNRITEM)mp1; 1966 1967 ShowCnrRecord(hwnd, 1968 (PMINIRECORDCORE)pci); 1969 } 1970 return 0; 1971 1972 case UM_ENTER: 1973 { 1974 FILEFINDBUF3 ffb; 1975 HDIR hDir = HDIR_CREATE; 1976 ULONG nm = 1L; 1977 APIRET status; 1978 BOOL IsOk = FALSE; 1979 ULONG ulDriveNum,ulDriveMap; 1980 PCNRITEM pciP,pciL,pci; 1981 ULONG fl = SWP_ACTIVATE; 1982 1983 if(fFollowTree) 1984 fl = 0; 1985 SetShiftState(); 1986 pci = (PCNRITEM)mp1; 1987 if(pci && 1988 (INT)pci != -1 && 1989 !(pci->rc.flRecordAttr & CRA_INUSE) && 1990 !(pci->flags & RECFLAGS_ENV) && 1991 IsFullName(pci->szFileName)) { 1992 if(driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_INVALID) { 1993 DosBeep(50,100); 1994 if(hwndStatus) 1995 WinSetWindowText(hwndStatus, 1996 GetPString(IDS_RESCANSUGTEXT)); 1997 return 0; 1998 } 1999 DosError(FERR_DISABLEHARDERR); 2000 if (!DosQCurDisk(&ulDriveNum,&ulDriveMap)) { 2001 if (!(ulDriveMap & 1L << (toupper(*pci->szFileName) - 'A'))) { 2002 pciL = pciP = pci; 2003 for (;;) { 2004 pciP = WinSendMsg(hwnd, 2005 CM_QUERYRECORD, 2006 MPFROMP(pciL), 2007 MPFROM2SHORT(CMA_PARENT,CMA_ITEMORDER)); 2008 if(pciP && (INT)pciP != -1) 2009 pciL = pciP; 2010 else { 2011 pciP = pciL; 2012 break; 2013 } 2014 } // for 2015 WinSendMsg(hwnd, 2016 CM_REMOVERECORD, 2017 MPFROMP(&pciP), 2018 MPFROM2SHORT(1,CMA_FREE | CMA_INVALIDATE)); 2019 return 0; 2020 } 2021 } 2022 if(driveflags[toupper(*pci->szFileName) - 'A'] & 2023 (DRIVE_REMOVABLE | DRIVE_NOPRESCAN)) { 2024 2025 struct { 2026 ULONG serial; 2027 CHAR volumelength; 2028 CHAR volumelabel[CCHMAXPATH]; 2029 } volser; 2030 1641 else if (SHORT2FROMMP(mp1) == CN_EXPANDTREE) { 1642 if (Flesh(hwnd, pci) && !dcd->suspendview && fTopDir) 1643 PostMsg(hwnd, UM_TOPDIR, MPFROMP(pci), MPVOID); 1644 } 1645 if (SHORT2FROMMP(mp1) == CN_EXPANDTREE && !dcd->suspendview) 1646 WinSendMsg(hwnd, UM_FILTER, MPVOID, MPVOID); 1647 } 1648 } 1649 break; 1650 } // switch WM_CONTROL 1651 } 1652 return 0; 1653 1654 case UM_ACTION: 1655 if (mp1) { 1656 1657 LISTINFO *li = mp1; 1658 ULONG action = (ULONG) mp2; 1659 1660 if (!li->list || !li->list[0] || 1661 !PostMsg(dcd->hwndObject, action, MPFROMP(li), MPVOID)) 1662 FreeListInfo(li); 1663 } 1664 return 0; 1665 1666 case UM_SHOWME: 1667 if (mp1 && dcd) { 1668 CHAR *dir = xstrdup((CHAR *) mp1, pszSrcFile, __LINE__); 1669 1670 if (dir) { 1671 if (!PostMsg(dcd->hwndObject, UM_SHOWME, MPFROMP(dir), MPVOID)) 1672 free(dir); 1673 } 1674 } 1675 return 0; 1676 1677 case UM_TOPDIR: 1678 if (mp1) { 1679 1680 PCNRITEM pci = (PCNRITEM) mp1; 1681 1682 ShowCnrRecord(hwnd, (PMINIRECORDCORE) pci); 1683 } 1684 return 0; 1685 1686 case UM_ENTER: 1687 { 1688 FILEFINDBUF3 ffb; 1689 HDIR hDir = HDIR_CREATE; 1690 ULONG nm = 1L; 1691 APIRET status; 1692 BOOL IsOk = FALSE; 1693 ULONG ulDriveNum, ulDriveMap; 1694 PCNRITEM pciP, pciL, pci; 1695 ULONG fl = SWP_ACTIVATE; 1696 1697 if (fFollowTree) 1698 fl = 0; 1699 SetShiftState(); 1700 pci = (PCNRITEM) mp1; 1701 if (pci && 1702 (INT) pci != -1 && 1703 !(pci->rc.flRecordAttr & CRA_INUSE) && 1704 !(pci->flags & RECFLAGS_ENV) && IsFullName(pci->szFileName)) { 1705 if (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_INVALID) { 1706 DosBeep(50, 100); 1707 if (hwndStatus) 1708 WinSetWindowText(hwndStatus, GetPString(IDS_RESCANSUGTEXT)); 1709 return 0; 1710 } 1711 DosError(FERR_DISABLEHARDERR); 1712 if (!DosQCurDisk(&ulDriveNum, &ulDriveMap)) { 1713 if (!(ulDriveMap & 1L << (toupper(*pci->szFileName) - 'A'))) { 2031 1714 pciL = pciP = pci; 2032 for (;;) {1715 for (;;) { 2033 1716 pciP = WinSendMsg(hwnd, 2034 1717 CM_QUERYRECORD, 2035 1718 MPFROMP(pciL), 2036 MPFROM2SHORT(CMA_PARENT, CMA_ITEMORDER));2037 if (pciP && (INT)pciP != -1)1719 MPFROM2SHORT(CMA_PARENT, CMA_ITEMORDER)); 1720 if (pciP && (INT) pciP != -1) 2038 1721 pciL = pciP; 2039 1722 else { … … 2041 1724 break; 2042 1725 } 2043 } 2044 if((driveflags[toupper(*pci->szFileName) - 'A'] & 1726 } // for 1727 WinSendMsg(hwnd, 1728 CM_REMOVERECORD, 1729 MPFROMP(&pciP), 1730 MPFROM2SHORT(1, CMA_FREE | CMA_INVALIDATE)); 1731 return 0; 1732 } 1733 } 1734 if (driveflags[toupper(*pci->szFileName) - 'A'] & 1735 (DRIVE_REMOVABLE | DRIVE_NOPRESCAN)) { 1736 1737 struct 1738 { 1739 ULONG serial; 1740 CHAR volumelength; 1741 CHAR volumelabel[CCHMAXPATH]; 1742 } 1743 volser; 1744 1745 pciL = pciP = pci; 1746 for (;;) { 1747 pciP = WinSendMsg(hwnd, 1748 CM_QUERYRECORD, 1749 MPFROMP(pciL), 1750 MPFROM2SHORT(CMA_PARENT, CMA_ITEMORDER)); 1751 if (pciP && (INT) pciP != -1) 1752 pciL = pciP; 1753 else { 1754 pciP = pciL; 1755 break; 1756 } 1757 } 1758 if ((driveflags[toupper(*pci->szFileName) - 'A'] & 2045 1759 DRIVE_NOPRESCAN) || 2046 (toupper(*pci->szFileName) > 'B' && 2047 !(driveflags[toupper(*pci->szFileName) - 'A'] & 2048 DRIVE_CDROM))) { 2049 2050 INT removable, 2051 x = (INT)(toupper(*pci->szFileName) - 'A'); 2052 ULONG drvtype; 2053 CHAR FileSystem[CCHMAXPATH]; 2054 2055 DosError(FERR_DISABLEHARDERR); 2056 removable = CheckDrive(toupper(*pciP->szFileName), 2057 FileSystem, 2058 &drvtype); 2059 if(removable != -1) { 2060 driveflags[x] &= (DRIVE_IGNORE | DRIVE_NOPRESCAN | 2061 DRIVE_NOLOADICONS | DRIVE_NOLOADSUBJS | 2062 DRIVE_NOLOADLONGS | DRIVE_INCLUDEFILES | 2063 DRIVE_SLOW); 2064 2065 if(removable == 1) 2066 driveflags[x] |= DRIVE_REMOVABLE; 2067 if(drvtype & DRIVE_REMOTE) 2068 driveflags[x] |= DRIVE_REMOTE; 2069 if(!strcmp(FileSystem,CDFS)) 2070 driveflags[x] |= (DRIVE_REMOVABLE | 2071 DRIVE_NOTWRITEABLE | 2072 DRIVE_CDROM); 2073 if (strcmp(FileSystem,HPFS) && 2074 strcmp(FileSystem,JFS) && 2075 strcmp(FileSystem,CDFS) && 2076 strcmp(FileSystem,FAT32) && 2077 strcmp(FileSystem,NDFS32) && 2078 strcmp(FileSystem,HPFS386)) 2079 { 2080 driveflags[x] |= DRIVE_NOLONGNAMES; 2081 } 2082 if(!strcmp(FileSystem,CBSIFS)) { 2083 driveflags[x] |= DRIVE_ZIPSTREAM; 2084 driveflags[x] &= (~DRIVE_REMOTE); 2085 } 2086 if(driveflags[x] & DRIVE_CDROM) 2087 pciP->rc.hptrIcon = hptrCDROM; 2088 1760 (toupper(*pci->szFileName) > 'B' && 1761 !(driveflags[toupper(*pci->szFileName) - 'A'] & 1762 DRIVE_CDROM))) { 1763 1764 INT removable, x = (INT) (toupper(*pci->szFileName) - 'A'); 1765 ULONG drvtype; 1766 CHAR FileSystem[CCHMAXPATH]; 1767 1768 DosError(FERR_DISABLEHARDERR); 1769 removable = CheckDrive(toupper(*pciP->szFileName), 1770 FileSystem, &drvtype); 1771 if (removable != -1) { 1772 driveflags[x] &= (DRIVE_IGNORE | DRIVE_NOPRESCAN | 1773 DRIVE_NOLOADICONS | DRIVE_NOLOADSUBJS | 1774 DRIVE_NOLOADLONGS | DRIVE_INCLUDEFILES | 1775 DRIVE_SLOW); 1776 1777 if (removable == 1) 1778 driveflags[x] |= DRIVE_REMOVABLE; 1779 if (drvtype & DRIVE_REMOTE) 1780 driveflags[x] |= DRIVE_REMOTE; 1781 if (!strcmp(FileSystem, CDFS)) 1782 driveflags[x] |= (DRIVE_REMOVABLE | 1783 DRIVE_NOTWRITEABLE | DRIVE_CDROM); 1784 if (strcmp(FileSystem, HPFS) && 1785 strcmp(FileSystem, JFS) && 1786 strcmp(FileSystem, CDFS) && 1787 strcmp(FileSystem, FAT32) && 1788 strcmp(FileSystem, NDFS32) && strcmp(FileSystem, HPFS386)) { 1789 driveflags[x] |= DRIVE_NOLONGNAMES; 1790 } 1791 if (!strcmp(FileSystem, CBSIFS)) { 1792 driveflags[x] |= DRIVE_ZIPSTREAM; 1793 driveflags[x] &= (~DRIVE_REMOTE); 1794 } 1795 if (driveflags[x] & DRIVE_CDROM) 1796 pciP->rc.hptrIcon = hptrCDROM; 1797 1798 else 1799 pciP->rc.hptrIcon = (driveflags[x] & DRIVE_REMOVABLE) ? 1800 hptrRemovable : 1801 (driveflags[x] & DRIVE_REMOTE) ? hptrRemote : hptrDrive; 1802 WinSendMsg(hwnd, 1803 CM_INVALIDATERECORD, 1804 MPFROMP(&pciP), 1805 MPFROM2SHORT(1, CMA_ERASE | CMA_REPOSITION)); 1806 if (hwndMain) 1807 PostMsg(hwndMain, UM_BUILDDRIVEBAR, MPVOID, MPVOID); 1808 } 1809 } 1810 memset(&volser, 0, sizeof(volser)); 1811 DosError(FERR_DISABLEHARDERR); 1812 status = DosQueryFSInfo(toupper(*pci->szFileName) - '@', 1813 FSIL_VOLSER, &volser, 1814 (ULONG) sizeof(volser)); 1815 if (!status) { 1816 if (!volser.serial || 1817 driveserial[toupper(*pci->szFileName) - 'A'] != 1818 volser.serial) { 1819 UnFlesh(hwnd, pciP); 1820 Flesh(hwnd, pciP); 1821 driveserial[toupper(*pci->szFileName) - 'A'] = volser.serial; 1822 } 1823 pciL = WinSendMsg(hwnd, 1824 CM_QUERYRECORD, 1825 MPFROMP(pciP), 1826 MPFROM2SHORT(CMA_FIRSTCHILD, CMA_ITEMORDER)); 1827 if (!pciL) 1828 Flesh(hwnd, pciP); 1829 } 1830 else { 1831 driveserial[toupper(*pci->szFileName) - 'A'] = -1; 1832 UnFlesh(hwnd, pci); 1833 PostMsg(hwnd, UM_RESCAN, MPVOID, MPVOID); 1834 PostMsg(hwnd, UM_SETUP2, MPFROMP(pci), MPFROMLONG(status)); 1835 return 0; 1836 } 1837 } 1838 status = 0; 1839 IsOk = (IsRoot(pci->szFileName) && 1840 IsValidDrive(toupper(*pci->szFileName))); 1841 if (!IsOk) { 1842 DosError(FERR_DISABLEHARDERR); 1843 status = DosFindFirst(pci->szFileName, &hDir, 1844 FILE_NORMAL | FILE_DIRECTORY | 1845 FILE_ARCHIVED | FILE_READONLY | 1846 FILE_HIDDEN | FILE_SYSTEM, 1847 &ffb, sizeof(ffb), &nm, FIL_STANDARD); 1848 priority_bumped(); 1849 } 1850 if (!status) { 1851 if (!IsOk) 1852 DosFindClose(hDir); 1853 if (IsOk || (ffb.attrFile & FILE_DIRECTORY)) { 1854 if ((shiftstate & (KC_CTRL | KC_ALT)) == (KC_CTRL | KC_ALT)) { 1855 PostMsg(hwnd, 1856 WM_COMMAND, MPFROM2SHORT(IDM_SHOWALLFILES, 0), MPVOID); 1857 return 0; 1858 } 1859 if ((shiftstate & (KC_CTRL | KC_SHIFT)) == (KC_CTRL | KC_SHIFT)) { 1860 OpenObject(pci->szFileName, Settings, dcd->hwndFrame); 1861 return 0; 1862 } 1863 if (!(shiftstate & (KC_CTRL | KC_SHIFT))) { 1864 if (!ParentIsDesktop(hwnd, dcd->hwndParent)) { 1865 if (FindDirCnrByName(pci->szFileName, TRUE)) 1866 return 0; 1867 } 1868 } 1869 if ((shiftstate & KC_CTRL) || 1870 (!(shiftstate & KC_SHIFT) && 1871 ParentIsDesktop(hwnd, dcd->hwndParent) && fVTreeOpensWPS)) { 1872 1873 ULONG size = sizeof(ULONG), flWindowAttr = CV_ICON; 1874 CHAR s[33]; 1875 1876 strcpy(s, "ICON"); 1877 PrfQueryProfileData(fmprof, 1878 appname, 1879 "DirflWindowAttr", 1880 (PVOID) & flWindowAttr, &size); 1881 if (flWindowAttr & CV_DETAIL) { 1882 if (IsRoot(pci->szFileName)) 1883 strcpy(s, "TREE"); 2089 1884 else 2090 pciP->rc.hptrIcon = (driveflags[x] & DRIVE_REMOVABLE) ? 2091 hptrRemovable : 2092 (driveflags[x] & DRIVE_REMOTE) ? 2093 hptrRemote : hptrDrive; 2094 WinSendMsg(hwnd, 2095 CM_INVALIDATERECORD, 2096 MPFROMP(&pciP), 2097 MPFROM2SHORT(1,CMA_ERASE | CMA_REPOSITION)); 2098 if(hwndMain) 2099 PostMsg(hwndMain, 2100 UM_BUILDDRIVEBAR, 2101 MPVOID, 2102 MPVOID); 1885 strcpy(s, "DETAILS"); 2103 1886 } 2104 } 2105 memset(&volser,0,sizeof(volser)); 2106 DosError(FERR_DISABLEHARDERR); 2107 status = DosQueryFSInfo(toupper(*pci->szFileName) - '@', 2108 FSIL_VOLSER,&volser, 2109 (ULONG)sizeof(volser)); 2110 if(!status) { 2111 if(!volser.serial || 2112 driveserial[toupper(*pci->szFileName) - 'A'] != 2113 volser.serial) { 2114 UnFlesh(hwnd,pciP); 2115 Flesh(hwnd,pciP); 2116 driveserial[toupper(*pci->szFileName) - 'A'] = 2117 volser.serial; 2118 } 2119 pciL = WinSendMsg(hwnd, 2120 CM_QUERYRECORD, 2121 MPFROMP(pciP), 2122 MPFROM2SHORT(CMA_FIRSTCHILD, 2123 CMA_ITEMORDER)); 2124 if(!pciL) 2125 Flesh(hwnd,pciP); 2126 } 2127 else { 2128 driveserial[toupper(*pci->szFileName) - 'A'] = -1; 2129 UnFlesh(hwnd, 2130 pci); 2131 PostMsg(hwnd, 2132 UM_RESCAN, 2133 MPVOID, 2134 MPVOID); 2135 PostMsg(hwnd, 2136 UM_SETUP2, 2137 MPFROMP(pci), 2138 MPFROMLONG(status)); 1887 OpenObject(pci->szFileName, s, dcd->hwndFrame); 2139 1888 return 0; 2140 1889 } 2141 } 2142 status = 0; 2143 IsOk = (IsRoot(pci->szFileName) && 2144 IsValidDrive(toupper(*pci->szFileName))); 2145 if(!IsOk) { 2146 DosError(FERR_DISABLEHARDERR); 2147 status = DosFindFirst(pci->szFileName,&hDir, 2148 FILE_NORMAL | FILE_DIRECTORY | 2149 FILE_ARCHIVED | FILE_READONLY | 2150 FILE_HIDDEN | FILE_SYSTEM, 2151 &ffb,sizeof(ffb),&nm, 2152 FIL_STANDARD); 2153 priority_bumped(); 2154 } 2155 if(!status) { 2156 if(!IsOk) 2157 DosFindClose(hDir); 2158 if(IsOk || 2159 (ffb.attrFile & FILE_DIRECTORY)) { 2160 if((shiftstate & (KC_CTRL | KC_ALT)) == 2161 (KC_CTRL | KC_ALT)) { 2162 PostMsg(hwnd, 2163 WM_COMMAND, 2164 MPFROM2SHORT(IDM_SHOWALLFILES,0), 2165 MPVOID); 2166 return 0; 2167 } 2168 if((shiftstate & (KC_CTRL | KC_SHIFT)) == 2169 (KC_CTRL | KC_SHIFT)) { 2170 OpenObject(pci->szFileName, 2171 Settings, 2172 dcd->hwndFrame); 2173 return 0; 2174 } 2175 if(!(shiftstate & (KC_CTRL | KC_SHIFT))) { 2176 if(!ParentIsDesktop(hwnd,dcd->hwndParent)) { 2177 if(FindDirCnrByName(pci->szFileName, 2178 TRUE)) 2179 return 0; 2180 } 2181 } 2182 if((shiftstate & KC_CTRL) || 2183 (!(shiftstate & KC_SHIFT) && 2184 ParentIsDesktop(hwnd,dcd->hwndParent) && 2185 fVTreeOpensWPS)) { 2186 2187 ULONG size = sizeof(ULONG),flWindowAttr = CV_ICON; 2188 CHAR s[33]; 2189 2190 strcpy(s,"ICON"); 2191 PrfQueryProfileData(fmprof, 2192 appname, 2193 "DirflWindowAttr", 2194 (PVOID)&flWindowAttr, 2195 &size); 2196 if(flWindowAttr & CV_DETAIL) { 2197 if(IsRoot(pci->szFileName)) 2198 strcpy(s,"TREE"); 2199 else 2200 strcpy(s,"DETAILS"); 2201 } 2202 OpenObject(pci->szFileName, 2203 s, 2204 dcd->hwndFrame); 2205 return 0; 2206 } 2207 if(!ParentIsDesktop(hwnd,dcd->hwndParent) && 2208 !fDCOpens && 2209 !LastDir && 2210 !(shiftstate & KC_SHIFT)) 2211 LastDir = FindDirCnr(dcd->hwndParent); 2212 if(LastDir && 2213 !fDCOpens && 2214 !(shiftstate & KC_SHIFT)) { 2215 WinSendMsg(LastDir, 2216 UM_SETDIR, 2217 MPFROMP(pci->szFileName), 2218 MPVOID); 2219 WinSetWindowPos(WinQueryWindow(WinQueryWindow(LastDir, 2220 QW_PARENT), 2221 QW_PARENT), 2222 HWND_TOP, 2223 0, 2224 0, 2225 0, 2226 0, 2227 SWP_ZORDER | fl); 2228 } 2229 else 2230 OpenDirCnr(hwnd, 2231 dcd->hwndParent, 2232 dcd->hwndFrame, 2233 FALSE, 2234 pci->szFileName); 2235 } 2236 else { 2237 if(!(driveflags[toupper(*pci->szFileName) - 'A'] & 2238 DRIVE_INCLUDEFILES)) 2239 WinSendMsg(hwnd, 2240 CM_REMOVERECORD, 2241 MPFROMP(&pci), 2242 MPFROM2SHORT(1,CMA_FREE | CMA_INVALIDATE)); 2243 else { 2244 2245 SWP swp; 2246 2247 WinQueryWindowPos(dcd->hwndFrame,&swp); 2248 DefaultViewKeys(hwnd, 2249 dcd->hwndFrame, 2250 dcd->hwndParent, 2251 &swp, 2252 pci->szFileName); 2253 } 2254 } 1890 if (!ParentIsDesktop(hwnd, dcd->hwndParent) && 1891 !fDCOpens && !LastDir && !(shiftstate & KC_SHIFT)) 1892 LastDir = FindDirCnr(dcd->hwndParent); 1893 if (LastDir && !fDCOpens && !(shiftstate & KC_SHIFT)) { 1894 WinSendMsg(LastDir, 1895 UM_SETDIR, MPFROMP(pci->szFileName), MPVOID); 1896 WinSetWindowPos(WinQueryWindow(WinQueryWindow(LastDir, 1897 QW_PARENT), 1898 QW_PARENT), 1899 HWND_TOP, 0, 0, 0, 0, SWP_ZORDER | fl); 1900 } 1901 else 1902 OpenDirCnr(hwnd, 1903 dcd->hwndParent, 1904 dcd->hwndFrame, FALSE, pci->szFileName); 2255 1905 } 2256 1906 else { 2257 if (!IsRoot(pci->szFileName)) {2258 NotifyError(pci->szFileName,status);1907 if (!(driveflags[toupper(*pci->szFileName) - 'A'] & 1908 DRIVE_INCLUDEFILES)) 2259 1909 WinSendMsg(hwnd, 2260 1910 CM_REMOVERECORD, 2261 1911 MPFROMP(&pci), 2262 MPFROM2SHORT(1,CMA_FREE | CMA_INVALIDATE)); 2263 } 2264 } 2265 } 2266 else if(!pci) 2267 PostMsg(hwnd, 2268 WM_COMMAND, 2269 MPFROM2SHORT(IDM_MKDIR,0), 2270 MPVOID); 2271 if(fFollowTree) 2272 WinSetFocus(HWND_DESKTOP,hwnd); 2273 } 2274 return 0; 2275 2276 case WM_MENUEND: 2277 if(dcd) { 2278 2279 HWND hwndMenu = (HWND)mp2; 2280 2281 if(hwndMenu == TreeCnrMenu || hwndMenu == TreeMenu || 2282 hwndMenu == DirMenu) { 2283 MarkAll(hwnd,TRUE,FALSE,TRUE); 2284 if(dcd->cnremphasized) { 1912 MPFROM2SHORT(1, CMA_FREE | CMA_INVALIDATE)); 1913 else { 1914 1915 SWP swp; 1916 1917 WinQueryWindowPos(dcd->hwndFrame, &swp); 1918 DefaultViewKeys(hwnd, 1919 dcd->hwndFrame, 1920 dcd->hwndParent, &swp, pci->szFileName); 1921 } 1922 } 1923 } 1924 else { 1925 if (!IsRoot(pci->szFileName)) { 1926 NotifyError(pci->szFileName, status); 2285 1927 WinSendMsg(hwnd, 2286 CM_SETRECORDEMPHASIS, 2287 MPVOID, 2288 MPFROM2SHORT(FALSE,CRA_SOURCE)); 2289 dcd->cnremphasized = FALSE; 2290 } 2291 } 2292 } 1928 CM_REMOVERECORD, 1929 MPFROMP(&pci), 1930 MPFROM2SHORT(1, CMA_FREE | CMA_INVALIDATE)); 1931 } 1932 } 1933 } 1934 else if (!pci) 1935 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(IDM_MKDIR, 0), MPVOID); 1936 if (fFollowTree) 1937 WinSetFocus(HWND_DESKTOP, hwnd); 1938 } 1939 return 0; 1940 1941 case WM_MENUEND: 1942 if (dcd) { 1943 1944 HWND hwndMenu = (HWND) mp2; 1945 1946 if (hwndMenu == TreeCnrMenu || hwndMenu == TreeMenu || 1947 hwndMenu == DirMenu) { 1948 MarkAll(hwnd, TRUE, FALSE, TRUE); 1949 if (dcd->cnremphasized) { 1950 WinSendMsg(hwnd, 1951 CM_SETRECORDEMPHASIS, 1952 MPVOID, MPFROM2SHORT(FALSE, CRA_SOURCE)); 1953 dcd->cnremphasized = FALSE; 1954 } 1955 } 1956 } 1957 break; 1958 1959 case UM_OPENWINDOWFORME: 1960 if (dcd) { 1961 if (mp1 && !IsFile((CHAR *) mp1)) 1962 OpenDirCnr(hwnd, dcd->hwndParent, dcd->hwndFrame, FALSE, (char *)mp1); 1963 } 1964 return 0; 1965 1966 case MM_PORTHOLEINIT: 1967 if (dcd) { 1968 switch (SHORT1FROMMP(mp1)) { 1969 case 0: 1970 case 1: 1971 { 1972 ULONG wmsg; 1973 1974 wmsg = ((SHORT1FROMMP(mp1) == 0) ? UM_FILESMENU : UM_VIEWSMENU); 1975 PortholeInit((HWND) WinSendMsg(dcd->hwndClient, 1976 wmsg, MPVOID, MPVOID), mp1, mp2); 1977 } 1978 break; 1979 } 1980 } 1981 break; 1982 1983 case UM_INITMENU: 1984 case WM_INITMENU: 1985 if (dcd) { 1986 switch (SHORT1FROMMP(mp1)) { 1987 case IDM_FILESMENU: 1988 { 1989 PCNRITEM pci; 1990 1991 pci = (PCNRITEM) CurrentRecord(hwnd); 1992 if (pci && (INT) pci != -1) { 1993 BOOL rdy; 1994 BOOL writeable; 1995 BOOL removable; 1996 BOOL remote; 1997 BOOL underenv; 1998 CHAR chDrvU; 1999 CHAR szDrv[CCHMAXPATH]; 2000 2001 strcpy(szDrv, pci->szFileName); 2002 chDrvU = *pci->szFileName; 2003 chDrvU = toupper(chDrvU); 2004 MakeValidDir(szDrv); 2005 rdy = *szDrv == chDrvU; // Drive not ready if MakeValidDir changes drive letter 2006 removable = rdy 2007 && (driveflags[chDrvU - 'A'] & DRIVE_REMOVABLE) != 0; 2008 writeable = rdy 2009 && !(driveflags[chDrvU - 'A'] & DRIVE_NOTWRITEABLE); 2010 remote = rdy && (driveflags[chDrvU - 'A'] & DRIVE_REMOTE) != 0; 2011 underenv = (pci->flags & RECFLAGS_UNDERENV) != 0; 2012 2013 WinEnableMenuItem((HWND) mp2, IDM_INFO, rdy); 2014 2015 WinEnableMenuItem((HWND) mp2, IDM_ATTRS, writeable); 2016 WinEnableMenuItem((HWND) mp2, IDM_EAS, writeable); 2017 WinEnableMenuItem((HWND) mp2, IDM_SUBJECT, writeable); 2018 WinEnableMenuItem((HWND) mp2, IDM_DRVFLAGS, 1); // fixme to allow if not ready 2019 2020 WinEnableMenuItem((HWND) mp2, IDM_ARCHIVE, rdy); 2021 2022 WinEnableMenuItem((HWND) mp2, IDM_UPDATE, !underenv); 2023 WinEnableMenuItem((HWND) mp2, IDM_EXPANDSUBMENU, !underenv); 2024 WinEnableMenuItem((HWND) mp2, IDM_EXPAND, !underenv); 2025 WinEnableMenuItem((HWND) mp2, IDM_COLLAPSE, !underenv); 2026 2027 WinEnableMenuItem((HWND) mp2, IDM_SIZES, rdy); 2028 WinEnableMenuItem((HWND) mp2, IDM_MKDIR, writeable); 2029 WinEnableMenuItem((HWND) mp2, IDM_SHOWALLFILES, rdy); 2030 WinEnableMenuItem((HWND) mp2, IDM_UNDELETE, writeable); 2031 2032 WinEnableMenuItem((HWND) mp2, IDM_CHKDSK, writeable && !remote); 2033 WinEnableMenuItem((HWND) mp2, IDM_FORMAT, writeable && !remote); 2034 WinEnableMenuItem((HWND) mp2, IDM_OPTIMIZE, writeable && !remote); 2035 WinEnableMenuItem((HWND) mp2, IDM_PARTITIONSMENU, !remote); 2036 2037 WinEnableMenuItem((HWND) mp2, IDM_DETACH, remote); 2038 2039 WinEnableMenuItem((HWND) mp2, IDM_EJECT, removable); 2040 2041 WinEnableMenuItem((HWND) mp2, IDM_LOCK, removable); 2042 WinEnableMenuItem((HWND) mp2, IDM_UNLOCK, removable); 2043 2044 WinEnableMenuItem((HWND) mp2, IDM_DELETE, !underenv && writeable); 2045 WinEnableMenuItem((HWND) mp2, IDM_PERMDELETE, !underenv 2046 && writeable); 2047 WinEnableMenuItem((HWND) mp2, IDM_DELETESUBMENU, !underenv 2048 && writeable); 2049 WinEnableMenuItem((HWND) mp2, IDM_MOVEMENU, !underenv 2050 && writeable); 2051 WinEnableMenuItem((HWND) mp2, IDM_RENAME, !underenv && writeable); 2052 2053 } 2054 } 2055 break; 2056 2057 case IDM_VIEWSMENU: 2058 WinCheckMenuItem((HWND) mp2, 2059 IDM_MINIICONS, ((dcd->flWindowAttr & CV_MINI) != 0)); 2060 WinEnableMenuItem((HWND) mp2, IDM_RESELECT, FALSE); 2061 break; 2062 2063 case IDM_COMMANDSMENU: 2064 SetupCommandMenu((HWND) mp2, hwnd); 2065 break; 2066 2067 case IDM_SORTSUBMENU: 2068 SetSortChecks((HWND) mp2, TreesortFlags); 2069 break; 2070 2071 case IDM_WINDOWSMENU: 2072 SetupWinList((HWND) mp2, 2073 (hwndMain) ? hwndMain : (HWND) 0, dcd->hwndFrame); 2074 break; 2075 } 2076 dcd->hwndLastMenu = (HWND) mp2; 2077 } 2078 if (msg == WM_INITMENU) 2293 2079 break; 2294 2295 case UM_OPENWINDOWFORME: 2296 if(dcd) { 2297 if(mp1 && 2298 !IsFile((CHAR *)mp1)) 2299 OpenDirCnr(hwnd, 2300 dcd->hwndParent, 2301 dcd->hwndFrame, 2302 FALSE, 2303 (char *)mp1); 2304 } 2305 return 0; 2306 2307 case MM_PORTHOLEINIT: 2308 if(dcd) { 2309 switch(SHORT1FROMMP(mp1)) { 2310 case 0: 2311 case 1: 2312 { 2313 ULONG wmsg; 2314 2315 wmsg = ((SHORT1FROMMP(mp1) == 0) ? 2316 UM_FILESMENU : 2317 UM_VIEWSMENU); 2318 PortholeInit((HWND)WinSendMsg(dcd->hwndClient, 2319 wmsg, 2320 MPVOID, 2321 MPVOID), 2322 mp1, 2323 mp2); 2324 } 2080 return 0; 2081 2082 case UM_COMMAND: 2083 if (!mp1) 2084 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT); 2085 else { 2086 if (!dcd) { 2087 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT); 2088 FreeListInfo((LISTINFO *) mp1); 2089 } 2090 else { 2091 if (!PostMsg(dcd->hwndObject, UM_COMMAND, mp1, mp2)) { 2092 Runtime_Error(pszSrcFile, __LINE__, "PostMsg"); 2093 FreeListInfo((LISTINFO *) mp1); 2094 } 2095 else 2096 return (MRESULT) TRUE; 2097 } 2098 } 2099 return 0; 2100 2101 case UM_LOADFILE: 2102 if (dcd && mp2) { 2103 2104 HWND ret; 2105 2106 ret = StartMLEEditor(dcd->hwndParent, (INT) mp1, (CHAR *) mp2, 2107 dcd->hwndFrame); 2108 if (mp2) 2109 free((CHAR *) mp2); 2110 return MRFROMLONG(ret); 2111 } 2112 return 0; 2113 2114 case UM_FIXCNRMLE: 2115 case UM_FIXEDITNAME: 2116 return CommonCnrProc(hwnd, msg, mp1, mp2); 2117 2118 case UM_NOTIFY: 2119 if (mp2) 2120 Notify((CHAR *) mp2); 2121 return 0; 2122 2123 case UM_FILTER: 2124 if (dcd) { 2125 2126 BOOL tempsusp = dcd->suspendview; 2127 2128 if (mp1) { 2129 DosEnterCritSec(); 2130 SetMask((CHAR *) mp1, &dcd->mask); 2131 DosExitCritSec(); 2132 } 2133 dcd->suspendview = TRUE; 2134 dcd->mask.attrFile |= FILE_DIRECTORY; 2135 WinSendMsg(hwnd, CM_FILTER, MPFROMP(Filter), MPFROMP(&dcd->mask)); 2136 dcd->suspendview = tempsusp; 2137 PostMsg(hwnd, UM_RESCAN, MPVOID, MPVOID); 2138 } 2139 return 0; 2140 2141 case UM_DRIVECMD: 2142 if (mp1) 2143 ShowTreeRec(hwnd, (CHAR *) mp1, FALSE, TRUE); 2144 return 0; 2145 2146 case WM_APPTERMINATENOTIFY: 2147 { 2148 APPNOTIFY *info; 2149 PCNRITEM pci; 2150 CHAR s[] = " :\\"; 2151 2152 if (!mp2) { 2153 if (hwndMain) 2154 PostMsg(hwndMain, UM_BUILDDRIVEBAR, MPVOID, MPVOID); 2155 } 2156 info = apphead; 2157 while (info) { 2158 if (info->happ == (HAPP) mp1) { 2159 *s = info->device; 2160 pci = FindCnrRecord(hwnd, s, NULL, FALSE, FALSE, TRUE); 2161 if (pci && (INT) pci != -1) { 2162 driveserial[info->device - 'A'] = -1; 2163 DriveFlagsOne(info->device - 'A'); 2164 if (driveflags[info->device - 'A'] & 2165 (DRIVE_INVALID | DRIVE_IGNORE)) 2166 WinSendMsg(hwnd, 2167 CM_REMOVERECORD, 2168 MPFROMP(&pci), MPFROM2SHORT(1, CMA_FREE)); 2169 else 2170 Flesh(hwnd, pci); 2171 } 2172 if (info->prev) 2173 info->prev->next = info->next; 2174 if (info->next) 2175 info->next->prev = info->prev; 2176 if (apphead == info) 2177 apphead = info->next; 2178 if (apptail == info) 2179 apptail = info->prev; 2180 free(info); 2181 break; 2182 } 2183 info = info->next; 2184 } 2185 } 2186 break; 2187 2188 case WM_COMMAND: 2189 DosError(FERR_DISABLEHARDERR); 2190 if (dcd) { 2191 if (SwitchCommand(dcd->hwndLastMenu, SHORT1FROMMP(mp1))) 2192 return 0; 2193 switch (SHORT1FROMMP(mp1)) { 2194 case IDM_SETTARGET: 2195 SetTargetDir(hwnd, FALSE); 2196 break; 2197 2198 case IDM_DETACH: 2199 { 2200 CHAR d[3] = " :"; 2201 PCNRITEM pci; 2202 PROGDETAILS pgd; 2203 CHAR params[368], *p; 2204 HAPP happ; 2205 2206 pci = (PCNRITEM) CurrentRecord(hwnd); 2207 if (pci && (INT) pci != -1 && isalpha(*pci->szFileName)) { 2208 *d = toupper(*pci->szFileName); 2209 p = GetCmdSpec(FALSE); 2210 memset(&pgd, 0, sizeof(pgd)); 2211 pgd.Length = sizeof(pgd); 2212 pgd.progt.progc = PROG_WINDOWABLEVIO; 2213 pgd.progt.fbVisible = SHE_VISIBLE; 2214 pgd.pszTitle = GetPString(IDS_DETACHREQUESTTEXT); 2215 pgd.pszExecutable = p; 2216 pgd.pszParameters = params; 2217 pgd.pszStartupDir = NULL; 2218 pgd.pszIcon = NULL; 2219 pgd.pszEnvironment = NULL; 2220 pgd.swpInitial.hwndInsertBehind = HWND_TOP; 2221 pgd.swpInitial.hwnd = hwnd; 2222 pgd.swpInitial.fl = SWP_SHOW | SWP_ACTIVATE; 2223 sprintf(params, "/C NET USE %s /D", d); 2224 happ = WinStartApp(hwnd, &pgd, pgd.pszParameters, 2225 NULL, SAF_MAXIMIZED); 2226 if (!happ) { 2227 saymsg(MB_CANCEL | MB_ICONEXCLAMATION, hwnd, 2228 GetPString(IDS_ERRORTEXT), 2229 GetPString(IDS_CANTSTARTTEXT), p, params); 2230 } 2231 else { 2232 APPNOTIFY *info; 2233 2234 info = xmallocz(sizeof(APPNOTIFY), pszSrcFile, __LINE__); 2235 if (info) { 2236 info->happ = happ; 2237 info->device = *d; 2238 if (!apphead) 2239 apphead = info; 2240 else { 2241 apptail->next = info; 2242 info->prev = apptail; 2243 } 2244 apptail = info; 2245 } 2246 } 2247 } 2248 } 2249 break; 2250 2251 case IDM_REMAP: 2252 WinDlgBox(HWND_DESKTOP, hwnd, RemapDlgProc, 2253 FM3ModHandle, MAP_FRAME, NULL); 2254 break; 2255 2256 case IDM_CONTEXTMENU: 2257 { 2258 PCNRITEM pci; 2259 2260 pci = (PCNRITEM) CurrentRecord(hwnd); 2261 PostMsg(hwnd, WM_CONTROL, MPFROM2SHORT(DIR_CNR, CN_CONTEXTMENU), 2262 MPFROMP(pci)); 2263 } 2264 break; 2265 2266 case IDM_FINDINTREE: 2267 { 2268 CHAR dir[CCHMAXPATH]; 2269 PCNRITEM pci; 2270 2271 pci = (PCNRITEM) CurrentRecord(hwnd); 2272 if (pci && (INT) pci != -1) { 2273 strcpy(dir, pci->szFileName); 2274 MakeValidDir(dir); 2275 } 2276 else 2277 save_dir2(dir); 2278 if (WinDlgBox(HWND_DESKTOP, dcd->hwndParent, 2279 WalkAllDlgProc, 2280 FM3ModHandle, WALK_FRAME, MPFROMP(dir)) && *dir) 2281 WinSendMsg(hwnd, UM_SHOWME, MPFROMP(dir), MPFROMLONG(1L)); 2282 } 2283 break; 2284 2285 case IDM_BEGINEDIT: 2286 OpenEdit(hwnd); 2287 break; 2288 2289 case IDM_ENDEDIT: 2290 WinSendMsg(hwnd, CM_CLOSEEDIT, MPVOID, MPVOID); 2291 break; 2292 2293 case IDM_FILTER: 2294 { 2295 BOOL empty = FALSE; 2296 PCNRITEM pci; 2297 2298 pci = (PCNRITEM) CurrentRecord(hwnd); 2299 if (!*dcd->mask.szMask) 2300 empty = TRUE; 2301 dcd->mask.fIsTree = TRUE; 2302 *dcd->mask.prompt = 0; 2303 if (pci && (INT) pci != -1) 2304 dcd->mask.fFilesIncluded = 2305 ((driveflags[toupper(*pci->szFileName) - 'A'] & 2306 DRIVE_INCLUDEFILES) != 0); 2307 else 2308 dcd->mask.fFilesIncluded = FALSE; 2309 if (WinDlgBox(HWND_DESKTOP, hwnd, PickMaskDlgProc, 2310 FM3ModHandle, MSK_FRAME, MPFROMP(&dcd->mask))) 2311 WinSendMsg(hwnd, UM_FILTER, MPVOID, MPVOID); 2312 else if (empty) 2313 *dcd->mask.szMask = 0; 2314 PrfWriteProfileData(fmprof, appname, "TreeFilter", &dcd->mask, 2315 sizeof(MASK)); 2316 } 2317 break; 2318 2319 case IDM_SHOWSORT: 2320 QuickPopup(hwnd, dcd, CheckMenu(&TreeCnrMenu, TREECNR_POPUP), 2321 IDM_SORTSUBMENU); 2322 break; 2323 2324 case IDM_SHOWSELECT: 2325 QuickPopup(hwnd, dcd, CheckMenu(&TreeCnrMenu, TREECNR_POPUP), 2326 IDM_SELECTSUBMENU); 2327 break; 2328 2329 case IDM_NOTEBOOK: 2330 if (!ParentIsDesktop(dcd->hwndParent, dcd->hwndParent)) 2331 PostMsg(dcd->hwndParent, msg, mp1, mp2); 2332 else 2333 WinDlgBox(HWND_DESKTOP, hwnd, CfgDlgProc, FM3ModHandle, 2334 CFG_FRAME, (PVOID) "Tree"); 2335 break; 2336 2337 case IDM_WALKDIR: 2338 case IDM_OPENWALK: 2339 { 2340 CHAR newpath[CCHMAXPATH]; 2341 PCNRITEM pci; 2342 2343 pci = (PCNRITEM) CurrentRecord(hwnd); 2344 if (pci && (INT) pci != -1) { 2345 strcpy(newpath, pci->szFileName); 2346 MakeValidDir(newpath); 2347 } 2348 else 2349 save_dir2(newpath); 2350 if (!WinDlgBox(HWND_DESKTOP, dcd->hwndParent, WalkAllDlgProc, 2351 FM3ModHandle, WALK_FRAME, 2352 MPFROMP(newpath)) || !*newpath) 2325 2353 break; 2326 } 2327 } 2328 break; 2329 2330 case UM_INITMENU: 2331 case WM_INITMENU: 2332 if(dcd) { 2333 switch(SHORT1FROMMP(mp1)) { 2334 case IDM_FILESMENU: 2335 { 2336 PCNRITEM pci; 2337 2338 pci = (PCNRITEM)CurrentRecord(hwnd); 2339 if(pci && (INT)pci != -1) 2340 { 2341 BOOL rdy; 2342 BOOL writeable; 2343 BOOL removable; 2344 BOOL remote; 2345 BOOL underenv; 2346 CHAR chDrvU; 2347 CHAR szDrv[CCHMAXPATH]; 2348 strcpy(szDrv, pci->szFileName); 2349 chDrvU = *pci->szFileName; 2350 chDrvU = toupper(chDrvU); 2351 MakeValidDir(szDrv); 2352 rdy = *szDrv == chDrvU; // Drive not ready if MakeValidDir changes drive letter 2353 removable = rdy && (driveflags[chDrvU - 'A'] & DRIVE_REMOVABLE) != 0; 2354 writeable = rdy && !(driveflags[chDrvU - 'A'] & DRIVE_NOTWRITEABLE); 2355 remote = rdy && (driveflags[chDrvU - 'A'] & DRIVE_REMOTE) != 0; 2356 underenv = (pci->flags & RECFLAGS_UNDERENV) != 0; 2357 2358 WinEnableMenuItem((HWND)mp2, IDM_INFO, rdy); 2359 2360 WinEnableMenuItem((HWND)mp2, IDM_ATTRS, writeable); 2361 WinEnableMenuItem((HWND)mp2, IDM_EAS, writeable); 2362 WinEnableMenuItem((HWND)mp2, IDM_SUBJECT, writeable); 2363 WinEnableMenuItem((HWND)mp2, IDM_DRVFLAGS, 1); // fixme to allow if not ready 2364 2365 WinEnableMenuItem((HWND)mp2, IDM_ARCHIVE, rdy); 2366 2367 WinEnableMenuItem((HWND)mp2, IDM_UPDATE, !underenv); 2368 WinEnableMenuItem((HWND)mp2, IDM_EXPANDSUBMENU, !underenv); 2369 WinEnableMenuItem((HWND)mp2, IDM_EXPAND, !underenv); 2370 WinEnableMenuItem((HWND)mp2, IDM_COLLAPSE, !underenv); 2371 2372 WinEnableMenuItem((HWND)mp2, IDM_SIZES, rdy); 2373 WinEnableMenuItem((HWND)mp2, IDM_MKDIR, writeable); 2374 WinEnableMenuItem((HWND)mp2, IDM_SHOWALLFILES, rdy); 2375 WinEnableMenuItem((HWND)mp2, IDM_UNDELETE, writeable); 2376 2377 WinEnableMenuItem((HWND)mp2, IDM_CHKDSK, writeable && !remote); 2378 WinEnableMenuItem((HWND)mp2, IDM_FORMAT, writeable && !remote); 2379 WinEnableMenuItem((HWND)mp2, IDM_OPTIMIZE, writeable && !remote); 2380 WinEnableMenuItem((HWND)mp2, IDM_PARTITIONSMENU, !remote); 2381 2382 WinEnableMenuItem((HWND)mp2, IDM_DETACH, remote); 2383 2384 WinEnableMenuItem((HWND)mp2, IDM_EJECT, removable); 2385 2386 WinEnableMenuItem((HWND)mp2, IDM_LOCK, removable); 2387 WinEnableMenuItem((HWND)mp2, IDM_UNLOCK, removable); 2388 2389 WinEnableMenuItem((HWND)mp2, IDM_DELETE, !underenv && writeable); 2390 WinEnableMenuItem((HWND)mp2, IDM_PERMDELETE, !underenv && writeable); 2391 WinEnableMenuItem((HWND)mp2, IDM_DELETESUBMENU, !underenv && writeable); 2392 WinEnableMenuItem((HWND)mp2, IDM_MOVEMENU, !underenv && writeable); 2393 WinEnableMenuItem((HWND)mp2, IDM_RENAME, !underenv && writeable); 2394 2395 } 2396 } 2397 break; 2398 2399 case IDM_VIEWSMENU: 2400 WinCheckMenuItem((HWND)mp2, 2401 IDM_MINIICONS, 2402 ((dcd->flWindowAttr & CV_MINI) != 0)); 2403 WinEnableMenuItem((HWND)mp2, 2404 IDM_RESELECT, 2405 FALSE); 2406 break; 2407 2408 case IDM_COMMANDSMENU: 2409 SetupCommandMenu((HWND)mp2,hwnd); 2410 break; 2411 2412 case IDM_SORTSUBMENU: 2413 SetSortChecks((HWND)mp2,TreesortFlags); 2414 break; 2415 2416 case IDM_WINDOWSMENU: 2417 SetupWinList((HWND)mp2, 2418 (hwndMain) ? hwndMain : (HWND)0, 2419 dcd->hwndFrame); 2420 break; 2421 } 2422 dcd->hwndLastMenu = (HWND)mp2; 2423 } 2424 if(msg == WM_INITMENU) 2425 break; 2426 return 0; 2427 2428 case UM_COMMAND: 2429 if (!mp1) 2430 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT); 2431 else { 2432 if (!dcd) { 2433 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT); 2434 FreeListInfo((LISTINFO *)mp1); 2435 } 2436 else { 2437 if (!PostMsg(dcd->hwndObject,UM_COMMAND,mp1,mp2)) { 2438 Runtime_Error(pszSrcFile, __LINE__, "PostMsg"); 2439 FreeListInfo((LISTINFO *)mp1); 2440 } 2354 WinSendMsg(hwnd, UM_OPENWINDOWFORME, MPFROMP(newpath), MPVOID); 2355 } 2356 break; 2357 2358 case IDM_HELP: 2359 if (hwndHelp) { 2360 if (!ParentIsDesktop(dcd->hwndFrame, dcd->hwndParent)) 2361 PostMsg(dcd->hwndParent, UM_COMMAND, mp1, mp2); 2441 2362 else 2442 return (MRESULT)TRUE; 2443 } 2444 } 2445 return 0; 2446 2447 case UM_LOADFILE: 2448 if(dcd && mp2) { 2449 2450 HWND ret; 2451 2452 ret = StartMLEEditor(dcd->hwndParent,(INT)mp1,(CHAR *)mp2, 2453 dcd->hwndFrame); 2454 if(mp2) 2455 free((CHAR *)mp2); 2456 return MRFROMLONG(ret); 2457 } 2458 return 0; 2459 2460 case UM_FIXCNRMLE: 2461 case UM_FIXEDITNAME: 2462 return CommonCnrProc(hwnd,msg,mp1,mp2); 2463 2464 case UM_NOTIFY: 2465 if(mp2) 2466 Notify((CHAR *)mp2); 2467 return 0; 2468 2469 case UM_FILTER: 2470 if(dcd) { 2471 2472 BOOL tempsusp = dcd->suspendview; 2473 2474 if(mp1) { 2475 DosEnterCritSec(); 2476 SetMask((CHAR *)mp1,&dcd->mask); 2477 DosExitCritSec(); 2478 } 2479 dcd->suspendview = TRUE; 2480 dcd->mask.attrFile |= FILE_DIRECTORY; 2481 WinSendMsg(hwnd,CM_FILTER,MPFROMP(Filter),MPFROMP(&dcd->mask)); 2482 dcd->suspendview = tempsusp; 2483 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID); 2484 } 2485 return 0; 2486 2487 case UM_DRIVECMD: 2488 if(mp1) 2489 ShowTreeRec(hwnd,(CHAR *)mp1,FALSE,TRUE); 2490 return 0; 2491 2492 case WM_APPTERMINATENOTIFY: 2493 { 2494 APPNOTIFY *info; 2495 PCNRITEM pci; 2496 CHAR s[] = " :\\"; 2497 2498 if(!mp2) { 2499 if(hwndMain) 2500 PostMsg(hwndMain, 2501 UM_BUILDDRIVEBAR, 2502 MPVOID, 2503 MPVOID); 2504 } 2505 info = apphead; 2506 while(info) { 2507 if(info->happ == (HAPP)mp1) { 2508 *s = info->device; 2509 pci = FindCnrRecord(hwnd, 2510 s, 2511 NULL, 2512 FALSE, 2513 FALSE, 2514 TRUE); 2515 if(pci && (INT)pci != -1) { 2516 driveserial[info->device - 'A'] = -1; 2517 DriveFlagsOne(info->device - 'A'); 2518 if(driveflags[info->device - 'A'] & 2519 (DRIVE_INVALID | DRIVE_IGNORE)) 2520 WinSendMsg(hwnd, 2521 CM_REMOVERECORD, 2522 MPFROMP(&pci), 2523 MPFROM2SHORT(1,CMA_FREE)); 2524 else 2525 Flesh(hwnd,pci); 2526 } 2527 if(info->prev) 2528 info->prev->next = info->next; 2529 if(info->next) 2530 info->next->prev = info->prev; 2531 if(apphead == info) 2532 apphead = info->next; 2533 if(apptail == info) 2534 apptail = info->prev; 2535 free(info); 2536 break; 2537 } 2538 info = info->next; 2539 } 2540 } 2541 break; 2542 2543 case WM_COMMAND: 2544 DosError(FERR_DISABLEHARDERR); 2545 if(dcd) { 2546 if(SwitchCommand(dcd->hwndLastMenu, 2547 SHORT1FROMMP(mp1))) 2548 return 0; 2549 switch(SHORT1FROMMP(mp1)) { 2550 case IDM_SETTARGET: 2551 SetTargetDir(hwnd,FALSE); 2552 break; 2553 2554 case IDM_DETACH: 2555 { 2556 CHAR d[3] = " :"; 2557 PCNRITEM pci; 2558 PROGDETAILS pgd; 2559 CHAR params[368],*p; 2560 HAPP happ; 2561 2562 2563 pci = (PCNRITEM)CurrentRecord(hwnd); 2564 if(pci && (INT)pci != -1 && isalpha(*pci->szFileName)) { 2565 *d = toupper(*pci->szFileName); 2566 p = GetCmdSpec(FALSE); 2567 memset(&pgd,0,sizeof(pgd)); 2568 pgd.Length = sizeof(pgd); 2569 pgd.progt.progc = PROG_WINDOWABLEVIO; 2570 pgd.progt.fbVisible = SHE_VISIBLE; 2571 pgd.pszTitle = GetPString(IDS_DETACHREQUESTTEXT); 2572 pgd.pszExecutable = p; 2573 pgd.pszParameters = params; 2574 pgd.pszStartupDir = NULL; 2575 pgd.pszIcon = NULL; 2576 pgd.pszEnvironment = NULL; 2577 pgd.swpInitial.hwndInsertBehind = HWND_TOP; 2578 pgd.swpInitial.hwnd = hwnd; 2579 pgd.swpInitial.fl = SWP_SHOW | SWP_ACTIVATE; 2580 sprintf(params,"/C NET USE %s /D",d); 2581 happ = WinStartApp(hwnd,&pgd,pgd.pszParameters, 2582 NULL,SAF_MAXIMIZED); 2583 if (!happ) { 2584 saymsg(MB_CANCEL | MB_ICONEXCLAMATION,hwnd, 2585 GetPString(IDS_ERRORTEXT), 2586 GetPString(IDS_CANTSTARTTEXT), 2587 p,params); 2588 } 2589 else { 2590 APPNOTIFY *info; 2591 2592 info = xmallocz(sizeof(APPNOTIFY), pszSrcFile, __LINE__); 2593 if (info) { 2594 info->happ = happ; 2595 info->device = *d; 2596 if (!apphead) 2597 apphead = info; 2598 else { 2599 apptail->next = info; 2600 info->prev = apptail; 2601 } 2602 apptail = info; 2603 } 2604 } 2605 } 2606 } 2607 break; 2608 2609 case IDM_REMAP: 2610 WinDlgBox(HWND_DESKTOP,hwnd,RemapDlgProc, 2611 FM3ModHandle,MAP_FRAME,NULL); 2612 break; 2613 2614 case IDM_CONTEXTMENU: 2615 { 2616 PCNRITEM pci; 2617 2618 pci = (PCNRITEM)CurrentRecord(hwnd); 2619 PostMsg(hwnd,WM_CONTROL,MPFROM2SHORT(DIR_CNR,CN_CONTEXTMENU), 2620 MPFROMP(pci)); 2621 } 2622 break; 2623 2624 case IDM_FINDINTREE: 2625 { 2626 CHAR dir[CCHMAXPATH]; 2627 PCNRITEM pci; 2628 2629 pci = (PCNRITEM)CurrentRecord(hwnd); 2630 if(pci && (INT)pci != -1) { 2631 strcpy(dir,pci->szFileName); 2632 MakeValidDir(dir); 2633 } 2634 else 2635 save_dir2(dir); 2636 if(WinDlgBox(HWND_DESKTOP,dcd->hwndParent, 2637 WalkAllDlgProc, 2638 FM3ModHandle,WALK_FRAME, 2639 MPFROMP(dir)) && *dir) 2640 WinSendMsg(hwnd,UM_SHOWME,MPFROMP(dir),MPFROMLONG(1L)); 2641 } 2642 break; 2643 2644 case IDM_BEGINEDIT: 2645 OpenEdit(hwnd); 2646 break; 2647 2648 case IDM_ENDEDIT: 2649 WinSendMsg(hwnd, 2650 CM_CLOSEEDIT, 2651 MPVOID, 2652 MPVOID); 2653 break; 2654 2655 case IDM_FILTER: 2656 { 2657 BOOL empty = FALSE; 2658 PCNRITEM pci; 2659 2660 pci = (PCNRITEM)CurrentRecord(hwnd); 2661 if(!*dcd->mask.szMask) 2662 empty = TRUE; 2663 dcd->mask.fIsTree = TRUE; 2664 *dcd->mask.prompt = 0; 2665 if(pci && (INT)pci != -1) 2666 dcd->mask.fFilesIncluded = ((driveflags[toupper(*pci->szFileName) - 'A'] & 2667 DRIVE_INCLUDEFILES) != 0); 2668 else 2669 dcd->mask.fFilesIncluded = FALSE; 2670 if(WinDlgBox(HWND_DESKTOP,hwnd,PickMaskDlgProc, 2671 FM3ModHandle,MSK_FRAME,MPFROMP(&dcd->mask))) 2672 WinSendMsg(hwnd,UM_FILTER,MPVOID,MPVOID); 2673 else if(empty) 2674 *dcd->mask.szMask = 0; 2675 PrfWriteProfileData(fmprof,appname,"TreeFilter",&dcd->mask, 2676 sizeof(MASK)); 2677 } 2678 break; 2679 2680 case IDM_SHOWSORT: 2681 QuickPopup(hwnd,dcd,CheckMenu(&TreeCnrMenu,TREECNR_POPUP), 2682 IDM_SORTSUBMENU); 2683 break; 2684 2685 case IDM_SHOWSELECT: 2686 QuickPopup(hwnd,dcd,CheckMenu(&TreeCnrMenu,TREECNR_POPUP), 2687 IDM_SELECTSUBMENU); 2688 break; 2689 2690 case IDM_NOTEBOOK: 2691 if(!ParentIsDesktop(dcd->hwndParent,dcd->hwndParent)) 2692 PostMsg(dcd->hwndParent,msg,mp1,mp2); 2693 else 2694 WinDlgBox(HWND_DESKTOP,hwnd,CfgDlgProc,FM3ModHandle, 2695 CFG_FRAME,(PVOID)"Tree"); 2696 break; 2697 2698 case IDM_WALKDIR: 2699 case IDM_OPENWALK: 2700 { 2701 CHAR newpath[CCHMAXPATH]; 2702 PCNRITEM pci; 2703 2704 pci = (PCNRITEM)CurrentRecord(hwnd); 2705 if(pci && (INT)pci != -1) { 2706 strcpy(newpath,pci->szFileName); 2707 MakeValidDir(newpath); 2708 } 2709 else 2710 save_dir2(newpath); 2711 if(!WinDlgBox(HWND_DESKTOP,dcd->hwndParent,WalkAllDlgProc, 2712 FM3ModHandle,WALK_FRAME, 2713 MPFROMP(newpath)) || !*newpath) 2714 break; 2715 WinSendMsg(hwnd,UM_OPENWINDOWFORME,MPFROMP(newpath),MPVOID); 2716 } 2717 break; 2718 2719 case IDM_HELP: 2720 if(hwndHelp) { 2721 if(!ParentIsDesktop(dcd->hwndFrame,dcd->hwndParent)) 2722 PostMsg(dcd->hwndParent,UM_COMMAND,mp1,mp2); 2723 else 2724 WinSendMsg(hwndHelp,HM_HELP_CONTENTS,MPVOID,MPVOID); 2725 } 2726 break; 2727 2728 case IDM_PARTITION: 2729 runemf2(SEPARATE | WINDOWED,HWND_DESKTOP,NULL,NULL, 2730 "%s","MINILVM.EXE"); 2731 break; 2732 2733 case IDM_PARTITIONDF: 2734 runemf2(SEPARATE | WINDOWED,HWND_DESKTOP,NULL,NULL, 2735 "%s","DFSOS2.EXE"); 2736 break; 2737 2738 case IDM_PARTITIONLVMG: 2739 runemf2(SEPARATE | WINDOWED,HWND_DESKTOP,NULL,NULL, 2740 "%s","LVMGUI.CMD"); 2741 break; 2742 2743 case IDM_PARTITIONFD: 2744 runemf2(SEPARATE | WINDOWED,HWND_DESKTOP,NULL,NULL, 2745 "%s","FDISKPM.EXE"); 2746 break; 2747 2748 case IDM_SORTNAME: 2749 case IDM_SORTFILENAME: 2750 case IDM_SORTSIZE: 2751 case IDM_SORTEASIZE: 2752 case IDM_SORTFIRST: 2753 case IDM_SORTLAST: 2754 case IDM_SORTLWDATE: 2755 case IDM_SORTLADATE: 2756 case IDM_SORTCRDATE: 2757 TreesortFlags &= (SORT_REVERSE | SORT_DIRSFIRST | SORT_DIRSLAST); 2758 case IDM_SORTDIRSFIRST: 2759 case IDM_SORTDIRSLAST: 2760 case IDM_SORTREVERSE: 2761 switch(SHORT1FROMMP(mp1)) { 2762 case IDM_SORTFILENAME: 2763 TreesortFlags |= SORT_FILENAME; 2764 break; 2765 case IDM_SORTSIZE: 2766 TreesortFlags |= SORT_SIZE; 2767 break; 2768 case IDM_SORTEASIZE: 2769 TreesortFlags |= SORT_EASIZE; 2770 break; 2771 case IDM_SORTFIRST: 2772 TreesortFlags |= SORT_FIRSTEXTENSION; 2773 break; 2774 case IDM_SORTLAST: 2775 TreesortFlags |= SORT_LASTEXTENSION; 2776 break; 2777 case IDM_SORTLWDATE: 2778 TreesortFlags |= SORT_LWDATE; 2779 break; 2780 case IDM_SORTLADATE: 2781 TreesortFlags |= SORT_LADATE; 2782 break; 2783 case IDM_SORTCRDATE: 2784 TreesortFlags |= SORT_CRDATE; 2785 break; 2786 case IDM_SORTDIRSFIRST: 2787 if(TreesortFlags & SORT_DIRSFIRST) 2788 TreesortFlags &= (~SORT_DIRSFIRST); 2789 else { 2790 TreesortFlags |= SORT_DIRSFIRST; 2791 TreesortFlags &= (~SORT_DIRSLAST); 2792 } 2793 break; 2794 case IDM_SORTDIRSLAST: 2795 if(TreesortFlags & SORT_DIRSLAST) 2796 TreesortFlags &= (~SORT_DIRSLAST); 2797 else { 2798 TreesortFlags |= SORT_DIRSLAST; 2799 TreesortFlags &= (~SORT_DIRSFIRST); 2800 } 2801 break; 2802 case IDM_SORTREVERSE: 2803 if(TreesortFlags & SORT_REVERSE) 2804 TreesortFlags &= (~SORT_REVERSE); 2805 else 2806 TreesortFlags |= SORT_REVERSE; 2807 break; 2808 } 2809 PrfWriteProfileData(fmprof,appname,"TreeSort",&TreesortFlags, 2810 sizeof(INT)); 2811 WinSendMsg(hwnd,CM_SORTRECORD,MPFROMP(SortTreeCnr),MPVOID); 2812 break; 2813 2814 case IDM_COLLECT: 2815 if(!Collector) { 2816 2817 HWND hwndC; 2818 SWP swp; 2819 2820 if(!ParentIsDesktop(hwnd,dcd->hwndParent) && 2821 !fAutoTile && 2822 (!fExternalCollector && 2823 *(ULONG *)realappname == FM3UL)) 2824 GetNextWindowPos(dcd->hwndParent, 2825 &swp, 2826 NULL, 2827 NULL); 2828 hwndC = StartCollector((fExternalCollector || 2829 *(ULONG *)realappname != FM3UL) ? 2830 HWND_DESKTOP : 2831 dcd->hwndParent, 2832 4); 2833 if(hwndC) { 2834 if(!ParentIsDesktop(hwnd, 2835 dcd->hwndParent) && 2836 !fAutoTile && 2837 (!fExternalCollector && 2838 *(ULONG *)realappname == FM3UL)) 2839 WinSetWindowPos(hwndC, 2840 HWND_TOP, 2841 swp.x, 2842 swp.y, 2843 swp.cx, 2844 swp.cy, 2845 SWP_MOVE | SWP_SIZE | 2846 SWP_SHOW | SWP_ZORDER); 2847 else if(!ParentIsDesktop(hwnd, 2848 dcd->hwndParent) && 2849 fAutoTile && 2850 *(ULONG *)realappname == FM3UL) 2851 TileChildren(dcd->hwndParent, 2852 TRUE); 2853 } 2363 WinSendMsg(hwndHelp, HM_HELP_CONTENTS, MPVOID, MPVOID); 2364 } 2365 break; 2366 2367 case IDM_PARTITION: 2368 runemf2(SEPARATE | WINDOWED, HWND_DESKTOP, NULL, NULL, 2369 "%s", "MINILVM.EXE"); 2370 break; 2371 2372 case IDM_PARTITIONDF: 2373 runemf2(SEPARATE | WINDOWED, HWND_DESKTOP, NULL, NULL, 2374 "%s", "DFSOS2.EXE"); 2375 break; 2376 2377 case IDM_PARTITIONLVMG: 2378 runemf2(SEPARATE | WINDOWED, HWND_DESKTOP, NULL, NULL, 2379 "%s", "LVMGUI.CMD"); 2380 break; 2381 2382 case IDM_PARTITIONFD: 2383 runemf2(SEPARATE | WINDOWED, HWND_DESKTOP, NULL, NULL, 2384 "%s", "FDISKPM.EXE"); 2385 break; 2386 2387 case IDM_SORTNAME: 2388 case IDM_SORTFILENAME: 2389 case IDM_SORTSIZE: 2390 case IDM_SORTEASIZE: 2391 case IDM_SORTFIRST: 2392 case IDM_SORTLAST: 2393 case IDM_SORTLWDATE: 2394 case IDM_SORTLADATE: 2395 case IDM_SORTCRDATE: 2396 TreesortFlags &= (SORT_REVERSE | SORT_DIRSFIRST | SORT_DIRSLAST); 2397 case IDM_SORTDIRSFIRST: 2398 case IDM_SORTDIRSLAST: 2399 case IDM_SORTREVERSE: 2400 switch (SHORT1FROMMP(mp1)) { 2401 case IDM_SORTFILENAME: 2402 TreesortFlags |= SORT_FILENAME; 2403 break; 2404 case IDM_SORTSIZE: 2405 TreesortFlags |= SORT_SIZE; 2406 break; 2407 case IDM_SORTEASIZE: 2408 TreesortFlags |= SORT_EASIZE; 2409 break; 2410 case IDM_SORTFIRST: 2411 TreesortFlags |= SORT_FIRSTEXTENSION; 2412 break; 2413 case IDM_SORTLAST: 2414 TreesortFlags |= SORT_LASTEXTENSION; 2415 break; 2416 case IDM_SORTLWDATE: 2417 TreesortFlags |= SORT_LWDATE; 2418 break; 2419 case IDM_SORTLADATE: 2420 TreesortFlags |= SORT_LADATE; 2421 break; 2422 case IDM_SORTCRDATE: 2423 TreesortFlags |= SORT_CRDATE; 2424 break; 2425 case IDM_SORTDIRSFIRST: 2426 if (TreesortFlags & SORT_DIRSFIRST) 2427 TreesortFlags &= (~SORT_DIRSFIRST); 2428 else { 2429 TreesortFlags |= SORT_DIRSFIRST; 2430 TreesortFlags &= (~SORT_DIRSLAST); 2431 } 2432 break; 2433 case IDM_SORTDIRSLAST: 2434 if (TreesortFlags & SORT_DIRSLAST) 2435 TreesortFlags &= (~SORT_DIRSLAST); 2436 else { 2437 TreesortFlags |= SORT_DIRSLAST; 2438 TreesortFlags &= (~SORT_DIRSFIRST); 2439 } 2440 break; 2441 case IDM_SORTREVERSE: 2442 if (TreesortFlags & SORT_REVERSE) 2443 TreesortFlags &= (~SORT_REVERSE); 2444 else 2445 TreesortFlags |= SORT_REVERSE; 2446 break; 2447 } 2448 PrfWriteProfileData(fmprof, appname, "TreeSort", &TreesortFlags, 2449 sizeof(INT)); 2450 WinSendMsg(hwnd, CM_SORTRECORD, MPFROMP(SortTreeCnr), MPVOID); 2451 break; 2452 2453 case IDM_COLLECT: 2454 if (!Collector) { 2455 2456 HWND hwndC; 2457 SWP swp; 2458 2459 if (!ParentIsDesktop(hwnd, dcd->hwndParent) && 2460 !fAutoTile && 2461 (!fExternalCollector && *(ULONG *) realappname == FM3UL)) 2462 GetNextWindowPos(dcd->hwndParent, &swp, NULL, NULL); 2463 hwndC = StartCollector((fExternalCollector || 2464 *(ULONG *) realappname != FM3UL) ? 2465 HWND_DESKTOP : dcd->hwndParent, 4); 2466 if (hwndC) { 2467 if (!ParentIsDesktop(hwnd, 2468 dcd->hwndParent) && 2469 !fAutoTile && 2470 (!fExternalCollector && *(ULONG *) realappname == FM3UL)) 2854 2471 WinSetWindowPos(hwndC, 2855 2472 HWND_TOP, 2856 0, 2857 0, 2858 0, 2859 0, 2860 SWP_ACTIVATE); 2861 DosSleep(250L); 2473 swp.x, 2474 swp.y, 2475 swp.cx, 2476 swp.cy, 2477 SWP_MOVE | SWP_SIZE | SWP_SHOW | SWP_ZORDER); 2478 else if (!ParentIsDesktop(hwnd, 2479 dcd->hwndParent) && 2480 fAutoTile && *(ULONG *) realappname == FM3UL) 2481 TileChildren(dcd->hwndParent, TRUE); 2482 } 2483 WinSetWindowPos(hwndC, HWND_TOP, 0, 0, 0, 0, SWP_ACTIVATE); 2484 DosSleep(250L); 2485 } 2486 else 2487 StartCollector(dcd->hwndParent, 4); 2488 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(IDM_COLLECTOR, 0), MPVOID); 2489 break; 2490 2491 case IDM_COLLECTOR: 2492 DosSleep(64L); 2493 { 2494 CHAR **list; 2495 2496 list = BuildList(hwnd); 2497 if (list) { 2498 if (Collector) { 2499 if (!PostMsg(Collector, WM_COMMAND, 2500 MPFROM2SHORT(IDM_COLLECTOR, 0), MPFROMP(list))) 2501 FreeList(list); 2862 2502 } 2863 2503 else 2864 StartCollector(dcd->hwndParent, 2865 4); 2866 PostMsg(hwnd, 2867 WM_COMMAND, 2868 MPFROM2SHORT(IDM_COLLECTOR,0), 2869 MPVOID); 2870 break; 2871 2872 case IDM_COLLECTOR: 2873 DosSleep(64L); 2874 { 2875 CHAR **list; 2876 2877 list = BuildList(hwnd); 2878 if(list) { 2879 if(Collector) { 2880 if(!PostMsg(Collector,WM_COMMAND, 2881 MPFROM2SHORT(IDM_COLLECTOR,0), 2882 MPFROMP(list))) 2883 FreeList(list); 2504 FreeList(list); 2505 } 2506 } 2507 break; 2508 2509 case IDM_COLLAPSEALL: 2510 WinSendMsg(hwnd, CM_COLLAPSETREE, MPVOID, MPVOID); 2511 break; 2512 2513 case IDM_COLLAPSE: 2514 case IDM_EXPAND: 2515 { 2516 PCNRITEM pci = NULL; 2517 2518 pci = (PCNRITEM) CurrentRecord(hwnd); 2519 if (pci && (INT) pci != -1) { 2520 if (pci->flags & RECFLAGS_UNDERENV) 2521 break; 2522 PostMsg(dcd->hwndObject, UM_EXPAND, mp1, MPFROMP(pci)); 2523 } 2524 } 2525 break; 2526 2527 case IDM_UPDATE: 2528 { 2529 PCNRITEM pci = NULL; 2530 2531 pci = (PCNRITEM) CurrentRecord(hwnd); 2532 if (pci && (INT) pci != -1) { 2533 if (pci->attrFile & FILE_DIRECTORY) { 2534 if (pci->flags & RECFLAGS_UNDERENV) 2535 break; 2536 UnFlesh(hwnd, pci); 2537 if (driveflags[toupper(*pci->szFileName) - 'A'] & 2538 (DRIVE_INVALID | DRIVE_NOPRESCAN)) { 2539 driveflags[toupper(*pci->szFileName) - 'A'] &= 2540 (DRIVE_IGNORE | DRIVE_NOPRESCAN | DRIVE_NOLOADICONS | 2541 DRIVE_NOLOADSUBJS | DRIVE_NOLOADLONGS); 2542 DriveFlagsOne(toupper(*pci->szFileName) - 'A'); 2543 if (driveflags[toupper(*pci->szFileName) - 'A'] & 2544 DRIVE_INVALID) 2545 pci->rc.hptrIcon = hptrDunno; 2546 else { 2547 if (driveflags[toupper(*pci->szFileName) - 'A'] & 2548 DRIVE_CDROM) 2549 pci->rc.hptrIcon = hptrCDROM; 2550 else 2551 pci->rc.hptrIcon = 2552 (driveflags[toupper(*pci->szFileName) - 'A'] & 2553 DRIVE_REMOVABLE) ? hptrRemovable 2554 : (driveflags[toupper(*pci->szFileName) - 'A'] & 2555 DRIVE_REMOTE) ? hptrRemote 2556 : (driveflags[toupper(*pci->szFileName) - 'A'] & 2557 DRIVE_ZIPSTREAM) ? hptrZipstrm : hptrDrive; 2884 2558 } 2885 else 2886 FreeList(list); 2559 WinSendMsg(hwnd, 2560 CM_INVALIDATERECORD, 2561 MPFROMP(&pci), 2562 MPFROM2SHORT(1, CMA_ERASE | CMA_REPOSITION)); 2563 if (hwndMain) 2564 PostMsg(hwndMain, UM_BUILDDRIVEBAR, MPVOID, MPVOID); 2887 2565 } 2888 } 2889 break; 2890 2891 case IDM_COLLAPSEALL: 2892 WinSendMsg(hwnd, 2893 CM_COLLAPSETREE, 2894 MPVOID, 2895 MPVOID); 2896 break; 2897 2898 case IDM_COLLAPSE: 2899 case IDM_EXPAND: 2900 { 2901 PCNRITEM pci = NULL; 2902 2903 pci = (PCNRITEM)CurrentRecord(hwnd); 2904 if(pci && (INT)pci != -1) { 2905 if(pci->flags & RECFLAGS_UNDERENV) 2906 break; 2907 PostMsg(dcd->hwndObject, 2908 UM_EXPAND, 2909 mp1, 2910 MPFROMP(pci)); 2566 if (! 2567 (driveflags[toupper(*pci->szFileName) - 'A'] & 2568 DRIVE_INVALID)) 2569 Flesh(hwnd, pci); 2570 } 2571 else { 2572 2573 } 2574 } 2575 } 2576 break; 2577 2578 case IDM_RESCAN: 2579 PostMsg(dcd->hwndObject, UM_RESCAN, MPVOID, MPVOID); 2580 break; 2581 2582 case IDM_RESORT: 2583 WinSendMsg(hwnd, CM_SORTRECORD, MPFROMP(SortTreeCnr), MPVOID); 2584 break; 2585 2586 case IDM_TEXT: 2587 case IDM_MINIICONS: 2588 { 2589 CNRINFO cnri; 2590 2591 memset(&cnri, 0, sizeof(CNRINFO)); 2592 cnri.cb = sizeof(CNRINFO); 2593 WinSendMsg(hwnd, 2594 CM_QUERYCNRINFO, 2595 MPFROMP(&cnri), MPFROMLONG(sizeof(CNRINFO))); 2596 if (SHORT1FROMMP(mp1) == IDM_MINIICONS) { 2597 if (cnri.flWindowAttr & CV_MINI) 2598 cnri.flWindowAttr &= (~CV_MINI); 2599 else 2600 cnri.flWindowAttr |= CV_MINI; 2601 } 2602 else { 2603 if (cnri.flWindowAttr & CV_TEXT) { 2604 cnri.flWindowAttr &= (~CV_TEXT); 2605 cnri.flWindowAttr |= CV_ICON; 2606 } 2607 else { 2608 cnri.flWindowAttr &= (~CV_ICON); 2609 cnri.flWindowAttr |= CV_TEXT; 2610 } 2611 } 2612 dcd->flWindowAttr = cnri.flWindowAttr; 2613 PrfWriteProfileData(fmprof, 2614 appname, 2615 "TreeflWindowAttr", 2616 &cnri.flWindowAttr, sizeof(ULONG)); 2617 WinSendMsg(hwnd, 2618 CM_SETCNRINFO, 2619 MPFROMP(&cnri), 2620 MPFROMLONG(CMA_FLWINDOWATTR | CMA_TREEICON | 2621 CMA_SLTREEBITMAPORICON)); 2622 } 2623 break; 2624 2625 case IDM_SIZES: 2626 case IDM_DRVFLAGS: 2627 case IDM_SHOWALLFILES: 2628 case IDM_UNDELETE: 2629 case IDM_OPTIMIZE: 2630 case IDM_CHKDSK: 2631 case IDM_FORMAT: 2632 case IDM_MKDIR: 2633 case IDM_LOCK: 2634 case IDM_UNLOCK: 2635 case IDM_EJECT: 2636 case IDM_CLOSETRAY: 2637 { 2638 PCNRITEM pci; 2639 2640 pci = (PCNRITEM) CurrentRecord(hwnd); 2641 if (pci && (INT) pci != -1) 2642 CommonDriveCmd(hwnd, pci->szFileName, SHORT1FROMMP(mp1)); 2643 } 2644 break; 2645 2646 case IDM_SAVETOLIST: 2647 WinDlgBox(HWND_DESKTOP, 2648 hwnd, 2649 SaveListDlgProc, FM3ModHandle, SAV_FRAME, MPFROMP(&hwnd)); 2650 break; 2651 2652 case IDM_DELETE: 2653 case IDM_PERMDELETE: 2654 case IDM_MOVE: 2655 case IDM_WPSMOVE: 2656 case IDM_WILDMOVE: 2657 case IDM_RENAME: 2658 { 2659 PCNRITEM pci; 2660 2661 pci = (PCNRITEM) CurrentRecord(hwnd); 2662 if (pci && (INT) pci != -1) { 2663 if (pci->flags & RECFLAGS_UNDERENV) 2664 break; 2665 } 2666 } 2667 /* else intentional fallthru */ 2668 case IDM_ATTRS: 2669 case IDM_INFO: 2670 case IDM_COPY: 2671 case IDM_WPSCOPY: 2672 case IDM_WILDCOPY: 2673 case IDM_DOITYOURSELF: 2674 case IDM_OPENWINDOW: 2675 case IDM_OPENSETTINGS: 2676 case IDM_OPENDEFAULT: 2677 case IDM_OPENICON: 2678 case IDM_OPENDETAILS: 2679 case IDM_OPENTREE: 2680 case IDM_SHADOW: 2681 case IDM_SHADOW2: 2682 case IDM_COMPARE: 2683 case IDM_VIEW: 2684 case IDM_VIEWTEXT: 2685 case IDM_VIEWBINARY: 2686 case IDM_EDIT: 2687 case IDM_EDITTEXT: 2688 case IDM_EDITBINARY: 2689 case IDM_EAS: 2690 case IDM_SUBJECT: 2691 case IDM_APPENDTOCLIP: 2692 case IDM_SAVETOCLIP: 2693 case IDM_ARCHIVE: 2694 case IDM_MCIPLAY: 2695 case IDM_UUDECODE: 2696 { 2697 LISTINFO *li; 2698 ULONG action = UM_ACTION; 2699 2700 li = xmallocz(sizeof(LISTINFO), pszSrcFile, __LINE__); 2701 if (li) { 2702 li->type = SHORT1FROMMP(mp1); 2703 li->hwnd = hwnd; 2704 li->list = BuildList(hwnd); 2705 if (!li->list || !li->list[0]) { 2706 free(li); 2707 break; 2708 } 2709 if (IsRoot(li->list[0])) { 2710 switch (SHORT1FROMMP(mp1)) { 2711 case IDM_MOVE: 2712 case IDM_COPY: 2713 case IDM_WILDCOPY: 2714 case IDM_WILDMOVE: 2715 case IDM_WPSMOVE: 2716 case IDM_WPSCOPY: 2717 case IDM_RENAME: 2718 case IDM_DELETE: 2719 case IDM_PERMDELETE: 2720 mp1 = MPFROM2SHORT(IDM_INFO, SHORT2FROMMP(mp1)); 2721 li->type = IDM_INFO; 2722 break; 2911 2723 } 2912 2724 } 2913 break; 2914 2915 case IDM_UPDATE: 2916 { 2917 PCNRITEM pci = NULL; 2918 2919 pci = (PCNRITEM)CurrentRecord(hwnd); 2920 if(pci && (INT)pci != -1) { 2921 if(pci->attrFile & FILE_DIRECTORY) { 2922 if(pci->flags & RECFLAGS_UNDERENV) 2923 break; 2924 UnFlesh(hwnd,pci); 2925 if(driveflags[toupper(*pci->szFileName) - 'A'] & (DRIVE_INVALID | 2926 DRIVE_NOPRESCAN)) { 2927 driveflags[toupper(*pci->szFileName) - 'A'] &= (DRIVE_IGNORE | 2928 DRIVE_NOPRESCAN | DRIVE_NOLOADICONS | 2929 DRIVE_NOLOADSUBJS | DRIVE_NOLOADLONGS); 2930 DriveFlagsOne(toupper(*pci->szFileName) - 'A'); 2931 if(driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_INVALID) 2932 pci->rc.hptrIcon = hptrDunno; 2933 else { 2934 if(driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_CDROM) 2935 pci->rc.hptrIcon = hptrCDROM; 2936 else 2937 pci->rc.hptrIcon = (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_REMOVABLE) ? 2938 hptrRemovable : 2939 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_REMOTE) ? 2940 hptrRemote : 2941 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_ZIPSTREAM) ? 2942 hptrZipstrm : hptrDrive; 2943 } 2944 WinSendMsg(hwnd, 2945 CM_INVALIDATERECORD, 2946 MPFROMP(&pci), 2947 MPFROM2SHORT(1,CMA_ERASE | CMA_REPOSITION)); 2948 if(hwndMain) 2949 PostMsg(hwndMain, 2950 UM_BUILDDRIVEBAR, 2951 MPVOID, 2952 MPVOID); 2953 } 2954 if(!(driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_INVALID)) 2955 Flesh(hwnd,pci); 2956 } 2957 else { 2958 2959 } 2960 } 2961 } 2962 break; 2963 2964 case IDM_RESCAN: 2965 PostMsg(dcd->hwndObject, 2966 UM_RESCAN, 2967 MPVOID, 2968 MPVOID); 2969 break; 2970 2971 case IDM_RESORT: 2972 WinSendMsg(hwnd, 2973 CM_SORTRECORD, 2974 MPFROMP(SortTreeCnr), 2975 MPVOID); 2976 break; 2977 2978 case IDM_TEXT: 2979 case IDM_MINIICONS: 2980 { 2981 CNRINFO cnri; 2982 2983 memset(&cnri,0,sizeof(CNRINFO)); 2984 cnri.cb = sizeof(CNRINFO); 2985 WinSendMsg(hwnd, 2986 CM_QUERYCNRINFO, 2987 MPFROMP(&cnri), 2988 MPFROMLONG(sizeof(CNRINFO))); 2989 if(SHORT1FROMMP(mp1) == IDM_MINIICONS) { 2990 if(cnri.flWindowAttr & CV_MINI) 2991 cnri.flWindowAttr &= (~CV_MINI); 2992 else 2993 cnri.flWindowAttr |= CV_MINI; 2994 } 2995 else { 2996 if(cnri.flWindowAttr & CV_TEXT) { 2997 cnri.flWindowAttr &= (~CV_TEXT); 2998 cnri.flWindowAttr |= CV_ICON; 2999 } 3000 else { 3001 cnri.flWindowAttr &= (~CV_ICON); 3002 cnri.flWindowAttr |= CV_TEXT; 3003 } 3004 } 3005 dcd->flWindowAttr = cnri.flWindowAttr; 3006 PrfWriteProfileData(fmprof, 3007 appname, 3008 "TreeflWindowAttr", 3009 &cnri.flWindowAttr, 3010 sizeof(ULONG)); 3011 WinSendMsg(hwnd, 3012 CM_SETCNRINFO, 3013 MPFROMP(&cnri), 3014 MPFROMLONG(CMA_FLWINDOWATTR | CMA_TREEICON | 3015 CMA_SLTREEBITMAPORICON)); 3016 } 3017 break; 3018 3019 case IDM_SIZES: 3020 case IDM_DRVFLAGS: 3021 case IDM_SHOWALLFILES: 3022 case IDM_UNDELETE: 3023 case IDM_OPTIMIZE: 3024 case IDM_CHKDSK: 3025 case IDM_FORMAT: 3026 case IDM_MKDIR: 3027 case IDM_LOCK: 3028 case IDM_UNLOCK: 3029 case IDM_EJECT: 3030 case IDM_CLOSETRAY: 3031 { 3032 PCNRITEM pci; 3033 3034 pci = (PCNRITEM)CurrentRecord(hwnd); 3035 if(pci && (INT)pci != -1) 3036 CommonDriveCmd(hwnd, 3037 pci->szFileName, 3038 SHORT1FROMMP(mp1)); 3039 } 3040 break; 3041 3042 case IDM_SAVETOLIST: 3043 WinDlgBox(HWND_DESKTOP, 3044 hwnd, 3045 SaveListDlgProc, 3046 FM3ModHandle, 3047 SAV_FRAME, 3048 MPFROMP(&hwnd)); 3049 break; 3050 3051 case IDM_DELETE: 3052 case IDM_PERMDELETE: 3053 case IDM_MOVE: 3054 case IDM_WPSMOVE: 3055 case IDM_WILDMOVE: 3056 case IDM_RENAME: 3057 { 3058 PCNRITEM pci; 3059 3060 pci = (PCNRITEM)CurrentRecord(hwnd); 3061 if(pci && (INT)pci != -1) { 3062 if(pci->flags & RECFLAGS_UNDERENV) 3063 break; 3064 } 3065 } 3066 /* else intentional fallthru */ 3067 case IDM_ATTRS: 3068 case IDM_INFO: 3069 case IDM_COPY: 3070 case IDM_WPSCOPY: 3071 case IDM_WILDCOPY: 3072 case IDM_DOITYOURSELF: 3073 case IDM_OPENWINDOW: 3074 case IDM_OPENSETTINGS: 3075 case IDM_OPENDEFAULT: 3076 case IDM_OPENICON: 3077 case IDM_OPENDETAILS: 3078 case IDM_OPENTREE: 3079 case IDM_SHADOW: 3080 case IDM_SHADOW2: 3081 case IDM_COMPARE: 3082 case IDM_VIEW: 3083 case IDM_VIEWTEXT: 3084 case IDM_VIEWBINARY: 3085 case IDM_EDIT: 3086 case IDM_EDITTEXT: 3087 case IDM_EDITBINARY: 3088 case IDM_EAS: 3089 case IDM_SUBJECT: 3090 case IDM_APPENDTOCLIP: 3091 case IDM_SAVETOCLIP: 3092 case IDM_ARCHIVE: 3093 case IDM_MCIPLAY: 3094 case IDM_UUDECODE: 3095 { 3096 LISTINFO *li; 3097 ULONG action = UM_ACTION; 3098 3099 li = xmallocz(sizeof(LISTINFO),pszSrcFile,__LINE__); 3100 if (li) { 3101 li->type = SHORT1FROMMP(mp1); 3102 li->hwnd = hwnd; 3103 li->list = BuildList(hwnd); 3104 if(!li->list || !li->list[0]) { 3105 free(li); 3106 break; 3107 } 3108 if(IsRoot(li->list[0])) { 3109 switch(SHORT1FROMMP(mp1)) { 3110 case IDM_MOVE: 3111 case IDM_COPY: 3112 case IDM_WILDCOPY: 3113 case IDM_WILDMOVE: 3114 case IDM_WPSMOVE: 3115 case IDM_WPSCOPY: 3116 case IDM_RENAME: 3117 case IDM_DELETE: 3118 case IDM_PERMDELETE: 3119 mp1 = MPFROM2SHORT(IDM_INFO,SHORT2FROMMP(mp1)); 3120 li->type = IDM_INFO; 3121 break; 3122 } 3123 } 3124 switch(SHORT1FROMMP(mp1)) { 3125 case IDM_APPENDTOCLIP: 3126 case IDM_SAVETOCLIP: 3127 case IDM_ARCHIVE: 3128 case IDM_DELETE: 3129 case IDM_PERMDELETE: 3130 case IDM_ATTRS: 3131 case IDM_SHADOW: 3132 case IDM_SHADOW2: 3133 case IDM_DOITYOURSELF: 3134 case IDM_EAS: 3135 case IDM_VIEW: 3136 case IDM_VIEWTEXT: 3137 case IDM_VIEWBINARY: 3138 case IDM_EDIT: 3139 case IDM_EDITTEXT: 3140 case IDM_EDITBINARY: 3141 case IDM_MCIPLAY: 3142 action = UM_MASSACTION; 3143 break; 3144 } 3145 if(SHORT1FROMMP(mp1) == IDM_SHADOW || 3146 SHORT1FROMMP(mp1) == IDM_SHADOW2) 3147 *li->targetpath = 0; 3148 if(!PostMsg(dcd->hwndObject,action,MPFROMP(li),MPVOID)) { 3149 Runtime_Error(pszSrcFile, __LINE__, "PostMsg"); 3150 FreeListInfo(li); 3151 } 3152 } 3153 } 3154 break; 3155 3156 default: 3157 if(SHORT1FROMMP(mp1) >= IDM_COMMANDSTART && 3158 SHORT1FROMMP(mp1) < IDM_QUICKTOOLSTART) { 3159 3160 INT x; 3161 3162 if(!cmdloaded) 3163 load_commands(); 3164 x = SHORT1FROMMP(mp1) - IDM_COMMANDSTART; 3165 if(x >= 0) { 3166 x++; 3167 RunCommand(hwnd,x); 3168 if(fUnHilite) 3169 UnHilite(hwnd,TRUE,&dcd->lastselection); 3170 } 3171 } 3172 break; 3173 } 3174 } 3175 return 0; 3176 3177 case WM_SAVEAPPLICATION: 3178 if(dcd && !ParentIsDesktop(hwnd,dcd->hwndParent)) { 3179 3180 SWP swp,swpP; 3181 INT ratio; 3182 3183 WinQueryWindowPos(dcd->hwndFrame,&swp); 3184 if(!(swp.fl & (SWP_MINIMIZE | SWP_MAXIMIZE | SWP_HIDE))) { 3185 WinQueryWindowPos(dcd->hwndParent,&swpP); 3186 ratio = (swpP.cx * 100) / swp.cx; 3187 if(ratio > 0) 3188 PrfWriteProfileData(fmprof,appname,"TreeWindowRatio", 3189 &ratio,sizeof(INT)); 3190 } 3191 } 3192 else if(dcd && ParentIsDesktop(hwnd,dcd->hwndParent)) { 3193 3194 SWP swp; 3195 3196 WinQueryWindowPos(dcd->hwndFrame,&swp); 3197 if(!(swp.fl & (SWP_HIDE | SWP_MINIMIZE | SWP_MAXIMIZE))) 3198 WinStoreWindowPos(FM2Str,"VTreeWindowPos",dcd->hwndFrame); 3199 } 3200 break; 3201 3202 case UM_MINIMIZE: 3203 if(dcd && hwndMain) { 3204 fOkayMinimize = TRUE; 3205 if(dcd->hwndObject && !fDummy) { 3206 DosSleep(100L); 3207 if(!fDummy) { 3208 fOkayMinimize = FALSE; 3209 WinSetWindowPos(((hwndMain) ? WinQueryWindow(hwndMain,QW_PARENT) : 3210 dcd->hwndFrame),HWND_TOP,0,0,0,0,SWP_MINIMIZE | 3211 SWP_DEACTIVATE); 3212 } 3213 } 3214 } 3215 return 0; 3216 3217 case UM_MAXIMIZE: 3218 if(dcd || hwndMain) 3219 WinSetWindowPos(((hwndMain) ? WinQueryWindow(hwndMain,QW_PARENT) : 3220 dcd->hwndFrame),HWND_TOP,0,0,0,0,SWP_MAXIMIZE | 3221 SWP_SHOW); 3222 return 0; 3223 3224 case UM_CLOSE: 3225 { 3226 HWND hwndParent = WinQueryWindow(WinQueryWindow(WinQueryWindow(hwnd, 3227 QW_PARENT),QW_PARENT),QW_PARENT); 3228 3229 if(!mp1) { 3230 if(!PostMsg((HWND)0,WM_QUIT,MPVOID,MPVOID)) 3231 WinSendMsg((HWND)0,WM_QUIT,MPVOID,MPVOID); 3232 if(hwndParent && !ParentIsDesktop(hwnd,hwndParent)) 3233 WinDestroyWindow(hwndParent); 3234 } 3235 else 3236 WinDestroyWindow(WinQueryWindow(WinQueryWindow(hwnd,QW_PARENT), 3237 QW_PARENT)); 3238 } 3239 return 0; 3240 3241 case WM_CLOSE: 3242 WinSendMsg(hwnd,WM_SAVEAPPLICATION,MPVOID,MPVOID); 3243 if(dcd) 3244 dcd->stopflag++; 3245 if(dcd && dcd->hwndObject) { 3246 /* kill object window */ 3247 if(!PostMsg(dcd->hwndObject,WM_CLOSE,MPVOID,MPVOID)) 3248 WinSendMsg(dcd->hwndObject,WM_CLOSE,MPVOID,MPVOID); 2725 switch (SHORT1FROMMP(mp1)) { 2726 case IDM_APPENDTOCLIP: 2727 case IDM_SAVETOCLIP: 2728 case IDM_ARCHIVE: 2729 case IDM_DELETE: 2730 case IDM_PERMDELETE: 2731 case IDM_ATTRS: 2732 case IDM_SHADOW: 2733 case IDM_SHADOW2: 2734 case IDM_DOITYOURSELF: 2735 case IDM_EAS: 2736 case IDM_VIEW: 2737 case IDM_VIEWTEXT: 2738 case IDM_VIEWBINARY: 2739 case IDM_EDIT: 2740 case IDM_EDITTEXT: 2741 case IDM_EDITBINARY: 2742 case IDM_MCIPLAY: 2743 action = UM_MASSACTION; 2744 break; 2745 } 2746 if (SHORT1FROMMP(mp1) == IDM_SHADOW || 2747 SHORT1FROMMP(mp1) == IDM_SHADOW2) 2748 *li->targetpath = 0; 2749 if (!PostMsg(dcd->hwndObject, action, MPFROMP(li), MPVOID)) { 2750 Runtime_Error(pszSrcFile, __LINE__, "PostMsg"); 2751 FreeListInfo(li); 2752 } 2753 } 2754 } 2755 break; 2756 2757 default: 2758 if (SHORT1FROMMP(mp1) >= IDM_COMMANDSTART && 2759 SHORT1FROMMP(mp1) < IDM_QUICKTOOLSTART) { 2760 2761 INT x; 2762 2763 if (!cmdloaded) 2764 load_commands(); 2765 x = SHORT1FROMMP(mp1) - IDM_COMMANDSTART; 2766 if (x >= 0) { 2767 x++; 2768 RunCommand(hwnd, x); 2769 if (fUnHilite) 2770 UnHilite(hwnd, TRUE, &dcd->lastselection); 2771 } 2772 } 2773 break; 2774 } 2775 } 2776 return 0; 2777 2778 case WM_SAVEAPPLICATION: 2779 if (dcd && !ParentIsDesktop(hwnd, dcd->hwndParent)) { 2780 2781 SWP swp, swpP; 2782 INT ratio; 2783 2784 WinQueryWindowPos(dcd->hwndFrame, &swp); 2785 if (!(swp.fl & (SWP_MINIMIZE | SWP_MAXIMIZE | SWP_HIDE))) { 2786 WinQueryWindowPos(dcd->hwndParent, &swpP); 2787 ratio = (swpP.cx * 100) / swp.cx; 2788 if (ratio > 0) 2789 PrfWriteProfileData(fmprof, appname, "TreeWindowRatio", 2790 &ratio, sizeof(INT)); 2791 } 2792 } 2793 else if (dcd && ParentIsDesktop(hwnd, dcd->hwndParent)) { 2794 2795 SWP swp; 2796 2797 WinQueryWindowPos(dcd->hwndFrame, &swp); 2798 if (!(swp.fl & (SWP_HIDE | SWP_MINIMIZE | SWP_MAXIMIZE))) 2799 WinStoreWindowPos(FM2Str, "VTreeWindowPos", dcd->hwndFrame); 2800 } 2801 break; 2802 2803 case UM_MINIMIZE: 2804 if (dcd && hwndMain) { 2805 fOkayMinimize = TRUE; 2806 if (dcd->hwndObject && !fDummy) { 2807 DosSleep(100L); 2808 if (!fDummy) { 2809 fOkayMinimize = FALSE; 2810 WinSetWindowPos(((hwndMain) ? WinQueryWindow(hwndMain, QW_PARENT) : 2811 dcd->hwndFrame), HWND_TOP, 0, 0, 0, 0, 2812 SWP_MINIMIZE | SWP_DEACTIVATE); 2813 } 2814 } 2815 } 2816 return 0; 2817 2818 case UM_MAXIMIZE: 2819 if (dcd || hwndMain) 2820 WinSetWindowPos(((hwndMain) ? WinQueryWindow(hwndMain, QW_PARENT) : 2821 dcd->hwndFrame), HWND_TOP, 0, 0, 0, 0, SWP_MAXIMIZE | 2822 SWP_SHOW); 2823 return 0; 2824 2825 case UM_CLOSE: 2826 { 2827 HWND hwndParent = WinQueryWindow(WinQueryWindow(WinQueryWindow(hwnd, 2828 QW_PARENT), 2829 QW_PARENT), QW_PARENT); 2830 2831 if (!mp1) { 2832 if (!PostMsg((HWND) 0, WM_QUIT, MPVOID, MPVOID)) 2833 WinSendMsg((HWND) 0, WM_QUIT, MPVOID, MPVOID); 2834 if (hwndParent && !ParentIsDesktop(hwnd, hwndParent)) 2835 WinDestroyWindow(hwndParent); 3249 2836 } 3250 2837 else 3251 WinSendMsg(hwnd,UM_CLOSE,MPFROMLONG(1L),MPVOID); 3252 return 0; 3253 3254 case WM_DESTROY: 3255 if(TreeCnrMenu) 3256 WinDestroyWindow(TreeCnrMenu); 3257 if(DirMenu) 3258 WinDestroyWindow(DirMenu); 3259 if(FileMenu) 3260 WinDestroyWindow(FileMenu); 3261 TreeCnrMenu = FileMenu = DirMenu = (HWND)0; 3262 EmptyCnr(hwnd); 3263 if(apphead) { 3264 3265 APPNOTIFY *info,*next; 3266 3267 info = apphead; 3268 while(info) { 3269 next = info->next; 3270 free(info); 3271 info = next; 3272 } 3273 apphead = apptail = NULL; 3274 } 3275 break; 2838 WinDestroyWindow(WinQueryWindow(WinQueryWindow(hwnd, QW_PARENT), 2839 QW_PARENT)); 2840 } 2841 return 0; 2842 2843 case WM_CLOSE: 2844 WinSendMsg(hwnd, WM_SAVEAPPLICATION, MPVOID, MPVOID); 2845 if (dcd) 2846 dcd->stopflag++; 2847 if (dcd && dcd->hwndObject) { 2848 /* kill object window */ 2849 if (!PostMsg(dcd->hwndObject, WM_CLOSE, MPVOID, MPVOID)) 2850 WinSendMsg(dcd->hwndObject, WM_CLOSE, MPVOID, MPVOID); 2851 } 2852 else 2853 WinSendMsg(hwnd, UM_CLOSE, MPFROMLONG(1L), MPVOID); 2854 return 0; 2855 2856 case WM_DESTROY: 2857 if (TreeCnrMenu) 2858 WinDestroyWindow(TreeCnrMenu); 2859 if (DirMenu) 2860 WinDestroyWindow(DirMenu); 2861 if (FileMenu) 2862 WinDestroyWindow(FileMenu); 2863 TreeCnrMenu = FileMenu = DirMenu = (HWND) 0; 2864 EmptyCnr(hwnd); 2865 if (apphead) { 2866 2867 APPNOTIFY *info, *next; 2868 2869 info = apphead; 2870 while (info) { 2871 next = info->next; 2872 free(info); 2873 info = next; 2874 } 2875 apphead = apptail = NULL; 2876 } 2877 break; 3276 2878 } 3277 return (dcd && dcd->oldproc) ? dcd->oldproc(hwnd, msg,mp1,mp2) :3278 PFNWPCnr(hwnd,msg,mp1,mp2);2879 return (dcd && dcd->oldproc) ? dcd->oldproc(hwnd, msg, mp1, mp2) : 2880 PFNWPCnr(hwnd, msg, mp1, mp2); 3279 2881 } 3280 2882 3281 3282 HWND StartTreeCnr (HWND hwndParent,ULONG flags) 2883 HWND StartTreeCnr(HWND hwndParent, ULONG flags) 3283 2884 { 3284 2885 /* bitmapped flags: … … 3287 2888 */ 3288 2889 3289 HWND hwndFrame = (HWND)0,hwndClient; 3290 ULONG FrameFlags = FCF_TITLEBAR | FCF_SYSMENU | 3291 FCF_SIZEBORDER | FCF_MINMAX | 3292 FCF_ICON | FCF_NOBYTEALIGN | 3293 FCF_ACCELTABLE; 3294 DIRCNRDATA *dcd; 3295 3296 if(!hwndParent) 2890 HWND hwndFrame = (HWND) 0, hwndClient; 2891 ULONG FrameFlags = FCF_TITLEBAR | FCF_SYSMENU | 2892 FCF_SIZEBORDER | FCF_MINMAX | FCF_ICON | FCF_NOBYTEALIGN | FCF_ACCELTABLE; 2893 DIRCNRDATA *dcd; 2894 2895 if (!hwndParent) 3297 2896 hwndParent = HWND_DESKTOP; 3298 if (ParentIsDesktop(hwndParent,hwndParent))2897 if (ParentIsDesktop(hwndParent, hwndParent)) 3299 2898 FrameFlags |= (FCF_TASKLIST | FCF_MENU); 3300 if (flags & 2)2899 if (flags & 2) 3301 2900 FrameFlags &= (~(FCF_TITLEBAR | FCF_SYSMENU | FCF_SIZEBORDER | 3302 FCF_MINMAX 2901 FCF_MINMAX | FCF_ICON)); 3303 2902 hwndFrame = WinCreateStdWindow(hwndParent, 3304 2903 WS_VISIBLE, … … 3307 2906 NULL, 3308 2907 WS_VISIBLE | fwsAnimate, 3309 FM3ModHandle, 3310 TREE_FRAME, 3311 &hwndClient); 3312 if(hwndFrame && hwndClient) { 2908 FM3ModHandle, TREE_FRAME, &hwndClient); 2909 if (hwndFrame && hwndClient) { 3313 2910 dcd = xmalloc(sizeof(DIRCNRDATA), pszSrcFile, __LINE__); 3314 2911 if (!dcd) { 3315 Runtime_Error(pszSrcFile, __LINE__,GetPString(IDS_OUTOFMEMORY));3316 PostMsg(hwndClient, WM_CLOSE,MPVOID,MPVOID);3317 hwndFrame = (HWND) 0;2912 Runtime_Error(pszSrcFile, __LINE__, GetPString(IDS_OUTOFMEMORY)); 2913 PostMsg(hwndClient, WM_CLOSE, MPVOID, MPVOID); 2914 hwndFrame = (HWND) 0; 3318 2915 } 3319 2916 else { 3320 2917 SWP swp; 3321 WinQueryWindowPos(hwndFrame,&swp); 3322 if (*(ULONG *)realappname == FM3UL) { 2918 2919 WinQueryWindowPos(hwndFrame, &swp); 2920 if (*(ULONG *) realappname == FM3UL) { 3323 2921 if (!WinCreateWindow(hwndFrame, 3324 GetPString(IDS_WCTREEOPENBUTTON), 3325 "O", 3326 WS_VISIBLE | BS_PUSHBUTTON | BS_NOPOINTERFOCUS, 3327 ((swp.cx - WinQuerySysValue(HWND_DESKTOP,SV_CXMINMAXBUTTON)) - 3328 WinQuerySysValue(HWND_DESKTOP,SV_CXMINMAXBUTTON) / 2) - 3329 WinQuerySysValue(HWND_DESKTOP,SV_CXSIZEBORDER), 3330 (swp.cy - WinQuerySysValue(HWND_DESKTOP,SV_CYMINMAXBUTTON)) - 3331 WinQuerySysValue(HWND_DESKTOP,SV_CYSIZEBORDER), 3332 WinQuerySysValue(HWND_DESKTOP,SV_CXMINMAXBUTTON) / 2, 3333 WinQuerySysValue(HWND_DESKTOP,SV_CYMINMAXBUTTON), 3334 hwndFrame, 3335 HWND_TOP, 3336 IDM_OPENWINDOW, 3337 NULL, 3338 NULL)) 3339 { 3340 Win_Error2(hwndFrame,hwndParent,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW); 2922 GetPString(IDS_WCTREEOPENBUTTON), 2923 "O", 2924 WS_VISIBLE | BS_PUSHBUTTON | BS_NOPOINTERFOCUS, 2925 ((swp.cx - 2926 WinQuerySysValue(HWND_DESKTOP, 2927 SV_CXMINMAXBUTTON)) - 2928 WinQuerySysValue(HWND_DESKTOP, 2929 SV_CXMINMAXBUTTON) / 2) - 2930 WinQuerySysValue(HWND_DESKTOP, SV_CXSIZEBORDER), 2931 (swp.cy - 2932 WinQuerySysValue(HWND_DESKTOP, 2933 SV_CYMINMAXBUTTON)) - 2934 WinQuerySysValue(HWND_DESKTOP, SV_CYSIZEBORDER), 2935 WinQuerySysValue(HWND_DESKTOP, 2936 SV_CXMINMAXBUTTON) / 2, 2937 WinQuerySysValue(HWND_DESKTOP, 2938 SV_CYMINMAXBUTTON), hwndFrame, 2939 HWND_TOP, IDM_OPENWINDOW, NULL, NULL)) { 2940 Win_Error2(hwndFrame, hwndParent, pszSrcFile, __LINE__, 2941 IDS_WINCREATEWINDOW); 3341 2942 } 3342 2943 } 3343 2944 else { 3344 2945 if (!WinCreateWindow(hwndFrame, 3345 GetPString(IDS_WCTREESTATUS), 3346 GetPString(IDS_YOUAREHERETEXT), 3347 WS_VISIBLE | SS_TEXT | DT_LEFT | DT_VCENTER, 3348 swp.x + 4 + WinQuerySysValue(HWND_DESKTOP, 3349 SV_CXSIZEBORDER), 3350 swp.cy - (22 + WinQuerySysValue(HWND_DESKTOP, 3351 SV_CYSIZEBORDER)), 3352 (swp.cx - 8) - (WinQuerySysValue(HWND_DESKTOP, 3353 SV_CXSIZEBORDER) * 2), 3354 22, 3355 hwndFrame, 3356 HWND_TOP, 3357 MAIN_STATUS, 3358 NULL, 3359 NULL)) 3360 { 3361 Win_Error2(hwndFrame,hwndParent,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW); 3362 } 3363 } 3364 memset(dcd,0,sizeof(DIRCNRDATA)); 2946 GetPString(IDS_WCTREESTATUS), 2947 GetPString(IDS_YOUAREHERETEXT), 2948 WS_VISIBLE | SS_TEXT | DT_LEFT | DT_VCENTER, 2949 swp.x + 4 + WinQuerySysValue(HWND_DESKTOP, 2950 SV_CXSIZEBORDER), 2951 swp.cy - (22 + WinQuerySysValue(HWND_DESKTOP, 2952 SV_CYSIZEBORDER)), 2953 (swp.cx - 8) - (WinQuerySysValue(HWND_DESKTOP, 2954 SV_CXSIZEBORDER) 2955 * 2), 22, hwndFrame, HWND_TOP, 2956 MAIN_STATUS, NULL, NULL)) { 2957 Win_Error2(hwndFrame, hwndParent, pszSrcFile, __LINE__, 2958 IDS_WINCREATEWINDOW); 2959 } 2960 } 2961 memset(dcd, 0, sizeof(DIRCNRDATA)); 3365 2962 dcd->size = sizeof(DIRCNRDATA); 3366 2963 dcd->type = TREE_FRAME; … … 3368 2965 dcd->hwndParent = (hwndParent) ? hwndParent : HWND_DESKTOP; 3369 2966 dcd->hwndClient = hwndClient; 3370 dcd->hwndFrame 2967 dcd->hwndFrame = hwndFrame; 3371 2968 { 3372 2969 PFNWP oldproc; 3373 2970 3374 oldproc = WinSubclassWindow(hwndFrame,TreeFrameWndProc); 3375 WinSetWindowPtr(hwndFrame,QWL_USER,(PVOID)oldproc); 3376 oldproc = WinSubclassWindow(WinWindowFromID(hwndFrame,FID_TITLEBAR), 3377 (PFNWP)TreeTitleWndProc); 3378 WinSetWindowPtr(WinWindowFromID(hwndFrame,FID_TITLEBAR), 3379 QWL_USER, 3380 (PVOID)oldproc); 2971 oldproc = WinSubclassWindow(hwndFrame, TreeFrameWndProc); 2972 WinSetWindowPtr(hwndFrame, QWL_USER, (PVOID) oldproc); 2973 oldproc = WinSubclassWindow(WinWindowFromID(hwndFrame, FID_TITLEBAR), 2974 (PFNWP) TreeTitleWndProc); 2975 WinSetWindowPtr(WinWindowFromID(hwndFrame, FID_TITLEBAR), 2976 QWL_USER, (PVOID) oldproc); 3381 2977 } 3382 2978 dcd->hwndCnr = WinCreateWindow(hwndClient, … … 3390 2986 0, 3391 2987 hwndClient, 3392 HWND_TOP, 3393 (ULONG)TREE_CNR, 3394 NULL, 3395 NULL); 2988 HWND_TOP, (ULONG) TREE_CNR, NULL, NULL); 3396 2989 if (!dcd->hwndCnr) { 3397 Win_Error2(hwndClient,hwndClient,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW); 3398 PostMsg(hwndClient,WM_CLOSE,MPVOID,MPVOID); 2990 Win_Error2(hwndClient, hwndClient, pszSrcFile, __LINE__, 2991 IDS_WINCREATEWINDOW); 2992 PostMsg(hwndClient, WM_CLOSE, MPVOID, MPVOID); 3399 2993 free(dcd); 3400 hwndFrame = (HWND) 0;2994 hwndFrame = (HWND) 0; 3401 2995 } 3402 2996 else { 3403 WinSetWindowPtr(dcd->hwndCnr, QWL_USER,(PVOID)dcd);3404 if (ParentIsDesktop(hwndFrame,hwndParent)) {3405 WinSetWindowText(WinWindowFromID(hwndFrame, FID_TITLEBAR),"VTree");3406 FixSwitchList(hwndFrame, "VTree");2997 WinSetWindowPtr(dcd->hwndCnr, QWL_USER, (PVOID) dcd); 2998 if (ParentIsDesktop(hwndFrame, hwndParent)) { 2999 WinSetWindowText(WinWindowFromID(hwndFrame, FID_TITLEBAR), "VTree"); 3000 FixSwitchList(hwndFrame, "VTree"); 3407 3001 } 3408 3002 else { 3409 WinSetWindowText(hwndFrame, GetPString(IDS_TREETEXT));3410 WinSetWindowText(WinWindowFromID(hwndFrame, FID_TITLEBAR),3003 WinSetWindowText(hwndFrame, GetPString(IDS_TREETEXT)); 3004 WinSetWindowText(WinWindowFromID(hwndFrame, FID_TITLEBAR), 3411 3005 GetPString(IDS_TREETEXT)); 3412 3006 } 3413 dcd->oldproc = WinSubclassWindow(dcd->hwndCnr, TreeCnrWndProc);3414 if (!PostMsg(dcd->hwndCnr,UM_SETUP,MPVOID,MPVOID))3415 WinSendMsg(dcd->hwndCnr, UM_SETUP,MPVOID,MPVOID);3007 dcd->oldproc = WinSubclassWindow(dcd->hwndCnr, TreeCnrWndProc); 3008 if (!PostMsg(dcd->hwndCnr, UM_SETUP, MPVOID, MPVOID)) 3009 WinSendMsg(dcd->hwndCnr, UM_SETUP, MPVOID, MPVOID); 3416 3010 } 3417 3011 } … … 3419 3013 return hwndFrame; 3420 3014 } 3421
Note:
See TracChangeset
for help on using the changeset viewer.