source: trunk/dll/printer.c@ 827

Last change on this file since 827 was 793, checked in by Gregg Young, 18 years ago

Move #pragma alloc_text to end for OpenWatcom compat

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