source: trunk/dll/getnames.c@ 1880

Last change on this file since 1880 was 1880, checked in by Gregg Young, 10 years ago

Remove dead code and comments from remaining c files. #if 0 and #if NEVER were not addressed

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