source: trunk/dll/printer.c @ 574

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

Use QWL_USER; Replace doesn't move the command and Okay on cmd dialog removed error on unchanged command

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 16.1 KB
Line 
1
2/***********************************************************************
3
4  $Id: printer.c 574 2007-03-23 22:37:07Z gyoung $
5
6  Print file list
7
8  Copyright (c) 1993-98 M. Kimes
9  Copyright (c) 2004, 2006 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  22 Mar 07 GKY Use QWL_USER
16
17***********************************************************************/
18
19#define INCL_DOS
20#define INCL_WIN
21
22#include <os2.h>
23#include <stdlib.h>
24#include <string.h>
25#include <ctype.h>
26#include <stdio.h>
27#include <io.h>
28#include <share.h>
29#include <string.h>
30#include "fm3dll.h"
31#include "fm3dlg.h"
32#include "fm3str.h"
33
34#pragma data_seg(DATA1)
35
36static PSZ pszSrcFile = __FILE__;
37
38#pragma alloc_text(PRINTER,PrinterReady,SayPrinterReady)
39#pragma alloc_text(PRINTER2,PrintListThread)
40#pragma alloc_text(PRINTER3,PrintDlgProc)
41
42static HMTX PrintSem = 0;
43
44BOOL PrinterReady(CHAR * printdevname)
45{
46  FILE *printhandle;
47  CHAR param = 0, data = 0;
48  ULONG datalen = 1L, parmlen = 1L, htype, flagword;
49
50  if (!fWorkPlace)                      /* assume spooler is active */
51    return TRUE;
52  DosError(FERR_DISABLEHARDERR);
53  printhandle = xfopen(printdevname, "a+", pszSrcFile, __LINE__);
54  if (printhandle) {
55    if (!strnicmp(printdevname, "COM", 3) && isdigit(printdevname[3])) {
56      fclose(printhandle);
57      return TRUE;
58    }
59    if (!DosQueryHType(fileno(printhandle), &htype, &flagword) &&
60        !(htype & 7)) {
61      fclose(printhandle);
62      return TRUE;
63    }
64    if (DosDevIOCtl(fileno(printhandle), 5L, 0x00000066, (PVOID) & param,
65                    1L, &parmlen, (PVOID) & data, 1L,
66                    &datalen) != 0x00000100) {
67      fclose(printhandle);
68      return FALSE;
69    }
70    fclose(printhandle);
71    if (data & 32)                      /* bit 5 is out of paper */
72      return FALSE;
73    return TRUE;
74  }
75  return FALSE;
76}
77
78BOOL SayPrinterReady(HWND hwnd)
79{
80  if (!hwnd)
81    hwnd = HWND_DESKTOP;
82  if (!PrinterReady(printer)) {
83    saymsg(MB_ENTER | MB_ICONEXCLAMATION,
84           hwnd,
85           GetPString(IDS_NOTETEXT), GetPString(IDS_PRINTERNOTREADYTEXT));
86    return FALSE;
87  }
88  return TRUE;
89}
90
91//=== PrintListThread - background-print a list of files ===
92
93VOID PrintListThread(VOID * arg)
94{
95  HAB hab2;
96  HMQ hmq2;
97  LISTINFO *li = (LISTINFO *) arg;
98  register INT x;
99  FILE *fpi, *fpo;
100  CHAR s[CCHMAXPATH + 80];
101  FILESTATUS3 fs3;
102  LONG cols, lines, pages, z, lmargin, rmargin;
103  BOOL endline, endpage, startpage, skipping, firstpass;
104  int c;
105  APIRET rc = MBID_YES;
106
107  if (StopPrinting)
108    goto Abort;
109  if (!PrintSem) {
110    if (DosCreateMutexSem(NULL, &PrintSem, 0, FALSE)) {
111      Dos_Error(MB_CANCEL, rc, HWND_DESKTOP, pszSrcFile, __LINE__,
112                "DosCreateMutexSem");
113      goto Abort;
114    }
115  }
116  priority_normal();
117  hab2 = WinInitialize(0);
118  if (hab2) {
119    hmq2 = WinCreateMsgQueue(hab2, 0);
120    if (hmq2) {
121      WinCancelShutdown(hmq2, TRUE);
122      IncrThreadUsage();
123      if (li && li->list && li->list[0]) {
124        AddNote(GetPString(IDS_PRINTINGLISTTEXT));
125        for (x = 0; li->list[x]; x++) {
126          if (rc == MBID_CANCEL)
127            break;
128          DosError(FERR_DISABLEHARDERR);
129          if (DosQueryPathInfo
130              (li->list[x], FIL_STANDARD, &fs3, (ULONG) sizeof(fs3))
131              || (fs3.attrFile & FILE_DIRECTORY) || !fs3.cbFile)
132            continue;
133          if (StopPrinting)
134            break;
135          DosRequestMutexSem(PrintSem, 240000L);
136          if (StopPrinting)
137            break;
138          if (!PrinterReady(li->targetpath))
139            Runtime_Error(pszSrcFile, __LINE__, "printer %s error",
140                          li->targetpath);
141          else {
142            fpi = _fsopen(li->list[x], "r", SH_DENYWR);
143            if (!fpi)
144              Runtime_Error(pszSrcFile, __LINE__, "cannot open %s",
145                            li->list[x]);
146            else {
147              fpo = _fsopen(li->targetpath, "a+", SH_DENYRW);
148              if (!fpo)
149                Runtime_Error(pszSrcFile, __LINE__, "cannot open %s",
150                              li->targetpath);
151              else {
152                sprintf(s, GetPString(IDS_PRINTINGTEXT), li->list[x]);
153                AddNote(s);
154                firstpass = TRUE;
155                skipping = FALSE;
156                lmargin = prnlmargin;
157                rmargin = prnrmargin;
158                if (prnformfeedbefore) {
159                  if (!skipping)
160                    fputc('\x0c', fpo);
161                }
162              Again:
163                cols = lines = pages = 0;
164                endline = endpage = FALSE;
165                startpage = TRUE;
166                while ((c = fgetc(fpi)) != EOF) {
167                  if (StopPrinting || ferror(fpo))
168                    break;
169                  if (prnformat) {
170                    if (startpage) {
171                      pages++;
172                      if (prnpagenums) {
173                        if (!skipping)
174                          fprintf(fpo, "%*.*s#%lu",
175                                  lmargin, lmargin, " ", pages);
176                      }
177                      for (z = 0; z < prntmargin; z++) {
178                        if (!skipping)
179                          fputc('\n', fpo);
180                      }
181                      lines = prntmargin;
182                      endline = endpage = FALSE;
183                      cols = 0;
184                      startpage = FALSE;
185                    }
186                    if (!cols) {
187                      for (z = 0; z < lmargin; z++) {
188                        if (!skipping)
189                          fputc(' ', fpo);
190                      }
191                      cols = lmargin;
192                    }
193                    if (!skipping) {
194                      if (c == '\t') {
195                        for (z = 0; z < prntabspaces &&
196                             cols + z < prnwidth - rmargin; z++)
197                          fputc(' ', fpo);
198                      }
199                      else
200                        fputc(c, fpo);
201                    }
202                    if (c == '\x0c')
203                      endpage = TRUE;
204                    else if (c == '\n') {
205                      lines++;
206                      cols = 0;
207                      for (z = 1; z < prnspacing; z++) {
208                        if (prnlength - lines <= prnbmargin)
209                          break;
210                        if (!skipping)
211                          fputc('\n', fpo);
212                        lines++;
213                      }
214                      if (prnlength - lines <= prnbmargin)
215                        endpage = TRUE;
216                    }
217                    else {
218                      cols++;
219                      if (c == '\t')
220                        c += prntabspaces;
221                      if (prnwidth - cols <= rmargin) {
222                        endline = TRUE;
223                        if (!skipping)
224                          fputc('\n', fpo);
225                        lines++;
226                      }
227                      for (z = 1; z < prnspacing; z++) {
228                        if (prnlength - lines <= prnbmargin)
229                          break;
230                        if (!skipping)
231                          fputc('\n', fpo);
232                        lines++;
233                      }
234                    }
235                    if (endline) {
236                      do {
237                        c = fgetc(fpi);
238                        if (c == '\n')
239                          break;
240                      } while (isspace(c) && c != EOF);
241                      if (c == EOF)
242                        break;
243                      if (!isspace(c))
244                        ungetc(c, fpi);
245                      endline = FALSE;
246                      cols = 0;
247                      if (prnlength - lines <= prnbmargin)
248                        endpage = TRUE;
249                    }
250                    if (endpage) {
251                      if (prnbmargin) {
252                        if (c != '\x0c') {
253                          if (!skipping)
254                            fputc('\r\x0c', fpo);
255                        }
256                      }
257                      lines = cols = 0;
258                      endpage = FALSE;
259                      startpage = TRUE;
260                      do {
261                        c = fgetc(fpi);
262                      } while (c == '\n');
263                      if (c == EOF)
264                        break;
265                      ungetc(c, fpi);
266                      if (prnformat && prnalt)
267                        skipping = (skipping) ? FALSE : TRUE;
268                      DosSleep(1L);
269                    }
270                  }
271                  else
272                    fputc(c, fpo);
273                }
274                if (prnalt && prnformat && firstpass && pages > 1) {
275                  fclose(fpo);
276                  fpo = _fsopen(li->targetpath, "a+", SH_DENYRW);
277                  if (fpo) {
278                    rewind(fpi);
279                    firstpass = FALSE;
280                    skipping = TRUE;
281                    rc = saymsg(MB_YESNOCANCEL | MB_ICONEXCLAMATION,
282                                HWND_DESKTOP,
283                                GetPString(IDS_PRINTTITLETEXT),
284                                GetPString(IDS_PRINTEVENTEXT), li->list[x]);
285                    if (rc == MBID_YES) {
286                      lmargin = prnrmargin;
287                      rmargin = prnlmargin;
288                      fputc('\x0c', fpo);
289                      goto Again;
290                    }
291                  }
292                  else
293                    saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
294                           HWND_DESKTOP,
295                           GetPString(IDS_PRINTTITLETEXT),
296                           GetPString(IDS_PRINTCANTREOPENTEXT),
297                           li->targetpath);
298                }
299                if (prnformfeedafter)
300                  fputc('\x0c', fpo);
301                if (!StopPrinting) {
302                  sprintf(s, GetPString(IDS_PRINTEDTEXT), li->list[x]);
303                  AddNote(s);
304                }
305                fclose(fpo);
306              }
307              fclose(fpi);
308            }
309          }
310          DosReleaseMutexSem(PrintSem);
311          DosSleep(1L);
312        }
313        if (!StopPrinting)
314          AddNote(GetPString(IDS_PRINTEDLISTTEXT));
315      }
316      WinDestroyMsgQueue(hmq2);
317    }
318    DecrThreadUsage();
319    WinTerminate(hab2);
320  }
321Abort:
322  if (li)
323    FreeListInfo(li);
324}
325
326MRESULT EXPENTRY PrintDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
327{
328  LISTINFO *li;
329
330  switch (msg) {
331  case WM_INITDLG:
332    if (!mp2)
333      WinDismissDlg(hwnd, 0);
334    else {
335      WinSetWindowPtr(hwnd, QWL_USER, mp2);
336      WinSendDlgItemMsg(hwnd, PRN_WIDTH, EM_SETTEXTLIMIT,
337                        MPFROM2SHORT(3, 0), MPVOID);
338      WinSendDlgItemMsg(hwnd, PRN_LENGTH, EM_SETTEXTLIMIT,
339                        MPFROM2SHORT(3, 0), MPVOID);
340      WinSendDlgItemMsg(hwnd, PRN_LMARGIN, EM_SETTEXTLIMIT,
341                        MPFROM2SHORT(2, 0), MPVOID);
342      WinSendDlgItemMsg(hwnd, PRN_RMARGIN, EM_SETTEXTLIMIT,
343                        MPFROM2SHORT(2, 0), MPVOID);
344      WinSendDlgItemMsg(hwnd, PRN_TMARGIN, EM_SETTEXTLIMIT,
345                        MPFROM2SHORT(2, 0), MPVOID);
346      WinSendDlgItemMsg(hwnd, PRN_BMARGIN, EM_SETTEXTLIMIT,
347                        MPFROM2SHORT(2, 0), MPVOID);
348      WinSendDlgItemMsg(hwnd, PRN_SPACING, EM_SETTEXTLIMIT,
349                        MPFROM2SHORT(1, 0), MPVOID);
350      WinSendDlgItemMsg(hwnd, PRN_TABSPACES, EM_SETTEXTLIMIT,
351                        MPFROM2SHORT(2, 0), MPVOID);
352      WinSendDlgItemMsg(hwnd, PRN_PRINTER, EM_SETTEXTLIMIT,
353                        MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
354      WinSendMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
355      PosOverOkay(hwnd);
356    }
357    break;
358
359  case UM_UNDO:
360    WinCheckButton(hwnd, PRN_FORMAT, prnformat);
361    WinCheckButton(hwnd, PRN_ALT, prnalt);
362    WinCheckButton(hwnd, PRN_PAGENUMS, prnpagenums);
363    WinCheckButton(hwnd, PRN_FORMBEFORE, prnformfeedbefore);
364    WinCheckButton(hwnd, PRN_FORMAFTER, prnformfeedafter);
365    {
366      CHAR s[33];
367
368      sprintf(s, "%lu", prnwidth);
369      WinSetDlgItemText(hwnd, PRN_WIDTH, s);
370      sprintf(s, "%lu", prnlength);
371      WinSetDlgItemText(hwnd, PRN_LENGTH, s);
372      sprintf(s, "%lu", prnlmargin);
373      WinSetDlgItemText(hwnd, PRN_LMARGIN, s);
374      sprintf(s, "%lu", prnrmargin);
375      WinSetDlgItemText(hwnd, PRN_RMARGIN, s);
376      sprintf(s, "%lu", prntmargin);
377      WinSetDlgItemText(hwnd, PRN_TMARGIN, s);
378      sprintf(s, "%lu", prnbmargin);
379      WinSetDlgItemText(hwnd, PRN_BMARGIN, s);
380      sprintf(s, "%lu", prnspacing);
381      WinSetDlgItemText(hwnd, PRN_SPACING, s);
382      sprintf(s, "%lu", prntabspaces);
383      WinSetDlgItemText(hwnd, PRN_TABSPACES, s);
384    }
385    WinSetDlgItemText(hwnd, PRN_PRINTER, printer);
386    WinSendDlgItemMsg(hwnd, PRN_LISTBOX, LM_DELETEALL, MPVOID, MPVOID);
387    li = WinQueryWindowPtr(hwnd, QWL_USER);
388    if (!li)
389      Runtime_Error(pszSrcFile, __LINE__, "no data");
390    else {
391      INT x;
392
393      for (x = 0; li->list[x]; x++) {
394        if (IsFile(li->list[x]) == 1) {
395          WinSendDlgItemMsg(hwnd, PRN_LISTBOX, LM_INSERTITEM,
396                            MPFROM2SHORT(LIT_END, 0), MPFROMP(li->list[x]));
397          WinSendDlgItemMsg(hwnd, PRN_LISTBOX, LM_SELECTITEM,
398                            MPFROM2SHORT(x, 0), MPFROMSHORT(TRUE));
399        }
400      }
401      if (!(SHORT) WinSendDlgItemMsg(hwnd, PRN_LISTBOX, LM_QUERYITEMCOUNT,
402                                     MPVOID, MPVOID)) {
403        saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
404               hwnd,
405               GetPString(IDS_TWIDDLETEXT), GetPString(IDS_NOPRINTABLETEXT));
406        WinDismissDlg(hwnd, 0);
407      }
408    }
409    return 0;
410
411  case WM_CONTROL:
412    switch (SHORT1FROMMP(mp1)) {
413    case PRN_LISTBOX:
414      if (SHORT2FROMMP(mp1) == LN_ENTER) {
415
416        SHORT x;
417        CHAR szBuffer[CCHMAXPATH];
418
419        x = (SHORT) WinSendDlgItemMsg(hwnd, PRN_LISTBOX, LM_QUERYSELECTION,
420                                      MPFROMSHORT(LIT_FIRST), MPVOID);
421        if (x >= 0) {
422          *szBuffer = 0;
423          WinSendDlgItemMsg(hwnd, PRN_LISTBOX, LM_QUERYITEMTEXT,
424                            MPFROM2SHORT(x, CCHMAXPATH), MPFROMP(szBuffer));
425          if (*szBuffer)
426            QuickView(hwnd, szBuffer);
427        }
428      }
429    }
430    return 0;
431
432  case WM_COMMAND:
433    switch (SHORT1FROMMP(mp1)) {
434    case DID_OK:
435      li = WinQueryWindowPtr(hwnd, QWL_USER);
436      if (!li)
437        Runtime_Error(pszSrcFile, __LINE__, "no data");
438      else {
439        prnformat = WinQueryButtonCheckstate(hwnd, PRN_FORMAT);
440        PrfWriteProfileData(fmprof, FM3Str, "Prnformat",
441                            (PVOID) & prnformat, sizeof(prnformat));
442        prnalt = WinQueryButtonCheckstate(hwnd, PRN_ALT);
443        PrfWriteProfileData(fmprof, FM3Str, "Prnalt",
444                            (PVOID) & prnalt, sizeof(prnalt));
445        prnpagenums = WinQueryButtonCheckstate(hwnd, PRN_PAGENUMS);
446        PrfWriteProfileData(fmprof, FM3Str, "Prnpagenums",
447                            (PVOID) & prnpagenums, sizeof(prnpagenums));
448        prnformfeedbefore = WinQueryButtonCheckstate(hwnd, PRN_FORMBEFORE);
449        PrfWriteProfileData(fmprof, FM3Str, "Prnformfeedbefore",
450                            (PVOID) & prnformfeedbefore,
451                            sizeof(prnformfeedbefore));
452        prnformfeedafter = WinQueryButtonCheckstate(hwnd, PRN_FORMAFTER);
453        PrfWriteProfileData(fmprof, FM3Str, "Prnformfeedafter",
454                            (PVOID) & prnformfeedafter,
455                            sizeof(prnformfeedafter));
456        {
457          CHAR s[33];
458
459          *s = 0;
460          WinQueryDlgItemText(hwnd, PRN_WIDTH, sizeof(s), s);
461          if (atol(s) < 24 || atol(s) > 4096) {
462            WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, PRN_WIDTH));
463            DosBeep(50, 100);
464            break;
465          }
466          prnwidth = atol(s);
467          PrfWriteProfileData(fmprof, FM3Str, "Prnwidth",
468                              (PVOID) & prnwidth, sizeof(prnwidth));
469          *s = 0;
470          WinQueryDlgItemText(hwnd, PRN_LENGTH, sizeof(s), s);
471          if (atol(s) < 24 || atol(s) > 4096) {
472            WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, PRN_LENGTH));
473            DosBeep(50, 100);
474            break;
475          }
476          prnlength = atol(s);
477          PrfWriteProfileData(fmprof, FM3Str, "Prnlength",
478                              (PVOID) & prnlength, sizeof(prnlength));
479          *s = 0;
480          WinQueryDlgItemText(hwnd, PRN_LMARGIN, sizeof(s), s);
481          if (atol(s) < 0 || atol(s) > prnwidth - 1) {
482            WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, PRN_LMARGIN));
483            DosBeep(50, 100);
484            break;
485          }
486          prnlmargin = atol(s);
487          PrfWriteProfileData(fmprof, FM3Str, "Prnlmargin",
488                              (PVOID) & prnlmargin, sizeof(prnlmargin));
489          *s = 0;
490          WinQueryDlgItemText(hwnd, PRN_RMARGIN, sizeof(s), s);
491          if (atol(s) < 0 || atol(s) > (prnwidth - prnlmargin) - 1) {
492            WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, PRN_RMARGIN));
493            DosBeep(50, 100);
494            break;
495          }
496          prnrmargin = atol(s);
497          PrfWriteProfileData(fmprof, FM3Str, "Prnrmargin",
498                              (PVOID) & prnrmargin, sizeof(prnrmargin));
499          *s = 0;
500          WinQueryDlgItemText(hwnd, PRN_TABSPACES, sizeof(s), s);
501          if (atol(s) < 1 ||
502              atol(s) > prnwidth - ((prnlmargin + prnrmargin) - 1)) {
503            WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, PRN_TABSPACES));
504            DosBeep(50, 100);
505            break;
506          }
507          prntabspaces = atol(s);
508          PrfWriteProfileData(fmprof, FM3Str, "Prntabspaces",
509                              (PVOID) & prntabspaces, sizeof(prntabspaces));
510          *s = 0;
511          WinQueryDlgItemText(hwnd, PRN_TMARGIN, sizeof(s), s);
512          if (atol(s) < 0 || atol(s) > prnlength - 1) {
513            WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, PRN_TMARGIN));
514            DosBeep(50, 100);
515            break;
516          }
517          prntmargin = atol(s);
518          PrfWriteProfileData(fmprof, FM3Str, "Prntmargin",
519                              (PVOID) & prntmargin, sizeof(prntmargin));
520          *s = 0;
521          WinQueryDlgItemText(hwnd, PRN_BMARGIN, sizeof(s), s);
522          if (atol(s) < 0 || atol(s) > (prnlength - prntmargin) - 1) {
523            WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, PRN_BMARGIN));
524            DosBeep(50, 100);
525            break;
526          }
527          prnbmargin = atol(s);
528          PrfWriteProfileData(fmprof, FM3Str, "Prnbmargin",
529                              (PVOID) & prnbmargin, sizeof(prnbmargin));
530          *s = 0;
531          WinQueryDlgItemText(hwnd, PRN_SPACING, sizeof(s), s);
532          if (atol(s) < 1 ||
533              atol(s) > ((prnlength - prntmargin) - prnbmargin) - 1) {
534            WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, PRN_SPACING));
535            DosBeep(50, 100);
536            break;
537          }
538          prnspacing = atol(s);
539          PrfWriteProfileData(fmprof, FM3Str, "Prnspacing",
540                              (PVOID) & prnspacing, sizeof(prnspacing));
541          WinQueryDlgItemText(hwnd, PRN_PRINTER, sizeof(printer), printer);
542          bstrip(printer);
543          if (!*printer)
544            strcpy(printer, "PRN");
545          WinSetDlgItemText(hwnd, PRN_PRINTER, printer);
546          PrfWriteProfileString(fmprof, appname, "Printer", printer);
547          SayPrinterReady(hwnd);
548        }
549        {
550          CHAR szBuffer[CCHMAXPATH + 1];
551          INT numfiles = 0, numalloc = 0, error;
552          SHORT x;
553
554          if (li->list)
555            FreeList(li->list);
556          li->list = NULL;
557          x = (SHORT) WinSendDlgItemMsg(hwnd, PRN_LISTBOX, LM_QUERYSELECTION,
558                                        MPFROMSHORT(LIT_FIRST), MPVOID);
559          if (x >= 0) {
560            do {
561              *szBuffer = 0;
562              WinSendDlgItemMsg(hwnd, PRN_LISTBOX, LM_QUERYITEMTEXT,
563                                MPFROM2SHORT(x, CCHMAXPATH),
564                                MPFROMP(szBuffer));
565              error = AddToList(szBuffer, &li->list, &numfiles, &numalloc);
566              if (error) {
567                Runtime_Error(pszSrcFile, __LINE__, "AddToList");
568                break;
569              }
570              x = (SHORT) WinSendDlgItemMsg(hwnd, PRN_LISTBOX,
571                                            LM_QUERYSELECTION,
572                                            MPFROMSHORT(x), MPVOID);
573            } while (x >= 0);
574          }
575        }
576        if (!li->list || !li->list[0])
577          WinDismissDlg(hwnd, 0);
578        else
579          WinDismissDlg(hwnd, 1);
580      }
581      break;
582    case DID_CANCEL:
583      WinDismissDlg(hwnd, 0);
584      break;
585    case IDM_HELP:
586      if (hwndHelp)
587        WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
588                   MPFROM2SHORT(HELP_PRINT, 0), MPFROMSHORT(HM_RESOURCEID));
589      break;
590    case IDM_UNDO:
591      PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
592      break;
593    }
594    return 0;
595  }
596  return WinDefDlgProc(hwnd, msg, mp1, mp2);
597}
Note: See TracBrowser for help on using the repository browser.