source: trunk/dll/viewer.c@ 1162

Last change on this file since 1162 was 1162, checked in by John Small, 17 years ago

Ticket 187: Draft 1: Functions only

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