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