source: trunk/dll/archive.c@ 378

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

Use RuntimeError2

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