|
|
GNU Mach 1.0
/*
* 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 [email protected]
* 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);
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.