source: trunk/dll/getnames.c@ 1194

Last change on this file since 1194 was 1180, checked in by John Small, 17 years ago

Ticket 187: Draft 2: Move remaining function declarations

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