#include <exec/types.h>
#include <libraries/dos.h>
#include <exec/memory.h>
#include <stdio.h>
#include <string.h>

#define TRUE  1
#define FALSE 0

static UBYTE *VersTag = "\0 $VER: Super-Kung-Foo-Fortune-File-Splitting-Program 1.2";

int getsize(char *filename)
{
   int size = 0;
   struct FileLock *lock;
   struct FileInfoBlock *fib_ptr;

   if(!(fib_ptr = (struct FileInfoBlock *) AllocMem(sizeof(struct FileInfoBlock),
        MEMF_PUBLIC | MEMF_CLEAR)))
      return 0;

   if(!(lock = (struct FileLock *) Lock(filename, SHARED_LOCK)))
      {
      FreeMem( fib_ptr, sizeof( struct FileInfoBlock ) );
      return 0;
      }

   if(Examine(lock, fib_ptr) == NULL)
      {
      FreeMem(fib_ptr, sizeof(struct FileInfoBlock));
      UnLock(lock);
      return 0;
      }

   size = fib_ptr->fib_Size;
   UnLock(lock);
   FreeMem(fib_ptr, sizeof(struct FileInfoBlock));

   return size;
}

int main(int argc, char **argv)
{
   int size, i = 0, maybe, second, parts, x = 2;
   int c;
   char destinations[1000];
   const char *header = "[xxx]\n%\n";
   const char *delimiter = "\n%";
   BPTR infile, out;
   destinations[0] = 0;

   if(argc > 3)
      {
      parts = argc-2;
      if(!(size = getsize(argv[1])))
          printf("%s: filerror on %s\n",argv[0],argv[1]);
      if(infile = Open(argv[1], MODE_OLDFILE))
         {
         for(; x < argc; x++)
            {
            i = second = maybe = FALSE;
            if(out = Open(argv[x], MODE_NEWFILE))
               {
               strcat(destinations, argv[x]);
               strcat(destinations, " ");
               if(x > 2)
                  FPuts(out, header);
               while(((c = FGetC(infile)) != EOF) && (second == FALSE))
                  {
                  if(i > size/parts)
                     {
                     if(c == '\n' || c == 13)            /* 13 is carriage-return */
                        maybe = TRUE;
                     else if(c == '%' && maybe == TRUE)
                        second = TRUE;
                     else
                        maybe = FALSE;
                     }
                  FPutC(out, c);
                  i++;
                  }
               if(x < argc-1)
                  FPuts(out, delimiter);
               Close(out);
               }
            else
               {
               printf("%s: couldnīt create %s\n",argv[0],argv[x]);
               return 10;
               }
            }
         Close(infile);
         }
      else
         {
         printf("%s: couldnīt open %s\n",argv[0],argv[1]);
         return 10;
         }
      }
   else
      {
      printf("Usage: %s infile outfile1 outfile2 [outfile3] [outfile4] [...]\n",argv[0]);
      return 10;
      }
   printf("%s: %s separated into %s\n",argv[0], argv[1], destinations);
   return 0;
}


