source: trunk/dll/printer.c @ 551

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

Indentation cleanup

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