source: trunk/dll/avv.c@ 250

Last change on this file since 250 was 250, checked in by root, 20 years ago

rewrite_archiverbb2: avoid dereferencing null signature
ArcReviewDlgProc: ensure signature allocated

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 29.6 KB
Line 
1
2/***********************************************************************
3
4 $Id: avv.c 250 2005-08-16 15:12:10Z root $
5
6 archiver.bb2 editor
7
8 Copyright (c) 1993-98 M. Kimes
9 Copyright (c) 2004, 2005 Steven H.Levine
10
11 Archive containers
12
13 31 Jul 04 SHL ArcReviewDlgProc: correct nameis... decodes
14 01 Aug 04 SHL Localize functions
15 01 Aug 04 SHL Rework fixup usage
16 06 Jun 05 SHL Drop unused
17 14 Aug 05 SHL rewrite_archiverbb2: avoid dereferencing null signature
18 14 Aug 05 SHL ArcReviewDlgProc: ensure signature allocated
19
20***********************************************************************/
21
22#define INCL_DOS
23#define INCL_WIN
24#include <os2.h>
25
26#include <stdlib.h>
27#include <stdio.h>
28#include <stdarg.h>
29#include <string.h>
30#include <ctype.h>
31#include <time.h>
32
33#include "fm3dll.h"
34#include "fm3dlg.h"
35#include "version.h"
36#include "fm3str.h"
37
38#pragma data_seg(DATA1)
39#pragma alloc_text(AVV,EditArchiverData,xstrdup,xstrdup_from_window)
40#pragma alloc_text(AVV,get_int_from_window,get_int2_from_window)
41#pragma alloc_text(AVV,get_long_from_window,get_int3_from_window)
42#pragma alloc_text(AVV,get_int4_from_window)
43
44static PSZ checkfile(PSZ file,INT *error);
45static INT check_archiver (HWND hwnd,ARC_TYPE *info);
46static INT get_int_from_window (HWND hwnd,USHORT id);
47static LONG get_long_from_window (HWND hwnd,USHORT id);
48static PSZ nonull(PSZ a);
49static PSZ xstrdup(PSZ pszDest,PSZ pszSrc);
50static PSZ xstrdup_from_window(HWND hwnd,USHORT id,PSZ pszDest);
51
52APIRET EditArchiverData(HWND hwnd,DIRCNRDATA *arc)
53{
54 ARCDUMP ad;
55 FILE *fp;
56 HFILE oldstdout,newstdout;
57 APIRET ret;
58 CHAR arctemp[33];
59
60 if(!arc)
61 return 0;
62 if(!arc->info) {
63 if(!WinDlgBox(HWND_DESKTOP,
64 hwnd,
65 SBoxDlgProc,
66 FM3ModHandle,
67 ASEL_FRAME,
68 (PVOID)&arc->info) ||
69 !arc->info) /* we blew it */
70 return 0;
71 }
72 if(*arc->arcname) {
73 sprintf(arctemp,
74 "%s.%03x",
75 ArcTempRoot,
76 (clock() & 4095L));
77 DosForceDelete(arctemp);
78 fp = fopen(arctemp,"w");
79 if(fp) {
80 newstdout = -1;
81 if(DosDupHandle(fileno(stdout),&newstdout))
82 DosBeep(50,100);
83 oldstdout = fileno(stdout);
84 DosDupHandle(fileno(fp),&oldstdout);
85 runemf2(SEPARATE | INVISIBLE | FULLSCREEN | BACKGROUND | WAIT,
86 HWND_DESKTOP,
87 NullStr,
88 NULL,
89 "%s %s%s%s",
90 arc->info->list,
91 (strchr(arc->arcname,' ')) ? "\"" : NullStr,
92 arc->arcname,
93 (strchr(arc->arcname,' ')) ? "\"" : NullStr);
94 oldstdout = fileno(stdout);
95 DosDupHandle(newstdout,&oldstdout);
96 DosClose(newstdout);
97 fclose(fp);
98 }
99 }
100 memset(&ad,0,sizeof(ARCDUMP));
101 ad.info = arc->info;
102 if(*arc->arcname) {
103 strcpy(ad.listname,arctemp);
104 strcpy(ad.arcname,arc->arcname);
105 }
106 ret = WinDlgBox(HWND_DESKTOP,
107 hwnd,
108 ArcReviewDlgProc,
109 FM3ModHandle,
110 AD_FRAME,
111 MPFROMP(&ad));
112 if(*arc->arcname)
113 DosForceDelete(arctemp);
114 return ret;
115}
116
117
118static PSZ xstrdup(PSZ a,PSZ b)
119{
120 if(a)
121 free(a);
122 if(b &&
123 *b)
124 a = strdup(b);
125 else
126 a = NULL;
127 return a;
128}
129
130
131static PSZ xstrdup_from_window(HWND hwnd,USHORT id,PSZ pszDest)
132{
133 char sz[257] = "";
134
135 WinQueryDlgItemText(hwnd,
136 id,
137 255,
138 sz);
139 pszDest = xstrdup(pszDest,sz);
140 return pszDest;
141}
142
143
144static INT get_int_from_window(HWND hwnd,USHORT id)
145{
146 char s[257] = "";
147
148 WinQueryDlgItemText(hwnd,id,255,s);
149 return atoi(s);
150}
151
152
153static INT get_int2_from_window(HWND hwnd,USHORT id)
154{
155 char s[257] = "",*p;
156
157 WinQueryDlgItemText(hwnd,id,255,s);
158 p = strchr(s,',');
159 if(p)
160 p++;
161 return (p) ? atoi(p) : 0;
162}
163
164
165INT get_int3_from_window (HWND hwnd,USHORT id)
166{
167 char s[257] = "",*p;
168
169 WinQueryDlgItemText(hwnd,id,255,s);
170 p = strchr(s,',');
171 if(p) {
172 p++;
173 p = strchr(p,',');
174 if(p)
175 p++;
176 }
177 return (p) ? atoi(p) : 0;
178}
179
180
181INT get_int4_from_window (HWND hwnd,USHORT id)
182{
183 char s[257] = "",*p;
184
185 WinQueryDlgItemText(hwnd,id,255,s);
186 p = strchr(s,',');
187 if(p) {
188 p++;
189 p = strchr(p,',');
190 if(p) {
191 p++;
192 p = strchr(p,',');
193 if(p)
194 p++;
195 }
196 }
197 return (p) ? atoi(p) : 0;
198}
199
200
201LONG get_long_from_window (HWND hwnd,USHORT id)
202{
203 char s[257] = "";
204
205 WinQueryDlgItemText(hwnd,id,255,s);
206 return atol(s);
207}
208
209
210#pragma alloc_text (AVV2,nonull,rewrite_archiverbb2,checkfile)
211
212// nonull - convert NULL pointer to empty string
213
214static PSZ nonull(PSZ psz)
215{
216 if(!psz)
217 psz = NullStr;
218 return psz;
219}
220
221
222VOID rewrite_archiverbb2 (PSZ archiverbb2)
223{
224 FILE *fp;
225 INT counter = 0;
226 ARC_TYPE *info;
227 CHAR s[258];
228 CHAR *p;
229
230 if(!arcsighead) {
231 saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
232 HWND_DESKTOP,
233 GetPString(IDS_SAYWHATTEXT),
234 GetPString(IDS_NOINFOTOSAVETEXT));
235 return;
236 }
237 if(!archiverbb2 || !*archiverbb2) {
238 saymsg(MB_ENTER | MB_ICONASTERISK,
239 HWND_DESKTOP,
240 GetPString(IDS_NOTETEXT),
241 GetPString(IDS_SAVEARCBB2TEXT));
242 archiverbb2 = GetPString(IDS_ARCHIVERBB2);
243 }
244 p = strrchr(archiverbb2,'.'); /* save a backup */
245 if(p && !stricmp(p,".BB2")) {
246 strcpy(p,".BAK");
247 DosDelete(archiverbb2);
248 strcpy(s,archiverbb2);
249 strcpy(p,".BB2");
250 DosMove(archiverbb2,s);
251 }
252 fp = fopen(archiverbb2,"w");
253 if(fp) {
254 fprintf(fp,"%u\n",NUMLINES);
255 fprintf(fp,
256 ";\n; %s file written by FM/2 v%d.%02d\n;\n",
257 GetPString(IDS_ARCHIVERBB2),
258 VERMAJOR,
259 VERMINOR);
260 fputs(GetPString(IDS_ARCHIVERBB2TEXT),fp);
261 info = arcsighead;
262 while(info) {
263 fprintf(fp,
264 GetPString(IDS_ENTRYCNTRTEXT),
265 ++counter);
266 if(info->id)
267 fprintf(fp,
268 " (%s)\n;\n",
269 info->id);
270 fprintf(fp,
271 "%s\n%s\n%ld\n%s\n",
272 nonull(info->id),
273 nonull(info->ext),
274 info->file_offset,
275 nonull(info->list));
276 fprintf(fp,
277 "%s\n%s\n%s\n%s\n%s\n%s\n",
278 nonull(info->extract),
279 nonull(info->exwdirs),
280 nonull(info->test),
281 nonull(info->create),
282 nonull(info->createwdirs),
283 nonull(info->createrecurse));
284 fprintf(fp,
285 "%s\n%s\n%s\n",
286 nonull(info->move),
287 nonull(info->movewdirs),
288 nonull(info->delete));
289 fprintf(fp,
290 "%s\n%s\n%s\n%d\n%d\n%d,%d\n%d\n%d,%lu,%lu,%lu\n",
291 fixup(info->signature,
292 s,
293 sizeof(s),
294 info->signature ? strlen(info->signature) : 0),
295 nonull(info->startlist),
296 nonull(info->endlist),
297 info->osizepos,
298 info->nsizepos,
299 info->fdpos,
300 info->datetype,
301 info->fdflds,
302 info->fnpos,
303 info->nameislast,
304 info->nameisnext,
305 info->nameisfirst);
306 fprintf(fp,";\n");
307 info = info->next;
308 }
309 fclose(fp);
310 }
311}
312
313
314static PSZ checkfile(PSZ file,INT *error)
315{
316 CHAR *p,*pp = NULL;
317 INT ret;
318 ULONG apptype;
319
320 if(!file || !*file) {
321 *error = 3;
322 return NULL;
323 }
324 pp = strchr(file,' ');
325 if(pp)
326 *pp = 0;
327 p = searchpath(file);
328 if(!p || !*p)
329 *error = 1;
330 else {
331 ret = (INT)DosQAppType(p,&apptype);
332 if(ret)
333 *error = -1;
334 else {
335 apptype &= (~FAPPTYP_32BIT);
336 if(!apptype ||
337 (apptype == FAPPTYP_NOTWINDOWCOMPAT) ||
338 (apptype == FAPPTYP_WINDOWCOMPAT) ||
339 (apptype & FAPPTYP_BOUND) ||
340 (apptype & FAPPTYP_WINDOWAPI) ||
341 (apptype & FAPPTYP_DOS)) {
342 *error = 0;
343 }
344 else
345 *error = 2;
346 }
347 }
348 if(pp)
349 *pp = ' ';
350 return p;
351}
352
353#pragma alloc_text (AVV3,check_archiver,ArcReviewDlgProc)
354
355static INT check_archiver(HWND hwnd,ARC_TYPE *info)
356{
357 BOOL fStart = FALSE,fEnd = FALSE,fNpos = FALSE;
358 INT List = 0,Create = 0,Extract = 0;
359 static PSZ aerrors[3];
360
361 aerrors[0] = GetPString(IDS_STARTLISTEMPTYTEXT);
362 aerrors[1] = GetPString(IDS_ENDLISTEMPTYTEXT);
363 aerrors[2] = GetPString(IDS_BOGUSNAMETEXT);
364 if(!info->startlist || !*info->startlist)
365 fStart = TRUE;
366 if(!info->endlist || !*info->endlist)
367 fEnd = TRUE;
368 if(info->fnpos > 50 || info->fnpos < -1)
369 fNpos = TRUE;
370 checkfile(info->list,&List);
371 checkfile(info->create,&Create);
372 checkfile(info->extract,&Extract);
373 if(!fStart && !fEnd && !fNpos && !List && !Create && !Extract)
374 return 1;
375 saymsg(MB_ENTER | MB_ICONASTERISK,
376 hwnd,
377 GetPString(IDS_WARNINGSTEXT),
378 GetPString(IDS_AVVCHK1TEXT),
379 (fStart) ? aerrors[0] : NullStr,
380 (fEnd) ? aerrors[1] : NullStr,
381 (fNpos) ? aerrors[2] : NullStr,
382 (List == 1) ?
383 GetPString(IDS_AVVCHK2TEXT) :
384 (List == -1) ?
385 GetPString(IDS_AVVCHK3TEXT) :
386 (List == 2) ?
387 GetPString(IDS_AVVCHK4TEXT) :
388 (List == 3) ?
389 GetPString(IDS_AVVCHK5TEXT) :
390 NullStr,
391 (Create == 1) ?
392 GetPString(IDS_AVVCHK6TEXT) :
393 (Create == -1) ?
394 GetPString(IDS_AVVCHK7TEXT) :
395 (Create == 2) ?
396 GetPString(IDS_AVVCHK8TEXT) :
397 (Create == 3) ?
398 GetPString(IDS_AVVCHK9TEXT) :
399 NullStr,
400 (Extract == 1) ?
401 GetPString(IDS_AVVCHK10TEXT) :
402 (Extract == -1) ?
403 GetPString(IDS_AVVCHK11TEXT) :
404 (Extract == 2) ?
405 GetPString(IDS_AVVCHK12TEXT) :
406 (Extract == 3) ?
407 GetPString(IDS_AVVCHK13TEXT) :
408 NullStr);
409 if(List || Extract)
410 return 0;
411 return 1;
412}
413
414
415MRESULT EXPENTRY ArcReviewDlgProc(HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
416{
417 ARCDUMP *admp;
418 CHAR s[256];
419 SHORT sSelect;
420
421 if(msg != WM_INITDLG)
422 admp = (ARCDUMP *)WinQueryWindowPtr(hwnd,0);
423
424 switch(msg) {
425 case WM_INITDLG:
426 admp = (ARCDUMP *)mp2;
427 if(!admp || !admp->info) {
428 WinDismissDlg(hwnd,0);
429 return 0;
430 }
431
432 WinSetWindowPtr(hwnd,0,mp2);
433
434 WinSendDlgItemMsg(hwnd,
435 AD_LISTBOX,
436 LM_DELETEALL,
437 MPVOID,
438 MPVOID);
439 for(sSelect = AD_ID;sSelect < AD_ADDWPATHS + 1;sSelect++)
440 {
441 WinSendDlgItemMsg(hwnd,
442 sSelect,
443 EM_SETTEXTLIMIT,
444 MPFROM2SHORT(sizeof(s) - 1,0),
445 MPVOID);
446 }
447 if (admp->info->id) {
448 WinSetDlgItemText(hwnd,
449 AD_ID,
450 admp->info->id);
451 }
452 if (admp->info->ext) {
453 WinSetDlgItemText(hwnd,
454 AD_EXT,
455 admp->info->ext);
456 }
457 sprintf(s,
458 "%ld",
459 admp->info->file_offset);
460 WinSetDlgItemText(hwnd,
461 AD_SIGPOS,
462 s);
463 if (admp->info->signature) {
464 WinSetDlgItemText(hwnd,
465 AD_SIG,
466 fixup(admp->info->signature,
467 s,
468 sizeof(s),
469 strlen(admp->info->signature)));
470 }
471 if (admp->info->startlist) {
472 WinSetDlgItemText(hwnd,
473 AD_STARTLIST,
474 admp->info->startlist);
475 }
476 if (admp->info->endlist) {
477 WinSetDlgItemText(hwnd,
478 AD_ENDLIST,
479 admp->info->endlist);
480 }
481 if (admp->info->list) {
482 WinSetDlgItemText(hwnd,
483 AD_LIST,
484 admp->info->list);
485 }
486 sprintf(s,
487 "%d,%d,%d,%d",
488 admp->info->fnpos,
489 admp->info->nameislast,
490 admp->info->nameisnext,
491 admp->info->nameisfirst);
492 WinSetDlgItemText(hwnd,AD_FNAMEPOS,s);
493 sprintf(s,"%d",admp->info->osizepos);
494 WinSetDlgItemText(hwnd,AD_OLDSZ,s);
495 sprintf(s,"%d",admp->info->nsizepos);
496 WinSetDlgItemText(hwnd,AD_NEWSZ,s);
497 sprintf(s,"%d,%d",admp->info->fdpos,admp->info->datetype);
498 WinSetDlgItemText(hwnd,AD_DATEPOS,s);
499 sprintf(s,"%d",admp->info->fdflds);
500 WinSetDlgItemText(hwnd,AD_NUMDATEFLDS,s);
501 if(admp->info->extract)
502 WinSetDlgItemText(hwnd,AD_EXTRACT,admp->info->extract);
503 if(admp->info->exwdirs)
504 WinSetDlgItemText(hwnd,AD_WDIRS,admp->info->exwdirs);
505 if(admp->info->test)
506 WinSetDlgItemText(hwnd,AD_TEST,admp->info->test);
507 if(admp->info->create)
508 WinSetDlgItemText(hwnd,AD_ADD,admp->info->create);
509 if(admp->info->move)
510 WinSetDlgItemText(hwnd,AD_MOVE,admp->info->move);
511 if(admp->info->delete)
512 WinSetDlgItemText(hwnd,AD_DELETE,admp->info->delete);
513 if(admp->info->createrecurse)
514 WinSetDlgItemText(hwnd,AD_ADDRECURSE,admp->info->createrecurse);
515 if(admp->info->createwdirs)
516 WinSetDlgItemText(hwnd,AD_ADDWPATHS,admp->info->createwdirs);
517 if(admp->info->movewdirs)
518 WinSetDlgItemText(hwnd,AD_MOVEWPATHS,admp->info->movewdirs);
519
520 PostMsg(hwnd,
521 UM_SETUP,
522 MPVOID,
523 MPVOID);
524 break; // WM_INITDLG
525
526
527 case UM_SETUP:
528 if(admp->listname && *admp->listname) {
529
530 FILE *fp;
531
532 fp = fopen(admp->listname,"r");
533 if(!fp) {
534 WinSendDlgItemMsg(hwnd,
535 AD_LISTBOX,
536 LM_INSERTITEM,
537 MPFROM2SHORT(LIT_END,0),
538 MPFROMP(GetPString(IDS_CANTOPENFILETEXT)));
539 }
540 else {
541 while(!feof(fp)) {
542 if(!fgets(s,sizeof(s),fp)) break;
543 stripcr(s);
544 WinSendDlgItemMsg(hwnd,
545 AD_LISTBOX,
546 LM_INSERTITEM,
547 MPFROM2SHORT(LIT_END,0),
548 MPFROMP(s));
549 }
550 fclose(fp);
551 }
552 }
553 else {
554 WinSendDlgItemMsg(hwnd,
555 AD_LISTBOX,
556 LM_INSERTITEM,
557 MPFROM2SHORT(LIT_END,0),
558 MPFROMP(GetPString(IDS_NOTAPPLICABLETEXT)));
559 }
560 check_archiver(hwnd,admp->info);
561 return 0;
562
563 case WM_ADJUSTWINDOWPOS:
564 PostMsg(hwnd,
565 UM_SETDIR,
566 MPVOID,
567 MPVOID);
568 break;
569
570 case UM_SETDIR:
571 PaintRecessedWindow(WinWindowFromID(hwnd,AD_HELP),
572 (HPS)0,
573 FALSE,
574 TRUE);
575 return 0;
576
577 case WM_CONTROL:
578 switch(SHORT1FROMMP(mp1)) {
579 case AD_LISTBOX:
580 switch(SHORT2FROMMP(mp1)) {
581 case LN_ENTER:
582 for(sSelect = 0;sSelect < 10;sSelect++)
583 WinSetDlgItemText(hwnd,AD_FLD1 + sSelect,NullStr);
584 if(admp->listname) {
585 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,
586 AD_LISTBOX,
587 LM_QUERYSELECTION,
588 MPVOID,
589 MPVOID);
590 WinSendDlgItemMsg(hwnd,
591 AD_LISTBOX,
592 LM_QUERYITEMTEXT,
593 MPFROM2SHORT(sSelect,255),
594 MPFROMP(s));
595 if(*s) {
596
597 PSZ p;
598 PSZ pp;
599
600 p = s;
601 for(sSelect = 0;sSelect < 10;sSelect++) {
602 pp = p;
603 while(*pp == ' ' || *pp == '\t')
604 pp++;
605 if(!*pp)
606 break;
607 p = pp;
608 while(*p && (*p != ' ' && *p != '\t'))
609 p++;
610 if(*p)
611 *p++ = 0;
612 WinSetDlgItemText(hwnd,
613 AD_FLD1 + sSelect,
614 pp);
615 }
616 }
617 else
618 DosBeep(50,100);
619 }
620 else
621 DosBeep(50,100);
622 break;
623
624 case LN_KILLFOCUS:
625 WinSetDlgItemText(hwnd,
626 AD_HELP,
627 NullStr);
628 break;
629
630 case LN_SETFOCUS:
631 WinSetDlgItemText(hwnd,
632 AD_HELP,
633 GetPString(IDS_TEXTARCPRODUCEDTEXT));
634 break;
635 }
636 break;
637
638 case AD_ID:
639 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
640 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
641 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
642 WinSetDlgItemText(hwnd,AD_HELP,
643 GetPString(IDS_ADIDTEXT));
644 break;
645
646 case AD_ADD:
647 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
648 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
649 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
650 WinSetDlgItemText(hwnd,AD_HELP,
651 GetPString(IDS_ADADDTEXT));
652 break;
653
654 case AD_MOVE:
655 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
656 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
657 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
658 WinSetDlgItemText(hwnd,AD_HELP,
659 GetPString(IDS_ADMOVETEXT));
660 break;
661
662 case AD_EXT:
663 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
664 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
665 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
666 WinSetDlgItemText(hwnd,AD_HELP,
667 GetPString(IDS_ADEXTTEXT));
668 break;
669
670 case AD_EXTRACT:
671 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
672 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
673 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
674 WinSetDlgItemText(hwnd,AD_HELP,
675 GetPString(IDS_ADEXTRACTTEXT));
676 break;
677
678 case AD_WDIRS:
679 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
680 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
681 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
682 WinSetDlgItemText(hwnd,AD_HELP,
683 GetPString(IDS_ADWDIRSTEXT));
684 break;
685
686 case AD_SIG:
687 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
688 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
689 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
690 WinSetDlgItemText(hwnd,AD_HELP,
691 GetPString(IDS_ADSIGTEXT));
692 break;
693
694 case AD_LIST:
695 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
696 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
697 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
698 WinSetDlgItemText(hwnd,AD_HELP,
699 GetPString(IDS_ADLISTTEXT));
700 break;
701
702 case AD_TEST:
703 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
704 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
705 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
706 WinSetDlgItemText(hwnd,AD_HELP,
707 GetPString(IDS_ADTESTTEXT));
708 break;
709
710 case AD_ADDWPATHS:
711 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
712 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
713 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
714 WinSetDlgItemText(hwnd,AD_HELP,
715 GetPString(IDS_ADADDWPATHSTEXT));
716 break;
717
718 case AD_MOVEWPATHS:
719 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
720 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
721 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
722 WinSetDlgItemText(hwnd,AD_HELP,
723 GetPString(IDS_ADMOVEWPATHSTEXT));
724 break;
725
726 case AD_ADDRECURSE:
727 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
728 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
729 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
730 WinSetDlgItemText(hwnd,AD_HELP,
731 GetPString(IDS_ADADDRECURSETEXT));
732 break;
733
734 case AD_DELETE:
735 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
736 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
737 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
738 WinSetDlgItemText(hwnd,AD_HELP,
739 GetPString(IDS_ADDELETETEXT));
740 break;
741
742 case AD_SIGPOS:
743 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
744 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
745 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
746 WinSetDlgItemText(hwnd,AD_HELP,
747 GetPString(IDS_ADSIGPOSTEXT));
748 break;
749
750 case AD_FNAMEPOS:
751 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
752 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
753 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
754 WinSetDlgItemText(hwnd,AD_HELP,
755 GetPString(IDS_ADFNAMEPOSTEXT));
756 break;
757
758 case AD_OLDSZ:
759 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
760 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
761 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
762 WinSetDlgItemText(hwnd,AD_HELP,
763 GetPString(IDS_ADOLDSZTEXT));
764 break;
765
766 case AD_NUMDATEFLDS:
767 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
768 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
769 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
770 WinSetDlgItemText(hwnd,AD_HELP,
771 GetPString(IDS_ADNUMDATEFLDSTEXT));
772 break;
773
774 case AD_DATEPOS:
775 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
776 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
777 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
778 WinSetDlgItemText(hwnd,AD_HELP,
779 GetPString(IDS_ADDATEPOSTEXT));
780 break;
781
782 case AD_NEWSZ:
783 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
784 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
785 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
786 WinSetDlgItemText(hwnd,AD_HELP,
787 GetPString(IDS_ADNEWSZTEXT));
788 break;
789
790 case AD_STARTLIST:
791 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
792 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
793 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
794 WinSetDlgItemText(hwnd,AD_HELP,
795 GetPString(IDS_ADSTARTLISTTEXT));
796 break;
797
798 case AD_ENDLIST:
799 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
800 WinSetDlgItemText(hwnd,AD_HELP,NullStr);
801 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
802 WinSetDlgItemText(hwnd,AD_HELP,
803 GetPString(IDS_ADENDLISTTEXT));
804 break;
805
806 }
807 return 0;
808
809 case WM_COMMAND:
810 switch(SHORT1FROMMP(mp1)) {
811 case AD_SEEEXTRACTOR:
812 case AD_SEEADDER:
813 {
814 static CHAR tempargs[1026];
815
816 *tempargs = 0;
817 if(SHORT1FROMMP(mp1) == AD_SEEADDER)
818 WinQueryDlgItemText(hwnd,
819 AD_ADD,
820 255,
821 tempargs);
822 else
823 WinQueryDlgItemText(hwnd,
824 AD_EXTRACT,
825 255,
826 tempargs);
827 if(!*tempargs)
828 saymsg(MB_CANCEL,
829 hwnd,
830 GetPString(IDS_BZZZTTEXT),
831 GetPString(IDS_NEEDENTRYTEXT));
832 else {
833
834 PSZ p;
835
836 lstrip(tempargs);
837 p = strchr(tempargs,' ');
838 if(p)
839 *p = 0;
840 {
841 EXECARGS ex;
842
843 ex.flags = SEPARATEKEEP | WINDOWED | MAXIMIZED;
844 ex.commandline = tempargs;
845 *ex.path = 0;
846 *ex.environment = 0;
847 if(WinDlgBox(HWND_DESKTOP,
848 hwnd,
849 CmdLineDlgProc,
850 FM3ModHandle,
851 EXEC_FRAME,
852 &ex) == 1)
853 runemf2(ex.flags,
854 hwnd,
855 NULL,
856 (*ex.environment) ? ex.environment : NULL,
857 "%s",
858 tempargs);
859 }
860 }
861 }
862 return 0;
863
864 case DID_OK:
865 admp->info->startlist = xstrdup_from_window(hwnd,AD_STARTLIST,admp->info->startlist);
866 admp->info->endlist = xstrdup_from_window(hwnd,AD_ENDLIST,admp->info->endlist);
867 admp->info->id = xstrdup_from_window(hwnd,AD_ID,admp->info->id);
868 admp->info->create = xstrdup_from_window(hwnd,AD_ADD,admp->info->create);
869 admp->info->createwdirs = xstrdup_from_window(hwnd,AD_ADDWPATHS,admp->info->createwdirs);
870 admp->info->createrecurse = xstrdup_from_window(hwnd,AD_ADDRECURSE,admp->info->createrecurse);
871 admp->info->movewdirs = xstrdup_from_window(hwnd,AD_MOVEWPATHS,admp->info->movewdirs);
872 admp->info->move = xstrdup_from_window(hwnd,AD_MOVE,admp->info->move);
873 admp->info->delete = xstrdup_from_window(hwnd,AD_DELETE,admp->info->delete);
874 admp->info->test = xstrdup_from_window(hwnd,AD_TEST,admp->info->test);
875 admp->info->extract = xstrdup_from_window(hwnd,AD_EXTRACT,admp->info->extract);
876 admp->info->exwdirs = xstrdup_from_window(hwnd,AD_WDIRS,admp->info->exwdirs);
877 admp->info->ext = xstrdup_from_window(hwnd,AD_EXT,admp->info->ext);
878 admp->info->signature = xstrdup_from_window(hwnd,
879 AD_SIG,
880 admp->info->signature);
881 literal(admp->info->signature);
882 admp->info->list = xstrdup_from_window(hwnd,
883 AD_LIST,
884 admp->info->list);
885 admp->info->file_offset = get_long_from_window(hwnd,AD_SIGPOS);
886 admp->info->osizepos = get_int_from_window(hwnd,AD_OLDSZ);
887 admp->info->nsizepos = get_int_from_window(hwnd,AD_NEWSZ);
888 admp->info->fdpos = get_int_from_window(hwnd,AD_DATEPOS);
889 admp->info->datetype = get_int2_from_window(hwnd,AD_DATEPOS);
890 admp->info->fdflds = get_int_from_window(hwnd,AD_NUMDATEFLDS);
891 admp->info->fnpos = get_int_from_window(hwnd,AD_FNAMEPOS);
892 admp->info->nameislast = (get_int2_from_window(hwnd,AD_FNAMEPOS)) ? TRUE : FALSE;
893 admp->info->nameisnext = (get_int3_from_window(hwnd,AD_FNAMEPOS)) ? TRUE : FALSE;
894 admp->info->nameisfirst = (get_int4_from_window(hwnd,AD_FNAMEPOS)) ? TRUE : FALSE;
895 {
896 INT ret;
897
898 ret = check_archiver(hwnd,admp->info);
899 if(saymsg(MB_YESNO,
900 hwnd,
901 GetPString(IDS_ADCHANGESINMEMTEXT),
902 GetPString(IDS_ADREWRITETEXT),
903 (!ret) ?
904 GetPString(IDS_NOTRECOMMENDTEXT) :
905 NullStr) ==
906 MBID_YES) {
907
908 PSZ ab2;
909
910 ab2 = searchpath(GetPString(IDS_ARCHIVERBB2));
911 rewrite_archiverbb2(ab2);
912 }
913 }
914 WinDismissDlg(hwnd,TRUE);
915 return 0;
916
917 case IDM_HELP:
918 if(hwndHelp)
919 WinSendMsg(hwndHelp,
920 HM_DISPLAY_HELP,
921 MPFROM2SHORT(HELP_EDITARC,0),
922 MPFROMSHORT(HM_RESOURCEID));
923 break;
924
925 case DID_CANCEL:
926 WinDismissDlg(hwnd,FALSE);
927 return 0;
928
929 case AD_TOSTART:
930 if(admp->listname) {
931 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,
932 AD_LISTBOX,
933 LM_QUERYSELECTION,
934 MPVOID,
935 MPVOID);
936 WinSendDlgItemMsg(hwnd,
937 AD_LISTBOX,
938 LM_QUERYITEMTEXT,
939 MPFROM2SHORT(sSelect,255),
940 MPFROMP(s));
941 if(*s)
942 WinSetDlgItemText(hwnd,
943 AD_STARTLIST,
944 s);
945 else
946BooBoo:
947 saymsg(MB_ENTER,
948 hwnd,
949 GetPString(IDS_OOPSTEXT),
950 GetPString(IDS_SELECTFROMLISTTEXT));
951 }
952 else
953 DosBeep(50,100);
954 return 0;
955
956 case AD_TOEND:
957 if(admp->listname) {
958 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,
959 AD_LISTBOX,
960 LM_QUERYSELECTION,
961 MPVOID,
962 MPVOID);
963 WinSendDlgItemMsg(hwnd,
964 AD_LISTBOX,
965 LM_QUERYITEMTEXT,
966 MPFROM2SHORT(sSelect,255),
967 MPFROMP(s));
968 if(*s)
969 WinSetDlgItemText(hwnd,
970 AD_ENDLIST,
971 s);
972 else
973 goto BooBoo;
974 }
975 else
976 DosBeep(50,100);
977 return 0;
978 }
979 return 0;
980 }
981 return WinDefDlgProc(hwnd,msg,mp1,mp2);
982}
983
Note: See TracBrowser for help on using the repository browser.