source: trunk/dll/archive.c@ 2

Last change on this file since 2 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: 9.0 KB
Line 
1#define INCL_WIN
2#define INCL_DOS
3
4#include <os2.h>
5#include <stdlib.h>
6#include <stdio.h>
7#include <share.h>
8#include <string.h>
9#include <time.h>
10#include <ctype.h>
11#include "fm3dll.h"
12#include "fm3dlg.h"
13#include "fm3str.h"
14
15#pragma alloc_text(FMARCHIVE,ArchiveDlgProc)
16
17
18MRESULT EXPENTRY ArchiveDlgProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) {
19
20 DIRCNRDATA *arcdata = NULL;
21
22 switch(msg) {
23 case WM_INITDLG:
24 WinSetWindowPtr(hwnd,0,mp2);
25 arcdata = (DIRCNRDATA *)mp2;
26 arcdata->ret = 0;
27 WinSendDlgItemMsg(hwnd,ARCH_ARCNAME,EM_SETTEXTLIMIT,
28 MPFROM2SHORT(CCHMAXPATH,0),MPVOID);
29 if(!arcdata->namecanchange) {
30 WinSendDlgItemMsg(hwnd,ARCH_ARCNAME,EM_SETREADONLY,
31 MPFROM2SHORT(TRUE,0),MPVOID);
32 WinEnableWindow(WinWindowFromID(hwnd,ARCH_FIND),FALSE);
33 WinShowWindow(WinWindowFromID(hwnd,ARCH_FIND),FALSE);
34 }
35 WinSendDlgItemMsg(hwnd,ARCH_COMMAND,EM_SETTEXTLIMIT,
36 MPFROM2SHORT(256,0),MPVOID);
37 WinSendDlgItemMsg(hwnd,ARCH_MASKS,EM_SETTEXTLIMIT,
38 MPFROM2SHORT(256,0),MPVOID);
39 WinSetDlgItemText(hwnd,ARCH_ARCNAME,arcdata->arcname);
40 if(arcdata->fmoving && arcdata->info->move) {
41 WinSetDlgItemText(hwnd,ARCH_COMMAND,arcdata->info->move);
42 WinSendDlgItemMsg(hwnd,ARCH_MOVE,BM_SETCHECK,
43 MPFROM2SHORT(TRUE,0),MPVOID);
44 }
45 else
46 WinSetDlgItemText(hwnd,ARCH_COMMAND,arcdata->info->create);
47 if(!arcdata->info->createrecurse)
48 WinEnableWindow(WinWindowFromID(hwnd,ARCH_RECURSE),FALSE);
49 if(!arcdata->info->move && !arcdata->info->movewdirs)
50 WinEnableWindow(WinWindowFromID(hwnd,ARCH_MOVE),FALSE);
51 if(!arcdata->info->createwdirs && !arcdata->info->movewdirs)
52 WinEnableWindow(WinWindowFromID(hwnd,ARCH_INCLPATH),FALSE);
53 *arcdata->command = 0;
54 PosOverOkay(hwnd);
55 break;
56
57 case WM_ADJUSTWINDOWPOS:
58 PostMsg(hwnd,UM_SETDIR,MPVOID,MPVOID);
59 break;
60
61 case UM_SETDIR:
62 PaintRecessedWindow(WinWindowFromID(hwnd,ARCH_HELP),(HPS)0,FALSE,TRUE);
63 return 0;
64
65 case WM_CONTROL:
66 arcdata = (DIRCNRDATA *)WinQueryWindowPtr(hwnd,0);
67 switch(SHORT1FROMMP(mp1)) {
68 case ARCH_ARCNAME:
69 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
70 WinSetDlgItemText(hwnd,ARCH_HELP,
71 GetPString(IDS_ARCDEFAULTHELPTEXT));
72 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
73 WinSetDlgItemText(hwnd,ARCH_HELP,
74 GetPString(IDS_ARCARCNAMEHELPTEXT));
75 break;
76
77 case ARCH_COMMAND:
78 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
79 WinSetDlgItemText(hwnd,ARCH_HELP,
80 GetPString(IDS_ARCDEFAULTHELPTEXT));
81 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
82 WinSetDlgItemText(hwnd,ARCH_HELP,
83 GetPString(IDS_ARCCMDHELPTEXT));
84 break;
85
86 case ARCH_MASKS:
87 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
88 WinSetDlgItemText(hwnd,ARCH_HELP,
89 GetPString(IDS_ARCDEFAULTHELPTEXT));
90 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
91 WinSetDlgItemText(hwnd,ARCH_HELP,
92 GetPString(IDS_ARCMASKHELPTEXT));
93
94 break;
95
96 case ARCH_INCLPATH:
97 case ARCH_RECURSE:
98 case ARCH_MOVE:
99 {
100 BOOL fRecurse = FALSE,fMove = FALSE,fInclDirs = FALSE;
101 CHAR *cmd;
102
103 if((BOOL)WinSendDlgItemMsg(hwnd,ARCH_RECURSE,BM_QUERYCHECK,
104 MPVOID,MPVOID)) {
105 fRecurse = TRUE;
106 if(SHORT1FROMMP(mp1) == ARCH_RECURSE) {
107 if(arcdata->info->createrecurse &&
108 *arcdata->info->createrecurse) {
109 fMove = FALSE;
110 fInclDirs = FALSE;
111 WinSendDlgItemMsg(hwnd,ARCH_INCLPATH,BM_SETCHECK,
112 MPVOID,MPVOID);
113 WinSendDlgItemMsg(hwnd,ARCH_MOVE,BM_SETCHECK,MPVOID,MPVOID);
114 }
115 else {
116 fRecurse = FALSE;
117 WinSendDlgItemMsg(hwnd,ARCH_RECURSE,BM_SETCHECK,
118 MPVOID,MPVOID);
119 }
120 }
121 }
122 else
123 fRecurse = FALSE;
124 if((BOOL)WinSendDlgItemMsg(hwnd,ARCH_MOVE,BM_QUERYCHECK,
125 MPVOID,MPVOID)) {
126 fMove = TRUE;
127 fRecurse = FALSE;
128 WinSendDlgItemMsg(hwnd,ARCH_RECURSE,BM_SETCHECK,MPVOID,MPVOID);
129 }
130 else
131 fMove = FALSE;
132 if((BOOL)WinSendDlgItemMsg(hwnd,ARCH_INCLPATH,BM_QUERYCHECK,
133 MPVOID,MPVOID)) {
134 fInclDirs = TRUE;
135 fRecurse = FALSE;
136 WinSendDlgItemMsg(hwnd,ARCH_RECURSE,BM_SETCHECK,MPVOID,MPVOID);
137 }
138 else
139 fInclDirs = FALSE;
140 cmd = NULL;
141 if(fMove) {
142 if(fInclDirs || fRecurse)
143 cmd = arcdata->info->movewdirs;
144 else
145 cmd = arcdata->info->move;
146 if(!cmd || !*cmd)
147 cmd = arcdata->info->move;
148 }
149 if(!cmd || !*cmd) {
150 if(fInclDirs) {
151 cmd = arcdata->info->createwdirs;
152 if(!cmd || !*cmd)
153 cmd = arcdata->info->createrecurse;
154 }
155 else if(fRecurse) {
156 cmd = arcdata->info->createrecurse;
157 if(!cmd || !*cmd)
158 cmd = arcdata->info->createwdirs;
159 }
160 if(!cmd || !*cmd)
161 cmd = arcdata->info->create;
162 }
163 if(cmd)
164 WinSetDlgItemText(hwnd,ARCH_COMMAND,cmd);
165 }
166 break;
167 }
168 return 0;
169
170 case WM_COMMAND:
171 arcdata = (DIRCNRDATA *)WinQueryWindowPtr(hwnd,0);
172 if(!arcdata) {
173 DosBeep(50,100);
174 return 0;
175 }
176 switch(SHORT1FROMMP(mp1)) {
177 case DID_CANCEL:
178 arcdata->ret = 0;
179 WinDismissDlg(hwnd,0);
180 break;
181 case DID_OK:
182 {
183 CHAR s[CCHMAXPATH + 1];
184
185 *s = 0;
186 WinQueryDlgItemText(hwnd,ARCH_ARCNAME,CCHMAXPATH,s);
187 lstrip(rstrip(s));
188 if(*s) {
189 if(DosQueryPathInfo(s,
190 FIL_QUERYFULLNAME,
191 arcdata->arcname,
192 CCHMAXPATH))
193 strcpy(arcdata->arcname,s);
194 *s = 0;
195 WinQueryDlgItemText(hwnd,
196 ARCH_COMMAND,
197 256,
198 s);
199 if(*s) {
200 strcpy(arcdata->command,s);
201 *s = 0;
202 WinQueryDlgItemText(hwnd,
203 ARCH_MASKS,
204 256,
205 s);
206 *arcdata->mask.szMask = 0;
207 strcpy(arcdata->mask.szMask,s);
208 arcdata->ret = 1;
209 WinDismissDlg(hwnd,1);
210 break;
211 }
212 }
213 }
214 DosBeep(50,100);
215 break;
216
217 case IDM_HELP:
218 if(hwndHelp)
219 WinSendMsg(hwndHelp,
220 HM_DISPLAY_HELP,
221 MPFROM2SHORT(HELP_ARCHIVE,0),
222 MPFROMSHORT(HM_RESOURCEID));
223 break;
224
225 case ARCH_FIND:
226 if(arcdata->namecanchange) {
227
228 CHAR arcname[CCHMAXPATH],s[CCHMAXPATH],*p;
229
230 *s = 0;
231 WinQueryDlgItemText(hwnd,ARCH_ARCNAME,CCHMAXPATH,s);
232 lstrip(rstrip(s));
233 if(DosQueryPathInfo(s,
234 FIL_QUERYFULLNAME,
235 arcname,
236 CCHMAXPATH))
237 strcpy(arcname,s);
238 p = strrchr(arcname,'\\');
239 if(p) {
240 p++;
241 p = strrchr(arcname,'.');
242 }
243 if(!p &&
244 arcdata->info->ext &&
245 *arcdata->info->ext) {
246 strcat(arcname,"*.");
247 strcat(arcname,arcdata->info->ext);
248 }
249 if(export_filename(hwnd,arcname,FALSE))
250 WinSetDlgItemText(hwnd,ARCH_ARCNAME,arcname);
251 }
252 break;
253
254 case ARCH_SEE:
255 {
256 CHAR s[1001],*p;
257
258 *s = 0;
259 WinQueryDlgItemText(hwnd,ARCH_COMMAND,256,s);
260 lstrip(rstrip(s));
261 if(*s) {
262 p = strchr(s,' ');
263 if(p)
264 *p = 0;
265 ExecOnList(hwnd,s,WINDOWED | SEPARATEKEEP | MAXIMIZED | PROMPT,
266 NULL,NULL,
267 GetPString(IDS_ARCEXECHELPTEXT));
268 }
269 else
270 DosBeep(50,100);
271 }
272 break;
273 }
274 return 0;
275
276 case WM_CLOSE:
277 break;
278 }
279 return WinDefDlgProc(hwnd,msg,mp1,mp2);
280}
281
Note: See TracBrowser for help on using the repository browser.