Initial commit, 3-52-19 alpha
[cls.git] / src / c / mswin / filedlgs.c
blobc9c91e32cd51897a9b378538e2acc9a0473b4ef7
1 // *** merge with lspedit code
3 #include "xlisp.h"
4 #include <commdlg.h>
5 #include <dir.h>
7 #define FILTERSIZE 255
8 static char szFilter[FILTERSIZE + 2];
9 static char szDfltFilter[] = "Lisp Files(*.LSP)|*.lsp|All Files(*.*)|*.*";
10 static char szDirName[256];
12 LVAL xsopenfiledialog()
14 int i, n;
15 OPENFILENAME ofn;
16 BOOL changedir;
17 LVAL usrfilter;
19 changedir = moreargs() ? ! null(xlgetarg()) : TRUE;
20 if (moreargs()) {
21 usrfilter = xlgastring();
22 if (getslength(usrfilter) > FILTERSIZE)
23 xlbadtype(usrfilter);
24 strcpy(szFilter, getstring(usrfilter));
26 else
27 strcpy(szFilter, szDfltFilter);
29 n = strlen(szFilter);
30 for (i = 0; i < n; i++)
31 if (szFilter[i] == '|')
32 szFilter[i] = '\0';
33 szFilter[n] = '\0';
34 szFilter[n + 1] = '\0';
36 if (! getcwd(szDirName, sizeof(szDirName)))
37 return NIL;
38 buf[0] = '\0';
40 memset(&ofn, 0, sizeof(OPENFILENAME));
41 ofn.lStructSize = sizeof(OPENFILENAME);
42 ofn.lpstrFilter = szFilter;
43 ofn.nFilterIndex = 1;
44 ofn.lpstrFile = buf;
45 ofn.nMaxFile = STRMAX;
46 ofn.lpstrInitialDir = szDirName;
47 ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
48 if (! changedir) ofn.Flags |= OFN_NOCHANGEDIR;
50 if (GetOpenFileName(&ofn))
51 return cvstring(buf);
52 else
53 return NIL;
56 LVAL xssetfiledialog()
58 int i, n;
59 OPENFILENAME ofn;
60 BOOL changedir;
61 LVAL usrfilter;
62 char *title;
64 title = getstring(xlgastring());
65 changedir = moreargs() ? ! null(xlgetarg()) : TRUE;
66 if (moreargs()) {
67 usrfilter = xlgastring();
68 if (getslength(usrfilter) > FILTERSIZE)
69 xlbadtype(usrfilter);
70 strcpy(szFilter, getstring(usrfilter));
72 else
73 strcpy(szFilter, szDfltFilter);
75 n = strlen(szFilter);
76 for (i = 0; i < n; i++)
77 if (szFilter[i] == '|')
78 szFilter[i] = '\0';
79 szFilter[n] = '\0';
80 szFilter[n + 1] = '\0';
82 if (! getcwd(szDirName, sizeof(szDirName)))
83 return NIL;
84 buf[0] = '\0';
86 memset(&ofn, 0, sizeof(OPENFILENAME));
87 ofn.lStructSize = sizeof(OPENFILENAME);
88 ofn.lpstrFilter = szFilter;
89 ofn.nFilterIndex = 1;
90 ofn.lpstrFile = buf;
91 ofn.nMaxFile = STRMAX;
92 ofn.lpstrInitialDir = szDirName;
93 ofn.Flags = OFN_OVERWRITEPROMPT;
94 if (! changedir) ofn.Flags |= OFN_NOCHANGEDIR;
95 ofn.lpstrTitle = title;
97 if (GetSaveFileName(&ofn))
98 return cvstring(buf);
99 else
100 return NIL;