source: trunk/dll/printer.c@ 433

Last change on this file since 433 was 355, checked in by root, 19 years ago

Use Runtime_Error

  • 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 355 2006-07-26 19:58:11Z 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
14***********************************************************************/
15
16#define INCL_DOS
17#define INCL_WIN
18
19#include <os2.h>
20#include <stdlib.h>
21#include <string.h>
22#include <ctype.h>
23#include <stdio.h>
24#include <io.h>
25#include <share.h>
26#include <string.h>
27#include "fm3dll.h"
28#include "fm3dlg.h"
29#include "fm3str.h"
30
31#pragma data_seg(DATA1)
32
33static PSZ pszSrcFile = __FILE__;
34
35#pragma alloc_text(PRINTER,PrinterReady,SayPrinterReady)
36#pragma alloc_text(PRINTER2,PrintList)
37#pragma alloc_text(PRINTER3,PrintDlgProc)
38
39static HMTX PrintSem = 0;
40
41
42BOOL PrinterReady (CHAR *printdevname)
43{
44 FILE * printhandle;
45 CHAR param = 0,
46 data = 0;
47 ULONG datalen = 1L,
48 parmlen = 1L,
49 htype,flagword;
50
51 if(!fWorkPlace) /* assume spooler is active */
52 return TRUE;
53 DosError(FERR_DISABLEHARDERR);
54 printhandle = xfopen(printdevname,"a+",pszSrcFile,__LINE__);
55 if (printhandle) {
56 if(!strnicmp(printdevname,"COM",3) && isdigit(printdevname[3])) {
57 fclose(printhandle);
58 return TRUE;
59 }
60 if(!DosQueryHType(fileno(printhandle),&htype,&flagword) &&
61 !(htype & 7)) {
62 fclose(printhandle);
63 return TRUE;
64 }
65 if(DosDevIOCtl(fileno(printhandle),5L,0x00000066,(PVOID)&param,
66 1L,&parmlen,(PVOID)&data,1L,&datalen) != 0x00000100) {
67 fclose(printhandle);
68 return FALSE;
69 }
70 fclose(printhandle);
71 if(data & 32) /* bit 5 is out of paper */
72 return FALSE;
73 return TRUE;
74 }
75 return FALSE;
76}
77
78
79BOOL SayPrinterReady (HWND hwnd)
80{
81 if(!hwnd)
82 hwnd = HWND_DESKTOP;
83 if(!PrinterReady(printer)) {
84 saymsg(MB_ENTER | MB_ICONEXCLAMATION,
85 hwnd,
86 GetPString(IDS_NOTETEXT),
87 GetPString(IDS_PRINTERNOTREADYTEXT));
88 return FALSE;
89 }
90 return TRUE;
91}
92
93
94//=== PrintList - background-print a list of files ===
95
96VOID PrintList (VOID *arg)
97{
98 HAB hab2;
99 HMQ hmq2;
100 LISTINFO *li = (LISTINFO *)arg;
101 register INT x;
102 FILE *fpi,*fpo;
103 CHAR s[CCHMAXPATH + 80];
104 FILESTATUS3 fs3;
105 LONG cols,lines,pages,z,lmargin,rmargin;
106 BOOL endline,endpage,startpage,skipping,firstpass;
107 int c;
108 APIRET rc = MBID_YES;
109
110 if(StopPrinting)
111 goto Abort;
112 if(!PrintSem) {
113 if(DosCreateMutexSem(NULL,&PrintSem,0,FALSE)) {
114 Dos_Error(MB_CANCEL,rc,HWND_DESKTOP,pszSrcFile,__LINE__,"DosCreateMutexSem");
115 goto Abort;
116 }
117 }
118 priority_normal();
119 hab2 = WinInitialize(0);
120 if(hab2) {
121 hmq2 = WinCreateMsgQueue(hab2,0);
122 if(hmq2) {
123 WinCancelShutdown(hmq2,TRUE);
124 if(hwndMain)
125 WinSendMsg(hwndMain,UM_THREADUSE,MPFROMLONG(1L),MPVOID);
126 if(li && li->list && li->list[0]) {
127 AddNote(GetPString(IDS_PRINTINGLISTTEXT));
128 for(x = 0;li->list[x];x++) {
129 if(rc == MBID_CANCEL)
130 break;
131 DosError(FERR_DISABLEHARDERR);
132 if(DosQueryPathInfo(li->list[x],FIL_STANDARD,&fs3,(ULONG)sizeof(fs3)) ||
133 (fs3.attrFile & FILE_DIRECTORY) || !fs3.cbFile)
134 continue;
135 if(StopPrinting)
136 break;
137 DosRequestMutexSem(PrintSem,240000L);
138 if(StopPrinting)
139 break;
140 if (!PrinterReady(li->targetpath))
141 Runtime_Error(pszSrcFile, __LINE__, "printer %s error", li->targetpath);
142 else {
143 fpi = _fsopen(li->list[x],"r",SH_DENYWR);
144 if (!fpi)
145 Runtime_Error(pszSrcFile, __LINE__, "cannot open %s",li->list[x]);
146 else {
147 fpo = _fsopen(li->targetpath,"a+",SH_DENYRW);
148 if(!fpo)
149 Runtime_Error(pszSrcFile, __LINE__, "cannot open %s",li->targetpath);
150 else {
151 sprintf(s,
152 GetPString(IDS_PRINTINGTEXT),
153 li->list[x]);
154 AddNote(s);
155 firstpass = TRUE;
156 skipping = FALSE;
157 lmargin = prnlmargin;
158 rmargin = prnrmargin;
159 if(prnformfeedbefore) {
160 if(!skipping)
161 fputc('\x0c',fpo);
162 }
163Again:
164 cols = lines = pages = 0;
165 endline = endpage = FALSE;
166 startpage = TRUE;
167 while((c = fgetc(fpi)) != EOF) {
168 if(StopPrinting || ferror(fpo))
169 break;
170 if(prnformat) {
171 if(startpage) {
172 pages++;
173 if(prnpagenums) {
174 if(!skipping)
175 fprintf(fpo,"%*.*s#%lu",
176 lmargin,
177 lmargin,
178 " ",
179 pages);
180 }
181 for(z = 0;z < prntmargin;z++) {
182 if(!skipping)
183 fputc('\n',fpo);
184 }
185 lines = prntmargin;
186 endline = endpage = FALSE;
187 cols = 0;
188 startpage = FALSE;
189 }
190 if(!cols) {
191 for(z = 0;z < lmargin;z++) {
192 if(!skipping)
193 fputc(' ',fpo);
194 }
195 cols = lmargin;
196 }
197 if(!skipping) {
198 if(c == '\t') {
199 for(z = 0;z < prntabspaces &&
200 cols + z < prnwidth - rmargin;z++)
201 fputc(' ',fpo);
202 }
203 else
204 fputc(c,fpo);
205 }
206 if(c == '\x0c')
207 endpage = TRUE;
208 else if(c == '\n') {
209 lines++;
210 cols = 0;
211 for(z = 1;z < prnspacing;z++) {
212 if(prnlength - lines <= prnbmargin)
213 break;
214 if(!skipping)
215 fputc('\n',fpo);
216 lines++;
217 }
218 if(prnlength - lines <= prnbmargin)
219 endpage = TRUE;
220 }
221 else {
222 cols++;
223 if(c == '\t')
224 c += prntabspaces;
225 if(prnwidth - cols <= rmargin) {
226 endline = TRUE;
227 if(!skipping)
228 fputc('\n',fpo);
229 lines++;
230 }
231 for(z = 1;z < prnspacing;z++) {
232 if(prnlength - lines <= prnbmargin)
233 break;
234 if(!skipping)
235 fputc('\n',fpo);
236 lines++;
237 }
238 }
239 if(endline) {
240 do {
241 c = fgetc(fpi);
242 if(c == '\n')
243 break;
244 } while(isspace(c) && c != EOF);
245 if(c == EOF)
246 break;
247 if(!isspace(c))
248 ungetc(c,fpi);
249 endline = FALSE;
250 cols = 0;
251 if(prnlength - lines <= prnbmargin)
252 endpage = TRUE;
253 }
254 if(endpage) {
255 if(prnbmargin) {
256 if(c != '\x0c') {
257 if(!skipping)
258 fputc('\r\x0c',fpo);
259 }
260 }
261 lines = cols = 0;
262 endpage = FALSE;
263 startpage = TRUE;
264 do {
265 c = fgetc(fpi);
266 } while(c == '\n');
267 if(c == EOF)
268 break;
269 ungetc(c,fpi);
270 if(prnformat && prnalt)
271 skipping = (skipping) ? FALSE : TRUE;
272 DosSleep(1L);
273 }
274 }
275 else
276 fputc(c,fpo);
277 }
278 if(prnalt && prnformat && firstpass && pages > 1) {
279 fclose(fpo);
280 fpo = _fsopen(li->targetpath,"a+",SH_DENYRW);
281 if(fpo) {
282 rewind(fpi);
283 firstpass = FALSE;
284 skipping = TRUE;
285 rc = saymsg(MB_YESNOCANCEL | MB_ICONEXCLAMATION,
286 HWND_DESKTOP,
287 GetPString(IDS_PRINTTITLETEXT),
288 GetPString(IDS_PRINTEVENTEXT),
289 li->list[x]);
290 if(rc == MBID_YES) {
291 lmargin = prnrmargin;
292 rmargin = prnlmargin;
293 fputc('\x0c',fpo);
294 goto Again;
295 }
296 }
297 else
298 saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
299 HWND_DESKTOP,
300 GetPString(IDS_PRINTTITLETEXT),
301 GetPString(IDS_PRINTCANTREOPENTEXT),
302 li->targetpath);
303 }
304 if(prnformfeedafter)
305 fputc('\x0c',fpo);
306 if(!StopPrinting) {
307 sprintf(s,
308 GetPString(IDS_PRINTEDTEXT),
309 li->list[x]);
310 AddNote(s);
311 }
312 fclose(fpo);
313 }
314 fclose(fpi);
315 }
316 }
317 DosReleaseMutexSem(PrintSem);
318 DosSleep(1L);
319 }
320 if(!StopPrinting)
321 AddNote(GetPString(IDS_PRINTEDLISTTEXT));
322 }
323 if(hwndMain)
324 WinSendMsg(hwndMain,UM_THREADUSE,MPVOID,MPVOID);
325 WinDestroyMsgQueue(hmq2);
326 }
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.