source: trunk/dll/viewer.c@ 1402

Last change on this file since 1402 was 1402, checked in by Gregg Young, 16 years ago

Remove variable aurgs from docopy & unlinkf (not used); Move more strings to PCSZs and string table; Move PCSZs to compile time initialization; Fix hang on startup caused by a drive scan and a dircnr scan trying to update a drive in the tree at the same time (related to the "treeswitch options); Code cleanup mainly removal of old printfs, SayMsgs, DbgMsg and unneeded %s.

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