   /*******************************************/
  /* Split v1.1 (27.08.94) - a file splitter */
 /*     Public Domain   (c) 1994 by BSZ     */
/*******************************************/

#include <stdio.h>
#include <stdlib.h>

FILE *in;
char *in_path [30];
FILE *out;
char *out_name[30];

FILE *open_next(char *name, long number)
{
	char work[1024];
	sprintf(work, "%s.s%02d", name, number);
	return fopen(work, "wb");
}

main(int argc, char *argv[])
{
	long size,file_size;
	int loop;
	long offset;
	long s;
	char buffer[1024];

	size=atol(argv[1])*1024;
	*in_path=argv[2];
	*out_name=argv[3];
	if(argc!=4)
	{
		printf("\n[1mSplit v1.1 (27.08.94)[22m - a file splitter.\n");
		printf("[32mPublic Domain (c) 1994 by BSZ[31m\n");
		printf("Usage: %s <size (in KB)> <source file> <out name>\n",argv[0]);
		exit(0);
	}
	if( !(in=fopen(*in_path, "rb")))
	{
		fprintf(stderr,"Error opening >>> %s\n", *in_path);
		exit(1);
	}
	else
	{
		fseek(in,0L,SEEK_END);
		file_size=ftell(in);
		rewind(in);
	}
	for(loop=1; ; loop++)
	{
		if( !(out=open_next(*out_name,loop)) )
		{
			fprintf(stderr,">>> Error opening destination file!");
			exit(1);
		}
		for(offset=(loop-1)*size+1; offset<=loop*size; offset+=1024)
		{
			if( (s=fread(buffer,1,1024,in)) ==1024)
			{
				fflush(stdout);
				fwrite(buffer,1,1024,out);
				printf("%02d%c completed",100*offset/file_size,'%');
				printf("\b\b\b\b\b\b\b\b\b\b\b\b\b");
			}
			else
			{
				fwrite(buffer,1,s,out);
				printf("100%c completed. %d files created.\n", '%', loop);
				exit(0);
			}
		}
	}
}
