summaryrefslogtreecommitdiff
path: root/chips/build_font.c
diff options
context:
space:
mode:
Diffstat (limited to 'chips/build_font.c')
-rw-r--r--chips/build_font.c132
1 files changed, 132 insertions, 0 deletions
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 <stdio.h>
+
+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);
+}