static void load_vt4font(FILE *f) { struct vt4font_header fh; static vfnt_t vfnt; size_t glyphsize; unsigned int i; if (fread(&fh, sizeof fh, 1, f) != 1) { warn("read file_header"); return; } if (memcmp(fh.magic, "VFNT0002", 8) != 0) { warnx("bad magic in font file\n"); return; } for (i = 0; i < VFNT_MAPS; i++) vfnt.map_count[i] = be32toh(fh.map_count[i]); vfnt.glyph_count = be32toh(fh.glyph_count); vfnt.width = fh.width; vfnt.height = fh.height; glyphsize = howmany(vfnt.width, 8) * vfnt.height * vfnt.glyph_count; if ((vfnt.glyphs = malloc(glyphsize)) == NULL) { warn("malloc"); return; } if (fread(vfnt.glyphs, glyphsize, 1, f) != 1) { warn("read glyphs"); free(vfnt.glyphs); return; } for (i = 0; i < VFNT_MAPS; i++) vfnt.map[i] = load_vt4mappingtable(vfnt.map_count[i], f); if (ioctl(STDIN_FILENO, PIO_VFONT, &vfnt) == -1) warn("PIO_VFONT"); for (i = 0; i < VFNT_MAPS; i++) free(vfnt.map[i]); free(vfnt.glyphs); }
static int load_vt4font(FILE *f) { struct vt4font_header fh; static vfnt_t vfnt; size_t glyphsize; unsigned int i; if (fread(&fh, sizeof fh, 1, f) != 1) { perror("file_header"); return (1); } if (memcmp(fh.magic, "VFNT0002", 8) != 0) { fprintf(stderr, "Bad magic\n"); return (1); } for (i = 0; i < VFNT_MAPS; i++) vfnt.map_count[i] = be32toh(fh.map_count[i]); vfnt.glyph_count = be32toh(fh.glyph_count); vfnt.width = fh.width; vfnt.height = fh.height; glyphsize = howmany(vfnt.width, 8) * vfnt.height * vfnt.glyph_count; vfnt.glyphs = malloc(glyphsize); if (fread(vfnt.glyphs, glyphsize, 1, f) != 1) { perror("glyphs"); return (1); } for (i = 0; i < VFNT_MAPS; i++) vfnt.map[i] = load_vt4mappingtable(vfnt.map_count[i], f); if (ioctl(STDIN_FILENO, PIO_VFONT, &vfnt) == -1) { perror("PIO_VFONT"); return (1); } return (0); }