#include #include #include #define LINEWIDTH 960 /* printterin rivill„ pisteit„ */ #define MAXHEIGTH 8 /* maksimi korkeus merkeille */ #define BUFFERSIZE 32000 /* tila fonttidatalle */ #define HEADERLENGTH 0x410 /* alkutauluk. pituus ennen varsinaista dataa */ unsigned char fontdata[BUFFERSIZE]; /* file mahtuu varmasti */ int heigth; /* korkeus merkeiss„ */ int offset[256]; /* jokaisen fontin alkupaikka fileess„ */ int width[256]; /* jokaisen fontin leveys (pixeleiss„) */ int spacing=-1; /* lis„v„li merkkien v„liss„ */ unsigned char linebuf[MAXHEIGTH][LINEWIDTH]; int readfont(char *file) { int a; FILE *f1; f1=fopen(file,"rb"); /* read binary */ /* onko headerin teksti ok? */ if(fgetc(f1)!='B') return(1); if(fgetc(f1)!='I') return(1); if(fgetc(f1)!='G') return(1); if(fgetc(f1)!='F') return(1); if(fgetc(f1)!='O') return(1); if(fgetc(f1)!='N') return(1); if(fgetc(f1)!='T') return(1); getc(f1); /* on, korkeus? */ heigth=getw(f1); /* word - korkeus */ a=getw(f1); /* word - ylim. v„li */ if(spacing==-1) spacing=a; /* aseta jos ei jo asetettu */ getw(f1); /* unused */ getw(f1); /* unused */ /* lue offset/width taulukot */ for(a=0;a<256;a++) offset[a]=getw(f1); for(a=0;a<256;a++) width[a]=getw(f1); /* lue data */ fread(fontdata,1,BUFFERSIZE,f1); /* valmista tuli */ fclose(f1); return(0); } int printtext(unsigned char *txt) { FILE *prn; int a,b; int o,w; int x=0; /* pixelipaikka rivill„ */ memset(linebuf,0,MAXHEIGTH*LINEWIDTH); while(*txt) { /* niin kauan kuin merkkej„ riitt„„*/ a=(unsigned)*txt; txt++; /* a=merkki, seuraava merkki valmiiksi */ o=offset[a]; /* merkin osoite fileess„ */ if(o==0) o=-1; /* merkill„ ei ole dataa (tyhj„„ t„ynn„) */ else o-=HEADERLENGTH; /* osoite fontdatassa (joka alkaa filen kohdasta HEADERLENGTH) */ w=width[a]; /* leveys */ if(w+x>LINEWIDTH) break; /* rivi loppui, ulos whilesta */ /* kopio merkki rivibufferiin (jos offset==-1, niin kirjain on tyhj„„ t„ynn„ (space etc.) */ if(o!=-1) for(b=0;b] [/S] \"text\"\n"); return(0); } *txt=0; for(a=1;a