source: trunk/dll/printer.c@ 1036

Last change on this file since 1036 was 1029, checked in by Gregg Young, 17 years ago

Fixed early memory free; Added free_... functions to make fortify checking easier; Added fortify scopes; Delete now moves to trash can on systems with the xworkplace trash can installed.

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