/* font -- 9/29/87 

	fnt.bat = cl /AL font.c vimage3 graphlib

******************************************************************/

#include <stdio.h>
#include <io.h>
#include "nomouse.h"


#define CHARHGT  25						/* Height of characters in 'font.raw */

int ScreenXs=640,ScreenYs=480;

FILE *cfp;

struct   Color {
                unsigned char  r, g, b;
               }lut[256],lutm[256],lutc[256];

int font[128][25];
char buff[200];
struct board
{
	int row,col,color;
}B_Id;


unsigned char getpt();			/* returns the value of a pixel */

int encode_font(char *name);		/* reads 'font.raw' and creates 'font.hex */

main(int argc,char *argv[]) 
{
	int i,j,k,l,m,n;
	char string[80],name[100];
	FILE *fph;

	if(argc<2)
		strcpy(name,"font");
	else
		strcpy(name,argv[1]);
	for(k=0;k<16;k++)
	{
		lut[k].r=k*17;
		lut[k].g=k*17;
		lut[k].b=k*17;
	}
	i=GetVideoBoardID();
	SetVideoMode(0x12,&B_Id);
	WritePalette(lut);

	encode_font(name);

	plot_font_h(15,10,10," !\"#$%&'()*+,-./0123456789:;<=>?\\",1,font);
	plot_font_h(15,10,35," !\"#$%&'()*+,-./0123456789:;<=>?\\",2,font);
	plot_font_h(15,10,55," !\"#$%&'()*+,-./0123456789:;<=>?\\",3,font);
	plot_font_h(15,10,100,"abcdefghijklmnopqrstuvwxyz{}|~\\",3,font);
	plot_font_h(15,10,130,"ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^`",3,font);
	plot_font_h(15,10,200,"abcdefghijklmnopqrstuvwxyz{}|~\\",2,font);
	plot_font_h(15,10,230,"ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^`",2,font);
	plot_font_h(15,10,300,"abcdefghijklm\\",1,font);
	plot_font_h(15,10,330,"nopqrstuvwxyz\\",1,font);
	plot_font_h(15,10,360,"ABCDEFGHIJKLM\\",1,font);
	plot_font_h(15,10,390,"NOPQRSTUVWXYZ[]^`",1,font);
	plot_font_v(15,350,440,"abcdefghijklmnopqrstuvwxyz\\",3,font);
	plot_font_v(15,370,440,"ABCDEFGHIJKLMNOPQRSTUVWXYZ\\",3,font);
	plot_font_v(15,400,440,"abcdefghijklmnopqrstuvwxyz\\",2,font);
	plot_font_v(15,430,440,"ABCDEFGHIJKLMNOPQRSTUVWXYZ\\",2,font);
	plot_font_v(15,460,440,"abcdefghijklm\\",1,font);
	plot_font_v(15,500,440,"nopqrstuvwxyz\\",1,font);
	plot_font_v(15,540,440,"ABCDEFGHIJKLM\\",1,font);
	plot_font_v(15,580,440,"NOPQRSTUVWXYZ\\",1,font);
	plot_font_v(15,580,440,"NOPQRSTUVWXYZ\\",1,font);

	getch();
	SetVideoMode(0);

	sprintf(string,"%s.h",name);
	printf("Do you want to remake '%s' ?  (y or n)\n\n",string);
	if(getch()=='y')
	{
		fph=fopen(string,"wt");
		if(!fph)
		{
			printf("Could not open '%s' to write.\n\n",string);
			exit(0);
		}
		fprintf(fph,"int Font[128][25]=\n{");
		for(i=0;i<128;i++)
		{
			fprintf(fph,"\n     ");
			for(j=0;j<13;j++)
				fprintf(fph,"%3d,",font[i][j]);
			fprintf(fph,"\n     ");
			for(j=13;j<24;j++)
				fprintf(fph,"%3d,",font[i][j]);
			fprintf(fph,"%3d",font[i][24]);
			if(i<127)
				fprintf(fph,",");
			else
				fprintf(fph,"\n};\n");
		}
		fclose(fph);
	}
}

/*************************************************************************/
/***************************** end program main **************************/
/*************************************************************************/


/********************************************************************
**
**	decodes 'font.raw' and makes 'font.hex'
**
********************************************************************* */
		
int encode_font(char *name)
{
	int i,j,k,l,m,n;
	int power;
	char string[100];
	FILE *ffp;

	for(k=0;k<strlen(name);k++)
		if(name[k]=='.')
			name[k]='\0';
	sprintf(string,"%s.raw",name);
	cfp=fopen(string,"rt");
	if(!cfp)
	{
		printf("Could not open '%s' to read.\n\n",string);
		SetVideoMode(0);
		exit(0);
	}

	for(i='A';i<='Z';i++)
	{
		j = i - 'A' + 'a';
		for(l=0;l<CHARHGT;l++)
		{
			for(k=0;k<22;k++) buff[k] = fgetc(cfp);
			power = 512;
			font[i][l] = 0;
			for(k=0;k<10;k++)
			{ 
				if(buff[k] == '*') font[i][l] += power;
				power /= 2;
			}
			power = 512;
			font[j][l] = 0;
			for(k=11;k<21;k++)	
			{ 
				if(buff[k] == '*') font[j][l] += power;
				power /= 2;
			}
		}
	}
	for(i=' ';i<='@';i++)
	{
		for(l=0;l<CHARHGT;l++)
		{
			for(k=0;k<11;k++) buff[k] = fgetc(cfp);
			power = 512;
			font[i][l] = 0;
			for(k=0;k<10;k++)	
			{ 
				if(buff[k] == '*') font[i][l] += power;
				power /= 2;
			}
		}
	}
	for(i='[';i<='`';i++)
	{
		for(l=0;l<CHARHGT;l++)
		{
			for(k=0;k<11;k++) buff[k] = fgetc(cfp);
			power = 512;
			font[i][l] = 0;
			for(k=0;k<10;k++)	
			{ 
				if(buff[k] == '*') font[i][l] += power;
				power /= 2;
			}
		}
	}
	for(i='{';i<='~';i++)
	{
		for(l=0;l<CHARHGT;l++)
		{
			for(k=0;k<11;k++) buff[k] = fgetc(cfp);
			power = 512;
			font[i][l] = 0;
			for(k=0;k<10;k++)	
			{ 
				if(buff[k] == '*') font[i][l] += power;
				power /= 2;
			}
		}
	}

/*
**	output binary data
*/

	sprintf(string,"%s.hex",name);
	ffp=fopen(string,"wb");	
	if(!ffp)
	{
		printf("Could not open '%s' to write.\n\n",string);
		SetVideoMode(0);
		exit(0);
	}
	fwrite((char *)font,sizeof(int),3200,ffp);
	fclose(ffp);

}


/**********************************************************************
**
**
**
**********************************************************************/

int set_lut(){}


                            