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
RevLine 
[451]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
[793]12 20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
[451]13
14***********************************************************************/
15
[907]16#include <string.h>
17#include <ctype.h>
18
[2]19#define INCL_DOS
20#define INCL_WIN
[841]21#define INCL_LONGLONG
[2]22
[1180]23#include "fm3dll.h"
[2]24#include "fm3dlg.h"
25#include "fm3str.h"
[907]26#include "errutil.h" // Dos_Error...
27#include "strutil.h" // GetPString
[1158]28#include "getnames.h"
29#include "walkem.h" // load_udirs, remove_udir
[1180]30#include "valid.h" // MakeFullName
31#include "copyf.h" // unlinkf
32#include "misc.h" // PaintRecessedWindow
33#include "wrappers.h" // xDosFindFirst
[2]34
35#pragma data_seg(DATA1)
36
[551]37MRESULT EXPENTRY CustomFileDlg(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[451]38{
[551]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;
[841]46 FILEFINDBUF3L findbuf;
[551]47 HDIR hDir;
48 APIRET rc;
49 LINKDIRS *info, *temp;
[2]50
[551]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))
[838]62 rc = xDosFindFirst(info->path, &hDir, FILE_DIRECTORY |
63 MUST_HAVE_DIRECTORY | FILE_READONLY |
64 FILE_ARCHIVED | FILE_SYSTEM | FILE_HIDDEN,
[841]65 &findbuf, sizeof(FILEFINDBUF3L),
66 &ulSearchCount, FIL_STANDARDL);
[551]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;
[2]93 }
[551]94 }
95 break;
[2]96
[551]97 case WM_ADJUSTWINDOWPOS:
98 PostMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
99 break;
[2]100
[551]101 case UM_SETDIR:
102 PaintRecessedWindow(WinWindowFromID(hwnd, FDLG_HELP),
103 (HPS) 0, FALSE, TRUE);
104 return 0;
[2]105
[551]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;
[2]116
[551]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;
[2]128
[551]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;
[2]140
[551]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;
[2]152
[551]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;
[2]163
[551]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;
[2]197 }
198 break;
[551]199 }
200 break;
[2]201
[551]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;
[2]209 }
[551]210 return WinDefFileDlgProc(hwnd, msg, mp1, mp2);
[2]211}
212
[551]213BOOL insert_filename(HWND hwnd, CHAR * filename, INT loadit, BOOL newok)
[451]214{
[551]215 FILEDLG fdlg;
[847]216 FILESTATUS3 fsa;
[551]217 CHAR drive[3], *pdrive = drive, *p;
218 APIRET rc;
[2]219 static CHAR lastfilename[CCHMAXPATH] = "";
220
[551]221 if (!filename)
[2]222 return FALSE;
[551]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);
[2]229 }
[551]230 else if (loadit == TRUE) {
231 fdlg.pszTitle = GetPString(IDS_ENTERFILELOADTEXT);
232 fdlg.pszOKButton = GetPString(IDS_LOADTEXT);
[2]233 }
234 else {
[551]235 fdlg.pszTitle = GetPString(IDS_ENTERFILETEXT);
236 fdlg.pszOKButton = GetPString(IDS_OKAYTEXT);
[2]237 }
[551]238 if (IsFullName(filename)) {
[2]239 *drive = *filename;
240 drive[1] = ':';
241 drive[2] = 0;
242 fdlg.pszIDrive = pdrive;
243 }
[551]244 else if (*lastfilename) {
[2]245 *drive = *lastfilename;
246 drive[1] = ':';
247 drive[2] = 0;
248 fdlg.pszIDrive = pdrive;
249 }
250
[551]251 if (!*filename) {
252 if (*lastfilename) {
253 strcpy(fdlg.szFullFile, lastfilename);
254 p = strrchr(fdlg.szFullFile, '\\');
255 if (p) {
256 p++;
257 *p = 0;
[2]258 }
259 }
[551]260 if (!loadit || loadit == TRUE)
261 strcat(fdlg.szFullFile, "*.TXT");
[2]262 else
[551]263 strcat(fdlg.szFullFile, "*");
[2]264 }
265 else
[551]266 strcpy(fdlg.szFullFile, filename);
[2]267
[551]268 if (fCustomFileDlg) {
[2]269 fdlg.fl |= FDS_HELPBUTTON | FDS_CUSTOM;
[551]270 fdlg.pfnDlgProc = (PFNWP) CustomFileDlg;
[2]271 fdlg.hMod = FM3ModHandle;
272 fdlg.usDlgId = FDLG_FRAME;
273 }
274
[551]275 if (WinFileDlg(HWND_DESKTOP, hwnd, &fdlg)) {
276 if (fdlg.lReturn != DID_CANCEL && !fdlg.lSRC)
277 strcpy(filename, fdlg.szFullFile);
[2]278 else
279 return FALSE;
280 }
281 else
282 return FALSE;
283 MakeFullName(filename);
[847]284 if (!DosQueryPathInfo(filename, FIL_STANDARD, &fsa, sizeof(fsa))) {
[551]285 if (fsa.attrFile & FILE_DIRECTORY) {
[451]286 /* device or directory */
[2]287 saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
[551]288 hwnd, filename, GetPString(IDS_EXISTSBUTNOTFILETEXT), filename);
[2]289 return FALSE;
290 }
[841]291 else if (fsa.cbFile == 0) {
[2]292 saymsg(MB_CANCEL,
[551]293 hwnd, filename, GetPString(IDS_ISZEROLENGTHTEXT), filename);
[2]294 return FALSE;
295 }
296 }
[551]297 else if (!newok) {
[2]298 saymsg(MB_CANCEL,
[551]299 hwnd, filename, GetPString(IDS_DOESNTEXISTTEXT), filename);
[2]300 return FALSE;
301 }
302 else {
303 rc = saymsg(MB_YESNOCANCEL,
[551]304 hwnd, filename, GetPString(IDS_CREATENEWTEXT));
305 if (rc != MBID_YES)
[2]306 return FALSE;
307 }
308 p = filename;
[551]309 while (*p) {
310 if (*p == '/')
[2]311 *p = '\\';
312 p++;
313 }
[551]314 if (*filename)
315 strcpy(lastfilename, filename);
[2]316 return TRUE;
317}
318
[551]319BOOL export_filename(HWND hwnd, CHAR * filename, INT overwrite)
[451]320{
[551]321 FILEDLG fdlg;
[847]322 FILESTATUS3 fsa;
[551]323 CHAR drive[3], *pdrive = drive, *p;
[2]324 static CHAR lastfilename[CCHMAXPATH] = "";
325
[551]326 if (!filename)
[2]327 return FALSE;
[551]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)) {
[2]334 *drive = *filename;
335 drive[1] = ':';
336 drive[2] = 0;
337 fdlg.pszIDrive = pdrive;
338 }
[551]339 else if (*lastfilename) {
[2]340 *drive = *lastfilename;
341 drive[1] = ':';
342 drive[2] = 0;
343 fdlg.pszIDrive = pdrive;
344 }
[551]345 if (!*filename) {
346 if (*lastfilename) {
347 strcpy(fdlg.szFullFile, lastfilename);
348 p = strrchr(fdlg.szFullFile, '\\');
349 if (p) {
350 p++;
351 *p = 0;
[2]352 }
353 }
[551]354 strcat(fdlg.szFullFile, "*.TXT");
[2]355 }
356 else
[551]357 strcpy(fdlg.szFullFile, filename);
[2]358
[551]359 if (fCustomFileDlg) {
[2]360 fdlg.fl |= FDS_HELPBUTTON | FDS_CUSTOM;
[551]361 fdlg.pfnDlgProc = (PFNWP) CustomFileDlg;
[2]362 fdlg.hMod = FM3ModHandle;
363 fdlg.usDlgId = FDLG_FRAME;
364 }
365
[551]366 if (WinFileDlg(HWND_DESKTOP, hwnd, &fdlg)) {
367 if (fdlg.lReturn != DID_CANCEL && !fdlg.lSRC)
368 strcpy(filename, fdlg.szFullFile);
[2]369 else
370 return FALSE;
371 }
372 else
373 return FALSE;
374 MakeFullName(filename);
[847]375 if (!DosQueryPathInfo(filename, FIL_STANDARD, &fsa, sizeof(fsa))) {
[551]376 if (fsa.attrFile & FILE_DIRECTORY) { /* device or directory */
[2]377 saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
[551]378 hwnd, filename, GetPString(IDS_EXISTSBUTNOTFILETEXT), filename);
[2]379 return FALSE;
380 }
[847]381 else if (overwrite && fsa.cbFile != 0) {
[551]382 if (saymsg(MB_YESNO,
383 hwnd,
384 filename,
385 GetPString(IDS_EXISTSERASETEXT), filename) == MBID_YES)
386 unlinkf("%s", filename);
[2]387 }
388 }
389 p = filename;
[551]390 while (*p) {
391 if (*p == '/')
[2]392 *p = '\\';
393 p++;
394 }
[551]395 if (*filename)
396 strcpy(lastfilename, filename);
[2]397 return TRUE;
398}
[793]399
400#pragma alloc_text(GETNAMES,insert_filename,export_filename,CustomFileDlg)
Note: See TracBrowser for help on using the repository browser.