source: trunk/dll/common.c@ 536

Last change on this file since 536 was 536, checked in by root, 19 years ago

Rework thread usage count logic

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 29.4 KB
RevLine 
[246]1
2/***********************************************************************
3
4 $Id: common.c 536 2006-11-04 21:09:21Z root $
5
6 Common window functions
7
8 Copyright (c) 1993, 1998 M. Kimes
[348]9 Copyright (c) 2001, 2006 Steven H. Levine
[246]10
11 13 Aug 05 SHL Renames
[348]12 22 Jul 06 SHL Check more run time errors
[446]13 15 Aug 06 SHL Use Dos_Error
[536]14 03 Nov 06 SHL Rework thread usage count logic
[246]15
16***********************************************************************/
17
[2]18#define INCL_DOS
19#define INCL_DOSERRORS
20#define INCL_WIN
21#define INCL_GPI
[348]22#include <os2.h>
[2]23
24#include <stdarg.h>
25#include <stdio.h>
26#include <stdlib.h>
27#include <string.h>
28#include <ctype.h>
29#include <time.h>
30#include <direct.h>
31#include <share.h>
32#include <limits.h>
[348]33
[2]34#include "fm3dll.h"
35#include "fm3dlg.h"
36#include "fm3str.h"
37#include "mle.h"
38
39#pragma data_seg(DATA1)
[348]40
41static PSZ pszSrcFile = __FILE__;
42
[2]43#pragma alloc_text(COMMON,CommonFrameWndProc,CommonTextProc,CommonTextPaint)
44#pragma alloc_text(COMMON1,CommonCreateTextChildren,CommonCreateMainChildren)
45#pragma alloc_text(COMMON2,CommonDriveCmd,CommonTextButton)
[536]46#pragma alloc_text(COMMON3,CommonMainWndProc,IncrThreadUsage,DecrThreadUsage)
[2]47#pragma alloc_text(COMMON4,CommonCnrProc)
48#pragma alloc_text(COMMON5,OpenDirCnr)
49
50
51MRESULT EXPENTRY CommonFrameWndProc (USHORT id,
52 HWND hwnd,
53 ULONG msg,
54 MPARAM mp1,
[377]55 MPARAM mp2)
56{
[2]57 PFNWP oldproc = (PFNWP)WinQueryWindowPtr(hwnd,0);
58
59 switch(msg) {
60 case UM_TIMER:
61 case UM_ACTION:
62 case UM_SHOWME:
63 case UM_OPENWINDOWFORME:
64 case UM_MINIMIZE:
65 case UM_MAXIMIZE:
66 case UM_CONTAINERDIR:
67 case UM_FILTER:
68 case UM_INITMENU:
69 case UM_COMMAND:
70 case UM_UPDATERECORD:
71 case UM_UPDATERECORDLIST:
72 case WM_COMMAND:
73 case MM_PORTHOLEINIT:
74 case WM_INITMENU:
75 case UM_CONTAINER_FILLED:
76 case UM_FILESMENU:
77 return WinSendMsg(WinWindowFromID(hwnd,FID_CLIENT),msg,mp1,mp2);
78
79 case UM_CONTEXTMENU:
80 PostMsg(WinWindowFromID(hwnd,FID_CLIENT),msg,mp1,mp2);
81 return 0;
82
83 case UM_CONTAINERHWND:
84 return MRFROMLONG(WinWindowFromID(hwnd,id));
85
86 case DM_DROP:
87 case DM_DRAGOVER:
88 case DM_DRAGLEAVE:
89 case DM_DROPHELP:
90 {
91 CNRDRAGINFO cnd;
92 USHORT dcmd;
93
94 switch(msg) {
95 case DM_DROP:
96 dcmd = CN_DROP;
97 break;
98 case DM_DRAGOVER:
99 dcmd = CN_DRAGOVER;
100 break;
101 case DM_DRAGLEAVE:
102 dcmd = CN_DRAGLEAVE;
103 break;
104 case DM_DROPHELP:
105 dcmd = CN_DROPHELP;
106 break;
107 }
108 cnd.pDragInfo = (PDRAGINFO)mp1;
109 cnd.pRecord = NULL;
110 return WinSendMsg(WinWindowFromID(hwnd,FID_CLIENT),
111 WM_CONTROL,
112 MPFROM2SHORT(id,dcmd),
113 MPFROMP(&cnd));
114 }
115
116 case UM_RESCAN:
117 if(fAutoTile &&
118 !fAmClosing &&
119 !fNoTileUpdate &&
120 !ParentIsDesktop(hwnd,(HWND)0))
121 PostMsg(WinQueryWindow(hwnd,QW_PARENT),
122 UM_RESCAN,
123 MPVOID,
124 MPVOID);
125 return 0;
126
127 case WM_MINMAXFRAME:
128 {
129 PSWP pswp = (PSWP)mp1;
130 MRESULT rc;
131
132 rc = oldproc(hwnd,msg,mp1,mp2);
133 if(pswp->fl & (SWP_MINIMIZE | SWP_HIDE | SWP_RESTORE))
134 WinSendMsg(hwnd,UM_RESCAN,MPVOID,MPVOID);
135 return rc;
136 }
137
138 case WM_DESTROY:
139 WinSendMsg(hwnd,UM_RESCAN,MPVOID,MPVOID);
140 break;
141 }
142 return oldproc(hwnd,msg,mp1,mp2);
143}
144
145
146MRESULT EXPENTRY CommonTextProc (HWND hwnd,
147 ULONG msg,
148 MPARAM mp1,
[377]149 MPARAM mp2)
150{
[2]151 switch(msg) {
152 case WM_CREATE:
153 {
154 MRESULT rc;
155 char font[] = "8.Helv";
156
157 rc = PFNWPStatic(hwnd,msg,mp1,mp2);
158 switch(WinQueryWindowUShort(hwnd,QWS_ID)) {
159 case DIR_SORT:
160 case DIR_VIEW:
161 case DIR_FILTER:
162 *font = '7';
163 }
164 SetPresParams(hwnd,
165 &RGBGREY,
166 &RGBBLACK,
167 &RGBBLACK,
168 font);
169 return rc;
170 }
171 }
172 return PFNWPStatic(hwnd,msg,mp1,mp2);
173}
174
175
[377]176void CommonTextPaint (HWND hwnd,HPS hps)
177{
[2]178 int x;
179 USHORT ids[] = {DIR_FOLDERICON,DIR_TOTALS,DIR_SELECTED,DIR_VIEW,
180 DIR_FILTER,DIR_SORT,DIR_MAX,0};
181 BOOL bools[] = {TRUE,FALSE,TRUE,TRUE,TRUE,TRUE,TRUE};
182
183 for(x = 0;ids[x];x++) {
184 if(WinWindowFromID(hwnd,ids[x]) != (HWND)0)
185 PaintRecessedWindow(WinWindowFromID(hwnd,ids[x]),hps,
186 bools[x],FALSE);
187 }
188}
189
190
[377]191void CommonCreateTextChildren (HWND hwnd,char *class,USHORT *ids)
192{
[2]193 int x;
194 CHAR s[33];
195 ULONG attrs;
[377]196 HWND hwndTmp;
[2]197
[377]198 if (!hwnd || !class || !ids) {
199 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
[2]200 return;
[377]201 }
[2]202
203 for(x = 0;ids[x];x++) {
204 *s = 0;
205 switch(ids[x]) {
206 case DIR_SORT:
207 case DIR_FILTER:
208 case DIR_VIEW:
209 attrs = SS_TEXT | DT_LEFT | DT_VCENTER;
210 break;
211 case DIR_FOLDERICON:
212 case DIR_MAX:
213 attrs = SS_BITMAP;
214 sprintf(s,"#%d",ids[x]);
215 break;
216 default:
217 attrs = SS_TEXT | DT_CENTER | DT_VCENTER;
218 break;
219 }
[377]220 hwndTmp = WinCreateWindow(hwnd,class,s,attrs,0,0,0,0,hwnd,
221 HWND_TOP,ids[x],NULL,NULL);
222 if (!hwndTmp)
223 Win_Error2(hwnd,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
224 } // for
[2]225}
226
227
[377]228void CommonDriveCmd (HWND hwnd,char *drive,USHORT cmd)
229{
[2]230 char dv[CCHMAXPATH];
231
232 if(!drive || !*drive)
233 return;
234 strcpy(dv,drive);
235 MakeValidDir(dv);
236
237 switch(cmd) {
238 case IDM_MKDIR:
239 PMMkDir(hwnd,
240 dv,
241 FALSE);
242 break;
243 case IDM_INFO:
244 WinDlgBox(HWND_DESKTOP,
245 HWND_DESKTOP,
246 DrvInfoProc,
247 FM3ModHandle,
248 INFO_FRAME,
249 (PVOID)dv);
250 break;
251 case IDM_DRVFLAGS:
252 if(WinDlgBox(HWND_DESKTOP,
253 hwnd,
254 SetDrvProc,
255 FM3ModHandle,
256 DVS_FRAME,
257 MPFROMP(dv)) &&
258 hwndTree)
259 PostMsg(hwndTree,
260 WM_COMMAND,
261 MPFROM2SHORT(IDM_UPDATE,0),
262 MPVOID);
263 break;
264 case IDM_SIZES:
265 WinDlgBox(HWND_DESKTOP,
266 HWND_DESKTOP,
267 DirSizeProc,
268 FM3ModHandle,
269 DSZ_FRAME,
270 dv);
271 break;
272 case IDM_SHOWALLFILES:
273 StartSeeAll(HWND_DESKTOP,
274 FALSE,
275 dv);
276 break;
277 case IDM_UNDELETE:
278 WinDlgBox(HWND_DESKTOP,
279 hwnd,
280 UndeleteDlgProc,
281 FM3ModHandle,
282 UNDEL_FRAME,
283 MPFROMP(dv));
284 break;
285 case IDM_CHKDSK:
286 runemf2(SEPARATE | WINDOWED,
287 hwnd,
288 NULL,
289 NULL,
290 "PMCHKDSK.EXE %c:",
291 toupper(*dv));
292 break;
293 case IDM_OPTIMIZE:
294 {
295 CHAR FileSystem[CCHMAXPATH];
296 ULONG type;
297
298 CheckDrive(*dv,FileSystem,&type);
299 if(*FileSystem) {
300 strcat(FileSystem,"OPT.CMD");
301 runemf2(SEPARATE | WINDOWED,
302 hwnd,
303 NULL,
304 NULL,
305 "%s /C %s %c:",
306 GetCmdSpec(FALSE),
307 FileSystem,
308 toupper(*dv));
309 }
310 }
311 break;
312 case IDM_FORMAT:
313 runemf2(SEPARATE | WINDOWED,
314 hwnd,
315 NULL,
316 NULL,
317 "PMFORMAT.EXE %c:",
318 toupper(*dv));
319 break;
320
[446]321#if 0 // fixme to be gone?
322
[2]323 case IDM_CLOSETRAY:
324 if(driveflags[*dv - 'A'] & DRIVE_CDROM) {
325
326 BYTE parm[4] = {"CD01"};
327 ULONG dlen,plen;
328 HFILE hfile;
329 APIRET rc;
330
331 dv[2] = 0;
332 rc = DosOpen(dv,
333 &hfile,
334 &dlen,
335 0,
336 0,
337 OPEN_ACTION_OPEN_IF_EXISTS |
338 OPEN_ACTION_CREATE_IF_NEW,
339 OPEN_FLAGS_DASD |
340 OPEN_FLAGS_FAIL_ON_ERROR |
341 OPEN_SHARE_DENYNONE,
342 NULL);
[446]343 if (rc)
344 Dos_Error(MB_CANCEL,rc,hwnd,pszSrcFile,__LINE__,"DosOpen");
345 else {
[2]346 dlen = 0;
347 plen = sizeof(parm);
348 rc = DosDevIOCtl(hfile,
349 0x80,
350 0x45,
351 &parm,
352 sizeof(parm),
353 &plen,
354 NULL,
355 0,
356 &dlen);
357 DosClose(hfile);
[446]358 if (rc)
359 Dos_Error(MB_CANCEL,rc,hwnd,pszSrcFile,__LINE__,"DosDevIOCtl");
[2]360 }
361 }
362 break;
[446]363#endif // fixme to be gone?
[2]364
[446]365
[2]366 case IDM_LOCK:
367 case IDM_UNLOCK:
368 case IDM_EJECT:
369 {
370 BYTE parm[2];
371 ULONG plen = sizeof(parm),dlen = 0L;
372
373 switch(SHORT1FROMMP(cmd)) {
374 case IDM_LOCK:
375 parm[0] = 1;
376 break;
377 case IDM_UNLOCK:
378 parm[0] = 0;
379 break;
380 case IDM_EJECT:
381 parm[0] = 2;
382 break;
383 }
384 parm[1] = (BYTE)(*dv - 'A');
385 DosError(FERR_DISABLEHARDERR);
386 DosDevIOCtl(-1L,
387 8L,
388 0x40L,
389 &parm,
390 sizeof(parm),
391 &plen,
392 NULL,
393 0L,
394 &dlen);
395 }
396 break;
397 }
398}
399
400
[377]401void CommonCreateMainChildren (HWND hwnd,SWP *swp)
402{
403 HWND hwndFrame = WinQueryWindow(hwnd,QW_PARENT);
404 HWND hwndTmp;
405 PFNWP oldproc;
[2]406
[377]407 // Create a children of frame window
408 hwndStatus = WinCreateWindow(hwndFrame,
[2]409 GetPString(IDS_WCSTATUS),
410 "Status",
411 WS_VISIBLE | SS_TEXT | DT_LEFT |
412 DT_VCENTER,
413 swp->x + 4 +
414 WinQuerySysValue(HWND_DESKTOP,
415 SV_CXSIZEBORDER),
416 swp->y + 4 +
417 WinQuerySysValue(HWND_DESKTOP,
418 SV_CYSIZEBORDER),
419 ((swp->cx / 2) - 8) -
420 (WinQuerySysValue(HWND_DESKTOP,
421 SV_CXSIZEBORDER) * 2),
422 20,
[377]423 hwndFrame,
[2]424 HWND_TOP,
425 MAIN_STATUS,
426 NULL,
427 NULL);
[377]428 if (!hwndStatus)
429 Win_Error2(hwndFrame,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
430
431 hwndStatus2 = WinCreateWindow(hwndFrame,
[2]432 GetPString(IDS_WCSTATUS),
433 "Status2",
434 WS_VISIBLE | SS_TEXT | DT_LEFT |
435 DT_VCENTER,
436 ((swp->cx / 2) + 4) +
437 WinQuerySysValue(HWND_DESKTOP,
438 SV_CXSIZEBORDER),
439 ((swp->cy / 2) + 4) +
440 WinQuerySysValue(HWND_DESKTOP,
441 SV_CYSIZEBORDER),
442 ((swp->cx / 2) - 8) -
443 (WinQuerySysValue(HWND_DESKTOP,
444 SV_CXSIZEBORDER) * 2),
445 20,
[377]446 hwndFrame,
[2]447 HWND_TOP,
448 MAIN_STATUS2,
449 NULL,
450 NULL);
[377]451 if (!hwndStatus2)
452 Win_Error2(hwndFrame,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
[2]453
[377]454 hwndAttr = WinCreateWindow(hwndFrame,
[2]455 GetPString(IDS_WCSTATUS),
456 "Attr",
457 WS_VISIBLE | SS_TEXT | DT_CENTER |
458 DT_VCENTER,
459 swp->x + 4 +
460 WinQuerySysValue(HWND_DESKTOP,
461 SV_CXSIZEBORDER),
462 swp->y + 4 + 24 +
463 WinQuerySysValue(HWND_DESKTOP,
464 SV_CYSIZEBORDER),
465 ((swp->cx / 4) - 8) -
466 (WinQuerySysValue(HWND_DESKTOP,
467 SV_CXSIZEBORDER) * 2),
468 20,
[377]469 hwndFrame,
[2]470 HWND_TOP,
471 IDM_ATTRS,
472 NULL,
473 NULL);
[377]474 if (!hwndAttr)
475 Win_Error2(hwndFrame,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
476
477 hwndDate = WinCreateWindow(hwndFrame,
[2]478 GetPString(IDS_WCSTATUS),
479 "Date",
480 WS_VISIBLE | SS_TEXT | DT_CENTER |
481 DT_VCENTER,
482 ((swp->x / 4) * 2) + 4 +
483 WinQuerySysValue(HWND_DESKTOP,
484 SV_CXSIZEBORDER),
485 swp->y + 4 + 24 +
486 WinQuerySysValue(HWND_DESKTOP,
487 SV_CYSIZEBORDER),
488 ((swp->cx / 4) - 8) -
489 (WinQuerySysValue(HWND_DESKTOP,
490 SV_CXSIZEBORDER) * 2),
491 20,
[377]492 hwndFrame,
[2]493 HWND_TOP,
494 IDM_INFO,
495 NULL,
496 NULL);
[377]497 if (!hwndDate)
498 Win_Error2(hwndFrame,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
499
500 hwndName = WinCreateWindow(hwndFrame,
[2]501 GetPString(IDS_WCSTATUS),
502 "Name",
503 WS_VISIBLE | SS_TEXT | DT_LEFT |
504 DT_VCENTER,
505 ((swp->x / 4) * 3) + 4 +
506 WinQuerySysValue(HWND_DESKTOP,
507 SV_CXSIZEBORDER),
508 swp->y + 4 +
509 WinQuerySysValue(HWND_DESKTOP,
510 SV_CYSIZEBORDER),
511 ((swp->cx / 4) - 8) -
512 (WinQuerySysValue(HWND_DESKTOP,
513 SV_CXSIZEBORDER) * 2),
514 20,
[377]515 hwndFrame,
[2]516 HWND_TOP,
517 IDM_RENAME,
518 NULL,
519 NULL);
[377]520 if (!hwndName)
521 Win_Error2(hwndFrame,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
[2]522
[377]523 hwndTmp = WinCreateWindow(hwndFrame,
[2]524 GetPString(IDS_WCTOOLBACK),
525 NullStr,
526 WS_VISIBLE | SS_TEXT | DT_CENTER | DT_VCENTER,
527 swp->x +
528 WinQuerySysValue(HWND_DESKTOP,
529 SV_CXSIZEBORDER),
530 (swp->cy -
531 WinQuerySysValue(HWND_DESKTOP,
532 SV_CYSIZEBORDER)) - 30,
533 swp->cx -
534 (WinQuerySysValue(HWND_DESKTOP,
535 SV_CXSIZEBORDER) * 2),
536 30,
[377]537 hwndFrame,
[2]538 HWND_TOP,
539 MAIN_TOOLS,
540 NULL,
541 NULL);
[377]542 if (!hwndTmp)
543 Win_Error2(hwndFrame,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
544
545 hwndBack = WinCreateWindow(hwndFrame,
[2]546 GetPString(IDS_WCDRIVEBACK),
547 NullStr,
548 WS_VISIBLE | SS_TEXT | DT_RIGHT | DT_BOTTOM,
549 swp->x +
550 WinQuerySysValue(HWND_DESKTOP,
551 SV_CXSIZEBORDER),
552 (swp->cy -
553 WinQuerySysValue(HWND_DESKTOP,
554 SV_CYSIZEBORDER)) - 30,
555 swp->cx -
556 (WinQuerySysValue(HWND_DESKTOP,
557 SV_CXSIZEBORDER) * 2),
558 30,
[377]559 hwndFrame,
[2]560 HWND_TOP,
561 MAIN_DRIVES,
562 NULL,
563 NULL);
564
[377]565 if (!hwndBack)
566 Win_Error2(hwndFrame,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
567
568 hwndLED = WinCreateWindow(hwndFrame,
[2]569 GetPString(IDS_WCLED),
570 "#920",
571 WS_VISIBLE | SS_BITMAP,
572 swp->cx - 58,
573 swp->y,
574 12,
575 12,
[377]576 hwndFrame,
[2]577 HWND_TOP,
578 MAIN_LED,
579 NULL,
580 NULL);
[377]581 if (!hwndLED)
582 Win_Error2(hwndFrame,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
583
584 hwndLEDHdr = WinCreateWindow(hwndFrame,
[2]585 GetPString(IDS_WCLED),
586 "0",
587 WS_VISIBLE | SS_TEXT | DT_VCENTER |
588 DT_CENTER,
589 swp->cx - 58,
590 swp->y + 12,
591 12,
592 12,
[377]593 hwndFrame,
[2]594 HWND_TOP,
595 MAIN_LEDHDR,
596 NULL,
597 NULL);
[377]598 if (!hwndLEDHdr)
599 Win_Error2(hwndFrame,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
600
601 hwndAutoview = WinCreateWindow(hwndFrame,
[2]602 GetPString(IDS_WCAUTOVIEW),
603 NullStr,
604 WS_VISIBLE | SS_TEXT | DT_LEFT |
605 DT_TOP | DT_WORDBREAK,
606 swp->x + 4 +
607 WinQuerySysValue(HWND_DESKTOP,
608 SV_CXSIZEBORDER),
609 swp->y + 4 +
610 WinQuerySysValue(HWND_DESKTOP,
611 SV_CYSIZEBORDER) + 16,
612 (swp->cx - 8) -
613 (WinQuerySysValue(HWND_DESKTOP,
614 SV_CXSIZEBORDER) * 2),
615 48,
[377]616 hwndFrame,
[2]617 HWND_TOP,
618 MAIN_AUTOVIEW,
619 NULL,
620 NULL);
[377]621 if (!hwndAutoview)
622 Win_Error2(hwndFrame,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
623
624 hwndAutoMLE = WinCreateWindow(hwndFrame,
625 // GetPString(IDS_WCAUTOVIEW),
[2]626 WC_MLE,
627 NullStr,
628 WS_VISIBLE | MLS_HSCROLL |
629 MLS_VSCROLL | MLS_BORDER,
630 swp->x + 4 +
631 WinQuerySysValue(HWND_DESKTOP,
632 SV_CXSIZEBORDER),
633 swp->y + 4 +
634 WinQuerySysValue(HWND_DESKTOP,
635 SV_CYSIZEBORDER) + 16,
636 (swp->cx - 8) -
637 (WinQuerySysValue(HWND_DESKTOP,
638 SV_CXSIZEBORDER) * 2),
639 48,
[377]640 hwndFrame,
[2]641 HWND_TOP,
642 MAIN_AUTOVIEWMLE,
643 NULL,
644 NULL);
[377]645 if (!hwndAutoMLE)
646 Win_Error2(hwndFrame,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
[2]647
[377]648 oldproc = WinSubclassWindow(hwndAutoMLE,AutoViewProc);
649 WinSetWindowPtr(hwndAutoMLE,0,(PVOID)oldproc);
650 PostMsg(hwndAutoMLE,UM_SETUP,MPVOID,MPVOID);
[2]651}
652
[377]653MRESULT EXPENTRY CommonMainWndProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
654{
[2]655 switch(msg) {
656 case UM_THREADUSE:
[377]657 if (hbmLEDon && hbmLEDoff) {
[536]658 static LONG threaduse;
[377]659 CHAR ts[33];
[2]660
661 if(mp1) {
[377]662 threaduse++;
663 if (threaduse == 1)
[2]664 WinSendMsg(hwndLED,
665 SM_SETHANDLE,
666 MPFROMLONG(hbmLEDon),
667 MPVOID);
[377]668 }
669 else {
670 threaduse--;
671 if(threaduse <= 0) {
672 threaduse = 0;
[536]673 WinSendMsg(hwndLED,
674 SM_SETHANDLE,
675 MPFROMLONG(hbmLEDoff),
676 MPVOID);
[377]677 }
678 }
[536]679 ltoa(threaduse,ts,10);
680 WinSetWindowText(hwndLEDHdr,ts);
681 DosSleep(0);
[377]682 }
683 return 0;
[2]684
685 case UM_LOADFILE:
686 {
687 CHAR *s = NULL;
688 static CHAR lastfile[CCHMAXPATH] = "";
689
690 if(!fAutoView) {
691 if(*lastfile)
692 PostMsg((fComments) ? hwndAutoMLE : hwndAutoview,
693 UM_LOADFILE,
694 MPVOID,
695 MPVOID);
696 *lastfile = 0;
697 }
698 else {
699 if(mp1) {
700 if(!mp2 && !stricmp(lastfile,(CHAR *)mp1))
701 return 0;
702 strcpy(lastfile,(CHAR *)mp1);
[348]703 s = xstrdup(lastfile,pszSrcFile,__LINE__);
[2]704 }
705 else
706 *lastfile = 0;
707 if(!PostMsg((fComments) ? hwndAutoMLE : hwndAutoview,
708 UM_LOADFILE,
709 MPFROMP(s),
710 MPVOID)) {
711 if(s)
712 free(s);
713 }
714 }
715 }
716 return 0;
717
[246]718 case UM_BUILDDRIVEBAR:
719 BuildDriveBarButtons(WinWindowFromID(WinQueryWindow(hwnd,QW_PARENT),
[2]720 MAIN_DRIVES));
721 return 0;
722 }
723 return WinDefWindowProc(hwnd,msg,mp1,mp2);
724}
725
726
[377]727MRESULT EXPENTRY CommonTextButton (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
728{
[2]729 static HWND hwndLast = (HWND)0;
730 static ULONG lastclick = 0;
731
732 switch(msg) {
733 case WM_MOUSEMOVE:
734 shiftstate = (SHORT2FROMMP(mp2) & (KC_SHIFT | KC_ALT | KC_CTRL));
735 if(!fNoFinger) {
736 WinSetPointer(HWND_DESKTOP,hptrFinger);
737 return MRFROMLONG(TRUE);
738 }
739 break;
[348]740
[2]741 case WM_BUTTON1DOWN:
742 case WM_BUTTON3DOWN:
743 if(hwndBubble)
744 WinDestroyWindow(hwndBubble);
745 shiftstate = (SHORT2FROMMP(mp2) & (KC_SHIFT | KC_ALT | KC_CTRL));
746 WinSetCapture(HWND_DESKTOP,hwnd);
747 PaintRecessedWindow(hwnd,(HPS)0,FALSE,FALSE);
748 break;
749
750 case WM_BUTTON2UP:
751 case WM_BUTTON2DOWN:
752 shiftstate = (SHORT2FROMMP(mp2) & (KC_SHIFT | KC_ALT | KC_CTRL));
753 if(msg == WM_BUTTON2UP && hwndLast) {
754 PostMsg(hwnd,
755 UM_FOCUSME,
756 MPFROMP(hwndLast),
757 MPVOID);
758 hwndLast = (HWND)0;
759 }
760 break;
761
762 case WM_BUTTON1UP:
763 case WM_BUTTON3UP:
764 shiftstate = (SHORT2FROMMP(mp2) & (KC_SHIFT | KC_ALT | KC_CTRL));
765 WinSetCapture(HWND_DESKTOP,
766 (HWND)0);
767 PaintRecessedWindow(hwnd,
768 (HPS)0,
769 TRUE,
770 FALSE);
771 {
772 ULONG check;
773
774 DosQuerySysInfo(QSV_MS_COUNT,
775 QSV_MS_COUNT,
776 &check,
777 sizeof(check));
778 if(check > lastclick + 500) {
779
780 RECTL rcl;
781 POINTS pts;
782
783 pts.x = SHORT1FROMMP(mp1);
784 pts.y = SHORT2FROMMP(mp1);
785 WinQueryWindowRect(hwnd,&rcl);
786 if(pts.x > 0 &&
787 pts.y > 0 &&
788 pts.x < rcl.xRight &&
789 pts.y < rcl.yTop)
790 PostMsg(hwnd,
791 UM_CLICKED + (msg == WM_BUTTON3UP),
792 mp1,
793 mp2);
794 }
795 lastclick = check;
796 }
797 PostMsg(hwnd,
798 UM_FOCUSME,
799 MPFROMP(hwndLast),
800 MPVOID);
801 hwndLast = (HWND)0;
802 break;
803
804 case WM_SETFOCUS:
805 if(mp2)
806 hwndLast = (HWND)mp1;
807 break;
808
809 case UM_FOCUSME:
810 if(mp1) {
811
812 PID pid;
813 TID tid;
814
815 if(WinIsWindow(WinQueryAnchorBlock(hwnd),(HWND)mp1) &&
816 WinQueryWindowProcess((HWND)mp1,&pid,&tid) &&
817 pid == mypid) {
818 WinSetFocus(HWND_DESKTOP,
819 (HWND)mp1);
820 return 0;
821 }
822 }
823 {
824 HWND htemp = (HWND)0;
825
826 if(hwndMain)
827 htemp = TopWindow(hwndMain,(HWND)0);
828 if(!htemp)
829 htemp = hwndTree;
830 if(htemp)
831 WinSetFocus(HWND_DESKTOP,htemp);
832 else
833 WinSetFocus(HWND_DESKTOP,WinQueryWindow(hwnd,QW_PARENT));
834 }
835 return 0;
836 }
837
838 return PFNWPStatic(hwnd,msg,mp1,mp2);
839}
840
841
[377]842MRESULT EXPENTRY CommonCnrProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
843{
[2]844 DIRCNRDATA *dcd = WinQueryWindowPtr(hwnd,0);
845
846 switch(msg) {
847 case UM_FIXCNRMLE:
848 if(dcd) {
849
850 SWP swp,swpC;
851
852 if(WinQueryWindowPos(WinWindowFromID(hwnd,CID_MLE),&swp)) {
853 if(WinQueryWindowPos(hwnd,&swpC)) {
854 swpC.cx -= (WinQuerySysValue(HWND_DESKTOP,SV_CXVSCROLL) + 4);
855 swpC.cx -= swp.x;
856 WinSetWindowPos(WinWindowFromID(hwnd,CID_MLE),
857 HWND_TOP,
858 0,
859 0,
860 swpC.cx,
861 swp.cy + 2,
862 SWP_SIZE);
863 }
864 }
865 if(mp1)
866 WinSendMsg(WinWindowFromID(hwnd,CID_MLE),
867 MLM_SETTEXTLIMIT,
868 mp1,
869 MPVOID);
870 }
871 return 0;
872
873 case UM_FIXEDITNAME:
874 if(dcd) {
875 if(mp1 &&
876 (INT)mp1 != -1) {
877
878 CHAR *p;
879
880 WinSendMsg(hwnd,
881 UM_FIXCNRMLE,
882 MPFROMLONG(CCHMAXPATH),
883 MPVOID);
884 MLEdelete(WinWindowFromID(hwnd,CID_MLE),
885 0,
886 strlen((CHAR *)mp1) + 1);
887 WinSetDlgItemText(hwnd,
888 CID_MLE,
889 (CHAR *)mp1);
890 p = strrchr((CHAR *)mp1,'\\');
891 if(p) {
892 p++;
893 MLEsetcurposa(WinWindowFromID(hwnd,CID_MLE),
894 (p - (CHAR *)mp1));
895 MLEsetcurposc(WinWindowFromID(hwnd,CID_MLE),
896 strlen((CHAR *)mp1));
897 }
898 else
899 MLEsetcurpos(WinWindowFromID(hwnd,CID_MLE),
900 strlen((CHAR *)mp1));
901 }
902 else if(mp2) {
903 if((INT)mp1 == -1) {
904
905 PCNRITEM pci = (PCNRITEM)mp2;
906
907 WinSendMsg(hwnd,
908 CM_REMOVERECORD,
909 MPFROMP(&pci),
910 MPFROM2SHORT(1,CMA_FREE | CMA_INVALIDATE));
911 }
912 else {
913 Broadcast(WinQueryAnchorBlock(hwnd),
914 dcd->hwndParent,
915 UM_UPDATERECORD,
916 mp2,
917 MPVOID);
918 free(mp2);
919 }
920 }
921 }
922 return 0;
923 }
924 return PFNWPCnr(hwnd,msg,mp1,mp2);
925}
926
927
928HWND OpenDirCnr (HWND hwnd,HWND hwndParent,HWND hwndRestore,
[377]929 BOOL noautotile,char *directory)
930{
[2]931 SWP swp;
932 HWND hwndDir;
933
934 if(ParentIsDesktop(hwnd,hwndParent) ||
935 *(ULONG *)realappname != FM3UL)
936 StartDirCnr(HWND_DESKTOP,
937 directory,
938 hwndRestore,
939 1);
940 else if(*(ULONG *)realappname == FM3UL) {
941 if(!fAutoTile)
942 GetNextWindowPos(hwndParent,
943 &swp,
944 NULL,
945 NULL);
946 hwndDir = StartDirCnr(hwndParent,
947 directory,
948 hwndRestore,
949 1);
950 if(hwndDir) {
951 if(!fAutoTile)
952 WinSetWindowPos(hwndDir,
953 HWND_TOP,
954 swp.x,
955 swp.y,
956 swp.cx,
957 swp.cy,
958 SWP_MOVE | SWP_SIZE |
959 SWP_SHOW | SWP_ZORDER);
960 else if(!noautotile)
961 TileChildren(hwndParent,
962 TRUE);
963 WinSetWindowPos(hwndDir,
964 HWND_TOP,
965 0,
966 0,
967 0,
968 0,
969 SWP_RESTORE | SWP_SHOW | SWP_ACTIVATE);
970 }
971 }
972 else {
973
974 char s[256];
975
976 assign_ignores(s);
977 runemf2(WINDOWED | SEPARATE,
978 hwnd,
979 NULL,
980 NULL,
981 "VDIR.EXE %s%s\"%s%s\"",
982 (*s) ? s : NullStr,(*s) ? " " : NullStr,
983 directory,
984 (directory[strlen(directory) - 1] == '\\') ? "\\" : NullStr);
985 }
986 return hwndDir;
987}
988
[536]989//= IncrThreadUsage() Increment thread usage counter ==
990
991VOID IncrThreadUsage(VOID)
992{
993 if (hwndMain)
994 WinPostMsg(hwndMain,UM_THREADUSE,MPFROMLONG(1),MPVOID);
995}
996
997
998//= DecrThreadUsage() Decrement thread usage counter ==
999
1000VOID DecrThreadUsage(VOID)
1001{
1002 if (hwndMain)
1003 WinPostMsg(hwndMain,UM_THREADUSE,MPVOID,MPVOID);
1004}
Note: See TracBrowser for help on using the repository browser.