source: trunk/dll/viewinf.c@ 1673

Last change on this file since 1673 was 1673, checked in by Gregg Young, 13 years ago

Update to Doxygen comment style Ticket 55. Also some minor code cleanup.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 21.0 KB
Line 
1
2/***********************************************************************
3
4 $Id: viewinf.c 1673 2012-12-30 18:51:01Z gyoung $
5
6 Launch inf viewer
7
8 Copyright (c) 1993-98 M. Kimes
9 Copyright (c) 2004, 2010 Steven H.Levine
10
11 01 Aug 04 SHL Rework lstrip/rstrip usage
12 17 Jul 06 SHL Use Runtime_Error
13 03 Nov 06 SHL Renames
14 03 Nov 06 SHL Count thread usage
15 20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
16 19 Jul 08 GKY Replace save_dir2(dir) with pFM2SaveDirectory and use BldFullPathName
17 10 Dec 08 SHL Integrate exception handler support
18 11 Jan 09 GKY Replace font names in the string file with global set at compile in init.c
19 07 Feb 09 GKY Eliminate Win_Error2 by moving function names to PCSZs used in Win_Error
20 07 Feb 09 GKY Allow user to turn off alert and/or error beeps in settings notebook.
21 08 Mar 09 GKY Additional strings move to PCSZs in init.c
22 28 Jun 09 GKY Added AddBackslashToPath() to remove repeatative code.
23 17 JAN 10 GKY Changes to get working with Watcom 1.9 Beta (1/16/10). Mostly cast CHAR CONSTANT * as CHAR *.
24 12 Nov 11 GKY Fixed HelpViewer's failure to open help files and subsequent failure with files with spaces.
25
26***********************************************************************/
27
28#include <stdlib.h>
29#include <string.h>
30#include <share.h>
31
32#define INCL_DOS
33#define INCL_WIN
34#define INCL_LONGLONG
35
36#include "fm3dll.h"
37#include "fm3dll2.h" // #define's for UM_*, control id's, etc.
38#include "notebook.h" // Data declaration(s)
39#include "init.h" // Data declaration(s)
40#include "mainwnd.h" // Data declaration(s)
41#include "fm3dlg.h"
42#include "fm3str.h"
43#include "errutil.h" // Dos_Error...
44#include "strutil.h" // GetPString
45#include "pathutil.h" // BldFullPathName
46#include "common.h" // DecrThreadUsage, IncrThreadUsage
47#include "viewinf.h"
48#include "misc.h" // ViewHelp
49#include "strips.h" // bstrip
50#include "systemf.h" // runemf2
51#include "dirs.h" // save_dir2
52#include "wrappers.h" // xfopen
53#include "fortify.h"
54#include "excputil.h" // xbeginthread
55
56#pragma data_seg(DATA1)
57
58static PSZ pszSrcFile = __FILE__;
59
60typedef struct
61{
62 USHORT size;
63 USHORT help;
64 HWND hwnd;
65}
66DUMMY;
67
68static VOID FillListboxThread(VOID * args)
69{
70 HWND hwnd;
71 DUMMY *dummy = (DUMMY *) args;
72 HAB hab2;
73 HMQ hmq2;
74 BOOL repeating = FALSE;
75
76 if (!dummy)
77 return;
78# ifdef FORTIFY
79 Fortify_EnterScope();
80# endif
81 hwnd = dummy->hwnd;
82 hab2 = WinInitialize(0);
83 if (hab2) {
84 hmq2 = WinCreateMsgQueue(hab2, 0);
85 if (hmq2) {
86
87 CHAR *env, *p, *holdenv;
88
89 WinCancelShutdown(hmq2, TRUE);
90 IncrThreadUsage();
91 priority_normal();
92 if (!dummy->help)
93 env = getenv("BOOKSHELF");
94 else
95 env = getenv("HELP");
96 if (!env) {
97 saymsg(MB_CANCEL,
98 hwnd,
99 GetPString(IDS_SYSERRORTEXT),
100 GetPString(IDS_ENVPATHERRORTEXT),
101 (dummy->help) ? "HELP" : "BOOKSHELF",
102 (dummy->help) ? PCSZ_DOTHLP : PCSZ_DOTINF);
103 goto NoEnv;
104 }
105 else {
106 holdenv = xmalloc(strlen(env) + 2, pszSrcFile, __LINE__);
107 if (holdenv) {
108 strcpy(holdenv, env);
109 Repeat:
110 if (holdenv[strlen(holdenv) - 1] != ';')
111 strcat(holdenv, ";");
112 p = strtok(holdenv, ";");
113 while (p) {
114 bstrip(p);
115 if (*p) {
116
117 CHAR mask[CCHMAXPATH], *enddir, text[CCHMAXPATH * 2];
118 FILEFINDBUF3 ffb;
119 HDIR hdir;
120 ULONG nm;
121
122 strcpy(mask, p);
123 AddBackslashToPath(mask);
124 //if (mask[strlen(mask) - 1] != '\\')
125 // strcat(mask, "\\");
126 enddir = mask + strlen(mask);
127 if (dummy->help)
128 strcat(mask, "*.HLP");
129 else
130 strcat(mask, "*.INF");
131 hdir = HDIR_CREATE;
132 nm = 1;
133 DosError(FERR_DISABLEHARDERR);
134 if (!DosFindFirst(mask, &hdir, FILE_NORMAL | FILE_ARCHIVED,
135 &ffb, sizeof(ffb), &nm, FIL_STANDARD)) {
136 do {
137 priority_normal();
138 strcpy(enddir, ffb.achName);
139 {
140 FILE *fp;
141 CHAR title[CCHMAXPATH];
142 CHAR *moderb = "rb";
143
144 *title = 0;
145 fp = xfsopen(mask, moderb, SH_DENYNO, pszSrcFile, __LINE__, TRUE);
146 if (fp) {
147 fread(title, 1, 3, fp);
148 if (*title != 'H' || title[1] != 'S' || title[2] != 'P') {
149 fclose(fp);
150 goto Continue;
151 }
152 *title = 0;
153 fseek(fp, 107, SEEK_SET);
154 fread(title, 1, CCHMAXPATH - 2, fp);
155 title[CCHMAXPATH - 3] = 0;
156 bstrip(title);
157 fclose(fp);
158 }
159 p = strchr(ffb.achName, '.');
160 if (p)
161 *p = 0;
162 sprintf(text,
163 "%-10.10s %-42.42s > %s",
164 ffb.achName, title, mask);
165 }
166 if (!WinIsWindow(hab2, hwnd))
167 break;
168 WinSendDlgItemMsg(hwnd,
169 VINF_LISTBOX,
170 LM_INSERTITEM,
171 MPFROM2SHORT(LIT_SORTASCENDING, 0),
172 MPFROMP(text));
173 Continue:
174 nm = 1;
175 } while (!DosFindNext(hdir, &ffb, sizeof(ffb), &nm));
176 DosFindClose(hdir);
177 priority_normal();
178 }
179 }
180 if (!WinIsWindow(hab2, hwnd))
181 break;
182 p = strtok(NULL, ";");
183 }
184 free(holdenv);
185 NoEnv:
186 if (WinIsWindow(hab2, hwnd) && !repeating) {
187
188 ULONG size;
189 CHAR *key = "INFPaths";
190
191 if (dummy->help)
192 key = "HLPPaths";
193 repeating = TRUE;
194 if (PrfQueryProfileSize(fmprof, FM3Str, key, &size) && size) {
195 holdenv = xmalloc(size + 2, pszSrcFile, __LINE__);
196 if (holdenv) {
197 if (!PrfQueryProfileData(fmprof, FM3Str, key, holdenv, &size)) {
198 Win_Error(hwnd, hwnd, pszSrcFile, __LINE__,
199 PCSZ_PRFQUERYPROFILEDATA);
200 free(holdenv);
201 }
202 else
203 goto Repeat;
204 }
205 }
206 }
207 }
208 }
209 WinDestroyMsgQueue(hmq2);
210 }
211 PostMsg(hwnd, UM_CONTAINER_FILLED, MPVOID, MPVOID);
212 DecrThreadUsage();
213 WinTerminate(hab2);
214 }
215 free(dummy);
216# ifdef FORTIFY
217 Fortify_LeaveScope();
218# endif
219}
220
221MRESULT EXPENTRY ViewInfProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
222{
223 static HWND hwndMe = (HWND) 0;
224 static BOOL help = FALSE;
225 static BOOL threaddone = TRUE;
226 static LONG ypos = 0;
227 static HPOINTER hptrIcon = (HPOINTER) 0;
228
229 switch (msg) {
230 case WM_INITDLG:
231 WinSendDlgItemMsg(hwnd, VINF_ENTRY, EM_SETTEXTLIMIT,
232 MPFROM2SHORT(1000, 0), MPVOID);
233 WinSendDlgItemMsg(hwnd, VINF_TOPIC, EM_SETTEXTLIMIT,
234 MPFROM2SHORT(CCHMAXPATH * 2, 0), MPVOID);
235 if (hwndMe) {
236 WinSetWindowPos(hwndMe, HWND_TOP, 0, 0, 0, 0, SWP_RESTORE | SWP_ZORDER |
237 SWP_ACTIVATE);
238 WinDismissDlg(hwnd, 0);
239 break;
240 }
241 help = (mp2 != (MPARAM) 0);
242 if (help) {
243
244 SWP swp;
245
246 WinQueryWindowPos(WinWindowFromID(hwnd, VINF_LISTBOX), &swp);
247 WinDestroyWindow(WinWindowFromID(hwnd, VINF_LISTBOX));
248 if (!WinCreateWindow(hwnd,
249 WC_LISTBOX,
250 (PSZ) NULL,
251 WS_VISIBLE | LS_HORZSCROLL,
252 swp.x,
253 swp.y,
254 swp.cx,
255 swp.cy,
256 hwnd, HWND_TOP, VINF_LISTBOX, NULL, NULL)) {
257 Win_Error(hwnd, hwnd, pszSrcFile, __LINE__,
258 PCSZ_WINCREATEWINDOW);
259 }
260 else {
261 //fixme to allow user to change presparams 1-10-09 GKY
262 WinSetPresParam(WinWindowFromID(hwnd, VINF_LISTBOX),
263 PP_FONTNAMESIZE,
264 strlen(FNT_10SYSTEMMONOTEXT) + 1,
265 (PVOID) FNT_10SYSTEMMONOTEXT);
266 }
267 WinSetWindowText(hwnd, (CHAR *) GetPString(IDS_VIEWHELPFILESTEXT));
268 WinShowWindow(WinWindowFromID(hwnd, VINF_SRCH), FALSE);
269 WinShowWindow(WinWindowFromID(hwnd, VINF_FILTER), FALSE);
270 WinShowWindow(WinWindowFromID(hwnd, VINF_TOPIC), FALSE);
271 WinShowWindow(WinWindowFromID(hwnd, VINF_TOPICHDR), FALSE);
272 }
273 hptrIcon = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, VINF_FRAME);
274 WinDefDlgProc(hwnd, WM_SETICON, MPFROMLONG(hptrIcon), MPVOID);
275 hwndMe = hwnd;
276 PostMsg(hwnd, UM_STRETCH, MPVOID, MPVOID);
277 PostMsg(hwnd, UM_RESCAN, MPVOID, MPVOID);
278 break;
279
280 case UM_RESCAN:
281 WinSendDlgItemMsg(hwnd, VINF_LISTBOX, LM_DELETEALL, MPVOID, MPVOID);
282 {
283 DUMMY *d;
284
285 d = xmallocz(sizeof(DUMMY), pszSrcFile, __LINE__);
286 if (!d) {
287 WinDismissDlg(hwnd, 0);
288 return 0;
289 }
290 else {
291 d->size = sizeof(DUMMY);
292 d->hwnd = hwnd;
293 if (help)
294 d->help = 1;
295 if (xbeginthread(FillListboxThread,
296 65536,
297 d,
298 pszSrcFile,
299 __LINE__) == -1)
300 {
301 free(d);
302 WinDismissDlg(hwnd, 0);
303 return 0;
304 }
305 WinEnableWindow(WinWindowFromID(hwnd, DID_CANCEL), FALSE);
306 threaddone = FALSE;
307 }
308 }
309 return 0;
310
311 case UM_CONTAINER_FILLED:
312 if (!(SHORT) WinSendDlgItemMsg(hwnd,
313 VINF_LISTBOX,
314 LM_QUERYITEMCOUNT, MPVOID, MPVOID)) {
315 saymsg(MB_CANCEL,
316 hwnd,
317 GetPString(IDS_ERRORTEXT), GetPString(IDS_NOFILESFOUNDTEXT));
318 hwndMe = (HWND) 0;
319 WinDismissDlg(hwnd, 0);
320 }
321 WinEnableWindow(WinWindowFromID(hwnd, DID_CANCEL), TRUE);
322 threaddone = TRUE;
323 return 0;
324
325 case WM_CONTROL:
326 switch (SHORT1FROMMP(mp1)) {
327 case VINF_LISTBOX:
328 switch (SHORT2FROMMP(mp1)) {
329 case LN_ENTER:
330 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(DID_OK, 0), MPVOID);
331 break;
332 }
333 break;
334 case VINF_ENTRY:
335 switch (SHORT2FROMMP(mp1)) {
336 case EN_CHANGE:
337 {
338 SHORT sSelect;
339 CHAR szBuffer[CCHMAXPATH];
340
341 WinQueryDlgItemText(hwnd, VINF_ENTRY, CCHMAXPATH, szBuffer);
342 bstrip(szBuffer);
343 sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
344 VINF_LISTBOX,
345 LM_SEARCHSTRING,
346 MPFROM2SHORT(LSS_SUBSTRING,
347 LIT_FIRST),
348 MPFROMP(szBuffer));
349 if (sSelect >= 0)
350 WinSendDlgItemMsg(hwnd,
351 VINF_LISTBOX,
352 LM_SETTOPINDEX,
353 MPFROM2SHORT(sSelect, 0), MPVOID);
354 }
355 break;
356 }
357 break;
358 }
359 return 0;
360
361 case WM_ADJUSTWINDOWPOS:
362 PostMsg(hwnd, UM_STRETCH, MPVOID, MPVOID);
363 break;
364
365 case UM_STRETCH:
366 {
367 SWP swpC, swp;
368
369 WinQueryWindowPos(hwnd, &swp);
370 if (!(swp.fl & (SWP_HIDE | SWP_MINIMIZE))) {
371 WinQueryWindowPos(WinWindowFromID(hwnd, VINF_LISTBOX), &swpC);
372 if (!ypos)
373 ypos = swpC.y;
374 WinSetWindowPos(WinWindowFromID(hwnd, VINF_LISTBOX), HWND_TOP,
375 SysVal(SV_CXSIZEBORDER),
376 ypos,
377 swp.cx - (SysVal(SV_CXSIZEBORDER) * 2),
378 (swp.cy - ypos) - (SysVal(SV_CYTITLEBAR) +
379 SysVal(SV_CYSIZEBORDER)),
380 SWP_MOVE | SWP_SIZE);
381 }
382 }
383 return 0;
384
385 case WM_COMMAND:
386 switch (SHORT1FROMMP(mp1)) {
387 case VINF_RESCAN:
388 PostMsg(hwnd, UM_RESCAN, MPVOID, MPVOID);
389 break;
390
391 case VINF_SRCH:
392 {
393 SHORT sSelect, sLast = LIT_FIRST;
394 CHAR szBuffer[CCHMAXPATH];
395
396 *szBuffer = 0;
397 WinQueryDlgItemText(hwnd, VINF_ENTRY, CCHMAXPATH, szBuffer);
398 rstrip(szBuffer);
399 if (!*szBuffer) {
400 sLast = (SHORT) WinSendDlgItemMsg(hwnd,
401 VINF_LISTBOX,
402 LM_QUERYITEMCOUNT,
403 MPVOID, MPVOID);
404 for (sSelect = 0; sSelect < sLast; sSelect++)
405 WinSendDlgItemMsg(hwnd,
406 VINF_LISTBOX,
407 LM_SELECTITEM,
408 MPFROM2SHORT(sSelect, 0),
409 MPFROM2SHORT(FALSE, 0));
410 break;
411 }
412 for (;;) {
413 sSelect = (SHORT) WinSendDlgItemMsg(hwnd, VINF_LISTBOX,
414 LM_SEARCHSTRING,
415 MPFROM2SHORT(LSS_SUBSTRING,
416 sLast),
417 MPFROMP(szBuffer));
418 if (sSelect <= sLast)
419 break;
420 if (sSelect >= 0)
421 WinSendDlgItemMsg(hwnd,
422 VINF_LISTBOX,
423 LM_SELECTITEM,
424 MPFROM2SHORT(sSelect, 0),
425 MPFROM2SHORT(TRUE, 0));
426 else
427 break;
428 sLast = sSelect;
429 }
430 }
431 break;
432
433 case VINF_FILTER:
434 {
435 SHORT sSelect, sTotal;
436
437 sTotal = (SHORT) WinSendDlgItemMsg(hwnd,
438 VINF_LISTBOX,
439 LM_QUERYITEMCOUNT, MPVOID, MPVOID);
440 sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
441 VINF_LISTBOX,
442 LM_QUERYSELECTION,
443 MPFROM2SHORT(LIT_FIRST, 0),
444 MPVOID);
445 if (sSelect == LIT_NONE) {
446 if (!fAlertBeepOff)
447 DosBeep(50, 100);
448 break;
449 }
450#ifdef BUGFIXED
451 sSelect = 0;
452 while (sSelect < sTotal) {
453 if (!WinSendDlgItemMsg(hwnd,
454 VINF_LISTBOX,
455 LM_SELECTITEM,
456 MPFROM2SHORT(sSelect, 0),
457 MPFROM2SHORT(FALSE, 0))) {
458 WinSendDlgItemMsg(hwnd,
459 VINF_LISTBOX,
460 LM_DELETEITEM,
461 MPFROM2SHORT(sSelect, 0), MPVOID);
462 sTotal--;
463 }
464 else
465 sSelect++;
466 }
467#else // !BUGIFIXED
468 for (sSelect = 0; sSelect < sTotal; sSelect++)
469 WinSendDlgItemMsg(hwnd,
470 VINF_LISTBOX,
471 LM_SETITEMHANDLE,
472 MPFROM2SHORT(sSelect, 0), MPVOID);
473 sSelect = LIT_FIRST;
474 for (;;) {
475 sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
476 VINF_LISTBOX,
477 LM_QUERYSELECTION,
478 MPFROM2SHORT(sSelect, 0),
479 MPVOID);
480 if (sSelect >= 0)
481 WinSendDlgItemMsg(hwnd,
482 VINF_LISTBOX,
483 LM_SETITEMHANDLE,
484 MPFROM2SHORT(sSelect, 0), MPFROMLONG(1));
485 else
486 break;
487 }
488 for (sSelect = 0; sSelect < sTotal; sSelect++)
489 WinSendDlgItemMsg(hwnd,
490 VINF_LISTBOX,
491 LM_SELECTITEM,
492 MPFROM2SHORT(sSelect, 0), MPFROM2SHORT(FALSE, 0));
493 sSelect = 0;
494 while (sSelect < sTotal) {
495 if (!WinSendDlgItemMsg(hwnd,
496 VINF_LISTBOX,
497 LM_QUERYITEMHANDLE,
498 MPFROM2SHORT(sSelect, 0), MPVOID)) {
499 WinSendDlgItemMsg(hwnd,
500 VINF_LISTBOX,
501 LM_DELETEITEM,
502 MPFROM2SHORT(sSelect, 0), MPVOID);
503 sTotal--;
504 }
505 else
506 sSelect++;
507 }
508#endif // BUGFIXED
509 }
510 break;
511
512 case VINF_DIRS:
513 {
514 CHAR szBuffer[1001], *key = "INFPaths";
515
516 if (help)
517 key = "HLPPaths";
518 *szBuffer = 0;
519 WinQueryDlgItemText(hwnd, VINF_ENTRY, 1000, szBuffer);
520 bstrip(szBuffer);
521 PrfWriteProfileData(fmprof,
522 FM3Str,
523 key,
524 (*szBuffer) ? szBuffer : NULL, strlen(szBuffer));
525 PostMsg(hwnd, UM_RESCAN, MPVOID, MPVOID);
526 }
527 break;
528
529 case DID_CANCEL:
530 hwndMe = (HWND) 0;
531 WinDismissDlg(hwnd, 0);
532 break;
533
534 case DID_OK:
535 {
536 SHORT sSelect;
537 CHAR text[CCHMAXPATH * 2], filename[CCHMAXPATH], *p;
538 FILE *fp;
539 BOOL notfirst = FALSE;
540 CHAR *modew = "w";
541
542 sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
543 VINF_LISTBOX,
544 LM_QUERYSELECTION,
545 MPFROM2SHORT(LIT_FIRST, 0),
546 MPVOID);
547 if (sSelect < 0) {
548 if (!fAlertBeepOff)
549 DosBeep(50, 100);
550 }
551 else {
552 if (help) {
553 *text = 0;
554 WinSendDlgItemMsg(hwnd,
555 VINF_LISTBOX,
556 LM_QUERYITEMTEXT,
557 MPFROM2SHORT(sSelect, CCHMAXPATH),
558 MPFROMP(text));
559 p = strchr(text, '>');
560 if (!p) {
561 if (!fAlertBeepOff)
562 DosBeep(50, 100);
563 break;
564 }
565 p++;
566 bstrip(p);
567 if (!*p) {
568 if (!fAlertBeepOff)
569 DosBeep(50, 100);
570 }
571 else {
572 // DbgMsg(pszSrcFile, __LINE__, "Help file %s", p);
573 ViewHelp(p);
574 }
575 break;
576 }
577 BldFullPathName(filename, pFM2SaveDirectory, "FM2VINF.CMD");
578 fp = xfopen(filename, modew, pszSrcFile, __LINE__, FALSE);
579 if (fp) {
580 fprintf(fp, "@ECHO OFF\nSET FM2REF=");
581 while (sSelect >= 0) {
582 *text = 0;
583 WinSendDlgItemMsg(hwnd,
584 VINF_LISTBOX,
585 LM_QUERYITEMTEXT,
586 MPFROM2SHORT(sSelect,
587 CCHMAXPATH), MPFROMP(text));
588 p = strchr(text, '>');
589 if (p) {
590 p++;
591 bstrip(p);
592 if (*p) {
593 if (notfirst)
594 fprintf(fp, "+");
595 notfirst = TRUE;
596 fprintf(fp, "%s", p);
597 }
598 }
599 sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
600 VINF_LISTBOX,
601 LM_QUERYSELECTION,
602 MPFROM2SHORT(sSelect, 0),
603 MPVOID);
604 } // while
605 *text = 0;
606 WinQueryDlgItemText(hwnd, VINF_TOPIC, CCHMAXPATH * 2, text);
607 bstrip(text);
608 fprintf(fp,
609 "\nVIEW FM2REF%s%s\nDEL %s\n",
610 (*text) ? " " : NullStr, text, filename);
611 fclose(fp);
612 runemf2(SEPARATE | WINDOWED | MINIMIZED |
613 BACKGROUND | INVISIBLE,
614 hwnd, pszSrcFile, __LINE__,
615 NULL, NULL, "%s /C %s", GetCmdSpec(FALSE), filename);
616 }
617 }
618 }
619 break;
620
621 case IDM_HELP:
622 if (hwndHelp) {
623 if (help)
624 WinSendMsg(hwndHelp,
625 HM_DISPLAY_HELP,
626 MPFROM2SHORT(HELP_VIEWHELPS, 0),
627 MPFROMSHORT(HM_RESOURCEID));
628 else
629 WinSendMsg(hwndHelp,
630 HM_DISPLAY_HELP,
631 MPFROM2SHORT(HELP_VIEWINF, 0),
632 MPFROMSHORT(HM_RESOURCEID));
633 }
634 break;
635 }
636 return 0;
637
638 case WM_CLOSE:
639 if (!threaddone)
640 return 0;
641 break;
642
643 case WM_DESTROY:
644 if (hwndMe == hwnd) {
645 hwndMe = (HWND) 0;
646 if (hptrIcon)
647 WinDestroyPointer(hptrIcon);
648 hptrIcon = (HPOINTER) 0;
649 }
650 break;
651 }
652 return WinDefDlgProc(hwnd, msg, mp1, mp2);
653}
654
655#pragma alloc_text(VIEWINFS,FillListboxThread,ViewInfProc)
Note: See TracBrowser for help on using the repository browser.