📄 pfbtops.c
字号:
/* This translates ps fonts in .pfb format to ASCII ps files. */#include <stdio.h>/* Binary bytes per output line. */#define BYTES_PER_LINE (79/2)#define HEX_DIGITS "0123456789ABCDEF"static char *program_name;static void error(s) char *s;{ fprintf(stderr, "%s: %s\n", program_name, s); exit(2);}static void usage(){ fprintf(stderr, "usage: %s [-v] [pfb_file]\n", program_name); exit(1);}int main(argc, argv) int argc; char **argv;{ int opt; extern int optind; program_name = argv[0]; while ((opt = getopt(argc, argv, "v")) != EOF) { switch (opt) { case 'v': { extern char *version_string; fprintf(stderr, "pfbtops groff version %s\n", version_string); fflush(stderr); break; } case '?': usage(); } } if (argc - optind > 1) usage(); if (argc > optind && !freopen(argv[optind], "r", stdin)) { perror(argv[optind]); exit(1); } for (;;) { int type, c, i; long n; c = getchar(); if (c != 0x80) error("first byte of packet not 0x80"); type = getchar(); if (type == 3) break; if (type != 1 && type != 2) error("bad packet type"); n = 0; for (i = 0; i < 4; i++) { c = getchar(); if (c == EOF) error("end of file in packet header"); n |= (long)c << (i << 3); } if (n < 0) error("negative packet length"); if (type == 1) { while (--n >= 0) { c = getchar(); if (c == EOF) error("end of file in text packet"); if (c == '\r') c = '\n'; putchar(c); } if (c != '\n') putchar('\n'); } else { int count = 0; while (--n >= 0) { c = getchar(); if (c == EOF) error("end of file in binary packet"); if (count >= BYTES_PER_LINE) { putchar('\n'); count = 0; } count++; putchar(HEX_DIGITS[(c >> 4) & 0xf]); putchar(HEX_DIGITS[c & 0xf]); } putchar('\n'); } } exit(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -