home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / APPS / dm.lzh / unarc.c < prev   
Text File  |  1995-03-31  |  7KB  |  207 lines

  1. /* unarc.c unarchiver function for DISKMASTER v1.0 */
  2. /* copyright (c) 1995 by Bob Devries               */
  3. /* email: bdevries@gil.ipswichcity.qld.gov.au      */
  4.  
  5. #include <stdio.h>
  6. #include <modes.h>
  7. #include <strings.h>
  8. #include <errno.h>
  9. #include <direct.h>
  10. #include "screen.h"
  11. #include "diskmaster.h"
  12.  
  13. int
  14. unarc(pos)
  15. int pos;
  16. {
  17.         int rewrite, success, x;
  18.         extern char **nameptr;
  19.         char *todir, *olddir, *unarccmd, *extension, *malloc();
  20.         char *ext, *tempdir;
  21.     
  22.         ext = malloc(28);
  23.         todir = malloc(80);
  24.         olddir = malloc(256);
  25.         unarccmd = malloc(256);
  26.         extension = rindex(nameptr[pos],'.');
  27.         strcpy(ext,extension);
  28.         for(x=0;x<=strlen(ext);x++) {
  29.                *(ext+x) = tolower(*(ext+x));
  30.         }
  31.         gotoxy(1,24);
  32.         cleol();
  33.         printf("     %cUnarchive %s to directory: ",7,nameptr[pos]);
  34.         success = lineinput(todir,80);
  35.         if(success == FAIL) {
  36.                free(todir);
  37.                free(olddir);
  38.                free(ext);
  39.                free(unarccmd);
  40.                commands();
  41.                return(FAIL);
  42.         }
  43.         
  44.         getcwd(olddir,256);
  45.         
  46.         if(*todir == '\0') {
  47.                rewrite = PASS;
  48.                printf("current directory.");
  49.         } else {
  50.                if(access(todir,S_IFDIR+S_IREAD+S_IWRITE) != 0) {
  51.                       open_err(todir,errno);
  52.                       free(todir);
  53.                       free(olddir);
  54.                       free(ext);
  55.                       free(unarccmd);
  56.                       commands();
  57.                       return(PASS);
  58.                }
  59.                chdir(todir);
  60.                tempdir = malloc(256);
  61.                getcwd(tempdir,256);
  62.                if(strcmp(tempdir,olddir) == 0) {
  63.                          rewrite = PASS;
  64.                } else {
  65.                          rewrite = FAIL;
  66.                }
  67.                chdir(olddir);
  68.                free(tempdir);
  69.         }
  70.  
  71.         
  72.         if((strcmp(ext,".lzh") == 0) || (strcmp(ext,".lha") == 0)) {
  73.                strcpy(unarccmd,"lha -xw=");
  74.                if(rewrite == PASS) {
  75.                        strcat(unarccmd,". ");
  76.                } else {
  77.                        strcat(unarccmd,todir);
  78.                           strcat(unarccmd," ");
  79.                }
  80.                strcat(unarccmd,nameptr[pos]);
  81.                strcat(unarccmd," >>>/nil");
  82.                gotoxy(1,24);
  83.                cleol();
  84.                printf("     Unarchiving %s to %s.",nameptr[pos],todir);
  85.                system(unarccmd);
  86.                free(todir);
  87.                free(olddir);
  88.                free(ext);
  89.                free(unarccmd);
  90.                commands();
  91.                return(rewrite);
  92.         } else if(strcmp(ext,".zoo") == 0) {
  93.                       strcpy(unarccmd,"zoo -xq ");
  94.                       if(rewrite != PASS) {
  95.                              chdir(todir);
  96.                              strcat(unarccmd,olddir);
  97.                              strcat(unarccmd,"/");
  98.                       }
  99.                       strcat(unarccmd,nameptr[pos]);
  100.                       strcat(unarccmd," >>>/nil");
  101.                       gotoxy(1,24);
  102.                       cleol();
  103.                       printf("     Unarchiving %s to %s.",nameptr[pos],todir);
  104.                       system(unarccmd);
  105.                       chdir(olddir);
  106.                       free(todir);
  107.                       free(olddir);
  108.                       free(ext);
  109.                       free(unarccmd);
  110.                       commands();
  111.                       return(rewrite);
  112.         } else if(strcmp(ext,".zip") == 0) {
  113.                strcpy(unarccmd,"unzip -xqq ");
  114.                if(rewrite != PASS) {
  115.                       chdir(todir);
  116.                       strcat(unarccmd,olddir);
  117.                       strcat(unarccmd,"/");
  118.                }
  119.                strcat(unarccmd,nameptr[pos]);
  120.                strcat(unarccmd," >>>/nil");
  121.                gotoxy(1,24);
  122.                cleol();
  123.                printf("     Unarchiving %s to %s.",nameptr[pos],todir);
  124.                system(unarccmd);
  125.                chdir(olddir);
  126.                free(todir);
  127.                free(olddir);
  128.                free(ext);
  129.                free(unarccmd);
  130.                commands();
  131.                return(rewrite);
  132.         } else if(strcmp(ext,".gz") == 0) {
  133.                strcpy(unarccmd,"gzip -dq ");
  134.                if(rewrite != PASS) {
  135.                       chdir(todir);
  136.                       strcat(unarccmd,olddir);
  137.                       strcat(unarccmd,"/");
  138.                }
  139.                strcat(unarccmd,nameptr[pos]);
  140.                strcat(unarccmd," >>>/nil");
  141.                gotoxy(1,24);
  142.                cleol();
  143.                printf("     Unarchiving %s to %d.",nameptr[pos],todir);
  144.                system(unarccmd);
  145.                chdir(olddir);
  146.                free(todir);
  147.                free(olddir);
  148.                free(ext);
  149.                free(unarccmd);
  150.                commands();
  151.                return(rewrite);
  152.         } else if(strcmp(ext,".ar") == 0) {
  153.                strcpy(unarccmd,"ar2 -x ");
  154.                if(rewrite != PASS) {
  155.                       chdir(todir);
  156.                       strcat(unarccmd,olddir);
  157.                       strcat(unarccmd,"/");
  158.                }
  159.                strcat(unarccmd,nameptr[pos]);
  160.                strcat(unarccmd," >>>/nil");
  161.                gotoxy(1,24);
  162.                cleol();
  163.                printf("     Unarchiving %s to %s.",nameptr[pos],todir);
  164.                system(unarccmd);
  165.                chdir(olddir);
  166.                free(todir);
  167.                free(olddir);
  168.                free(ext);
  169.                free(unarccmd);
  170.                commands();
  171.                return(rewrite);
  172.         } else if(strcmp(ext,".uue") == 0) {
  173.                strcpy(unarccmd,"uudecode ");
  174.                if(rewrite != PASS) {
  175.                       chdir(todir);
  176.                       strcat(unarccmd,olddir);
  177.                       strcat(unarccmd,"/");
  178.                }
  179.                strcat(unarccmd,nameptr[pos]);
  180.                strcat(unarccmd," >>>/nil");
  181.                gotoxy(1,24);
  182.                cleol();
  183.                printf("     Unarchiving %s to %s.",nameptr[pos],todir);
  184.                system(unarccmd);
  185.                chdir(olddir);
  186.                free(todir);
  187.                free(olddir);
  188.                free(ext);
  189.                free(unarccmd);
  190.                commands();
  191.                return(rewrite);
  192.         } else {
  193.                free(todir);
  194.                free(olddir);
  195.                free(ext);
  196.                free(unarccmd);
  197.                gotoxy(1,24);
  198.                cleol();
  199.                printf("     %c%s: Unknown archive type",7,nameptr[pos]);
  200.                sleep(2);
  201.                commands();
  202.                return(FAIL);
  203.         }
  204. }
  205.  
  206. /* EOF unarc.c */
  207.