| [51] | 1 | 
 | 
|---|
 | 2 | /***********************************************************************
 | 
|---|
 | 3 | 
 | 
|---|
 | 4 |   $Id: saveclip.c 574 2007-03-23 22:37:07Z gyoung $
 | 
|---|
 | 5 | 
 | 
|---|
 | 6 |   Save file list to clipboard
 | 
|---|
 | 7 | 
 | 
|---|
 | 8 |   Copyright (c) 1993-98 M. Kimes
 | 
|---|
| [574] | 9 |   Copyright (c) 2005, 2007 Steven H. Levine
 | 
|---|
| [51] | 10 | 
 | 
|---|
| [159] | 11 |   12 Feb 03 SHL SaveListDlgProc: standardize EA math
 | 
|---|
 | 12 |   01 Aug 04 SHL Rework lstrip/rstrip usage
 | 
|---|
 | 13 |   01 Aug 04 SHL Rework fixup usage
 | 
|---|
 | 14 |   24 May 05 SHL Rework for CNRITEM.szSubject
 | 
|---|
| [352] | 15 |   17 Jul 06 SHL Use Runtime_Error
 | 
|---|
| [404] | 16 |   29 Jul 06 SHL Use xfgets
 | 
|---|
| [574] | 17 |   22 Mar 07 GKY Use QWL_USER
 | 
|---|
| [51] | 18 | 
 | 
|---|
 | 19 | ***********************************************************************/
 | 
|---|
 | 20 | 
 | 
|---|
| [2] | 21 | #define INCL_DOS
 | 
|---|
 | 22 | #define INCL_WIN
 | 
|---|
| [352] | 23 | #include <os2.h>
 | 
|---|
| [2] | 24 | 
 | 
|---|
 | 25 | #include <stdarg.h>
 | 
|---|
 | 26 | #include <stdio.h>
 | 
|---|
 | 27 | #include <stdlib.h>
 | 
|---|
 | 28 | #include <string.h>
 | 
|---|
 | 29 | #include <share.h>
 | 
|---|
| [352] | 30 | 
 | 
|---|
| [2] | 31 | #include "fm3dll.h"
 | 
|---|
 | 32 | #include "fm3dlg.h"
 | 
|---|
 | 33 | #include "fm3str.h"
 | 
|---|
 | 34 | 
 | 
|---|
| [352] | 35 | static PSZ pszSrcFile = __FILE__;
 | 
|---|
 | 36 | 
 | 
|---|
| [2] | 37 | #pragma alloc_text(FMCLIPBOARDIN,SaveToClip,SaveToClipHab)
 | 
|---|
 | 38 | #pragma alloc_text(FMCLIPBOARDOUT,ListToClipboard,ListToClipboardHab)
 | 
|---|
 | 39 | #pragma alloc_text(FMCLIPBOARDOUT,ListFromClipboard,ListFromClipboardHab)
 | 
|---|
 | 40 | 
 | 
|---|
| [551] | 41 | BOOL SaveToClip(HWND hwnd, CHAR * text, BOOL append)
 | 
|---|
| [352] | 42 | {
 | 
|---|
| [551] | 43 |   HAB hab = WinQueryAnchorBlock(hwnd);
 | 
|---|
| [2] | 44 | 
 | 
|---|
| [551] | 45 |   return SaveToClipHab(hab, text, append);
 | 
|---|
| [2] | 46 | }
 | 
|---|
 | 47 | 
 | 
|---|
| [551] | 48 | BOOL SaveToClipHab(HAB hab, CHAR * text, BOOL append)
 | 
|---|
| [352] | 49 | {
 | 
|---|
| [551] | 50 |   CHAR *clip = NULL, *hold = NULL, *p;
 | 
|---|
 | 51 |   ULONG len;
 | 
|---|
 | 52 |   BOOL ret = FALSE;
 | 
|---|
| [2] | 53 | 
 | 
|---|
| [551] | 54 |   if (text) {
 | 
|---|
| [2] | 55 |     len = strlen(text);
 | 
|---|
 | 56 |     p = text;
 | 
|---|
| [551] | 57 |     while (*p) {
 | 
|---|
 | 58 |       if (*p == '\n' && (p == text || *(p - 1) != '\r'))
 | 
|---|
 | 59 |         len++;
 | 
|---|
| [2] | 60 |       p++;
 | 
|---|
 | 61 |     }
 | 
|---|
| [551] | 62 |     if (len) {
 | 
|---|
 | 63 |       if (WinOpenClipbrd(hab)) {
 | 
|---|
 | 64 |         if (append)
 | 
|---|
 | 65 |           clip = (CHAR *) WinQueryClipbrdData(hab, CF_TEXT);
 | 
|---|
 | 66 |         if (clip)
 | 
|---|
 | 67 |           len += strlen(clip) + 1L;
 | 
|---|
 | 68 |         if (!DosAllocSharedMem((PPVOID) & hold, (PSZ) NULL, len, PAG_COMMIT |
 | 
|---|
 | 69 |                                OBJ_GIVEABLE | PAG_READ | PAG_WRITE)) {
 | 
|---|
 | 70 |           *hold = 0;
 | 
|---|
 | 71 |           if (clip)
 | 
|---|
 | 72 |             strcpy(hold, clip);
 | 
|---|
 | 73 |           p = hold + strlen(hold);
 | 
|---|
 | 74 |           strcpy(p, text);
 | 
|---|
 | 75 |           while (*p) {
 | 
|---|
 | 76 |             if (*p == '\n' && (p == hold || *(p - 1) != '\r')) {
 | 
|---|
 | 77 |               memmove(p + 1, p, strlen(p) + 1);
 | 
|---|
 | 78 |               *p = '\r';
 | 
|---|
 | 79 |             }
 | 
|---|
 | 80 |             p++;
 | 
|---|
 | 81 |           }
 | 
|---|
 | 82 |           WinEmptyClipbrd(hab);
 | 
|---|
 | 83 |           if (!WinSetClipbrdData(hab, (ULONG) hold, CF_TEXT, CFI_POINTER))
 | 
|---|
 | 84 |             DosFreeMem(hold);
 | 
|---|
 | 85 |           else
 | 
|---|
 | 86 |             ret = TRUE;
 | 
|---|
 | 87 |         }
 | 
|---|
 | 88 |         WinCloseClipbrd(hab);
 | 
|---|
| [2] | 89 |       }
 | 
|---|
 | 90 |     }
 | 
|---|
 | 91 |   }
 | 
|---|
 | 92 |   return ret;
 | 
|---|
 | 93 | }
 | 
|---|
 | 94 | 
 | 
|---|
| [551] | 95 | VOID ListToClipboard(HWND hwnd, CHAR ** list, BOOL append)
 | 
|---|
| [352] | 96 | {
 | 
|---|
| [551] | 97 |   HAB hab = WinQueryAnchorBlock(hwnd);
 | 
|---|
| [2] | 98 | 
 | 
|---|
| [551] | 99 |   ListToClipboardHab(hab, list, append);
 | 
|---|
| [2] | 100 | }
 | 
|---|
 | 101 | 
 | 
|---|
| [551] | 102 | VOID ListToClipboardHab(HAB hab, CHAR ** list, BOOL append)
 | 
|---|
| [352] | 103 | {
 | 
|---|
| [551] | 104 |   CHAR *text = NULL, **clip = NULL;
 | 
|---|
 | 105 |   INT x;
 | 
|---|
| [2] | 106 |   ULONG len = 0L;
 | 
|---|
 | 107 | 
 | 
|---|
| [551] | 108 |   if (list && list[0]) {
 | 
|---|
 | 109 |     for (x = 0; list[x]; x++)
 | 
|---|
| [2] | 110 |       len += strlen(list[x]) + 2;
 | 
|---|
| [551] | 111 |     if (len)
 | 
|---|
| [2] | 112 |       len++;
 | 
|---|
| [551] | 113 |     if (len) {
 | 
|---|
 | 114 |       if (append)
 | 
|---|
 | 115 |         clip = ListFromClipboardHab(hab);
 | 
|---|
 | 116 |       if (clip && clip[0]) {
 | 
|---|
 | 117 |         for (x = 0; clip[x]; x++)
 | 
|---|
 | 118 |           len += strlen(clip[x]) + 2;
 | 
|---|
 | 119 |         len++;
 | 
|---|
| [2] | 120 |       }
 | 
|---|
| [551] | 121 |       if (WinOpenClipbrd(hab)) {
 | 
|---|
 | 122 |         if (!DosAllocSharedMem((PPVOID) & text, (PSZ) NULL, len, PAG_COMMIT |
 | 
|---|
 | 123 |                                OBJ_GIVEABLE | PAG_READ | PAG_WRITE)) {
 | 
|---|
 | 124 |           *text = 0;
 | 
|---|
 | 125 |           if (clip && clip[0]) {
 | 
|---|
 | 126 |             for (x = 0; clip[x]; x++) {
 | 
|---|
 | 127 |               strcat(text, clip[x]);
 | 
|---|
 | 128 |               strcat(text, "\r\n");
 | 
|---|
 | 129 |             }
 | 
|---|
 | 130 |           }
 | 
|---|
 | 131 |           for (x = 0; list[x]; x++) {
 | 
|---|
 | 132 |             strcat(text, list[x]);
 | 
|---|
 | 133 |             strcat(text, "\r\n");
 | 
|---|
 | 134 |           }
 | 
|---|
 | 135 |           WinEmptyClipbrd(hab);
 | 
|---|
 | 136 |           if (!WinSetClipbrdData(hab, (ULONG) text, CF_TEXT, CFI_POINTER))
 | 
|---|
 | 137 |             DosFreeMem(text);
 | 
|---|
 | 138 |         }
 | 
|---|
 | 139 |         WinCloseClipbrd(hab);
 | 
|---|
| [2] | 140 |       }
 | 
|---|
| [551] | 141 |       if (clip)
 | 
|---|
 | 142 |         FreeList(clip);
 | 
|---|
| [2] | 143 |     }
 | 
|---|
 | 144 |   }
 | 
|---|
 | 145 | }
 | 
