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