source: trunk/dll/viewer.c@ 1544

Last change on this file since 1544 was 1544, checked in by Gregg Young, 15 years ago

Changes to fopen and _fsopen to allow FM2 to be loaded in high memory

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