/* font converter */ #include #include #include #include unsigned char wid[256]; unsigned char hig[256]; unsigned char basey[256]; unsigned long off[256]; unsigned doff[256]; unsigned dwid[256]; unsigned int base,min,max,ylen; #define LY 100 #define LX 100 char fnt[LX*LY]; unsigned char fntwid; char empty; int readfont(FILE *f1,int a) { unsigned int x,y; fntwid=wid[a]; memset(fnt,0,LX*LY); empty=1; if(!off[a]) return(0); empty=0; fseek(f1,off[a],SEEK_SET); for(y=0;y "); return(0); } f1=fopen(argv[1],"rb"); f2=fopen(argv[2],"wb"); fread(off,4,256,f1); fread(wid,1,256,f1); fread(hig,1,256,f1); fread(basey,1,256,f1); for(min=max=a=0;a<256;a++) if(off[a]) { b=hig[a]-basey[a]; if(b>max) max=b; b=basey[a]; if(b>min) min=b; } max--; ylen=(max+min+7)/8; base=(ylen*8-(max+min))/2+min; printf("Maximum heigth: %i\nBase up:%i\nBase down:%i\n", max+min,min,max); printf("Heigth in charachters: %i\nBase line in pixels: %i\n", ylen,base); fseek(f2,1024L+16L,SEEK_SET); for(a=0;a<256;a++) { printf("Processing charachter %i...\r",a); readfont(f1,a); convert(f2,a); } fseek(f2,0L,SEEK_SET); fprintf(f2,"BIGFONT\x01a"); putw(ylen,f2); putw(0,f2); putw(0,f2); putw(0,f2); fwrite(doff,2,256,f2); fwrite(dwid,2,256,f2); fclose(f2); fclose(f1); return(0); } /* file format for destination font file: text: "BIGFONT",0x1b word: charachter rows word: - word: - word: - 256 times: word: offset (0 for letter not in file) 256 times: word: width */