main()
{
int i;
- int digitsout; /* how many hex digits we output in a bitmap */
+ int rownum; /* number of lines we output in bitmap */
int thispoint;
char inbuf[MAXBUF];
int bbxx, bbxy, bbxxoff, bbxyoff;
- int descent=4; /* font descent wrt baseline */
+ int descent=2; /* font descent wrt baseline */
int startrow; /* row to start glyph */
+ int rowlen; /* number of digits per row */
unsigned rowout;
while (fgets (inbuf, MAXBUF - 1, stdin)) {
if (strncmp (inbuf, "ENCODING ", 9)) continue;
sscanf (&inbuf[9], "%d", &thispoint); /* get code point */
+ while (fgets (inbuf, MAXBUF - 1, stdin)) {
+ if (!strncmp (inbuf, "DWIDTH ", 7)) break;
+ }
+ sscanf (&inbuf[7], "%d", &rowlen);
+ rowlen >>= 2;
+
/* Read bounding box values from BBX line */
while (fgets (inbuf, MAXBUF - 1, stdin)) {
if (!strncmp (inbuf, "BBX ", 4)) break;
}
fprintf (stdout, "%04X:", thispoint);
- digitsout = 0;
+ rownum = 0;
/* Print initial blank rows */
startrow = descent + bbxyoff + bbxy;
/* Force everything to 16 pixels wide */
for (i = 16; i > startrow; i--) {
- fprintf (stdout,"0000");
- digitsout += 4;
+ fprintf (stdout, "%0*d", rowlen, 0);
+ rownum++;
}
/* Copy bitmap until END */
while (fgets (inbuf, MAXBUF - 1, stdin)) {
if (!strncmp (inbuf, "END", 3)) break;
sscanf (inbuf, "%X", &rowout);
- /* Now force glyph to a 16x16 grid even if they'd fit in 8x16 */
- if (bbxx <= 8) rowout <<= 8; /* shift left for 16x16 glyph */
+ if (rowlen >= 4 && bbxx <= 8) rowout <<= 8; /* force 8x16 input to 16x16 grid */
rowout >>= bbxxoff;
- fprintf (stdout, "%04X", rowout);
- digitsout += 4;
+ fprintf (stdout, "%0*X", rowlen, rowout);
+ rownum++;
}
- /* Pad for 16x16 glyph */
- while (digitsout < 64) {
- fprintf (stdout,"0000");
- digitsout += 4;
+ /* Pad empty lines until glyph has sufficient height */
+ while (rownum < 16) {
+ fprintf (stdout, "%0*d", rowlen, 0);
+ rownum++;
}
fprintf (stdout,"\n");
}