source: trunk/dll/viewer.c@ 1505

Last change on this file since 1505 was 1505, checked in by Gregg Young, 15 years ago

Remove unnecessary type casts; minor formating cleanup.

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