| [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 | 
 | 
|---|
 | 36 | static 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] | 45 | static LONG Colors[COLORS_MAX] = { COLR_BLACK, COLR_PALEGRAY };
 | 
|---|
 | 46 | static BOOL Firsttime = TRUE;
 | 
|---|
| [2] | 47 | 
 | 
|---|
| [551] | 48 | HWND 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] | 152 | MRESULT 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] | 287 | MRESULT 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)
 | 
|---|