From f07a4c844da9f0ecae5bbee1ab94be56505f26f7 Mon Sep 17 00:00:00 2001 From: Thomas Bushnell Date: Tue, 25 Feb 1997 21:28:37 +0000 Subject: Initial source --- chips/build_font.c | 132 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 chips/build_font.c (limited to 'chips/build_font.c') diff --git a/chips/build_font.c b/chips/build_font.c new file mode 100644 index 0000000..2542351 --- /dev/null +++ b/chips/build_font.c @@ -0,0 +1,132 @@ +/* + * Mach Operating System + * Copyright (c) 1991,1990,1989 Carnegie Mellon University + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie Mellon + * the rights to redistribute these changes. + */ +/* + * File: build_font.c + * Author: Alessandro Forin, Carnegie Mellon University + * Date: 10/90 + * + * + * Takes a font description file and generates a C source + * appropriate for use as kernel font on mips/vax boxes. + * This basically means encoding and mirroring the bitmaps. + */ + +#include + +main(argc,argv) + char **argv; +{ + int fd; + FILE *fout; + int i, j, k, n, l; + int first, last; + char *fname = "kernel_font.data"; + char buf[16*9]; + int verbose = 0; + + if (argc > 1 && argv[1][0] == '+') + verbose++, argc--, argv++; + + first = 0; + last = 190; /* 8-bit ASCII, offset by 'space' */ + if (argc > 1) { + first = atoi(argv[1]); + last = first + 1; + } + if (argc > 2) + last = atoi(argv[2]) + 1; + if (argc > 3) + fname = argv[3]; + + fd = open(fname, 0, 0); + fout = fopen("kernel_font.c", "w"); + + fprintf(fout, "/* \n\ + * Mach Operating System\n\ + * Copyright (c) 1989 Carnegie-Mellon University\n\ + * All rights reserved. The CMU software License Agreement specifies\n\ + * the terms and conditions for use and redistribution.\n\ + */\n\ +/*\n\ + * THIS FILE WAS GENERATED BY %s FROM %s\n\ + * IF YOU NEED TO, BE SURE YOU EDIT THE REAL THING!\n\ + */\n\ +/*\n\ + * Object:\n\ + * kfont_7x14 EXPORTED array\n\ + *\n\ + * Kernel font for printable ASCII chars\n\ + *\n\ + * The smallest index in this array corresponds to a\n\ + * space. So, we start at 0x20 in the ascii table.\n\ + * Note that glyphs are mirrored (byteorder, I think)\n\ + * the commented bitmap shows how they really look like\n\ + */\n\ +\n\ +unsigned char kfont_7x14[] = {\n", argv[0], fname); + +skip_comments: + read(fd, buf, 1); + if (buf[0] == '#') { + do + read(fd, buf, 1); + while (buf[0] != '\n'); + goto skip_comments; + } + lseek(fd, -1, 1); /* put char back */ + + /* if must skip some */ + for (l = 0; l < first; l++) + read(fd, buf, 2+(9*15)); + + /* scan for real now */ + for (i = first; i < last; i++) { + /* read one full glyph */ + if (read(fd, buf, 2+(9*15)) < 0) + break; + if (verbose) + printf("Character '%c':\n\t", buf[0]); + /* index and char itself in comments */ + fprintf(fout, "/* %3x '%c' */\n", i, 0x20+i); + + /* encode and mirror each one of the 15 scanlines */ + for (n = 0; n < 15; n++) { + unsigned char cc[8], swap = 0; + /* 8 bits per scanline */ + for (k = 2+(n*9), j = 0; j < 8; k++, j++) { + if (verbose) + printf("%c", (buf[k] == '1') ? '@' : ' '); + swap = ((buf[k] - '0') << 7) | (swap >> 1); + cc[j] = buf[k]; + } + fprintf(fout,"\t/* %8s */\t%#2x,\n", cc, (unsigned char)swap); + if (verbose) + printf("\n\t"); + } + } + fprintf(fout, "};\n"); + fclose(fout); +} -- cgit v1.2.3