|---|
 | 146 | 
 | 
|---|
| [551] | 147 | CHAR **ListFromClipboard(HWND hwnd)
 | 
|---|
| [352] | 148 | {
 | 
|---|
| [551] | 149 |   HAB hab = WinQueryAnchorBlock(hwnd);
 | 
|---|
| [2] | 150 | 
 | 
|---|
 | 151 |   return ListFromClipboardHab(hab);
 | 
|---|
 | 152 | }
 | 
|---|
 | 153 | 
 | 
|---|
| [551] | 154 | CHAR **ListFromClipboardHab(HAB hab)
 | 
|---|
| [352] | 155 | {
 | 
|---|
| [551] | 156 |   CHAR *p, *pp, *text = NULL, **list = NULL;
 | 
|---|
 | 157 |   INT numfiles = 0, numalloced = 0;
 | 
|---|
| [2] | 158 | 
 | 
|---|
| [551] | 159 |   if (WinOpenClipbrd(hab)) {
 | 
|---|
 | 160 |     p = (CHAR *) WinQueryClipbrdData(hab, CF_TEXT);
 | 
|---|
 | 161 |     if (p && *p)
 | 
|---|
 | 162 |       text = xstrdup(p, pszSrcFile, __LINE__);
 | 
|---|
| [2] | 163 |     WinCloseClipbrd(hab);
 | 
|---|
| [352] | 164 |     if (text) {
 | 
|---|
| [115] | 165 |       bstrip(text);
 | 
|---|
 | 166 |       pp = text;
 | 
|---|
| [551] | 167 |       p = strchr(pp, '\r');
 | 
|---|
 | 168 |       if (!p)
 | 
|---|
 | 169 |         p = strchr(pp, '\n');
 | 
|---|
 | 170 |       while (p && *p) {
 | 
|---|
 | 171 |         *p = 0;
 | 
|---|
 | 172 |         p++;
 | 
|---|
 | 173 |         while (*p == '\r' || *p == '\n' || *p == ' ' || *p == '\t')
 | 
|---|
 | 174 |           p++;
 | 
|---|
 | 175 |         rstrip(pp);
 | 
|---|
 | 176 |         if (*pp) {
 | 
|---|
 | 177 |           if (AddToList(pp, &list, &numfiles, &numalloced))
 | 
|---|
 | 178 |             break;
 | 
|---|
 | 179 |         }
 | 
|---|
 | 180 |         pp = p;
 | 
|---|
 | 181 |         p = strchr(pp, '\r');
 | 
|---|
 | 182 |         if (!p)
 | 
|---|
 | 183 |           p = strchr(pp, '\n');
 | 
|---|
| [2] | 184 |       }
 | 
|---|
 | 185 |       free(text);
 | 
|---|
 | 186 |     }
 | 
|---|
 | 187 |   }
 | 
|---|
 | 188 |   return list;
 | 
|---|
 | 189 | }
 | 
|---|
 | 190 | 
 | 
|---|
 | 191 | #pragma alloc_text(SAVELIST,SaveListDlgProc,SaveAllListDlgProc)
 | 
|---|
 | 192 | 
 | 
|---|
| [551] | 193 | MRESULT EXPENTRY SaveListDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
 | 
