source: trunk/dll/printer.c@ 1505

Last change on this file since 1505 was 1505, checked in by Gregg Young, 15 years ago

Remove unnecessary type casts; minor formating cleanup.

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