/* SplitFile.c - von Christof Brühann
 * Aufruf mit DICE: dcc SplitFile.c -o SplitFile */
#include <dos/dos.h>
#include <exec/memory.h>
#define BUFFERSIZE 32000
int main(long argc,char **argv)
{
 struct FileHandle *file_old,*file_new;
 ULONG size_old,size_new,filenum,i,j;
 UBYTE filename_new[255],ext[255],*buffer;
 if (argc!=3) {
  printf("\nAufruf: SplitFile <Datei> <Größe>\n\n");
  return(0);
 }
 if(file_old=(struct FileHandle *)
                  Open(argv[1],MODE_OLDFILE)) {
  /* Quelldatei */
  Seek(file_old,0,OFFSET_END);
  /* Größe Quelldatei */
  size_old=Seek(file_old,0,OFFSET_BEGINNING);
  sscanf(argv[2],"%d",&size_new);
  if(size_new<size_old && size_new!=0) {
   /* Größenparameter korrekt? */
   if(buffer=(UBYTE *)
        AllocMem(BUFFERSIZE,MEMF_PUBLIC)) {
    /* Puffer reservieren*/
    for (filenum=1;filenum<size_old/size_new+2;
                                    filenum++) {
     /* Schleife für Erstellung der Teildateien */
     sprintf(ext,"_%02d",filenum);
     strcpy(filename_new,argv[1]);
     strcat(filename_new,ext);
     if (file_new=(struct FileHandle *)
             Open(filename_new,MODE_NEWFILE)) {
      /* Teildatei öffnen */
      printf("Erstelle '%s'\n",filename_new);
      i=0;
      while (i<size_new) {
       /* Teildatei mit Pufferung erstellen */
       j=BUFFERSIZE;
       if (size_new-i<BUFFERSIZE) j=size_new-i;
       if (j=Read(file_old,buffer,j))
         Write(file_new,buffer,j);
       else {
        filenum=-2;
        break;
       }
       i+=BUFFERSIZE;
      }
      Close(file_new);
     }
     else break;
    }
    FreeMem(buffer,BUFFERSIZE);
   }
  }
  Close(file_old);
 }
 else
   printf("%s kann nicht geöffnet werden.",argv[1]);
 return(0);
}
