source: trunk/dll/printer.c@ 551

Last change on this file since 551 was 551, checked in by Gregg Young, 19 years ago

Indentation cleanup

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