
echo ; /* compiling and linking dearc.c .....
LC -v dearc.c
BLINK from lib:c.o, dearc.o LIB lib:lc.lib, lib:amiga.lib SC SD ND MAP dearc.map
QUIT
*/

#include "stdio.h"
#include "exec/types.h"
#include <string.h>
#include <stdlib.h>
#include "dos.h"
#include "proto/exec.h"
#include "proto/dos.h"

int fp;

VOID MemCleanup (){}

char s[20];
char command[80] = { "DELETE " };

char   path[166] = "";
char   pathname[166 + 34 + 1] = "";

char   file_name[166 + 34 + 1 + 3] = "";

void main(argc, argv)
  
   int argc;
   char *argv[];

{
   int    result;
   int    more;
   int    *ip;
   char   temp[4];
   int    front;
   char   ext[4];

   char   *cp;

   puts ( "\n       DE-arc utility v2.0 - TASP Group, INC.\n");

   if (( argc <= 1 ) || ( *argv[1] == '?' ))
      {
      puts("usage: dearc FILENAME.EXT \n");
      puts("   where FILENAME.EXT = the arc file from which the"); 
      puts("                        extracted files, this utility");
      puts("                        will delete, came from."); 
      puts("                        .EXT will default to .ARC "); 
      exit ( TRUE );
      }

  
   result = strcpy ( &file_name[0], argv[1] ); 

   /* see if the user supplied an extension.  if not make it .arc */
   if ( 0 == ( stcgfe ( &ext[0], &file_name[0] ) ) ) 
      {
      strmfe ( &file_name[0], &file_name[0], "ARC" );
      }
      
   /* open the ARC file */
   fp = Open(&file_name[0],MODE_OLDFILE);
   if ( fp == 0 )
      {
      puts ( "Unable to open file" );
      exit (FALSE); 
      }

   /* extract the path portion of the input file name */
   result = stcgfp ( &path, &file_name[0] );

   /* set up the command string */
   cp = strcpy(&command[0],"DELETE ");
   front = 0;

   /* get to the begining of the file */
   result = Seek ( fp, 0, OFFSET_BEGINNING );

   /* pull out all the arced file's names and delete those
      files in the directory that the arced file is in */
   do 
      {
      more = FALSE;
      result = Read(fp, &s[0], 1);

      /* the first byte had better be a hex 1A */
      if (( s[0] == 26 ) && ( s[0] != EOF ))
         {
         result = Read(fp, &s[0], 1);

         /* the second byte should be something other than a zero */
         if ( s[0] > 0 ) 
            {
            /* the next string is the file name max length = 12 bytes */
            result = Read ( fp, &s[0], 13 );
              
            /* make a full pathname */
            strmfp( &pathname[0], &path[0], &s[0] );
               
            /* create a delete command for AmigaDos */
            cp = strcat( &command[0], &pathname[0]);
               
            /* show the user what we are doing */
            puts ( &command[0] );     

            /* delete the file */
            result = DeleteFile ( &pathname[0] );
            if ( ! result ) 
               {
               puts ("\n ** file was not deleted ** ");
               }

            /* set up the command for the next time */
            command[7] = '\0';

            /* get the offset to the next file name.  Its in intel 
               word format ( ie. low high ) */
            result = Seek ( fp, ( front + 15 ), OFFSET_BEGINNING );
            result = Read ( fp, &temp[3], 1 );
            result = Read ( fp, &temp[2], 1 );
            result = Read ( fp, &temp[1], 1 );
            result = Read ( fp, &temp[0], 1 );
            ip = (int * )&temp[0];

            /* next file  is at begining of this entry + header
               overhead + offset */
            front = front + 29 + *ip;

            result = Seek ( fp, front, OFFSET_BEGINNING );
            more = TRUE;
            }
         }
      else
         {
         puts ( "not an arc format file !" );
         }
      } while ( more );

      Close( fp );

   
   exit(TRUE);

}
