#include <exec/types.h>
#include <stdio.h>
#include <stdlib.h>


char PathName[200];
int Dir;
void rmslash(char *str);
void sr(char *str);
void WriteToT(char *str);
int TLock(char *str);
void ReMoveDesc(char *Path,int Dir);
FILE *fi;
main(int argc,char *argv[])
{
  register int i;
  if(argc!=3)
  {
    printf("DirPurge version 1.1 written by Joseph Hodge\n");
    printf("Usage: DirPurge <confpath> <DirNum>\n");
    printf("   ie: DirPurge bbs:elite 3\n");
    printf("\n");
    printf("This is an AmiExpress 1.1w+ utility\n");
    printf("OutPut goes to Dir(x), Dir(x).old, Dir(x).removed\n");
    exit(0);
  }

  strcpy(PathName,argv[1]);
  Dir=atoi(argv[2]);
  sr(PathName);
  
  rmslash(PathName);

  if(!TLock(PathName))
  {
    printf("Error, Can't locate conference %s\n",PathName);
    exit(0);
  }
  ReMoveDesc(PathName,Dir);
}

void ReMoveDesc(char *Path,int Dir)
{
   FILE *fi,*fo1,*fo2,*fi2;
   char image[256];
   char D1[200];
   char D2[200];
   char P[200];
   char FName[200];
   char Pimage[200];
   char Paths[200];
   char D[200];
   BOOL Remove=FALSE;
   BOOL Header=TRUE;
   char temp[256];
   strcpy(P,Path);
   
   if(P[strlen(P)-1]!='/' && P[strlen(P)-1]!=':')
   {
     strcat(P,"/");
   }
   sprintf(image,"%sdir%d",P,Dir);
   sprintf(D,"%sdir%d.old",P,Dir);
   if(TLock(D))
     DeleteFile(D);
   
   Rename(image,D);
   sprintf(Paths,"%sPaths",P);
   sprintf(D1,"%sdir%d",P,Dir);
   sprintf(D2,"%sdir%d.removed",P,Dir);
   if(!TLock(Paths))
   {
      printf("Error, can't locate Paths file\n");
      exit(0);
   }

   fi=fopen(D,"r");
   if(fi==NULL)
   {
     printf("Error!!!! could not open Dir file\n\n");
     exit(0);
   }
    fi2=fopen(Paths,"r");
      if(fi2==NULL)
      {
        fclose(fi);
        printf("Error, can't open paths file\n");
        exit(0);
      }
    fo1=fopen(D1,"a");
    if(fo1==NULL) 
    {
       printf("Error, can't create dir(x).new\n");
       fclose(fi);
       fclose(fi2);
       exit(0);
    }
    fo2=fopen(D2,"a");
    if(fo2==NULL)
    {
      printf("Error, can't create dir(x).removed\n");
      fclose(fi);
      fclose(fi2);
      fclose(fo1);
      exit(0);
    }
   while(fgets(image,200,fi)!=NULL)
   {
      rewind(fi2);
      sr(image);
      if(image[0]>32)
      {
        if(Header==TRUE)
        {
        if(image[25]=='-' && image[28]=='-' && image[27]!='-')
         {  
           Header=FALSE;
         }
         else
         {
           fprintf(fo1,"%s\n",image); continue;
         }
        }
        Remove=TRUE;
        strcpy(temp,image);
        temp[13]='\0'; sr(temp);
        printf("Searching %-13.13s ",temp);
        while(fgets(Pimage,80,fi2)!=NULL)
        {
          sr(Pimage);
          sprintf(FName,"%s%s",Pimage,temp);
          if(TLock(FName))
          {
            Remove=FALSE; printf("FOUND\n");
            fprintf(fo1,"%s\n",image);
            break;
          }
        }
        if(!Remove) continue;
        printf("*** CANT LOCATE ***\n");
        fprintf(fo2,"%s\n",image);
       }
       else if(image[0]!='\0')
       {
          if(Remove)
            fprintf(fo2,"%s\n",image);
          else fprintf(fo1,"%s\n",image);
       }
    }          
    fclose(fi);
    fclose(fi2);
    fclose(fo1);
    fclose(fo2);

}

void sr(char *str)
{
  register int i;
  i=strlen(str)-1;
  while(i>-1)
  {
    if(*(str+i)<=32) *(str+i)='\0'; else break;
    i--;
  }
}

void rmslash(char *str)
{
  register int i;
  i=strlen(str)-1;
  while(i>-1)
  {
    if(*(str+i)=='/' || *(str+i)<=32) *(str+i)='\0'; else break;
    i--;
  }
}
#define ACCESS_READ -2
int TLock(char *str)
{
  long lock;
  if(lock=Lock(str,ACCESS_READ))
  {
    UnLock(lock); return(1);
  }
  return(0);
}