source: trunk/dll/mkdir.c@ 1036

Last change on this file since 1036 was 985, checked in by Gregg Young, 17 years ago

Update sizes dialog (ticket 44); Make max command line length user settable (ticket 199); use xfree for free in most cases (ticket 212); initial code to check for valid ini file (ticket 102); Some additional refactoring and structure rework; Some documentation updates;

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.1 KB
RevLine 
[907]1
2/***********************************************************************
3
4 $Id: mkdir.c 985 2008-03-01 01:37:14Z gyoung $
5
6 Make directory dialog
7
8 Copyright (c) 1993-97 M. Kimes
9 Copyright (c) 2004, 2007 Steven H.Levine
10
11 01 Aug 04 SHL Baseline
[985]12 29 Feb 08 GKY Refactor global command line variables to notebook.h
[907]13
14***********************************************************************/
15
16#include <string.h>
17#include <ctype.h>
18
[2]19#define INCL_DOSERRORS
20#define INCL_WIN
[907]21#define INCL_LONGLONG // dircnrs.h
[2]22
23#include "fm3dlg.h"
24#include "fm3str.h"
[907]25#include "errutil.h" // Dos_Error...
26#include "strutil.h" // GetPString
[985]27#include "notebook.h" // targetdirectoy
[907]28#include "fm3dll.h"
[2]29
30#pragma alloc_text(MKDIR,MassMkdir,SetDir,PMMkDir,SetTargetDir)
31
[551]32APIRET MassMkdir(HWND hwndClient, CHAR * dir)
33{
34 APIRET last, was = 0;
35 CHAR *p;
36 CHAR s[CCHMAXPATH];
[2]37
[551]38 if (DosQueryPathInfo(dir, FIL_QUERYFULLNAME, s, sizeof(s)))
39 strcpy(s, dir);
[2]40 p = s;
[551]41 while (*p) {
42 if (*p == '/')
[2]43 *p = '\\';
44 p++;
45 }
46 p = s;
47 do {
[551]48 p = strchr(p, '\\');
49 if (p && p > s && *(p - 1) == ':')
50 p = strchr(p + 1, '\\');
51 if (p && *p) {
[2]52 *p = 0;
53 was = 1;
54 }
55 else
56 was = 0;
[551]57 last = DosCreateDir(s, NULL);
58 if (!last)
59 Broadcast((HAB) 0, hwndClient, UM_UPDATERECORD, MPFROMP(s), MPVOID);
60 else if (last == ERROR_ACCESS_DENIED) {
61 if (!IsFile(s))
62 last = 0;
[2]63 }
[551]64 if (was) {
[2]65 *p = '\\';
66 p++;
67 }
68 }
[551]69 while (p && *p);
[2]70 return last;
71}
72
[551]73APIRET SetDir(HWND hwndClient, HWND hwnd, CHAR * dir, INT flags)
74{
[2]75
76 /*
77 * bitmapped flags:
78 * 1 = don't ask to create if non-existent
79 */
80
[551]81 CHAR s[CCHMAXPATH], *p;
82 APIRET ret = 0, error;
83 INT isfile;
[2]84
[551]85 if (DosQueryPathInfo(dir, FIL_QUERYFULLNAME, s, sizeof(s)))
86 strcpy(s, dir);
87 while ((p = strchr(s, '/')) != NULL)
[2]88 *p = '\\';
[551]89 while (strlen(s) > 3 && s[strlen(s) - 1] == '\\')
[2]90 s[strlen(s) - 1] = 0;
[551]91 if (IsFullName(s)) {
92 if (driveflags[toupper(*s) - 'A'] & (DRIVE_IGNORE | DRIVE_INVALID)) {
93 if (!(flags & 1))
94 saymsg(MB_CANCEL,
95 hwnd,
96 GetPString(IDS_NOPETEXT),
97 GetPString(IDS_DRIVEISTEXT),
98 toupper(*s),
99 ((driveflags[toupper(*s) - 'A'] & DRIVE_IGNORE) != 0) ?
100 GetPString(IDS_BEINGIGNOREDTEXT) :
101 GetPString(IDS_INVALIDTEXT));
[2]102 return -5;
103 }
104 }
105 isfile = IsFile(s);
[551]106 if (isfile == -1) {
107 if (IsFullName(s)) {
108 if (driveflags[toupper(*s) - 'A'] & DRIVE_NOTWRITEABLE) {
109 if (!(flags & 1))
110 saymsg(MB_CANCEL,
111 hwnd,
112 GetPString(IDS_NOPETEXT),
113 GetPString(IDS_DRIVEISTEXT),
114 toupper(*s), GetPString(IDS_NOWRITETEXT));
115 return -4;
[2]116 }
117 }
[551]118 if (!(flags & 1)) {
119 if (saymsg(MB_YESNO,
120 hwnd,
121 GetPString(IDS_CONFIRMTEXT),
122 GetPString(IDS_NODIRCREATEDIRTEXT), s) != MBID_YES)
123 return -3;
[2]124 }
[551]125 error = MassMkdir(hwndClient, s);
126 if (error) {
[2]127 Dos_Error(MB_CANCEL,
[551]128 error,
129 hwnd,
130 __FILE__, __LINE__, GetPString(IDS_CREATEDIRFAILEDTEXT), s);
[2]131 ret = -1;
132 }
133 }
[551]134 else if (isfile) {
[2]135 saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
[551]136 hwnd,
137 GetPString(IDS_ERRORTEXT), GetPString(IDS_EXISTSNOTDIRTEXT), s);
[2]138 ret = -2;
139 }
140 return ret;
141}
142
[551]143BOOL PMMkDir(HWND hwnd, CHAR * filename, BOOL copy)
144{
[2]145
146 STRINGINPARMS sip;
[551]147 CHAR szBuff[CCHMAXPATH];
148 APIRET error;
[2]149
150Over:
151 sip.help = GetPString(IDS_MKDIRHELPTEXT);
152 sip.ret = szBuff;
[551]153 if (filename)
154 strcpy(szBuff, filename);
[2]155 else
156 save_dir2(szBuff);
157 MakeValidDir(szBuff);
[551]158 if (*szBuff && szBuff[strlen(szBuff) - 1] != '\\')
159 strcat(szBuff, "\\");
[2]160 sip.prompt = GetPString(IDS_MKDIRPROMPTTEXT);
161 sip.inputlen = CCHMAXPATH - 1;
162 sip.title = GetPString(IDS_MKDIRTITLETEXT);
[551]163 if (WinDlgBox(HWND_DESKTOP,
164 hwnd,
165 InputDlgProc, FM3ModHandle, STR_FRAME, &sip) && *szBuff) {
166 if ((strchr(szBuff, '?') ||
167 strchr(szBuff, '*')) || IsFile(szBuff) == 1 || IsRoot(szBuff)) {
[2]168 saymsg(MB_ENTER | MB_ICONEXCLAMATION,
[551]169 hwnd,
170 GetPString(IDS_ERRORTEXT),
171 GetPString(IDS_DIRNAMEERRORTEXT), szBuff);
[2]172 goto Over;
173 }
[551]174 error = MassMkdir(hwnd, szBuff);
175 if (error)
[2]176 Dos_Error(MB_ENTER,
[551]177 error,
178 hwnd,
179 __FILE__,
180 __LINE__, GetPString(IDS_CREATEDIRFAILEDTEXT), szBuff);
[2]181 else {
[551]182 if (copy && filename)
183 strcpy(filename, szBuff);
[2]184 return TRUE;
185 }
186 }
187 return FALSE;
188}
189
[551]190void SetTargetDir(HWND hwnd, BOOL justshow)
191{
[2]192
193 char temp[CCHMAXPATH + 12];
194
[551]195 if (!justshow) {
196 strcpy(temp, targetdir);
197 if (WinDlgBox(HWND_DESKTOP,
198 hwnd,
199 WalkTargetDlgProc,
200 FM3ModHandle, WALK_FRAME, MPFROMP(temp)) && *temp) {
201 strcpy(targetdir, temp);
202 if (!fChangeTarget)
203 PrfWriteProfileString(fmprof, appname, "Targetdir", targetdir);
[2]204 }
205 else {
[551]206 if (*targetdir &&
207 saymsg(MB_YESNOCANCEL,
208 hwnd,
209 GetPString(IDS_CLEARTARGETTITLETEXT),
210 "%s", GetPString(IDS_CLEARTARGETTEXT)) == MBID_YES) {
211 *targetdir = 0;
212 PrfWriteProfileString(fmprof, appname, "Targetdir", NULL);
[2]213 }
214 }
215 }
216
[551]217 if (hwndBack) {
218 if (fShowTarget)
[2]219 sprintf(temp,
[551]220 "%s%s%s%s",
221 GetPString(IDS_TARGETDIRTITLETEXT),
222 (*targetdir) ? "" : "<",
223 (*targetdir) ?
224 targetdir : GetPString(IDS_NONE), (*targetdir) ? "" : ">");
[2]225 else
226 *temp = 0;
[551]227 WinSetWindowText(hwndBack, temp);
[2]228 }
229}
Note: See TracBrowser for help on using the repository browser.