source: trunk/dll/viewer.c@ 1214

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

Ticket 187: Move data declarations/definitions out of fm3dll.h

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