source: trunk/dll/printer.c@ 1211

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

Ticket 187: Move data declarations/definitions out of fm3dll.h

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