source: trunk/dll/collect.c@ 593

Last change on this file since 593 was 593, checked in by Gregg Young, 18 years ago

Changes to remove GetPString from window class names

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 70.1 KB
RevLine 
[96]1
2/***********************************************************************
3
4 $Id: collect.c 593 2007-03-31 19:13:59Z gyoung $
5
6 Collector
7
8 Copyright (c) 1993-98 M. Kimes
[352]9 Copyright (c) 2003, 2006 Steven H. Levine
[96]10
[130]11 15 Oct 02 MK Baseline
12 10 Jan 04 SHL Avoid -1L byte counts
13 01 Aug 04 SHL Rework lstrip/rstrip usage
14 23 May 05 SHL Use QWL_USER
[145]15 24 May 05 SHL Rework Win_Error usage
[155]16 25 May 05 SHL Use ULONGLONG and CommaFmtULL
17 25 May 05 SHL Rework for FillInRecordFromFFB
[186]18 05 Jun 05 SHL Use QWL_USER
[194]19 06 Jun 05 SHL Indent -i2
[197]20 06 Jun 05 SHL Make savedSortFlags static to avoid referencing garbage
[280]21 24 Oct 05 SHL Sanitize handle references
22 24 Oct 05 SHL CollectorCnrWndProc: avoid excess writes to Status2 window
23 10 Nov 05 SHL CollectorCnrWndProc: correct missing button window updates
[352]24 14 Jul 06 SHL Use Runtime_Error
[403]25 27 Jul 06 SHL Avoid shutdown hang - pre3 typo
26 29 Jul 06 SHL Use xfgets_bstripcr
[444]27 15 Aug 06 SHL Don't write garbage to CollectorFilter INI entry
28 15 Aug 06 SHL Rework SetMask args
29 18 Aug 06 SHL CollectorCnrWndProc: avoid freeing NULL pointer
[471]30 31 Aug 06 SHL Disable Utilities->Seek and scan menu while busy
31 31 Aug 06 SHL Correct stop scan context menu enable/disable
[593]32 30 Mar 07 GKY Remove GetPString for window class names
[96]33
34***********************************************************************/
35
[2]36#define INCL_DOS
37#define INCL_WIN
38#define INCL_GPI
39#define INCL_DOSERRORS
[155]40#define INCL_LONGLONG
41#include <os2.h>
[2]42
43#include <stdarg.h>
44#include <stdio.h>
45#include <stdlib.h>
46#include <string.h>
47#include <ctype.h>
48#include <time.h>
49#include <share.h>
50#include <limits.h>
[155]51
[2]52#include "fm3dll.h"
53#include "fm3dlg.h"
54#include "fm3str.h"
55#include "mle.h"
56#include "grep.h"
57
58#pragma data_seg(DATA1)
[352]59
60static PSZ pszSrcFile = __FILE__;
61
[2]62#pragma alloc_text(COLLECTOR,CollectorCnrWndProc,CollectorObjWndProc)
63#pragma alloc_text(COLLECTOR,CollectorClientWndProc,CollectorTextProc)
64#pragma alloc_text(COLLECTOR,CollectorFrameWndProc)
65#pragma alloc_text(STARTUP,StartCollector)
66
[194]67MRESULT EXPENTRY CollectorFrameWndProc(HWND hwnd, ULONG msg, MPARAM mp1,
68 MPARAM mp2)
69{
70 return CommonFrameWndProc(COLLECTOR_CNR, hwnd, msg, mp1, mp2);
[2]71}
72
[551]73MRESULT EXPENTRY CollectorTextProc(HWND hwnd, ULONG msg, MPARAM mp1,
74 MPARAM mp2)
[96]75{
[197]76 DIRCNRDATA *dcd;
[155]77
[194]78 static BOOL emphasized = FALSE;
[551]79 static HWND hwndButtonPopup = (HWND) 0;
[194]80 static ULONG timestamp = ULONG_MAX;
81 static USHORT lastid = 0;
[2]82
[444]83 switch (msg) {
[194]84 case WM_CREATE:
85 return CommonTextProc(hwnd, msg, mp1, mp2);
[2]86
[194]87 case UM_CONTEXTMENU:
88 case WM_CONTEXTMENU:
89 {
90 USHORT id;
91
92 id = WinQueryWindowUShort(hwnd, QWS_ID);
[444]93 switch (id) {
[194]94 case DIR_SELECTED:
95 case DIR_VIEW:
96 case DIR_SORT:
97 {
[551]98 POINTL ptl = { 0, 0 };
[194]99 SWP swp;
[2]100
[194]101 if (hwndButtonPopup)
102 WinDestroyWindow(hwndButtonPopup);
[444]103 if (id == lastid) {
[194]104 ULONG check;
[2]105
[194]106 DosQuerySysInfo(QSV_MS_COUNT,
[551]107 QSV_MS_COUNT, &check, sizeof(check));
[444]108 if (check < timestamp + 500) {
[194]109 lastid = 0;
110 goto MenuAbort;
111 }
112 }
[551]113 hwndButtonPopup = WinLoadMenu(HWND_DESKTOP, FM3ModHandle, id);
[444]114 if (hwndButtonPopup) {
[551]115 WinSetWindowUShort(hwndButtonPopup, QWS_ID, id);
[194]116 dcd = WinQueryWindowPtr(WinWindowFromID(WinQueryWindow(hwnd,
[352]117 QW_PARENT),
[551]118 COLLECTOR_CNR), QWL_USER);
[444]119 if (id == DIR_VIEW) {
120 if (dcd) {
[551]121 SetViewMenu(hwndButtonPopup, dcd->flWindowAttr);
122 SetDetailsSwitches(hwndButtonPopup, dcd);
[194]123 }
[2]124
[194]125 /* don't have tree view in collector */
126 WinSendMsg(hwndButtonPopup,
127 MM_DELETEITEM,
[551]128 MPFROM2SHORT(IDM_TREEVIEW, FALSE), MPVOID);
[2]129
[194]130 }
[444]131 else if (id == DIR_SORT) {
[194]132 if (dcd)
[551]133 SetSortChecks(hwndButtonPopup, dcd->sortFlags);
[194]134 }
135 ptl.x = 0;
136 if (WinPopupMenu(HWND_OBJECT,
137 HWND_OBJECT,
[551]138 hwndButtonPopup, -32767, -32767, 0, 0)) {
139 WinQueryWindowPos(hwndButtonPopup, &swp);
[194]140 ptl.y = -(swp.cy + 2);
141 }
[444]142 else {
[551]143 WinQueryWindowPos(hwnd, &swp);
[194]144 ptl.y = swp.cy + 2;
145 }
146 if (WinPopupMenu(hwnd,
147 hwnd,
148 hwndButtonPopup,
149 ptl.x,
150 ptl.y,
151 0,
152 PU_HCONSTRAIN | PU_VCONSTRAIN |
[551]153 PU_KEYBOARD | PU_MOUSEBUTTON1)) {
[194]154 CenterOverWindow(hwndButtonPopup);
[551]155 PaintRecessedWindow(hwnd, NULLHANDLE, FALSE, FALSE);
[194]156 }
157 }
158 }
159 break;
160 default:
161 PostMsg(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
162 COLLECTOR_CNR),
163 WM_CONTROL,
[551]164 MPFROM2SHORT(COLLECTOR_CNR, CN_CONTEXTMENU), MPVOID);
[194]165 break;
[2]166 }
[194]167 }
168 MenuAbort:
169 if (msg == UM_CONTEXTMENU)
170 return 0;
171 break;
[2]172
[194]173 case WM_MENUEND:
[551]174 if (hwndButtonPopup == (HWND) mp2) {
175 lastid = WinQueryWindowUShort((HWND) mp2, QWS_ID);
[194]176 WinDestroyWindow(hwndButtonPopup);
[551]177 hwndButtonPopup = (HWND) 0;
178 DosQuerySysInfo(QSV_MS_COUNT, QSV_MS_COUNT, &timestamp,
179 sizeof(timestamp));
[444]180 switch (lastid) {
[194]181 case DIR_SELECTED:
182 case DIR_VIEW:
183 case DIR_SORT:
[551]184 PaintRecessedWindow(hwnd, NULLHANDLE, TRUE, FALSE);
[194]185 break;
[2]186 }
[194]187 }
188 break;
[2]189
[194]190 case WM_COMMAND:
191 {
192 DIRCNRDATA *dcd;
193 MRESULT mr;
194
195 mr = WinSendMsg(WinWindowFromID(WinQueryWindow(hwnd,
196 QW_PARENT),
[551]197 COLLECTOR_CNR), msg, mp1, mp2);
[194]198 if (hwndButtonPopup &&
199 SHORT1FROMMP(mp1) > IDM_DETAILSTITLES &&
[551]200 SHORT1FROMMP(mp1) < IDM_DETAILSSETUP) {
[194]201 dcd = WinQueryWindowPtr(WinWindowFromID(WinQueryWindow(hwnd,
202 QW_PARENT),
[551]203 COLLECTOR_CNR), QWL_USER);
[194]204 if (dcd)
[551]205 SetDetailsSwitches(hwndButtonPopup, dcd);
[2]206 }
[194]207 return mr;
208 }
[2]209
[194]210 case WM_MOUSEMOVE:
211 {
212 USHORT id = WinQueryWindowUShort(hwnd, QWS_ID);
213 char *s = NULL;
214
[444]215 if (fOtherHelp) {
[194]216 if ((!hwndBubble ||
217 WinQueryWindowULong(hwndBubble, QWL_USER) != hwnd) &&
[551]218 !WinQueryCapture(HWND_DESKTOP)) {
[444]219 switch (id) {
[194]220 case DIR_SELECTED:
221 s = GetPString(IDS_COLSELECTEDHELP);
222 break;
223 case DIR_TOTALS:
224 s = GetPString(IDS_COLTOTALSHELP);
225 break;
226 case DIR_VIEW:
227 s = GetPString(IDS_DIRCNRVIEWHELP);
228 break;
229 case DIR_SORT:
230 s = GetPString(IDS_DIRCNRSORTHELP);
231 break;
232 case DIR_FILTER:
233 s = GetPString(IDS_DIRCNRFILTERHELP);
234 break;
235 default:
236 break;
237 }
238 if (s)
239 MakeBubble(hwnd, TRUE, s);
240 else if (hwndBubble)
241 WinDestroyWindow(hwndBubble);
242 }
[2]243 }
[444]244 switch (id) {
[194]245 case DIR_FILTER:
246 case DIR_SORT:
247 case DIR_VIEW:
248 case DIR_SELECTED:
249 return CommonTextButton(hwnd, msg, mp1, mp2);
250 }
251 }
252 break;
[2]253
[194]254 case WM_BUTTON3UP:
255 case WM_BUTTON1UP:
256 case WM_BUTTON3DOWN:
257 case WM_BUTTON1DOWN:
258 {
259 USHORT id;
260
[280]261 id = WinQueryWindowUShort(hwnd, QWS_ID);
[444]262 switch (id) {
[194]263 case DIR_FILTER:
264 case DIR_SORT:
265 case DIR_VIEW:
266 case DIR_SELECTED:
267 return CommonTextButton(hwnd, msg, mp1, mp2);
[2]268 }
[194]269 }
270 break;
[2]271
[194]272 case UM_CLICKED:
273 case UM_CLICKED3:
274 {
275 USHORT id, cmd = 0;
276
[280]277 id = WinQueryWindowUShort(hwnd, QWS_ID);
[444]278 switch (id) {
[194]279 case DIR_VIEW:
280 case DIR_SORT:
281 case DIR_SELECTED:
[551]282 PostMsg(hwnd, UM_CONTEXTMENU, MPVOID, MPVOID);
[194]283 break;
284 case DIR_FILTER:
285 cmd = IDM_FILTER;
286 break;
287 default:
288 break;
[2]289 }
[194]290 if (cmd)
[551]291 PostMsg(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
[194]292 COLLECTOR_CNR),
[551]293 WM_COMMAND, MPFROM2SHORT(cmd, 0), MPVOID);
[194]294 }
295 return 0;
[2]296
[194]297 case DM_DROP:
298 case DM_DRAGOVER:
299 case DM_DRAGLEAVE:
300 case DM_DROPHELP:
[444]301 if (msg == DM_DRAGOVER) {
302 if (!emphasized) {
[194]303 emphasized = TRUE;
304 DrawTargetEmphasis(hwnd, emphasized);
[2]305 }
[194]306 }
[444]307 else {
308 if (emphasized) {
[194]309 emphasized = FALSE;
310 DrawTargetEmphasis(hwnd, emphasized);
[2]311 }
[194]312 }
313 {
314 CNRDRAGINFO cnd;
315 USHORT dcmd;
316
[444]317 switch (msg) {
[194]318 case DM_DROP:
319 dcmd = CN_DROP;
320 break;
321 case DM_DRAGOVER:
322 dcmd = CN_DRAGOVER;
323 break;
324 case DM_DRAGLEAVE:
325 dcmd = CN_DRAGLEAVE;
326 break;
327 case DM_DROPHELP:
328 dcmd = CN_DROPHELP;
329 break;
[2]330 }
[194]331 memset(&cnd, 0, sizeof(cnd));
332 cnd.pDragInfo = (PDRAGINFO) mp1;
333 cnd.pRecord = NULL;
334 return WinSendMsg(WinQueryWindow(hwnd, QW_PARENT), WM_CONTROL,
335 MPFROM2SHORT(COLLECTOR_CNR, dcmd), MPFROMP(&cnd));
336 }
[2]337 }
[194]338 return PFNWPStatic(hwnd, msg, mp1, mp2);
[2]339}
340
[194]341MRESULT EXPENTRY CollectorClientWndProc(HWND hwnd, ULONG msg, MPARAM mp1,
342 MPARAM mp2)
343{
[444]344 switch (msg) {
[194]345 case UM_CONTAINERHWND:
346 return MRFROMLONG(WinWindowFromID(hwnd, COLLECTOR_CNR));
[2]347
[194]348 case UM_VIEWSMENU:
349 return MRFROMLONG(CheckMenu(&CollectorCnrMenu, COLLECTORCNR_POPUP));
[2]350
[194]351 case MM_PORTHOLEINIT:
352 case WM_INITMENU:
353 case UM_INITMENU:
354 case UM_CONTAINER_FILLED:
355 case UM_FILESMENU:
356 case UM_UPDATERECORD:
357 case UM_UPDATERECORDLIST:
358 return WinSendMsg(WinWindowFromID(hwnd, COLLECTOR_CNR), msg, mp1, mp2);
[2]359
[194]360 case WM_PSETFOCUS:
361 case WM_SETFOCUS:
362 if (mp2)
363 PostMsg(hwnd, UM_FOCUSME, MPVOID, MPVOID);
364 break;
[2]365
[194]366 case UM_FOCUSME:
367 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, COLLECTOR_CNR));
368 break;
[2]369
[194]370 case WM_PAINT:
371 {
372 HPS hps;
373 RECTL rcl;
[2]374
[280]375 hps = WinBeginPaint(hwnd, NULLHANDLE, NULL);
[444]376 if (hps) {
[194]377 WinQueryWindowRect(hwnd, &rcl);
378 WinFillRect(hps, &rcl, CLR_PALEGRAY);
379 CommonTextPaint(hwnd, hps);
380 WinEndPaint(hps);
[2]381 }
[194]382 }
383 break;
[2]384
[194]385 case UM_SIZE:
386 case WM_SIZE:
[444]387 if (msg == UM_SIZE) {
[194]388 SWP swp;
[2]389
[194]390 WinQueryWindowPos(hwnd, &swp);
391 mp1 = MPFROM2SHORT(swp.cx, swp.cy);
392 mp2 = MPFROM2SHORT(swp.cx, swp.cy);
393 }
394 {
395 USHORT cx, cy, bx;
[2]396
[194]397 cx = SHORT1FROMMP(mp2);
398 cy = SHORT2FROMMP(mp2);
399 WinSetWindowPos(WinWindowFromID(hwnd, COLLECTOR_CNR), HWND_TOP,
[551]400 0, 0, cx, cy - 24, SWP_SHOW | SWP_MOVE | SWP_SIZE);
[194]401 WinSetWindowPos(WinWindowFromID(hwnd, DIR_TOTALS), HWND_TOP,
402 2,
403 cy - 22,
[551]404 (cx / 3) - 2, 20, SWP_SHOW | SWP_MOVE | SWP_SIZE);
[194]405 WinSetWindowPos(WinWindowFromID(hwnd, DIR_SELECTED), HWND_TOP,
406 2 + (cx / 3) + 2,
407 cy - 22,
[551]408 (cx / 3) - 2, 20, SWP_SHOW | SWP_MOVE | SWP_SIZE);
[194]409 bx = (cx - (2 + (((cx / 3) + 2) * 2))) / 3;
410 WinSetWindowPos(WinWindowFromID(hwnd, DIR_VIEW), HWND_TOP,
411 2 + (((cx / 3) + 2) * 2),
[551]412 cy - 22, bx - 4, 20, SWP_SHOW | SWP_MOVE | SWP_SIZE);
[194]413 WinSetWindowPos(WinWindowFromID(hwnd, DIR_SORT), HWND_TOP,
414 2 + (((cx / 3) + 2) * 2) + bx,
[551]415 cy - 22, bx - 4, 20, SWP_SHOW | SWP_MOVE | SWP_SIZE);
[194]416 WinSetWindowPos(WinWindowFromID(hwnd, DIR_FILTER), HWND_TOP,
417 2 + (((cx / 3) + 2) * 2) + (bx * 2),
[551]418 cy - 22, bx - 4, 20, SWP_SHOW | SWP_MOVE | SWP_SIZE);
[194]419 }
[280]420 CommonTextPaint(hwnd, NULLHANDLE);
[444]421 if (msg == UM_SIZE) {
[194]422 WinSetWindowPos(WinQueryWindow(hwnd, QW_PARENT), HWND_TOP, 0, 0, 0, 0,
423 SWP_SHOW | SWP_ZORDER | SWP_ACTIVATE);
424 return 0;
425 }
426 break;
[2]427
[194]428 case UM_COMMAND:
429 case WM_COMMAND:
430 case WM_CONTROL:
431 case WM_CLOSE:
432 return WinSendMsg(WinWindowFromID(hwnd, COLLECTOR_CNR), msg, mp1, mp2);
[2]433 }
[194]434 return WinDefWindowProc(hwnd, msg, mp1, mp2);
[2]435}
436
[194]437MRESULT EXPENTRY CollectorObjWndProc(HWND hwnd, ULONG msg, MPARAM mp1,
438 MPARAM mp2)
439{
[197]440 ULONG size;
[2]441 DIRCNRDATA *dcd;
442
[444]443 switch (msg) {
[194]444 case WM_CREATE:
445 break;
[2]446
[194]447 case DM_PRINTOBJECT:
448 return MRFROMLONG(DRR_TARGET);
[2]449
[194]450 case DM_DISCARDOBJECT:
451 dcd = INSTDATA(hwnd);
[444]452 if (fFM2Deletes && dcd) {
[194]453 LISTINFO *li;
454 CNRDRAGINFO cni;
[2]455
[194]456 cni.pRecord = NULL;
457 cni.pDragInfo = (PDRAGINFO) mp1;
[551]458 li = DoFileDrop(dcd->hwndCnr, NULL, FALSE, MPVOID, MPFROMP(&cni));
[444]459 if (li) {
[551]460 li->type = (fDefaultDeletePerm) ? IDM_PERMDELETE : IDM_DELETE;
[194]461 if (!PostMsg(hwnd, UM_MASSACTION, MPFROMP(li), MPVOID))
462 FreeListInfo(li);
463 else
464 return MRFROMLONG(DRR_SOURCE);
[2]465 }
[194]466 }
467 return MRFROMLONG(DRR_TARGET);
[2]468
[194]469 case UM_UPDATERECORDLIST:
470 dcd = WinQueryWindowPtr(hwnd, QWL_USER);
[444]471 if (dcd && mp1) {
[194]472 INT numentries = 0;
473 CHAR **list = (CHAR **) mp1;
[2]474
[194]475 while (list[numentries])
476 numentries++;
477 if (numentries)
[551]478 UpdateCnrList(dcd->hwndCnr, list, numentries, FALSE, dcd);
[194]479 }
480 return 0;
[2]481
[194]482 case UM_SETUP:
483 dcd = WinQueryWindowPtr(hwnd, QWL_USER);
[444]484 if (dcd) {
[194]485 /* set unique id */
486 WinSetWindowUShort(hwnd,
487 QWS_ID,
[551]488 COLLECTOROBJ_FRAME + (COLLECTOR_FRAME - dcd->id));
489 dcd->hwndObject = hwnd;
490 if (ParentIsDesktop(hwnd, dcd->hwndParent))
[194]491 DosSleep(250L);
492 }
493 else
494 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
495 return 0;
[2]496
[194]497 case UM_COMMAND:
[444]498 if (mp1) {
[194]499 LISTINFO *li = (LISTINFO *) mp1;
500
[551]501 switch (li->type) {
[194]502 case IDM_DOITYOURSELF:
503 case IDM_APPENDTOCLIP:
504 case IDM_SAVETOCLIP:
505 case IDM_ARCHIVE:
506 case IDM_ARCHIVEM:
507 case IDM_VIEW:
508 case IDM_VIEWTEXT:
509 case IDM_VIEWBINARY:
510 case IDM_VIEWARCHIVE:
511 case IDM_EDIT:
512 case IDM_EDITTEXT:
513 case IDM_EDITBINARY:
514 case IDM_OBJECT:
515 case IDM_SHADOW:
516 case IDM_SHADOW2:
517 case IDM_PRINT:
518 case IDM_ATTRS:
519 case IDM_DELETE:
520 case IDM_PERMDELETE:
521 case IDM_FAKEEXTRACT:
522 case IDM_FAKEEXTRACTM:
523 case IDM_MCIPLAY:
524 case IDM_UPDATE:
525 if (PostMsg(hwnd, UM_MASSACTION, mp1, mp2))
526 return (MRESULT) TRUE;
527 break;
528 default:
529 if (PostMsg(hwnd, UM_ACTION, mp1, mp2))
530 return (MRESULT) TRUE;
[2]531 }
[194]532 }
533 return 0;
[2]534
[194]535 case UM_COLLECT:
536 DosError(FERR_DISABLEHARDERR);
537 dcd = WinQueryWindowPtr(hwnd, QWL_USER);
[444]538 if (dcd) {
[194]539 LISTINFO *li = (LISTINFO *) mp1;
540 INT x;
541 FILEFINDBUF4 fb4;
542 HDIR hdir;
543 ULONG nm;
544 PCNRITEM pci, pciFirst, pciT, pciP = NULL;
545 RECORDINSERT ri;
546 ULONG ulMaxFiles;
547 ULONGLONG ullTotalBytes;
548 CHAR fullname[CCHMAXPATH];
[2]549
[551]550 WinSetWindowText(WinWindowFromID(dcd->hwndClient, DIR_SELECTED),
[194]551 GetPString(IDS_COLLECTINGTEXT));
[551]552 for (ulMaxFiles = 0; li->list[ulMaxFiles]; ulMaxFiles++) ; // Count
[352]553
554 if (ulMaxFiles) {
[551]555 pci = WinSendMsg(dcd->hwndCnr, CM_ALLOCRECORD,
[194]556 MPFROMLONG(EXTRA_RECORD_BYTES),
557 MPFROMLONG(ulMaxFiles));
[403]558 if (!pci) {
[551]559 Runtime_Error(pszSrcFile, __LINE__, "CM_ALLOCRECORD %u failed",
560 ulMaxFiles);
[352]561 break;
562 }
563 else {
[194]564 pciFirst = pci;
[551]565 for (x = 0; li->list[x]; x++) {
[194]566 nm = 1L;
567 hdir = HDIR_CREATE;
568 DosError(FERR_DISABLEHARDERR);
[551]569 if (*li->list[x] &&
570 !DosQueryPathInfo(li->list[x], FIL_QUERYFULLNAME,
[194]571 fullname, sizeof(fullname)) &&
572 !IsRoot(fullname) &&
[551]573 !FindCnrRecord(dcd->hwndCnr,
[194]574 fullname,
575 NULL,
576 FALSE,
577 FALSE,
578 TRUE) &&
579 !DosFindFirst(fullname,
580 &hdir,
581 FILE_NORMAL | FILE_DIRECTORY |
582 FILE_ARCHIVED | FILE_SYSTEM |
583 FILE_HIDDEN | FILE_READONLY,
[551]584 &fb4, sizeof(fb4), &nm, FIL_QUERYEASIZE)) {
[194]585 DosFindClose(hdir);
586 priority_normal();
587 *fb4.achName = 0;
[551]588 ullTotalBytes = FillInRecordFromFFB(dcd->hwndCnr,
[194]589 pci,
[551]590 fullname, &fb4, FALSE, dcd);
591 dcd->ullTotalBytes += ullTotalBytes;
[194]592 pciP = pci;
[551]593 pci = (PCNRITEM) pci->rc.preccNextRecord;
[194]594 }
[444]595 else {
[194]596 pciT = pci;
[551]597 pci = (PCNRITEM) pci->rc.preccNextRecord;
[194]598 if (pciP)
[551]599 pciP->rc.preccNextRecord = (PMINIRECORDCORE) pci;
[194]600 else
601 pciFirst = pci;
[551]602 WinSendMsg(hwnd, CM_FREERECORD, MPFROMP(&pciT),
603 MPFROM2SHORT(1, 0));
[194]604 ulMaxFiles--;
605 }
606 DosSleep(1L);
607 }
[444]608 if (ulMaxFiles) {
[194]609 memset(&ri, 0, sizeof(RECORDINSERT));
610 ri.cb = sizeof(RECORDINSERT);
611 ri.pRecordOrder = (PRECORDCORE) CMA_END;
612 ri.pRecordParent = (PRECORDCORE) 0;
613 ri.zOrder = (ULONG) CMA_TOP;
614 ri.cRecordsInsert = ulMaxFiles;
615 ri.fInvalidateRecord = TRUE;
[551]616 WinSendMsg(dcd->hwndCnr,
617 CM_INSERTRECORD, MPFROMP(pciFirst), MPFROMP(&ri));
618 PostMsg(dcd->hwndCnr, UM_RESCAN, MPVOID, MPVOID);
[194]619 }
620 }
[2]621 }
[194]622 }
[551]623 if (dcd->flWindowAttr & CV_DETAIL)
[194]624 WinSendDlgItemMsg(hwnd,
625 COLLECTOR_CNR,
626 CM_INVALIDATERECORD,
[551]627 MPVOID, MPFROM2SHORT(0, CMA_ERASE | CMA_REPOSITION));
[194]628 return 0;
[2]629
[194]630 case UM_COLLECTFROMFILE:
631 dcd = WinQueryWindowPtr(hwnd, QWL_USER);
[403]632 if (dcd && mp1) {
[194]633 FILESTATUS4 fs4;
634 PCNRITEM pci;
635 RECORDINSERT ri;
636 CHAR fullname[1024], *p;
637 FILE *fp;
638 ULONG errs = 0L;
[444]639 BOOL first = FALSE;
640 size_t c;
[2]641
[194]642 fp = _fsopen((CHAR *) mp1, "r", SH_DENYNO);
[403]643 if (fp) {
644 while (!feof(fp)) {
[444]645 // Avoid too much noise if collecting from binary file - oops
646 if (!fgets(fullname, sizeof(fullname), fp)) {
647 if (ferror(fp))
648 Runtime_Error(pszSrcFile, __LINE__, "fgets");
[194]649 break;
650 }
[444]651
652 c = strlen(fullname);
653 if (c + 1 >= sizeof(fullname))
654 errs++;
[551]655 else if (!c || (fullname[c - 1] != '\n' && fullname[c - 1] != '\r'))
[444]656 errs++;
[403]657 else {
[444]658 bstripcr(fullname);
659
660 if (*fullname == '\"') {
661 memmove(fullname, fullname + 1, strlen(fullname) + 1);
662 lstrip(fullname);
663 p = strchr(fullname, '\"');
664 if (p)
665 *p = 0;
666 rstrip(fullname);
667 }
668 else {
669 p = strchr(fullname, ' ');
670 if (p)
671 *p = 0;
672 }
673 /* fullname now contains name of file to collect */
674 DosError(FERR_DISABLEHARDERR);
675 if (IsFullName(fullname) &&
676 !IsRoot(fullname) &&
677 !DosQueryPathInfo(fullname,
678 FIL_QUERYEASIZE,
679 &fs4,
680 sizeof(fs4)) &&
[551]681 !FindCnrRecord(dcd->hwndCnr,
682 fullname, NULL, FALSE, FALSE, TRUE)) {
[444]683 /* collect it */
[551]684 pci = WinSendMsg(dcd->hwndCnr,
[444]685 CM_ALLOCRECORD,
686 MPFROMLONG(EXTRA_RECORD_BYTES),
687 MPFROMLONG(1L));
688 if (pci) {
[551]689 dcd->ullTotalBytes += FillInRecordFromFSA(dcd->hwndCnr, pci,
690 fullname,
691 &fs4, FALSE, dcd);
[444]692 memset(&ri, 0, sizeof(RECORDINSERT));
693 ri.cb = sizeof(RECORDINSERT);
694 ri.pRecordOrder = (PRECORDCORE) CMA_END;
695 ri.pRecordParent = (PRECORDCORE) 0;
696 ri.zOrder = (ULONG) CMA_TOP;
697 ri.cRecordsInsert = 1L;
698 ri.fInvalidateRecord = TRUE;
[551]699 WinSendMsg(dcd->hwndCnr, CM_INSERTRECORD,
[444]700 MPFROMP(pci), MPFROMP(&ri));
701 }
[194]702 }
[444]703 else
704 errs++;
[194]705 }
[444]706 if (errs > (first ? 0 : 50)) {
707 /* prevent runaway on bad file */
[551]708 APIRET ret = saymsg(MB_YESNO, dcd->hwndCnr,
[444]709 GetPString(IDS_COLLECTNOLISTHDRTEXT),
710 GetPString(IDS_COLLECTNOLISTTEXT),
[551]711 (CHAR *) mp1);
712
[444]713 if (ret == MBID_NO)
714 break;
715 if (!first)
716 errs = 0;
717 else
718 first = FALSE;
[194]719 }
[551]720 } // while not eof
[194]721 fclose(fp);
[2]722 }
[194]723 }
[403]724 xfree(mp1);
[194]725 return 0;
[2]726
[194]727 case UM_SELECT:
728 dcd = WinQueryWindowPtr(hwnd, QWL_USER);
[444]729 if (dcd) {
730 switch (SHORT1FROMMP(mp1)) {
[194]731 case IDM_SELECTLIST:
732 {
733 CHAR filename[CCHMAXPATH], *p, *pp;
[2]734
[194]735 strcpy(filename, "*.LST");
736 size = CCHMAXPATH;
[551]737 PrfQueryProfileData(fmprof, appname, "SaveToListName", filename,
738 &size);
[194]739 pp = strrchr(filename, '\\');
740 if (!pp)
741 pp = filename;
742 p = strrchr(pp, '.');
[444]743 if (p && *(p + 1) && p > pp + 1) {
[194]744 if (pp > filename)
745 pp++;
746 *pp = '*';
747 pp++;
748 if (p > pp)
749 memmove(pp, p, strlen(p) + 1);
750 }
751 if (insert_filename(hwnd, filename, FALSE, FALSE))
[551]752 SelectList(dcd->hwndCnr, TRUE, FALSE, FALSE, NULL, filename,
753 NULL);
[194]754 }
755 break;
756 case IDM_SELECTALL:
[551]757 SelectAll(dcd->hwndCnr, TRUE, TRUE, NULL, NULL, FALSE);
[194]758 break;
759 case IDM_DESELECTALL:
[551]760 DeselectAll(dcd->hwndCnr, TRUE, TRUE, NULL, NULL, FALSE);
[194]761 break;
762 case IDM_SELECTALLFILES:
[551]763 SelectAll(dcd->hwndCnr, TRUE, FALSE, NULL, NULL, FALSE);
[194]764 break;
765 case IDM_DESELECTALLFILES:
[551]766 DeselectAll(dcd->hwndCnr, TRUE, FALSE, NULL, NULL, FALSE);
[194]767 break;
768 case IDM_SELECTALLDIRS:
[551]769 SelectAll(dcd->hwndCnr, FALSE, TRUE, NULL, NULL, FALSE);
[194]770 break;
771 case IDM_DESELECTALLDIRS:
[551]772 DeselectAll(dcd->hwndCnr, FALSE, TRUE, NULL, NULL, FALSE);
[194]773 break;
774 case IDM_DESELECTMASK:
775 case IDM_SELECTMASK:
776 {
777 MASK mask;
778 PCNRITEM pci = (PCNRITEM) mp2;
[2]779
[194]780 memset(&mask, 0, sizeof(MASK));
781 mask.fNoAttribs = TRUE;
782 mask.fNoDirs = TRUE;
783 mask.fText = TRUE;
784 strcpy(mask.prompt,
785 GetPString((SHORT1FROMMP(mp1) == IDM_SELECTMASK) ?
[551]786 IDS_SELECTFILTERTEXT : IDS_DESELECTFILTERTEXT));
[194]787 if (pci && (INT) pci != -1)
[551]788 strcpy(mask.szMask, pci->szFileName);
789 if (WinDlgBox(HWND_DESKTOP, dcd->hwndCnr, PickMaskDlgProc,
790 FM3ModHandle, MSK_FRAME, MPFROMP(&mask))) {
[194]791 if (SHORT1FROMMP(mp1) == IDM_SELECTMASK)
[551]792 SelectAll(dcd->hwndCnr, TRUE, TRUE, mask.szMask, mask.szText,
[194]793 FALSE);
794 else
[551]795 DeselectAll(dcd->hwndCnr, TRUE, TRUE, mask.szMask, mask.szText,
[194]796 FALSE);
797 }
798 }
[2]799
[194]800 case IDM_DESELECTCLIP:
801 case IDM_SELECTCLIP:
802 {
803 CHAR **list;
[2]804
[194]805 list = ListFromClipboard(hwnd);
[444]806 if (list) {
[551]807 SelectList(dcd->hwndCnr, TRUE, FALSE,
[194]808 (SHORT1FROMMP(mp1) == IDM_DESELECTCLIP),
809 NULL, NULL, list);
810 FreeList(list);
811 }
812 }
813 break;
[2]814
[194]815 case IDM_INVERT:
[551]816 InvertAll(dcd->hwndCnr);
[194]817 break;
[2]818 }
[194]819 }
820 return 0;
[2]821
[194]822 case UM_MASSACTION:
[444]823 if (mp1) {
[194]824 dcd = WinQueryWindowPtr(hwnd, QWL_USER);
[444]825 if (dcd) {
[194]826 WORKER *wk;
[2]827
[551]828 wk = xmallocz(sizeof(WORKER), pszSrcFile, __LINE__);
[444]829 if (!wk)
[352]830 FreeListInfo((LISTINFO *) mp1);
831 else {
[551]832 wk->size = sizeof(WORKER);
833 wk->hwndCnr = dcd->hwndCnr;
834 wk->hwndParent = dcd->hwndParent;
835 wk->hwndFrame = dcd->hwndFrame;
836 wk->hwndClient = dcd->hwndClient;
837 wk->li = (LISTINFO *) mp1;
838 strcpy(wk->directory, dcd->directory);
[444]839 if (_beginthread(MassAction, NULL, 122880, (PVOID) wk) == -1) {
[551]840 Runtime_Error(pszSrcFile, __LINE__,
841 GetPString(IDS_COULDNTSTARTTHREADTEXT));
[194]842 free(wk);
843 FreeListInfo((LISTINFO *) mp1);
844 }
845 }
[2]846 }
[194]847 }
848 return 0;
[2]849
[194]850 case UM_ACTION:
[444]851 if (mp1) {
[194]852 dcd = WinQueryWindowPtr(hwnd, QWL_USER);
[444]853 if (dcd) {
[194]854 WORKER *wk;
[2]855
[551]856 wk = xmallocz(sizeof(WORKER), pszSrcFile, __LINE__);
[352]857 if (!wk)
858 FreeListInfo((LISTINFO *) mp1);
859 else {
[551]860 wk->size = sizeof(WORKER);
861 wk->hwndCnr = dcd->hwndCnr;
862 wk->hwndParent = dcd->hwndParent;
863 wk->hwndFrame = dcd->hwndFrame;
864 wk->hwndClient = dcd->hwndClient;
865 wk->li = (LISTINFO *) mp1;
866 strcpy(wk->directory, dcd->directory);
[444]867 if (_beginthread(Action, NULL, 122880, (PVOID) wk) == -1) {
[551]868 Runtime_Error(pszSrcFile, __LINE__,
869 GetPString(IDS_COULDNTSTARTTHREADTEXT));
[194]870 free(wk);
871 FreeListInfo((LISTINFO *) mp1);
872 }
873 }
[2]874 }
[194]875 }
876 return 0;
[2]877
[194]878 case WM_CLOSE:
879 WinDestroyWindow(hwnd);
880 break;
[2]881
[194]882 case WM_DESTROY:
883 dcd = WinQueryWindowPtr(hwnd, QWL_USER);
[444]884 if (dcd) {
885 INT x;
[551]886
887 dcd->stopflag = 1;
[280]888 // Allow rescan logic to quiesce
[551]889 for (x = 0; x < 10 && dcd->amextracted; x++)
[194]890 DosSleep(250L);
[551]891 WinSendMsg(dcd->hwndCnr, UM_CLOSE, MPVOID, MPVOID);
892 FreeList(dcd->lastselection);
[194]893 free(dcd);
894 }
895 DosPostEventSem(CompactSem);
[551]896 if (!PostMsg((HWND) 0, WM_QUIT, MPVOID, MPVOID))
897 WinSendMsg((HWND) 0, WM_QUIT, MPVOID, MPVOID);
[194]898 break;
[2]899 }
[194]900 return WinDefWindowProc(hwnd, msg, mp1, mp2);
[2]901}
902
[551]903MRESULT EXPENTRY CollectorCnrWndProc(HWND hwnd, ULONG msg, MPARAM mp1,
904 MPARAM mp2)
[155]905{
[194]906 DIRCNRDATA *dcd = WinQueryWindowPtr(hwnd, QWL_USER);
[197]907 ULONG size;
[2]908
[197]909 static INT savedSortFlags;
910
[444]911 switch (msg) {
[194]912 case DM_PRINTOBJECT:
913 return MRFROMLONG(DRR_TARGET);
914
915 case DM_DISCARDOBJECT:
916 if (dcd)
[551]917 return WinSendMsg(dcd->hwndObject, msg, mp1, mp2);
[194]918 else
[2]919 return MRFROMLONG(DRR_TARGET);
920
[194]921 case WM_CHAR:
922 shiftstate = (SHORT1FROMMP(mp1) & (KC_SHIFT | KC_ALT | KC_CTRL));
923 if (SHORT1FROMMP(mp1) & KC_KEYUP)
924 return (MRESULT) TRUE;
[444]925 if (SHORT1FROMMP(mp1) & KC_VIRTUALKEY) {
926 switch (SHORT2FROMMP(mp2)) {
[194]927 case VK_DELETE:
928 if ((shiftstate & KC_CTRL) == KC_CTRL)
929 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(IDM_PERMDELETE, 0), MPVOID);
930 else if ((shiftstate & KC_SHIFT) == KC_SHIFT)
931 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(IDM_SAVETOCLIP, 0), MPVOID);
932 else
933 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(IDM_DELETE, 0), MPVOID);
934 break;
[2]935 }
[194]936 }
937 if (shiftstate || fNoSearch)
938 break;
[444]939 if (SHORT1FROMMP(mp1) & KC_CHAR) {
[194]940 ULONG thistime, len;
941 SEARCHSTRING srch;
942 PCNRITEM pci;
[2]943
[194]944 if (!dcd)
945 break;
[444]946 switch (SHORT1FROMMP(mp2)) {
[194]947 case '\x1b':
948 case '\r':
949 case '\n':
[551]950 dcd->lasttime = 0;
951 *dcd->szCommonName = 0;
[194]952 break;
953 default:
954 thistime = WinQueryMsgTime(WinQueryAnchorBlock(hwnd));
[551]955 if (thistime > dcd->lasttime + 1250)
956 *dcd->szCommonName = 0;
957 dcd->lasttime = thistime;
958 if (SHORT1FROMMP(mp2) == ' ' && !dcd->szCommonName)
[194]959 break;
960 KbdRetry:
[551]961 len = strlen(dcd->szCommonName);
[444]962 if (len >= CCHMAXPATH - 1) {
[551]963 *dcd->szCommonName = 0;
[194]964 len = 0;
965 }
[551]966 dcd->szCommonName[len] = toupper(SHORT1FROMMP(mp2));
967 dcd->szCommonName[len + 1] = 0;
[194]968 memset(&srch, 0, sizeof(SEARCHSTRING));
[197]969 srch.cb = sizeof(SEARCHSTRING);
[551]970 srch.pszSearch = dcd->szCommonName;
[194]971 srch.fsPrefix = TRUE;
972 srch.fsCaseSensitive = FALSE;
973 srch.usView = CV_ICON;
974 pci = WinSendMsg(hwnd, CM_SEARCHSTRING, MPFROMP(&srch),
975 MPFROMLONG(CMA_FIRST));
[444]976 if (pci && (INT) pci != -1) {
[194]977 USHORT attrib = CRA_CURSORED;
[2]978
[194]979 /* make found item current item */
[551]980 if (!stricmp(pci->pszFileName, dcd->szCommonName))
[194]981 attrib |= CRA_SELECTED;
982 WinSendMsg(hwnd, CM_SETRECORDEMPHASIS, MPFROMP(pci),
983 MPFROM2SHORT(TRUE, attrib));
984 /* make sure that record shows in viewport */
985 ShowCnrRecord(hwnd, (PMINIRECORDCORE) pci);
986 return (MRESULT) TRUE;
987 }
[444]988 else {
989 if (SHORT1FROMMP(mp2) == ' ') {
[551]990 dcd->szCommonName[len] = 0;
[194]991 break;
992 }
[551]993 *dcd->szCommonName = 0;
994 dcd->lasttime = 0;
[194]995 if (len) // retry as first letter if no match
[2]996
[194]997 goto KbdRetry;
998 }
999 break;
[2]1000 }
[194]1001 }
1002 break;
[2]1003
[194]1004 case WM_MOUSEMOVE:
1005 case WM_BUTTON1UP:
1006 case WM_BUTTON2UP:
1007 case WM_BUTTON3UP:
1008 case WM_CHORD:
1009 shiftstate = (SHORT2FROMMP(mp2) & (KC_SHIFT | KC_ALT | KC_CTRL));
1010 break;
[2]1011
[194]1012 case WM_BUTTON1MOTIONEND:
1013 {
1014 CNRINFO cnri;
1015
1016 memset(&cnri, 0, sizeof(CNRINFO));
1017 cnri.cb = sizeof(CNRINFO);
1018 if (WinSendMsg(hwnd, CM_QUERYCNRINFO, MPFROMP(&cnri),
[551]1019 MPFROMLONG(sizeof(CNRINFO)))) {
[194]1020 if (cnri.flWindowAttr & CV_DETAIL)
1021 PrfWriteProfileData(fmprof, appname, "CollectorCnrSplitBar",
1022 (PVOID) & cnri.xVertSplitbar, sizeof(LONG));
[2]1023 }
[194]1024 }
1025 break;
[2]1026
[194]1027 case WM_PRESPARAMCHANGED:
1028 PresParamChanged(hwnd, "Collector", mp1, mp2);
1029 break;
[2]1030
[194]1031 case UM_COMPARE:
[444]1032 if (dcd && mp1 && mp2) {
[194]1033 COMPARE *cmp;
1034 CHAR *leftdir = (CHAR *) mp1, *rightdir = (CHAR *) mp2;
[2]1035
[444]1036 if (!IsFile(leftdir) && !IsFile(rightdir)) {
[551]1037 cmp = xmallocz(sizeof(COMPARE), pszSrcFile, __LINE__);
[444]1038 if (cmp) {
[551]1039 cmp->size = sizeof(COMPARE);
1040 strcpy(cmp->leftdir, leftdir);
1041 strcpy(cmp->rightdir, rightdir);
1042 cmp->hwndParent = dcd->hwndParent;
1043 cmp->dcd.hwndParent = dcd->hwndParent;
[194]1044 WinDlgBox(HWND_DESKTOP, HWND_DESKTOP, CompareDlgProc,
1045 FM3ModHandle, COMP_FRAME, MPFROMP(cmp));
1046 }
[2]1047 }
[194]1048 }
1049 return 0;
[2]1050
[194]1051 case UM_UPDATERECORDLIST:
1052 if (dcd && mp1)
[551]1053 WinSendMsg(dcd->hwndObject, msg, mp1, mp2);
[194]1054 return 0;
[2]1055
[194]1056 case UM_UPDATERECORD:
[444]1057 if (dcd && mp1) {
[194]1058 CHAR *filename;
[2]1059
[194]1060 filename = mp1;
1061 if (filename)
1062 UpdateCnrRecord(hwnd, filename, TRUE, dcd);
1063 }
1064 return 0;
[2]1065
[194]1066 case WM_SETFOCUS:
1067 /*
1068 * put name of our window on status line
1069 */
[444]1070 if (dcd && hwndStatus && mp2) {
[194]1071 PCNRITEM pci = NULL;
[2]1072
[444]1073 if (fAutoView && hwndMain) {
[194]1074 pci = WinSendMsg(hwnd,
1075 CM_QUERYRECORDEMPHASIS,
[551]1076 MPFROMLONG(CMA_FIRST), MPFROMSHORT(CRA_CURSORED));
[194]1077 if (pci && (INT) pci != -1 &&
[551]1078 (!(driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_SLOW)))
1079 WinSendMsg(hwndMain, UM_LOADFILE, MPFROMP(pci->szFileName), MPVOID);
[194]1080 else
[551]1081 WinSendMsg(hwndMain, UM_LOADFILE, MPVOID, MPVOID);
[2]1082 }
[551]1083 if (dcd->amextracted)
1084 WinSetWindowText(hwndStatus2, GetPString(IDS_INSEEKSCANTEXT)); // Say working
1085 WinSendMsg(hwnd, UM_RESCAN, MPVOID, MPVOID);
[194]1086 }
1087 break;
[2]1088
[194]1089 case UM_RESCAN:
[444]1090 if (dcd) {
[194]1091 CNRINFO cnri;
1092 CHAR s[CCHMAXPATH + 69], tb[81], tf[81], *p;
1093 PCNRITEM pci = NULL;
[2]1094
[194]1095 memset(&cnri, 0, sizeof(CNRINFO));
1096 cnri.cb = sizeof(CNRINFO);
1097 WinSendMsg(hwnd, CM_QUERYCNRINFO, MPFROMP(&cnri),
1098 MPFROMLONG(sizeof(CNRINFO)));
[551]1099 dcd->totalfiles = cnri.cRecords;
1100 commafmt(tf, sizeof(tf), dcd->totalfiles);
1101 CommaFmtULL(tb, sizeof(tb), dcd->ullTotalBytes, ' ');
[194]1102 sprintf(s, "%s / %s", tf, tb);
[551]1103 WinSetDlgItemText(dcd->hwndClient, DIR_TOTALS, s);
[2]1104
[551]1105 commafmt(tf, sizeof(tf), dcd->selectedfiles);
1106 CommaFmtULL(tb, sizeof(tb), dcd->selectedbytes, ' ');
[194]1107 sprintf(s, "%s / %s", tf, tb);
[551]1108 WinSetDlgItemText(dcd->hwndClient, DIR_SELECTED, s);
[155]1109
[194]1110 if (hwndStatus &&
[551]1111 dcd->hwndFrame == WinQueryActiveWindow(dcd->hwndParent)) {
[444]1112 if (hwndMain) {
[194]1113 pci = WinSendMsg(hwnd, CM_QUERYRECORDEMPHASIS,
[551]1114 MPFROMLONG(CMA_FIRST), MPFROMSHORT(CRA_CURSORED));
[194]1115 if (pci && (INT) pci != -1)
[551]1116 PostMsg(hwndMain, UM_LOADFILE, MPFROMP(pci->szFileName), MPVOID);
[194]1117 else
1118 PostMsg(hwndMain, UM_LOADFILE, MPVOID, MPVOID);
1119 }
1120 if (!fMoreButtons)
1121 sprintf(s, " %s%s%s%s", GetPString(IDS_COLLECTORTEXT),
[551]1122 (*dcd->mask.szMask || dcd->mask.antiattr ||
1123 dcd->mask.attrFile != ALLATTRS) ? " (" : NullStr,
1124 (*dcd->mask.szMask) ? dcd->mask.szMask :
1125 (dcd->mask.antiattr ||
1126 dcd->mask.attrFile != ALLATTRS) ?
[194]1127 GetPString(IDS_ATTRTEXT) : NullStr,
[551]1128 (*dcd->mask.szMask || dcd->mask.antiattr ||
1129 dcd->mask.attrFile != ALLATTRS) ? ")" : NullStr);
[194]1130 else
1131 strcpy(s, GetPString(IDS_COLLECTORTEXT));
1132 WinSetWindowText(hwndStatus, s);
1133 if (!pci)
1134 pci = WinSendMsg(hwnd, CM_QUERYRECORDEMPHASIS,
[551]1135 MPFROMLONG(CMA_FIRST), MPFROMSHORT(CRA_CURSORED));
[444]1136 if (pci && (INT) pci != -1) {
[280]1137 BOOL fStatus2Used = FALSE;
[551]1138
[444]1139 if (fSplitStatus && hwndStatus2) {
[551]1140 if (pci->attrFile & FILE_DIRECTORY)
1141 p = pci->pszFileName;
[444]1142 else {
[551]1143 p = strrchr(pci->szFileName, '\\');
[444]1144 if (p) {
[194]1145 if (*(p + 1))
1146 p++;
1147 else
[551]1148 p = pci->pszFileName;
[155]1149 }
[194]1150 else
[551]1151 p = pci->pszFileName;
[194]1152 }
[551]1153 CommaFmtULL(tb, sizeof(tb), pci->cbFile + pci->easize, ' ');
[444]1154 if (!fMoreButtons) {
[194]1155 sprintf(s, " %s %04u/%02u/%02u %02u:%02u:%02u [%s] %s",
[551]1156 tb, pci->date.year, pci->date.month,
1157 pci->date.day, pci->time.hours, pci->time.minutes,
1158 pci->time.seconds, pci->pszDispAttr, p);
[194]1159 }
[444]1160 else {
[551]1161 if (pci->cbFile + pci->easize > 1024)
1162 CommaFmtULL(tf, sizeof(tf), pci->cbFile + pci->easize, 'K');
[194]1163 else
1164 *tf = 0;
1165 sprintf(s, GetPString(IDS_STATUSSIZETEXT),
[551]1166 tb, *tf ? " (" : NullStr, tf, *tf ? ")" : NullStr);
[194]1167 }
1168 WinSetWindowText(hwndStatus2, s);
[280]1169 fStatus2Used = TRUE;
[194]1170 }
[444]1171 if (fMoreButtons) {
[551]1172 WinSetWindowText(hwndName, pci->pszFileName);
[194]1173 sprintf(s, "%04u/%02u/%02u %02u:%02u:%02u",
[551]1174 pci->date.year, pci->date.month,
1175 pci->date.day, pci->time.hours, pci->time.minutes,
1176 pci->time.seconds);
[194]1177 WinSetWindowText(hwndDate, s);
[551]1178 WinSetWindowText(hwndAttr, pci->pszDispAttr);
[194]1179 }
[551]1180 if (dcd->amextracted && hwndStatus2 && !fStatus2Used)
[280]1181 WinSetWindowText(hwndStatus2, GetPString(IDS_INSEEKSCANTEXT)); // Say working
[194]1182 }
[444]1183 else {
[194]1184 if (hwndStatus2)
1185 WinSetWindowText(hwndStatus2, NullStr);
[444]1186 if (fMoreButtons) {
[194]1187 WinSetWindowText(hwndName, NullStr);
1188 WinSetWindowText(hwndDate, NullStr);
1189 WinSetWindowText(hwndAttr, NullStr);
1190 }
1191 }
[2]1192 }
[194]1193 }
1194 return 0;
[2]1195
[194]1196 case UM_CONTAINER_FILLED:
[551]1197 DosBeep(1000, 50); // Wake up user?
[194]1198 WinSendMsg(hwnd,
1199 CM_INVALIDATERECORD,
[551]1200 MPVOID, MPFROM2SHORT(0, CMA_ERASE | CMA_REPOSITION));
[471]1201 disable_menuitem(WinWindowFromID(WinQueryWindow(hwndMain, QW_PARENT),
[551]1202 FID_MENU), IDM_GREP, FALSE);
1203 PostMsg(hwnd, UM_RESCAN, MPVOID, MPVOID);
[444]1204 if (dcd) {
[551]1205 dcd->stopflag = 0;
1206 dcd->amextracted = FALSE; // Say not busy
1207 if (dcd->namecanchange) {
1208 if (!PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID))
1209 WinSendMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
[2]1210 }
[194]1211 else
1212 WinSetWindowPos(WinQueryWindow(WinQueryWindow(hwnd, QW_PARENT),
1213 QW_PARENT),
1214 HWND_TOP,
[551]1215 0, 0, 0, 0, SWP_SHOW | SWP_RESTORE | SWP_ZORDER);
[194]1216 }
1217 return 0;
[2]1218
[194]1219 case UM_SETUP:
[444]1220 if (dcd) {
[551]1221 if (!dcd->hwndObject) {
[471]1222 /* first time through -- set things up */
[2]1223
[194]1224 CNRINFO cnri;
[2]1225
[194]1226 RestorePresParams(hwnd, "Collector");
1227 LoadDetailsSwitches("Collector", dcd);
[471]1228
[551]1229 dcd->amextracted = FALSE; // Say not busy
1230 dcd->stopflag = 0;
[194]1231 memset(&cnri, 0, sizeof(CNRINFO));
1232 cnri.cb = sizeof(CNRINFO);
1233 WinSendMsg(hwnd, CM_QUERYCNRINFO, MPFROMP(&cnri),
1234 MPFROMLONG(sizeof(CNRINFO)));
1235 cnri.cyLineSpacing = 0;
1236 cnri.cxTreeIndent = 12L;
[2]1237
[551]1238 cnri.flWindowAttr &= (~(CV_ICON | CV_TREE | CV_TEXT | CV_DETAIL));
[194]1239 cnri.flWindowAttr |= (CV_NAME | CA_DETAILSVIEWTITLES |
1240 CV_MINI | CV_FLOW);
1241 cnri.pSortRecord = (PVOID) SortCollectorCnr;
[2]1242
[444]1243 size = sizeof(ULONG);
1244 PrfQueryProfileData(fmprof, appname, "CollectorflWindowAttr",
1245 (PVOID) & cnri.flWindowAttr, &size);
1246 size = sizeof(MASK);
1247 if (PrfQueryProfileSize(fmprof, appname, "CollectorFilter", &size) &&
[551]1248 size) {
1249 PrfQueryProfileData(fmprof, appname, "CollectorFilter", &dcd->mask,
[444]1250 &size);
[551]1251 SetMask(NULL, &dcd->mask);
[194]1252 }
[444]1253 else {
[551]1254 dcd->mask.attrFile = (FILE_NORMAL | FILE_READONLY |
1255 FILE_DIRECTORY | FILE_HIDDEN |
1256 FILE_SYSTEM | FILE_ARCHIVED);
1257 dcd->mask.antiattr = 0;
[444]1258 }
1259
[551]1260 *(dcd->mask.prompt) = 0;
[444]1261
[194]1262 cnri.flWindowAttr |= CV_FLOW;
1263 cnri.flWindowAttr &= (~(CA_MIXEDTARGETEMPH | CA_ORDEREDTARGETEMPH));
[551]1264 dcd->flWindowAttr = cnri.flWindowAttr;
[194]1265 WinSendMsg(hwnd, CM_SETCNRINFO, MPFROMP(&cnri),
1266 MPFROMLONG(CMA_FLWINDOWATTR | CMA_LINESPACING |
1267 CMA_CXTREEINDENT | CMA_PSORTRECORD));
1268 SetCnrCols(hwnd, FALSE);
1269 AdjustCnrColsForPref(hwnd, NULL, dcd, FALSE);
[2]1270
[197]1271 /* fix splitbar for collector container */
1272 cnri.xVertSplitbar = DIR_SPLITBAR_OFFSET - 32;
1273 size = sizeof(LONG);
1274 PrfQueryProfileData(fmprof, appname, "CollectorCnrSplitBar",
1275 &cnri.xVertSplitbar, &size);
1276 if (cnri.xVertSplitbar <= 0)
[194]1277 cnri.xVertSplitbar = DIR_SPLITBAR_OFFSET - 32;
[197]1278 WinSendMsg(hwnd, CM_SETCNRINFO, MPFROMP(&cnri),
1279 MPFROMLONG(CMA_XVERTSPLITBAR));
1280
[444]1281 if (_beginthread(MakeObjWin, NULL, 245760, (PVOID) dcd) == -1) {
[551]1282 Runtime_Error(pszSrcFile, __LINE__,
1283 GetPString(IDS_COULDNTSTARTTHREADTEXT));
[194]1284 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
1285 return 0;
1286 }
1287 else
1288 DosSleep(64L);
[2]1289 }
[194]1290 SayFilter(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
[551]1291 DIR_FILTER), &dcd->mask, FALSE);
[194]1292 SaySort(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
1293 DIR_SORT), CollectorsortFlags, FALSE);
1294 SayView(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
[551]1295 DIR_VIEW), dcd->flWindowAttr);
[194]1296 }
[444]1297 else {
[194]1298 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
[2]1299 return 0;
[194]1300 }
1301 return 0;
[2]1302
[194]1303 case WM_MENUEND:
[444]1304 if (dcd) {
[551]1305 HWND hwndMenu = (HWND) mp2;
[2]1306
[194]1307 if (hwndMenu == CollectorCnrMenu || hwndMenu == CollectorFileMenu ||
[551]1308 hwndMenu == CollectorDirMenu) {
[194]1309 MarkAll(hwnd, TRUE, FALSE, TRUE);
[551]1310 if (dcd->cnremphasized) {
[194]1311 WinSendMsg(hwnd, CM_SETRECORDEMPHASIS, MPVOID,
1312 MPFROM2SHORT(FALSE, CRA_SOURCE));
[551]1313 dcd->cnremphasized = FALSE;
[194]1314 }
[2]1315 }
[194]1316 }
1317 break;
[2]1318
[194]1319 case UM_OPENWINDOWFORME:
[444]1320 if (dcd) {
[551]1321 if (mp1 && !IsFile((CHAR *) mp1))
1322 OpenDirCnr(HWND_DESKTOP, hwndMain, dcd->hwndFrame, FALSE, (PSZ) mp1);
[471]1323 else if (mp1 && IsFile(mp1) == 1)
[194]1324 StartArcCnr(HWND_DESKTOP,
[551]1325 dcd->hwndFrame, (CHAR *) mp1, 4, (ARC_TYPE *) mp2);
[194]1326 }
1327 return 0;
[2]1328
[194]1329 case MM_PORTHOLEINIT:
[444]1330 if (dcd) {
1331 switch (SHORT1FROMMP(mp1)) {
[194]1332 case 0:
1333 case 1:
1334 {
1335 ULONG wmsg;
[2]1336
[194]1337 wmsg = (SHORT1FROMMP(mp1) == 0) ? UM_FILESMENU : UM_VIEWSMENU;
[551]1338 PortholeInit((HWND) WinSendMsg(dcd->hwndClient, wmsg, MPVOID,
[194]1339 MPVOID), mp1, mp2);
1340 }
1341 break;
[2]1342 }
[194]1343 }
1344 break;
[2]1345
[194]1346 case UM_INITMENU:
1347 case WM_INITMENU:
[444]1348 if (dcd) {
1349 switch (SHORT1FROMMP(mp1)) {
[194]1350 case IDM_VIEWSMENU:
[551]1351 SetViewMenu((HWND) mp2, dcd->flWindowAttr);
1352 WinEnableMenuItem((HWND) mp2, IDM_RESELECT,
1353 (dcd->lastselection != NULL));
[194]1354 break;
[2]1355
[194]1356 case IDM_DETAILSSETUP:
[551]1357 SetDetailsSwitches((HWND) mp2, dcd);
[194]1358 break;
[2]1359
[194]1360 case IDM_COMMANDSMENU:
[551]1361 SetupCommandMenu((HWND) mp2, hwnd);
[194]1362 break;
[2]1363
[194]1364 case IDM_SORTSUBMENU:
[551]1365 SetSortChecks((HWND) mp2, CollectorsortFlags);
[194]1366 break;
[2]1367 }
[551]1368 dcd->hwndLastMenu = (HWND) mp2;
[194]1369 }
1370 if (msg == WM_INITMENU)
1371 break;
1372 return 0;
[2]1373
[194]1374 case UM_COLLECTFROMFILE:
[444]1375 if (mp1) {
1376 if (!dcd) {
1377 free(mp1);
1378 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
1379 }
1380 else {
[551]1381 if (!PostMsg(dcd->hwndObject, UM_COLLECTFROMFILE, mp1, mp2)) {
[444]1382 Runtime_Error(pszSrcFile, __LINE__, "PostMsg");
[194]1383 free(mp1);
1384 }
[2]1385 }
[194]1386 }
1387 return 0;
[2]1388
[194]1389 case UM_COMMAND:
[444]1390 if (mp1) {
1391 if (dcd) {
[551]1392 if (!PostMsg(dcd->hwndObject, UM_COMMAND, mp1, mp2)) {
[444]1393 Runtime_Error(pszSrcFile, __LINE__, "PostMsg");
[194]1394 FreeListInfo((LISTINFO *) mp1);
1395 }
1396 else
1397 return (MRESULT) TRUE;
[2]1398 }
[194]1399 else
1400 FreeListInfo((LISTINFO *) mp1);
1401 }
1402 return 0;
[2]1403
[194]1404 case UM_NOTIFY:
1405 if (mp2)
1406 AddNote((CHAR *) mp2);
1407 return 0;
[2]1408
[194]1409 case WM_COMMAND:
1410 DosError(FERR_DISABLEHARDERR);
[444]1411 if (dcd) {
1412 switch (SHORT1FROMMP(mp1)) {
[194]1413 case IDM_SETTARGET:
1414 SetTargetDir(hwnd, FALSE);
1415 break;
[2]1416
[194]1417 case IDM_CONTEXTMENU:
1418 {
1419 PCNRITEM pci;
[2]1420
[194]1421 pci = (PCNRITEM) CurrentRecord(hwnd);
1422 PostMsg(hwnd, WM_CONTROL, MPFROM2SHORT(COLLECTOR_CNR,
[551]1423 CN_CONTEXTMENU),
1424 MPFROMP(pci));
[194]1425 }
1426 break;
[2]1427
[194]1428 case IDM_SHOWALLFILES:
1429 {
1430 PCNRITEM pci;
[2]1431
[471]1432 pci = WinSendMsg(hwnd,
1433 CM_QUERYRECORDEMPHASIS,
[551]1434 MPFROMLONG(CMA_FIRST), MPFROMSHORT(CRA_CURSORED));
[444]1435 if (pci && (INT) pci != -1) {
[194]1436 static CHAR dirname[CCHMAXPATH];
[2]1437
[551]1438 strcpy(dirname, pci->szFileName);
[194]1439 MakeValidDir(dirname);
1440 StartSeeAll(HWND_DESKTOP, FALSE, dirname);
1441 }
1442 }
1443 break;
[2]1444
[194]1445 case IDM_BEGINEDIT:
1446 OpenEdit(hwnd);
1447 break;
[2]1448
[194]1449 case IDM_ENDEDIT:
1450 WinSendMsg(hwnd, CM_CLOSEEDIT, MPVOID, MPVOID);
1451 break;
[2]1452
[194]1453 case IDM_SHOWSELECT:
[551]1454 QuickPopup(hwnd, dcd,
1455 CheckMenu(&CollectorCnrMenu, COLLECTORCNR_POPUP),
[194]1456 IDM_SELECTSUBMENU);
1457 break;
[2]1458
[194]1459 case IDM_SHOWSORT:
[551]1460 QuickPopup(hwnd, dcd,
1461 CheckMenu(&CollectorCnrMenu, COLLECTORCNR_POPUP),
[194]1462 IDM_SORTSUBMENU);
1463 break;
[2]1464
[194]1465 case IDM_VIEWORARC:
1466 {
1467 SWP swp;
1468 PCNRITEM pci;
[2]1469
[194]1470 pci = (PCNRITEM) WinSendMsg(hwnd, CM_QUERYRECORDEMPHASIS,
1471 MPFROMLONG(CMA_FIRST),
1472 MPFROMSHORT(CRA_CURSORED));
[444]1473 if (pci && (INT) pci != -1) {
[551]1474 WinQueryWindowPos(dcd->hwndFrame, &swp);
1475 DefaultViewKeys(hwnd, dcd->hwndFrame, dcd->hwndParent, &swp,
1476 pci->szFileName);
[194]1477 }
1478 }
1479 break;
[2]1480
[194]1481 case IDM_SEEALL:
[551]1482 StartSeeAll(HWND_DESKTOP, FALSE, NULL);
[194]1483 break;
[2]1484
[194]1485 case IDM_COLLECTSELECT:
1486 {
1487 CHAR filename[CCHMAXPATH], *p, *pp;
[2]1488
[194]1489 strcpy(filename, "*.LST");
1490 size = CCHMAXPATH;
1491 PrfQueryProfileData(fmprof, appname, "SaveToListName",
1492 filename, &size);
1493 pp = strrchr(filename, '\\');
1494 if (!pp)
1495 pp = filename;
1496 p = strrchr(pp, '.');
[444]1497 if (p && *(p + 1) && p > pp + 1) {
[194]1498 if (pp > filename)
1499 pp++;
1500 *pp = '*';
1501 pp++;
1502 if (p > pp)
1503 memmove(pp, p, strlen(p) + 1);
1504 }
[444]1505 if (insert_filename(hwnd, filename, FALSE, FALSE)) {
[551]1506 p = xstrdup(filename, pszSrcFile, __LINE__);
[444]1507 if (p) {
[194]1508 if (!PostMsg(hwnd, UM_COLLECTFROMFILE, MPFROMP(p), MPVOID))
1509 free(p);
1510 }
1511 }
1512 }
1513 break;
[2]1514
[194]1515 case IDM_NOTEBOOK:
[551]1516 if (!ParentIsDesktop(dcd->hwndParent, dcd->hwndParent))
1517 PostMsg(dcd->hwndParent, msg, mp1, mp2);
[194]1518 else
1519 WinDlgBox(HWND_DESKTOP, hwnd, CfgDlgProc, FM3ModHandle,
1520 CFG_FRAME, (PVOID) "Collector");
1521 break;
[2]1522
[194]1523 case IDM_RESELECT:
[551]1524 SelectList(hwnd, FALSE, FALSE, FALSE, NULL, NULL, dcd->lastselection);
[194]1525 break;
[2]1526
[194]1527 case IDM_HELP:
1528 if (hwndHelp)
1529 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
1530 MPFROM2SHORT(HELP_COLLECT, 0),
1531 MPFROMSHORT(HM_RESOURCEID));
1532 break;
[2]1533
[194]1534 case IDM_SORTNONE:
1535 case IDM_SORTSMARTNAME:
1536 case IDM_SORTNAME:
1537 case IDM_SORTFILENAME:
1538 case IDM_SORTSIZE:
1539 case IDM_SORTEASIZE:
1540 case IDM_SORTFIRST:
1541 case IDM_SORTLAST:
1542 case IDM_SORTLWDATE:
1543 case IDM_SORTLADATE:
1544 case IDM_SORTCRDATE:
1545 case IDM_SORTSUBJECT:
[197]1546 savedSortFlags = CollectorsortFlags;
[194]1547 CollectorsortFlags &= (SORT_REVERSE | SORT_DIRSFIRST | SORT_DIRSLAST);
1548 case IDM_SORTDIRSFIRST:
1549 case IDM_SORTDIRSLAST:
1550 case IDM_SORTREVERSE:
[444]1551 switch (SHORT1FROMMP(mp1)) {
[194]1552 case IDM_SORTSUBJECT:
1553 CollectorsortFlags |= SORT_SUBJECT;
1554 break;
1555 case IDM_SORTNONE:
1556 CollectorsortFlags |= SORT_NOSORT;
1557 break;
1558 case IDM_SORTSMARTNAME:
[197]1559 if (~savedSortFlags & SORT_FILENAME)
[194]1560 CollectorsortFlags |= SORT_FILENAME;
1561 break;
1562 case IDM_SORTFILENAME:
1563 CollectorsortFlags |= SORT_FILENAME;
1564 break;
1565 case IDM_SORTSIZE:
1566 CollectorsortFlags |= SORT_SIZE;
1567 break;
1568 case IDM_SORTEASIZE:
1569 CollectorsortFlags |= SORT_EASIZE;
1570 break;
1571 case IDM_SORTFIRST:
1572 CollectorsortFlags |= SORT_FIRSTEXTENSION;
1573 break;
1574 case IDM_SORTLAST:
1575 CollectorsortFlags |= SORT_LASTEXTENSION;
1576 break;
1577 case IDM_SORTLWDATE:
1578 CollectorsortFlags |= SORT_LWDATE;
1579 break;
1580 case IDM_SORTLADATE:
1581 CollectorsortFlags |= SORT_LADATE;
1582 break;
1583 case IDM_SORTCRDATE:
1584 CollectorsortFlags |= SORT_CRDATE;
1585 break;
1586 case IDM_SORTDIRSFIRST:
1587 if (CollectorsortFlags & SORT_DIRSFIRST)
1588 CollectorsortFlags &= (~SORT_DIRSFIRST);
[444]1589 else {
[194]1590 CollectorsortFlags |= SORT_DIRSFIRST;
1591 CollectorsortFlags &= (~SORT_DIRSLAST);
1592 }
1593 break;
1594 case IDM_SORTDIRSLAST:
1595 if (CollectorsortFlags & SORT_DIRSLAST)
1596 CollectorsortFlags &= (~SORT_DIRSLAST);
[444]1597 else {
[194]1598 CollectorsortFlags |= SORT_DIRSLAST;
1599 CollectorsortFlags &= (~SORT_DIRSFIRST);
1600 }
1601 break;
1602 case IDM_SORTREVERSE:
1603 if (CollectorsortFlags & SORT_REVERSE)
1604 CollectorsortFlags &= (~SORT_REVERSE);
1605 else
1606 CollectorsortFlags |= SORT_REVERSE;
1607 break;
1608 }
1609 PrfWriteProfileData(fmprof, appname, "CollectorSort",
1610 &CollectorsortFlags, sizeof(INT));
1611 WinSendMsg(hwnd, CM_SORTRECORD, MPFROMP(SortCollectorCnr), MPVOID);
1612 SaySort(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
1613 DIR_SORT), CollectorsortFlags, FALSE);
1614 break;
[2]1615
[194]1616 case IDM_COLLECTFROMCLIP:
1617 {
1618 LISTINFO *li;
[2]1619
[551]1620 li = xmallocz(sizeof(LISTINFO), pszSrcFile, __LINE__);
[444]1621 if (li) {
[551]1622 li->list = ListFromClipboard(hwnd);
1623 if (!li->list || !li->list[0])
[194]1624 FreeListInfo(li);
[444]1625 else {
[551]1626 li->type = IDM_COLLECT;
1627 if (!PostMsg(dcd->hwndObject, UM_COLLECT, MPFROMP(li), MPVOID))
[194]1628 FreeListInfo(li);
1629 }
1630 }
1631 }
1632 break;
[2]1633
[194]1634 case IDM_REMOVE:
[551]1635 if (fAutoView && hwndMain)
1636 PostMsg(hwndMain, UM_LOADFILE, MPVOID, MPVOID);
1637 dcd->suspendview = 1;
1638 RemoveAll(hwnd, &dcd->ullTotalBytes, &dcd->totalfiles);
1639 dcd->suspendview = 0;
1640 PostMsg(hwnd, UM_RESCAN, MPVOID, MPVOID);
[194]1641 break;
[2]1642
[194]1643 case IDM_CLEARCNR:
1644 {
1645 PCNRITEM pci;
[2]1646
[194]1647 pci = (PCNRITEM) WinSendMsg(hwnd,
1648 CM_QUERYRECORD,
1649 MPVOID,
[551]1650 MPFROM2SHORT(CMA_FIRST, CMA_ITEMORDER));
[444]1651 if (pci && (INT) pci != -1) {
[194]1652 WinSendMsg(hwnd,
1653 CM_REMOVERECORD,
[551]1654 MPVOID, MPFROM2SHORT(0, CMA_FREE | CMA_INVALIDATE));
1655 dcd->ullTotalBytes = dcd->selectedbytes = dcd->selectedfiles =
1656 dcd->totalfiles = 0L;
1657 PostMsg(hwnd, UM_RESCAN, MPVOID, MPVOID);
[194]1658 }
1659 }
1660 break;
[2]1661
[194]1662 case DID_CANCEL:
[551]1663 if (dcd->amextracted)
1664 dcd->stopflag = 1; // Request cancel
[194]1665 break;
[2]1666
[194]1667 case IDM_COLLECTOR:
[444]1668 if (mp2) {
[194]1669 LISTINFO *li;
[2]1670
[551]1671 li = xmallocz(sizeof(LISTINFO), pszSrcFile, __LINE__);
[444]1672 if (li) {
[551]1673 li->list = mp2;
1674 if (!li->list || !li->list[0])
[194]1675 FreeListInfo(li);
[444]1676 else {
[551]1677 li->type = IDM_COLLECT;
1678 if (!PostMsg(dcd->hwndObject, UM_COLLECT, MPFROMP(li), MPVOID))
[194]1679 FreeListInfo(li);
1680 }
1681 }
1682 else
1683 FreeList(mp2);
1684 }
1685 break;
[2]1686
[194]1687 case IDM_UNDELETE:
1688 {
1689 PCNRITEM pci;
1690 CHAR path[CCHMAXPATH];
[2]1691
[194]1692 pci = (PCNRITEM) CurrentRecord(hwnd);
[444]1693 if (pci) {
[551]1694 strcpy(path, pci->szFileName);
[194]1695 MakeValidDir(path);
1696 WinDlgBox(HWND_DESKTOP, hwnd, UndeleteDlgProc, FM3ModHandle,
1697 UNDEL_FRAME, MPFROMP(path));
1698 }
1699 }
1700 break;
[2]1701
[194]1702 case IDM_GREP:
[551]1703 if (dcd->amextracted)
[444]1704 Runtime_Error(pszSrcFile, __LINE__, "busy");
1705 else {
[194]1706 if (WinDlgBox(HWND_DESKTOP, hwnd, GrepDlgProc,
[551]1707 FM3ModHandle, GREP_FRAME, (PVOID) & hwnd)) {
1708 dcd->amextracted = TRUE; // Say busy scanning
1709 disable_menuitem(WinWindowFromID
1710 (WinQueryWindow(hwndMain, QW_PARENT), FID_MENU),
1711 IDM_GREP, TRUE);
[194]1712 PostMsg(hwnd, UM_RESCAN, MPVOID, MPVOID);
1713 }
1714 }
1715 break;
[2]1716
[194]1717 case IDM_RESORT:
1718 WinSendMsg(hwnd, CM_SORTRECORD, MPFROMP(SortCollectorCnr), MPVOID);
1719 break;
[2]1720
[194]1721 case IDM_FILTER:
1722 {
1723 BOOL empty = FALSE;
1724 PCNRITEM pci;
1725 CHAR *p;
[2]1726
[551]1727 if (!*dcd->mask.szMask) {
[194]1728 empty = TRUE;
1729 pci = (PCNRITEM) CurrentRecord(hwnd);
[551]1730 if (pci && !(pci->attrFile & FILE_DIRECTORY)) {
1731 p = strrchr(pci->szFileName, '\\');
[444]1732 if (p) {
[194]1733 p++;
[551]1734 strcpy(dcd->mask.szMask, p);
[194]1735 }
1736 }
1737 }
[551]1738 *(dcd->mask.prompt) = 0;
[2]1739
[194]1740 if (WinDlgBox(HWND_DESKTOP, hwnd, PickMaskDlgProc,
[551]1741 FM3ModHandle, MSK_FRAME, MPFROMP(&dcd->mask))) {
[197]1742 size = sizeof(MASK);
1743 PrfWriteProfileData(fmprof, appname, "CollectorFilter",
[551]1744 &dcd->mask, size);
1745 dcd->suspendview = 1;
1746 WinSendMsg(hwnd, CM_FILTER, MPFROMP(Filter), MPFROMP(&dcd->mask));
1747 dcd->suspendview = 0;
[444]1748 if (fAutoView && hwndMain) {
[194]1749 pci = WinSendMsg(hwnd, CM_QUERYRECORDEMPHASIS,
1750 MPFROMLONG(CMA_FIRST),
1751 MPFROMSHORT(CRA_CURSORED));
1752 if (pci && (INT) pci != -1 &&
[551]1753 (!(driveflags[toupper(*pci->szFileName) - 'A'] &
1754 DRIVE_SLOW)))
1755 WinSendMsg(hwndMain, UM_LOADFILE, MPFROMP(pci->szFileName),
[194]1756 MPVOID);
1757 else
1758 WinSendMsg(hwndMain, UM_LOADFILE, MPVOID, MPVOID);
1759 }
1760 PostMsg(hwnd, UM_RESCAN, MPVOID, MPVOID);
1761 }
1762 else if (empty)
[551]1763 *dcd->mask.szMask = 0;
[194]1764 SayFilter(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
[551]1765 DIR_FILTER), &dcd->mask, FALSE);
[194]1766 }
1767 break;
[2]1768
[194]1769 case IDM_HIDEALL:
1770 if (fAutoView && hwndMain)
1771 PostMsg(hwndMain, UM_LOADFILE, MPVOID, MPVOID);
[551]1772 dcd->suspendview = 1;
[194]1773 HideAll(hwnd);
[551]1774 dcd->suspendview = 0;
[194]1775 PostMsg(hwnd, UM_RESCAN, MPVOID, MPVOID);
1776 break;
[2]1777
[194]1778 case IDM_SELECTLIST:
1779 case IDM_SELECTALL:
1780 case IDM_DESELECTALL:
1781 case IDM_SELECTALLFILES:
1782 case IDM_DESELECTALLFILES:
1783 case IDM_SELECTALLDIRS:
1784 case IDM_DESELECTALLDIRS:
1785 case IDM_SELECTMASK:
1786 case IDM_DESELECTMASK:
1787 case IDM_INVERT:
1788 case IDM_SELECTCLIP:
1789 case IDM_DESELECTCLIP:
1790 {
1791 PCNRITEM pci;
[2]1792
[194]1793 pci = (PCNRITEM) CurrentRecord(hwnd);
1794 if ((INT) pci == -1)
1795 pci = NULL;
[444]1796 if (SHORT1FROMMP(mp1) == IDM_HIDEALL) {
1797 if (pci) {
[551]1798 if (!(pci->rc.flRecordAttr & CRA_SELECTED))
1799 pci->rc.flRecordAttr |= CRA_FILTERED;
[194]1800 WinSendMsg(hwnd, CM_INVALIDATERECORD, MPFROMP(&pci),
1801 MPFROM2SHORT(1, CMA_ERASE | CMA_REPOSITION));
1802 break;
1803 }
1804 }
[551]1805 PostMsg(dcd->hwndObject, UM_SELECT, mp1, MPFROMP(pci));
[194]1806 }
1807 break;
[2]1808
[194]1809 case IDM_RESCAN:
[551]1810 PostMsg(dcd->hwndObject, UM_RESCAN, MPVOID, MPVOID);
[194]1811 break;
[2]1812
[194]1813 case IDM_SHOWLNAMES:
1814 case IDM_SHOWSUBJECT:
1815 case IDM_SHOWEAS:
1816 case IDM_SHOWSIZE:
1817 case IDM_SHOWICON:
1818 case IDM_SHOWLWDATE:
1819 case IDM_SHOWLWTIME:
1820 case IDM_SHOWLADATE:
1821 case IDM_SHOWLATIME:
1822 case IDM_SHOWCRDATE:
1823 case IDM_SHOWCRTIME:
1824 case IDM_SHOWATTR:
[551]1825 AdjustDetailsSwitches(hwnd, dcd->hwndLastMenu,
[194]1826 SHORT1FROMMP(mp1), NULL,
1827 "Collector", dcd, FALSE);
1828 break;
[2]1829
[194]1830 case IDM_ICON:
1831 case IDM_TEXT:
1832 case IDM_DETAILS:
1833 case IDM_NAME:
1834 case IDM_MINIICONS:
1835 case IDM_DETAILSTITLES:
1836 {
1837 CNRINFO cnri;
[2]1838
[194]1839 memset(&cnri, 0, sizeof(CNRINFO));
1840 cnri.cb = sizeof(CNRINFO);
1841 WinSendMsg(hwnd, CM_QUERYCNRINFO, MPFROMP(&cnri),
1842 MPFROMLONG(sizeof(CNRINFO)));
[444]1843 switch (SHORT1FROMMP(mp1)) {
[194]1844 case IDM_ICON:
1845 cnri.flWindowAttr &= (~(CV_ICON | CV_TREE | CV_TEXT |
1846 CV_DETAIL | CV_NAME));
1847 cnri.flWindowAttr |= CV_ICON;
1848 break;
1849 case IDM_NAME:
1850 cnri.flWindowAttr &= (~(CV_ICON | CV_TREE | CV_TEXT |
1851 CV_DETAIL | CV_NAME));
1852 cnri.flWindowAttr |= CV_NAME;
1853 break;
1854 case IDM_TEXT:
1855 cnri.flWindowAttr &= (~(CV_ICON | CV_TREE | CV_TEXT |
1856 CV_DETAIL | CV_NAME));
1857 cnri.flWindowAttr |= CV_TEXT;
1858 break;
1859 case IDM_DETAILS:
1860 cnri.flWindowAttr &= (~(CV_ICON | CV_TREE | CV_TEXT |
1861 CV_DETAIL | CV_NAME));
1862 cnri.flWindowAttr |= CV_DETAIL;
1863 break;
1864 case IDM_MINIICONS:
1865 if (cnri.flWindowAttr & CV_MINI)
1866 cnri.flWindowAttr &= (~CV_MINI);
1867 else
1868 cnri.flWindowAttr |= CV_MINI;
1869 break;
1870 case IDM_DETAILSTITLES:
1871 if (cnri.flWindowAttr & CA_DETAILSVIEWTITLES)
1872 cnri.flWindowAttr &= (~CA_DETAILSVIEWTITLES);
1873 else
1874 cnri.flWindowAttr |= CA_DETAILSVIEWTITLES;
1875 break;
1876 }
[551]1877 cnri.flWindowAttr &= (~(CA_ORDEREDTARGETEMPH | CA_MIXEDTARGETEMPH));
[194]1878 cnri.flWindowAttr |= CV_FLOW;
[551]1879 dcd->flWindowAttr = cnri.flWindowAttr;
[194]1880 PrfWriteProfileData(fmprof, appname, "CollectorflWindowAttr",
1881 &cnri.flWindowAttr, sizeof(ULONG));
1882 WinSendMsg(hwnd, CM_SETCNRINFO, MPFROMP(&cnri),
1883 MPFROMLONG(CMA_FLWINDOWATTR));
1884 WinSendMsg(hwnd, CM_INVALIDATERECORD, MPVOID,
1885 MPFROM2SHORT(0, CMA_ERASE | CMA_REPOSITION));
1886 SayView(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
[551]1887 DIR_VIEW), dcd->flWindowAttr);
[194]1888 }
1889 break;
[2]1890
[194]1891 case IDM_SAVETOLIST:
1892 WinDlgBox(HWND_DESKTOP, hwnd, SaveListDlgProc, FM3ModHandle,
1893 SAV_FRAME, MPFROMP(&hwnd));
1894 break;
[2]1895
[194]1896 case IDM_SIZES:
1897 {
1898 PCNRITEM pci;
[2]1899
[194]1900 pci = (PCNRITEM) CurrentRecord(hwnd);
1901 if (pci && (INT) pci != -1)
1902 WinDlgBox(HWND_DESKTOP, HWND_DESKTOP, DirSizeProc, FM3ModHandle,
[551]1903 DSZ_FRAME, pci->szFileName);
[194]1904 }
1905 break;
[2]1906
[194]1907 case IDM_MKDIR:
1908 {
1909 PCNRITEM pci;
[2]1910
[194]1911 pci = (PCNRITEM) CurrentRecord(hwnd);
[551]1912 PMMkDir(dcd->hwndParent, (pci && (INT) pci != -1) ?
1913 pci->szFileName : NULL, FALSE);
[194]1914 }
1915 break;
[2]1916
[194]1917 case IDM_DOITYOURSELF:
1918 case IDM_UPDATE:
1919 case IDM_COLLECTFROMFILE:
1920 case IDM_OPENWINDOW:
1921 case IDM_OPENSETTINGS:
1922 case IDM_OPENDEFAULT:
1923 case IDM_OPENICON:
1924 case IDM_OPENDETAILS:
1925 case IDM_OPENTREE:
1926 case IDM_OBJECT:
1927 case IDM_SHADOW:
1928 case IDM_SHADOW2:
1929 case IDM_DELETE:
1930 case IDM_PERMDELETE:
1931 case IDM_PRINT:
1932 case IDM_ATTRS:
1933 case IDM_INFO:
1934 case IDM_COPY:
1935 case IDM_MOVE:
1936 case IDM_WPSCOPY:
1937 case IDM_WPSMOVE:
1938 case IDM_COPYPRESERVE:
1939 case IDM_MOVEPRESERVE:
1940 case IDM_WILDCOPY:
1941 case IDM_WILDMOVE:
1942 case IDM_RENAME:
1943 case IDM_COMPARE:
1944 case IDM_EAS:
1945 case IDM_SUBJECT:
1946 case IDM_VIEW:
1947 case IDM_VIEWTEXT:
1948 case IDM_VIEWBINARY:
1949 case IDM_VIEWARCHIVE:
1950 case IDM_EDIT:
1951 case IDM_EDITTEXT:
1952 case IDM_EDITBINARY:
1953 case IDM_SAVETOCLIP:
1954 case IDM_APPENDTOCLIP:
1955 case IDM_ARCHIVE:
1956 case IDM_ARCHIVEM:
1957 case IDM_EXTRACT:
1958 case IDM_MCIPLAY:
1959 case IDM_UUDECODE:
1960 case IDM_MERGE:
1961 {
1962 LISTINFO *li;
1963 ULONG action = UM_ACTION;
[2]1964
[551]1965 li = xmallocz(sizeof(LISTINFO), pszSrcFile, __LINE__);
[444]1966 if (li) {
[551]1967 li->type = SHORT1FROMMP(mp1);
1968 li->hwnd = hwnd;
1969 li->list = BuildList(hwnd);
1970 if (li->list) {
[444]1971 switch (SHORT1FROMMP(mp1)) {
[194]1972 case IDM_DOITYOURSELF:
1973 case IDM_APPENDTOCLIP:
1974 case IDM_SAVETOCLIP:
1975 case IDM_ARCHIVE:
1976 case IDM_ARCHIVEM:
1977 case IDM_DELETE:
1978 case IDM_PERMDELETE:
1979 case IDM_ATTRS:
1980 case IDM_PRINT:
1981 case IDM_SHADOW:
1982 case IDM_SHADOW2:
1983 case IDM_OBJECT:
1984 case IDM_VIEW:
1985 case IDM_VIEWTEXT:
1986 case IDM_VIEWBINARY:
1987 case IDM_EDIT:
1988 case IDM_EDITTEXT:
1989 case IDM_EDITBINARY:
1990 case IDM_MCIPLAY:
1991 case IDM_UPDATE:
1992 case IDM_INFO:
1993 case IDM_EAS:
1994 action = UM_MASSACTION;
1995 break;
1996 }
[551]1997 if (li->type == IDM_SHADOW || li->type == IDM_OBJECT ||
1998 li->type == IDM_SHADOW2)
1999 *li->targetpath = 0;
2000 if (!PostMsg(dcd->hwndObject, action, MPFROMP(li), MPVOID)) {
[444]2001 Runtime_Error(pszSrcFile, __LINE__, "PostMsg");
[194]2002 FreeListInfo(li);
2003 }
2004 else if (fUnHilite)
[551]2005 UnHilite(hwnd, TRUE, &dcd->lastselection);
[194]2006 }
2007 else
2008 free(li);
2009 }
2010 }
2011 break;
[2]2012
[194]2013 default:
2014 if (!cmdloaded)
2015 load_commands();
2016 if (SHORT1FROMMP(mp1) >= IDM_COMMANDSTART &&
[551]2017 SHORT1FROMMP(mp1) < IDM_QUICKTOOLSTART) {
[194]2018 INT x;
[2]2019
[194]2020 x = SHORT1FROMMP(mp1) - IDM_COMMANDSTART;
[444]2021 if (x >= 0) {
[194]2022 x++;
2023 RunCommand(hwnd, x);
2024 if (fUnHilite)
[551]2025 UnHilite(hwnd, TRUE, &dcd->lastselection);
[194]2026 }
2027 }
2028 break;
2029 }
2030 }
2031 return 0;
[2]2032
[194]2033 case UM_FIXCNRMLE:
2034 case UM_FIXEDITNAME:
2035 return CommonCnrProc(hwnd, msg, mp1, mp2);
[2]2036
[194]2037 case UM_FILESMENU:
2038 {
2039 PCNRITEM pci;
[551]2040 HWND menuHwnd = (HWND) 0;
[2]2041
[194]2042 pci = (PCNRITEM) CurrentRecord(hwnd);
[444]2043 if (pci && (INT) pci != -1) {
[551]2044 if (pci->attrFile & FILE_DIRECTORY)
[194]2045 menuHwnd = CheckMenu(&CollectorDirMenu, COLLECTORDIR_POPUP);
2046 else
2047 menuHwnd = CheckMenu(&CollectorFileMenu, COLLECTORFILE_POPUP);
[2]2048 }
[194]2049 return MRFROMLONG(menuHwnd);
2050 }
[2]2051
[194]2052 case WM_CONTROL:
2053 DosError(FERR_DISABLEHARDERR);
[444]2054 if (dcd) {
2055 switch (SHORT2FROMMP(mp1)) {
[194]2056 case CN_CONTEXTMENU:
2057 {
2058 PCNRITEM pci = (PCNRITEM) mp2;
[2]2059
[444]2060 if (pci) {
[194]2061 WinSendMsg(hwnd, CM_SETRECORDEMPHASIS, MPFROMP(pci),
2062 MPFROM2SHORT(TRUE, CRA_CURSORED));
2063 MarkAll(hwnd, FALSE, FALSE, TRUE);
[551]2064 if (pci->attrFile & FILE_DIRECTORY)
2065 dcd->hwndLastMenu = CheckMenu(&CollectorDirMenu,
2066 COLLECTORDIR_POPUP);
[194]2067 else
[551]2068 dcd->hwndLastMenu = CheckMenu(&CollectorFileMenu,
2069 COLLECTORFILE_POPUP);
[194]2070 }
[444]2071 else {
[551]2072 dcd->hwndLastMenu = CheckMenu(&CollectorCnrMenu,
2073 COLLECTORCNR_POPUP);
2074 if (dcd->hwndLastMenu && !dcd->cnremphasized) {
[194]2075 WinSendMsg(hwnd, CM_SETRECORDEMPHASIS, MPVOID,
2076 MPFROM2SHORT(TRUE, CRA_SOURCE));
[551]2077 dcd->cnremphasized = TRUE;
[194]2078 }
2079 }
[551]2080 if (dcd->hwndLastMenu) {
2081 if (dcd->hwndLastMenu == CollectorCnrMenu) {
2082 SetViewMenu(dcd->hwndLastMenu, dcd->flWindowAttr);
2083 SetDetailsSwitches(dcd->hwndLastMenu, dcd);
2084 if (dcd->flWindowAttr & CV_MINI)
2085 WinCheckMenuItem(dcd->hwndLastMenu, IDM_MINIICONS, TRUE);
2086 disable_menuitem(dcd->hwndLastMenu, DID_CANCEL,
2087 !dcd->amextracted);
2088 disable_menuitem(dcd->hwndLastMenu, IDM_GREP, dcd->amextracted);
[194]2089 }
[551]2090 if (!PopupMenu(hwnd, hwnd, dcd->hwndLastMenu)) {
2091 if (dcd->cnremphasized) {
[194]2092 WinSendMsg(hwnd, CM_SETRECORDEMPHASIS, MPVOID,
2093 MPFROM2SHORT(FALSE, CRA_SOURCE));
[551]2094 dcd->cnremphasized = TRUE;
[194]2095 }
2096 MarkAll(hwnd, TRUE, FALSE, TRUE);
2097 }
2098 }
2099 }
2100 break;
[2]2101
[194]2102 case CN_DROPHELP:
[444]2103 if (mp2) {
[194]2104 PDRAGINFO pDInfo;
2105 PCNRITEM pci;
2106 ULONG numitems;
2107 USHORT usOperation;
[2]2108
[551]2109 pci = (PCNRITEM) ((PCNRDRAGINFO) mp2)->pRecord;
2110 pDInfo = ((PCNRDRAGINFO) mp2)->pDragInfo;
[444]2111 if (!DrgAccessDraginfo(pDInfo)) {
[352]2112 Win_Error(hwnd, hwnd, pszSrcFile, __LINE__,
[551]2113 "%s", GetPString(IDS_DROPERRORTEXT));
[194]2114 break;
2115 }
2116 numitems = DrgQueryDragitemCount(pDInfo);
[551]2117 usOperation = pDInfo->usOperation;
[194]2118 DrgDeleteDraginfoStrHandles(pDInfo);
2119 DrgFreeDraginfo(pDInfo);
2120 saymsg(MB_ENTER | MB_ICONASTERISK,
2121 hwnd,
2122 GetPString(IDS_DROPHELPHDRTEXT),
2123 GetPString(IDS_DROPHELPTEXT),
2124 numitems,
2125 &"s"[numitems == 1L],
2126 (pci) ? NullStr : GetPString(IDS_NOTEXT),
2127 (pci) ? NullStr : " ",
[551]2128 (pci) ? pci->szFileName : NullStr,
[194]2129 (pci) ? " " : NullStr,
2130 GetPString((usOperation == DO_COPY) ?
2131 IDS_COPYTEXT :
2132 (usOperation == DO_LINK) ?
2133 IDS_LINKTEXT : IDS_MOVETEXT));
2134 }
2135 return 0;
[2]2136
[194]2137 case CN_DRAGLEAVE:
[444]2138 if (mp2) {
[194]2139 PDRAGINFO pDInfo;
[2]2140
[551]2141 pDInfo = ((PCNRDRAGINFO) mp2)->pDragInfo;
[194]2142 DrgAccessDraginfo(pDInfo); /* Access DRAGINFO */
[551]2143 DrgFreeDraginfo(pDInfo); /* Free DRAGINFO */
[194]2144 }
2145 return 0;
[2]2146
[194]2147 case CN_DRAGAFTER:
2148 case CN_DRAGOVER:
[444]2149 if (mp2) {
[194]2150 PDRAGITEM pDItem; /* Pointer to DRAGITEM */
2151 PDRAGINFO pDInfo; /* Pointer to DRAGINFO */
2152 PCNRITEM pci;
2153 USHORT uso;
[2]2154
[551]2155 pci = (PCNRITEM) ((PCNRDRAGINFO) mp2)->pRecord;
2156// if(SHORT1FROMMP(mp1) == CN_DRAGAFTER)
2157 // pci = NULL;
2158 pDInfo = ((PCNRDRAGINFO) mp2)->pDragInfo;
[194]2159 DrgAccessDraginfo(pDInfo); /* Access DRAGINFO */
[444]2160 if (pci) {
[551]2161 if (pci->rc.flRecordAttr & CRA_SOURCE) {
[194]2162 DrgFreeDraginfo(pDInfo);
2163 return (MRFROM2SHORT(DOR_NODROP, 0));
2164 }
[551]2165 uso = pDInfo->usOperation;
[194]2166 if (uso == DO_DEFAULT)
2167 uso = (fCopyDefault) ? DO_COPY : DO_MOVE;
[551]2168 if (!(pci->attrFile & FILE_DIRECTORY)) {
2169 if (uso != DO_LINK && uso != DO_MOVE && uso != DO_COPY) {
[194]2170 DrgFreeDraginfo(pDInfo);
2171 return MRFROM2SHORT(DOR_NODROP, 0);
2172 }
2173 if (uso != DO_LINK &&
[551]2174 !(driveflags[toupper(*pci->szFileName) - 'A'] &
2175 DRIVE_NOTWRITEABLE)) {
[194]2176 ARC_TYPE *info = NULL;
[2]2177
[194]2178 if (!fQuickArcFind &&
[551]2179 !(driveflags[toupper(*pci->szFileName) - 'A'] &
[194]2180 DRIVE_SLOW))
[551]2181 info = find_type(pci->szFileName, NULL);
[194]2182 else
[551]2183 info = quick_find_type(pci->szFileName, NULL);
2184 if (!info || ((uso == DO_MOVE && !info->move) ||
2185 (uso == DO_COPY && !info->create))) {
[194]2186 DrgFreeDraginfo(pDInfo);
2187 return MRFROM2SHORT(DOR_NODROP, 0);
2188 }
2189 }
2190 }
2191 }
2192 pDItem = DrgQueryDragitemPtr(pDInfo, /* Access DRAGITEM */
2193 0); /* Index to DRAGITEM */
2194 if (DrgVerifyRMF(pDItem, /* Check valid rendering */
2195 DRM_OS2FILE, /* mechanisms and data */
[551]2196 NULL)) {
2197 DrgFreeDraginfo(pDInfo); /* Free DRAGINFO */
[444]2198 if (pci) {
[551]2199 if (driveflags[toupper(*pci->szFileName) - 'A'] &
[194]2200 DRIVE_NOTWRITEABLE)
2201 return MRFROM2SHORT(DOR_DROP, DO_LINK);
[551]2202 if (toupper(*pci->szFileName) < 'C')
[194]2203 return MRFROM2SHORT(DOR_DROP, DO_COPY);
2204 return MRFROM2SHORT(DOR_DROP, /* Return okay to drop */
[551]2205 ((fCopyDefault) ? DO_COPY : DO_MOVE));
[194]2206 }
2207 else
2208 return MRFROM2SHORT(DOR_DROP, /* Return okay to drop */
2209 DO_COPY);
2210 }
[551]2211 DrgFreeDraginfo(pDInfo); /* Free DRAGINFO */
[194]2212 }
[551]2213 return (MRFROM2SHORT(DOR_NODROP, 0)); /* Drop not valid */
[2]2214
[194]2215 case CN_INITDRAG:
[444]2216 if (mp2) {
[194]2217 BOOL wasemphasized = FALSE;
2218 PCNRDRAGINIT pcd = (PCNRDRAGINIT) mp2;
2219 PCNRITEM pci;
[2]2220
[444]2221 if (pcd) {
[551]2222 pci = (PCNRITEM) pcd->pRecord;
[444]2223 if (pci) {
[551]2224 if (pci->rc.flRecordAttr & CRA_SELECTED)
[194]2225 wasemphasized = TRUE;
[551]2226 if (IsRoot(pci->szFileName))
[194]2227 break;
2228 if (hwndStatus2)
[551]2229 WinSetWindowText(hwndStatus2,
2230 GetPString(IDS_DRAGFILEOBJTEXT));
2231 if (DoFileDrag(hwnd, dcd->hwndObject, mp2, NULL, NULL, TRUE)) {
[194]2232 if (fUnHilite && wasemphasized)
[551]2233 UnHilite(hwnd, TRUE, &dcd->lastselection);
[194]2234 }
2235 if (hwndStatus2)
2236 PostMsg(hwnd, UM_RESCAN, MPVOID, MPVOID);
2237 }
2238 }
2239 }
2240 return 0;
[2]2241
[194]2242 case CN_DROP:
[444]2243 if (mp2) {
[194]2244 LISTINFO *li;
2245 ULONG action = UM_ACTION;
[2]2246
[194]2247 li = DoFileDrop(hwnd, NULL, TRUE, mp1, mp2);
[444]2248 if (li) {
[551]2249 if (!*li->targetpath) {
2250 li->type = IDM_COLLECT;
[194]2251 action = UM_COLLECT;
2252 }
[444]2253 else {
[551]2254 if (li->list && li->list[0] && IsRoot(li->list[0]))
2255 li->type = DO_LINK;
2256 else if (fDragndropDlg && (!*li->arcname || !li->info)) {
[194]2257 CHECKLIST cl;
[2]2258
[194]2259 memset(&cl, 0, sizeof(cl));
2260 cl.size = sizeof(cl);
[551]2261 cl.flags = li->type;
2262 cl.list = li->list;
2263 cl.cmd = li->type;
2264 cl.prompt = li->targetpath;
2265 li->type = WinDlgBox(HWND_DESKTOP, dcd->hwndParent,
2266 DropListProc, FM3ModHandle,
[593]2267 DND_FRAME, MPFROMP(&cl));
2268 if (li->type == DID_ERROR)
2269 Win_Error(DND_FRAME, HWND_DESKTOP, pszSrcFile, __LINE__,
2270 "Drag & Drop Dialog");
2271 if (!li->type) {
[194]2272 FreeListInfo(li);
2273 return 0;
2274 }
[551]2275 li->list = cl.list;
[593]2276 if (!li->list || !li->list[0]) {
[194]2277 FreeListInfo(li);
2278 return 0;
2279 }
2280 }
[551]2281 switch (li->type) {
[194]2282 case DND_LAUNCH:
[551]2283 strcat(li->targetpath, " %a");
2284 ExecOnList(dcd->hwndParent, li->targetpath,
2285 PROMPT | WINDOWED, NULL, li->list, NULL);
2286 FreeList(li->list);
2287 li->list = NULL;
[194]2288 break;
2289 case DO_LINK:
[444]2290 if (fLinkSetsIcon) {
[551]2291 li->type = IDM_SETICON;
[194]2292 action = UM_MASSACTION;
2293 }
2294 else
[551]2295 li->type = IDM_COMPARE;
[194]2296 break;
2297 case DND_EXTRACT:
[551]2298 if (*li->targetpath && !IsFile(li->targetpath))
2299 li->type = IDM_EXTRACT;
[194]2300 break;
2301 case DND_MOVE:
[551]2302 li->type = IDM_MOVE;
2303 if (*li->targetpath && IsFile(li->targetpath) == 1) {
[194]2304 action = UM_MASSACTION;
[551]2305 li->type = IDM_ARCHIVEM;
[194]2306 }
2307 break;
2308 case DND_WILDMOVE:
[551]2309 li->type = IDM_WILDMOVE;
2310 if (*li->targetpath && IsFile(li->targetpath) == 1) {
[194]2311 action = UM_MASSACTION;
[551]2312 li->type = IDM_ARCHIVEM;
[194]2313 }
2314 break;
2315 case DND_OBJECT:
[551]2316 li->type = IDM_OBJECT;
[194]2317 action = UM_MASSACTION;
2318 break;
2319 case DND_SHADOW:
[551]2320 li->type = IDM_SHADOW;
[194]2321 action = UM_MASSACTION;
2322 break;
2323 case DND_COMPARE:
[551]2324 li->type = IDM_COMPARE;
[194]2325 break;
2326 case DND_SETICON:
2327 action = UM_MASSACTION;
[551]2328 li->type = IDM_SETICON;
[194]2329 break;
2330 case DND_WILDCOPY:
[551]2331 li->type = IDM_WILDCOPY;
2332 if (*li->targetpath && IsFile(li->targetpath) == 1) {
[194]2333 action = UM_MASSACTION;
[551]2334 li->type = IDM_ARCHIVE;
[194]2335 }
2336 break;
2337 case DND_COPY:
[551]2338 li->type = IDM_COPY;
2339 if (*li->targetpath && IsFile(li->targetpath) == 1) {
[194]2340 action = UM_MASSACTION;
[551]2341 li->type = IDM_ARCHIVE;
[194]2342 }
2343 break;
2344 default:
[551]2345 if (*li->arcname && li->info) {
[194]2346 action = UM_MASSACTION;
[551]2347 li->type =
2348 (li->type ==
2349 DO_MOVE) ? IDM_FAKEEXTRACTM : IDM_FAKEEXTRACT;
[194]2350 }
[551]2351 else if (*li->targetpath && IsFile(li->targetpath) == 1) {
[194]2352 action = UM_MASSACTION;
[551]2353 li->type =
2354 (li->type == DO_MOVE) ? IDM_ARCHIVEM : IDM_ARCHIVE;
[194]2355 }
2356 else
[551]2357 li->type = (li->type == DO_MOVE) ? IDM_MOVE : IDM_COPY;
[194]2358 break;
2359 }
2360 }
[551]2361 if (!li->list || !li->list[0])
[194]2362 FreeListInfo(li);
[551]2363 else if (!PostMsg(dcd->hwndObject, action, MPFROMP(li), MPVOID))
[194]2364 FreeListInfo(li);
[444]2365 else {
[194]2366 USHORT usop = 0;
[2]2367
[551]2368 switch (li->type) {
[194]2369 case IDM_COPY:
2370 case IDM_WILDCOPY:
2371 usop = DO_COPY;
2372 break;
2373 case IDM_MOVE:
2374 case IDM_WILDMOVE:
2375 case IDM_ARCHIVEM:
2376 usop = DO_MOVE;
2377 break;
2378 }
2379 if (usop)
2380 return MRFROM2SHORT(DOR_DROP, usop);
2381 }
2382 }
2383 }
2384 return 0;
[2]2385
[194]2386 case CN_BEGINEDIT:
2387 case CN_REALLOCPSZ:
2388 case CN_ENDEDIT:
2389 {
2390 MRESULT mre;
[2]2391
[194]2392 mre = CnrDirectEdit(hwnd, msg, mp1, mp2);
2393 if (mre != (MRESULT) - 1)
2394 return mre;
2395 }
2396 break;
[2]2397
[194]2398 case CN_EMPHASIS:
[444]2399 if (mp2) {
[194]2400 PNOTIFYRECORDEMPHASIS pre = mp2;
2401 PCNRITEM pci;
2402 CHAR s[CCHMAXPATH + 91], tb[81], tf[81], *p;
[2]2403
[551]2404 pci = (PCNRITEM) ((pre) ? pre->pRecord : NULL);
[444]2405 if (!pci) {
[194]2406 if (hwndStatus2)
2407 WinSetWindowText(hwndStatus2, NullStr);
[444]2408 if (fMoreButtons) {
[194]2409 WinSetWindowText(hwndName, NullStr);
2410 WinSetWindowText(hwndDate, NullStr);
2411 WinSetWindowText(hwndAttr, NullStr);
2412 }
2413 if (hwndMain)
2414 WinSendMsg(hwndMain, UM_LOADFILE, MPVOID, MPVOID);
2415 break;
2416 }
[551]2417 if (pre->fEmphasisMask & CRA_SELECTED) {
2418 if (pci->rc.flRecordAttr & CRA_SELECTED) {
2419 dcd->selectedbytes += (pci->cbFile + pci->easize);
2420 dcd->selectedfiles++;
[194]2421 }
[551]2422 else if (dcd->selectedfiles) {
2423 dcd->selectedbytes -= (pci->cbFile + pci->easize);
2424 dcd->selectedfiles--;
[194]2425 }
[551]2426 if (!dcd->suspendview) {
2427 commafmt(tf, sizeof(tf), dcd->selectedfiles);
2428 CommaFmtULL(tb, sizeof(tb), dcd->selectedbytes, ' ');
[194]2429 sprintf(s, "%s / %s", tf, tb);
[551]2430 WinSetDlgItemText(dcd->hwndClient, DIR_SELECTED, s);
[194]2431 }
2432 }
[551]2433 if (!dcd->suspendview &&
2434 WinQueryActiveWindow(dcd->hwndParent) == dcd->hwndFrame) {
2435 if (pre->fEmphasisMask & CRA_CURSORED) {
2436 if (pci->rc.flRecordAttr & CRA_CURSORED) {
[444]2437 if (fSplitStatus && hwndStatus2) {
[551]2438 if (pci->attrFile & FILE_DIRECTORY)
2439 p = pci->pszFileName;
[444]2440 else {
[551]2441 p = strrchr(pci->szFileName, '\\');
[444]2442 if (p) {
[194]2443 if (*(p + 1))
2444 p++;
2445 else
[551]2446 p = pci->pszFileName;
[194]2447 }
2448 else
[551]2449 p = pci->pszFileName;
[194]2450 }
[551]2451 CommaFmtULL(tb, sizeof(tb), pci->cbFile + pci->easize, ' ');
[194]2452 if (!fMoreButtons)
2453 sprintf(s, " %s %04u/%02u/%02u %02u:%02u:%02u [%s] %s",
[551]2454 tb, pci->date.year,
2455 pci->date.month, pci->date.day, pci->time.hours,
2456 pci->time.minutes, pci->time.seconds,
2457 pci->pszDispAttr, p);
[444]2458 else {
[551]2459 if (pci->cbFile + pci->easize > 1024)
2460 CommaFmtULL(tf, sizeof(tf), pci->cbFile + pci->easize,
2461 ' ');
[194]2462 else
2463 *tf = 0;
2464 sprintf(s, GetPString(IDS_STATUSSIZETEXT),
2465 tb,
[551]2466 *tf ? " (" : NullStr, tf, *tf ? ")" : NullStr);
[194]2467 }
2468 WinSetWindowText(hwndStatus2, s);
2469 }
[444]2470 if (fMoreButtons) {
[551]2471 WinSetWindowText(hwndName, pci->pszFileName);
[194]2472 sprintf(s, "%04u/%02u/%02u %02u:%02u:%02u",
[551]2473 pci->date.year, pci->date.month,
2474 pci->date.day, pci->time.hours, pci->time.minutes,
2475 pci->time.seconds);
[194]2476 WinSetWindowText(hwndDate, s);
[551]2477 WinSetWindowText(hwndAttr, pci->pszDispAttr);
[194]2478 }
2479 }
2480 }
2481 }
[551]2482 if (!dcd->suspendview && hwndMain &&
2483 (pre->fEmphasisMask & CRA_CURSORED) &&
2484 (pci->rc.flRecordAttr & CRA_CURSORED) &&
2485 WinQueryActiveWindow(dcd->hwndParent) == dcd->hwndFrame)
[194]2486 WinSendMsg(hwndMain, UM_LOADFILE,
[551]2487 MPFROMP(((fComments
2488 || (pci->attrFile & FILE_DIRECTORY) ==
2489 0) ? pci->szFileName : NULL)), MPVOID);
[194]2490 }
2491 break;
[2]2492
[194]2493 case CN_ENTER:
[444]2494 if (mp2) {
[551]2495 PCNRITEM pci = (PCNRITEM) ((PNOTIFYRECORDENTER) mp2)->pRecord;
[194]2496 FILEFINDBUF3 ffb;
2497 HDIR hDir = HDIR_CREATE;
2498 ULONG nm = 1L;
2499 APIRET status = 0;
[2]2500
[194]2501 SetShiftState();
[444]2502 if (pci) {
[551]2503 if (pci->rc.flRecordAttr & CRA_INUSE)
[194]2504 break;
2505 DosError(FERR_DISABLEHARDERR);
[551]2506 status = DosFindFirst(pci->szFileName, &hDir,
[194]2507 FILE_NORMAL | FILE_DIRECTORY |
2508 FILE_ARCHIVED | FILE_READONLY |
2509 FILE_HIDDEN | FILE_SYSTEM,
[551]2510 &ffb, sizeof(ffb), &nm, FIL_STANDARD);
[194]2511 priority_bumped();
[444]2512 if (!status) {
[194]2513 DosFindClose(hDir);
[444]2514 if (ffb.attrFile & FILE_DIRECTORY) {
[551]2515 if ((shiftstate & (KC_CTRL | KC_ALT)) == (KC_CTRL | KC_ALT))
[194]2516 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(IDM_SHOWALLFILES, 0),
2517 MPVOID);
2518 else if ((shiftstate & (KC_CTRL | KC_SHIFT)) ==
2519 (KC_CTRL | KC_SHIFT))
[551]2520 OpenObject(pci->szFileName, Settings, dcd->hwndFrame);
[194]2521 else if (shiftstate & KC_CTRL)
[551]2522 OpenObject(pci->szFileName, Default, dcd->hwndFrame);
[194]2523 else
[280]2524 OpenDirCnr(HWND_DESKTOP,
[194]2525 hwndMain,
[551]2526 dcd->hwndFrame, FALSE, pci->szFileName);
[194]2527 }
[444]2528 else {
[194]2529 SWP swp;
[2]2530
[194]2531 WinSendMsg(hwnd,
2532 CM_SETRECORDEMPHASIS,
[551]2533 MPFROMP(pci), MPFROM2SHORT(TRUE, CRA_INUSE));
2534 WinQueryWindowPos(dcd->hwndFrame, &swp);
[194]2535 DefaultViewKeys(hwnd,
[551]2536 dcd->hwndFrame,
2537 dcd->hwndParent, &swp, pci->szFileName);
[194]2538 WinSendMsg(hwnd,
2539 CM_SETRECORDEMPHASIS,
2540 MPFROMP(pci),
2541 MPFROM2SHORT(FALSE, CRA_INUSE |
2542 ((fUnHilite) ? CRA_SELECTED : 0)));
2543 }
2544 }
2545 else
2546 WinSendMsg(hwnd,
2547 CM_REMOVERECORD,
2548 MPFROMP(&pci),
2549 MPFROM2SHORT(1,
[471]2550 CMA_FREE | CMA_INVALIDATE | CMA_ERASE));
[194]2551 }
2552 }
2553 break;
[2]2554 }
[194]2555 }
2556 return 0;
[2]2557
[194]2558 case UM_LOADFILE:
[444]2559 if (dcd && mp2) {
[194]2560 HWND ret;
[2]2561
[551]2562 ret = StartMLEEditor(dcd->hwndParent,
2563 (INT) mp1, (CHAR *) mp2, dcd->hwndFrame);
[194]2564 if (mp2)
2565 free((CHAR *) mp2);
2566 return MRFROMLONG(ret);
2567 }
2568 return 0;
[2]2569
[194]2570 case UM_CLOSE:
2571 WinDestroyWindow(WinQueryWindow(WinQueryWindow(hwnd, QW_PARENT),
2572 QW_PARENT));
2573 return 0;
[2]2574
[194]2575 case UM_FOLDUP:
[551]2576 if (!PostMsg((HWND) 0, WM_QUIT, MPVOID, MPVOID))
[194]2577 DosExit(EXIT_PROCESS, 1);
2578 return 0;
[2]2579
[194]2580 case WM_CLOSE:
[444]2581 if (dcd) {
[551]2582 dcd->namecanchange = TRUE;
2583 dcd->stopflag = 1;
2584 if (dcd->amextracted)
2585 return 0; // Can not close yet
[194]2586 }
2587 WinSendMsg(hwnd, WM_SAVEAPPLICATION, MPVOID, MPVOID);
[444]2588 if (dcd) {
[551]2589 if (!dcd->dontclose && ParentIsDesktop(hwnd, dcd->hwndParent))
[194]2590 PostMsg(hwnd, UM_FOLDUP, MPVOID, MPVOID);
[551]2591 if (dcd->hwndObject) {
[194]2592 DosSleep(64L);
[551]2593 if (!PostMsg(dcd->hwndObject, WM_CLOSE, MPVOID, MPVOID))
2594 WinSendMsg(dcd->hwndObject, WM_CLOSE, MPVOID, MPVOID);
[2]2595 }
[194]2596 }
2597 else
2598 WinSendMsg(hwnd, UM_CLOSE, MPVOID, MPVOID);
2599 return 0;
[2]2600
[194]2601 case WM_DESTROY:
2602 if (CollectorDirMenu)
2603 WinDestroyWindow(CollectorDirMenu);
2604 if (CollectorFileMenu)
2605 WinDestroyWindow(CollectorFileMenu);
2606 if (CollectorCnrMenu)
2607 WinDestroyWindow(CollectorCnrMenu);
[551]2608 CollectorCnrMenu = CollectorFileMenu = CollectorDirMenu = (HWND) 0;
2609 Collector = (HWND) 0;
[194]2610 EmptyCnr(hwnd);
2611 break;
[2]2612 }
[551]2613 return (dcd && dcd->oldproc) ? dcd->oldproc(hwnd, msg, mp1, mp2) :
[194]2614 PFNWPCnr(hwnd, msg, mp1, mp2);
[2]2615}
2616
[194]2617HWND StartCollector(HWND hwndParent, INT flags)
[155]2618{
[551]2619 HWND hwndFrame = (HWND) 0;
[197]2620 HWND hwndClient;
[194]2621 ULONG FrameFlags = FCF_TITLEBAR | FCF_SYSMENU |
[551]2622 FCF_SIZEBORDER | FCF_MINMAX | FCF_ICON | FCF_NOBYTEALIGN | FCF_ACCELTABLE;
[194]2623 USHORT id;
2624 DIRCNRDATA *dcd;
[2]2625
[197]2626 static USHORT idinc = 0;
2627
[194]2628 if (ParentIsDesktop(hwndParent, hwndParent))
[2]2629 FrameFlags |= (FCF_TASKLIST | FCF_SHELLPOSITION | FCF_MENU);
[444]2630 if (Collector) {
[2]2631 WinSetWindowPos(WinQueryWindow(WinQueryWindow(Collector,
[194]2632 QW_PARENT),
2633 QW_PARENT),
[551]2634 HWND_TOP, 0, 0, 0, 0, SWP_SHOW | SWP_RESTORE);
2635 return WinQueryWindow(WinQueryWindow(Collector, QW_PARENT), QW_PARENT);
[2]2636 }
2637 hwndFrame = WinCreateStdWindow(hwndParent,
[194]2638 WS_VISIBLE,
2639 &FrameFlags,
[593]2640 WC_COLLECTOR,
[194]2641 NULL,
2642 WS_VISIBLE | fwsAnimate,
[551]2643 FM3ModHandle, COLLECTOR_FRAME, &hwndClient);
[444]2644 if (hwndFrame && hwndClient) {
[2]2645 id = COLLECTOR_FRAME + idinc++;
[194]2646 WinSetWindowUShort(hwndFrame, QWS_ID, id);
[551]2647 dcd = xmallocz(sizeof(DIRCNRDATA), pszSrcFile, __LINE__);
[377]2648 if (!dcd) {
2649 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
[551]2650 PostMsg(hwndClient, WM_CLOSE, MPVOID, MPVOID);
2651 hwndFrame = (HWND) 0;
[377]2652 }
2653 else {
[551]2654 dcd->size = sizeof(DIRCNRDATA);
2655 dcd->id = id;
2656 dcd->type = COLLECTOR_FRAME;
2657 dcd->hwndParent = (hwndParent) ? hwndParent : HWND_DESKTOP;
2658 dcd->hwndFrame = hwndFrame;
2659 dcd->hwndClient = hwndClient;
[194]2660 if (flags & 4)
[551]2661 dcd->dontclose = TRUE;
[2]2662 {
[194]2663 PFNWP oldproc;
[2]2664
[551]2665 oldproc = WinSubclassWindow(hwndFrame, (PFNWP) CollectorFrameWndProc);
2666 WinSetWindowPtr(hwndFrame, QWL_USER, (PVOID) oldproc);
[2]2667 }
[551]2668 dcd->hwndCnr = WinCreateWindow(hwndClient,
2669 WC_CONTAINER,
2670 NULL,
2671 CCS_AUTOPOSITION | CCS_MINIICONS |
2672 CCS_MINIRECORDCORE | ulCnrType |
2673 WS_VISIBLE,
2674 0,
2675 0,
2676 0,
2677 0,
2678 hwndClient,
2679 HWND_TOP,
2680 (ULONG) COLLECTOR_CNR, NULL, NULL);
2681 if (!dcd->hwndCnr) {
2682 Win_Error2(hwndClient, hwndClient, pszSrcFile, __LINE__,
2683 IDS_WINCREATEWINDOW);
2684 PostMsg(hwndClient, WM_CLOSE, MPVOID, MPVOID);
[377]2685 free(dcd);
[551]2686 hwndFrame = (HWND) 0;
[377]2687 }
2688 else {
[551]2689 Collector = dcd->hwndCnr;
2690 WinSetWindowPtr(dcd->hwndCnr, QWL_USER, (PVOID) dcd);
2691 WinSetWindowText(hwndFrame, GetPString(IDS_COLLECTORTITLETEXT));
[444]2692 if (FrameFlags & FCF_MENU) {
2693 if (!fToolbar) {
[194]2694 HWND hwndMenu = WinWindowFromID(hwndFrame, FID_MENU);
[2]2695
[444]2696 if (hwndMenu) {
[194]2697 WinSendMsg(hwndMenu,
2698 MM_DELETEITEM,
[551]2699 MPFROM2SHORT(IDM_SEEALL, FALSE), MPVOID);
[194]2700 WinSendMsg(hwndMenu,
2701 MM_DELETEITEM,
[551]2702 MPFROM2SHORT(IDM_GREP, FALSE), MPVOID);
[194]2703 WinSendMsg(hwndMenu,
2704 MM_DELETEITEM,
[551]2705 MPFROM2SHORT(IDM_CLEARCNR, FALSE), MPVOID);
[194]2706 WinSendMsg(hwndMenu,
2707 MM_DELETEITEM,
[551]2708 MPFROM2SHORT(IDM_REMOVE, FALSE), MPVOID);
[194]2709 }
2710 }
2711 }
[551]2712 dcd->oldproc = WinSubclassWindow(dcd->hwndCnr,
2713 (PFNWP) CollectorCnrWndProc);
[194]2714 {
[551]2715 USHORT ids[] = { DIR_TOTALS, DIR_SELECTED, DIR_VIEW, DIR_SORT,
2716 DIR_FILTER, 0
2717 };
[2]2718
[551]2719 CommonCreateTextChildren(dcd->hwndClient,
[593]2720 WC_COLSTATUS, ids);
[194]2721 }
2722 if (FrameFlags & FCF_SHELLPOSITION)
[551]2723 PostMsg(hwndClient, UM_SIZE, MPVOID, MPVOID);
2724 if (!PostMsg(dcd->hwndCnr, UM_SETUP, MPVOID, MPVOID))
2725 WinSendMsg(dcd->hwndCnr, UM_SETUP, MPVOID, MPVOID);
[2]2726 }
2727 }
2728 }
2729 return hwndFrame;
2730}
Note: See TracBrowser for help on using the repository browser.