home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
rtsi.com
/
2014.01.www.rtsi.com.tar
/
www.rtsi.com
/
OS9
/
OSK
/
APPS
/
dm14.lzh
/
unarc.c
< prev
Wrap
Text File
|
1996-07-24
|
8KB
|
239 lines
/* unarc.c unarchiver function for DISKMASTER v1.0 */
/* copyright (c) 1995 by Bob Devries */
/* email: bdevries@gil.ipswichcity.qld.gov.au */
#include <stdio.h>
#include <modes.h>
#include <strings.h>
#include <errno.h>
#include <direct.h>
#include <module.h>
#include "screen.h"
#include "diskmaster.h"
int
unarc(pos)
int pos;
{
int rewrite, success, x;
extern char **nameptr;
char *todir, *olddir, *unarccmd, *extension, *malloc();
char *ext, *tempdir;
mod_exec *modloadp(), *modp;
ext = malloc(28);
todir = malloc(80);
olddir = malloc(256);
unarccmd = malloc(256);
extension = rindex(nameptr[pos],'.');
strcpy(ext,extension);
for(x=0;x<=strlen(ext);x++) {
*(ext+x) = tolower(*(ext+x));
}
gotoxy(1,24);
cleol();
printf(" %cUnarchive %s to directory: ",7,nameptr[pos]);
success = lineinput(todir,80);
if(success == FAIL) {
free(todir);
free(olddir);
free(ext);
free(unarccmd);
commands();
return(FAIL);
}
getcwd(olddir,256);
if(*todir == '\0') {
rewrite = PASS;
printf("current directory.");
} else {
if(access(todir,S_IFDIR+S_IREAD+S_IWRITE) != 0) {
open_err(todir,errno);
free(todir);
free(olddir);
free(ext);
free(unarccmd);
commands();
return(PASS);
}
chdir(todir);
tempdir = malloc(256);
getcwd(tempdir,256);
if(strcmp(tempdir,olddir) == 0) {
rewrite = PASS;
} else {
rewrite = FAIL;
}
chdir(olddir);
free(tempdir);
}
if((strcmp(ext,".lzh") == 0) || (strcmp(ext,".lha") == 0)) {
if ((modp = modloadp("lha",0,NULL)) == NULL) {
error("Can't load command","LHA",errno);
return(FAIL);
}
strcpy(unarccmd,"lha -xw=");
if(rewrite == PASS) {
strcat(unarccmd,". ");
} else {
strcat(unarccmd,todir);
strcat(unarccmd," ");
}
strcat(unarccmd,nameptr[pos]);
strcat(unarccmd," >>>/nil");
gotoxy(1,24);
cleol();
printf(" Unarchiving %s to %s.",nameptr[pos],todir);
system(unarccmd);
free(todir);
free(olddir);
free(ext);
free(unarccmd);
commands();
munlink(modp);
return(rewrite);
} else if (strcmp(ext,".zoo") == 0) {
if ((modp = modloadp("zoo",0,NULL)) == NULL) {
error("Can't load command","ZOO",errno);
return(FAIL);
}
strcpy(unarccmd,"zoo -xq ");
if(rewrite != PASS) {
chdir(todir);
strcat(unarccmd,olddir);
strcat(unarccmd,"/");
}
strcat(unarccmd,nameptr[pos]);
strcat(unarccmd," >>>/nil");
gotoxy(1,24);
cleol();
printf(" Unarchiving %s to %s.",nameptr[pos],todir);
system(unarccmd);
chdir(olddir);
free(todir);
free(olddir);
free(ext);
free(unarccmd);
commands();
munlink(modp);
return(rewrite);
} else if (strcmp(ext,".zip") == 0) {
if ((modp = modloadp("unzip",0,NULL)) == NULL) {
error("Can't load command","UNZIP",errno);
return(FAIL);
}
strcpy(unarccmd,"unzip -xqq ");
if(rewrite != PASS) {
chdir(todir);
strcat(unarccmd,olddir);
strcat(unarccmd,"/");
}
strcat(unarccmd,nameptr[pos]);
strcat(unarccmd," >>>/nil");
gotoxy(1,24);
cleol();
printf(" Unarchiving %s to %s.",nameptr[pos],todir);
system(unarccmd);
chdir(olddir);
free(todir);
free(olddir);
free(ext);
free(unarccmd);
commands();
munlink(modp);
return(rewrite);
} else if(strcmp(ext,".gz") == 0) {
if ((modp = modloadp("gzip",0,NULL)) == NULL) {
error("Can't load command","GZIP",errno);
return(FAIL);
}
strcpy(unarccmd,"gzip -dq ");
if(rewrite != PASS) {
chdir(todir);
strcat(unarccmd,olddir);
strcat(unarccmd,"/");
}
strcat(unarccmd,nameptr[pos]);
strcat(unarccmd," >>>/nil");
gotoxy(1,24);
cleol();
printf(" Unarchiving %s to %d.",nameptr[pos],todir);
system(unarccmd);
chdir(olddir);
free(todir);
free(olddir);
free(ext);
free(unarccmd);
commands();
munlink(modp);
return(rewrite);
} else if(strcmp(ext,".ar") == 0) {
if ((modp = modloadp("ar2",0,NULL)) == NULL) {
error("Can't load command","AR2",errno);
return(FAIL);
}
strcpy(unarccmd,"ar2 -x ");
if(rewrite != PASS) {
chdir(todir);
strcat(unarccmd,olddir);
strcat(unarccmd,"/");
}
strcat(unarccmd,nameptr[pos]);
strcat(unarccmd," >>>/nil");
gotoxy(1,24);
cleol();
printf(" Unarchiving %s to %s.",nameptr[pos],todir);
system(unarccmd);
chdir(olddir);
free(todir);
free(olddir);
free(ext);
free(unarccmd);
commands();
munlink(modp);
return(rewrite);
} else if(strcmp(ext,".uue") == 0) {
if ((modp = modloadp("uudecode",0,NULL)) == NULL) {
error("Can't load command","UUDECODE",errno);
return(FAIL);
}
strcpy(unarccmd,"uudecode ");
if(rewrite != PASS) {
chdir(todir);
strcat(unarccmd,olddir);
strcat(unarccmd,"/");
}
strcat(unarccmd,nameptr[pos]);
strcat(unarccmd," >>>/nil");
gotoxy(1,24);
cleol();
printf(" Unarchiving %s to %s.",nameptr[pos],todir);
system(unarccmd);
chdir(olddir);
free(todir);
free(olddir);
free(ext);
free(unarccmd);
commands();
munlink(modp);
return(rewrite);
} else {
free(todir);
free(olddir);
free(ext);
free(unarccmd);
gotoxy(1,24);
cleol();
printf(" %c%s: Unknown archive type",7,nameptr[pos]);
sleep(2);
commands();
return(FAIL);
}
}
/* EOF unarc.c */