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
RevLine 
[451]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
[1498]9 Copyright (c) 2006, 2010 Steven H. Levine
[451]10
11 23 Aug 06 SHL Comments
[793]12 20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
[1402]13 08 Mar 09 GKY Removed variable aurguments from docopyf and unlinkf (not used)
[1438]14 28 Jun 09 GKY Added AddBackslashToPath() to remove repeatative code.
[1498]15 17 JAN 10 GKY Changes to get working with Watcom 1.9 Beta (1/16/10). Mostly cast CHAR CONSTANT * as CHAR *.
[1545]16 23 Oct 10 GKY Add ForwardslashToBackslash function to streamline code
[451]17
18***********************************************************************/
19
[907]20#include <string.h>
21#include <ctype.h>
22
[2]23#define INCL_DOS
24#define INCL_WIN
[841]25#define INCL_LONGLONG
[2]26
[1180]27#include "fm3dll.h"
[1223]28#include "fm3dll2.h" // #define's for UM_*, control id's, etc.
[1208]29#include "notebook.h" // Data declaration(s)
30#include "info.h" // Data declaration(s)
[1398]31#include "init.h" // Data declaration(s)
[1208]32#include "mainwnd.h" // Data declaration(s)
[2]33#include "fm3dlg.h"
34#include "fm3str.h"
[907]35#include "errutil.h" // Dos_Error...
36#include "strutil.h" // GetPString
[1158]37#include "getnames.h"
38#include "walkem.h" // load_udirs, remove_udir
[1180]39#include "valid.h" // MakeFullName
40#include "copyf.h" // unlinkf
41#include "misc.h" // PaintRecessedWindow
42#include "wrappers.h" // xDosFindFirst
[1438]43#include "pathutil.h" // AddBackslashToPath
[2]44
45#pragma data_seg(DATA1)
46
[551]47MRESULT EXPENTRY CustomFileDlg(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[451]48{
[551]49 switch (msg) {
50 case WM_INITDLG:
51 if (!loadedudirs)
52 load_udirs();
[1673]53 { // fill user list box
[551]54 ULONG ulDriveNum, ulDriveMap;
55 ULONG ulSearchCount;
[841]56 FILEFINDBUF3L findbuf;
[551]57 HDIR hDir;
58 APIRET rc;
59 LINKDIRS *info, *temp;
[2]60
[551]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))
[838]72 rc = xDosFindFirst(info->path, &hDir, FILE_DIRECTORY |
73 MUST_HAVE_DIRECTORY | FILE_READONLY |
74 FILE_ARCHIVED | FILE_SYSTEM | FILE_HIDDEN,
[841]75 &findbuf, sizeof(FILEFINDBUF3L),
76 &ulSearchCount, FIL_STANDARDL);
[551]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;
[2]103 }
[551]104 }
105 break;
[2]106
[551]107 case WM_ADJUSTWINDOWPOS:
108 PostMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
109 break;
[2]110
[551]111 case UM_SETDIR:
112 PaintRecessedWindow(WinWindowFromID(hwnd, FDLG_HELP),
113 (HPS) 0, FALSE, TRUE);
114 return 0;
[2]115
[551]116 case WM_CONTROL:
117 switch (SHORT1FROMMP(mp1)) {
[1673]118 case 260: // drives dropdown list
[551]119 switch (SHORT2FROMMP(mp1)) {
120 case CBN_SHOWLIST:
121 WinSetDlgItemText(hwnd,
[1498]122 FDLG_HELP, (CHAR *) GetPString(IDS_CLICKDRIVEHELPTEXT));
[551]123 break;
124 }
125 break;
[2]126
[1673]127 case 258: // name entry field
[551]128 switch (SHORT2FROMMP(mp1)) {
129 case EN_SETFOCUS:
130 WinSetDlgItemText(hwnd,
[1498]131 FDLG_HELP, (CHAR *) GetPString(IDS_ENTERFILEORMASKHELPTEXT));
[551]132 break;
133 case EN_KILLFOCUS:
[1498]134 WinSetDlgItemText(hwnd, FDLG_HELP, (CHAR *) GetPString(IDS_NAMEDEFHELPTEXT));
[551]135 break;
136 }
137 break;
[2]138
[1673]139 case 264: // dirs listbox
[551]140 switch (SHORT2FROMMP(mp1)) {
141 case LN_SETFOCUS:
142 WinSetDlgItemText(hwnd,
[1498]143 FDLG_HELP, (CHAR *) GetPString(IDS_DBLCLKDIRSWITCHHELPTEXT));
[551]144 break;
145 case LN_KILLFOCUS:
[1498]146 WinSetDlgItemText(hwnd, FDLG_HELP, (CHAR *) GetPString(IDS_NAMEDEFHELPTEXT));
[551]147 break;
148 }
149 break;
[2]150
[1673]151 case 266: // files listbox
[551]152 switch (SHORT2FROMMP(mp1)) {
153 case LN_SETFOCUS:
154 WinSetDlgItemText(hwnd, FDLG_HELP,
[1498]155 (CHAR *) GetPString(IDS_DBLCLKFILEUSEHELPTEXT));
[551]156 break;
157 case LN_KILLFOCUS:
[1498]158 WinSetDlgItemText(hwnd, FDLG_HELP, (CHAR *) GetPString(IDS_NAMEDEFHELPTEXT));
[551]159 break;
160 }
161 break;
[2]162
[551]163 case FDLG_USERDIRS:
164 switch (SHORT2FROMMP(mp1)) {
165 case CBN_SHOWLIST:
166 WinSetDlgItemText(hwnd,
[1498]167 FDLG_HELP, (CHAR *) GetPString(IDS_DBLCLKDIRSWITCHHELPTEXT));
[551]168 break;
169 case CBN_ENTER:
170 {
171 SHORT sSelect;
172 CHAR szBuffer[CCHMAXPATH], szTemp[CCHMAXPATH], *p;
[2]173
[551]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));
[1438]185 if (*szBuffer) {
186 AddBackslashToPath(szBuffer);
[551]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;
[2]206 }
207 break;
[551]208 }
209 break;
[2]210
[551]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;
[2]218 }
[551]219 return WinDefFileDlgProc(hwnd, msg, mp1, mp2);
[2]220}
221
[551]222BOOL insert_filename(HWND hwnd, CHAR * filename, INT loadit, BOOL newok)
[451]223{
[551]224 FILEDLG fdlg;
[847]225 FILESTATUS3 fsa;
[551]226 CHAR drive[3], *pdrive = drive, *p;
227 APIRET rc;
[2]228 static CHAR lastfilename[CCHMAXPATH] = "";
229
[551]230 if (!filename)
[2]231 return FALSE;
[551]232 memset(&fdlg, 0, sizeof(FILEDLG));
233 fdlg.cbSize = (ULONG) sizeof(FILEDLG);
234 fdlg.fl = FDS_CENTER | FDS_OPEN_DIALOG;
235 if (!loadit) {
[1394]236 fdlg.pszTitle = (PSZ)GetPString(IDS_ENTERFILEINSERTTEXT);
237 fdlg.pszOKButton = (PSZ)GetPString(IDS_INSERTTEXT);
[2]238 }
[551]239 else if (loadit == TRUE) {
[1394]240 fdlg.pszTitle = (PSZ)GetPString(IDS_ENTERFILELOADTEXT);
241 fdlg.pszOKButton = (PSZ)GetPString(IDS_LOADTEXT);
[2]242 }
243 else {
[1394]244 fdlg.pszTitle = (PSZ)GetPString(IDS_ENTERFILETEXT);
245 fdlg.pszOKButton = (PSZ)GetPString(IDS_OKAYTEXT);
[2]246 }
[551]247 if (IsFullName(filename)) {
[2]248 *drive = *filename;
249 drive[1] = ':';
250 drive[2] = 0;
251 fdlg.pszIDrive = pdrive;
252 }
[551]253 else if (*lastfilename) {
[2]254 *drive = *lastfilename;
255 drive[1] = ':';
256 drive[2] = 0;
257 fdlg.pszIDrive = pdrive;
258 }
259
[551]260 if (!*filename) {
261 if (*lastfilename) {
262 strcpy(fdlg.szFullFile, lastfilename);
263 p = strrchr(fdlg.szFullFile, '\\');
264 if (p) {
265 p++;
266 *p = 0;
[2]267 }
268 }
[551]269 if (!loadit || loadit == TRUE)
[1398]270 strcat(fdlg.szFullFile, PCSZ_STARDOTTXT);
[2]271 else
[551]272 strcat(fdlg.szFullFile, "*");
[2]273 }
274 else
[551]275 strcpy(fdlg.szFullFile, filename);
[2]276
[551]277 if (fCustomFileDlg) {
[2]278 fdlg.fl |= FDS_HELPBUTTON | FDS_CUSTOM;
[551]279 fdlg.pfnDlgProc = (PFNWP) CustomFileDlg;
[2]280 fdlg.hMod = FM3ModHandle;
281 fdlg.usDlgId = FDLG_FRAME;
282 }
283
[551]284 if (WinFileDlg(HWND_DESKTOP, hwnd, &fdlg)) {
285 if (fdlg.lReturn != DID_CANCEL && !fdlg.lSRC)
286 strcpy(filename, fdlg.szFullFile);
[2]287 else
288 return FALSE;
289 }
290 else
291 return FALSE;
292 MakeFullName(filename);
[847]293 if (!DosQueryPathInfo(filename, FIL_STANDARD, &fsa, sizeof(fsa))) {
[551]294 if (fsa.attrFile & FILE_DIRECTORY) {
[1673]295 // device or directory
[2]296 saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
[551]297 hwnd, filename, GetPString(IDS_EXISTSBUTNOTFILETEXT), filename);
[2]298 return FALSE;
299 }
[841]300 else if (fsa.cbFile == 0) {
[2]301 saymsg(MB_CANCEL,
[551]302 hwnd, filename, GetPString(IDS_ISZEROLENGTHTEXT), filename);
[2]303 return FALSE;
304 }
305 }
[551]306 else if (!newok) {
[2]307 saymsg(MB_CANCEL,
[551]308 hwnd, filename, GetPString(IDS_DOESNTEXISTTEXT), filename);
[2]309 return FALSE;
310 }
311 else {
312 rc = saymsg(MB_YESNOCANCEL,
[551]313 hwnd, filename, GetPString(IDS_CREATENEWTEXT));
314 if (rc != MBID_YES)
[2]315 return FALSE;
316 }
[1545]317 ForwardslashToBackslash(filename);
[551]318 if (*filename)
319 strcpy(lastfilename, filename);
[2]320 return TRUE;
321}
322
[551]323BOOL export_filename(HWND hwnd, CHAR * filename, INT overwrite)
[451]324{
[551]325 FILEDLG fdlg;
[847]326 FILESTATUS3 fsa;
[551]327 CHAR drive[3], *pdrive = drive, *p;
[2]328 static CHAR lastfilename[CCHMAXPATH] = "";
329
[551]330 if (!filename)
[2]331 return FALSE;
[551]332 memset(&fdlg, 0, sizeof(FILEDLG));
333 fdlg.cbSize = sizeof(FILEDLG);
334 fdlg.fl = FDS_CENTER | FDS_OPEN_DIALOG;
[1394]335 fdlg.pszTitle = (PSZ)GetPString(IDS_EXPORTNAMETITLETEXT);
336 fdlg.pszOKButton = (PSZ)GetPString(IDS_OKAYTEXT);
[551]337 if (IsFullName(filename)) {
[2]338 *drive = *filename;
339 drive[1] = ':';
340 drive[2] = 0;
341 fdlg.pszIDrive = pdrive;
342 }
[551]343 else if (*lastfilename) {
[2]344 *drive = *lastfilename;
345 drive[1] = ':';
346 drive[2] = 0;
347 fdlg.pszIDrive = pdrive;
348 }
[551]349 if (!*filename) {
350 if (*lastfilename) {
351 strcpy(fdlg.szFullFile, lastfilename);
352 p = strrchr(fdlg.szFullFile, '\\');
353 if (p) {
354 p++;
355 *p = 0;
[2]356 }
357 }
[1398]358 strcat(fdlg.szFullFile, PCSZ_STARDOTTXT);
[2]359 }
360 else
[551]361 strcpy(fdlg.szFullFile, filename);
[2]362
[551]363 if (fCustomFileDlg) {
[2]364 fdlg.fl |= FDS_HELPBUTTON | FDS_CUSTOM;
[551]365 fdlg.pfnDlgProc = (PFNWP) CustomFileDlg;
[2]366 fdlg.hMod = FM3ModHandle;
367 fdlg.usDlgId = FDLG_FRAME;
368 }
369
[551]370 if (WinFileDlg(HWND_DESKTOP, hwnd, &fdlg)) {
371 if (fdlg.lReturn != DID_CANCEL && !fdlg.lSRC)
372 strcpy(filename, fdlg.szFullFile);
[2]373 else
374 return FALSE;
375 }
376 else
377 return FALSE;
378 MakeFullName(filename);
[847]379 if (!DosQueryPathInfo(filename, FIL_STANDARD, &fsa, sizeof(fsa))) {
[1673]380 if (fsa.attrFile & FILE_DIRECTORY) { // device or directory
[2]381 saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
[551]382 hwnd, filename, GetPString(IDS_EXISTSBUTNOTFILETEXT), filename);
[2]383 return FALSE;
384 }
[847]385 else if (overwrite && fsa.cbFile != 0) {
[551]386 if (saymsg(MB_YESNO,
387 hwnd,
388 filename,
389 GetPString(IDS_EXISTSERASETEXT), filename) == MBID_YES)
[1402]390 unlinkf(filename);
[2]391 }
392 }
[1545]393 ForwardslashToBackslash(filename);
[551]394 if (*filename)
395 strcpy(lastfilename, filename);
[2]396 return TRUE;
397}
[793]398
399#pragma alloc_text(GETNAMES,insert_filename,export_filename,CustomFileDlg)
Note: See TracBrowser for help on using the repository browser.