source: trunk/dll/getnames.c@ 1398

Last change on this file since 1398 was 1398, checked in by Gregg Young, 17 years ago

Move embeded strings to PCSZ variables or string table; Eliminate Error2 functions Runtime_Error with NULL format string returns "No data" error. Change declares from PSZ to PCSZ in functions where the variable isn't changed. Added btm as an executable file type in several additional places. Use fProtectOnly to prevent attempt to execute Dos and Win programs on "Protect only" installs in several additional places.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 9.9 KB
Line 
1
2/***********************************************************************
3
4 $Id: getnames.c 1398 2009-02-21 17:43:00Z gyoung $
5
6 Directory containers
7
8 Copyright (c) 1993-98 M. Kimes
9 Copyright (c) 2006, 2009 Steven H. Levine
10
11 23 Aug 06 SHL Comments
12 20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
13
14***********************************************************************/
15
16#include <string.h>
17#include <ctype.h>
18
19#define INCL_DOS
20#define INCL_WIN
21#define INCL_LONGLONG
22
23#include "fm3dll.h"
24#include "fm3dll2.h" // #define's for UM_*, control id's, etc.
25#include "notebook.h" // Data declaration(s)
26#include "info.h" // Data declaration(s)
27#include "init.h" // Data declaration(s)
28#include "mainwnd.h" // Data declaration(s)
29#include "fm3dlg.h"
30#include "fm3str.h"
31#include "errutil.h" // Dos_Error...
32#include "strutil.h" // GetPString
33#include "getnames.h"
34#include "walkem.h" // load_udirs, remove_udir
35#include "valid.h" // MakeFullName
36#include "copyf.h" // unlinkf
37#include "misc.h" // PaintRecessedWindow
38#include "wrappers.h" // xDosFindFirst
39
40#pragma data_seg(DATA1)
41
42MRESULT EXPENTRY CustomFileDlg(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
43{
44 switch (msg) {
45 case WM_INITDLG:
46 if (!loadedudirs)
47 load_udirs();
48 { /* fill user list box */
49 ULONG ulDriveNum, ulDriveMap;
50 ULONG ulSearchCount;
51 FILEFINDBUF3L findbuf;
52 HDIR hDir;
53 APIRET rc;
54 LINKDIRS *info, *temp;
55
56 DosError(FERR_DISABLEHARDERR);
57 DosQCurDisk(&ulDriveNum, &ulDriveMap);
58 info = udirhead;
59 while (info) {
60 if (IsFullName(info->path) &&
61 !(driveflags[toupper(*info->path) - 'A'] &
62 (DRIVE_IGNORE | DRIVE_INVALID))) {
63 DosError(FERR_DISABLEHARDERR);
64 hDir = HDIR_CREATE;
65 ulSearchCount = 1L;
66 if (!IsRoot(info->path))
67 rc = xDosFindFirst(info->path, &hDir, FILE_DIRECTORY |
68 MUST_HAVE_DIRECTORY | FILE_READONLY |
69 FILE_ARCHIVED | FILE_SYSTEM | FILE_HIDDEN,
70 &findbuf, sizeof(FILEFINDBUF3L),
71 &ulSearchCount, FIL_STANDARDL);
72 else {
73 rc = 0;
74 findbuf.attrFile = FILE_DIRECTORY;
75 }
76 if (!rc) {
77 if (!IsRoot(info->path))
78 DosFindClose(hDir);
79 if (findbuf.attrFile & FILE_DIRECTORY)
80 WinSendDlgItemMsg(hwnd, FDLG_USERDIRS, LM_INSERTITEM,
81 MPFROM2SHORT(LIT_SORTASCENDING, 0),
82 MPFROMP(info->path));
83 else {
84 temp = info->next;
85 remove_udir(info->path);
86 info = temp;
87 continue;
88 }
89 }
90 else if (!(ulDriveMap & (1L << (toupper(*info->path) - 'A')))) {
91 temp = info->next;
92 remove_udir(info->path);
93 info = temp;
94 continue;
95 }
96 }
97 info = info->next;
98 }
99 }
100 break;
101
102 case WM_ADJUSTWINDOWPOS:
103 PostMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
104 break;
105
106 case UM_SETDIR:
107 PaintRecessedWindow(WinWindowFromID(hwnd, FDLG_HELP),
108 (HPS) 0, FALSE, TRUE);
109 return 0;
110
111 case WM_CONTROL:
112 switch (SHORT1FROMMP(mp1)) {
113 case 260: /* drives dropdown list */
114 switch (SHORT2FROMMP(mp1)) {
115 case CBN_SHOWLIST:
116 WinSetDlgItemText(hwnd,
117 FDLG_HELP, GetPString(IDS_CLICKDRIVEHELPTEXT));
118 break;
119 }
120 break;
121
122 case 258: /* name entry field */
123 switch (SHORT2FROMMP(mp1)) {
124 case EN_SETFOCUS:
125 WinSetDlgItemText(hwnd,
126 FDLG_HELP, GetPString(IDS_ENTERFILEORMASKHELPTEXT));
127 break;
128 case EN_KILLFOCUS:
129 WinSetDlgItemText(hwnd, FDLG_HELP, GetPString(IDS_NAMEDEFHELPTEXT));
130 break;
131 }
132 break;
133
134 case 264: /* dirs listbox */
135 switch (SHORT2FROMMP(mp1)) {
136 case LN_SETFOCUS:
137 WinSetDlgItemText(hwnd,
138 FDLG_HELP, GetPString(IDS_DBLCLKDIRSWITCHHELPTEXT));
139 break;
140 case LN_KILLFOCUS:
141 WinSetDlgItemText(hwnd, FDLG_HELP, GetPString(IDS_NAMEDEFHELPTEXT));
142 break;
143 }
144 break;
145
146 case 266: /* files listbox */
147 switch (SHORT2FROMMP(mp1)) {
148 case LN_SETFOCUS:
149 WinSetDlgItemText(hwnd, FDLG_HELP,
150 GetPString(IDS_DBLCLKFILEUSEHELPTEXT));
151 break;
152 case LN_KILLFOCUS:
153 WinSetDlgItemText(hwnd, FDLG_HELP, GetPString(IDS_NAMEDEFHELPTEXT));
154 break;
155 }
156 break;
157
158 case FDLG_USERDIRS:
159 switch (SHORT2FROMMP(mp1)) {
160 case CBN_SHOWLIST:
161 WinSetDlgItemText(hwnd,
162 FDLG_HELP, GetPString(IDS_DBLCLKDIRSWITCHHELPTEXT));
163 break;
164 case CBN_ENTER:
165 {
166 SHORT sSelect;
167 CHAR szBuffer[CCHMAXPATH], szTemp[CCHMAXPATH], *p;
168
169 sSelect = (USHORT) WinSendDlgItemMsg(hwnd,
170 FDLG_USERDIRS,
171 LM_QUERYSELECTION,
172 MPVOID, MPVOID);
173 *szBuffer = 0;
174 if (sSelect >= 0) {
175 WinSendDlgItemMsg(hwnd,
176 FDLG_USERDIRS,
177 LM_QUERYITEMTEXT,
178 MPFROM2SHORT(sSelect,
179 CCHMAXPATH), MPFROMP(szBuffer));
180 if (*szBuffer) {
181 if (szBuffer[strlen(szBuffer) - 1] != '\\')
182 strcat(szBuffer, "\\");
183 *szTemp = 0;
184 WinQueryDlgItemText(hwnd, 258, CCHMAXPATH, szTemp);
185 p = strrchr(szTemp, '\\');
186 if (!p)
187 p = szTemp;
188 else
189 p++;
190 if (*p)
191 strcat(szBuffer, p);
192 if (!strchr(szBuffer, '?') && !strchr(szBuffer, '*'))
193 strcat(szBuffer, "*");
194 WinSetDlgItemText(hwnd, 258, szBuffer);
195 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(DID_OK, 0), MPVOID);
196 }
197 }
198 }
199 break;
200 default:
201 break;
202 }
203 break;
204 }
205 break;
206
207 case WM_HELP:
208 if (hwndHelp) {
209 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
210 MPFROM2SHORT(HELP_FILEDLG, 0), MPFROMSHORT(HM_RESOURCEID));
211 return 0;
212 }
213 break;
214 }
215 return WinDefFileDlgProc(hwnd, msg, mp1, mp2);
216}
217
218BOOL insert_filename(HWND hwnd, CHAR * filename, INT loadit, BOOL newok)
219{
220 FILEDLG fdlg;
221 FILESTATUS3 fsa;
222 CHAR drive[3], *pdrive = drive, *p;
223 APIRET rc;
224 static CHAR lastfilename[CCHMAXPATH] = "";
225
226 if (!filename)
227 return FALSE;
228 memset(&fdlg, 0, sizeof(FILEDLG));
229 fdlg.cbSize = (ULONG) sizeof(FILEDLG);
230 fdlg.fl = FDS_CENTER | FDS_OPEN_DIALOG;
231 if (!loadit) {
232 fdlg.pszTitle = (PSZ)GetPString(IDS_ENTERFILEINSERTTEXT);
233 fdlg.pszOKButton = (PSZ)GetPString(IDS_INSERTTEXT);
234 }
235 else if (loadit == TRUE) {
236 fdlg.pszTitle = (PSZ)GetPString(IDS_ENTERFILELOADTEXT);
237 fdlg.pszOKButton = (PSZ)GetPString(IDS_LOADTEXT);
238 }
239 else {
240 fdlg.pszTitle = (PSZ)GetPString(IDS_ENTERFILETEXT);
241 fdlg.pszOKButton = (PSZ)GetPString(IDS_OKAYTEXT);
242 }
243 if (IsFullName(filename)) {
244 *drive = *filename;
245 drive[1] = ':';
246 drive[2] = 0;
247 fdlg.pszIDrive = pdrive;
248 }
249 else if (*lastfilename) {
250 *drive = *lastfilename;
251 drive[1] = ':';
252 drive[2] = 0;
253 fdlg.pszIDrive = pdrive;
254 }
255
256 if (!*filename) {
257 if (*lastfilename) {
258 strcpy(fdlg.szFullFile, lastfilename);
259 p = strrchr(fdlg.szFullFile, '\\');
260 if (p) {
261 p++;
262 *p = 0;
263 }
264 }
265 if (!loadit || loadit == TRUE)
266 strcat(fdlg.szFullFile, PCSZ_STARDOTTXT);
267 else
268 strcat(fdlg.szFullFile, "*");
269 }
270 else
271 strcpy(fdlg.szFullFile, filename);
272
273 if (fCustomFileDlg) {
274 fdlg.fl |= FDS_HELPBUTTON | FDS_CUSTOM;
275 fdlg.pfnDlgProc = (PFNWP) CustomFileDlg;
276 fdlg.hMod = FM3ModHandle;
277 fdlg.usDlgId = FDLG_FRAME;
278 }
279
280 if (WinFileDlg(HWND_DESKTOP, hwnd, &fdlg)) {
281 if (fdlg.lReturn != DID_CANCEL && !fdlg.lSRC)
282 strcpy(filename, fdlg.szFullFile);
283 else
284 return FALSE;
285 }
286 else
287 return FALSE;
288 MakeFullName(filename);
289 if (!DosQueryPathInfo(filename, FIL_STANDARD, &fsa, sizeof(fsa))) {
290 if (fsa.attrFile & FILE_DIRECTORY) {
291 /* device or directory */
292 saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
293 hwnd, filename, GetPString(IDS_EXISTSBUTNOTFILETEXT), filename);
294 return FALSE;
295 }
296 else if (fsa.cbFile == 0) {
297 saymsg(MB_CANCEL,
298 hwnd, filename, GetPString(IDS_ISZEROLENGTHTEXT), filename);
299 return FALSE;
300 }
301 }
302 else if (!newok) {
303 saymsg(MB_CANCEL,
304 hwnd, filename, GetPString(IDS_DOESNTEXISTTEXT), filename);
305 return FALSE;
306 }
307 else {
308 rc = saymsg(MB_YESNOCANCEL,
309 hwnd, filename, GetPString(IDS_CREATENEWTEXT));
310 if (rc != MBID_YES)
311 return FALSE;
312 }
313 p = filename;
314 while (*p) {
315 if (*p == '/')
316 *p = '\\';
317 p++;
318 }
319 if (*filename)
320 strcpy(lastfilename, filename);
321 return TRUE;
322}
323
324BOOL export_filename(HWND hwnd, CHAR * filename, INT overwrite)
325{
326 FILEDLG fdlg;
327 FILESTATUS3 fsa;
328 CHAR drive[3], *pdrive = drive, *p;
329 static CHAR lastfilename[CCHMAXPATH] = "";
330
331 if (!filename)
332 return FALSE;
333 memset(&fdlg, 0, sizeof(FILEDLG));
334 fdlg.cbSize = sizeof(FILEDLG);
335 fdlg.fl = FDS_CENTER | FDS_OPEN_DIALOG;
336 fdlg.pszTitle = (PSZ)GetPString(IDS_EXPORTNAMETITLETEXT);
337 fdlg.pszOKButton = (PSZ)GetPString(IDS_OKAYTEXT);
338 if (IsFullName(filename)) {
339 *drive = *filename;
340 drive[1] = ':';
341 drive[2] = 0;
342 fdlg.pszIDrive = pdrive;
343 }
344 else if (*lastfilename) {
345 *drive = *lastfilename;
346 drive[1] = ':';
347 drive[2] = 0;
348 fdlg.pszIDrive = pdrive;
349 }
350 if (!*filename) {
351 if (*lastfilename) {
352 strcpy(fdlg.szFullFile, lastfilename);
353 p = strrchr(fdlg.szFullFile, '\\');
354 if (p) {
355 p++;
356 *p = 0;
357 }
358 }
359 strcat(fdlg.szFullFile, PCSZ_STARDOTTXT);
360 }
361 else
362 strcpy(fdlg.szFullFile, filename);
363
364 if (fCustomFileDlg) {
365 fdlg.fl |= FDS_HELPBUTTON | FDS_CUSTOM;
366 fdlg.pfnDlgProc = (PFNWP) CustomFileDlg;
367 fdlg.hMod = FM3ModHandle;
368 fdlg.usDlgId = FDLG_FRAME;
369 }
370
371 if (WinFileDlg(HWND_DESKTOP, hwnd, &fdlg)) {
372 if (fdlg.lReturn != DID_CANCEL && !fdlg.lSRC)
373 strcpy(filename, fdlg.szFullFile);
374 else
375 return FALSE;
376 }
377 else
378 return FALSE;
379 MakeFullName(filename);
380 if (!DosQueryPathInfo(filename, FIL_STANDARD, &fsa, sizeof(fsa))) {
381 if (fsa.attrFile & FILE_DIRECTORY) { /* device or directory */
382 saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
383 hwnd, filename, GetPString(IDS_EXISTSBUTNOTFILETEXT), filename);
384 return FALSE;
385 }
386 else if (overwrite && fsa.cbFile != 0) {
387 if (saymsg(MB_YESNO,
388 hwnd,
389 filename,
390 GetPString(IDS_EXISTSERASETEXT), filename) == MBID_YES)
391 unlinkf("%s", filename);
392 }
393 }
394 p = filename;
395 while (*p) {
396 if (*p == '/')
397 *p = '\\';
398 p++;
399 }
400 if (*filename)
401 strcpy(lastfilename, filename);
402 return TRUE;
403}
404
405#pragma alloc_text(GETNAMES,insert_filename,export_filename,CustomFileDlg)
Note: See TracBrowser for help on using the repository browser.