Home | History | Annotate | Line # | Download | only in hpc
fontconv.c revision 1.2.2.1
      1  1.2.2.1  thorpej /*	$NetBSD: fontconv.c,v 1.2.2.1 2002/01/10 19:53:56 thorpej Exp $	*/
      2  1.2.2.1  thorpej 
      3  1.2.2.1  thorpej #include <sys/cdefs.h>
      4  1.2.2.1  thorpej __KERNEL_RCSID(0, "$NetBSD: fontconv.c,v 1.2.2.1 2002/01/10 19:53:56 thorpej Exp $");
      5      1.1      uch 
      6      1.1      uch #include <stdio.h>
      7      1.1      uch 
      8      1.1      uch 
      9      1.1      uch int width, height, ascent;
     10      1.1      uch char *fontname;
     11      1.1      uch FILE *ifp;
     12      1.1      uch FILE *ofp;
     13      1.1      uch 
     14      1.1      uch 
     15      1.1      uch void fc_rcons(int ac, char* av[]);
     16      1.1      uch void fc_rasops(int ac, char* av[]);
     17      1.1      uch 
     18      1.1      uch 
     19      1.1      uch main(int ac, char* av[])
     20      1.1      uch {
     21      1.1      uch 	ifp = stdin;
     22      1.1      uch 	ofp = stdout;
     23      1.1      uch 	width = 8;
     24      1.1      uch 	height = 8;
     25      1.1      uch 	ascent = 8;
     26      1.1      uch 	fontname = "vt220l";
     27      1.1      uch 
     28      1.1      uch 	/*
     29      1.1      uch 	  fc_rcons(ac, av);
     30      1.1      uch 	*/
     31      1.1      uch 	fc_rasops(ac, av);
     32      1.1      uch }
     33      1.1      uch 
     34      1.1      uch 
     35      1.1      uch void
     36      1.1      uch fc_rasops(int ac, char* av[])
     37      1.1      uch {
     38      1.1      uch 	int code;
     39      1.1      uch 	int width_in_bytes;
     40      1.1      uch 	long code_min = 0x10000;
     41      1.1      uch 	long code_max = -1;
     42      1.1      uch 
     43      1.1      uch 	width_in_bytes = (width + 7) / 8;
     44      1.1      uch 
     45      1.1      uch 	code = 0;
     46      1.1      uch 	fprintf(ofp, "static u_char %s%dx%d_data[] = {\n",
     47      1.2      uch 	    fontname, width, height, code);
     48      1.1      uch 	while (1) {
     49      1.1      uch 		int n;
     50      1.1      uch 		int i, j, k;
     51      1.1      uch 		unsigned char buf[200];
     52      1.1      uch 
     53      1.1      uch 		n = fread(buf, width_in_bytes, height, ifp);
     54      1.1      uch 		if (n != height) {
     55      1.1      uch 			if (!feof(ifp)) {
     56      1.1      uch 				perror("fread()");
     57      1.1      uch 				exit(1);
     58      1.1      uch 			} else {
     59      1.1      uch 				break;
     60      1.1      uch 			}
     61      1.1      uch 		}
     62      1.1      uch 
     63      1.1      uch 		k = 0;
     64      1.1      uch 		fprintf(ofp, "    /* code %d */\n", code);
     65      1.1      uch 		for (i = 0; i < height; i++) {
     66      1.1      uch 			unsigned long d = 0, m;
     67      1.1      uch 			fprintf(ofp, "    ");
     68      1.1      uch 			for (j = 0; j < width_in_bytes; j++) {
     69      1.1      uch 				d |= (((unsigned long)buf[k]) << (24 - 8*j));
     70      1.1      uch 				fprintf(ofp, "0x%02x,", (buf[k] & 0xff));
     71      1.1      uch 				k++;
     72      1.1      uch 			}
     73      1.1      uch 			fprintf(ofp, " /* ");
     74      1.1      uch 			for (m = 0x80000000, j = 0; j < width; j++, m >>= 1) {
     75      1.1      uch 				printf((m & d) ? "##" : "..");
     76      1.1      uch 			}
     77      1.1      uch 			fprintf(ofp, " */\n");
     78      1.1      uch 		}
     79      1.1      uch 		fprintf(ofp, "\n");
     80      1.1      uch 		if (code < code_min) {
     81      1.1      uch 			code_min = code;
     82      1.1      uch 		}
     83      1.1      uch 		if (code_max < code) {
     84      1.1      uch 			code_max = code;
     85      1.1      uch 		}
     86      1.1      uch 		code++;
     87      1.1      uch 	}
     88      1.1      uch 	fprintf(ofp, "};\n");
     89      1.1      uch 
     90      1.1      uch 	fprintf(ofp, "struct wsdisplay_font %s%dx%d = {\n",
     91      1.2      uch 	    fontname, width, height);
     92      1.1      uch 	fprintf(ofp, "    \"%s\",\t\t\t/* typeface name */\n", fontname);
     93      1.1      uch 	fprintf(ofp, "    0x%02x,\t\t\t/* firstchar */\n", code_min);
     94      1.1      uch 	fprintf(ofp, "    %d,\t\t\t/* numchars */\n", code_max - code_min + 1);
     95      1.1      uch 	fprintf(ofp, "    WSDISPLAY_FONTENC_ISO,\t/* encoding */\n");
     96      1.1      uch 	fprintf(ofp, "    %d,\t\t\t\t/* width */\n", width);
     97      1.1      uch 	fprintf(ofp, "    %d,\t\t\t\t/* height */\n", height);
     98      1.1      uch 	fprintf(ofp, "    %d,\t\t\t\t/* stride */\n", width_in_bytes);
     99      1.1      uch 	fprintf(ofp, "    WSDISPLAY_FONTENC_L2R,\t/* bit order */\n");
    100      1.1      uch 	fprintf(ofp, "    WSDISPLAY_FONTENC_L2R,\t/* byte order */\n");
    101      1.1      uch 	fprintf(ofp, "    %s%dx%d_data\t\t/* data */\n",
    102      1.2      uch 	    fontname, width, height);
    103      1.1      uch 	fprintf(ofp, "};\n");
    104      1.1      uch }
    105      1.1      uch 
    106      1.1      uch 
    107      1.1      uch void
    108      1.1      uch fc_rcons(int ac, char* av[])
    109      1.1      uch {
    110      1.1      uch 	int code;
    111      1.1      uch 	int width_in_bytes;
    112      1.1      uch 	long code_min = 0x10000;
    113      1.1      uch 	long code_max = -1;
    114      1.1      uch 
    115      1.1      uch 	width_in_bytes = (width + 7) / 8;
    116      1.1      uch 
    117      1.1      uch 	code = 0;
    118      1.1      uch 	while (1) {
    119      1.1      uch 		int n;
    120      1.1      uch 		int i, j, k;
    121      1.1      uch 		unsigned char buf[200];
    122      1.1      uch 
    123      1.1      uch 		n = fread(buf, width_in_bytes, height, ifp);
    124      1.1      uch 		if (n != height) {
    125      1.1      uch 			if (!feof(ifp)) {
    126      1.1      uch 				perror("fread()");
    127      1.1      uch 				exit(1);
    128      1.1      uch 			} else {
    129      1.1      uch 				break;
    130      1.1      uch 			}
    131      1.1      uch 		}
    132      1.1      uch 
    133      1.1      uch 		fprintf(ofp, "static u_int32_t %s%dx%d_%d_pix[] = {\n",
    134      1.2      uch 		    fontname, width, height, code);
    135      1.1      uch 
    136      1.1      uch 		k = 0;
    137      1.1      uch 		for (i = 0; i < height; i++) {
    138      1.1      uch 			unsigned long d = 0, m;
    139      1.1      uch 			for (j = 0; j < width_in_bytes; j++) {
    140      1.1      uch 				d |= (((unsigned long)buf[k++]) << (24 - 8*j));
    141      1.1      uch 			}
    142      1.1      uch 			fprintf(ofp, "    0x%08x, /* ", d);
    143      1.1      uch 			for (m = 0x80000000, j = 0; j < width; j++, m >>= 1) {
    144      1.1      uch 				printf((m & d) ? "##" : "..");
    145      1.1      uch 			}
    146      1.1      uch 			fprintf(ofp, " */\n");
    147      1.1      uch 		}
    148      1.1      uch 		fprintf(ofp, "};\n");
    149      1.1      uch 		fprintf(ofp, "static struct raster %s%dx%d_%d = {",
    150      1.2      uch 		    fontname, width, height, code);
    151      1.1      uch 		fprintf(ofp, " %d, %d, 1, 1, %s%dx%d_%d_pix, 0 };\n",
    152      1.2      uch 		    width, height, fontname, width, height, code);
    153      1.1      uch 		if (code < code_min) {
    154      1.1      uch 			code_min = code;
    155      1.1      uch 		}
    156      1.1      uch 		if (code_max < code) {
    157      1.1      uch 			code_max = code;
    158      1.1      uch 		}
    159      1.1      uch 		code++;
    160      1.1      uch 	}
    161      1.1      uch 
    162      1.1      uch 	fprintf(ofp, "struct raster_font %s%dx%d = {\n",
    163      1.2      uch 	    fontname, width, height);
    164      1.1      uch 	fprintf(ofp, "    %d, %d, %d, ", width, height, ascent);
    165      1.1      uch 	fprintf(ofp, "RASFONT_FIXEDWIDTH|RASFONT_NOVERTICALMOVEMENT,\n");
    166      1.1      uch 	fprintf(ofp, "    {\n");
    167      1.1      uch 	for (code = code_min; code <= code_max; code++) {
    168      1.1      uch 		fprintf(ofp, "        { &%s%dx%d_%d, ",
    169      1.2      uch 		    fontname, width, height, code);
    170      1.1      uch 		fprintf(ofp, "%d, %d, %d, %d },\n", 0, -ascent, width, 0);
    171      1.1      uch 	}
    172      1.1      uch 	fprintf(ofp, "    },\n");
    173      1.1      uch 	fprintf(ofp, "#ifdef COLORFONT_CACHE\n");
    174      1.1      uch 	fprintf(ofp, "    (struct raster_fontcache*) -1\n");
    175      1.1      uch 	fprintf(ofp, "#endif /*COLORFONT_CACHE*/\n");
    176      1.1      uch 	fprintf(ofp, "};\n");
    177      1.1      uch }
    178