source: trunk/dll/avv.c@ 122

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

Localize functions
Rework fixup usage

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