source: trunk/dll/viewer.c@ 879

Last change on this file since 879 was 879, checked in by Gregg Young, 18 years ago

Clean up of allow readonly files in editor.

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