📄 sptobdf.c
字号:
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 */voidsp_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; }}voidsp_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 voiddump_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_CLIPstatic fix15 last_y;static int trunc = 0;#endifvoidsp_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'; }}voidsp_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 */voidsp_open_outline(){}voidsp_start_new_char(){}voidsp_start_contour(){}voidsp_curve_to(){}voidsp_line_to(){}voidsp_close_contour(){}voidsp_close_outline(){}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -