source: trunk/dll/printer.c@ 1163

Last change on this file since 1163 was 1163, checked in by John Small, 17 years ago

Ticket 187: Draft 1: Functions only

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