source: trunk/dll/viewer.c@ 396

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

Clean

  • 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 396 2006-07-28 18:42:35Z 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 if (!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 Win_Error2(hwnd,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
336 }
337 else {
338 PFNWP oldproc;
339 oldproc = WinSubclassWindow(WinWindowFromID(hwnd,MLE_MLE),
340 MLESubProc);
341 WinSetWindowPtr(WinWindowFromID(hwnd,MLE_MLE),
342 QWL_USER,
343 (PVOID)oldproc);
344 }
345 break;
346
347 case WM_INITMENU:
348 switch(SHORT1FROMMP(mp1)) {
349 case MLE_EDITMENU:
350 {
351 ULONG ret;
352 CHAR lbl[162];
353
354 strcpy(lbl,GetPString(IDS_UNDOTEXT));
355 ret = (ULONG)WinSendMsg(hwndMLE,MLM_QUERYUNDO,MPVOID,MPVOID);
356 switch(HIUSHORT(ret)) {
357 case WM_CHAR:
358 case MLM_CUT:
359 case MLM_CLEAR:
360 case MLM_PASTE:
361 WinEnableMenuItem((HWND)mp2,MLE_UNDO,TRUE);
362 if(!LOUSHORT(ret))
363 strcpy(lbl,GetPString(IDS_REDOTEXT));
364 switch(HIUSHORT(ret)) {
365 case WM_CHAR:
366 strcat(lbl,GetPString(IDS_KEYSTROKEMENUTEXT));
367 break;
368 case MLM_CUT:
369 strcat(lbl,GetPString(IDS_CUTTOCLIPMENUTEXT));
370 break;
371 case MLM_CLEAR:
372 strcat(lbl,GetPString(IDS_CLEARSELMENUTEXT));
373 break;
374 case MLM_PASTE:
375 strcat(lbl,GetPString(IDS_PASTEFROMCLIPMENUTEXT));
376 break;
377 }
378 WinSetMenuItemText((HWND)mp2,MLE_UNDO,lbl);
379 break;
380 default:
381 WinEnableMenuItem((HWND)mp2,MLE_UNDO,FALSE);
382 break;
383 }
384 }
385 break;
386 }
387 break;
388
389 case UM_SETUP2:
390 vw = WinQueryWindowPtr(hwnd,QWL_USER);
391 if(vw) {
392
393 CHAR s[CCHMAXPATH + 8];
394
395 sprintf(s,
396 "%s: %s",
397 FM2Str,
398 (*vw->exportfilename) ?
399 vw->exportfilename :
400 GetPString(IDS_UNTITLEDTEXT));
401 WinSetWindowText(WinQueryWindow(hwnd,
402 QW_PARENT),
403 s);
404 if(WinQueryWindow(hwnd,QW_PARENT) ==
405 WinQueryActiveWindow(WinQueryWindow(WinQueryWindow(hwnd,
406 QW_PARENT),
407 QW_PARENT)) &&
408 !ParentIsDesktop(WinQueryWindow(hwnd,QW_PARENT),(HWND)0)) {
409 if(hwndStatus2)
410 WinSetWindowText(hwndStatus2,
411 (*vw->exportfilename) ?
412 vw->exportfilename :
413 GetPString(IDS_UNTITLEDTEXT));
414 if(fMoreButtons) {
415 WinSetWindowText(hwndName,
416 (*vw->exportfilename) ?
417 vw->exportfilename :
418 GetPString(IDS_UNTITLEDTEXT));
419 WinSetWindowText(hwndDate,NullStr);
420 WinSetWindowText(hwndAttr,NullStr);
421 }
422 if(hwndStatus)
423 WinSetWindowText(hwndStatus,
424 GetPString(IDS_INTERNALVIEWEREDITORTITLETEXT));
425 }
426 }
427 return 0;
428
429 case UM_SETUP:
430 vw = WinQueryWindowPtr(hwnd,QWL_USER);
431 if(vw) {
432 vw->hab = WinQueryAnchorBlock(hwnd);
433 WinSendMsg(hwnd,UM_SETUP2,MPVOID,MPVOID);
434 /* set up initial MLE conditions */
435 vw->srch.hwndmle = hwndMLE;
436 MLEsetcurpos(hwndMLE,0L);
437 MLEclearall(hwndMLE);
438 MLEsetlimit(hwndMLE,-1L);
439 MLEsetformat(hwndMLE,MLFIE_NOTRANS);
440 WinSetSysValue(HWND_DESKTOP,SV_INSERTMODE,TRUE);
441 vw->fWrap = TRUE;
442 vw->fStripTrail = TRUE;
443 vw->fStripTrailLines = TRUE;
444 vw->srch.fInsensitive = TRUE;
445 vw->ExpandTabs = 4;
446 vw->TabStops = 32;
447 {
448 ULONG size;
449
450 size = sizeof(BOOL);
451 PrfQueryProfileData(fmprof,
452 FM3Str,
453 "MLEWrap",
454 (PVOID)&vw->fWrap,
455 &size);
456 size = sizeof(BOOL);
457 PrfQueryProfileData(fmprof,
458 FM3Str,
459 "MLEstriptrail",
460 (PVOID)&vw->fStripTrail,
461 &size);
462 size = sizeof(BOOL);
463 PrfQueryProfileData(fmprof,
464 FM3Str,
465 "MLEstriptraillines",
466 (PVOID)&vw->fStripTrailLines,
467 &size);
468 size = sizeof(BOOL);
469 PrfQueryProfileData(fmprof,
470 FM3Str,
471 "MLEInsensitve",
472 (PVOID)&vw->srch.fInsensitive,
473 &size);
474 size = sizeof(INT);
475 PrfQueryProfileData(fmprof,
476 FM3Str,
477 "MLEExpandTabs",
478 (PVOID)&vw->ExpandTabs,
479 &size);
480 size = sizeof(INT);
481 PrfQueryProfileData(fmprof,
482 FM3Str,
483 "MLETabStops",
484 (PVOID)&vw->TabStops,
485 &size);
486 }
487 vw->accel = WinQueryAccelTable(vw->hab,
488 WinQueryWindow(hwnd,QW_PARENT));
489 vw->hwndMenu = WinWindowFromID(WinQueryWindow(hwnd,QW_PARENT),
490 FID_MENU);
491 vw->ch = FALSE;
492 MLEsetchanged(hwndMLE,FALSE);
493 {
494 MRESULT ret = 0;
495
496 if(vw->hwndMenu) {
497 SetMenuCheck(vw->hwndMenu,
498 MLE_TOGWRAP,
499 &vw->fWrap,
500 FALSE,
501 NULL);
502 SetMenuCheck(vw->hwndMenu,
503 MLE_STRIPTRAILBLANKS,
504 &vw->fStripTrail,
505 FALSE,
506 NULL);
507 SetMenuCheck(vw->hwndMenu,
508 MLE_STRIPTRAILLINES,
509 &vw->fStripTrailLines,
510 FALSE,
511 NULL);
512 {
513 BOOL tempbool = (vw->ExpandTabs != 0);
514
515 SetMenuCheck(vw->hwndMenu,
516 MLE_EXPANDTABS,
517 &tempbool,
518 FALSE,
519 NULL);
520 }
521 SetMenuCheck(vw->hwndMenu,
522 MLE_SENSITIVE,
523 &vw->srch.fInsensitive,
524 FALSE,
525 NULL);
526 }
527 MLEsetwrap(hwndMLE,vw->fWrap);
528 {
529 ULONG CpList[2];
530 ULONG CpSize;
531
532 if(!DosQueryCp(sizeof(CpList),
533 CpList,
534 &CpSize) &&
535 CpSize)
536 vw->cp = CpList[0];
537 }
538 {
539 ULONG size = sizeof(FATTRS),cps[50],len,x;
540 HMQ hmq;
541
542 if(!PrfQueryProfileData(fmprof,
543 FM3Str,
544 "MLEFont",
545 &vw->fattrs,
546 &size) || size != sizeof(FATTRS)) {
547 vw->fattrs.usRecordLength = sizeof(FATTRS);
548 vw->fattrs.lMaxBaselineExt = 16;
549 vw->fattrs.lAveCharWidth = 8;
550 strcpy(vw->fattrs.szFacename,
551 GetPString(IDS_SYSMONOTEXT));
552 vw->fattrs.usCodePage = (USHORT)vw->cp;
553 }
554 else
555 vw->cp = vw->fattrs.usCodePage;
556 if(!DosQueryCp(sizeof(cps),
557 cps,
558 &len)) {
559 for(x = 0;x < len / sizeof(ULONG);x++) {
560 if(cps[x] == (ULONG)vw->cp) {
561 hmq = WinQueryWindowULong(hwnd,
562 QWL_HMQ);
563 WinSetCp(hmq,vw->cp);
564 break;
565 }
566 }
567 }
568 DosSetProcessCp(vw->cp);
569 WinSendMsg(hwndMLE,
570 MLM_SETFONT,
571 MPFROMP(&vw->fattrs),
572 MPVOID);
573 }
574 if(Firsttime) {
575
576 ULONG size;
577
578 Firsttime = FALSE;
579 size = sizeof(ULONG);
580 PrfQueryProfileData(fmprof,
581 FM3Str,
582 "MLEBackgroundcolor",
583 &Colors[COLORS_BACKGROUND],
584 &size);
585 size = sizeof(ULONG);
586 PrfQueryProfileData(fmprof,
587 FM3Str,
588 "MLEForegroundcolor",
589 &Colors[COLORS_FOREGROUND],
590 &size);
591 }
592 WinSendMsg(hwndMLE,
593 MLM_SETBACKCOLOR,
594 MPFROMLONG(standardcolors[Colors[COLORS_BACKGROUND]]),
595 MPVOID);
596 WinSendMsg(hwndMLE,
597 MLM_SETTEXTCOLOR,
598 MPFROMLONG(standardcolors[Colors[COLORS_FOREGROUND]]),
599 MPVOID);
600 if(*vw->exportfilename)
601 if(MLEbackgroundload(hwnd,
602 UM_CONTAINER_FILLED,
603 hwndMLE,
604 vw->exportfilename,vw->hex) !=
605 -1) {
606 vw->busy = TRUE;
607 WinEnableWindow(vw->hwndMenu,
608 FALSE);
609 }
610 if(vw->busy || MLEgetreadonly(hwndMLE)) {
611 disable_menuitem(vw->hwndMenu,
612 MLE_FILEMENU,
613 FALSE);
614 disable_menuitem(vw->hwndMenu,
615 MLE_CUTCLIP,
616 FALSE);
617 disable_menuitem(vw->hwndMenu,
618 MLE_PASTECLIP,
619 FALSE);
620 disable_menuitem(vw->hwndMenu,
621 MLE_CLEAR,
622 FALSE);
623 disable_menuitem(vw->hwndMenu,
624 MLE_CUTLINE,
625 FALSE);
626 disable_menuitem(vw->hwndMenu,
627 MLE_BLOCKMENU,
628 FALSE);
629 }
630 return ret;
631 }
632 }
633 return 0;
634
635 case UM_CONTAINER_FILLED: /* file was loaded */
636 WinEnableWindow(vw->hwndMenu,
637 TRUE);
638 vw->busy = FALSE;
639 if(vw->killme) {
640 PostMsg(hwnd,
641 WM_CLOSE,
642 MPVOID,
643 MPVOID);
644 return 0;
645 }
646 if(!MLEgetreadonly(hwndMLE)) {
647 disable_menuitem(vw->hwndMenu,
648 MLE_FILEMENU,
649 TRUE);
650 disable_menuitem(vw->hwndMenu,
651 MLE_CUTCLIP,
652 TRUE);
653 disable_menuitem(vw->hwndMenu,
654 MLE_PASTECLIP,
655 TRUE);
656 disable_menuitem(vw->hwndMenu,
657 MLE_CLEAR,
658 TRUE);
659 disable_menuitem(vw->hwndMenu,
660 MLE_CUTLINE,
661 TRUE);
662 disable_menuitem(vw->hwndMenu,
663 MLE_BLOCKMENU,
664 TRUE);
665 }
666 if(mp1) {
667 if(mp2) {
668 vw->ch = FALSE;
669 strcpy(vw->exportfilename,(CHAR *)mp2);
670 }
671 }
672 else {
673 vw->ch = FALSE;
674 *vw->exportfilename = 0;
675 }
676 WinSendMsg(hwnd,UM_SETUP2,MPVOID,MPVOID);
677 return 0;
678
679 case WM_SIZE:
680 WinSetWindowPos(hwndMLE,
681 HWND_TOP,
682 0,
683 0,
684 SHORT1FROMMP(mp2),
685 SHORT2FROMMP(mp2),
686 SWP_MOVE | SWP_SIZE);
687 break;
688
689 case UM_SELECT:
690 case WM_SETFOCUS: /* sling focus to MLE */
691 if(mp2) {
692 if(hwndMain && fAutoView)
693 PostMsg(hwndMain,
694 UM_LOADFILE,
695 MPVOID,
696 MPVOID);
697 WinSendMsg(hwnd,UM_SETUP2,MPVOID,MPVOID);
698 if(msg != UM_SELECT)
699 PostMsg(hwnd,
700 UM_FOCUSME,
701 MPVOID,
702 MPVOID);
703 }
704 if(msg == WM_SETFOCUS)
705 break;
706 return 0;
707
708 case UM_FOCUSME:
709 WinSetFocus(HWND_DESKTOP, hwndMLE);
710 return 0;
711
712 case WM_ERASEBACKGROUND:
713 WinFillRect((HPS)mp1,(PRECTL)mp2,0x00d0d0d0);
714 return 0;
715
716 case WM_PAINT:
717 {
718 RECTL rcl;
719 HPS hps;
720
721 hps = WinBeginPaint(hwnd,(HPS)0,NULL);
722 WinQueryWindowRect(hwnd,&rcl);
723 WinFillRect(hps,&rcl,CLR_PALEGRAY);
724 WinEndPaint(hps);
725 }
726 break;
727
728 case UM_LOADFILE:
729 if((CHAR *)mp1) {
730// switch_to(mp1);
731 if(MLEbackgroundload(hwnd,
732 UM_CONTAINER_FILLED,
733 hwndMLE,
734 (CHAR *)mp1,
735 vw->hex) !=
736 -1) {
737 vw->busy = TRUE;
738 WinEnableWindow(vw->hwndMenu,
739 FALSE);
740 }
741 }
742 return 0;
743
744 case WM_CONTROL:
745 switch(SHORT1FROMMP(mp1)) {
746 case MLE_MLE:
747 switch(SHORT2FROMMP(mp1)) {
748 case MLN_CHANGE:
749 if(!vw->ch)
750 vw->ch = TRUE;
751 break;
752 }
753 break;
754 }
755 return 0;
756
757 case WM_COMMAND:
758 if(vw->busy && SHORT1FROMMP(mp1) != MLE_QUIT) {
759 DosBeep(50,100);
760 return 0;
761 }
762 switch(SHORT1FROMMP(mp1)) {
763 /*
764 case MLE_PREVIEW:
765 preview_text(hwndMLE);
766 break;
767 */
768 case MLE_VIEWFTP:
769 MLEinternet(hwndMLE,TRUE);
770 break;
771
772 case MLE_VIEWHTTP:
773 MLEinternet(hwndMLE,FALSE);
774 break;
775
776 case IDM_NEXTWINDOW:
777 WinSendMsg(hwndMLE,
778 WM_CHAR,
779 MPFROM2SHORT((KC_CHAR | KC_VIRTUALKEY),
780 MAKEUSHORT(1,9)),
781 MPFROM2SHORT(9,VK_TAB));
782 break;
783
784 case IDM_COLORPALETTE:
785 {
786 COLORS co;
787 LONG temp[COLORS_MAX];
788
789 memset(&co,0,sizeof(co));
790 co.size = sizeof(co);
791 co.numcolors = COLORS_MAX;
792 co.colors = Colors;
793 co.descriptions = IDS_EDCOLORS1TEXT;
794 co.origs = temp;
795 co.prompt = IDS_EDCOLORSPROMPTTEXT;
796 memcpy(temp,
797 Colors,
798 sizeof(LONG) * COLORS_MAX);
799 if(WinDlgBox(HWND_DESKTOP,
800 hwnd,
801 ColorDlgProc,
802 FM3ModHandle,
803 COLOR_FRAME,
804 (PVOID)&co)) {
805 WinSendMsg(hwndMLE,
806 MLM_SETTEXTCOLOR,
807 MPFROMLONG(standardcolors[Colors[COLORS_FOREGROUND]]),
808 MPVOID);
809 PrfWriteProfileData(fmprof,
810 FM3Str,
811 "MLEForegroundcolor",
812 &Colors[COLORS_FOREGROUND],
813 sizeof(LONG));
814 WinSendMsg(hwndMLE,
815 MLM_SETBACKCOLOR,
816 MPFROMLONG(standardcolors[Colors[COLORS_BACKGROUND]]),
817 MPVOID);
818 PrfWriteProfileData(fmprof,
819 FM3Str,
820 "MLEBackgroundcolor",
821 &Colors[COLORS_BACKGROUND],
822 sizeof(LONG));
823 }
824 }
825 break;
826
827 case IDM_HELP:
828 if(hwndHelp)
829 WinSendMsg(hwndHelp,HM_DISPLAY_HELP,
830 MPFROM2SHORT(HELP_EDITOR,0),
831 MPFROMSHORT(HM_RESOURCEID));
832 break;
833
834 case MLE_CODEPAGE:
835 vw->cp = PickCodepage(hwnd);
836 vw->fattrs.usCodePage = (USHORT)vw->cp;
837 WinSendMsg(hwndMLE,
838 MLM_SETFONT,
839 MPFROMP(&vw->fattrs),
840 MPVOID);
841 PrfWriteProfileData(fmprof,
842 FM3Str,
843 "MLEFont",
844 &vw->fattrs,
845 sizeof(FATTRS));
846 break;
847
848 case MLE_NEWFILE:
849 if(!MLEgetreadonly(hwndMLE)) {
850 if(vw->ch) {
851
852 APIRET temp;
853
854 temp = saymsg(MB_YESNOCANCEL | MB_ICONEXCLAMATION,
855 hwnd,
856 NullStr,
857 GetPString(IDS_SAVECHANGESTEXT));
858 if(temp == MBID_CANCEL)
859 break;
860 if(temp == MBID_YES)
861 WinSendMsg(hwnd,
862 WM_COMMAND,
863 MPFROM2SHORT(MLE_EXPORTFILE,0),
864 MPVOID);
865 }
866 MLEclearall(hwndMLE);
867 *vw->exportfilename = 0;
868 vw->ch = FALSE;
869 MLEsetchanged(hwndMLE,
870 FALSE);
871 WinSendMsg(hwnd,UM_SETUP2,MPVOID,MPVOID);
872 }
873 break;
874
875 case MLE_TOGGLEREADONLY:
876 if (vw->busy || vw->hex == 1) {
877 DosBeep(50,100);
878 }
879 else {
880 /* I dunno why I gotta reset the colors... */
881 BOOL ro;
882 LONG fColor,bColor;
883
884 fColor = (LONG)WinSendMsg(hwndMLE,
885 MLM_QUERYTEXTCOLOR,
886 MPVOID,
887 MPVOID);
888 bColor = (LONG)WinSendMsg(hwndMLE,
889 MLM_QUERYBACKCOLOR,
890 MPVOID,
891 MPVOID);
892 ro = MLEgetreadonly(hwndMLE);
893 ro = (ro) ? FALSE : TRUE;
894 MLEsetreadonly(hwndMLE,ro);
895 disable_menuitem(vw->hwndMenu,
896 MLE_FILEMENU,
897 !ro);
898 disable_menuitem(vw->hwndMenu,
899 MLE_CUTCLIP,
900 !ro);
901 disable_menuitem(vw->hwndMenu,
902 MLE_PASTECLIP,
903 !ro);
904 disable_menuitem(vw->hwndMenu,
905 MLE_CLEAR,
906 !ro);
907 disable_menuitem(vw->hwndMenu,
908 MLE_CUTLINE,
909 !ro);
910 disable_menuitem(vw->hwndMenu,
911 MLE_BLOCKMENU,
912 !ro);
913 WinSendMsg(hwndMLE,
914 MLM_SETTEXTCOLOR,
915 MPFROMLONG(fColor),
916 MPVOID);
917 WinSendMsg(hwndMLE,
918 MLM_SETBACKCOLOR,
919 MPFROMLONG(bColor),
920 MPVOID);
921 }
922 break;
923
924 case IDM_RENAME:
925 case MLE_SETEXPORTFILE:
926 if(vw && !MLEgetreadonly(hwndMLE)) {
927
928 CHAR filename[1027];
929
930 strcpy(filename,vw->exportfilename);
931 if(export_filename(hwnd,filename,1)) {
932 if(stricmp(filename,vw->exportfilename)) {
933 vw->ch = TRUE;
934 MLEsetchanged(hwndMLE,TRUE);
935 strcpy(vw->exportfilename,filename);
936 WinSendMsg(hwnd,UM_SETUP2,MPVOID,MPVOID);
937 }
938 }
939 }
940 break;
941
942 case MLE_EXPORTFILE:
943 if(!MLEgetreadonly(hwndMLE)) {
944
945 LONG oldsize;
946
947 if(!*vw->exportfilename ||
948 strchr(vw->exportfilename,'?') ||
949 strchr(vw->exportfilename,'*')) {
950 WinSendMsg(hwnd,
951 WM_COMMAND,
952 MPFROM2SHORT(MLE_SETEXPORTFILE,0),
953 MPVOID);
954 if(!*vw->exportfilename ||
955 strchr(vw->exportfilename,'?') ||
956 strchr(vw->exportfilename,'*'))
957 break;
958 }
959 {
960 /* zero file length instead of unlink (protects EAs from loss) */
961 FILE *fp;
962
963 fp = xfopen(vw->exportfilename,"r+",pszSrcFile,__LINE__);
964 if (fp) {
965 oldsize = filelength(fileno(fp));
966 DosSetFileSize(fileno(fp),0L);
967 fclose(fp);
968 }
969 }
970 if (!MLEexportfile(hwndMLE,
971 vw->exportfilename,
972 vw->ExpandTabs,
973 vw->fStripTrailLines,
974 vw->fStripTrail)) {
975 FILE *fp;
976 Runtime_Error(pszSrcFile, __LINE__, "MLEexportfile");
977 fp = xfopen(vw->exportfilename,"r+",pszSrcFile,__LINE__);
978 if (fp) {
979 DosSetFileSize(fileno(fp),oldsize);
980 fclose(fp);
981 }
982 }
983 else {
984 vw->ch = FALSE;
985 MLEsetchanged(hwndMLE,FALSE);
986 }
987 }
988 break;
989
990 case IDM_EDIT:
991 case IDM_VIEW:
992 case MLE_LOADFILE:
993 if(vw->ch && !MLEgetreadonly(hwndMLE)) {
994
995 APIRET temp;
996
997 temp = saymsg(MB_YESNO,
998 hwnd,
999 NullStr,
1000 GetPString(IDS_LOADOVERTEXT));
1001 if(temp != MBID_YES)
1002 break;
1003 }
1004 /* intentional fallthru */
1005 case MLE_INSERTFILE:
1006 if(!MLEgetreadonly(hwndMLE)) {
1007
1008 CHAR filename[1027];
1009
1010 strcpy(filename,vw->importfilename);
1011 if(insert_filename(hwnd,
1012 filename,
1013 (SHORT1FROMMP(mp1) == MLE_INSERTFILE) ?
1014 FALSE :
1015 TRUE,
1016 FALSE)) {
1017 strcpy(vw->importfilename,filename);
1018 if(SHORT1FROMMP(mp1) == MLE_INSERTFILE)
1019 MLEinsertfile(hwndMLE,filename);
1020 else {
1021// switch_to(filename);
1022 if(MLEbackgroundload(hwnd,
1023 UM_CONTAINER_FILLED,
1024 hwndMLE,
1025 filename,
1026 vw->hex) !=
1027 -1) {
1028 vw->busy = TRUE;
1029 WinEnableWindow(vw->hwndMenu,
1030 FALSE);
1031 }
1032 }
1033 }
1034 }
1035 break;
1036
1037 case MLE_STRIPTRAILBLANKS:
1038 SetMenuCheck(vw->hwndMenu,
1039 MLE_STRIPTRAILBLANKS,
1040 &vw->fStripTrail,
1041 TRUE,
1042 "MLEstriptrail");
1043 break;
1044
1045 case MLE_STRIPTRAILLINES:
1046 SetMenuCheck(vw->hwndMenu,
1047 MLE_STRIPTRAILLINES,
1048 &vw->fStripTrailLines,
1049 TRUE,
1050 "MLEstriptraillines");
1051 break;
1052
1053 case MLE_TAB:
1054 {
1055 STRINGINPARMS sip;
1056 CHAR s[35];
1057
1058 sip.help = GetPString(IDS_TABSTOPHELPTEXT);
1059 sip.ret = s;
1060 sprintf(s,
1061 "%u",
1062 vw->TabStops);
1063 sip.prompt = GetPString(IDS_TABSTOPPROMPTTEXT);
1064 sip.inputlen = 34;
1065 sip.title = GetPString(IDS_TABSTOPTITLETEXT);
1066 WinDlgBox(HWND_DESKTOP,
1067 hwnd,
1068 InputDlgProc,
1069 FM3ModHandle,
1070 STR_FRAME,
1071 &sip);
1072 if(*s && atoi(s) > -1 && atoi(s) < 512) {
1073 vw->TabStops = atoi(s);
1074 WinSendMsg(hwndMLE,
1075 MLM_SETTABSTOP,
1076 MPFROMLONG(vw->TabStops),
1077 MPVOID);
1078 PrfWriteProfileData(fmprof,
1079 FM3Str,
1080 "MLETabStops",
1081 &vw->TabStops,
1082 sizeof(INT));
1083 }
1084 }
1085 break;
1086
1087 case MLE_EXPANDTABS:
1088 {
1089 BOOL tempbool;
1090 STRINGINPARMS sip;
1091 CHAR s[35];
1092
1093 sip.help = GetPString(IDS_EXTABHELPTEXT);
1094 sip.ret = s;
1095 sprintf(s,
1096 "%u",
1097 vw->ExpandTabs);
1098 sip.prompt = GetPString(IDS_EXTABPROMPTTEXT);
1099 sip.inputlen = 34;
1100 sip.title = GetPString(IDS_EXTABTITLETEXT);
1101 WinDlgBox(HWND_DESKTOP,
1102 hwnd,
1103 InputDlgProc,
1104 FM3ModHandle,
1105 STR_FRAME,
1106 &sip);
1107 if(*s && atoi(s) > -1 && atoi(s) < 33) {
1108 vw->ExpandTabs = atoi(s);
1109 tempbool = (vw->ExpandTabs != 0);
1110 SetMenuCheck(vw->hwndMenu,
1111 MLE_EXPANDTABS,
1112 &tempbool,
1113 FALSE,
1114 NULL);
1115 PrfWriteProfileData(fmprof,
1116 FM3Str,
1117 "MLEExpandTabs",
1118 &vw->ExpandTabs,
1119 sizeof(INT));
1120 }
1121 }
1122 break;
1123
1124 case MLE_APPENDCLIP:
1125 MLEdoblock(hwndMLE,
1126 APPENDCLIP,
1127 NULL);
1128 break;
1129
1130 case MLE_WRITEBLOCK:
1131 {
1132 CHAR filename[1027];
1133
1134 strcpy(filename,vw->exportfilename);
1135 if(export_filename(hwnd,filename,1))
1136 MLEdoblock(hwndMLE,
1137 WRITE,
1138 filename);
1139 }
1140 break;
1141
1142 case MLE_FORMAT:
1143 if(!MLEgetreadonly(hwndMLE))
1144 MLEdoblock(hwndMLE,
1145 FORMAT,
1146 NULL);
1147 break;
1148
1149 case MLE_XOR:
1150 if(!MLEgetreadonly(hwndMLE))
1151 MLEdoblock(hwndMLE,
1152 XOR,
1153 NULL);
1154 break;
1155
1156 case MLE_ROT13:
1157 if(!MLEgetreadonly(hwndMLE))
1158 MLEdoblock(hwndMLE,
1159 ROT13,
1160 NULL);
1161 break;
1162
1163 case MLE_UPPERCASE:
1164 if(!MLEgetreadonly(hwndMLE))
1165 MLEdoblock(hwndMLE,
1166 UPPERCASE,
1167 NULL);
1168 break;
1169
1170 case MLE_LOWERCASE:
1171 if(!MLEgetreadonly(hwndMLE))
1172 MLEdoblock(hwndMLE,
1173 LOWERCASE,
1174 NULL);
1175 break;
1176
1177 case MLE_TOGGLECASE:
1178 if(!MLEgetreadonly(hwndMLE))
1179 MLEdoblock(hwndMLE,
1180 TOGGLECASE,
1181 NULL);
1182 break;
1183
1184 case MLE_JUMP:
1185 {
1186 ULONG numlines,linenum;
1187 CHAR s[35],ss[133];
1188 STRINGINPARMS sip;
1189
1190 sip.help = GetPString(IDS_NVLINEJUMPTEXT);
1191 sip.ret = s;
1192 *s = 0;
1193 sip.prompt = ss;
1194 sip.inputlen = 34;
1195 sip.title = GetPString(IDS_NVLINEJUMPTITLETEXT);
1196 numlines = MLEnumlines(hwndMLE);
1197 if(!numlines)
1198 DosBeep(50,100);
1199 else {
1200 sprintf(sip.prompt,
1201 GetPString(IDS_NVJUMPTEXT),
1202 GetPString(IDS_LINETEXT),
1203 1,
1204 numlines);
1205 WinDlgBox(HWND_DESKTOP,
1206 hwnd,
1207 InputDlgProc,
1208 FM3ModHandle,
1209 STR_FRAME,
1210 &sip);
1211 if (*s) {
1212 linenum = atol(s);
1213 if (linenum > 0 && linenum <= numlines) {
1214 MLEsettopline(hwndMLE,
1215 MLEstartofline(hwndMLE,
1216 linenum));
1217 MLEsetcurpos(hwndMLE,
1218 MLEstartofline(hwndMLE,
1219 linenum));
1220 }
1221 }
1222 }
1223 }
1224 break;
1225
1226 case MLE_CUTLINE: /* delete current line */
1227 if(!MLEgetreadonly(hwndMLE))
1228 MLEdeletecurline(hwndMLE);
1229 break;
1230
1231 case IDM_DELETE:
1232 case MLE_CLEAR:
1233 if(!MLEgetreadonly(hwndMLE))
1234 MLEclear(hwndMLE);
1235 break;
1236
1237 case DID_CANCEL: /* escape */
1238 if(MLEgetreadonly(hwndMLE))
1239 PostMsg(hwnd,
1240 WM_CLOSE,
1241 MPVOID,
1242 MPVOID);
1243 else
1244 PostMsg(hwnd,
1245 WM_COMMAND,
1246 MPFROM2SHORT(MLE_DESELECTALL,0),
1247 MPVOID);
1248 break;
1249
1250 case MLE_QUIT: /* outtahere */
1251 MLEsetchanged(hwndMLE,
1252 FALSE);
1253 vw->ch = FALSE;
1254 /* intentional fallthru */
1255 case MLE_END:
1256 PostMsg(hwnd,
1257 WM_CLOSE,
1258 MPVOID,
1259 MPVOID);
1260 break;
1261
1262 case MLE_SETFONT: /* select a new font */
1263 SetMLEFont(hwndMLE,
1264 &vw->fattrs,
1265 0);
1266 PrfWriteProfileData(fmprof,
1267 FM3Str,
1268 "MLEFont",
1269 &vw->fattrs,
1270 sizeof(FATTRS));
1271 break;
1272
1273 case MLE_SELECTALL:
1274 MLEselectall(hwndMLE);
1275 break;
1276
1277 case MLE_DESELECTALL:
1278 MLEsetcurpos(hwndMLE,
1279 MLEcurpos(hwndMLE));
1280 break;
1281
1282 case MLE_UNDO:
1283 if(!MLEgetreadonly(hwndMLE))
1284 MLEundo(hwndMLE);
1285 break;
1286
1287 case IDM_SAVETOCLIP:
1288 case MLE_COPYCLIP:
1289 MLEcopy(hwndMLE);
1290 break;
1291
1292 case MLE_CUTCLIP:
1293 if(!MLEgetreadonly(hwndMLE))
1294 MLEcut(hwndMLE);
1295 break;
1296
1297 case IDM_COLLECTFROMCLIP:
1298 case MLE_PASTECLIP:
1299 if(!MLEgetreadonly(hwndMLE))
1300 MLEpaste(hwndMLE);
1301 break;
1302
1303 case MLE_SENSITIVE:
1304 SetMenuCheck(vw->hwndMenu,
1305 MLE_SENSITIVE,
1306 &vw->srch.fInsensitive,
1307 TRUE,
1308 "MLEInsensitive");
1309 break;
1310
1311 case MLE_FINDFIRST: /* search */
1312 if(MLEfindfirst(hwnd,&vw->srch))
1313 PostMsg(hwnd,
1314 WM_COMMAND,
1315 MPFROM2SHORT(MLE_FINDNEXT,0),
1316 MPVOID);
1317 break;
1318
1319 case IDM_GREP:
1320 case MLE_FINDNEXT:
1321 {
1322 INT temp;
1323
1324 temp = MLEfindnext(hwnd,&vw->srch);
1325 if(temp < 0)
1326 PostMsg(hwnd,
1327 WM_COMMAND,
1328 MPFROM2SHORT(MLE_FINDFIRST,0),
1329 MPVOID);
1330 else if(temp > 0)
1331 PostMsg(hwnd,
1332 WM_COMMAND,
1333 MPFROM2SHORT(MLE_FINDNEXT,0),
1334 MPVOID);
1335 }
1336 break;
1337
1338 case MLE_TOGWRAP: /* toggle wrap mode */
1339 if(vw->hex != 1) {
1340 SetMenuCheck(vw->hwndMenu,
1341 MLE_TOGWRAP,
1342 &vw->fWrap,
1343 TRUE,
1344 "MLEWrap");
1345 MLEsetwrap(hwndMLE,
1346 vw->fWrap);
1347 }
1348 break;
1349
1350 case IDM_ABOUT:
1351 case MLE_ABOUT:
1352 saymsg(MB_ENTER | MB_ICONASTERISK,
1353 hwnd,
1354 GetPString(IDS_VIEWABOUTTITLETEXT),
1355 GetPString(IDS_VIEWABOUTTEXT));
1356 break;
1357 }
1358 return 0;
1359
1360 case WM_SAVEAPPLICATION:
1361 if(vw &&
1362 ParentIsDesktop(hwnd,vw->hwndParent)) {
1363
1364 SWP swp;
1365
1366 WinQueryWindowPos(vw->hwndFrame,
1367 &swp);
1368 if(!(swp.fl & (SWP_HIDE | SWP_MINIMIZE | SWP_MAXIMIZE)))
1369 PrfWriteProfileData(fmprof,
1370 appname,
1371 "ViewSizePos",
1372 &swp,
1373 sizeof(swp));
1374 }
1375 break;
1376
1377 case WM_CLOSE: /* outtahere */
1378 WinSendMsg(hwnd,
1379 WM_SAVEAPPLICATION,
1380 MPVOID,
1381 MPVOID);
1382 if(vw) {
1383 if(vw->busy) {
1384 vw->killme = TRUE;
1385 return 0;
1386 }
1387 if(vw->ch &&
1388 !MLEgetreadonly(hwndMLE)) {
1389
1390 APIRET temp;
1391
1392 temp = saymsg(MB_YESNOCANCEL | MB_ICONEXCLAMATION,
1393 hwnd,
1394 NullStr,
1395 GetPString(IDS_SAVECHANGESTEXT));
1396 if(temp == MBID_CANCEL)
1397 return 0;
1398 if(temp == MBID_YES)
1399 WinSendMsg(hwnd,
1400 WM_COMMAND,
1401 MPFROM2SHORT(MLE_EXPORTFILE,0),
1402 MPVOID);
1403 }
1404 }
1405 WinDestroyWindow(WinQueryWindow(hwnd,QW_PARENT));
1406 return 0;
1407
1408 case WM_DESTROY:
1409 DosPostEventSem(CompactSem);
1410 {
1411 BOOL dontclose = FALSE;
1412
1413 if(vw) {
1414 if(vw->hwndPopupMenu)
1415 WinDestroyWindow(vw->hwndPopupMenu);
1416 if(vw->accel)
1417 WinDestroyAccelTable(vw->accel);
1418 dontclose = vw->dontclose;
1419 WinSetWindowPtr(hwnd,QWL_USER,NULL);
1420 if(vw->hwndRestore) {
1421
1422 ULONG fl = SWP_SHOW | SWP_ACTIVATE | SWP_ZORDER;
1423 SWP swp;
1424
1425 if(WinQueryWindowPos(vw->hwndRestore,
1426 &swp)) {
1427 if(!(swp.fl & SWP_MAXIMIZE))
1428 fl |= SWP_RESTORE;
1429 WinSetWindowPos(vw->hwndRestore,
1430 HWND_TOP,
1431 0,
1432 0,
1433 0,
1434 0,
1435 fl);
1436 }
1437 }
1438 free(vw);
1439 }
1440 if (!dontclose &&
1441 ParentIsDesktop(hwnd,WinQueryWindow(WinQueryWindow(hwnd,
1442 QW_PARENT),QW_PARENT))) {
1443 if (!PostMsg((HWND)0,WM_QUIT,MPVOID,MPVOID))
1444 DosExit(EXIT_PROCESS,1);
1445 }
1446 }
1447 break;
1448 }
1449 return WinDefWindowProc(hwnd,msg,mp1,mp2);
1450}
1451
Note: See TracBrowser for help on using the repository browser.