source: trunk/dll/archive.c@ 318

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

Drop obsoletes

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