source: trunk/dll/viewer.c@ 793

Last change on this file since 793 was 793, checked in by Gregg Young, 18 years ago

Move #pragma alloc_text to end for OpenWatcom compat

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