source: trunk/dll/viewer.c@ 1395

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

Allow user to turn off alert and/or error beeps in settings notebook. Ticket 341 Move repeated strings to PCSZs. Ticket 6 Add *DateFormat functions to format dates based on locale Ticket 28 Eliminate Win_Error2 by moving function names to PCSZs used in Win_Error Ticket 6

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 33.5 KB
Line 
1
2/***********************************************************************
3
4 $Id: viewer.c 1395 2009-02-08 01:48:16Z 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
22***********************************************************************/
23
24#include <stdlib.h>
25#include <string.h>
26#include <io.h>
27
28#define INCL_DOS
29#define INCL_WIN
30#define INCL_LONGLONG
31
32#include "fm3dll.h"
33#include "fm3dll2.h" // #define's for UM_*, control id's, etc.
34#include "viewer.h"
35#include "mainwnd2.h" // Data declaration(s)
36#include "collect.h" // Data declaration(s)
37#include "grep.h" // Data declaration(s)
38#include "dircnrs.h" // Data declaration(s)
39#include "init.h" // Data declaration(s)
40#include "fm3dlg.h"
41#include "fm3str.h"
42#include "mle.h"
43#include "errutil.h" // Dos_Error...
44#include "strutil.h" // GetPString
45#include "notebook.h" // External viewers
46#include "colors.h" // ColorDlgProc
47#include "mainwnd.h" // FillClient
48#include "codepage.h" // PickCodepage
49#include "dirs.h" // switch_to
50#include "input.h" // InputDlgProc
51#include "valid.h" // ParentIsDesktop
52#include "chklist.h" // PopupMenu
53#include "newview.h" // StartViewer
54#include "getnames.h" // export_filename
55#include "misc.h" // SetMenuCheck, disable_menuitem
56#include "fonts.h" // SetMLEFont
57#include "wrappers.h" // xfopen
58#include "fortify.h"
59
60#pragma data_seg(DATA1)
61
62static PSZ pszSrcFile = __FILE__;
63
64#define hwndMLE WinWindowFromID(hwnd,MLE_MLE)
65
66#define COLORS_MAX 2
67
68#define COLORS_FOREGROUND 0
69#define COLORS_BACKGROUND 1
70
71static LONG Colors[COLORS_MAX] = { COLR_BLACK, COLR_PALEGRAY };
72static BOOL Firsttime = TRUE;
73
74HWND StartMLEEditor(HWND hwndClient, INT flags, CHAR * filename,
75 HWND hwndRestore)
76{
77
78 /*
79 * create an editor window
80 * bitmapped flags:
81 * 1 = readonly
82 * 2 = don't position window for non-desktop client
83 * 4 = don't "kill app" when closed
84 * 8 = as text
85 * 16 = as binary
86 */
87
88 HWND hwndFrame, hwnd;
89 XMLEWNDPTR *vw;
90 ULONG flFrameFlags = FCF_SYSMENU | FCF_SIZEBORDER | FCF_ICON |
91 FCF_TITLEBAR | FCF_MINMAX | FCF_MENU | FCF_ACCELTABLE | FCF_NOBYTEALIGN;
92 ULONG ulResult;
93 BOOL OpenInViewer = FALSE, readonly = FALSE;
94 FILESTATUS3 fs3;
95
96 if (fExternalViewer || strcmp(realappname, FM3Str))
97 hwndClient = HWND_DESKTOP;
98 DosQueryPathInfo(filename, FIL_STANDARD, &fs3, sizeof(fs3));
99 if (fs3.attrFile & FILE_READONLY) {
100 ulResult = saymsg(MB_YESNOCANCEL | MB_ICONQUESTION | MB_DEFBUTTON1, HWND_DESKTOP,
101 GetPString(IDS_WARNINGTEXT),
102 GetPString(IDS_EDITREADONLYFILETEXT),
103 filename);
104 switch (ulResult){
105 case MBID_YES:{
106 readonly = TRUE;
107 break;
108 }
109
110 case MBID_NO:
111 if (fUseNewViewer)
112 return StartViewer(hwndClient, (USHORT) flags, filename, hwndRestore);
113 else{
114 OpenInViewer = TRUE;
115 break;
116 }
117
118 case MBID_CANCEL:
119 return (HWND) 0;
120 }
121 }
122# ifdef FORTIFY
123 Fortify_EnterScope();
124# endif
125 vw = xmallocz(sizeof(XMLEWNDPTR), pszSrcFile, __LINE__);
126 if (!vw)
127 return (HWND) 0;
128 vw->size = sizeof(XMLEWNDPTR);
129 if (readonly)
130 vw->fileattrreadonly = TRUE;
131 else
132 vw->fileattrreadonly = FALSE;
133 if (flags & 1) {
134 if (flags & 8)
135 vw->hex = 2;
136 else if (flags & 16)
137 vw->hex = 1;
138 else if (!fGuessType)
139 vw->hex = 2;
140 }
141 else
142 vw->hex = 2;
143 vw->hwndParent = (hwndClient) ? hwndClient : HWND_DESKTOP;
144 vw->srch.size = sizeof(SRCHPTR);
145 if (flags & 4)
146 vw->dontclose = TRUE;
147 if (filename)
148 strcpy(vw->exportfilename, filename);
149 vw->hwndRestore = hwndRestore;
150 if (ParentIsDesktop(hwndClient, hwndClient))
151 flFrameFlags |= FCF_TASKLIST;
152 hwndFrame = WinCreateStdWindow(hwndClient,
153 0,
154 &flFrameFlags,
155 WC_MLEEDITOR,
156 NullStr,
157 fwsAnimate,
158 FM3ModHandle, MLE_FRAME, &hwnd);
159 if (hwndFrame) {
160 vw->hwndFrame = hwndFrame;
161 if (!ParentIsDesktop(hwndFrame, hwndClient) && !(flags & 2)) {
162
163 SWP swp;
164
165 FillClient(hwndClient, &swp, NULL, FALSE);
166 WinSetWindowPos(hwndFrame,
167 HWND_TOP,
168 swp.x,
169 swp.y,
170 swp.cx,
171 swp.cy,
172 SWP_SIZE | SWP_MOVE | SWP_SHOW | SWP_ACTIVATE |
173 SWP_ZORDER);
174 }
175 else if (flFrameFlags & FCF_TASKLIST) {
176
177 SWP swp, swpD;
178 ULONG size = sizeof(swp);
179 LONG cxScreen, cyScreen;
180
181 WinQueryTaskSizePos(WinQueryAnchorBlock(hwndFrame), 0, &swp);
182 if (PrfQueryProfileData(fmprof, appname, "ViewSizePos", &swpD, &size)) {
183 cxScreen = WinQuerySysValue(HWND_DESKTOP, SV_CXSCREEN);
184 cyScreen = WinQuerySysValue(HWND_DESKTOP, SV_CYSCREEN);
185 if (swp.x + swpD.cx > cxScreen)
186 swp.x = cxScreen - swpD.cx;
187 if (swp.y + swpD.cy > cyScreen)
188 swp.y = cyScreen - swpD.cy;
189 swp.cx = swpD.cx;
190 swp.cy = swpD.cy;
191 }
192 WinSetWindowPos(hwndFrame,
193 HWND_TOP,
194 swp.x,
195 swp.y,
196 swp.cx,
197 swp.cy,
198 SWP_SIZE | SWP_MOVE | SWP_SHOW | SWP_ZORDER |
199 SWP_ACTIVATE);
200 }
201 if (OpenInViewer | (flags & 1))
202 MLEsetreadonly(hwndMLE, ((flags & 1) != 0));
203 WinSetWindowPtr(hwnd, QWL_USER, (PVOID) vw);
204 if (!PostMsg(hwnd, UM_SETUP, MPVOID, MPFROMLONG(hwndClient)))
205 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPFROMLONG(hwndClient));
206 }
207 return hwndFrame;
208}
209
210MRESULT EXPENTRY MLESubProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
211{
212
213 PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd, QWL_USER);
214 XMLEWNDPTR *vw;
215
216 switch (msg) {
217 case WM_SETFOCUS:
218 if (mp2)
219 PostMsg(WinQueryWindow(hwnd, QW_PARENT), UM_SELECT, mp1, mp2);
220 break;
221
222 case WM_CHAR:
223 vw = WinQueryWindowPtr(WinQueryWindow(hwnd, QW_PARENT), QWL_USER);
224 if (vw && vw->size == sizeof(XMLEWNDPTR) && vw->hex == 1) {
225 if (!MLEgetreadonly(hwnd)) {
226 WinSetSysValue(HWND_DESKTOP, SV_INSERTMODE, FALSE);
227 if (vw->fWrap) {
228 vw->fWrap = FALSE;
229 MLEsetwrap(hwnd, FALSE);
230 }
231 MLEanctocur(hwnd);
232 {
233 static ULONG badoff[] =
234 { 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44,
235 47, 0
236 };
237 ULONG line, pos, offset, len, x;
238 MRESULT mr;
239
240 mr = oldproc(hwnd, msg, mp1, mp2);
241
242 len = MLEcurlinelen(hwnd);
243 line = MLEcurline(hwnd);
244 pos = MLEcurpos(hwnd);
245 offset = len - MLElinelenleft(hwnd, pos);
246 if (offset < 9) {
247 if (!line || offset == 8 || line == MLEnumlines(hwnd) - 1)
248 MLEsetcurpos(hwnd, pos + (9 - offset));
249 else
250 MLEsetcurpos(hwnd, MLEstartofline(hwnd, line + 1) + 9);
251 }
252 else if (offset >= 71) {
253 if (vw->lastpos == offset - 1) {
254 if (line < MLEnumlines(hwnd) - 1)
255 MLEsetcurpos(hwnd, MLEstartofline(hwnd, line + 2) + 55);
256 else
257 MLEsetcurpos(hwnd, MLEstartofline(hwnd, line + 1) + 55);
258 }
259 else
260 MLEsetcurpos(hwnd, MLEstartofline(hwnd, line) + 70);
261 }
262 else if (offset == 53) {
263 if (line < MLEnumlines(hwnd) - 1)
264 MLEsetcurpos(hwnd, MLEstartofline(hwnd, line + 1) + 9);
265 else
266 MLEsetcurpos(hwnd, MLEstartofline(hwnd, line) + 9);
267 }
268 else if (offset == 54) {
269 if (line < MLEnumlines(hwnd) - 1)
270 MLEsetcurpos(hwnd, MLEstartofline(hwnd, line + 1) + 70);
271 else
272 MLEsetcurpos(hwnd, MLEstartofline(hwnd, line) + 70);
273 }
274 else {
275 for (x = 0; badoff[x]; x++) {
276 if (offset == badoff[x]) {
277 if (vw->lastpos < pos)
278 MLEsetcurpos(hwnd, pos + 1);
279 else
280 MLEsetcurpos(hwnd, pos - 1);
281 }
282 }
283 }
284 {
285 CHAR s[80];
286
287 sprintf(s,
288 GetPString(IDS_VIEWPOSSTUFFTEXT), len, line, pos, offset);
289 if (hwndStatus)
290 WinSetWindowText(hwndStatus, s);
291 }
292 vw->lastpos = MLEcurpos(hwnd);
293 return mr;
294 }
295 }
296 }
297 break;
298
299 case WM_MENUEND:
300 vw = WinQueryWindowPtr(WinQueryWindow(hwnd, QW_PARENT), QWL_USER);
301 if (vw && vw->size == sizeof(XMLEWNDPTR)) {
302 if (vw->hwndPopupMenu == (HWND) mp2) {
303 WinDestroyWindow(vw->hwndPopupMenu);
304 vw->hwndPopupMenu = (HWND) 0;
305 }
306 }
307 break;
308
309 case WM_CONTEXTMENU:
310 vw = WinQueryWindowPtr(WinQueryWindow(hwnd, QW_PARENT), QWL_USER);
311 if (vw && vw->size == sizeof(XMLEWNDPTR)) {
312 if (!vw->hwndPopupMenu)
313 vw->hwndPopupMenu =
314 WinLoadMenu(HWND_DESKTOP, FM3ModHandle, MLE_POPUP);
315 if (vw->hwndPopupMenu) {
316 if (MLEgetreadonly(hwnd)) {
317 WinEnableMenuItem(vw->hwndPopupMenu, MLE_UNDO, FALSE);
318 WinEnableMenuItem(vw->hwndPopupMenu, MLE_CUTCLIP, FALSE);
319 WinEnableMenuItem(vw->hwndPopupMenu, MLE_PASTECLIP, FALSE);
320 WinEnableMenuItem(vw->hwndPopupMenu, MLE_CLEAR, FALSE);
321 WinEnableMenuItem(vw->hwndPopupMenu, MLE_BLOCKMENU, FALSE);
322 }
323 else {
324 WinEnableMenuItem(vw->hwndPopupMenu, MLE_UNDO, TRUE);
325 WinEnableMenuItem(vw->hwndPopupMenu, MLE_CUTCLIP, TRUE);
326 WinEnableMenuItem(vw->hwndPopupMenu, MLE_PASTECLIP, TRUE);
327 WinEnableMenuItem(vw->hwndPopupMenu, MLE_CLEAR, TRUE);
328 WinEnableMenuItem(vw->hwndPopupMenu, MLE_BLOCKMENU, TRUE);
329 }
330 if (!*ftprun && !fFtpRunWPSDefault)
331 WinSendMsg(vw->hwndPopupMenu, MM_DELETEITEM,
332 MPFROM2SHORT(MLE_VIEWFTP, FALSE), MPVOID);
333 if (!*httprun && !fHttpRunWPSDefault)
334 WinSendMsg(vw->hwndPopupMenu, MM_DELETEITEM,
335 MPFROM2SHORT(MLE_VIEWHTTP, FALSE), MPVOID);
336 PopupMenu(WinQueryWindow(hwnd, QW_PARENT),
337 WinQueryWindow(hwnd, QW_PARENT), vw->hwndPopupMenu);
338 }
339 }
340 break;
341 }
342 return oldproc(hwnd, msg, mp1, mp2);
343}
344
345MRESULT EXPENTRY MLEEditorProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
346{
347
348 XMLEWNDPTR *vw;
349
350 if (msg != WM_CREATE && msg != UM_SETUP)
351 vw = (XMLEWNDPTR *) WinQueryWindowPtr(hwnd, QWL_USER);
352 else
353 vw = NULL;
354
355 switch (msg) {
356 case WM_CREATE:
357 /* create MLE window */
358 if (!WinCreateWindow(hwnd,
359 WC_MLE,
360 (PSZ) NULL,
361 MLS_VSCROLL | MLS_BORDER |
362 WS_VISIBLE | MLS_HSCROLL,
363 0,
364 0,
365 0, 0, hwnd, HWND_TOP, MLE_MLE, MPVOID, MPVOID)) {
366 Win_Error(hwnd, hwnd, pszSrcFile, __LINE__,
367 PCSZ_WINCREATEWINDOW);
368 }
369 else {
370 PFNWP oldproc;
371
372 oldproc = WinSubclassWindow(WinWindowFromID(hwnd, MLE_MLE), MLESubProc);
373 WinSetWindowPtr(WinWindowFromID(hwnd, MLE_MLE),
374 QWL_USER, (PVOID) oldproc);
375 }
376 break;
377
378 case WM_INITMENU:
379 switch (SHORT1FROMMP(mp1)) {
380 case MLE_EDITMENU:
381 {
382 ULONG ret;
383 CHAR lbl[162];
384
385 strcpy(lbl, GetPString(IDS_UNDOTEXT));
386 ret = (ULONG) WinSendMsg(hwndMLE, MLM_QUERYUNDO, MPVOID, MPVOID);
387 switch (HIUSHORT(ret)) {
388 case WM_CHAR:
389 case MLM_CUT:
390 case MLM_CLEAR:
391 case MLM_PASTE:
392 WinEnableMenuItem((HWND) mp2, MLE_UNDO, TRUE);
393 if (!LOUSHORT(ret))
394 strcpy(lbl, GetPString(IDS_REDOTEXT));
395 switch (HIUSHORT(ret)) {
396 case WM_CHAR:
397 strcat(lbl, GetPString(IDS_KEYSTROKEMENUTEXT));
398 break;
399 case MLM_CUT:
400 strcat(lbl, GetPString(IDS_CUTTOCLIPMENUTEXT));
401 break;
402 case MLM_CLEAR:
403 strcat(lbl, GetPString(IDS_CLEARSELMENUTEXT));
404 break;
405 case MLM_PASTE:
406 strcat(lbl, GetPString(IDS_PASTEFROMCLIPMENUTEXT));
407 break;
408 }
409 WinSetMenuItemText((HWND) mp2, MLE_UNDO, lbl);
410 break;
411 default:
412 WinEnableMenuItem((HWND) mp2, MLE_UNDO, FALSE);
413 break;
414 }
415 }
416 break;
417 }
418 break;
419
420 case UM_SETUP2:
421 vw = WinQueryWindowPtr(hwnd, QWL_USER);
422 if (vw) {
423
424 CHAR s[CCHMAXPATH + 8];
425
426 sprintf(s,
427 "%s: %s",
428 FM2Str,
429 (*vw->exportfilename) ?
430 vw->exportfilename : GetPString(IDS_UNTITLEDTEXT));
431 WinSetWindowText(WinQueryWindow(hwnd, QW_PARENT), s);
432 if (WinQueryWindow(hwnd, QW_PARENT) ==
433 WinQueryActiveWindow(WinQueryWindow(WinQueryWindow(hwnd,
434 QW_PARENT),
435 QW_PARENT)) &&
436 !ParentIsDesktop(WinQueryWindow(hwnd, QW_PARENT), (HWND) 0)) {
437 if (hwndStatus2)
438 WinSetWindowText(hwndStatus2,
439 (*vw->exportfilename) ?
440 vw->exportfilename : GetPString(IDS_UNTITLEDTEXT));
441 if (fMoreButtons) {
442 WinSetWindowText(hwndName,
443 (*vw->exportfilename) ?
444 vw->exportfilename : GetPString(IDS_UNTITLEDTEXT));
445 WinSetWindowText(hwndDate, NullStr);
446 WinSetWindowText(hwndAttr, NullStr);
447 }
448 if (hwndStatus)
449 WinSetWindowText(hwndStatus,
450 GetPString(IDS_INTERNALVIEWEREDITORTITLETEXT));
451 }
452 }
453 return 0;
454
455 case UM_SETUP:
456 vw = WinQueryWindowPtr(hwnd, QWL_USER);
457 if (vw) {
458 vw->hab = WinQueryAnchorBlock(hwnd);
459 WinSendMsg(hwnd, UM_SETUP2, MPVOID, MPVOID);
460 /* set up initial MLE conditions */
461 vw->srch.hwndmle = hwndMLE;
462 MLEsetcurpos(hwndMLE, 0);
463 MLEclearall(hwndMLE);
464 MLEsetlimit(hwndMLE, -1);
465 MLEsetformat(hwndMLE, MLFIE_NOTRANS);
466 WinSetSysValue(HWND_DESKTOP, SV_INSERTMODE, TRUE);
467 vw->fWrap = FALSE;
468 vw->fStripTrail = TRUE;
469 vw->fStripTrailLines = TRUE;
470 vw->srch.fInsensitive = TRUE;
471 vw->ExpandTabs = 4;
472 vw->TabStops = 32;
473 {
474 ULONG size;
475
476 size = sizeof(BOOL);
477 PrfQueryProfileData(fmprof,
478 FM3Str, "MLEWrap", (PVOID) & vw->fWrap, &size);
479 size = sizeof(BOOL);
480 PrfQueryProfileData(fmprof,
481 FM3Str,
482 "MLEstriptrail",
483 (PVOID) & vw->fStripTrail, &size);
484 size = sizeof(BOOL);
485 PrfQueryProfileData(fmprof,
486 FM3Str,
487 "MLEstriptraillines",
488 (PVOID) & vw->fStripTrailLines, &size);
489 size = sizeof(BOOL);
490 PrfQueryProfileData(fmprof,
491 FM3Str,
492 "MLEInsensitve",
493 (PVOID) & vw->srch.fInsensitive, &size);
494 size = sizeof(INT);
495 PrfQueryProfileData(fmprof,
496 FM3Str,
497 "MLEExpandTabs", (PVOID) & vw->ExpandTabs, &size);
498 size = sizeof(INT);
499 PrfQueryProfileData(fmprof,
500 FM3Str,
501 "MLETabStops", (PVOID) & vw->TabStops, &size);
502 }
503 vw->accel = WinQueryAccelTable(vw->hab,
504 WinQueryWindow(hwnd, QW_PARENT));
505 vw->hwndMenu = WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
506 FID_MENU);
507 vw->ch = FALSE;
508 MLEsetchanged(hwndMLE, FALSE);
509 {
510 MRESULT ret = 0;
511
512 if (vw->hwndMenu) {
513 SetMenuCheck(vw->hwndMenu, MLE_TOGWRAP, &vw->fWrap, FALSE, NULL);
514 SetMenuCheck(vw->hwndMenu,
515 MLE_STRIPTRAILBLANKS, &vw->fStripTrail, FALSE, NULL);
516 SetMenuCheck(vw->hwndMenu,
517 MLE_STRIPTRAILLINES,
518 &vw->fStripTrailLines, FALSE, NULL);
519 {
520 BOOL tempbool = (vw->ExpandTabs != 0);
521
522 SetMenuCheck(vw->hwndMenu,
523 MLE_EXPANDTABS, &tempbool, FALSE, NULL);
524 }
525 SetMenuCheck(vw->hwndMenu,
526 MLE_SENSITIVE, &vw->srch.fInsensitive, FALSE, NULL);
527 }
528 MLEsetwrap(hwndMLE, vw->fWrap);
529 {
530 ULONG CpList[2];
531 ULONG CpSize;
532
533 if (!DosQueryCp(sizeof(CpList), CpList, &CpSize) && CpSize)
534 vw->cp = CpList[0];
535 }
536 {
537 ULONG size = sizeof(FATTRS), cps[50], len, x;
538 HMQ hmq;
539
540 if (!PrfQueryProfileData(fmprof,
541 FM3Str,
542 "MLEFont",
543 &vw->fattrs,
544 &size) || size != sizeof(FATTRS)) {
545 vw->fattrs.usRecordLength = sizeof(FATTRS);
546 vw->fattrs.lMaxBaselineExt = 16;
547 vw->fattrs.lAveCharWidth = 8;
548 strcpy(vw->fattrs.szFacename, GetPString(IDS_SYSMONOTEXT));
549 vw->fattrs.usCodePage = (USHORT) vw->cp;
550 }
551 else
552 vw->cp = vw->fattrs.usCodePage;
553 if (!DosQueryCp(sizeof(cps), cps, &len)) {
554 for (x = 0; x < len / sizeof(ULONG); x++) {
555 if (cps[x] == (ULONG) vw->cp) {
556 hmq = WinQueryWindowULong(hwnd, QWL_HMQ);
557 WinSetCp(hmq, vw->cp);
558 break;
559 }
560 }
561 }
562 DosSetProcessCp(vw->cp);
563 WinSendMsg(hwndMLE, MLM_SETFONT, MPFROMP(&vw->fattrs), MPVOID);
564 }
565 if (Firsttime) {
566
567 ULONG size;
568
569 Firsttime = FALSE;
570 size = sizeof(ULONG);
571 PrfQueryProfileData(fmprof,
572 FM3Str,
573 "MLEBackgroundcolor",
574 &Colors[COLORS_BACKGROUND], &size);
575 size = sizeof(ULONG);
576 PrfQueryProfileData(fmprof,
577 FM3Str,
578 "MLEForegroundcolor",
579 &Colors[COLORS_FOREGROUND], &size);
580 }
581 WinSendMsg(hwndMLE,
582 MLM_SETBACKCOLOR,
583 MPFROMLONG(standardcolors[Colors[COLORS_BACKGROUND]]),
584 MPVOID);
585 WinSendMsg(hwndMLE,
586 MLM_SETTEXTCOLOR,
587 MPFROMLONG(standardcolors[Colors[COLORS_FOREGROUND]]),
588 MPVOID);
589 if (*vw->exportfilename)
590 if (MLEbackgroundload(hwnd,
591 UM_CONTAINER_FILLED,
592 hwndMLE, vw->exportfilename, vw->hex) != -1) {
593 vw->busy = TRUE;
594 WinEnableWindow(vw->hwndMenu, FALSE);
595 }
596 if (vw->busy || MLEgetreadonly(hwndMLE)) {
597 disable_menuitem(vw->hwndMenu, MLE_FILEMENU, TRUE);
598 disable_menuitem(vw->hwndMenu, MLE_CUTCLIP, TRUE);
599 disable_menuitem(vw->hwndMenu, MLE_PASTECLIP, TRUE);
600 disable_menuitem(vw->hwndMenu, MLE_CLEAR, TRUE);
601 disable_menuitem(vw->hwndMenu, MLE_CUTLINE, TRUE);
602 disable_menuitem(vw->hwndMenu, MLE_BLOCKMENU, TRUE);
603 }
604 return ret;
605 }
606 }
607 return 0;
608
609 case UM_CONTAINER_FILLED: /* file was loaded */
610 WinEnableWindow(vw->hwndMenu, TRUE);
611 vw->busy = FALSE;
612 if (vw->killme) {
613 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
614 return 0;
615 }
616 if (!MLEgetreadonly(hwndMLE)) {
617 disable_menuitem(vw->hwndMenu, MLE_FILEMENU, FALSE);
618 disable_menuitem(vw->hwndMenu, MLE_CUTCLIP, FALSE);
619 disable_menuitem(vw->hwndMenu, MLE_PASTECLIP, FALSE);
620 disable_menuitem(vw->hwndMenu, MLE_CLEAR, FALSE);
621 disable_menuitem(vw->hwndMenu, MLE_CUTLINE, FALSE);
622 disable_menuitem(vw->hwndMenu, MLE_BLOCKMENU, FALSE);
623 }
624 if (mp1) {
625 if (mp2) {
626 vw->ch = FALSE;
627 strcpy(vw->exportfilename, (CHAR *)mp2);
628 }
629 }
630 else {
631 vw->ch = FALSE;
632 *vw->exportfilename = 0;
633 }
634 WinSendMsg(hwnd, UM_SETUP2, MPVOID, MPVOID);
635 return 0;
636
637 case WM_SIZE:
638 WinSetWindowPos(hwndMLE,
639 HWND_TOP,
640 0,
641 0,
642 SHORT1FROMMP(mp2),
643 SHORT2FROMMP(mp2), SWP_MOVE | SWP_SIZE);
644 break;
645
646 case UM_SELECT:
647 case WM_SETFOCUS: /* sling focus to MLE */
648 if (mp2) {
649 if (hwndMain && fAutoView)
650 PostMsg(hwndMain, UM_LOADFILE, MPVOID, MPVOID);
651 WinSendMsg(hwnd, UM_SETUP2, MPVOID, MPVOID);
652 if (msg != UM_SELECT)
653 PostMsg(hwnd, UM_FOCUSME, MPVOID, MPVOID);
654 }
655 if (msg == WM_SETFOCUS)
656 break;
657 return 0;
658
659 case UM_FOCUSME:
660 WinSetFocus(HWND_DESKTOP, hwndMLE);
661 return 0;
662
663 case WM_ERASEBACKGROUND:
664 WinFillRect((HPS) mp1, (PRECTL) mp2, 0x00d0d0d0);
665 return 0;
666
667 case WM_PAINT:
668 {
669 RECTL rcl;
670 HPS hps;
671
672 hps = WinBeginPaint(hwnd, (HPS) 0, NULL);
673 WinQueryWindowRect(hwnd, &rcl);
674 WinFillRect(hps, &rcl, CLR_PALEGRAY);
675 WinEndPaint(hps);
676 }
677 break;
678
679 case UM_LOADFILE:
680 if ((CHAR *)mp1) {
681 // switch_to(mp1);
682 if (MLEbackgroundload(hwnd,
683 UM_CONTAINER_FILLED,
684 hwndMLE, (CHAR *)mp1, vw->hex) != -1) {
685 vw->busy = TRUE;
686 WinEnableWindow(vw->hwndMenu, FALSE);
687 }
688 }
689 return 0;
690
691 case WM_CONTROL:
692 switch (SHORT1FROMMP(mp1)) {
693 case MLE_MLE:
694 switch (SHORT2FROMMP(mp1)) {
695 case MLN_CHANGE:
696 if (!vw->ch)
697 vw->ch = TRUE;
698 break;
699 }
700 break;
701 }
702 return 0;
703
704 case WM_COMMAND:
705 if (vw->busy && SHORT1FROMMP(mp1) != MLE_QUIT) {
706 if (!fAlertBeepOff)
707 DosBeep(50, 100);
708 return 0;
709 }
710 switch (SHORT1FROMMP(mp1)) {
711 /*
712 case MLE_PREVIEW:
713 preview_text(hwndMLE);
714 break;
715 */
716 case MLE_VIEWFTP:
717 MLEinternet(hwndMLE, TRUE);
718 break;
719
720 case MLE_VIEWHTTP:
721 MLEinternet(hwndMLE, FALSE);
722 break;
723
724 case IDM_NEXTWINDOW:
725 WinSendMsg(hwndMLE,
726 WM_CHAR,
727 MPFROM2SHORT((KC_CHAR | KC_VIRTUALKEY),
728 MAKEUSHORT(1, 9)), MPFROM2SHORT(9, VK_TAB));
729 break;
730
731 case IDM_COLORPALETTE:
732 {
733 COLORS co;
734 LONG temp[COLORS_MAX];
735
736 memset(&co, 0, sizeof(co));
737 co.size = sizeof(co);
738 co.numcolors = COLORS_MAX;
739 co.colors = Colors;
740 co.descriptions = IDS_EDCOLORS1TEXT;
741 co.origs = temp;
742 co.prompt = IDS_EDCOLORSPROMPTTEXT;
743 memcpy(temp, Colors, sizeof(LONG) * COLORS_MAX);
744 if (WinDlgBox(HWND_DESKTOP,
745 hwnd,
746 ColorDlgProc,
747 FM3ModHandle, COLOR_FRAME, (PVOID) & co)) {
748 WinSendMsg(hwndMLE,
749 MLM_SETTEXTCOLOR,
750 MPFROMLONG(standardcolors[Colors[COLORS_FOREGROUND]]),
751 MPVOID);
752 PrfWriteProfileData(fmprof,
753 FM3Str,
754 "MLEForegroundcolor",
755 &Colors[COLORS_FOREGROUND], sizeof(LONG));
756 WinSendMsg(hwndMLE,
757 MLM_SETBACKCOLOR,
758 MPFROMLONG(standardcolors[Colors[COLORS_BACKGROUND]]),
759 MPVOID);
760 PrfWriteProfileData(fmprof,
761 FM3Str,
762 "MLEBackgroundcolor",
763 &Colors[COLORS_BACKGROUND], sizeof(LONG));
764 }
765 }
766 break;
767
768 case IDM_HELP:
769 if (hwndHelp)
770 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
771 MPFROM2SHORT(HELP_EDITOR, 0), MPFROMSHORT(HM_RESOURCEID));
772 break;
773
774 case MLE_CODEPAGE:
775 vw->cp = PickCodepage(hwnd);
776 vw->fattrs.usCodePage = (USHORT) vw->cp;
777 WinSendMsg(hwndMLE, MLM_SETFONT, MPFROMP(&vw->fattrs), MPVOID);
778 PrfWriteProfileData(fmprof,
779 FM3Str, "MLEFont", &vw->fattrs, sizeof(FATTRS));
780 break;
781
782 case MLE_NEWFILE:
783 if (!MLEgetreadonly(hwndMLE)) {
784 if (vw->ch) {
785
786 APIRET temp;
787
788 temp = saymsg(MB_YESNOCANCEL | MB_ICONEXCLAMATION,
789 hwnd, NullStr, GetPString(IDS_SAVECHANGESTEXT));
790 if (temp == MBID_CANCEL)
791 break;
792 if (temp == MBID_YES){
793 WinSendMsg(hwnd,
794 WM_COMMAND, MPFROM2SHORT(MLE_EXPORTFILE, 0), MPVOID);
795 if (vw->fileattrreadonly) {
796 temp = saymsg(MB_OKCANCEL | MB_ICONEXCLAMATION,
797 hwnd, NullStr, "File is readonly and has not been saved");
798 if (temp == MBID_CANCEL)
799 return 0;
800 }
801 }
802 }
803 MLEclearall(hwndMLE);
804 *vw->exportfilename = 0;
805 vw->ch = FALSE;
806 MLEsetchanged(hwndMLE, FALSE);
807 WinSendMsg(hwnd, UM_SETUP2, MPVOID, MPVOID);
808 }
809 break;
810
811 case MLE_TOGGLEREADONLY:
812 if (vw->busy || vw->hex == 1) {
813 if (!fAlertBeepOff)
814 DosBeep(50, 100);
815 }
816 else {
817 /* I dunno why I gotta reset the colors... */
818 BOOL ro;
819 LONG fColor, bColor;
820
821 fColor = (LONG) WinSendMsg(hwndMLE,
822 MLM_QUERYTEXTCOLOR, MPVOID, MPVOID);
823 bColor = (LONG) WinSendMsg(hwndMLE,
824 MLM_QUERYBACKCOLOR, MPVOID, MPVOID);
825 ro = MLEgetreadonly(hwndMLE);
826 ro = (ro) ? FALSE : TRUE;
827 MLEsetreadonly(hwndMLE, ro);
828 disable_menuitem(vw->hwndMenu, MLE_FILEMENU, ro);
829 disable_menuitem(vw->hwndMenu, MLE_CUTCLIP, ro);
830 disable_menuitem(vw->hwndMenu, MLE_PASTECLIP, ro);
831 disable_menuitem(vw->hwndMenu, MLE_CLEAR, ro);
832 disable_menuitem(vw->hwndMenu, MLE_CUTLINE, ro);
833 disable_menuitem(vw->hwndMenu, MLE_BLOCKMENU, ro);
834 WinSendMsg(hwndMLE, MLM_SETTEXTCOLOR, MPFROMLONG(fColor), MPVOID);
835 WinSendMsg(hwndMLE, MLM_SETBACKCOLOR, MPFROMLONG(bColor), MPVOID);
836 }
837 break;
838
839 case MLE_EXPORTAS:
840 vw->saveas = TRUE;
841 WinSendMsg(hwnd,
842 WM_COMMAND, MPFROM2SHORT(MLE_SETEXPORTFILE, 0), MPVOID);
843 break;
844
845 case IDM_RENAME:
846 case MLE_SETEXPORTFILE:
847 if (vw && !MLEgetreadonly(hwndMLE)) {
848
849 CHAR filename[1027];
850 ULONG ulResult;
851
852 strcpy(filename, vw->exportfilename);
853 if (export_filename(hwnd, filename, !vw->fileattrreadonly)) {
854 if (stricmp(filename, vw->exportfilename)) {
855 vw->ch = TRUE;
856 vw->fileattrreadonly = FALSE;
857 MLEsetchanged(hwndMLE, TRUE);
858 strcpy(vw->exportfilename, filename);
859 WinSendMsg(hwnd, UM_SETUP2, MPVOID, MPVOID);
860 if (vw->saveas) {
861 vw->saveas = FALSE;
862 WinSendMsg(hwnd,
863 WM_COMMAND, MPFROM2SHORT(MLE_EXPORTFILE, 0), MPVOID);
864 }
865 }
866 else if (vw->fileattrreadonly){
867 ulResult = saymsg(MB_OKCANCEL | MB_ICONQUESTION | MB_DEFBUTTON1, HWND_DESKTOP,
868 GetPString(IDS_WARNINGTEXT),
869 GetPString(IDS_EDITREADONLYFILETEXT2),
870 filename);
871 if (ulResult == MBID_OK){
872 WinSendMsg(hwnd,
873 WM_COMMAND, MPFROM2SHORT(MLE_SETEXPORTFILE, 0), MPVOID);
874 break;
875 }
876 else
877 vw->saveas = FALSE;
878 }
879 else if (vw->saveas) {
880 vw->saveas = FALSE;
881 WinSendMsg(hwnd,
882 WM_COMMAND, MPFROM2SHORT(MLE_EXPORTFILE, 0), MPVOID);
883 }
884 }
885 }
886 break;
887
888 case MLE_EXPORTFILE:
889 if (vw->fileattrreadonly){
890 WinSendMsg(hwnd,
891 WM_COMMAND, MPFROM2SHORT(MLE_SETEXPORTFILE, 0), MPVOID);
892 break;
893 }
894 if (!MLEgetreadonly(hwndMLE)) {
895
896 ULONG oldsize;
897
898 if (!*vw->exportfilename ||
899 strchr(vw->exportfilename, '?') ||
900 strchr(vw->exportfilename, '*')) {
901 WinSendMsg(hwnd,
902 WM_COMMAND, MPFROM2SHORT(MLE_SETEXPORTFILE, 0), MPVOID);
903 if (!*vw->exportfilename ||
904 strchr(vw->exportfilename, '?') ||
905 strchr(vw->exportfilename, '*'))
906 break;
907 }
908 {
909 /* zero file length instead of unlink (protects EAs from loss) */
910 FILE *fp;
911
912 fp = fopen(vw->exportfilename, "r+"); //, pszSrcFile, __LINE__);
913 if (fp) {
914 oldsize = filelength(fileno(fp));
915 DosSetFileSize(fileno(fp), 0);
916 fclose(fp);
917 }
918 }
919 //printf("%s %s %d\n ",vw->exportfilename, __FILE__, __LINE__); fflush(stdout);
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, "File is readonly and has not been saved");
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.