/*  */

#include <libraries/dosextens.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#include <clib/dos_protos.h>


#include "ZX.h"

void Copyright(void);

/* constants declaration */

#define MAXBUF 49152
#define MAXINBUF 7
#define MAXFNBUF 128

/* variables declaration */

char fileout[MAXFNBUF], fileh[MAXFNBUF], fileb[MAXFNBUF];
UBYTE __far aux[MAXBUF];
int file_length;

			
struct ZX82_file ZX82_File;
struct Header header;
struct Bytes bytes;


SaveFile(char *);
LoadFileHeader(char *);
LoadFileBytes(char *);

main(argc, argv)

int argc;
char *argv[];

{

int i=1;


	Copyright();
	if(argc==1) {
badusage:	printf("Usage: %s filename [filename]\n",argv[0]);
		exit(1);
	}

/* insert options handling here */

	if(!(--argc))
		goto badusage;
	strcpy(fileout,argv[i]);
	strcpy(fileh,fileout);;
	strcpy(fileb,fileh);
	if(--argc)
		strcpy(fileout,argv[++i]);
	strcat(fileh,".header");
        strcat(fileb,".bytes");
        
        if(LoadFileHeader(fileh)&&LoadFileBytes(fileb)) {
        	ZX82_File.header.ZX_ID=0x5A583832;
        	ZX82_File.header.ZX_Comp=0;
        	ZX82_File.data=bytes.data;
		ZX82_File.header.ZX_Type=header.type;
		ZX82_File.header.ZX_Length_L=header.length_l;
		ZX82_File.header.ZX_Length_H=header.length_h;
		ZX82_File.header.ZX_Start_L=header.start_l;
		ZX82_File.header.ZX_Start_H=header.start_h;
		ZX82_File.header.ZX_ProgLen_L=header.blength_l;
		ZX82_File.header.ZX_ProgLen_H=header.blength_h;
		SaveFile(fileout);
        }
	
}

void Copyright(void)
{
	puts("Generic .header/.bytes to ZX82 converter (C)1997 by SRC");
}


SaveFile(char *ptr)

{

BPTR fh;

	if(!(fh=Open(ptr,MODE_NEWFILE))) {
		printf("Could not save file '%s'\n",ptr);
		return(0);
	}
	Write(fh,&(ZX82_File.header),sizeof(ZX82_File.header));
	Write(fh,ZX82_File.data,file_length);
	Close(fh);
	return(1);
}


LoadFileHeader(char *ptr)

{

BPTR fh;

	if(!(fh=Open(ptr,MODE_OLDFILE))) {
		printf("Could not load file '%s'\n",ptr);
		return(0);
	}
	Read(fh,&header,sizeof(header));
	Close(fh);
	return(1);
}


LoadFileBytes(char *ptr)
		
{
BPTR fh;


	if(!(fh=Open(ptr,MODE_OLDFILE))) {
		printf("Could not load file '%s'\n",ptr);
		return(0);
	}
	file_length=Read(fh,aux,sizeof(aux));	/* aux defined as global */
	file_length-=2;
	bytes.flag=aux[0];
	bytes.data=(UBYTE*)(aux+1);
	bytes.checksum=aux[file_length+1];
	Close(fh);
	return(1);
}
