source: trunk/dll/viewer.c@ 907

Last change on this file since 907 was 907, checked in by Steven Levine, 18 years ago

Avoid out of memory traps in Compare Directories
Rework Compare Directories progress display for 2 second update rate
Start refactoring to reduce dependence on fm3dll.h
Add timer services (IsITimerExpired etc.)

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