source: trunk/dll/archive.c@ 123

Last change on this file since 123 was 123, checked in by root, 21 years ago

Rework lstrip/rstrip usage

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