source: trunk/dll/viewer.c@ 1187

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

Ticket 187: Draft 2: Move remaining function declarations

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