diff options
Diffstat (limited to 'nx-X11/lib/font/Speedo/sptobdf.c')
-rw-r--r-- | nx-X11/lib/font/Speedo/sptobdf.c | 678 |
1 files changed, 0 insertions, 678 deletions
diff --git a/nx-X11/lib/font/Speedo/sptobdf.c b/nx-X11/lib/font/Speedo/sptobdf.c deleted file mode 100644 index ca3caa515..000000000 --- a/nx-X11/lib/font/Speedo/sptobdf.c +++ /dev/null @@ -1,678 +0,0 @@ -/* $Xorg: sptobdf.c,v 1.4 2001/02/09 02:04:00 xorgcvs Exp $ */ -/* - * Copyright 1990, 1991 Network Computing Devices; - * Portions Copyright 1987 by Digital Equipment Corporation - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the names of Network Computing Devices and - * Digital not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior permission. - * Network Computing Devices and Digital make no representations about the - * suitability of this software for any purpose. It is provided "as is" - * without express or implied warranty. - * - * NETWORK COMPUTING DEVICES AND DIGITAL DISCLAIM ALL WARRANTIES WITH - * REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS, IN NO EVENT SHALL NETWORK COMPUTING DEVICES OR DIGITAL BE - * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Dave Lemke - */ - -/* - -Copyright 1987, 1994, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall -not be used in advertising or otherwise to promote the sale, use or -other dealings in this Software without prior written authorization -from The Open Group. - -*/ - -/* - * Speedo outline to BFD format converter - */ - -#include <stdio.h> -#include "speedo.h" - -#ifdef EXTRAFONTS -#include "ncdkeys.h" -#else -#include "keys.h" -#endif - -#include "iso8859.h" - -#define MAX_BITS 1024 - -#define BBOX_CLIP - -static char line_of_bits[MAX_BITS + 1]; - -static FILE *fp; -static ufix16 char_index, - char_id; -static buff_t font; -static buff_t char_data; -static ufix8 *f_buffer, - *c_buffer; -static ufix16 mincharsize; -static fix15 cur_y; -static fix15 bit_width, - bit_height; - -static ufix8 key[] = -{ - KEY0, - KEY1, - KEY2, - KEY3, - KEY4, - KEY5, - KEY6, - KEY7, - KEY8 -}; /* Font decryption key */ - - -static char *progname; -static char *fontname = NULL; -static char *fontfile = NULL; - -static int point_size = 120; -static int x_res = 72; -static int y_res = 72; -static int quality = 0; -static int iso_encoding = 1; - -static int num_props = 7; -static int stretch = 120; - -static specs_t specs; - -static void dump_header(); - -static void -usage() -{ - fprintf(stderr, "Usage: %s [-xres x resolution] [-yres y resolution]\n\t[-ptsize pointsize] [-fn fontname] [-q quality (0-1)] fontfile\n", progname); - fprintf(stderr, "Where:\n"); - fprintf(stderr, "-xres specifies the X resolution (72)\n"); - fprintf(stderr, "-yres specifies the Y resolution (72)\n"); - fprintf(stderr, "-pts specifies the pointsize in decipoints (120)\n"); - fprintf(stderr, "-fn specifies the font name (full Bitstream name)\n"); - fprintf(stderr, "-q specifies the font quality [0-1] (0)\n"); - fprintf(stderr, "\n"); - exit(0); -} - -static fix15 -read_2b(ptr) - ufix8 *ptr; -{ - fix15 tmp; - - tmp = *ptr++; - tmp = (tmp << 8) + *ptr; - return tmp; -} - -static fix31 -read_4b(ptr) - ufix8 *ptr; -{ - fix31 tmp; - - tmp = *ptr++; - tmp = (tmp << 8) + *ptr++; - tmp = (tmp << 8) + *ptr++; - tmp = (tmp << 8) + *ptr; - return tmp; -} - -static void -process_args(ac, av) - int ac; - char **av; -{ - int i; - - for (i = 1; i < ac; i++) { - if (!strncmp(av[i], "-xr", 3)) { - if (av[i + 1]) { - x_res = atoi(av[++i]); - } else - usage(); - } else if (!strncmp(av[i], "-yr", 3)) { - if (av[i + 1]) { - y_res = atoi(av[++i]); - } else - usage(); - } else if (!strncmp(av[i], "-pt", 3)) { - if (av[i + 1]) { - point_size = atoi(av[++i]); - } else - usage(); - } else if (!strncmp(av[i], "-fn", 3)) { - if (av[i + 1]) { - fontname = av[++i]; - } else - usage(); - } else if (!strncmp(av[i], "-q", 2)) { - if (av[i + 1]) { - quality = atoi(av[++i]); - } else - usage(); - } else if (!strncmp(av[i], "-st", 3)) { - if (av[i + 1]) { - stretch = atoi(av[++i]); - } else - usage(); - } else if (!strncmp(av[i], "-noni", 5)) { - iso_encoding = 0; - } else if (*av[i] == '-') { - usage(); - } else - fontfile = av[i]; - } - if (!fontfile) - usage(); -} - -void -main(argc, argv) - int argc; - char **argv; -{ - ufix32 i; - ufix8 tmp[16]; - ufix32 minbufsize; - ufix16 cust_no; - int first_char_index, - num_chars; - - progname = argv[0]; - process_args(argc, argv); - fp = fopen(fontfile, "r"); - if (!fp) { - fprintf(stderr, "No such font file, \"%s\"\n", fontfile); - exit(-1); - } - if (fread(tmp, sizeof(ufix8), 16, fp) != 16) { - fprintf(stderr, "error reading \"%s\"\n", fontfile); - exit(-1); - } - minbufsize = (ufix32) read_4b(tmp + FH_FBFSZ); - f_buffer = (ufix8 *) malloc(minbufsize); - if (!f_buffer) { - fprintf(stderr, "can't get %x bytes of memory\n", minbufsize); - exit(-1); - } - fseek(fp, (ufix32) 0, 0); - - if (fread(f_buffer, sizeof(ufix8), (ufix16) minbufsize, fp) != minbufsize) { - fprintf(stderr, "error reading file \"%s\"\n", fontfile); - exit(-1); - } - mincharsize = read_2b(f_buffer + FH_CBFSZ); - - c_buffer = (ufix8 *) malloc(mincharsize); - if (!c_buffer) { - fprintf(stderr, "can't get %x bytes for char buffer\n", mincharsize); - exit(-1); - } - /* init */ - sp_reset(); - - font.org = f_buffer; - font.no_bytes = minbufsize; - - if ((cust_no = sp_get_cust_no(font)) != CUS0) { - fprintf(stderr, "Non-standard encryption for \"%s\"\n", fontfile); - exit(-1); - } - sp_set_key(key); - - first_char_index = read_2b(f_buffer + FH_FCHRF); - num_chars = read_2b(f_buffer + FH_NCHRL); - - /* set up specs */ - /* Note that point size is in decipoints */ - specs.pfont = &font; - /* XXX beware of overflow */ - specs.xxmult = point_size * x_res / 720 * (1 << 16); - specs.xymult = 0L << 16; - specs.xoffset = 0L << 16; - specs.yxmult = 0L << 16; - specs.yymult = point_size * y_res / 720 * (1 << 16); - specs.yoffset = 0L << 16; - switch (quality) { - case 0: - specs.flags = 0; - break; - case 1: - specs.flags = MODE_SCREEN; - break; - case 2: - specs.flags = MODE_2D; - break; - default: - fprintf(stderr, "bogus quality value %d\n", quality); - break; - } - specs.out_info = NULL; - - if (!fontname) { - fontname = (char *) (f_buffer + FH_FNTNM); - } - if (iso_encoding) - num_chars = num_iso_chars; - dump_header(num_chars); - - if (!sp_set_specs(&specs)) { - fprintf(stderr, "can't set specs\n"); - } else { - if (iso_encoding) { - for (i = 0; i < num_iso_chars * 2; i += 2) { - char_index = iso_map[i + 1]; - char_id = iso_map[i]; - if (!sp_make_char(char_index)) { - fprintf(stderr, "can't make char %x\n", char_index); - } - } - } else { - for (i = 0; i < num_chars; i++) { - char_index = i + first_char_index; - char_id = sp_get_char_id(char_index); - if (char_id) { - if (!sp_make_char(char_index)) { - fprintf(stderr, "can't make char %x\n", char_index); - } - } - } - } - } - - (void) fclose(fp); - - printf("ENDFONT\n"); - exit(0); -} - -static void -dump_header(num_chars) - ufix32 num_chars; -{ - fix15 xmin, - ymin, - xmax, - ymax; - fix15 ascent, - descent; - fix15 pixel_size; - - xmin = read_2b(f_buffer + FH_FXMIN); - ymin = read_2b(f_buffer + FH_FYMIN); - xmax = read_2b(f_buffer + FH_FXMAX); - ymax = read_2b(f_buffer + FH_FYMAX); - pixel_size = point_size * x_res / 720; - - printf("STARTFONT 2.1\n"); - printf("COMMENT\n"); - printf("COMMENT Generated from Bitstream Speedo outlines via sptobdf\n"); - printf("COMMENT\n"); - printf("FONT %s\n", fontname); - printf("SIZE %d %d %d\n", pixel_size, x_res, y_res); - printf("FONTBOUNDINGBOX %d %d %d %d\n", xmin, ymin, xmax, ymax); - printf("STARTPROPERTIES %d\n", num_props); - - printf("RESOLUTION_X %d\n", x_res); - printf("RESOLUTION_Y %d\n", y_res); - printf("POINT_SIZE %d\n", point_size); - printf("PIXEL_SIZE %d\n", pixel_size); - printf("COPYRIGHT \"%s\"\n", f_buffer + FH_CPYRT); - - /* do some stretching here so that its isn't too tight */ - pixel_size = pixel_size * stretch / 100; - ascent = pixel_size * 764 / 1000; /* 764 == EM_TOP */ - descent = pixel_size - ascent; - printf("FONT_ASCENT %d\n", ascent); - printf("FONT_DESCENT %d\n", descent); - - printf("ENDPROPERTIES\n"); - printf("CHARS %d\n", num_chars); -} - -buff_t * -sp_load_char_data(file_offset, num, cb_offset) - fix31 file_offset; - fix15 num; - fix15 cb_offset; -{ - if (fseek(fp, (long) file_offset, (int) 0)) { - fprintf(stderr, "can't seek to char\n"); - (void) fclose(fp); - exit(-1); - } - if ((num + cb_offset) > mincharsize) { - fprintf(stderr, "char buf overflow\n"); - (void) fclose(fp); - exit(-2); - } - if (fread((c_buffer + cb_offset), sizeof(ufix8), num, fp) != num) { - fprintf(stderr, "can't get char data\n"); - exit(-1); - } - char_data.org = (ufix8 *) c_buffer + cb_offset; - char_data.no_bytes = num; - - return &char_data; -} - -/* - * Called by Speedo character generator to report an error. - * - * Since character data not available is one of those errors - * that happens many times, don't report it to user - */ -void -sp_report_error(n) - fix15 n; -{ - switch (n) { - case 1: - fprintf(stderr, "Insufficient font data loaded\n"); - break; - case 3: - fprintf(stderr, "Transformation matrix out of range\n"); - break; - case 4: - fprintf(stderr, "Font format error\n"); - break; - case 5: - fprintf(stderr, "Requested specs not compatible with output module\n"); - break; - case 7: - fprintf(stderr, "Intelligent transformation requested but not supported\n"); - break; - case 8: - fprintf(stderr, "Unsupported output mode requested\n"); - break; - case 9: - fprintf(stderr, "Extended font loaded but only compact fonts supported\n"); - break; - case 10: - fprintf(stderr, "Font specs not set prior to use of font\n"); - break; - case 12: - break; - case 13: - fprintf(stderr, "Track kerning data not available()\n"); - break; - case 14: - fprintf(stderr, "Pair kerning data not available()\n"); - break; - default: - fprintf(stderr, "report_error(%d)\n", n); - break; - } -} - -void -sp_open_bitmap(x_set_width, y_set_width, xorg, yorg, xsize, ysize) - fix31 x_set_width; - fix31 y_set_width; - fix31 xorg; - fix31 yorg; - fix15 xsize; - fix15 ysize; -{ - fix15 i; - fix15 off_horz; - fix15 off_vert; - fix31 width, - pix_width; - bbox_t bb; - - bit_width = xsize; - - bit_height = ysize; - off_horz = (fix15) ((xorg + 32768L) >> 16); - off_vert = (fix15) ((yorg + 32768L) >> 16); - - if (bit_width > MAX_BITS) { - -#ifdef DEBUG - fprintf(stderr, "char wider than max bits -- truncated\n"); -#endif - - bit_width = MAX_BITS; - } - width = sp_get_char_width(char_index); - pix_width = width * (specs.xxmult / 65536L) + - ((ufix32) width * ((ufix32) specs.xxmult & 0xffff)) / 65536L; - pix_width /= 65536L; - - width = (pix_width * 7200L) / (point_size * y_res); - - (void) sp_get_char_bbox(char_index, &bb); - bb.xmin >>= 16; - bb.ymin >>= 16; - bb.xmax >>= 16; - bb.ymax >>= 16; - -#ifdef DEBUG - if ((bb.xmax - bb.xmin) != bit_width) - fprintf(stderr, "bbox & width mismatch 0x%x (%d) (%d vs %d)\n", - char_index, char_id, (bb.xmax - bb.xmin), bit_width); - if ((bb.ymax - bb.ymin) != bit_height) - fprintf(stderr, "bbox & height mismatch 0x%x (%d) (%d vs %d)\n", - char_index, char_id, (bb.ymax - bb.ymin), bit_height); - if (bb.xmin != off_horz) - fprintf(stderr, "x min mismatch 0x%x (%d) (%d vs %d)\n", - char_index, char_id, bb.xmin, off_horz); - if (bb.ymin != off_vert) - fprintf(stderr, "y min mismatch 0x%x (%d) (%d vs %d)\n", - char_index, char_id, bb.ymin, off_vert); -#endif - -#ifdef BBOX_CLIP - bit_width = bb.xmax - bb.xmin; - bit_height = bb.ymax - bb.ymin; - off_horz = bb.xmin; - off_vert = bb.ymin; -#endif - - /* XXX kludge to handle space */ - if (bb.xmin == 0 && bb.ymin == 0 && bb.xmax == 0 && bb.ymax == 0 && - width) { - bit_width = 1; - bit_height = 1; - } - printf("STARTCHAR %d\n", char_id); - printf("ENCODING %d\n", char_id); - printf("SWIDTH %d 0\n", width); - printf("DWIDTH %d 0\n", pix_width); - printf("BBX %d %d %d %d\n", bit_width, bit_height, off_horz, off_vert); - printf("BITMAP\n"); - - for (i = 0; i < bit_width; i++) { - line_of_bits[i] = '.'; - } - line_of_bits[bit_width] = '\0'; - cur_y = 0; -} - -static void -dump_line(line) - ufix8 *line; -{ - int bit; - unsigned byte; - - byte = 0; - for (bit = 0; bit < bit_width; bit++) { - if (line[bit] == 'X') - byte |= (1 << (7 - (bit & 7))); - if ((bit & 7) == 7) { - printf("%02X", byte); - byte = 0; - } - } - if ((bit & 7) != 0) - printf("%02X", byte); - printf("\n"); -} - -#ifdef BBOX_CLIP -static fix15 last_y; -static int trunc = 0; - -#endif - -void -sp_set_bitmap_bits(y, xbit1, xbit2) - fix15 y; - fix15 xbit1; - fix15 xbit2; -{ - fix15 i; - - if (xbit1 > MAX_BITS) { - -#ifdef DEBUG - fprintf(stderr, "run wider than max bits -- truncated\n"); -#endif - - xbit1 = MAX_BITS; - } - if (xbit2 > MAX_BITS) { - -#ifdef DEBUG - fprintf(stderr, "run wider than max bits -- truncated\n"); -#endif - - xbit2 = MAX_BITS; - } - while (cur_y != y) { - dump_line(line_of_bits); - for (i = 0; i < bit_width; i++) { - line_of_bits[i] = '.'; - } - cur_y++; - } - -#ifdef BBOX_CLIP - last_y = y; - if (y >= bit_height) { - -#ifdef DEBUG - fprintf(stderr, - "y value is larger than height 0x%x (%d) -- truncated\n", - char_index, char_id); -#endif - - trunc = 1; - return; - } -#endif /* BBOX_CLIP */ - - for (i = xbit1; i < xbit2; i++) { - line_of_bits[i] = 'X'; - } -} - -void -sp_close_bitmap() -{ - -#ifdef BBOX_CLIP - int i; - - if (!trunc) - dump_line(line_of_bits); - trunc = 0; - - - last_y++; - while (last_y < bit_height) { - -#ifdef DEBUG - fprintf(stderr, "padding out height for 0x%x (%d)\n", - char_index, char_id); -#endif - - for (i = 0; i < bit_width; i++) { - line_of_bits[i] = '.'; - } - dump_line(line_of_bits); - last_y++; - } - -#else - dump_line(line_of_bits); -#endif - - printf("ENDCHAR\n"); -} - -/* outline stubs */ -void -sp_open_outline() -{ -} - -void -sp_start_new_char() -{ -} - -void -sp_start_contour() -{ -} - -void -sp_curve_to() -{ -} - -void -sp_line_to() -{ -} - -void -sp_close_contour() -{ -} - -void -sp_close_outline() -{ -} |