#1.1 0252 0252 vlst:!**c 0253 0253 vlnum:!i 0254 0254 pmain:(num:i;arg:[]*c;)i{( auto(opt$2:c=0); auto(a$2:*c); auto(n$2:i); auto(arctemp2$2:*c); if(<(num$1,3);{( printf("ARC - Archive utility, Version 5.21e, created on 10/30/91 at 14:30:21\n"); printf(" [ . . .]\n"); printf("Where:\t a = add files to archive\n"); printf("\t m = move files to archive\n"); printf("\t u = update files in archive\n"); printf("\t f = freshen files in archive\n"); printf("\t d = delete files from archive\n"); printf("\t x,e = extract files from archive\n"); printf("\t r = run files from archive\n"); printf("\t p = copy files from archive to"); printf(" standard output\n"); printf("\t l = list files in archive\n"); printf("\t v = verbose listing of files in archive\n"); printf("\t t = test archive integrity\n"); printf("\t c = convert entry to new packing method\n"); printf("\t b = retain backup copy of archive\n"); printf("\t s = suppress compression (store only)\n"); printf("\t w = suppress warning messages\n"); printf("\t n = suppress notes and comments\n"); printf("\t o = overwrite existing files when"); printf(" extracting\n"); printf("\t q = squash instead of crunching\n"); printf("\t g = Encrypt/decrypt archive entry\n"); printf("\nAdapted from MSDOS by Howard Chu\n"); return(1); };); =(arctemp,calloc(1,100)); if(!(=(arctemp2$2,getenv("ARCTEMP")));=(arctemp2$2,getenv("TMPDIR"));); if(arctemp2$2;{( strcpy(arctemp,arctemp2$2); =(n$2,strlen(arctemp)); if(!=([(arctemp,-(n$2,1)),CUTOFF);=([(arctemp,n$2),CUTOFF);); };); {( static(tempname$5:![]c="AXXXXXX"); strcat(arctemp,mktemp(tempname$5)); }; =(arctemp2$2,0); for(=(n$2,1);<(n$2,num$1);++(n$2);upper([(arg$1,n$2));); makefnam([(arg$1,2),".ARC",arcname); sprintf(newname,"%s.arc",arctemp); makefnam(".BAK",arcname,bakname); for(=(a$2,[(arg$1,1));->(a$2);++(a$2);{( if(index("AMUFDXEPLVTCR",->(a$2));{( if(opt$2;arcdie("Cannot mix %c and %c",opt$2,->(a$2));); =(opt$2,->(a$2)); }; if(==(->(a$2),'B');=(keepbak,1); if(==(->(a$2),'W');=(warn,0); if(==(->(a$2),'I');=(image,!(image)); if(==(->(a$2),'N');=(note,0); if(==(->(a$2),'O');=(overlay,1); if(==(->(a$2),'G');{( =(password,+(a$2,1)); while(->(a$2);++(a$2);); --(a$2); }; if(==(->(a$2),'S');=(nocomp,1); if(==(->(a$2),'K');=(kludge,1); if(==(->(a$2),'Q');=(dosquash,1); if(||(==(->(a$2),'-'),==(->(a$2),'/'));;arcdie("%c is an unknown command",->(a$2));););););););););););); };); if(!(opt$2);arcdie("I have nothing to do!");); =(lnum,-(num$1,3)); =(lst,#@(PPCHAR,calloc(?(==(lnum,0),1,lnum),sizeof(PCHAR)))); for(=(n$2,3);<(n$2,num$1);++(n$2);=([(lst,-(n$2,3)),[(arg$1,n$2));); for(=(n$2,0);<(n$2,lnum);;{( if(==(->([(lst,n$2)),'@');expandlst(n$2);++(n$2);); };); switch(opt$2;{( case('A','M','U','F'); addarc(lnum,lst,==(opt$2,'M'),==(opt$2,'U'),==(opt$2,'F')); break; case('D'); delarc(lnum,lst); break; case('E','X','P'); extarc(lnum,lst,==(opt$2,'P')); break; case('V'); =(bose,1); case('L'); lstarc(lnum,lst); break; case('T'); tstarc(); break; case('C'); cvtarc(lnum,lst); break; case('R'); runarc(lnum,lst); break; default; arcdie("I don't know how to do %c yet!",opt$2); };); return(nerrs); }; ; 0250 0250 pexpandlst:!(n:i;)i{( auto(lf$2:*"FILE"); auto(buf$2:[100]c); auto(x$2:i); auto(p$2:*c=+([(lst,n$1),1)); if(->(p$2);{( makefnam(p$2,".CMD",buf$2); if(!(=(lf$2,fopen(buf$2,"r")));arcdie("Cannot read list of files in %s",buf$2);); };=(lf$2, &([(_streams,0)));); for(=(x$2,+(n$1,1));<(x$2,lnum);++(x$2);=([(lst,-(x$2,1)),[(lst,x$2));); --(lnum); while(>(fscanf(lf$2,"%99s",buf$2),0);{( if(!(=(lst,#@(PPCHAR,realloc(lst,*(+(lnum,1),sizeof(PCHAR))))));arcdie("too many file references");); =([(lst,lnum),malloc(+(strlen(buf$2),1))); strcpy([(lst,lnum),buf$2); ++(lnum); };); if(!=(lf$2, &([(_streams,0)));fclose(lf$2);); }; ;