home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Misc / JOE_SOUR.LHA / Sources.lha / tools / zipstrip / zipstrip.c next >
Encoding:
C/C++ Source or Header  |  1996-02-04  |  4.0 KB  |  203 lines

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<ctype.h>
  4. #include<string.h>
  5. #include <proto/FileID.h>
  6. #include <proto/dos.h>
  7. #include <proto/exec.h>
  8.  
  9.  
  10.  
  11. main(int argc, char **argv)
  12. {
  13.     char     version[]="$VER: ZIPCHECK/STRIP V1.0 ©1996 Joe Cool  Date: 28.01.1996\n";
  14.     struct FI_FileInfo        *MyFileInfo=NULL;
  15.     struct FileIDBase            *FileIDBase=NULL;
  16.     char    buffer[300],
  17.             buffer2[300],
  18.             path[256],
  19.             *filename=NULL,
  20.             **main_strip=NULL,
  21.             **main_ziptemp=NULL;
  22.     BOOL    file_ok=FALSE,
  23.             strip=FALSE;
  24.     BPTR    readfh=NULL,
  25.             lock=NULL,
  26.             output=NULL;
  27.     long    pos=0,
  28.             pos1=0,
  29.             len=0,
  30.             stripped=0,
  31.             merk=0,
  32.             error=0;
  33.  
  34.     printf ("\nZIPCHECK/STRIP V1.0 ©1996 Joe Cool\n");
  35.     lock = GetProgramDir();
  36.     NameFromLock(lock, path, 200);
  37.  
  38.  
  39.     if(!(FileIDBase    =    (struct FileIDBase *)OpenLibrary("FileID.library",6L)))
  40.     {
  41.         printf ("Couldn`t open FileID.library\n");
  42.         exit (RETURN_FAIL);
  43.     }
  44.     if(!(MyFileInfo = (struct FI_FileInfo *)FIAllocFileInfo()))
  45.     {
  46.         printf ("Can't allocate FI_FileInfo!\n");
  47.         exit (RETURN_FAIL);
  48.     }
  49.     if (argc==1)    
  50.     {
  51.         printf("Usage: ZIPStrip <zip-Archive>\n\n");
  52.         exit (RETURN_FAIL);
  53.     }
  54.  
  55.     if(FIIdentifyFromName((struct FI_FileInfo *)MyFileInfo,argv[1]))
  56.     {
  57.         printf("\"%s\" is does not exist!\n\n",argv[1]);
  58.         exit (RETURN_FAIL);
  59.     }
  60.     
  61.     if (MyFileInfo->FI_ID!=74) 
  62.     {
  63.         printf("Not a ZIP-Archive!\n\n");
  64.         exit (RETURN_FAIL);
  65.     }
  66.     filename=strrchr(argv[1],'/');
  67.     if (filename) 
  68.     {
  69.         filename++;
  70.         printf("Processing file: %s\n",filename);
  71.     }
  72.     else printf ("Processing file: %s\n",argv[1]);
  73.     
  74.     printf("Testing File.....\n");
  75.  
  76.     sprintf(buffer,"unzip -tqq %s >nil:",argv[1]);
  77.     error = SystemTagList(buffer, NULL);
  78.      
  79.     if (error==0)
  80.     {
  81.         file_ok=TRUE;
  82.     }
  83.     else 
  84.     {
  85.         file_ok=FALSE;
  86.     }
  87.  
  88.     if (file_ok)
  89.     {
  90.         printf("ACDone!\n");
  91.     
  92.  
  93.     printf("Adding comment...\n");
  94.     readfh=Open("NIL:",MODE_NEWFILE);
  95.     if (path[strlen(path)-1]==':')    
  96.         sprintf (buffer,"ZIP -z %s <\"%szipstrip.comment.add\"",argv[1],path);
  97.     else
  98.         sprintf (buffer,"ZIP -z %s <\"%s/zipstrip.comment.add\"",argv[1],path);
  99.  
  100.     Execute (buffer,NULL,readfh);
  101.     Close (readfh);
  102.  
  103.     printf("ACDone!\n");
  104.     printf("Stripping Files..\n");
  105.     
  106.     readfh=Open("t:zip.temp",MODE_NEWFILE);
  107.     sprintf (buffer,"unzip -lqq \"%s\"",argv[1]);
  108.     Execute (buffer,NULL,readfh);
  109.     Close (readfh);
  110.  
  111.     lock = GetProgramDir();
  112.     NameFromLock(lock, buffer, 200);
  113.     if (buffer[strlen(buffer)-1]==':')    
  114.         sprintf(buffer2,"%szipstrip.list",buffer);
  115.     else
  116.         sprintf(buffer2,"%s/zipstrip.list",buffer);
  117.     readfh=Open(buffer2,MODE_OLDFILE);
  118.         
  119.  
  120.     for (pos=0;FGets(readfh,buffer,200);pos++)
  121.     {
  122.         main_strip=(char **) realloc(main_strip,(pos+1)*sizeof(char *));
  123.         main_strip[pos]=NULL;
  124.         len=strlen(buffer);
  125.         main_strip[pos]=(char *) malloc ((len+1)*sizeof(char));
  126.         if (main_strip[pos]!=NULL)
  127.             strcpy(main_strip[pos],buffer);
  128.     }
  129.     Close(readfh);
  130.     main_strip=(char **) realloc(main_strip,(pos+1)*sizeof(char *));
  131.     main_strip[pos]=NULL;
  132.  
  133.  
  134.         readfh=Open("t:zip.temp",MODE_OLDFILE);
  135.  
  136.  
  137.  
  138.     for (pos=0;FGets(readfh,buffer,300);pos++)
  139.     {
  140.         main_ziptemp=(char **) realloc(main_ziptemp,(pos+1)*sizeof(char *));
  141.         main_ziptemp[pos]=NULL;
  142.         len=strlen(buffer);
  143.         main_ziptemp[pos]=(char *) malloc ((len+1)*sizeof(char));
  144.         if (main_ziptemp[pos]!=NULL)
  145.             strcpy(main_ziptemp[pos],buffer);
  146.     }
  147.     Close(readfh);
  148.     main_ziptemp=(char **) realloc(main_ziptemp,(pos+1)*sizeof(char *));
  149.     main_ziptemp[pos]=NULL;
  150.  
  151.  
  152.  
  153.     for (pos=0;main_ziptemp[pos]!=NULL;pos++ )
  154.      {    
  155.         strip=FALSE;
  156.         for (pos1=0;main_strip[pos1]!=NULL;pos1++)
  157.         {    
  158.             if (strstr(main_ziptemp[pos],main_strip[pos1]))
  159.             {
  160.                 strip=TRUE;
  161.                 merk=pos1;
  162.             }
  163.         }
  164.         if (strip) 
  165.         {    
  166.             strcpy(buffer2,main_strip[merk]);
  167.             buffer2[strlen(buffer2)-1]='\0';
  168.             sprintf (buffer,"zip -d \"%s\" \"%s\"",argv[1],buffer2);
  169.             readfh=Open("NIL:",MODE_OLDFILE);
  170.             Execute (buffer,NULL,readfh);
  171.             Close(readfh);
  172.             stripped++;
  173.             strip=FALSE;
  174.         }
  175.             
  176.     }
  177.     printf ("AC%d stripped!\n",stripped);
  178.  
  179.  
  180.  
  181.      
  182.  
  183.  
  184.  
  185. }
  186.     
  187.  
  188.  
  189.  
  190.     if (file_ok) printf("\nFile is OK!\n"); 
  191.     else
  192.     {
  193.         printf("\nFile is corrupt!\n");
  194.         exit (0);
  195.     }
  196.  
  197.     if(MyFileInfo)    FIFreeFileInfo((struct FI_FileInfo *)MyFileInfo);
  198.     if(FileIDBase)    CloseLibrary((struct Library *)FileIDBase);
  199.  
  200.  
  201.  
  202. }
  203.