source: trunk/dll/viewer.c@ 328

Last change on this file since 328 was 328, 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: 44.5 KB
Line 
1
2/***********************************************************************
3
4 $Id: viewer.c 328 2006-07-25 18:37:24Z root $
5
6 MLE text editor/viewer
7
8 Copyright (c) 1993-97 M. Kimes
9 Copyright (c) 2005, 2006 Steven H. Levine
10
11 23 May 05 SHL Use QWL_USER
12 17 Jul 06 SHL Use Runtime_Error
13
14***********************************************************************/
15
16#define INCL_DOS
17#define INCL_WIN
18#include <os2.h>
19
20#include <stdlib.h>
21#include <stdio.h>
22#include <string.h>
23#include <time.h>
24#include <io.h>
25
26#include "fm3dll.h"
27#include "fm3dlg.h"
28#include "fm3str.h"
29#include "mle.h"
30
31#pragma data_seg(DATA1)
32
33static PSZ pszSrcFile = __FILE__;
34
35#pragma alloc_text(VIEWER,MLEEditorProc,MLESubProc)
36#pragma alloc_text(STARTUP,StartMLEEditor)
37
38#define hwndMLE WinWindowFromID(hwnd,MLE_MLE)
39
40#define COLORS_MAX 2
41
42#define COLORS_FOREGROUND 0
43#define COLORS_BACKGROUND 1
44
45static LONG Colors[COLORS_MAX] = {COLR_BLACK,COLR_PALEGRAY};
46static BOOL Firsttime = TRUE;
47
48
49HWND StartMLEEditor (HWND hwndClient,INT flags,CHAR *filename,
50 HWND hwndRestore) {
51
52 /*
53 * create an editor window
54 * bitmapped flags:
55 * 1 = readonly
56 * 2 = don't position window for non-desktop client
57 * 4 = don't "kill app" when closed
58 * 8 = as text
59 * 16 = as binary
60 */
61
62 HWND hwndFrame,hwnd;
63 XMLEWNDPTR *vw;
64 ULONG flFrameFlags = FCF_SYSMENU | FCF_SIZEBORDER | FCF_ICON |
65 FCF_TITLEBAR | FCF_MINMAX | FCF_MENU |
66 FCF_ACCELTABLE | FCF_NOBYTEALIGN;
67
68 if(fExternalViewer || strcmp(realappname,FM3Str))
69 hwndClient = HWND_DESKTOP;
70 if((flags & 1) && fUseNewViewer)
71 return StartViewer(hwndClient,(USHORT)flags,filename,hwndRestore);
72
73 vw = xmallocz(sizeof(XMLEWNDPTR),pszSrcFile,__LINE__);
74 if(!vw)
75 return (HWND)0;
76 vw->size = sizeof(XMLEWNDPTR);
77 if(flags & 1) {
78 if(flags & 8)
79 vw->hex = 2;
80 else if(flags & 16)
81 vw->hex = 1;
82 else if(!fGuessType)
83 vw->hex = 2;
84 }
85 else
86 vw->hex = 2;
87 vw->hwndParent = (hwndClient) ? hwndClient : HWND_DESKTOP;
88 vw->srch.size = sizeof(SRCHPTR);
89 if(flags & 4)
90 vw->dontclose = TRUE;
91 if(filename)
92 strcpy(vw->exportfilename,filename);
93 vw->hwndRestore = hwndRestore;
94 if(ParentIsDesktop(hwndClient,hwndClient))
95 flFrameFlags |= FCF_TASKLIST;
96 hwndFrame = WinCreateStdWindow(hwndClient,
97 WS_VISIBLE,
98 &flFrameFlags,
99 GetPString(IDS_WCMLEEDITOR),
100 NullStr,
101 WS_VISIBLE | fwsAnimate,
102 FM3ModHandle,
103 MLE_FRAME,
104 &hwnd);
105 if(hwndFrame) {
106 vw->hwndFrame = hwndFrame;
107 if(!ParentIsDesktop(hwndFrame,hwndClient) && !(flags & 2)) {
108
109 SWP swp;
110
111 FillClient(hwndClient,&swp,NULL,FALSE);
112 WinSetWindowPos(hwndFrame,
113 HWND_TOP,
114 swp.x,
115 swp.y,
116 swp.cx,
117 swp.cy,
118 SWP_SIZE | SWP_MOVE | SWP_SHOW | SWP_ACTIVATE |
119 SWP_ZORDER);
120 }
121 else if(flFrameFlags & FCF_TASKLIST) {
122
123 SWP swp,swpD;
124 ULONG size = sizeof(swp);
125 LONG cxScreen,cyScreen;
126
127 WinQueryTaskSizePos(WinQueryAnchorBlock(hwndFrame),
128 0,
129 &swp);
130 if(PrfQueryProfileData(fmprof,
131 appname,
132 "ViewSizePos",
133 &swpD,
134 &size)) {
135 cxScreen = WinQuerySysValue(HWND_DESKTOP,
136 SV_CXSCREEN);
137 cyScreen = WinQuerySysValue(HWND_DESKTOP,
138 SV_CYSCREEN);
139 if(swp.x + swpD.cx > cxScreen)
140 swp.x = cxScreen - swpD.cx;
141 if(swp.y + swpD.cy > cyScreen)
142 swp.y = cyScreen - swpD.cy;
143 swp.cx = swpD.cx;
144 swp.cy = swpD.cy;
145 }
146 WinSetWindowPos(hwndFrame,
147 HWND_TOP,
148 swp.x,
149 swp.y,
150 swp.cx,
151 swp.cy,
152 SWP_SIZE | SWP_MOVE | SWP_SHOW | SWP_ZORDER |
153 SWP_ACTIVATE);
154 }
155 MLEsetreadonly(hwndMLE,((flags & 1) != 0));
156 WinSetWindowPtr(hwnd,QWL_USER,(PVOID)vw);
157 if(!PostMsg(hwnd,
158 UM_SETUP,
159 MPVOID,
160 MPFROMLONG(hwndClient)))
161 WinSendMsg(hwnd,
162 UM_SETUP,
163 MPVOID,
164 MPFROMLONG(hwndClient));
165 }
166 return hwndFrame;
167}
168
169
170MRESULT EXPENTRY MLESubProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) {
171
172 PFNWP oldproc = (PFNWP)WinQueryWindowPtr(hwnd,QWL_USER);
173 XMLEWNDPTR *vw;
174
175 switch(msg) {
176 case WM_SETFOCUS:
177 if(mp2)
178 PostMsg(WinQueryWindow(hwnd,QW_PARENT),UM_SELECT,mp1,mp2);
179 break;
180
181 case WM_CHAR:
182 vw = WinQueryWindowPtr(WinQueryWindow(hwnd,QW_PARENT),QWL_USER);
183 if(vw && vw->size == sizeof(XMLEWNDPTR) && vw->hex == 1) {
184 if(!MLEgetreadonly(hwnd)) {
185 WinSetSysValue(HWND_DESKTOP,SV_INSERTMODE,FALSE);
186 if(vw->fWrap) {
187 vw->fWrap = FALSE;
188 MLEsetwrap(hwnd,FALSE);
189 }
190 MLEanctocur(hwnd);
191 {
192 static ULONG badoff[] = {11,14,17,20,23,26,29,32,35,38,41,44,
193 47,0};
194 ULONG line,pos,offset,len,x;
195 MRESULT mr;
196
197 mr = oldproc(hwnd,msg,mp1,mp2);
198
199 len = MLEcurlinelen(hwnd);
200 line = MLEcurline(hwnd);
201 pos = MLEcurpos(hwnd);
202 offset = len - MLElinelenleft(hwnd,pos);
203 if(offset < 9) {
204 if(!line || offset == 8 || line == MLEnumlines(hwnd) - 1)
205 MLEsetcurpos(hwnd,pos + (9 - offset));
206 else
207 MLEsetcurpos(hwnd,MLEstartofline(hwnd,line + 1) + 9);
208 }
209 else if(offset >= 71) {
210 if(vw->lastpos == offset - 1) {
211 if(line < MLEnumlines(hwnd) - 1)
212 MLEsetcurpos(hwnd,MLEstartofline(hwnd,line + 2) + 55);
213 else
214 MLEsetcurpos(hwnd,MLEstartofline(hwnd,line + 1) + 55);
215 }
216 else
217 MLEsetcurpos(hwnd,MLEstartofline(hwnd,line) + 70);
218 }
219 else if(offset == 53) {
220 if(line < MLEnumlines(hwnd) - 1)
221 MLEsetcurpos(hwnd,MLEstartofline(hwnd,line + 1) + 9);
222 else
223 MLEsetcurpos(hwnd,MLEstartofline(hwnd,line) + 9);
224 }
225 else if(offset == 54) {
226 if(line < MLEnumlines(hwnd) - 1)
227 MLEsetcurpos(hwnd,MLEstartofline(hwnd,line + 1) + 70);
228 else
229 MLEsetcurpos(hwnd,MLEstartofline(hwnd,line) + 70);
230 }
231 else {
232 for(x = 0;badoff[x];x++) {
233 if(offset == badoff[x]) {
234 if(vw->lastpos < pos)
235 MLEsetcurpos(hwnd,pos + 1);
236 else
237 MLEsetcurpos(hwnd,pos - 1);
238 }
239 }
240 }
241 {
242 CHAR s[80];
243
244 sprintf(s,
245 GetPString(IDS_VIEWPOSSTUFFTEXT),
246 len,
247 line,
248 pos,
249 offset);
250 if(hwndStatus)
251 WinSetWindowText(hwndStatus,s);
252 }
253 vw->lastpos = MLEcurpos(hwnd);
254 return mr;
255 }
256 }
257 }
258 break;
259
260 case WM_MENUEND:
261 vw = WinQueryWindowPtr(WinQueryWindow(hwnd,QW_PARENT),QWL_USER);
262 if(vw && vw->size == sizeof(XMLEWNDPTR)) {
263 if(vw->hwndPopupMenu == (HWND)mp2) {
264 WinDestroyWindow(vw->hwndPopupMenu);
265 vw->hwndPopupMenu = (HWND)0;
266 }
267 }
268 break;
269
270 case WM_CONTEXTMENU:
271 vw = WinQueryWindowPtr(WinQueryWindow(hwnd,QW_PARENT),QWL_USER);
272 if(vw && vw->size == sizeof(XMLEWNDPTR)) {
273 if(!vw->hwndPopupMenu)
274 vw->hwndPopupMenu = WinLoadMenu(HWND_DESKTOP,FM3ModHandle,MLE_POPUP);
275 if(vw->hwndPopupMenu) {
276 if(MLEgetreadonly(hwnd)) {
277 WinEnableMenuItem(vw->hwndPopupMenu,MLE_UNDO,FALSE);
278 WinEnableMenuItem(vw->hwndPopupMenu,MLE_CUTCLIP,FALSE);
279 WinEnableMenuItem(vw->hwndPopupMenu,MLE_PASTECLIP,FALSE);
280 WinEnableMenuItem(vw->hwndPopupMenu,MLE_CLEAR,FALSE);
281 WinEnableMenuItem(vw->hwndPopupMenu,MLE_BLOCKMENU,FALSE);
282 }
283 else {
284 WinEnableMenuItem(vw->hwndPopupMenu,MLE_UNDO,TRUE);
285 WinEnableMenuItem(vw->hwndPopupMenu,MLE_CUTCLIP,TRUE);
286 WinEnableMenuItem(vw->hwndPopupMenu,MLE_PASTECLIP,TRUE);
287 WinEnableMenuItem(vw->hwndPopupMenu,MLE_CLEAR,TRUE);
288 WinEnableMenuItem(vw->hwndPopupMenu,MLE_BLOCKMENU,TRUE);
289 }
290 if(!*ftprun)
291 WinSendMsg(vw->hwndPopupMenu,MM_DELETEITEM,
292 MPFROM2SHORT(MLE_VIEWFTP,FALSE),MPVOID);
293 if(!*httprun)
294 WinSendMsg(vw->hwndPopupMenu,MM_DELETEITEM,
295 MPFROM2SHORT(MLE_VIEWHTTP,FALSE),MPVOID);
296 PopupMenu(WinQueryWindow(hwnd,QW_PARENT),
297 WinQueryWindow(hwnd,QW_PARENT),
298 vw->hwndPopupMenu);
299 }
300 }
301 break;
302 }
303 return oldproc(hwnd,msg,mp1,mp2);
304}
305
306
307MRESULT EXPENTRY MLEEditorProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) {
308
309 XMLEWNDPTR *vw;
310
311 if(msg != WM_CREATE &&
312 msg != UM_SETUP)
313 vw = (XMLEWNDPTR *)WinQueryWindowPtr(hwnd,QWL_USER);
314 else
315 vw = NULL;
316
317 switch(msg) {
318 case WM_CREATE:
319 /* create MLE window */
320 WinCreateWindow(hwnd,
321 WC_MLE,
322 (PSZ)NULL,
323 MLS_HSCROLL | MLS_VSCROLL | MLS_BORDER |
324 WS_VISIBLE,
325 0L,
326 0L,
327 0L,
328 0L,
329 hwnd,
330 HWND_TOP,
331 MLE_MLE,
332 MPVOID,
333 MPVOID);
334 {
335 PFNWP oldproc;
336
337 oldproc = WinSubclassWindow(WinWindowFromID(hwnd,MLE_MLE),
338 (PFNWP)MLESubProc);
339 if(oldproc)
340 WinSetWindowPtr(WinWindowFromID(hwnd,MLE_MLE),
341 QWL_USER,
342 (PVOID)oldproc);
343 }
344 break;
345
346 case WM_INITMENU:
347 switch(SHORT1FROMMP(mp1)) {
348 case MLE_EDITMENU:
349 {
350 ULONG ret;
351 CHAR lbl[162];
352
353 strcpy(lbl,GetPString(IDS_UNDOTEXT));
354 ret = (ULONG)WinSendMsg(hwndMLE,MLM_QUERYUNDO,MPVOID,MPVOID);
355 switch(HIUSHORT(ret)) {
356 case WM_CHAR:
357 case MLM_CUT:
358 case MLM_CLEAR:
359 case MLM_PASTE:
360 WinEnableMenuItem((HWND)mp2,MLE_UNDO,TRUE);
361 if(!LOUSHORT(ret))
362 strcpy(lbl,GetPString(IDS_REDOTEXT));
363 switch(HIUSHORT(ret)) {
364 case WM_CHAR:
365 strcat(lbl,GetPString(IDS_KEYSTROKEMENUTEXT));
366 break;
367 case MLM_CUT:
368 strcat(lbl,GetPString(IDS_CUTTOCLIPMENUTEXT));
369 break;
370 case MLM_CLEAR:
371 strcat(lbl,GetPString(IDS_CLEARSELMENUTEXT));
372 break;
373 case MLM_PASTE:
374 strcat(lbl,GetPString(IDS_PASTEFROMCLIPMENUTEXT));
375 break;
376 }
377 WinSetMenuItemText((HWND)mp2,MLE_UNDO,lbl);
378 break;
379 default:
380 WinEnableMenuItem((HWND)mp2,MLE_UNDO,FALSE);
381 break;
382 }
383 }
384 break;
385 }
386 break;
387
388 case UM_SETUP2:
389 vw = WinQueryWindowPtr(hwnd,QWL_USER);
390 if(vw) {
391
392 CHAR s[CCHMAXPATH + 8];
393
394 sprintf(s,
395 "%s: %s",
396 FM2Str,
397 (*vw->exportfilename) ?
398 vw->exportfilename :
399 GetPString(IDS_UNTITLEDTEXT));
400 WinSetWindowText(WinQueryWindow(hwnd,
401 QW_PARENT),
402 s);
403 if(WinQueryWindow(hwnd,QW_PARENT) ==
404 WinQueryActiveWindow(WinQueryWindow(WinQueryWindow(hwnd,
405 QW_PARENT),
406 QW_PARENT)) &&
407 !ParentIsDesktop(WinQueryWindow(hwnd,QW_PARENT),(HWND)0)) {
408 if(hwndStatus2)
409 WinSetWindowText(hwndStatus2,
410 (*vw->exportfilename) ?
411 vw->exportfilename :
412 GetPString(IDS_UNTITLEDTEXT));
413 if(fMoreButtons) {
414 WinSetWindowText(hwndName,
415 (*vw->exportfilename) ?
416 vw->exportfilename :
417 GetPString(IDS_UNTITLEDTEXT));
418 WinSetWindowText(hwndDate,NullStr);
419 WinSetWindowText(hwndAttr,NullStr);
420 }
421 if(hwndStatus)
422 WinSetWindowText(hwndStatus,
423 GetPString(IDS_INTERNALVIEWEREDITORTITLETEXT));
424 }
425 }
426 return 0;
427
428 case UM_SETUP:
429 vw = WinQueryWindowPtr(hwnd,QWL_USER);
430 if(vw) {
431 vw->hab = WinQueryAnchorBlock(hwnd);
432 WinSendMsg(hwnd,UM_SETUP2,MPVOID,MPVOID);
433 /* set up initial MLE conditions */
434 vw->srch.hwndmle = hwndMLE;
435 MLEsetcurpos(hwndMLE,0L);
436 MLEclearall(hwndMLE);
437 MLEsetlimit(hwndMLE,-1L);
438 MLEsetformat(hwndMLE,MLFIE_NOTRANS);
439 WinSetSysValue(HWND_DESKTOP,SV_INSERTMODE,TRUE);
440 vw->fWrap = TRUE;
441 vw->fStripTrail = TRUE;
442 vw->fStripTrailLines = TRUE;
443 vw->srch.fInsensitive = TRUE;
444 vw->ExpandTabs = 4;
445 vw->TabStops = 32;
446 {
447 ULONG size;
448
449 size = sizeof(BOOL);
450 PrfQueryProfileData(fmprof,
451 FM3Str,
452 "MLEWrap",
453 (PVOID)&vw->fWrap,
454 &size);
455 size = sizeof(BOOL);
456 PrfQueryProfileData(fmprof,
457 FM3Str,
458 "MLEstriptrail",
459 (PVOID)&vw->fStripTrail,
460 &size);
461 size = sizeof(BOOL);
462 PrfQueryProfileData(fmprof,
463 FM3Str,
464 "MLEstriptraillines",
465 (PVOID)&vw->fStripTrailLines,
466 &size);
467 size = sizeof(BOOL);
468 PrfQueryProfileData(fmprof,
469 FM3Str,
470 "MLEInsensitve",
471 (PVOID)&vw->srch.fInsensitive,
472 &size);
473 size = sizeof(INT);
474 PrfQueryProfileData(fmprof,
475 FM3Str,
476 "MLEExpandTabs",
477 (PVOID)&vw->ExpandTabs,
478 &size);
479 size = sizeof(INT);
480 PrfQueryProfileData(fmprof,
481 FM3Str,
482 "MLETabStops",
483 (PVOID)&vw->TabStops,
484 &size);
485 }
486 vw->accel = WinQueryAccelTable(vw->hab,
487 WinQueryWindow(hwnd,QW_PARENT));
488 vw->hwndMenu = WinWindowFromID(WinQueryWindow(hwnd,QW_PARENT),
489 FID_MENU);
490 vw->ch = FALSE;
491 MLEsetchanged(hwndMLE,FALSE);
492 {
493 MRESULT ret = 0;
494
495 if(vw->hwndMenu) {
496 SetMenuCheck(vw->hwndMenu,
497 MLE_TOGWRAP,
498 &vw->fWrap,
499 FALSE,
500 NULL);
501 SetMenuCheck(vw->hwndMenu,
502 MLE_STRIPTRAILBLANKS,
503 &vw->fStripTrail,
504 FALSE,
505 NULL);
506 SetMenuCheck(vw->hwndMenu,
507 MLE_STRIPTRAILLINES,
508 &vw->fStripTrailLines,
509 FALSE,
510 NULL);
511 {
512 BOOL tempbool = (vw->ExpandTabs != 0);
513
514 SetMenuCheck(vw->hwndMenu,
515 MLE_EXPANDTABS,
516 &tempbool,
517 FALSE,
518 NULL);
519 }
520 SetMenuCheck(vw->hwndMenu,
521 MLE_SENSITIVE,
522 &vw->srch.fInsensitive,
523 FALSE,
524 NULL);
525 }
526 MLEsetwrap(hwndMLE,vw->fWrap);
527 {
528 ULONG CpList[2];
529 ULONG CpSize;
530
531 if(!DosQueryCp(sizeof(CpList),
532 CpList,
533 &CpSize) &&
534 CpSize)
535 vw->cp = CpList[0];
536 }
537 {
538 ULONG size = sizeof(FATTRS),cps[50],len,x;
539 HMQ hmq;
540
541 if(!PrfQueryProfileData(fmprof,
542 FM3Str,
543 "MLEFont",
544 &vw->fattrs,
545 &size) || size != sizeof(FATTRS)) {
546 vw->fattrs.usRecordLength = sizeof(FATTRS);
547 vw->fattrs.lMaxBaselineExt = 16;
548 vw->fattrs.lAveCharWidth = 8;
549 strcpy(vw->fattrs.szFacename,
550 GetPString(IDS_SYSMONOTEXT));
551 vw->fattrs.usCodePage = (USHORT)vw->cp;
552 }
553 else
554 vw->cp = vw->fattrs.usCodePage;
555 if(!DosQueryCp(sizeof(cps),
556 cps,
557 &len)) {
558 for(x = 0;x < len / sizeof(ULONG);x++) {
559 if(cps[x] == (ULONG)vw->cp) {
560 hmq = WinQueryWindowULong(hwnd,
561 QWL_HMQ);
562 WinSetCp(hmq,vw->cp);
563 break;
564 }
565 }
566 }
567 DosSetProcessCp(vw->cp);
568 WinSendMsg(hwndMLE,
569 MLM_SETFONT,
570 MPFROMP(&vw->fattrs),
571 MPVOID);
572 }
573 if(Firsttime) {
574
575 ULONG size;
576
577 Firsttime = FALSE;
578 size = sizeof(ULONG);
579 PrfQueryProfileData(fmprof,
580 FM3Str,
581 "MLEBackgroundcolor",
582 &Colors[COLORS_BACKGROUND],
583 &size);
584 size = sizeof(ULONG);
585 PrfQueryProfileData(fmprof,
586 FM3Str,
587 "MLEForegroundcolor",
588 &Colors[COLORS_FOREGROUND],
589 &size);
590 }
591 WinSendMsg(hwndMLE,
592 MLM_SETBACKCOLOR,
593 MPFROMLONG(standardcolors[Colors[COLORS_BACKGROUND]]),
594 MPVOID);
595 WinSendMsg(hwndMLE,
596 MLM_SETTEXTCOLOR,
597 MPFROMLONG(standardcolors[Colors[COLORS_FOREGROUND]]),
598 MPVOID);
599 if(*vw->exportfilename)
600 if(MLEbackgroundload(hwnd,
601 UM_CONTAINER_FILLED,
602 hwndMLE,
603 vw->exportfilename,vw->hex) !=
604 -1) {
605 vw->busy = TRUE;
606 WinEnableWindow(vw->hwndMenu,
607 FALSE);
608 }
609 if(vw->busy || MLEgetreadonly(hwndMLE)) {
610 disable_menuitem(vw->hwndMenu,
611 MLE_FILEMENU,
612 FALSE);
613 disable_menuitem(vw->hwndMenu,
614 MLE_CUTCLIP,
615 FALSE);
616 disable_menuitem(vw->hwndMenu,
617 MLE_PASTECLIP,
618 FALSE);
619 disable_menuitem(vw->hwndMenu,
620 MLE_CLEAR,
621 FALSE);
622 disable_menuitem(vw->hwndMenu,
623 MLE_CUTLINE,
624 FALSE);
625 disable_menuitem(vw->hwndMenu,
626 MLE_BLOCKMENU,
627 FALSE);
628 }
629 return ret;
630 }
631 }
632 return 0;
633
634 case UM_CONTAINER_FILLED: /* file was loaded */
635 WinEnableWindow(vw->hwndMenu,
636 TRUE);
637 vw->busy = FALSE;
638 if(vw->killme) {
639 PostMsg(hwnd,
640 WM_CLOSE,
641 MPVOID,
642 MPVOID);
643 return 0;
644 }
645 if(!MLEgetreadonly(hwndMLE)) {
646 disable_menuitem(vw->hwndMenu,
647 MLE_FILEMENU,
648 TRUE);
649 disable_menuitem(vw->hwndMenu,
650 MLE_CUTCLIP,
651 TRUE);
652 disable_menuitem(vw->hwndMenu,
653 MLE_PASTECLIP,
654 TRUE);
655 disable_menuitem(vw->hwndMenu,
656 MLE_CLEAR,
657 TRUE);
658 disable_menuitem(vw->hwndMenu,
659 MLE_CUTLINE,
660 TRUE);
661 disable_menuitem(vw->hwndMenu,
662 MLE_BLOCKMENU,
663 TRUE);
664 }
665 if(mp1) {
666 if(mp2) {
667 vw->ch = FALSE;
668 strcpy(vw->exportfilename,(CHAR *)mp2);
669 }
670 }
671 else {
672 vw->ch = FALSE;
673 *vw->exportfilename = 0;
674 }
675 WinSendMsg(hwnd,UM_SETUP2,MPVOID,MPVOID);
676 return 0;
677
678 case WM_SIZE:
679 WinSetWindowPos(hwndMLE,
680 HWND_TOP,
681 0,
682 0,
683 SHORT1FROMMP(mp2),
684 SHORT2FROMMP(mp2),
685 SWP_MOVE | SWP_SIZE);
686 break;
687
688 case UM_SELECT:
689 case WM_SETFOCUS: /* sling focus to MLE */
690 if(mp2) {
691 if(hwndMain && fAutoView)
692 PostMsg(hwndMain,
693 UM_LOADFILE,
694 MPVOID,
695 MPVOID);
696 WinSendMsg(hwnd,UM_SETUP2,MPVOID,MPVOID);
697 if(msg != UM_SELECT)
698 PostMsg(hwnd,
699 UM_FOCUSME,
700 MPVOID,
701 MPVOID);
702 }
703 if(msg == WM_SETFOCUS)
704 break;
705 return 0;
706
707 case UM_FOCUSME:
708 WinSetFocus(HWND_DESKTOP, hwndMLE);
709 return 0;
710
711 case WM_ERASEBACKGROUND:
712 WinFillRect((HPS)mp1,(PRECTL)mp2,0x00d0d0d0);
713 return 0;
714
715 case WM_PAINT:
716 {
717 RECTL rcl;
718 HPS hps;
719
720 hps = WinBeginPaint(hwnd,(HPS)0,NULL);
721 WinQueryWindowRect(hwnd,&rcl);
722 WinFillRect(hps,&rcl,CLR_PALEGRAY);
723 WinEndPaint(hps);
724 }
725 break;
726
727 case UM_LOADFILE:
728 if((CHAR *)mp1) {
729// switch_to(mp1);
730 if(MLEbackgroundload(hwnd,
731 UM_CONTAINER_FILLED,
732 hwndMLE,
733 (CHAR *)mp1,
734 vw->hex) !=
735 -1) {
736 vw->busy = TRUE;
737 WinEnableWindow(vw->hwndMenu,
738 FALSE);
739 }
740 }
741 return 0;
742
743 case WM_CONTROL:
744 switch(SHORT1FROMMP(mp1)) {
745 case MLE_MLE:
746 switch(SHORT2FROMMP(mp1)) {
747 case MLN_CHANGE:
748 if(!vw->ch)
749 vw->ch = TRUE;
750 break;
751 }
752 break;
753 }
754 return 0;
755
756 case WM_COMMAND:
757 if(vw->busy && SHORT1FROMMP(mp1) != MLE_QUIT) {
758 DosBeep(50,100);
759 return 0;
760 }
761 switch(SHORT1FROMMP(mp1)) {
762 /*
763 case MLE_PREVIEW:
764 preview_text(hwndMLE);
765 break;
766 */
767 case MLE_VIEWFTP:
768 MLEinternet(hwndMLE,TRUE);
769 break;
770
771 case MLE_VIEWHTTP:
772 MLEinternet(hwndMLE,FALSE);
773 break;
774
775 case IDM_NEXTWINDOW:
776 WinSendMsg(hwndMLE,
777 WM_CHAR,
778 MPFROM2SHORT((KC_CHAR | KC_VIRTUALKEY),
779 MAKEUSHORT(1,9)),
780 MPFROM2SHORT(9,VK_TAB));
781 break;
782
783 case IDM_COLORPALETTE:
784 {
785 COLORS co;
786 LONG temp[COLORS_MAX];
787
788 memset(&co,0,sizeof(co));
789 co.size = sizeof(co);
790 co.numcolors = COLORS_MAX;
791 co.colors = Colors;
792 co.descriptions = IDS_EDCOLORS1TEXT;
793 co.origs = temp;
794 co.prompt = IDS_EDCOLORSPROMPTTEXT;
795 memcpy(temp,
796 Colors,
797 sizeof(LONG) * COLORS_MAX);
798 if(WinDlgBox(HWND_DESKTOP,
799 hwnd,
800 ColorDlgProc,
801 FM3ModHandle,
802 COLOR_FRAME,
803 (PVOID)&co)) {
804 WinSendMsg(hwndMLE,
805 MLM_SETTEXTCOLOR,
806 MPFROMLONG(standardcolors[Colors[COLORS_FOREGROUND]]),
807 MPVOID);
808 PrfWriteProfileData(fmprof,
809 FM3Str,
810 "MLEForegroundcolor",
811 &Colors[COLORS_FOREGROUND],
812 sizeof(LONG));
813 WinSendMsg(hwndMLE,
814 MLM_SETBACKCOLOR,
815 MPFROMLONG(standardcolors[Colors[COLORS_BACKGROUND]]),
816 MPVOID);
817 PrfWriteProfileData(fmprof,
818 FM3Str,
819 "MLEBackgroundcolor",
820 &Colors[COLORS_BACKGROUND],
821 sizeof(LONG));
822 }
823 }
824 break;
825
826 case IDM_HELP:
827 if(hwndHelp)
828 WinSendMsg(hwndHelp,HM_DISPLAY_HELP,
829 MPFROM2SHORT(HELP_EDITOR,0),
830 MPFROMSHORT(HM_RESOURCEID));
831 break;
832
833 case MLE_CODEPAGE:
834 vw->cp = PickCodepage(hwnd);
835 vw->fattrs.usCodePage = (USHORT)vw->cp;
836 WinSendMsg(hwndMLE,
837 MLM_SETFONT,
838 MPFROMP(&vw->fattrs),
839 MPVOID);
840 PrfWriteProfileData(fmprof,
841 FM3Str,
842 "MLEFont",
843 &vw->fattrs,
844 sizeof(FATTRS));
845 break;
846
847 case MLE_NEWFILE:
848 if(!MLEgetreadonly(hwndMLE)) {
849 if(vw->ch) {
850
851 APIRET temp;
852
853 temp = saymsg(MB_YESNOCANCEL | MB_ICONEXCLAMATION,
854 hwnd,
855 NullStr,
856 GetPString(IDS_SAVECHANGESTEXT));
857 if(temp == MBID_CANCEL)
858 break;
859 if(temp == MBID_YES)
860 WinSendMsg(hwnd,
861 WM_COMMAND,
862 MPFROM2SHORT(MLE_EXPORTFILE,0),
863 MPVOID);
864 }
865 MLEclearall(hwndMLE);
866 *vw->exportfilename = 0;
867 vw->ch = FALSE;
868 MLEsetchanged(hwndMLE,
869 FALSE);
870 WinSendMsg(hwnd,UM_SETUP2,MPVOID,MPVOID);
871 }
872 break;
873
874 case MLE_TOGGLEREADONLY:
875 if (vw->busy || vw->hex == 1) {
876 DosBeep(50,100);
877 }
878 else {
879 /* I dunno why I gotta reset the colors... */
880 BOOL ro;
881 LONG fColor,bColor;
882
883 fColor = (LONG)WinSendMsg(hwndMLE,
884 MLM_QUERYTEXTCOLOR,
885 MPVOID,
886 MPVOID);
887 bColor = (LONG)WinSendMsg(hwndMLE,
888 MLM_QUERYBACKCOLOR,
889 MPVOID,
890 MPVOID);
891 ro = MLEgetreadonly(hwndMLE);
892 ro = (ro) ? FALSE : TRUE;
893 MLEsetreadonly(hwndMLE,ro);
894 disable_menuitem(vw->hwndMenu,
895 MLE_FILEMENU,
896 !ro);
897 disable_menuitem(vw->hwndMenu,
898 MLE_CUTCLIP,
899 !ro);
900 disable_menuitem(vw->hwndMenu,
901 MLE_PASTECLIP,
902 !ro);
903 disable_menuitem(vw->hwndMenu,
904 MLE_CLEAR,
905 !ro);
906 disable_menuitem(vw->hwndMenu,
907 MLE_CUTLINE,
908 !ro);
909 disable_menuitem(vw->hwndMenu,
910 MLE_BLOCKMENU,
911 !ro);
912 WinSendMsg(hwndMLE,
913 MLM_SETTEXTCOLOR,
914 MPFROMLONG(fColor),
915 MPVOID);
916 WinSendMsg(hwndMLE,
917 MLM_SETBACKCOLOR,
918 MPFROMLONG(bColor),
919 MPVOID);
920 }
921 break;
922
923 case IDM_RENAME:
924 case MLE_SETEXPORTFILE:
925 if(vw && !MLEgetreadonly(hwndMLE)) {
926
927 CHAR filename[1027];
928
929 strcpy(filename,vw->exportfilename);
930 if(export_filename(hwnd,filename,1)) {
931 if(stricmp(filename,vw->exportfilename)) {
932 vw->ch = TRUE;
933 MLEsetchanged(hwndMLE,TRUE);
934 strcpy(vw->exportfilename,filename);
935 WinSendMsg(hwnd,UM_SETUP2,MPVOID,MPVOID);
936 }
937 }
938 }
939 break;
940
941 case MLE_EXPORTFILE:
942 if(!MLEgetreadonly(hwndMLE)) {
943
944 LONG oldsize;
945
946 if(!*vw->exportfilename ||
947 strchr(vw->exportfilename,'?') ||
948 strchr(vw->exportfilename,'*')) {
949 WinSendMsg(hwnd,
950 WM_COMMAND,
951 MPFROM2SHORT(MLE_SETEXPORTFILE,0),
952 MPVOID);
953 if(!*vw->exportfilename ||
954 strchr(vw->exportfilename,'?') ||
955 strchr(vw->exportfilename,'*'))
956 break;
957 }
958 {
959 /* zero file length instead of unlink (protects EAs from loss) */
960 FILE *fp;
961
962 fp = xfopen(vw->exportfilename,"r+",pszSrcFile,__LINE__);
963 if (fp) {
964 oldsize = filelength(fileno(fp));
965 DosSetFileSize(fileno(fp),0L);
966 fclose(fp);
967 }
968 }
969 if (!MLEexportfile(hwndMLE,
970 vw->exportfilename,
971 vw->ExpandTabs,
972 vw->fStripTrailLines,
973 vw->fStripTrail)) {
974 FILE *fp;
975 Runtime_Error(pszSrcFile, __LINE__, "MLEexportfile");
976 fp = xfopen(vw->exportfilename,"r+",pszSrcFile,__LINE__);
977 if (fp) {
978 DosSetFileSize(fileno(fp),oldsize);
979 fclose(fp);
980 }
981 }
982 else {
983 vw->ch = FALSE;
984 MLEsetchanged(hwndMLE,FALSE);
985 }
986 }
987 break;
988
989 case IDM_EDIT:
990 case IDM_VIEW:
991 case MLE_LOADFILE:
992 if(vw->ch && !MLEgetreadonly(hwndMLE)) {
993
994 APIRET temp;
995
996 temp = saymsg(MB_YESNO,
997 hwnd,
998 NullStr,
999 GetPString(IDS_LOADOVERTEXT));
1000 if(temp != MBID_YES)
1001 break;
1002 }
1003 /* intentional fallthru */
1004 case MLE_INSERTFILE:
1005 if(!MLEgetreadonly(hwndMLE)) {
1006
1007 CHAR filename[1027];
1008
1009 strcpy(filename,vw->importfilename);
1010 if(insert_filename(hwnd,
1011 filename,
1012 (SHORT1FROMMP(mp1) == MLE_INSERTFILE) ?
1013 FALSE :
1014 TRUE,
1015 FALSE)) {
1016 strcpy(vw->importfilename,filename);
1017 if(SHORT1FROMMP(mp1) == MLE_INSERTFILE)
1018 MLEinsertfile(hwndMLE,filename);
1019 else {
1020// switch_to(filename);
1021 if(MLEbackgroundload(hwnd,
1022 UM_CONTAINER_FILLED,
1023 hwndMLE,
1024 filename,
1025 vw->hex) !=
1026 -1) {
1027 vw->busy = TRUE;
1028 WinEnableWindow(vw->hwndMenu,
1029 FALSE);
1030 }
1031 }
1032 }
1033 }
1034 break;
1035
1036 case MLE_STRIPTRAILBLANKS:
1037 SetMenuCheck(vw->hwndMenu,
1038 MLE_STRIPTRAILBLANKS,
1039 &vw->fStripTrail,
1040 TRUE,
1041 "MLEstriptrail");
1042 break;
1043
1044 case MLE_STRIPTRAILLINES:
1045 SetMenuCheck(vw->hwndMenu,
1046 MLE_STRIPTRAILLINES,
1047 &vw->fStripTrailLines,
1048 TRUE,
1049 "MLEstriptraillines");
1050 break;
1051
1052 case MLE_TAB:
1053 {
1054 STRINGINPARMS sip;
1055 CHAR s[35];
1056
1057 sip.help = GetPString(IDS_TABSTOPHELPTEXT);
1058 sip.ret = s;
1059 sprintf(s,
1060 "%u",
1061 vw->TabStops);
1062 sip.prompt = GetPString(IDS_TABSTOPPROMPTTEXT);
1063 sip.inputlen = 34;
1064 sip.title = GetPString(IDS_TABSTOPTITLETEXT);
1065 WinDlgBox(HWND_DESKTOP,
1066 hwnd,
1067 InputDlgProc,
1068 FM3ModHandle,
1069 STR_FRAME,
1070 &sip);
1071 if(*s && atoi(s) > -1 && atoi(s) < 512) {
1072 vw->TabStops = atoi(s);
1073 WinSendMsg(hwndMLE,
1074 MLM_SETTABSTOP,
1075 MPFROMLONG(vw->TabStops),
1076 MPVOID);
1077 PrfWriteProfileData(fmprof,
1078 FM3Str,
1079 "MLETabStops",
1080 &vw->TabStops,
1081 sizeof(INT));
1082 }
1083 }
1084 break;
1085
1086 case MLE_EXPANDTABS:
1087 {
1088 BOOL tempbool;
1089 STRINGINPARMS sip;
1090 CHAR s[35];
1091
1092 sip.help = GetPString(IDS_EXTABHELPTEXT);
1093 sip.ret = s;
1094 sprintf(s,
1095 "%u",
1096 vw->ExpandTabs);
1097 sip.prompt = GetPString(IDS_EXTABPROMPTTEXT);
1098 sip.inputlen = 34;
1099 sip.title = GetPString(IDS_EXTABTITLETEXT);
1100 WinDlgBox(HWND_DESKTOP,
1101 hwnd,
1102 InputDlgProc,
1103 FM3ModHandle,
1104 STR_FRAME,
1105 &sip);
1106 if(*s && atoi(s) > -1 && atoi(s) < 33) {
1107 vw->ExpandTabs = atoi(s);
1108 tempbool = (vw->ExpandTabs != 0);
1109 SetMenuCheck(vw->hwndMenu,
1110 MLE_EXPANDTABS,
1111 &tempbool,
1112 FALSE,
1113 NULL);
1114 PrfWriteProfileData(fmprof,
1115 FM3Str,
1116 "MLEExpandTabs",
1117 &vw->ExpandTabs,
1118 sizeof(INT));
1119 }
1120 }
1121 break;
1122
1123 case MLE_APPENDCLIP:
1124 MLEdoblock(hwndMLE,
1125 APPENDCLIP,
1126 NULL);
1127 break;
1128
1129 case MLE_WRITEBLOCK:
1130 {
1131 CHAR filename[1027];
1132
1133 strcpy(filename,vw->exportfilename);
1134 if(export_filename(hwnd,filename,1))
1135 MLEdoblock(hwndMLE,
1136 WRITE,
1137 filename);
1138 }
1139 break;
1140
1141 case MLE_FORMAT:
1142 if(!MLEgetreadonly(hwndMLE))
1143 MLEdoblock(hwndMLE,
1144 FORMAT,
1145 NULL);
1146 break;
1147
1148 case MLE_XOR:
1149 if(!MLEgetreadonly(hwndMLE))
1150 MLEdoblock(hwndMLE,
1151 XOR,
1152 NULL);
1153 break;
1154
1155 case MLE_ROT13:
1156 if(!MLEgetreadonly(hwndMLE))
1157 MLEdoblock(hwndMLE,
1158 ROT13,
1159 NULL);
1160 break;
1161
1162 case MLE_UPPERCASE:
1163 if(!MLEgetreadonly(hwndMLE))
1164 MLEdoblock(hwndMLE,
1165 UPPERCASE,
1166 NULL);
1167 break;
1168
1169 case MLE_LOWERCASE:
1170 if(!MLEgetreadonly(hwndMLE))
1171 MLEdoblock(hwndMLE,
1172 LOWERCASE,
1173 NULL);
1174 break;
1175
1176 case MLE_TOGGLECASE:
1177 if(!MLEgetreadonly(hwndMLE))
1178 MLEdoblock(hwndMLE,
1179 TOGGLECASE,
1180 NULL);
1181 break;
1182
1183 case MLE_JUMP:
1184 {
1185 ULONG numlines,linenum;
1186 CHAR s[35],ss[133];
1187 STRINGINPARMS sip;
1188
1189 sip.help = GetPString(IDS_NVLINEJUMPTEXT);
1190 sip.ret = s;
1191 *s = 0;
1192 sip.prompt = ss;
1193 sip.inputlen = 34;
1194 sip.title = GetPString(IDS_NVLINEJUMPTITLETEXT);
1195 numlines = MLEnumlines(hwndMLE);
1196 if(!numlines)
1197 DosBeep(50,100);
1198 else {
1199 sprintf(sip.prompt,
1200 GetPString(IDS_NVJUMPTEXT),
1201 GetPString(IDS_LINETEXT),
1202 1,
1203 numlines);
1204 WinDlgBox(HWND_DESKTOP,
1205 hwnd,
1206 InputDlgProc,
1207 FM3ModHandle,
1208 STR_FRAME,
1209 &sip);
1210 if (*s) {
1211 linenum = atol(s);
1212 if (linenum > 0 && linenum <= numlines) {
1213 MLEsettopline(hwndMLE,
1214 MLEstartofline(hwndMLE,
1215 linenum));
1216 MLEsetcurpos(hwndMLE,
1217 MLEstartofline(hwndMLE,
1218 linenum));
1219 }
1220 }
1221 }
1222 }
1223 break;
1224
1225 case MLE_CUTLINE: /* delete current line */
1226 if(!MLEgetreadonly(hwndMLE))
1227 MLEdeletecurline(hwndMLE);
1228 break;
1229
1230 case IDM_DELETE:
1231 case MLE_CLEAR:
1232 if(!MLEgetreadonly(hwndMLE))
1233 MLEclear(hwndMLE);
1234 break;
1235
1236 case DID_CANCEL: /* escape */
1237 if(MLEgetreadonly(hwndMLE))
1238 PostMsg(hwnd,
1239 WM_CLOSE,
1240 MPVOID,
1241 MPVOID);
1242 else
1243 PostMsg(hwnd,
1244 WM_COMMAND,
1245 MPFROM2SHORT(MLE_DESELECTALL,0),
1246 MPVOID);
1247 break;
1248
1249 case MLE_QUIT: /* outtahere */
1250 MLEsetchanged(hwndMLE,
1251 FALSE);
1252 vw->ch = FALSE;
1253 /* intentional fallthru */
1254 case MLE_END:
1255 PostMsg(hwnd,
1256 WM_CLOSE,
1257 MPVOID,
1258 MPVOID);
1259 break;
1260
1261 case MLE_SETFONT: /* select a new font */
1262 SetMLEFont(hwndMLE,
1263 &vw->fattrs,
1264 0);
1265 PrfWriteProfileData(fmprof,
1266 FM3Str,
1267 "MLEFont",
1268 &vw->fattrs,
1269 sizeof(FATTRS));
1270 break;
1271
1272 case MLE_SELECTALL:
1273 MLEselectall(hwndMLE);
1274 break;
1275
1276 case MLE_DESELECTALL:
1277 MLEsetcurpos(hwndMLE,
1278 MLEcurpos(hwndMLE));
1279 break;
1280
1281 case MLE_UNDO:
1282 if(!MLEgetreadonly(hwndMLE))
1283 MLEundo(hwndMLE);
1284 break;
1285
1286 case IDM_SAVETOCLIP:
1287 case MLE_COPYCLIP:
1288 MLEcopy(hwndMLE);
1289 break;
1290
1291 case MLE_CUTCLIP:
1292 if(!MLEgetreadonly(hwndMLE))
1293 MLEcut(hwndMLE);
1294 break;
1295
1296 case IDM_COLLECTFROMCLIP:
1297 case MLE_PASTECLIP:
1298 if(!MLEgetreadonly(hwndMLE))
1299 MLEpaste(hwndMLE);
1300 break;
1301
1302 case MLE_SENSITIVE:
1303 SetMenuCheck(vw->hwndMenu,
1304 MLE_SENSITIVE,
1305 &vw->srch.fInsensitive,
1306 TRUE,
1307 "MLEInsensitive");
1308 break;
1309
1310 case MLE_FINDFIRST: /* search */
1311 if(MLEfindfirst(hwnd,&vw->srch))
1312 PostMsg(hwnd,
1313 WM_COMMAND,
1314 MPFROM2SHORT(MLE_FINDNEXT,0),
1315 MPVOID);
1316 break;
1317
1318 case IDM_GREP:
1319 case MLE_FINDNEXT:
1320 {
1321 INT temp;
1322
1323 temp = MLEfindnext(hwnd,&vw->srch);
1324 if(temp < 0)
1325 PostMsg(hwnd,
1326 WM_COMMAND,
1327 MPFROM2SHORT(MLE_FINDFIRST,0),
1328 MPVOID);
1329 else if(temp > 0)
1330 PostMsg(hwnd,
1331 WM_COMMAND,
1332 MPFROM2SHORT(MLE_FINDNEXT,0),
1333 MPVOID);
1334 }
1335 break;
1336
1337 case MLE_TOGWRAP: /* toggle wrap mode */
1338 if(vw->hex != 1) {
1339 SetMenuCheck(vw->hwndMenu,
1340 MLE_TOGWRAP,
1341 &vw->fWrap,
1342 TRUE,
1343 "MLEWrap");
1344 MLEsetwrap(hwndMLE,
1345 vw->fWrap);
1346 }
1347 break;
1348
1349 case IDM_ABOUT:
1350 case MLE_ABOUT:
1351 saymsg(MB_ENTER | MB_ICONASTERISK,
1352 hwnd,
1353 GetPString(IDS_VIEWABOUTTITLETEXT),
1354 GetPString(IDS_VIEWABOUTTEXT));
1355 break;
1356 }
1357 return 0;
1358
1359 case WM_SAVEAPPLICATION:
1360 if(vw &&
1361 ParentIsDesktop(hwnd,vw->hwndParent)) {
1362
1363 SWP swp;
1364
1365 WinQueryWindowPos(vw->hwndFrame,
1366 &swp);
1367 if(!(swp.fl & (SWP_HIDE | SWP_MINIMIZE | SWP_MAXIMIZE)))
1368 PrfWriteProfileData(fmprof,
1369 appname,
1370 "ViewSizePos",
1371 &swp,
1372 sizeof(swp));
1373 }
1374 break;
1375
1376 case WM_CLOSE: /* outtahere */
1377 WinSendMsg(hwnd,
1378 WM_SAVEAPPLICATION,
1379 MPVOID,
1380 MPVOID);
1381 if(vw) {
1382 if(vw->busy) {
1383 vw->killme = TRUE;
1384 return 0;
1385 }
1386 if(vw->ch &&
1387 !MLEgetreadonly(hwndMLE)) {
1388
1389 APIRET temp;
1390
1391 temp = saymsg(MB_YESNOCANCEL | MB_ICONEXCLAMATION,
1392 hwnd,
1393 NullStr,
1394 GetPString(IDS_SAVECHANGESTEXT));
1395 if(temp == MBID_CANCEL)
1396 return 0;
1397 if(temp == MBID_YES)
1398 WinSendMsg(hwnd,
1399 WM_COMMAND,
1400 MPFROM2SHORT(MLE_EXPORTFILE,0),
1401 MPVOID);
1402 }
1403 }
1404 WinDestroyWindow(WinQueryWindow(hwnd,QW_PARENT));
1405 return 0;
1406
1407 case WM_DESTROY:
1408 DosPostEventSem(CompactSem);
1409 {
1410 BOOL dontclose = FALSE;
1411
1412 if(vw) {
1413 if(vw->hwndPopupMenu)
1414 WinDestroyWindow(vw->hwndPopupMenu);
1415 if(vw->accel)
1416 WinDestroyAccelTable(vw->accel);
1417 dontclose = vw->dontclose;
1418 WinSetWindowPtr(hwnd,QWL_USER,NULL);
1419 if(vw->hwndRestore) {
1420
1421 ULONG fl = SWP_SHOW | SWP_ACTIVATE | SWP_ZORDER;
1422 SWP swp;
1423
1424 if(WinQueryWindowPos(vw->hwndRestore,
1425 &swp)) {
1426 if(!(swp.fl & SWP_MAXIMIZE))
1427 fl |= SWP_RESTORE;
1428 WinSetWindowPos(vw->hwndRestore,
1429 HWND_TOP,
1430 0,
1431 0,
1432 0,
1433 0,
1434 fl);
1435 }
1436 }
1437 free(vw);
1438 }
1439 if(!dontclose &&
1440 ParentIsDesktop(hwnd,WinQueryWindow(WinQueryWindow(hwnd,
1441 QW_PARENT),QW_PARENT))) {
1442 if(!PostMsg((HWND)0,
1443 WM_QUIT,
1444 MPVOID,
1445 MPVOID))
1446 DosExit(EXIT_PROCESS,1);
1447 }
1448 }
1449 break;
1450 }
1451 return WinDefWindowProc(hwnd,msg,mp1,mp2);
1452}
1453
Note: See TracBrowser for help on using the repository browser.