source: trunk/dll/getnames.c@ 1394

Last change on this file since 1394 was 1394, checked in by Steven Levine, 17 years ago

Ticket 340: Convert GetPString to use STRINGTABLE.

Drop fm3dll.str and mkstr.exe from makefiles and wpi builders

Convert many functions to expect PCSZ arguments.
Correct walk, compare and dirsizes dialog setups to ignore saved dialog size
Drop copyright.c logic from makefile

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