source: trunk/dll/viewer.c@ 1187

Last change on this file since 1187 was 1187, checked in by John Small, 17 years ago

Ticket 187: Draft 2: Move remaining function declarations

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