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
RevLine 
[123]1/***********************************************************************
2
3 $Id: printer.c 1505 2010-04-11 22:29:56Z gyoung $
4
[355]5 Print file list
6
[123]7 Copyright (c) 1993-98 M. Kimes
[1498]8 Copyright (c) 2004, 2010 Steven H.Levine
[123]9
[355]10 01 Aug 04 SHL Rework lstrip/rstrip usage
11 17 Jul 06 SHL Use Runtime_Error
[533]12 03 Nov 06 SHL Renames
13 03 Nov 06 SHL Count thread usage
[574]14 22 Mar 07 GKY Use QWL_USER
[793]15 20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
[1395]16 07 Feb 09 GKY Allow user to turn off alert and/or error beeps in settings notebook.
[1498]17 17 JAN 10 GKY Changes to get working with Watcom 1.9 Beta (1/16/10). Mostly cast CHAR CONSTANT * as CHAR *.
[123]18
19***********************************************************************/
20
[2]21#include <stdlib.h>
22#include <string.h>
23#include <ctype.h>
24#include <share.h>
[843]25
26#define INCL_DOS
27#define INCL_WIN
[907]28#define INCL_LONGLONG // dircnrs.h
[843]29
[1189]30#include "fm3dll.h"
[1226]31#include "fm3dll2.h" // #define's for UM_*, control id's, etc.
[1211]32#include "notebook.h" // Data declaration(s)
33#include "mainwnd.h" // Data declaration(s)
[1398]34#include "init.h" // Data declaration(s)
[2]35#include "fm3dlg.h"
36#include "fm3str.h"
[907]37#include "makelist.h" // AddToList
38#include "errutil.h" // Dos_Error...
39#include "strutil.h" // GetPString
[1163]40#include "notify.h" // AddNote
41#include "defview.h" // QuickView
42#include "printer.h"
[1189]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
[1029]49#include "fortify.h"
[2]50
[1211]51// Data definitions
[2]52#pragma data_seg(DATA1)
[355]53
54static PSZ pszSrcFile = __FILE__;
55
[2]56static HMTX PrintSem = 0;
57
[1163]58static BOOL PrinterReady(CHAR * printdevname);
59static BOOL SayPrinterReady(HWND hwnd);
60
[1211]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
[551]78BOOL PrinterReady(CHAR * printdevname)
[355]79{
[551]80 FILE *printhandle;
81 CHAR param = 0, data = 0;
[766]82 ULONG datalen = 1, parmlen = 1, htype, flagword;
[2]83
[551]84 if (!fWorkPlace) /* assume spooler is active */
[2]85 return TRUE;
86 DosError(FERR_DISABLEHARDERR);
[551]87 printhandle = xfopen(printdevname, "a+", pszSrcFile, __LINE__);
[355]88 if (printhandle) {
[551]89 if (!strnicmp(printdevname, "COM", 3) && isdigit(printdevname[3])) {
[2]90 fclose(printhandle);
91 return TRUE;
92 }
[551]93 if (!DosQueryHType(fileno(printhandle), &htype, &flagword) &&
94 !(htype & 7)) {
[2]95 fclose(printhandle);
96 return TRUE;
97 }
[766]98 if (DosDevIOCtl(fileno(printhandle), 5, 0x00000066, (PVOID) & param,
99 1, &parmlen, (PVOID) & data, 1,
[551]100 &datalen) != 0x00000100) {
[2]101 fclose(printhandle);
102 return FALSE;
103 }
104 fclose(printhandle);
[551]105 if (data & 32) /* bit 5 is out of paper */
[2]106 return FALSE;
107 return TRUE;
108 }
109 return FALSE;
110}
111
[551]112BOOL SayPrinterReady(HWND hwnd)
[355]113{
[551]114 if (!hwnd)
[2]115 hwnd = HWND_DESKTOP;
[551]116 if (!PrinterReady(printer)) {
[2]117 saymsg(MB_ENTER | MB_ICONEXCLAMATION,
[551]118 hwnd,
119 GetPString(IDS_NOTETEXT), GetPString(IDS_PRINTERNOTREADYTEXT));
[2]120 return FALSE;
121 }
122 return TRUE;
123}
124
[533]125//=== PrintListThread - background-print a list of files ===
[2]126
[551]127VOID PrintListThread(VOID * arg)
[355]128{
[551]129 HAB hab2;
130 HMQ hmq2;
131 LISTINFO *li = (LISTINFO *) arg;
[2]132 register INT x;
[551]133 FILE *fpi, *fpo;
134 CHAR s[CCHMAXPATH + 80];
[843]135 FILESTATUS3 fs3;
[551]136 LONG cols, lines, pages, z, lmargin, rmargin;
137 BOOL endline, endpage, startpage, skipping, firstpass;
138 int c;
139 APIRET rc = MBID_YES;
[2]140
[551]141 if (StopPrinting)
[2]142 goto Abort;
[551]143 if (!PrintSem) {
144 if (DosCreateMutexSem(NULL, &PrintSem, 0, FALSE)) {
145 Dos_Error(MB_CANCEL, rc, HWND_DESKTOP, pszSrcFile, __LINE__,
[1398]146 PCSZ_DOSCREATEMUTEXSEM);
[2]147 goto Abort;
148 }
149 }
[1038]150# ifdef FORTIFY
151 Fortify_EnterScope();
[1063]152# endif
[2]153 priority_normal();
154 hab2 = WinInitialize(0);
[551]155 if (hab2) {
156 hmq2 = WinCreateMsgQueue(hab2, 0);
157 if (hmq2) {
158 WinCancelShutdown(hmq2, TRUE);
[533]159 IncrThreadUsage();
[551]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);
[843]166 if (DosQueryPathInfo(li->list[x], FIL_STANDARD, &fs3, sizeof(fs3)) ||
167 fs3.attrFile & FILE_DIRECTORY ||
168 !fs3.cbFile)
[551]169 continue;
170 if (StopPrinting)
171 break;
[766]172 DosRequestMutexSem(PrintSem, 240000);
[551]173 if (StopPrinting)
174 break;
175 if (!PrinterReady(li->targetpath))
176 Runtime_Error(pszSrcFile, __LINE__, "printer %s error",
177 li->targetpath);
[355]178 else {
[551]179 fpi = _fsopen(li->list[x], "r", SH_DENYWR);
180 if (!fpi)
181 Runtime_Error(pszSrcFile, __LINE__, "cannot open %s",
182 li->list[x]);
[355]183 else {
[551]184 fpo = _fsopen(li->targetpath, "a+", SH_DENYRW);
185 if (!fpo)
186 Runtime_Error(pszSrcFile, __LINE__, "cannot open %s",
187 li->targetpath);
[355]188 else {
[551]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;
[766]305 DosSleep(1);
[551]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);
[766]348 DosSleep(1);
[551]349 }
350 if (!StopPrinting)
351 AddNote(GetPString(IDS_PRINTEDLISTTEXT));
[2]352 }
353 WinDestroyMsgQueue(hmq2);
354 }
[533]355 DecrThreadUsage();
[2]356 WinTerminate(hab2);
357 }
358Abort:
[551]359 if (li)
[2]360 FreeListInfo(li);
[1063]361# ifdef FORTIFY
[1038]362 Fortify_LeaveScope();
[1063]363# endif
[2]364}
365
[551]366MRESULT EXPENTRY PrintDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[355]367{
[2]368 LISTINFO *li;
369
[551]370 switch (msg) {
371 case WM_INITDLG:
372 if (!mp2)
373 WinDismissDlg(hwnd, 0);
374 else {
[574]375 WinSetWindowPtr(hwnd, QWL_USER, mp2);
[551]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;
[2]398
[551]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];
[2]407
[551]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)
[1398]429 Runtime_Error(pszSrcFile, __LINE__, NULL);
[551]430 else {
431 INT x;
[2]432
[551]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 }
[2]440 }
[551]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;
[2]450
[551]451 case WM_CONTROL:
452 switch (SHORT1FROMMP(mp1)) {
453 case PRN_LISTBOX:
454 if (SHORT2FROMMP(mp1) == LN_ENTER) {
[2]455
[551]456 SHORT x;
457 CHAR szBuffer[CCHMAXPATH];
[2]458
[551]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 }
[2]468 }
[551]469 }
470 return 0;
[2]471
[551]472 case WM_COMMAND:
473 switch (SHORT1FROMMP(mp1)) {
474 case DID_OK:
475 li = WinQueryWindowPtr(hwnd, QWL_USER);
476 if (!li)
[1398]477 Runtime_Error(pszSrcFile, __LINE__, NULL);
[551]478 else {
479 prnformat = WinQueryButtonCheckstate(hwnd, PRN_FORMAT);
[1505]480 PrfWriteProfileData(fmprof, FM3Str, "Prnformat",
[551]481 (PVOID) & prnformat, sizeof(prnformat));
482 prnalt = WinQueryButtonCheckstate(hwnd, PRN_ALT);
[1505]483 PrfWriteProfileData(fmprof, FM3Str, "Prnalt",
[551]484 (PVOID) & prnalt, sizeof(prnalt));
485 prnpagenums = WinQueryButtonCheckstate(hwnd, PRN_PAGENUMS);
[1505]486 PrfWriteProfileData(fmprof, FM3Str, "Prnpagenums",
[551]487 (PVOID) & prnpagenums, sizeof(prnpagenums));
488 prnformfeedbefore = WinQueryButtonCheckstate(hwnd, PRN_FORMBEFORE);
[1505]489 PrfWriteProfileData(fmprof, FM3Str, "Prnformfeedbefore",
[551]490 (PVOID) & prnformfeedbefore,
491 sizeof(prnformfeedbefore));
492 prnformfeedafter = WinQueryButtonCheckstate(hwnd, PRN_FORMAFTER);
[1505]493 PrfWriteProfileData(fmprof, FM3Str, "Prnformfeedafter",
[551]494 (PVOID) & prnformfeedafter,
495 sizeof(prnformfeedafter));
496 {
497 CHAR s[33];
[2]498
[551]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));
[1395]503 if (!fAlertBeepOff)
504 DosBeep(50, 100);
[551]505 break;
506 }
507 prnwidth = atol(s);
[1505]508 PrfWriteProfileData(fmprof, FM3Str, "Prnwidth",
[551]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));
[1395]514 if (!fAlertBeepOff)
515 DosBeep(50, 100);
[551]516 break;
517 }
518 prnlength = atol(s);
[1505]519 PrfWriteProfileData(fmprof, FM3Str, "Prnlength",
[551]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));
[1395]525 if (!fAlertBeepOff)
526 DosBeep(50, 100);
[551]527 break;
528 }
529 prnlmargin = atol(s);
[1505]530 PrfWriteProfileData(fmprof, FM3Str, "Prnlmargin",
[551]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));
[1395]536 if (!fAlertBeepOff)
537 DosBeep(50, 100);
[551]538 break;
539 }
540 prnrmargin = atol(s);
[1505]541 PrfWriteProfileData(fmprof, FM3Str, "Prnrmargin",
[551]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));
[1395]548 if (!fAlertBeepOff)
549 DosBeep(50, 100);
[551]550 break;
551 }
552 prntabspaces = atol(s);
[1505]553 PrfWriteProfileData(fmprof, FM3Str, "Prntabspaces",
[551]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));
[1395]559 if (!fAlertBeepOff)
560 DosBeep(50, 100);
[551]561 break;
562 }
563 prntmargin = atol(s);
[1505]564 PrfWriteProfileData(fmprof, FM3Str, "Prntmargin",
[551]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));
[1395]570 if (!fAlertBeepOff)
571 DosBeep(50, 100);
[551]572 break;
573 }
574 prnbmargin = atol(s);
[1505]575 PrfWriteProfileData(fmprof, FM3Str, "Prnbmargin",
[551]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));
[1395]582 if (!fAlertBeepOff)
583 DosBeep(50, 100);
[551]584 break;
585 }
586 prnspacing = atol(s);
[1505]587 PrfWriteProfileData(fmprof, FM3Str, "Prnspacing",
[551]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];
[907]599 UINT numfiles = 0, numalloc = 0;
600 INT error;
[551]601 SHORT x;
[2]602
[551]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);
[2]629 }
[551]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;
[2]644 }
[551]645 return WinDefDlgProc(hwnd, msg, mp1, mp2);
[2]646}
[793]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.