source: trunk/dll/avv.c@ 201

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

Drop unused

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