source: trunk/dll/viewer.c@ 1402

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

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

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