source: trunk/dll/printer.c@ 843

Last change on this file since 843 was 843, checked in by Steven Levine, 18 years ago

Revert to standard APIs where large file support not required by ticket #41

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