#include <math.h>
#include <stdio.h>

#define PI	3.1415927
#define unchar	unsigned char

FILE *fpw0;

main()
{
	/****** ram set ******/
	long xswide,yswide,zwide;
	long xewide,yewide;
	long x1,y1,z;
	long zz[4];
	long xadd,yadd;
	long zzstep[4],zbase;
	long zsum,psum;
	long i;

	/***** init. set *****/
	printf("How long X start wide ?\t");
	scanf("%x", &xswide);
	printf("How long Y start wide ?\t");
	scanf("%x", &yswide);
	printf("How long X end wide ?\t");
	scanf("%x", &xewide);
	printf("How long Y end wide ?\t");
	scanf("%x", &yewide);
	printf("How long Z wide ?\t");
	scanf("%x", &zwide);

	printf("\nHow point do you want ( decimal 1-4 ) ?\t");
	scanf("%x", &psum);

	for(i=0;i<psum;i++){
		printf("Z%01d step ( decimal ) ?\t",i+1);
		scanf("%d", &zzstep[i]);
	}
	printf("Z base ( decimal) ?\t");
	scanf("%d", &zbase);



	x1=xswide*0x0100;
	y1=yswide*0x0100;
	xadd=(xewide-xswide)*0x0100/(zwide-1);
	yadd=(yewide-yswide)*0x0100/(zwide-1);

	/****** write file open ******/
	if((fpw0=fopen("bg3block.dat","w")) == 0){
		printf("can't open !!\n");
		exit(1);
	}

	fprintf(fpw0,";\tX START WIDE =%03X,Y START WIDE =%03X",xswide,yswide);
	fprintf(fpw0,"\n;\tX  END  WIDE =%03X,Y  END  WIDE =%03X",xewide,yewide);
	fprintf(fpw0,"\n;\tZ       WIDE =%03X",zwide);

	/****** BG3 BLOCK data make ******/
	for(i=0;i<psum;i++)	zz[i]=0;

	for(z=0;z<zwide;z++,x1+=xadd,y1+=yadd){
		fprintf(fpw0,"\n\t\tHEX\t%03X",(unchar)(x1/0x0100));

		for(i=0;i<psum;i++){
			fprintf(fpw0,",%03X",(unchar)(zz[i]/zbase));
			zz[i]+=zzstep[i];
		}
		fprintf(fpw0,",%03X",(unchar)(y1/0x0100));
	}

	fprintf(fpw0,"\n");

        /****** write file close ******/
	fclose(fpw0);
}
