source: trunk/dll/getnames.c@ 536

Last change on this file since 536 was 451, checked in by root, 19 years ago

Comments

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