source: branches/MKIMES/dll/viewer.c@ 3

Last change on this file since 3 was 2, checked in by root, 23 years ago

Initial revision

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