source: trunk/dll/printer.c@ 1498

Last change on this file since 1498 was 1498, checked in by Gregg Young, 16 years ago

Changes to get FM2 to compile with the latest watcom 1.9 beta (mostly type casts of CHAR CONSTANT * to CHAR *). Changes to get the environment settings working everywhere again (broken by the change that moved commands to the INI); Added an environment size variable (set to 2048 which was the largest I found hard coded). Still need to find everywhere the environment size is set and use this variable.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 17.9 KB
Line 
1/***********************************************************************
2
3 $Id: printer.c 1498 2010-01-18 00:57:01Z 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, (CHAR *) FM3Str, "Prnformat",
481 (PVOID) & prnformat, sizeof(prnformat));
482 prnalt = WinQueryButtonCheckstate(hwnd, PRN_ALT);
483 PrfWriteProfileData(fmprof, (CHAR *) FM3Str, "Prnalt",
484 (PVOID) & prnalt, sizeof(prnalt));
485 prnpagenums = WinQueryButtonCheckstate(hwnd, PRN_PAGENUMS);
486 PrfWriteProfileData(fmprof, (CHAR *) FM3Str, "Prnpagenums",
487 (PVOID) & prnpagenums, sizeof(prnpagenums));
488 prnformfeedbefore = WinQueryButtonCheckstate(hwnd, PRN_FORMBEFORE);
489 PrfWriteProfileData(fmprof, (CHAR *) FM3Str, "Prnformfeedbefore",
490 (PVOID) & prnformfeedbefore,
491 sizeof(prnformfeedbefore));
492 prnformfeedafter = WinQueryButtonCheckstate(hwnd, PRN_FORMAFTER);
493 PrfWriteProfileData(fmprof, (CHAR *) 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, (CHAR *) 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, (CHAR *) 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, (CHAR *) 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, (CHAR *) 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, (CHAR *) 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, (CHAR *) 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, (CHAR *) 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, (CHAR *) 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.