home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Misc / JOE_SOUR.LHA / Sources.lha / tools / lzxstrip / lzxstrip.c next >
Encoding:
C/C++ Source or Header  |  1996-01-28  |  3.8 KB  |  187 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: LZXCHECK/STRIP V1.0 ©1996 Joe Cool  Date: 18.01.1996\n";
  14.     struct FI_FileInfo        *MyFileInfo=NULL;
  15.     struct FileIDBase            *FileIDBase=NULL;
  16.     char    buffer[300],
  17.             buffer2[300],
  18.             *filename=NULL,
  19.             **main_strip=NULL,
  20.             **main_lzxtemp=NULL;
  21.     BOOL    file_ok=FALSE,
  22.             strip=FALSE;
  23.     BPTR    readfh=NULL,
  24.             lock=NULL;
  25.     long    pos=0,
  26.             pos1=0,
  27.             len=0,
  28.             stripped=0,
  29.             merk=0;
  30.  
  31.     printf ("\nLZXCHECK/STRIP V1.0 ©1996 Joe Cool\n");
  32.  
  33.  
  34.     if(!(FileIDBase    =    (struct FileIDBase *)OpenLibrary("FileID.library",6L)))
  35.     {
  36.         printf ("Couldn`t open FileID.library\n");
  37.         exit (RETURN_FAIL);
  38.     }
  39.     if(!(MyFileInfo = (struct FI_FileInfo *)FIAllocFileInfo()))
  40.     {
  41.         printf ("Can't allocate FI_FileInfo!\n");
  42.         exit (RETURN_FAIL);
  43.     }
  44.     if (argc==1)    
  45.     {
  46.         printf("Usage: LZXStrip <LZX-Archive>\n\n");
  47.         exit (RETURN_FAIL);
  48.     }
  49.  
  50.     if(FIIdentifyFromName((struct FI_FileInfo *)MyFileInfo,argv[1]))
  51.     {
  52.         printf("\"%s\" is does not exist!\n\n",argv[1]);
  53.         exit (RETURN_FAIL);
  54.     }
  55.     
  56.     if (MyFileInfo->FI_ID!=543) 
  57.     {
  58.         printf("Not a LZX-Archive!\n\n");
  59.         exit (RETURN_FAIL);
  60.     }
  61.     filename=strrchr(argv[1],'/');
  62.     if (filename) 
  63.     {
  64.         filename++;
  65.         printf ("Processing file: %s\n",filename);
  66.     }
  67.     else printf ("Processing file: %s\n",argv[1]);
  68.     
  69.     printf("Testing....\n");
  70.     
  71.     readfh=Open("t:lzx.temp",MODE_NEWFILE);
  72.     sprintf (buffer,"lzx t -mfl \"%s\"",argv[1]);
  73.     Execute (buffer,NULL,readfh);
  74.     Close (readfh);
  75.     readfh=Open("t:lzx.temp",MODE_OLDFILE);
  76.     
  77.     while (FGets(readfh, buffer, 200) && (!file_ok))
  78.     {
  79.         if (strstr(buffer,"Operation successful")) file_ok=TRUE;
  80.     }
  81.     Close (readfh);
  82.     DeleteFile("t:lzx.temp");
  83.     
  84.     if (!file_ok)
  85.     {
  86.         printf("ACcorrupt!\n");
  87.     }
  88.     else 
  89.     {
  90.         printf("ACDone!\n"); 
  91.         printf("Stripping..\n");
  92.  
  93.         readfh=Open("t:lzx.temp",MODE_NEWFILE);
  94.         sprintf (buffer,"lzx -mfl l \"%s\"",argv[1]);
  95.         Execute (buffer,NULL,readfh);
  96.         Close (readfh);
  97.         lock = GetProgramDir();
  98.         NameFromLock(lock, buffer, 200);
  99.         sprintf(buffer2,"%s/lzxstrip.list",buffer);
  100.         readfh=Open(buffer2,MODE_OLDFILE);
  101.         
  102.  
  103.     for (pos=0;FGets(readfh,buffer,200);pos++)
  104.     {
  105.         main_strip=(char **) realloc(main_strip,(pos+1)*sizeof(char *));
  106.         main_strip[pos]=NULL;
  107.         len=strlen(buffer);
  108.         main_strip[pos]=(char *) malloc ((len+1)*sizeof(char));
  109.         if (main_strip[pos]!=NULL)
  110.             strcpy(main_strip[pos],buffer);
  111.     }
  112.     Close(readfh);
  113.     main_strip=(char **) realloc(main_strip,(pos+1)*sizeof(char *));
  114.     main_strip[pos]=NULL;
  115.  
  116.  
  117.         readfh=Open("t:lzx.temp",MODE_OLDFILE);
  118.  
  119.  
  120.  
  121.     for (pos=0;FGets(readfh,buffer,300);pos++)
  122.     {
  123.         main_lzxtemp=(char **) realloc(main_lzxtemp,(pos+1)*sizeof(char *));
  124.         main_lzxtemp[pos]=NULL;
  125.         len=strlen(buffer);
  126.         main_lzxtemp[pos]=(char *) malloc ((len+1)*sizeof(char));
  127.         if (main_lzxtemp[pos]!=NULL)
  128.             strcpy(main_lzxtemp[pos],buffer);
  129.     }
  130.     Close(readfh);
  131.     DeleteFile("t:lzx.temp");
  132.     main_lzxtemp=(char **) realloc(main_lzxtemp,(pos+1)*sizeof(char *));
  133.     main_lzxtemp[pos]=NULL;
  134.  
  135.  
  136.  
  137.     for (pos=0;main_lzxtemp[pos]!=NULL;pos++ )
  138.      {    
  139.         strip=FALSE;
  140.         for (pos1=0;main_strip[pos1]!=NULL;pos1++)
  141.         {    
  142.             if (strstr(main_lzxtemp[pos],main_strip[pos1]))
  143.             {
  144.                 strip=TRUE;
  145.                 merk=pos1;
  146.             }
  147.         }
  148.         if (strip) 
  149.         {    
  150.             strcpy(buffer2,main_strip[merk]);
  151.             buffer2[strlen(buffer2)-1]='\0';
  152.             sprintf (buffer,"lzx d \"%s\" \"%s\"",argv[1],buffer2);
  153.             readfh=Open("NIL:",MODE_OLDFILE);
  154.             Execute (buffer,NULL,readfh);
  155.             Close(readfh);
  156.             stripped++;
  157.             strip=FALSE;
  158.         }
  159.             
  160.     }
  161.     printf ("AC%d stripped!\n",stripped);
  162.  
  163.  
  164.  
  165.      
  166.  
  167.  
  168.  
  169. }
  170.     
  171.  
  172.  
  173.  
  174.     if (file_ok) printf("\nFile is OK!\n"); 
  175.     else
  176.     {
  177.         printf("\nFile is corrupt!\n");
  178.         exit (0);
  179.     }
  180.  
  181.     if(MyFileInfo)    FIFreeFileInfo((struct FI_FileInfo *)MyFileInfo);
  182.     if(FileIDBase)    CloseLibrary((struct Library *)FileIDBase);
  183.  
  184.  
  185.  
  186. }
  187.