source: trunk/dll/viewinf.c@ 1648

Last change on this file since 1648 was 1648, checked in by Gregg Young, 14 years ago

Comments for last commit

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