#include <exec/types.h>
#include <stdio.h>
#include <stdlib.h>
#include "dh0:code/code20/defines.h"
struct MailHeader MH;
struct PackHeader 
{
   struct MailHeader MH;
   long bytes;
} PH;
char conf[200];
char MsgHead[200];
char FileName[200];
char OutPutName[200];
char TempName[200];
int TLock(char *str);
void sr(char *str);
main(int argc,char *argv[])
{
  char t[10];
  int space=0;
  char p[10];
  FILE *fi,*fi1,*fo,*fo1;
  p[0]=' ';
  if(argc!=3)
  {
    printf("MsgUnPack version 1.0 written by Joseph Hodge\n");
    printf("Usage: MsgUnPack <input name> <conference path>\n");
    printf("   ie: MsgUnPack MSGS BBS:PD\n");
    printf("\n");
    printf("This is an AmiExpress 1.1w+ utility\n");
    printf("\n\n");
    exit(0);
  }
  strcpy(conf,argv[1]);
  strcpy(OutPutName,argv[2]);
  sr(conf);
  sr(OutPutName);
  if(!TLock(conf))
  {
    printf("Error, can't locate conference\n");
    exit(0);
  }
  PH.bytes=0L;
  sprintf(MsgHead,"%s/MsgBase/HeaderFile",conf);
  if(!TLock(MsgHead))
  {
    printf("Error, can't locate MsgBase\n");
    printf("\n");
    exit(0);
  }
  
  sprintf(TempName,"%s/MsgBase/Tmp",conf);
  fi=fopen(MsgHead,"rb");
  if(fi==NULL)
  {
    printf("Error, can't open HeaderFile\n\n");
    exit(0);
  }
  while(fread((APTR)&PH.MH,sizeof(struct MailHeader),1,fi)!=NULL)
  {
     sprintf(FileName,"%s/MsgBase/%d",conf,PH.MH.MsgNumb);
     if(TLock(FileName))
     {
       fi1=fopen(FileName,"rb");
       fo1=fopen(TempName,"ab");
       while(fread((APTR)&t,sizeof(char),1,fi1)!=NULL)
       {
         if(space>0 && t[0]!=' ')
         {
           p[1]=space;
           fwrite((APTR)&p,sizeof(char),2,fo1);
           PH.bytes +=2L; space=0;
         }
         if(t[0]==' ')
         {
           space +=1L;
           if(space==100)
           {
             p[1]=space;
             fwrite((APTR)&p,sizeof(char),2,fo1);
             PH.bytes +=2L; space=0;
           }
         }
         else
         {
           fwrite((APTR)&t,sizeof(char),1,fo1);
           PH.bytes +=1L;
         }
       }
       if(space>0)
       {
         p[1]=space;
           fwrite((APTR)&p,sizeof(char),2,fo1);
           PH.bytes +=2L; space=0;
       }
       fclose(fo1);
       fclose(fi1);
       fo1=fopen(OutPutName,"ab");
       if(fo1==NULL)
       {
         printf("Error, can't open out file\n");
         printf("\n");
         fclose(fi);
         exit(0);
       }
       fwrite((APTR)&PH,sizeof(struct PackHeader),1,fo1);
       fi1=fopen(TempName,"rb");
       while(fread((APTR)&t,sizeof(char),1,fi1)!=NULL)
       {
         fwrite((APTR)&t,sizeof(char),1,fo1);
       }
       fclose(fo1);
       fclose(fi1);
       DeleteFile(TempName);
       PH.bytes=0L;
     }
  }
  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--; 
  }
}
#define ACCESS_READ -2
int TLock(char *str)
{
  long lock;
  if(lock=Lock(str,ACCESS_READ))
  {
    UnLock(lock); return(1);
  }
  return(0);
}
  