source: trunk/dll/viewer.c@ 1009

Last change on this file since 1009 was 1009, checked in by Steven Levine, 17 years ago

Add xfree xstrdup Fortify support
Add MT capable Fortify scope logic

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