source: trunk/dll/viewer.c@ 1063

Last change on this file since 1063 was 1063, checked in by Gregg Young, 17 years ago

Fortify ifdef reformat

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