source: trunk/dll/viewinf.c@ 1391

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

Move nontranslated strings to init.c and codepage.c; use those strings in place of GetPString calls. Move other strings to a StringTable; minor cleanup and code changes to codepage.c to use a string array instead of GetPString calls. Ticket 340

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