source: trunk/dll/viewinf.c@ 1647

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

Fixed Help Viewer's falure to open help files from its dialog and fixed failure of files with spaces; Ticket 481. (The previous commit was for Ticket 480).

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