source: trunk/dll/viewer.c@ 186

Last change on this file since 186 was 186, checked in by root, 20 years ago

Use QWL_USER

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