source: trunk/dll/chklist.c@ 1489

Last change on this file since 1489 was 1398, checked in by Gregg Young, 17 years ago

Move embeded strings to PCSZ variables or string table; Eliminate Error2 functions Runtime_Error with NULL format string returns "No data" error. Change declares from PSZ to PCSZ in functions where the variable isn't changed. Added btm as an executable file type in several additional places. Use fProtectOnly to prevent attempt to execute Dos and Win programs on "Protect only" installs in several additional places.

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