blob: 1083b9f49f641f7ff74967baf4f2cddbabb062f6 [file] [log] [blame]
/* outpsfheader - auxiliary fn - not to be installed */
/* assumes a little-endian machine */
#include <stdio.h>
#include <stdlib.h> /* exit */
#include "kbd.h"
#include "psf.h"
static void attr_noreturn
usage(void) {
fprintf(stderr, "call: outpsfheader psftype fontsize charsize hastable\n");
exit(1);
}
int
main(int argc, char **argv){
int psftype, fontsize, charsize, hastable;
if (argc != 5)
usage();
psftype = atoi(argv[1]);
fontsize = atoi(argv[2]);
charsize = atoi(argv[3]);
hastable = atoi(argv[4]);
if (psftype == 1) {
struct psf1_header h1;
if (fontsize != 256 && fontsize != 512)
usage();
h1.magic[0] = PSF1_MAGIC0;
h1.magic[1] = PSF1_MAGIC1;
h1.mode = (fontsize == 256) ? 0 : PSF1_MODE512;
if (hastable)
h1.mode |= PSF1_MODEHASTAB;
h1.charsize = charsize;
if (fwrite(&h1, sizeof(h1), 1, stdout) != 1) {
fprintf(stderr, "write error\n");
exit(1);
}
} else if (psftype == 2) {
struct psf2_header h2;
h2.magic[0] = PSF2_MAGIC0;
h2.magic[1] = PSF2_MAGIC1;
h2.magic[2] = PSF2_MAGIC2;
h2.magic[3] = PSF2_MAGIC3;
h2.version = 0;
h2.headersize = sizeof(h2);
h2.flags = (hastable ? PSF2_HAS_UNICODE_TABLE : 0);
h2.length = fontsize;
h2.charsize = charsize;
h2.width = 8;
h2.height = charsize;
if (fwrite(&h2, sizeof(h2), 1, stdout) != 1) {
fprintf(stderr, "write error\n");
exit(1);
}
} else
usage();
return 0;
}