source: trunk/dll/getnames.c@ 433

Last change on this file since 433 was 2, checked in by root, 23 years ago

Initial revision

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