source: trunk/dll/viewer.c@ 766

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

format cleanup

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