|---|
| [51] | 194 | {
 | 
|---|
| [551] | 195 |   HWND hwndCnr;
 | 
|---|
 | 196 |   CHAR savename[CCHMAXPATH] = "", pattern[81];
 | 
|---|
| [2] | 197 | 
 | 
|---|
| [551] | 198 |   switch (msg) {
 | 
|---|
 | 199 |   case WM_INITDLG:
 | 
|---|
 | 200 |     if (!mp2) {
 | 
|---|
 | 201 |       Runtime_Error(pszSrcFile, __LINE__, "no data");
 | 
|---|
 | 202 |       WinDismissDlg(hwnd, 0);
 | 
|---|
 | 203 |     }
 | 
|---|
 | 204 |     else {
 | 
|---|
| [574] | 205 |       WinSetWindowPtr(hwnd, QWL_USER, mp2);
 | 
|---|
| [551] | 206 |       hwndCnr = *(HWND *) mp2;
 | 
|---|
 | 207 |       WinSendDlgItemMsg(hwnd,
 | 
|---|
 | 208 |                         SAV_FILENAME,
 | 
|---|
 | 209 |                         EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
 | 
|---|
 | 210 |       WinSendDlgItemMsg(hwnd,
 | 
|---|
 | 211 |                         SAV_PATTERN,
 | 
|---|
 | 212 |                         EM_SETTEXTLIMIT, MPFROM2SHORT(80, 0), MPVOID);
 | 
|---|
 | 213 |       *savename = *pattern = 0;
 | 
|---|
 | 214 |       {
 | 
|---|
 | 215 |         ULONG size;
 | 
|---|
 | 216 | 
 | 
|---|
 | 217 |         size = CCHMAXPATH;
 | 
|---|
 | 218 |         PrfQueryProfileData(fmprof,
 | 
|---|
 | 219 |                             appname, "SaveToListName", savename, &size);
 | 
|---|
 | 220 |         size = 81;
 | 
|---|
 | 221 |         PrfQueryProfileData(fmprof,
 | 
|---|
 | 222 |                             appname, "SaveToListPattern", pattern, &size);
 | 
|---|
| [2] | 223 |       }
 | 
|---|
| [551] | 224 |       WinSetDlgItemText(hwnd, SAV_FILENAME, savename);
 | 
|---|
 | 225 |       if (!*pattern)
 | 
|---|
 | 226 |         strcpy(pattern, "%F  %s");
 | 
|---|
 | 227 |       {
 | 
|---|
 | 228 |         CHAR temp[162];
 | 
|---|
| [2] | 229 | 
 | 
|---|
| [551] | 230 |         fixup(pattern, temp, sizeof(temp), strlen(pattern));
 | 
|---|
 | 231 |         WinSetDlgItemText(hwnd, SAV_PATTERN, temp);
 | 
|---|
 | 232 |       }
 | 
|---|
 | 233 |       {
 | 
|---|
 | 234 |         FILE *fp;
 | 
|---|
 | 235 |         CHAR s[CCHMAXPATH + 14];
 | 
|---|
| [2] | 236 | 
 | 
|---|
| [551] | 237 |         save_dir2(s);
 | 
|---|
 | 238 |         if (s[strlen(s) - 1] != '\\')
 | 
|---|
 | 239 |           strcat(s, "\\");
 | 
|---|
 | 240 |         strcat(s, "PATTERNS.DAT");
 | 
|---|
 | 241 |         fp = _fsopen(s, "r", SH_DENYWR);
 | 
|---|
 | 242 |         if (fp) {
 | 
|---|
 | 243 |           while (xfgets(s, 81, fp, pszSrcFile, __LINE__)) {
 | 
|---|
 | 244 |             stripcr(s);
 | 
|---|
 | 245 |             if (*s && *s != ';')
 | 
|---|
 | 246 |               WinSendMsg(WinWindowFromID(hwnd, SAV_LISTBOX), LM_INSERTITEM,
 | 
|---|
 | 247 |                          MPFROM2SHORT(LIT_SORTASCENDING, 0), MPFROMP(s));
 | 
|---|
 | 248 |           }
 | 
|---|
 | 249 |           fclose(fp);
 | 
|---|
 | 250 |         }
 | 
|---|
 | 251 |         if (!WinSendDlgItemMsg(hwnd, SAV_LISTBOX, LM_QUERYITEMCOUNT,
 | 
|---|
 | 252 |                                MPVOID, MPVOID))
 | 
|---|
 | 253 |           WinEnableWindow(WinWindowFromID(hwnd, SAV_LISTBOX), FALSE);
 | 
|---|
| [2] | 254 |       }
 | 
|---|
| [551] | 255 |     }
 | 
|---|
 | 256 |     break;
 | 
|---|
| [2] | 257 | 
 | 
|---|
| [551] | 258 |   case UM_SETDIR:
 | 
|---|
 | 259 |     {
 | 
|---|
 | 260 |       SHORT sSelect, sMax;
 | 
|---|
 | 261 |       CHAR szBuffer[CCHMAXPATH + 14];
 | 
|---|
 | 262 |       FILE *fp;
 | 
|---|
| [2] | 263 | 
 | 
|---|
| [551] | 264 |       sMax = (SHORT) WinSendDlgItemMsg(hwnd, SAV_LISTBOX,
 | 
|---|
 | 265 |                                        LM_QUERYITEMCOUNT, MPVOID, MPVOID);
 | 
|---|
 | 266 |       if (sMax > 0) {
 | 
|---|
 | 267 |         save_dir2(szBuffer);
 | 
|---|
 | 268 |         if (szBuffer[strlen(szBuffer) - 1] != '\\')
 | 
|---|
 | 269 |           strcat(szBuffer, "\\");
 | 
|---|
 | 270 |         strcat(szBuffer, "PATTERNS.DAT");
 | 
|---|
 | 271 |         fp = xfopen(szBuffer, "w", pszSrcFile, __LINE__);
 | 
|---|
 | 272 |         if (fp) {
 | 
|---|
 | 273 |           fputs(GetPString(IDS_LISTPATTERNTEXT), fp);
 | 
|---|
 | 274 |           for (sSelect = 0; sSelect < sMax; sSelect++) {
 | 
|---|
 | 275 |             *szBuffer = 0;
 | 
|---|
 | 276 |             WinSendDlgItemMsg(hwnd,
 | 
|---|
 | 277 |                               SAV_LISTBOX,
 | 
|---|
 | 278 |                               LM_QUERYITEMTEXT,
 | 
|---|
 | 279 |                               MPFROM2SHORT(sSelect, 81), MPFROMP(szBuffer));
 | 
|---|
 | 280 |             if (*szBuffer)
 | 
|---|
 | 281 |               fprintf(fp, "%s\n", szBuffer);
 | 
|---|
 | 282 |           }
 | 
|---|
 | 283 |           fclose(fp);
 | 
|---|
 | 284 |         }
 | 
|---|
| [2] | 285 |       }
 | 
|---|
| [551] | 286 |       else if (!sMax) {
 | 
|---|
 | 287 |         save_dir2(szBuffer);
 | 
|---|
 | 288 |         if (szBuffer[strlen(szBuffer) - 1] != '\\')
 | 
|---|
 | 289 |           strcat(szBuffer, "\\");
 | 
|---|
 | 290 |         strcat(szBuffer, "PATTERNS.DAT");
 | 
|---|
 | 291 |         unlinkf("%s", szBuffer);
 | 
|---|
 | 292 |       }
 | 
|---|
 | 293 |     }
 | 
|---|
 | 294 |     return 0;
 | 
|---|
| [2] | 295 | 
 | 
|---|
| [551] | 296 |   case WM_CONTROL:
 | 
|---|
 | 297 |     if (SHORT1FROMMP(mp1) == SAV_LISTBOX) {
 | 
|---|
| [2] | 298 | 
 | 
|---|
| [551] | 299 |       SHORT sSelect;
 | 
|---|
 | 300 |       CHAR szBuffer[81];
 | 
|---|
| [2] | 301 | 
 | 
|---|
| [551] | 302 |       switch (SHORT2FROMMP(mp1)) {
 | 
|---|
 | 303 |       case LN_SELECT:
 | 
|---|
 | 304 |         sSelect = (SHORT) WinSendDlgItemMsg(hwnd, SAV_LISTBOX,
 | 
|---|
 | 305 |                                             LM_QUERYSELECTION,
 | 
|---|
 | 306 |                                             MPFROMSHORT(LIT_FIRST), MPVOID);
 | 
|---|
 | 307 |         if (sSelect >= 0) {
 | 
|---|
 | 308 |           *szBuffer = 0;
 | 
|---|
 | 309 |           WinSendDlgItemMsg(hwnd, SAV_LISTBOX, LM_QUERYITEMTEXT,
 | 
|---|
 | 310 |                             MPFROM2SHORT(sSelect, 81), MPFROMP(szBuffer));
 | 
|---|
 | 311 |           if (*szBuffer)
 | 
|---|
 | 312 |             WinSetDlgItemText(hwnd, SAV_PATTERN, szBuffer);
 | 
|---|
 | 313 |         }
 | 
|---|
 | 314 |         break;
 | 
|---|
| [2] | 315 | 
 | 
|---|
| [551] | 316 |       case LN_ENTER:
 | 
|---|
 | 317 |         PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(DID_OK, 0), MPVOID);
 | 
|---|
 | 318 |         break;
 | 
|---|
| [2] | 319 |       }
 | 
|---|
| [551] | 320 |     }
 | 
|---|
 | 321 |     return 0;
 | 
|---|
| [2] | 322 | 
 | 
|---|
| [551] | 323 |   case WM_COMMAND:
 | 
|---|
 | 324 |     hwndCnr = *(HWND *) INSTDATA(hwnd);
 | 
|---|
 | 325 |     switch (SHORT1FROMMP(mp1)) {
 | 
|---|
 | 326 |     case DID_CANCEL:
 | 
|---|
 | 327 |       WinDismissDlg(hwnd, 0);
 | 
|---|
 | 328 |       break;
 | 
|---|
| [2] | 329 | 
 | 
|---|
| [551] | 330 |     case IDM_HELP:
 | 
|---|
 | 331 |       if (hwndHelp)
 | 
|---|
 | 332 |         WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
 | 
|---|
 | 333 |                    MPFROM2SHORT(HELP_SAVETOLIST, 0),
 | 
|---|
 | 334 |                    MPFROMSHORT(HM_RESOURCEID));
 | 
|---|
 | 335 |       break;
 | 
|---|
| [2] | 336 | 
 | 
|---|
| [551] | 337 |     case SAV_FIND:
 | 
|---|
 | 338 |       {
 | 
|---|
 | 339 |         *savename = 0;
 | 
|---|
 | 340 |         WinQueryDlgItemText(hwnd, SAV_FILENAME, CCHMAXPATH, savename);
 | 
|---|
 | 341 |         if (!*savename)
 | 
|---|
 | 342 |           strcpy(savename, "*.LST");
 | 
|---|
 | 343 |         if (export_filename(hwnd, savename, 1) && *savename) {
 | 
|---|
 | 344 |           if (!strchr(savename, '.'))
 | 
|---|
 | 345 |             strcat(savename, ".LST");
 | 
|---|
 | 346 |           WinSetDlgItemText(hwnd, SAV_FILENAME, savename);
 | 
|---|
 | 347 |         }
 | 
|---|
 | 348 |       }
 | 
|---|
 | 349 |       break;
 | 
|---|
| [2] | 350 | 
 | 
|---|
| [551] | 351 |     case SAV_ADD:
 | 
|---|
 | 352 |     case SAV_DEL:
 | 
|---|
 | 353 |     case DID_OK:
 | 
|---|
 | 354 |       WinEnableWindow(hwnd, FALSE);
 | 
|---|
 | 355 |       {
 | 
|---|
 | 356 |         PCNRITEM pci;
 | 
|---|
 | 357 |         FILE *fp;
 | 
|---|
 | 358 |         CHAR *p, *pp, temp;
 | 
|---|
 | 359 |         INT attribute = CRA_CURSORED;
 | 
|---|
 | 360 |         SHORT sSelect;
 | 
|---|
| [2] | 361 | 
 | 
|---|
| [551] | 362 |         *pattern = 0;
 | 
|---|
 | 363 |         WinQueryDlgItemText(hwnd, SAV_PATTERN, 80, pattern);
 | 
|---|
 | 364 |         if (!*pattern) {
 | 
|---|
 | 365 |           WinEnableWindow(hwnd, TRUE);
 | 
|---|
 | 366 |           DosBeep(150, 100);
 | 
|---|
 | 367 |           break;
 | 
|---|
 | 368 |         }
 | 
|---|
 | 369 |         {
 | 
|---|
 | 370 |           switch (SHORT1FROMMP(mp1)) {
 | 
|---|
 | 371 |           case SAV_ADD:
 | 
|---|
 | 372 |             sSelect = (SHORT) WinSendDlgItemMsg(hwnd, SAV_LISTBOX,
 | 
|---|
 | 373 |                                                 LM_SEARCHSTRING,
 | 
|---|
 | 374 |                                                 MPFROM2SHORT(0, LIT_FIRST),
 | 
|---|
 | 375 |                                                 MPFROMP(pattern));
 | 
|---|
 | 376 |             if (sSelect < 0) {
 | 
|---|
 | 377 |               WinSendDlgItemMsg(hwnd, SAV_LISTBOX, LM_INSERTITEM,
 | 
|---|
 | 378 |                                 MPFROM2SHORT(LIT_SORTASCENDING, 0),
 | 
|---|
 | 379 |                                 MPFROMP(pattern));
 | 
|---|
 | 380 |               WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
 | 
|---|
 | 381 |             }
 | 
|---|
 | 382 |             WinEnableWindow(hwnd, TRUE);
 | 
|---|
 | 383 |             return 0;
 | 
|---|
| [2] | 384 | 
 | 
|---|
| [551] | 385 |           case SAV_DEL:
 | 
|---|
 | 386 |             sSelect = (SHORT) WinSendDlgItemMsg(hwnd, SAV_LISTBOX,
 | 
|---|
 | 387 |                                                 LM_QUERYSELECTION,
 | 
|---|
 | 388 |                                                 MPFROM2SHORT(LIT_FIRST, 0),
 | 
|---|
 | 389 |                                                 MPVOID);
 | 
|---|
 | 390 |             if (sSelect >= 0) {
 | 
|---|
 | 391 |               WinSendDlgItemMsg(hwnd, SAV_LISTBOX, LM_DELETEITEM,
 | 
|---|
 | 392 |                                 MPFROM2SHORT(sSelect, 0), MPVOID);
 | 
|---|
 | 393 |               WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
 | 
|---|
 | 394 |             }
 | 
|---|
 | 395 |             WinEnableWindow(hwnd, TRUE);
 | 
|---|
 | 396 |             return 0;
 | 
|---|
 | 397 |           }
 | 
|---|
 | 398 |         }
 | 
|---|
 | 399 |         literal(pattern);
 | 
|---|
 | 400 |         if (!*pattern) {
 | 
|---|
 | 401 |           WinEnableWindow(hwnd, TRUE);
 | 
|---|
 | 402 |           DosBeep(250, 100);
 | 
|---|
 | 403 |           break;
 | 
|---|
 | 404 |         }
 | 
|---|
 | 405 |         PrfWriteProfileString(fmprof, appname, "SaveToListPattern", pattern);
 | 
|---|
 | 406 |         *savename = 0;
 | 
|---|
 | 407 |         WinQueryDlgItemText(hwnd, SAV_FILENAME, CCHMAXPATH, savename);
 | 
|---|
 | 408 |         bstrip(savename);
 | 
|---|
 | 409 |         if (!*savename) {
 | 
|---|
 | 410 |           WinEnableWindow(hwnd, TRUE);
 | 
|---|
 | 411 |           DosBeep(100, 100);
 | 
|---|
 | 412 |           break;
 | 
|---|
 | 413 |         }
 | 
|---|
 | 414 |         if (stricmp(savename, "PRN") &&
 | 
|---|
 | 415 |             strnicmp(savename, "\\DEV\\LPT", 8) && !strchr(savename, '.'))
 | 
|---|
 | 416 |           strcat(savename, ".LST");
 | 
|---|
 | 417 |         PrfWriteProfileString(fmprof, appname, "SaveToListName", savename);
 | 
|---|
 | 418 |         pci = (PCNRITEM) WinSendMsg(hwndCnr,
 | 
|---|
 | 419 |                                     CM_QUERYRECORDEMPHASIS,
 | 
|---|
 | 420 |                                     MPFROMLONG(CMA_FIRST),
 | 
|---|
 | 421 |                                     MPFROMSHORT(attribute));
 | 
|---|
 | 422 |         if (pci && (INT) pci != -1) {
 | 
|---|
 | 423 |           if (pci->rc.flRecordAttr & CRA_SELECTED) {
 | 
|---|
 | 424 |             attribute = CRA_SELECTED;
 | 
|---|
 | 425 |             pci = WinSendMsg(hwndCnr, CM_QUERYRECORDEMPHASIS,
 | 
|---|
 | 426 |                              MPFROMLONG(CMA_FIRST), MPFROMSHORT(attribute));
 | 
|---|
 | 427 |           }
 | 
|---|
 | 428 |         }
 | 
|---|
 | 429 |         if (!pci || (INT) pci == -1)
 | 
|---|
 | 430 |           Runtime_Error(pszSrcFile, __LINE__, "no data");
 | 
|---|
 | 431 |         else {
 | 
|---|
 | 432 |           fp = _fsopen(savename, "r+", SH_DENYWR);
 | 
|---|
 | 433 |           if (!fp)
 | 
|---|
 | 434 |             Runtime_Error(pszSrcFile, __LINE__, "_fsopen");
 | 
|---|
 | 435 |           else {
 | 
|---|
 | 436 |             fseek(fp, 0L, SEEK_SET);
 | 
|---|
 | 437 |             if (WinQueryButtonCheckstate(hwnd, SAV_APPEND) == 0)
 | 
|---|
 | 438 |               DosSetFileSize((HFILE) fileno(fp), 0L);
 | 
|---|
 | 439 |             else
 | 
|---|
 | 440 |               fseek(fp, 0L, SEEK_END);
 | 
|---|
 | 441 |             while (pci && (INT) pci != -1) {
 | 
|---|
 | 442 |               if (!(pci->rc.flRecordAttr & CRA_FILTERED)) {
 | 
|---|
 | 443 |                 p = pattern;
 | 
|---|
 | 444 |                 while (*p) {
 | 
|---|
 | 445 |                   if (*p == '%') {
 | 
|---|
 | 446 |                     p++;
 | 
|---|
 | 447 |                     switch (*p) {
 | 
|---|
 | 448 |                     case 's':
 | 
|---|
 | 449 |                       fputs(pci->szSubject, fp);
 | 
|---|
 | 450 |                       break;
 | 
|---|
 | 451 |                     case 'S':
 | 
|---|
 | 452 |                       fprintf(fp, "%-40s", pci->szSubject);
 | 
|---|
 | 453 |                       break;
 | 
|---|
 | 454 |                     case 'Z':
 | 
|---|
 | 455 |                       fprintf(fp, "%-13lu", pci->cbFile);
 | 
|---|
 | 456 |                       break;
 | 
|---|
 | 457 |                     case 'z':
 | 
|---|
 | 458 |                       fprintf(fp, "%lu", pci->cbFile);
 | 
|---|
 | 459 |                       break;
 | 
|---|
 | 460 |                     case 'E':
 | 
|---|
 | 461 |                       fprintf(fp, "%-5u", pci->easize);
 | 
|---|
 | 462 |                       break;
 | 
|---|
 | 463 |                     case 'e':
 | 
|---|
 | 464 |                       fprintf(fp, "%u", pci->easize);
 | 
|---|
 | 465 |                       break;
 | 
|---|
 | 466 |                     case 'd':
 | 
|---|
 | 467 |                     case 'D':
 | 
|---|
 | 468 |                       fprintf(fp,
 | 
|---|
 | 469 |                               "%04u/%02u/%02u",
 | 
|---|
 | 470 |                               pci->date.year, pci->date.month, pci->date.day);
 | 
|---|
 | 471 |                       break;
 | 
|---|
 | 472 |                     case 't':
 | 
|---|
 | 473 |                     case 'T':
 | 
|---|
 | 474 |                       fprintf(fp,
 | 
|---|
 | 475 |                               "%02u:%02u:%02u",
 | 
|---|
 | 476 |                               pci->time.hours,
 | 
|---|
 | 477 |                               pci->time.minutes, pci->time.seconds);
 | 
|---|
 | 478 |                       break;
 | 
|---|
 | 479 |                     case 'l':
 | 
|---|
 | 480 |                       fputs(pci->szLongname, fp);
 | 
|---|
 | 481 |                       break;
 | 
|---|
 | 482 |                     case 'L':
 | 
|---|
 | 483 |                       fprintf(fp, "%-40s", pci->szLongname);
 | 
|---|
 | 484 |                       break;
 | 
|---|
 | 485 |                     case 'F':
 | 
|---|
 | 486 |                     case 'f':
 | 
|---|
 | 487 |                       if (IsRoot(pci->szFileName))
 | 
|---|
 | 488 |                         pp = pci->szFileName;
 | 
|---|
 | 489 |                       else {
 | 
|---|
 | 490 |                         pp = strrchr(pci->szFileName, '\\');
 | 
|---|
 | 491 |                         if (pp)
 | 
|---|
 | 492 |                           pp++;
 | 
|---|
 | 493 |                         else
 | 
|---|
 | 494 |                           pp = pci->szFileName;
 | 
|---|
 | 495 |                       }
 | 
|---|
 | 496 |                       if (*p == 'F')
 | 
|---|
 | 497 |                         fprintf(fp, "%-13s", pp);
 | 
|---|
 | 498 |                       else
 | 
|---|
 | 499 |                         fputs(pp, fp);
 | 
|---|
 | 500 |                       break;
 | 
|---|
 | 501 |                     case 'p':
 | 
|---|
 | 502 |                       fputs(pci->szFileName, fp);
 | 
|---|
 | 503 |                       break;
 | 
|---|
 | 504 |                     case 'P':
 | 
|---|
 | 505 |                       temp = 0;
 | 
|---|
 | 506 |                       if (!IsRoot(pci->szFileName)) {
 | 
|---|
 | 507 |                         pp = strrchr(pci->szFileName, '\\');
 | 
|---|
 | 508 |                         if (pp) {
 | 
|---|
 | 509 |                           temp = *pp;
 | 
|---|
 | 510 |                           *pp = 0;
 | 
|---|
 | 511 |                         }
 | 
|---|
 | 512 |                       }
 | 
|---|
 | 513 |                       fputs(pci->szFileName, fp);
 | 
|---|
 | 514 |                       if (temp)
 | 
|---|
 | 515 |                         *pp = temp;
 | 
|---|
 | 516 |                       break;
 | 
|---|
 | 517 |                     case '$':
 | 
|---|
 | 518 |                       fputc(*pci->szFileName, fp);
 | 
|---|
 | 519 |                       break;
 | 
|---|
 | 520 |                     case '%':
 | 
|---|
 | 521 |                       fputc('%', fp);
 | 
|---|
 | 522 |                       break;
 | 
|---|
 | 523 |                     }
 | 
|---|
 | 524 |                   }
 | 
|---|
 | 525 |                   else
 | 
|---|
 | 526 |                     fputc(*p, fp);
 | 
|---|
 | 527 |                   p++;
 | 
|---|
 | 528 |                 }
 | 
|---|
 | 529 |                 fputs("\n", fp);
 | 
|---|
 | 530 |               }
 | 
|---|
 | 531 |               pci = WinSendMsg(hwndCnr, CM_QUERYRECORDEMPHASIS, MPFROMP(pci),
 | 
|---|
 | 532 |                                MPFROMSHORT(attribute));
 | 
|---|
 | 533 |             }
 | 
|---|
 | 534 |             fclose(fp);
 | 
|---|
 | 535 |           }
 | 
|---|
 | 536 |         }
 | 
|---|
| [2] | 537 |       }
 | 
|---|
| [551] | 538 |       WinEnableWindow(hwnd, TRUE);
 | 
|---|
 | 539 |       WinDismissDlg(hwnd, 1);
 | 
|---|
 | 540 |       break;
 | 
|---|
 | 541 |     }
 | 
|---|
 | 542 |     return 0;
 | 
|---|
| [2] | 543 |   }
 | 
