source: trunk/dll/printer.c@ 536

Last change on this file since 536 was 533, checked in by root, 19 years ago

Renames
Count thread usage

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