source: trunk/dll/printer.c@ 1226

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

Ticket 187: Moved typedef's and some #define's from fm3dll.h

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