source: trunk/dll/chklist.c@ 1221

Last change on this file since 1221 was 1221, checked in by John Small, 17 years ago

Ticket 187: Moved typedef's and some #define's from fm3dll.h

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 15.1 KB
Line 
1
2/***********************************************************************
3
4 $Id: chklist.c 1221 2008-09-13 23:10:12Z jbs $
5
6 Utility windows and mouse positioning
7
8 Copyright (c) 1993-98 M. Kimes
9 Copyright (c) 2005, 2008 Steven H.Levine
10
11 10 Jan 05 SHL Allow DND_TARGET to hold CCHMAXPATH
12 14 Jul 06 SHL Use Runtime_Error
13 22 Mar 07 GKY Use QWL_USER
14 20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
15
16***********************************************************************/
17
18#include <string.h>
19#include <ctype.h>
20
21#define INCL_DOS
22#define INCL_WIN
23#define INCL_GPI
24#define INCL_LONGLONG
25
26#include "fm3dll.h"
27#include "fm3dll2.h" // #define's for UM_*, control id's, etc.
28#include "notebook.h" // Data declaration(s)
29#include "mainwnd.h" // Data declaration(s)
30#include "fm3dlg.h"
31#include "fm3str.h"
32#include "makelist.h" // AddToList
33#include "errutil.h" // Dos_Error...
34#include "strutil.h" // GetPString
35#include "getnames.h" // CustomFileDlg
36#include "chklist.h"
37#include "info.h" // FileInfoProc
38#include "defview.h" // QuickView
39#include "valid.h" // IsExecutable
40#include "walkem.h" // WalkAllDlgProc
41#include "misc.h" // PaintRecessedWindow
42
43#pragma data_seg(DATA1)
44
45static PSZ pszSrcFile = __FILE__;
46
47VOID CenterOverWindow(HWND hwnd)
48{
49 SWP swp;
50 POINTL ptl;
51
52 if (!fDontMoveMouse) {
53 if (WinQueryWindowPos(hwnd, &swp)) {
54 ptl.x = swp.x + (swp.cx / 2);
55 ptl.y = swp.y + (swp.cy / 2);
56 WinMapWindowPoints(WinQueryWindow(hwnd, QW_PARENT), HWND_DESKTOP, &ptl,
57 1L);
58 WinSetPointerPos(HWND_DESKTOP, ptl.x, ptl.y);
59 }
60 }
61}
62
63BOOL PopupMenu(HWND hwndParent, HWND hwndOwner, HWND hwndMenu)
64{
65 POINTL ptl;
66 BOOL rc;
67
68 if (!WinQueryPointerPos(HWND_DESKTOP, &ptl))
69 ptl.x = ptl.y = 32;
70 WinMapWindowPoints(HWND_DESKTOP, hwndParent, &ptl, 1L);
71 rc = WinPopupMenu(hwndParent, hwndOwner, hwndMenu,
72 ptl.x, ptl.y, 0,
73 PU_HCONSTRAIN | PU_VCONSTRAIN |
74 PU_KEYBOARD | PU_MOUSEBUTTON1);
75 if (rc)
76 CenterOverWindow(hwndMenu);
77 return rc;
78}
79
80VOID PosOverOkay(HWND hwnd)
81{
82 SWP swp;
83 POINTL ptl;
84
85 if (!fDontMoveMouse) {
86 if (WinQueryWindowPos(WinWindowFromID(hwnd, DID_OK), &swp)) {
87 ptl.x = swp.x + (swp.cx / 2);
88 ptl.y = swp.y + (swp.cy / 2);
89 WinMapWindowPoints(hwnd, HWND_DESKTOP, &ptl, 1L);
90 WinSetPointerPos(HWND_DESKTOP, ptl.x, ptl.y);
91 }
92 }
93}
94
95MRESULT EXPENTRY CheckListProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
96{
97 CHECKLIST *cl;
98
99 switch (msg) {
100 case WM_INITDLG:
101 if (mp2) {
102
103 SHORT x;
104
105 WinSetWindowPtr(hwnd, QWL_USER, (PVOID) mp2);
106 cl = (CHECKLIST *) mp2;
107 if (!cl->list || !cl->list[0]) {
108 WinDismissDlg(hwnd, 0);
109 break;
110 }
111 WinSetDlgItemText(hwnd, CHECK_PROMPT, cl->prompt);
112 for (x = 0; cl->list[x]; x++) {
113 WinSendDlgItemMsg(hwnd, CHECK_LISTBOX, LM_INSERTITEM,
114 MPFROM2SHORT(LIT_END, 0), MPFROMP(cl->list[x]));
115 WinSendDlgItemMsg(hwnd, CHECK_LISTBOX, LM_SELECTITEM,
116 MPFROM2SHORT(x, 0), MPFROMSHORT(TRUE));
117 }
118 PosOverOkay(hwnd);
119 WinEnableWindow(WinWindowFromID(hwnd, CHECK_INFO),
120 ((cl->flags & CHECK_FILES) != 0));
121 WinShowWindow(WinWindowFromID(hwnd, CHECK_INFO),
122 ((cl->flags & CHECK_FILES) != 0));
123 {
124 HBITMAP hbm, hbmd, hbmdd;
125 HPS hps;
126
127 hps = WinGetPS(WinWindowFromID(hwnd, CHECK_BITMAP));
128 hbm = GpiLoadBitmap(hps, 0, cl->cmd, 28, 28);
129 if (hbm) {
130 hbmd =
131 (HBITMAP) WinSendDlgItemMsg(hwnd, CHECK_BITMAP, SM_QUERYHANDLE,
132 MPVOID, MPVOID);
133 hbmdd =
134 (HBITMAP) WinSendDlgItemMsg(hwnd, CHECK_BITMAP, SM_SETHANDLE,
135 MPFROMLONG(hbm), MPVOID);
136 if (hbmdd && hbmd && hbmd != hbmdd)
137 GpiDeleteBitmap(hbmd);
138 }
139 if (hps)
140 WinReleasePS(hps);
141 WinSetWindowPos(WinWindowFromID(hwnd, CHECK_BITMAP), HWND_TOP,
142 0, 0, 28, 28, SWP_SIZE);
143 }
144 }
145 else
146 WinDismissDlg(hwnd, 0);
147 break;
148
149 case WM_ADJUSTWINDOWPOS:
150 PostMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
151 break;
152
153 case UM_SETDIR:
154 PaintRecessedWindow(WinWindowFromID(hwnd, CHECK_HELP), (HPS) 0, FALSE,
155 TRUE);
156 return 0;
157
158 case WM_CONTROL:
159 switch (SHORT1FROMMP(mp1)) {
160 case CHECK_LISTBOX:
161 switch (SHORT2FROMMP(mp1)) {
162 case LN_ENTER:
163 {
164 SHORT x;
165 CHAR szBuffer[CCHMAXPATH];
166
167 x = (SHORT) WinSendDlgItemMsg(hwnd, CHECK_LISTBOX,
168 LM_QUERYSELECTION,
169 MPFROMSHORT(LIT_FIRST), MPVOID);
170 if (x >= 0) {
171 *szBuffer = 0;
172 WinSendDlgItemMsg(hwnd, CHECK_LISTBOX, LM_QUERYITEMTEXT,
173 MPFROM2SHORT(x, CCHMAXPATH), MPFROMP(szBuffer));
174 if (*szBuffer)
175 QuickView(hwnd, szBuffer);
176 }
177 }
178 break;
179 }
180 break;
181 }
182 return 0;
183
184 case WM_COMMAND:
185 switch (SHORT1FROMMP(mp1)) {
186 case CHECK_INFO:
187 cl = INSTDATA(hwnd);
188 if (cl)
189 WinDlgBox(HWND_DESKTOP, hwnd, FileInfoProc, FM3ModHandle,
190 FLE_FRAME, (PVOID) cl->list);
191 break;
192
193 case IDM_HELP:
194 if (hwndHelp)
195 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
196 MPFROM2SHORT(HELP_CHECKLIST, 0),
197 MPFROMSHORT(HM_RESOURCEID));
198 break;
199
200 case DID_OK:
201 cl = INSTDATA(hwnd);
202 if (cl) {
203
204 CHAR szBuffer[CCHMAXPATH + 1];
205 UINT numfiles = 0, numalloc = 0;
206 INT error;
207 SHORT x;
208
209 FreeList(cl->list);
210 cl->list = NULL;
211 x = (SHORT) WinSendDlgItemMsg(hwnd, CHECK_LISTBOX, LM_QUERYSELECTION,
212 MPFROMSHORT(LIT_FIRST), MPVOID);
213 if (x >= 0) {
214 do {
215 *szBuffer = 0;
216 WinSendDlgItemMsg(hwnd, CHECK_LISTBOX, LM_QUERYITEMTEXT,
217 MPFROM2SHORT(x, CCHMAXPATH), MPFROMP(szBuffer));
218 if (*szBuffer) {
219 error = AddToList(szBuffer, &cl->list, &numfiles, &numalloc);
220 if (error) {
221 Runtime_Error(pszSrcFile, __LINE__, "AddToList");
222 break;
223 }
224 }
225 x = (SHORT) WinSendDlgItemMsg(hwnd, CHECK_LISTBOX,
226 LM_QUERYSELECTION,
227 MPFROMSHORT(x), MPVOID);
228 } while (x >= 0);
229 }
230 WinDismissDlg(hwnd, 1);
231 }
232 else
233 WinDismissDlg(hwnd, 0);
234 break;
235
236 case DID_CANCEL:
237 WinDismissDlg(hwnd, 0);
238 break;
239 }
240 return 0;
241 }
242 return WinDefDlgProc(hwnd, msg, mp1, mp2);
243}
244
245MRESULT EXPENTRY DropListProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
246{
247 CHECKLIST *cl;
248 static BOOL Shadow = FALSE, Wild = FALSE;
249
250 switch (msg) {
251 case WM_INITDLG:
252 if (mp2) {
253
254 SHORT x;
255
256 WinSetWindowPtr(hwnd, QWL_USER, (PVOID) mp2);
257 cl = (CHECKLIST *) mp2;
258 if (!cl->list || !cl->list[0]) {
259 WinDismissDlg(hwnd, 0);
260 break;
261 }
262 if (IsRoot(cl->list[0])) {
263 WinDismissDlg(hwnd, DND_COMPARE);
264 break;
265 }
266 WinSendDlgItemMsg(hwnd, DND_LISTBOX, LM_DELETEALL, MPVOID, MPVOID);
267 for (x = 0; cl->list[x]; x++) {
268 WinSendDlgItemMsg(hwnd, DND_LISTBOX, LM_INSERTITEM,
269 MPFROM2SHORT(LIT_END, 0), MPFROMP(cl->list[x]));
270 WinSendDlgItemMsg(hwnd, DND_LISTBOX, LM_SELECTITEM,
271 MPFROM2SHORT(x, 0), MPFROMSHORT(TRUE));
272 }
273 WinSendDlgItemMsg(hwnd, DND_TARGET, EM_SETTEXTLIMIT,
274 (MPARAM) CCHMAXPATH, (MPARAM) 0);
275 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
276 }
277 else
278 WinDismissDlg(hwnd, 0);
279 break;
280
281 case UM_UNDO:
282 cl = INSTDATA(hwnd);
283 if (cl) {
284
285 CHAR *p;
286
287 WinSetDlgItemText(hwnd, DND_TARGET, cl->prompt);
288 WinEnableWindow(WinWindowFromID(hwnd, DND_LAUNCH),
289 (IsExecutable(cl->prompt)));
290 WinEnableWindow(WinWindowFromID(hwnd, DND_COPY), TRUE);
291 WinEnableWindow(WinWindowFromID(hwnd, DND_MOVE), TRUE);
292 WinEnableWindow(WinWindowFromID(hwnd, DND_RENAME), TRUE);
293 WinEnableWindow(WinWindowFromID(hwnd, DND_OBJECT), TRUE);
294 WinEnableWindow(WinWindowFromID(hwnd, DND_SHADOW), TRUE);
295 WinEnableWindow(WinWindowFromID(hwnd, DND_EXTRACT), TRUE);
296 WinEnableWindow(WinWindowFromID(hwnd, DND_SETICON), FALSE);
297 p = strrchr(cl->list[0], '.');
298 if (p) {
299 p++;
300 if (!stricmp(p, "ICO") || !stricmp(p, "PTR"))
301 WinEnableWindow(WinWindowFromID(hwnd, DND_SETICON), TRUE);
302 }
303 if (IsFile(cl->prompt)) {
304 WinEnableWindow(WinWindowFromID(hwnd, DND_OBJECT), FALSE);
305 WinEnableWindow(WinWindowFromID(hwnd, DND_SHADOW), FALSE);
306 WinEnableWindow(WinWindowFromID(hwnd, DND_EXTRACT), FALSE);
307 WinEnableWindow(WinWindowFromID(hwnd, DND_RENAME), FALSE);
308 }
309 else {
310
311 ARC_TYPE *info;
312
313 info = find_type(cl->list[0], NULL);
314 if (!info)
315 WinEnableWindow(WinWindowFromID(hwnd, DND_EXTRACT), FALSE);
316 }
317 if (Shadow)
318 WinCheckButton(hwnd, DND_SHADOW, TRUE);
319 if (Wild)
320 WinCheckButton(hwnd, DND_RENAME, TRUE);
321 PostMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
322 if (cl->prompt && isalpha(*cl->prompt) &&
323 (driveflags[toupper(*cl->prompt) - 'A'] & DRIVE_NOTWRITEABLE)) {
324 WinEnableWindow(WinWindowFromID(hwnd, DND_COPY), FALSE);
325 WinEnableWindow(WinWindowFromID(hwnd, DND_MOVE), FALSE);
326 WinEnableWindow(WinWindowFromID(hwnd, DND_RENAME), FALSE);
327 WinEnableWindow(WinWindowFromID(hwnd, DND_OBJECT), FALSE);
328 WinEnableWindow(WinWindowFromID(hwnd, DND_SHADOW), FALSE);
329 WinEnableWindow(WinWindowFromID(hwnd, DND_EXTRACT), FALSE);
330 }
331 if (cl->prompt && IsFile(cl->prompt) == 1) {
332
333 ARC_TYPE *info;
334
335 info = find_type(cl->prompt, NULL);
336 if (!info) {
337 WinEnableWindow(WinWindowFromID(hwnd, DND_COPY), FALSE);
338 WinEnableWindow(WinWindowFromID(hwnd, DND_MOVE), FALSE);
339 WinEnableWindow(WinWindowFromID(hwnd, DND_RENAME), FALSE);
340 WinEnableWindow(WinWindowFromID(hwnd, DND_OBJECT), FALSE);
341 WinEnableWindow(WinWindowFromID(hwnd, DND_SHADOW), FALSE);
342 WinEnableWindow(WinWindowFromID(hwnd, DND_EXTRACT), FALSE);
343 }
344 }
345 }
346 break;
347
348 case UM_SETUP:
349 cl = WinQueryWindowPtr(hwnd, QWL_USER);
350 if (cl) {
351 if (cl->flags == DO_MOVE)
352 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, DND_MOVE));
353 else if (cl->flags == DO_LINK)
354 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, DND_COMPARE));
355 else
356 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, DND_COPY));
357 }
358 return 0;
359
360 case WM_ADJUSTWINDOWPOS:
361 PostMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
362 break;
363
364 case UM_SETDIR:
365 PaintRecessedWindow(WinWindowFromID(hwnd, DND_HELP), (HPS) 0, FALSE,
366 TRUE);
367 return 0;
368
369 case WM_CONTROL:
370 switch (SHORT1FROMMP(mp1)) {
371 case DND_LISTBOX:
372 switch (SHORT2FROMMP(mp1)) {
373 case LN_SETFOCUS:
374 WinSetDlgItemText(hwnd, DND_HELP, GetPString(IDS_DNDLISTBOXHELPTEXT));
375 break;
376 case LN_KILLFOCUS:
377 WinSetDlgItemText(hwnd, DND_HELP, GetPString(IDS_DNDHELPTEXT));
378 break;
379 case LN_ENTER:
380 {
381 SHORT x;
382 CHAR szBuffer[CCHMAXPATH];
383
384 x = (SHORT) WinSendDlgItemMsg(hwnd, DND_LISTBOX, LM_QUERYSELECTION,
385 MPFROMSHORT(LIT_FIRST), MPVOID);
386 if (x >= 0) {
387 *szBuffer = 0;
388 WinSendDlgItemMsg(hwnd, DND_LISTBOX, LM_QUERYITEMTEXT,
389 MPFROM2SHORT(x, CCHMAXPATH), MPFROMP(szBuffer));
390 if (*szBuffer)
391 QuickView(hwnd, szBuffer);
392 }
393 }
394 break;
395 }
396 break;
397 case DND_TARGET:
398 switch (SHORT2FROMMP(mp1)) {
399 case EN_SETFOCUS:
400 WinSetDlgItemText(hwnd, DND_HELP, GetPString(IDS_DNDTARGETHELPTEXT));
401 break;
402 case EN_KILLFOCUS:
403 WinSetDlgItemText(hwnd, DND_HELP, GetPString(IDS_DNDHELPTEXT));
404 break;
405 }
406 break;
407 }
408 return 0;
409
410 case WM_COMMAND:
411 switch (SHORT1FROMMP(mp1)) {
412 case IDM_HELP:
413 if (hwndHelp)
414 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
415 MPFROM2SHORT(HELP_DNDDLG, 0), MPFROMSHORT(HM_RESOURCEID));
416 break;
417
418 case DND_INFO:
419 cl = INSTDATA(hwnd);
420 if (cl)
421 WinDlgBox(HWND_DESKTOP, hwnd, FileInfoProc, FM3ModHandle,
422 FLE_FRAME, (PVOID) cl->list);
423 break;
424
425 case DND_CHANGETARGET:
426 cl = INSTDATA(hwnd);
427 if (cl) {
428 if (cl->prompt && *cl->prompt) {
429 if (!IsFile(cl->prompt)) {
430
431 CHAR newpath[CCHMAXPATH];
432
433 strcpy(newpath, cl->prompt);
434 if (WinDlgBox(HWND_DESKTOP, hwnd, WalkAllDlgProc,
435 FM3ModHandle, WALK_FRAME,
436 MPFROMP(newpath)) && *newpath) {
437 strcpy(cl->prompt, newpath);
438 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
439 }
440 }
441 else {
442
443 FILEDLG fdlg;
444 FILESTATUS3 fs3;
445 CHAR drive[3], *pdrive = drive, filename[CCHMAXPATH], *p;
446
447 memset(&fdlg, 0, sizeof(FILEDLG));
448 fdlg.cbSize = (ULONG) sizeof(FILEDLG);
449 fdlg.fl = FDS_HELPBUTTON | FDS_CENTER |
450 FDS_OPEN_DIALOG | FDS_CUSTOM;
451 fdlg.pszTitle = GetPString(IDS_NEWTARGETTEXT);
452 fdlg.pszOKButton = GetPString(IDS_CHANGETEXT);
453 *drive = *cl->prompt;
454 drive[1] = ':';
455 drive[2] = 0;
456 fdlg.pszIDrive = pdrive;
457 strcpy(fdlg.szFullFile, cl->prompt);
458 p = strrchr(fdlg.szFullFile, '\\');
459 if (p)
460 *p = 0;
461 strcat(fdlg.szFullFile, "\\*");
462
463 fdlg.pfnDlgProc = (PFNWP) CustomFileDlg;
464 fdlg.hMod = FM3ModHandle;
465 fdlg.usDlgId = FDLG_FRAME;
466
467 if (WinFileDlg(HWND_DESKTOP, hwnd, &fdlg)) {
468 if (fdlg.lReturn != DID_CANCEL && !fdlg.lSRC) {
469 if (!DosQueryPathInfo(fdlg.szFullFile,
470 FIL_QUERYFULLNAME,
471 filename, sizeof(filename))) {
472 if (!DosQueryPathInfo(filename,
473 FIL_STANDARD, &fs3, sizeof(fs3))) {
474 p = filename;
475 while (*p) {
476 if (*p == '/')
477 *p = '\\';
478 p++;
479 }
480 strcpy(cl->prompt, filename);
481 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
482 }
483// else saymsg(MB_ENTER,hwnd,DEBUG_STRING,"DosQueryPathInfo FIL_STANDARDL failed");
484 }
485// else saymsg(MB_ENTER,hwnd,DEBUG_STRING,"DosQueryPathInfo FIL_QUERYFULLNAME failed");
486 }
487// else saymsg(MB_ENTER,hwnd,DEBUG_STRING,"lReturn = %lu lSRC = %lu",fdlg.lReturn,fdlg.lSRC);
488 }
489// else saymsg(MB_ENTER,hwnd,DEBUG_STRING,"WinFileDlg failed");
490 }
491 }
492 }
493 break;
494
495 case DND_TARGETINFO:
496 cl = INSTDATA(hwnd);
497 if (cl) {
498
499 CHAR *list[2];
500
501 list[0] = cl->prompt;
502 list[1] = NULL;
503 WinDlgBox(HWND_DESKTOP, hwnd, FileInfoProc, FM3ModHandle,
504 FLE_FRAME, (PVOID) & list);
505 }
506 break;
507
508 case DND_EXTRACT:
509 case DND_LAUNCH:
510 case DND_COPY:
511 case DND_MOVE:
512 case DND_OBJECT:
513 case DND_COMPARE:
514 case DND_SETICON:
515 case DND_APPEND:
516 cl = INSTDATA(hwnd);
517 if (cl) {
518
519 SHORT x;
520 CHAR szBuffer[CCHMAXPATH + 1];
521 UINT numfiles = 0, numalloc = 0;
522 INT error;
523 USHORT cmd;
524
525 FreeList(cl->list);
526 cl->list = NULL;
527 x = (SHORT) WinSendDlgItemMsg(hwnd, DND_LISTBOX, LM_QUERYSELECTION,
528 MPFROMSHORT(LIT_FIRST), MPVOID);
529 if (x >= 0) {
530 do {
531 *szBuffer = 0;
532 WinSendDlgItemMsg(hwnd, DND_LISTBOX, LM_QUERYITEMTEXT,
533 MPFROM2SHORT(x, CCHMAXPATH), MPFROMP(szBuffer));
534 if (*szBuffer) {
535 error = AddToList(szBuffer, &cl->list, &numfiles, &numalloc);
536 if (error) {
537 Runtime_Error(pszSrcFile, __LINE__, "AddToList");
538 break;
539 }
540 }
541 x = (SHORT) WinSendDlgItemMsg(hwnd, DND_LISTBOX,
542 LM_QUERYSELECTION,
543 MPFROMSHORT(x), MPVOID);
544 } while (x >= 0);
545 }
546 cmd = SHORT1FROMMP(mp1);
547 switch (cmd) {
548 case DND_COPY:
549 if (WinQueryButtonCheckstate(hwnd, DND_RENAME)) {
550 Wild = TRUE;
551 cmd = DND_WILDCOPY;
552 }
553 else
554 Wild = FALSE;
555 break;
556 case DND_MOVE:
557 if (WinQueryButtonCheckstate(hwnd, DND_RENAME)) {
558 Wild = TRUE;
559 cmd = DND_WILDMOVE;
560 }
561 else
562 Wild = FALSE;
563 break;
564 case DND_OBJECT:
565 if (WinQueryButtonCheckstate(hwnd, DND_SHADOW)) {
566 Shadow = TRUE;
567 cmd = DND_SHADOW;
568 }
569 else
570 Shadow = FALSE;
571 break;
572 }
573 WinDismissDlg(hwnd, cmd);
574 }
575 else
576 WinDismissDlg(hwnd, 0);
577 break;
578
579 case DID_CANCEL:
580 WinDismissDlg(hwnd, 0);
581 break;
582 }
583 return 0;
584 }
585 return WinDefDlgProc(hwnd, msg, mp1, mp2);
586}
587
588#pragma alloc_text(CHECKLIST,CheckListProc)
589#pragma alloc_text(DNDLIST,DropListProc)
590#pragma alloc_text(MISC7,PosOverOkay,CenterOverWindow,PopupMenu)
Note: See TracBrowser for help on using the repository browser.