|---|
| [551] | 544 |   return WinDefDlgProc(hwnd, msg, mp1, mp2);
 | 
|---|
| [2] | 545 | }
 | 
|---|
 | 546 | 
 | 
|---|
| [551] | 547 | MRESULT EXPENTRY SaveAllListDlgProc(HWND hwnd, ULONG msg, MPARAM mp1,
 | 
|---|
 | 548 |                                     MPARAM mp2)
 | 
|---|
 | 549 | {
 | 
|---|
| [2] | 550 | 
 | 
|---|
 | 551 |   CHAR **list;
 | 
|---|
| [551] | 552 |   CHAR savename[CCHMAXPATH] = "", pattern[81];
 | 
|---|
| [2] | 553 | 
 | 
|---|
| [551] | 554 |   switch (msg) {
 | 
|---|
 | 555 |   case WM_INITDLG:
 | 
|---|
 | 556 |     if (!mp2) {
 | 
|---|
 | 557 |       Runtime_Error(pszSrcFile, __LINE__, "no data");
 | 
|---|
 | 558 |       WinDismissDlg(hwnd, 0);
 | 
|---|
 | 559 |     }
 | 
|---|
 | 560 |     else {
 | 
|---|
| [574] | 561 |       WinSetWindowPtr(hwnd, QWL_USER, mp2);
 | 
|---|
| [551] | 562 |       list = (CHAR **) mp2;
 | 
|---|
 | 563 |       WinSendDlgItemMsg(hwnd,
 | 
|---|
 | 564 |                         SAV_FILENAME,
 | 
|---|
 | 565 |                         EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
 | 
|---|
 | 566 |       WinSendDlgItemMsg(hwnd,
 | 
|---|
 | 567 |                         SAV_PATTERN,
 | 
|---|
 | 568 |                         EM_SETTEXTLIMIT, MPFROM2SHORT(80, 0), MPVOID);
 | 
|---|
 | 569 |       *savename = *pattern = 0;
 | 
|---|
 | 570 |       {
 | 
|---|
 | 571 |         ULONG size;
 | 
|---|
 | 572 | 
 | 
|---|
 | 573 |         size = CCHMAXPATH;
 | 
|---|
 | 574 |         PrfQueryProfileData(fmprof,
 | 
|---|
 | 575 |                             appname, "SaveToListName", savename, &size);
 | 
|---|
 | 576 |         size = 81;
 | 
|---|
 | 577 |         PrfQueryProfileData(fmprof,
 | 
|---|
 | 578 |                             appname, "SaveToListPattern", pattern, &size);
 | 
|---|
| [2] | 579 |       }
 | 
|---|
| [551] | 580 |       WinSetDlgItemText(hwnd, SAV_FILENAME, savename);
 | 
|---|
 | 581 |       if (!*pattern)
 | 
|---|
 | 582 |         strcpy(pattern, "%F  %s");
 | 
|---|
 | 583 |       {
 | 
|---|
 | 584 |         CHAR temp[162];
 | 
|---|
| [2] | 585 | 
 | 
|---|
| [551] | 586 |         fixup(pattern, temp, sizeof(temp), strlen(pattern));
 | 
|---|
 | 587 |         WinSetDlgItemText(hwnd, SAV_PATTERN, temp);
 | 
|---|
 | 588 |       }
 | 
|---|
 | 589 |       {
 | 
|---|
 | 590 |         FILE *fp;
 | 
|---|
 | 591 |         CHAR s[CCHMAXPATH + 14];
 | 
|---|
| [2] | 592 | 
 | 
|---|
| [551] | 593 |         save_dir2(s);
 | 
|---|
 | 594 |         if (s[strlen(s) - 1] != '\\')
 | 
|---|
 | 595 |           strcat(s, "\\");
 | 
|---|
 | 596 |         strcat(s, "PATTERNS.DAT");
 | 
|---|
 | 597 |         fp = _fsopen(s, "r", SH_DENYWR);
 | 
|---|
 | 598 |         if (fp) {
 | 
|---|
 | 599 |           while (xfgets(s, 81, fp, pszSrcFile, __LINE__)) {
 | 
|---|
 | 600 |             stripcr(s);
 | 
|---|
 | 601 |             if (*s && *s != ';')
 | 
|---|
 | 602 |               WinSendMsg(WinWindowFromID(hwnd, SAV_LISTBOX), LM_INSERTITEM,
 | 
|---|
 | 603 |                          MPFROM2SHORT(LIT_SORTASCENDING, 0), MPFROMP(s));
 | 
|---|
 | 604 |           }
 | 
|---|
 | 605 |           fclose(fp);
 | 
|---|
 | 606 |         }
 | 
|---|
 | 607 |         if (!WinSendDlgItemMsg(hwnd, SAV_LISTBOX, LM_QUERYITEMCOUNT,
 | 
|---|
 | 608 |                                MPVOID, MPVOID))
 | 
|---|
 | 609 |           WinEnableWindow(WinWindowFromID(hwnd, SAV_LISTBOX), FALSE);
 | 
|---|
| [2] | 610 |       }
 | 
|---|
| [551] | 611 |     }
 | 
|---|
 | 612 |     break;
 | 
|---|
| [2] | 613 | 
 | 
|---|
| [551] | 614 |   case UM_SETDIR:
 | 
|---|
 | 615 |     {
 | 
|---|
 | 616 |       SHORT sSelect, sMax;
 | 
|---|
 | 617 |       CHAR szBuffer[CCHMAXPATH + 14];
 | 
|---|
 | 618 |       FILE *fp;
 | 
|---|
| [2] | 619 | 
 | 
|---|
| [551] | 620 |       sMax = (SHORT) WinSendDlgItemMsg(hwnd,
 | 
|---|
 | 621 |                                        SAV_LISTBOX,
 | 
|---|
 | 622 |                                        LM_QUERYITEMCOUNT, MPVOID, MPVOID);
 | 
|---|
 | 623 |       if (sMax > 0) {
 | 
|---|
 | 624 |         save_dir2(szBuffer);
 | 
|---|
 | 625 |         if (szBuffer[strlen(szBuffer) - 1] != '\\')
 | 
|---|
 | 626 |           strcat(szBuffer, "\\");
 | 
|---|
 | 627 |         strcat(szBuffer, "PATTERNS.DAT");
 | 
|---|
 | 628 |         fp = xfopen(szBuffer, "w", pszSrcFile, __LINE__);
 | 
|---|
 | 629 |         if (fp) {
 | 
|---|
 | 630 |           fputs(GetPString(IDS_LISTPATTERNTEXT), fp);
 | 
|---|
 | 631 |           for (sSelect = 0; sSelect < sMax; sSelect++) {
 | 
|---|
 | 632 |             *szBuffer = 0;
 | 
|---|
 | 633 |             WinSendDlgItemMsg(hwnd,
 | 
|---|
 | 634 |                               SAV_LISTBOX,
 | 
|---|
 | 635 |                               LM_QUERYITEMTEXT,
 | 
|---|
 | 636 |                               MPFROM2SHORT(sSelect, 81), MPFROMP(szBuffer));
 | 
|---|
 | 637 |             if (*szBuffer)
 | 
|---|
 | 638 |               fprintf(fp, "%s\n", szBuffer);
 | 
|---|
 | 639 |           }
 | 
|---|
 | 640 |           fclose(fp);
 | 
|---|
 | 641 |         }
 | 
|---|
| [2] | 642 |       }
 | 
|---|
| [551] | 643 |       else if (!sMax) {
 | 
|---|
 | 644 |         save_dir2(szBuffer);
 | 
|---|
 | 645 |         if (szBuffer[strlen(szBuffer) - 1] != '\\')
 | 
|---|
 | 646 |           strcat(szBuffer, "\\");
 | 
|---|
 | 647 |         strcat(szBuffer, "PATTERNS.DAT");
 | 
|---|
 | 648 |         unlinkf("%s", szBuffer);
 | 
|---|
 | 649 |       }
 | 
|---|
 | 650 |     }
 | 
|---|
 | 651 |     return 0;
 | 
|---|
| [2] | 652 | 
 | 
|---|
| [551] | 653 |   case WM_CONTROL:
 | 
|---|
 | 654 |     if (SHORT1FROMMP(mp1) == SAV_LISTBOX) {
 | 
|---|
| [2] | 655 | 
 | 
|---|
| [551] | 656 |       SHORT sSelect;
 | 
|---|
 | 657 |       CHAR szBuffer[81];
 | 
|---|
| [2] | 658 | 
 | 
|---|
| [551] | 659 |       switch (SHORT2FROMMP(mp1)) {
 | 
|---|
 | 660 |       case LN_SELECT:
 | 
|---|
 | 661 |         sSelect = (SHORT) WinSendDlgItemMsg(hwnd, SAV_LISTBOX,
 | 
|---|
 | 662 |                                             LM_QUERYSELECTION,
 | 
|---|
 | 663 |                                             MPFROMSHORT(LIT_FIRST), MPVOID);
 | 
|---|
 | 664 |         if (sSelect >= 0) {
 | 
|---|
 | 665 |           *szBuffer = 0;
 | 
|---|
 | 666 |           WinSendDlgItemMsg(hwnd, SAV_LISTBOX, LM_QUERYITEMTEXT,
 | 
|---|
 | 667 |                             MPFROM2SHORT(sSelect, 81), MPFROMP(szBuffer));
 | 
|---|
 | 668 |           if (*szBuffer)
 | 
|---|
 | 669 |             WinSetDlgItemText(hwnd, SAV_PATTERN, szBuffer);
 | 
|---|
 | 670 |         }
 | 
|---|
 | 671 |         break;
 | 
|---|
| [2] | 672 | 
 | 
|---|
| [551] | 673 |       case LN_ENTER:
 | 
|---|
 | 674 |         PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(DID_OK, 0), MPVOID);
 | 
|---|
 | 675 |         break;
 | 
|---|
| [2] | 676 |       }
 | 
|---|
| [551] | 677 |     }
 | 
|---|
 | 678 |     return 0;
 | 
|---|
| [2] | 679 | 
 | 
|---|
| [551] | 680 |   case WM_COMMAND:
 | 
|---|
 | 681 |     list = (CHAR **) INSTDATA(hwnd);
 | 
|---|
 | 682 |     switch (SHORT1FROMMP(mp1)) {
 | 
|---|
 | 683 |     case DID_CANCEL:
 | 
|---|
 | 684 |       WinDismissDlg(hwnd, 0);
 | 
|---|
 | 685 |       break;
 | 
|---|
| [2] | 686 | 
 | 
|---|
| [551] | 687 |     case IDM_HELP:
 | 
|---|
 | 688 |       if (hwndHelp)
 | 
|---|
 | 689 |         WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
 | 
|---|
 | 690 |                    MPFROM2SHORT(HELP_SAVETOLIST, 0),
 | 
|---|
 | 691 |                    MPFROMSHORT(HM_RESOURCEID));
 | 
|---|
 | 692 |       break;
 | 
|---|
| [2] | 693 | 
 | 
|---|
| [551] | 694 |     case SAV_FIND:
 | 
|---|
 | 695 |       {
 | 
|---|
 | 696 |         *savename = 0;
 | 
|---|
 | 697 |         WinQueryDlgItemText(hwnd, SAV_FILENAME, CCHMAXPATH, savename);
 | 
|---|
 | 698 |         if (!*savename)
 | 
|---|
 | 699 |           strcpy(savename, "*.LST");
 | 
|---|
 | 700 |         if (export_filename(hwnd, savename, 1) && *savename) {
 | 
|---|
 | 701 |           if (!strchr(savename, '.'))
 | 
|---|
 | 702 |             strcat(savename, ".LST");
 | 
|---|
 | 703 |           WinSetDlgItemText(hwnd, SAV_FILENAME, savename);
 | 
|---|
 | 704 |         }
 | 
|---|
 | 705 |       }
 | 
|---|
 | 706 |       break;
 | 
|---|
| [2] | 707 | 
 | 
|---|
| [551] | 708 |     case SAV_ADD:
 | 
|---|
 | 709 |     case SAV_DEL:
 | 
|---|
 | 710 |     case DID_OK:
 | 
|---|
 | 711 |       WinEnableWindow(hwnd, FALSE);
 | 
|---|
 | 712 |       {
 | 
|---|
 | 713 |         FILE *fp;
 | 
|---|
 | 714 |         CHAR *p, *pp, temp;
 | 
|---|
 | 715 |         INT x = 0;
 | 
|---|
 | 716 |         SHORT sSelect;
 | 
|---|
 | 717 |         FILEFINDBUF4 ffb4;
 | 
|---|
 | 718 |         ULONG nm;
 | 
|---|
 | 719 |         HDIR hdir;
 | 
|---|
 | 720 |         CHAR longname[CCHMAXPATH], subject[42];
 | 
|---|
| [2] | 721 | 
 | 
|---|
| [551] | 722 |         *pattern = 0;
 | 
|---|
 | 723 |         WinQueryDlgItemText(hwnd, SAV_PATTERN, 80, pattern);
 | 
|---|
 | 724 |         if (!*pattern) {
 | 
|---|
 | 725 |           WinEnableWindow(hwnd, TRUE);
 | 
|---|
 | 726 |           DosBeep(150, 100);
 | 
|---|
 | 727 |           break;
 | 
|---|
 | 728 |         }
 | 
|---|
 | 729 |         {
 | 
|---|
 | 730 |           switch (SHORT1FROMMP(mp1)) {
 | 
|---|
 | 731 |           case SAV_ADD:
 | 
|---|
 | 732 |             sSelect = (SHORT) WinSendDlgItemMsg(hwnd, SAV_LISTBOX,
 | 
|---|
 | 733 |                                                 LM_SEARCHSTRING,
 | 
|---|
 | 734 |                                                 MPFROM2SHORT(0, LIT_FIRST),
 | 
|---|
 | 735 |                                                 MPFROMP(pattern));
 | 
|---|
 | 736 |             if (sSelect < 0) {
 | 
|---|
 | 737 |               WinSendDlgItemMsg(hwnd, SAV_LISTBOX, LM_INSERTITEM,
 | 
|---|
 | 738 |                                 MPFROM2SHORT(LIT_SORTASCENDING, 0),
 | 
|---|
 | 739 |                                 MPFROMP(pattern));
 | 
|---|
 | 740 |               WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
 | 
|---|
 | 741 |             }
 | 
|---|
 | 742 |             WinEnableWindow(hwnd, TRUE);
 | 
|---|
 | 743 |             return 0;
 | 
|---|
| [2] | 744 | 
 | 
|---|
| [551] | 745 |           case SAV_DEL:
 | 
|---|
 | 746 |             sSelect = (SHORT) WinSendDlgItemMsg(hwnd, SAV_LISTBOX,
 | 
|---|
 | 747 |                                                 LM_QUERYSELECTION,
 | 
|---|
 | 748 |                                                 MPFROM2SHORT(LIT_FIRST, 0),
 | 
|---|
 | 749 |                                                 MPVOID);
 | 
|---|
 | 750 |             if (sSelect >= 0) {
 | 
|---|
 | 751 |               WinSendDlgItemMsg(hwnd, SAV_LISTBOX, LM_DELETEITEM,
 | 
|---|
 | 752 |                                 MPFROM2SHORT(sSelect, 0), MPVOID);
 | 
|---|
 | 753 |               WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
 | 
|---|
 | 754 |             }
 | 
|---|
 | 755 |             WinEnableWindow(hwnd, TRUE);
 | 
|---|
 | 756 |             return 0;
 | 
|---|
 | 757 |           }
 | 
|---|
 | 758 |         }
 | 
|---|
 | 759 |         literal(pattern);
 | 
|---|
 | 760 |         if (!*pattern) {
 | 
|---|
 | 761 |           WinEnableWindow(hwnd, TRUE);
 | 
|---|
 | 762 |           DosBeep(250, 100);
 | 
|---|
 | 763 |           break;
 | 
|---|
 | 764 |         }
 | 
|---|
 | 765 |         PrfWriteProfileString(fmprof, appname, "SaveToListPattern", pattern);
 | 
|---|
 | 766 |         *savename = 0;
 | 
|---|
 | 767 |         WinQueryDlgItemText(hwnd, SAV_FILENAME, CCHMAXPATH, savename);
 | 
|---|
 | 768 |         bstrip(savename);
 | 
|---|
 | 769 |         if (!*savename) {
 | 
|---|
 | 770 |           WinEnableWindow(hwnd, TRUE);
 | 
|---|
 | 771 |           DosBeep(100, 100);
 | 
|---|
 | 772 |           break;
 | 
|---|
 | 773 |         }
 | 
|---|
 | 774 |         if (stricmp(savename, "PRN") &&
 | 
|---|
 | 775 |             strnicmp(savename, "\\DEV\\LPT", 8) && !strchr(savename, '.'))
 | 
|---|
 | 776 |           strcat(savename, ".LST");
 | 
|---|
 | 777 |         PrfWriteProfileString(fmprof, appname, "SaveToListName", savename);
 | 
|---|
 | 778 |         if (!list || !list[0])
 | 
|---|
 | 779 |           Runtime_Error(pszSrcFile, __LINE__, "no data");
 | 
|---|
 | 780 |         else {
 | 
|---|
 | 781 |           fp = _fsopen(savename, "r+", SH_DENYWR);
 | 
|---|
 | 782 |           if (!fp)
 | 
|---|
 | 783 |             Runtime_Error(pszSrcFile, __LINE__, "_fsopen");
 | 
|---|
 | 784 |           else {
 | 
|---|
 | 785 |             fseek(fp, 0L, SEEK_SET);
 | 
|---|
 | 786 |             if (WinQueryButtonCheckstate(hwnd, SAV_APPEND) == 0)
 | 
|---|
 | 787 |               DosSetFileSize((HFILE) fileno(fp), 0L);
 | 
|---|
 | 788 |             else
 | 
|---|
 | 789 |               fseek(fp, 0L, SEEK_END);
 | 
|---|
 | 790 |             while (list[x]) {
 | 
|---|
 | 791 |               hdir = HDIR_CREATE;
 | 
|---|
 | 792 |               nm = 1L;
 | 
|---|
 | 793 |               *subject = *longname = 0;
 | 
|---|
 | 794 |               if (!DosFindFirst(list[x], &hdir,
 | 
|---|
 | 795 |                                 FILE_NORMAL | FILE_DIRECTORY |
 | 
|---|
 | 796 |                                 FILE_READONLY | FILE_ARCHIVED |
 | 
|---|
 | 797 |                                 FILE_HIDDEN | FILE_SYSTEM,
 | 
|---|
 | 798 |                                 &ffb4, sizeof(ffb4), &nm, FIL_QUERYEASIZE)) {
 | 
|---|
 | 799 |                 /* load the object's Subject, if required */
 | 
|---|
 | 800 |                 if (ffb4.cbList > 4L) {
 | 
|---|
 | 801 |                   APIRET rc;
 | 
|---|
 | 802 |                   EAOP2 eaop;
 | 
|---|
 | 803 |                   PGEA2LIST pgealist;
 | 
|---|
 | 804 |                   PFEA2LIST pfealist;
 | 
|---|
 | 805 |                   PGEA2 pgea;
 | 
|---|
 | 806 |                   PFEA2 pfea;
 | 
|---|
 | 807 |                   CHAR *value;
 | 
|---|
| [2] | 808 | 
 | 
|---|
| [551] | 809 |                   pgealist =
 | 
|---|
 | 810 |                     xmallocz(sizeof(GEA2LIST) + 64, pszSrcFile, __LINE__);
 | 
|---|
 | 811 |                   if (pgealist) {
 | 
|---|
 | 812 |                     pgea = &pgealist->list[0];
 | 
|---|
 | 813 |                     strcpy(pgea->szName, SUBJECT);
 | 
|---|
 | 814 |                     pgea->cbName = strlen(pgea->szName);
 | 
|---|
 | 815 |                     pgea->oNextEntryOffset = 0L;
 | 
|---|
 | 816 |                     pgealist->cbList = sizeof(GEA2LIST) + pgea->cbName;
 | 
|---|
 | 817 |                     pfealist = xmallocz(1024, pszSrcFile, __LINE__);
 | 
|---|
 | 818 |                     if (pfealist) {
 | 
|---|
 | 819 |                       pfealist->cbList = 1024;
 | 
|---|
 | 820 |                       eaop.fpGEA2List = pgealist;
 | 
|---|
 | 821 |                       eaop.fpFEA2List = pfealist;
 | 
|---|
 | 822 |                       eaop.oError = 0L;
 | 
|---|
 | 823 |                       rc = DosQueryPathInfo(list[x],
 | 
|---|
 | 824 |                                             FIL_QUERYEASFROMLIST,
 | 
|---|
 | 825 |                                             (PVOID) & eaop,
 | 
|---|
 | 826 |                                             (ULONG) sizeof(EAOP2));
 | 
|---|
 | 827 |                       if (!rc) {
 | 
|---|
 | 828 |                         pfea = &eaop.fpFEA2List->list[0];
 | 
|---|
 | 829 |                         value = pfea->szName + pfea->cbName + 1;
 | 
|---|
 | 830 |                         value[pfea->cbValue] = 0;
 | 
|---|
 | 831 |                         if (*(USHORT *) value == EAT_ASCII)
 | 
|---|
 | 832 |                           strncpy(subject, value + (sizeof(USHORT) * 2), 40);
 | 
|---|
 | 833 |                         subject[40] = 0;
 | 
|---|
 | 834 |                       }
 | 
|---|
 | 835 |                       free(pfealist);
 | 
|---|
 | 836 |                     }
 | 
|---|
 | 837 |                     free(pgealist);
 | 
|---|
 | 838 |                   }
 | 
|---|
 | 839 |                 }
 | 
|---|
 | 840 |                 /* load the object's longname */
 | 
|---|
 | 841 |                 if (ffb4.cbList > 4L) {
 | 
|---|
 | 842 |                   APIRET rc;
 | 
|---|
 | 843 |                   EAOP2 eaop;
 | 
|---|
 | 844 |                   PGEA2LIST pgealist;
 | 
|---|
 | 845 |                   PFEA2LIST pfealist;
 | 
|---|
 | 846 |                   PGEA2 pgea;
 | 
|---|
 | 847 |                   PFEA2 pfea;
 | 
|---|
 | 848 |                   CHAR *value;
 | 
|---|
| [2] | 849 | 
 | 
|---|
| [551] | 850 |                   pgealist =
 | 
|---|
 | 851 |                     xmallocz(sizeof(GEA2LIST) + 64, pszSrcFile, __LINE__);
 | 
|---|
 | 852 |                   if (pgealist) {
 | 
|---|
 | 853 |                     pgea = &pgealist->list[0];
 | 
|---|
 | 854 |                     strcpy(pgea->szName, LONGNAME);
 | 
|---|
 | 855 |                     pgea->cbName = strlen(pgea->szName);
 | 
|---|
 | 856 |                     pgea->oNextEntryOffset = 0L;
 | 
|---|
 | 857 |                     pgealist->cbList = sizeof(GEA2LIST) + pgea->cbName;
 | 
|---|
 | 858 |                     pfealist = xmallocz(1024, pszSrcFile, __LINE__);
 | 
|---|
 | 859 |                     if (pfealist) {
 | 
|---|
 | 860 |                       pfealist->cbList = 1024;
 | 
|---|
 | 861 |                       eaop.fpGEA2List = pgealist;
 | 
|---|
 | 862 |                       eaop.fpFEA2List = pfealist;
 | 
|---|
 | 863 |                       eaop.oError = 0L;
 | 
|---|
 | 864 |                       rc = DosQueryPathInfo(list[x],
 | 
|---|
 | 865 |                                             FIL_QUERYEASFROMLIST,
 | 
|---|
 | 866 |                                             (PVOID) & eaop,
 | 
|---|
 | 867 |                                             (ULONG) sizeof(EAOP2));
 | 
|---|
 | 868 |                       if (!rc) {
 | 
|---|
 | 869 |                         pfea = &eaop.fpFEA2List->list[0];
 | 
|---|
 | 870 |                         value = pfea->szName + pfea->cbName + 1;
 | 
|---|
 | 871 |                         value[pfea->cbValue] = 0;
 | 
|---|
 | 872 |                         if (*(USHORT *) value == EAT_ASCII)
 | 
|---|
 | 873 |                           strncpy(longname, value +
 | 
|---|
 | 874 |                                   (sizeof(USHORT) * 2), CCHMAXPATHCOMP);
 | 
|---|
 | 875 |                         longname[CCHMAXPATHCOMP - 1] = 0;
 | 
|---|
 | 876 |                       }
 | 
|---|
 | 877 |                       free(pfealist);
 | 
|---|
 | 878 |                     }
 | 
|---|
 | 879 |                     free(pgealist);
 | 
|---|
 | 880 |                   }
 | 
|---|
 | 881 |                 }
 | 
|---|
| [2] | 882 | 
 | 
|---|
| [551] | 883 |                 p = pattern;
 | 
|---|
 | 884 |                 while (*p) {
 | 
|---|
 | 885 |                   if (*p == '%') {
 | 
|---|
 | 886 |                     p++;
 | 
|---|
 | 887 |                     switch (*p) {
 | 
|---|
 | 888 |                     case 's':
 | 
|---|
 | 889 |                       fputs(subject, fp);
 | 
|---|
 | 890 |                       break;
 | 
|---|
 | 891 |                     case 'S':
 | 
|---|
 | 892 |                       fprintf(fp, "%-40s", subject);
 | 
|---|
 | 893 |                       break;
 | 
|---|
 | 894 |                     case 'Z':
 | 
|---|
 | 895 |                       fprintf(fp, "%-13lu", ffb4.cbFile);
 | 
|---|
 | 896 |                       break;
 | 
|---|
 | 897 |                     case 'z':
 | 
|---|
 | 898 |                       fprintf(fp, "%lu", ffb4.cbFile);
 | 
|---|
 | 899 |                       break;
 | 
|---|
 | 900 |                     case 'E':
 | 
|---|
 | 901 |                       fprintf(fp, "%-5u", CBLIST_TO_EASIZE(ffb4.cbList));
 | 
|---|
 | 902 |                       break;
 | 
|---|
 | 903 |                     case 'e':
 | 
|---|
 | 904 |                       fprintf(fp, "%u", CBLIST_TO_EASIZE(ffb4.cbList));
 | 
|---|
 | 905 |                       break;
 | 
|---|
 | 906 |                     case 'd':
 | 
|---|
 | 907 |                     case 'D':
 | 
|---|
 | 908 |                       fprintf(fp,
 | 
|---|
 | 909 |                               "%04u/%02u/%02u",
 | 
|---|
 | 910 |                               ffb4.fdateLastWrite.year + 1980,
 | 
|---|
 | 911 |                               ffb4.fdateLastWrite.month,
 | 
|---|
 | 912 |                               ffb4.fdateLastWrite.day);
 | 
|---|
 | 913 |                       break;
 | 
|---|
 | 914 |                     case 't':
 | 
|---|
 | 915 |                     case 'T':
 | 
|---|
 | 916 |                       fprintf(fp,
 | 
|---|
 | 917 |                               "%02u:%02u:%02u",
 | 
|---|
 | 918 |                               ffb4.ftimeLastWrite.hours,
 | 
|---|
 | 919 |                               ffb4.ftimeLastWrite.minutes,
 | 
|---|
 | 920 |                               ffb4.ftimeLastWrite.twosecs * 2);
 | 
|---|
 | 921 |                       break;
 | 
|---|
 | 922 |                     case 'l':
 | 
|---|
 | 923 |                       fputs(longname, fp);
 | 
|---|
 | 924 |                       break;
 | 
|---|
 | 925 |                     case 'L':
 | 
|---|
 | 926 |                       fprintf(fp, "%-40s", longname);
 | 
|---|
 | 927 |                       break;
 | 
|---|
 | 928 |                     case 'F':
 | 
|---|
 | 929 |                     case 'f':
 | 
|---|
 | 930 |                       if (IsRoot(list[x]))
 | 
|---|
 | 931 |                         pp = list[x];
 | 
|---|
 | 932 |                       else {
 | 
|---|
 | 933 |                         pp = strrchr(list[x], '\\');
 | 
|---|
 | 934 |                         if (pp)
 | 
|---|
 | 935 |                           pp++;
 | 
|---|
 | 936 |                         else
 | 
|---|
 | 937 |                           pp = list[x];
 | 
|---|
 | 938 |                       }
 | 
|---|
 | 939 |                       if (*p == 'F')
 | 
|---|
 | 940 |                         fprintf(fp, "%-13s", pp);
 | 
|---|
 | 941 |                       else
 | 
|---|
 | 942 |                         fputs(pp, fp);
 | 
|---|
 | 943 |                       break;
 | 
|---|
 | 944 |                     case 'p':
 | 
|---|
 | 945 |                       fputs(list[x], fp);
 | 
|---|
 | 946 |                       break;
 | 
|---|
 | 947 |                     case 'P':
 | 
|---|
 | 948 |                       temp = 0;
 | 
|---|
 | 949 |                       if (!IsRoot(list[x])) {
 | 
|---|
 | 950 |                         pp = strrchr(list[x], '\\');
 | 
|---|
 | 951 |                         if (pp) {
 | 
|---|
 | 952 |                           temp = *pp;
 | 
|---|
 | 953 |                           *pp = 0;
 | 
|---|
 | 954 |                         }
 | 
|---|
 | 955 |                       }
 | 
|---|
 | 956 |                       fputs(list[x], fp);
 | 
|---|
 | 957 |                       if (temp)
 | 
|---|
 | 958 |                         *pp = temp;
 | 
|---|
 | 959 |                       break;
 | 
|---|
 | 960 |                     case '$':
 | 
|---|
 | 961 |                       fputc(*list[x], fp);
 | 
|---|
 | 962 |                       break;
 | 
|---|
 | 963 |                     case '%':
 | 
|---|
 | 964 |                       fputc('%', fp);
 | 
|---|
 | 965 |                       break;
 | 
|---|
 | 966 |                     }
 | 
|---|
 | 967 |                   }
 | 
|---|
 | 968 |                   else
 | 
|---|
 | 969 |                     fputc(*p, fp);
 | 
|---|
 | 970 |                   p++;
 | 
|---|
 | 971 |                 }
 | 
|---|
 | 972 |                 fputs("\n", fp);
 | 
|---|
 | 973 |                 DosFindClose(hdir);
 | 
|---|
 | 974 |               }
 | 
|---|
 | 975 |               x++;
 | 
|---|
 | 976 |             }
 | 
|---|
 | 977 |             fclose(fp);
 | 
|---|
 | 978 |           }
 | 
|---|
 | 979 |         }
 | 
|---|
| [2] | 980 |       }
 | 
|---|
| [551] | 981 |       WinEnableWindow(hwnd, TRUE);
 | 
|---|
 | 982 |       WinDismissDlg(hwnd, 1);
 | 
|---|
 | 983 |       break;
 | 
|---|
 | 984 |     }
 | 
|---|
 | 985 |     return 0;
 | 
|---|
| [2] | 986 |   }
 | 
|---|
| [551] | 987 |   return WinDefDlgProc(hwnd, msg, mp1, mp2);
 | 
|---|
| [2] | 988 | }
 | 
|---|