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


char FileName[200];
char DirName[200];
char PathName[200];
char DestName[200];
void rmslash(char *str);
void sr(char *str);
void WriteToT(char *str);
int TLock(char *str);
void MoveFiles(char *Dir,char *Path,char *Dest);
main(int argc,char *argv[])
{
  register int i;
  if(argc!=4)
  {
    printf("AEMove version 1.0 written by Joseph Hodge\n");
    printf("Usage: AEMove <dirpath> <sourcepath> <destpath>\n");
    printf("   ie: AEMove bbs:elite/dir4 dh3: dh3:Elite\n");
    printf("\n");
    printf("This is an AmiExpress 1.1w+ utility\n");
    printf("WARNING only moves files to same Partition\n");
    exit(0);
  }

  strcpy(DirName,argv[1]);
  strcpy(PathName,argv[2]);
  strcpy(DestName,argv[3]);
  sr(DirName);
  sr(PathName);
  sr(DestName);
  
  rmslash(PathName);
  rmslash(DestName);

  if(!TLock(DirName))
  {
    printf("Error, Can't locate dir file %s\n",DirName);
    exit(0);
  }
  if(!TLock(PathName))
  {
    printf("Error, Can't locate source %s\n",PathName);
    exit(0);
  }
  if(!TLock(DestName))
  {
    printf("Error, Can't locate destination path %s\n",DestName);
    exit(0);
  }

  MoveFiles(DirName,PathName,DestName);
}

void MoveFiles(char *Dir,char *Path,char *Dest)
{
   FILE *fi;
   char image[200];
   char D[200];
   char P[200];
   char OFName[200];
   char NFName[200];
   long Errors=0L;
   long Found=0L;
   long Lost=0L;
   strcpy(P,Path);
   strcpy(D,Dest);

   if(P[strlen(P)-1]!='/' && P[strlen(P)-1]!=':')
   {
     strcat(P,"/");
   }
   if(D[strlen(D)-1]!='/' && D[strlen(D)-1]!=':')
   {
     strcat(D,"/");
   }

   fi=fopen(Dir,"r");
   if(fi==NULL)
   {
     printf("Error!!!! could not open Dir files\n\n");
     exit(0);
   }
   while(fgets(image,90,fi)!=NULL)
   {
    if(image[0]>' ')
    {
     image[13]='\0';
     sr(image);
     sprintf(OFName,"%s%s",P,image);
     sprintf(NFName,"%s%s",D,image);
     if(TLock(OFName))
     {
       Found +=1L;
       if(Rename(OFName,NFName))
       {
         printf("-->Moved %s to %s\n",OFName,NFName);
       }
       else
       {
         printf("-->Error could not move %s\n\n",OFName);
         Errors +=1L;
       }
       
     }
     else
     {
       Lost +=1L; 
       printf("** Could not locate %s\n",image);
       WriteToT(image);
     }
    }
   }
  fclose(fi);
  printf("Results: %ld Found, %ld Errors, %ld Lost\n\n",Found,Errors,Lost);

}

void WriteToT(char *str)
{
   FILE *fi;
   static int i=0;
   fi=fopen("T:LostFiles","a");
   if(!i)
   {
     fprintf(fi,"********************************************\n");
     i=1;
   }
   fprintf(fi,"%s\n",str);
   fclose(fi);
}

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);
}