source: trunk/dll/viewer.c@ 470

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

Sync with disable_menuitem changes

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