|
|
1.1 ! root 1: ! 2: ! 3: /* ! 4: * ! 5: * Reads raster files in Imagen's format and dumps all the glyphs, or ! 6: * just the ones selected by the -o option, to stdout. The non-option ! 7: * arguments are the names of the raster files that you want to display. ! 8: * For example to dump glyphs 12, 23, and 24 in raster file cmasc10.r10 ! 9: * just type, ! 10: * ! 11: * readrast -o12,23,24 cmasc10.r10 ! 12: * ! 13: * The raster files are all assumed to be in directory *rastdir, which by ! 14: * default is set to ".", but it can be changed by using the -R option. ! 15: * ! 16: * A word of warning is in order here. Because I've written readrastfile() ! 17: * so it accepts two different raster file naming conventions there isn't ! 18: * a one to one mapping of file names to font name, size pairs. That means ! 19: * if you have two similiarly named raster files, differing only in the ! 20: * naming convention used, and you keep them in the same directory you'll ! 21: * always display glyphs from the preferred file no matter which file ! 22: * you list on the command line. I don't think it will cause any real ! 23: * problems so I'm not going to change any of this stuff. ! 24: * ! 25: */ ! 26: ! 27: ! 28: #include <stdio.h> ! 29: ! 30: #include "gen.h" /* general purpose definitions */ ! 31: #include "ext.h" /* external variable declarations */ ! 32: #include "rast.h" /* raster file definitions */ ! 33: ! 34: ! 35: /*****************************************************************************/ ! 36: ! 37: ! 38: main(agc, agv) ! 39: ! 40: ! 41: int agc; ! 42: char *agv[]; ! 43: ! 44: ! 45: { ! 46: ! 47: ! 48: /* ! 49: * ! 50: * As I mentioned before this program is used to display glyph bitmaps ! 51: * from Imagen formatted raster files on stdout. Use the -o option to ! 52: * select one or more glyphs. ! 53: * ! 54: */ ! 55: ! 56: ! 57: argc = agc; /* other routines may want them */ ! 58: argv = agv; ! 59: ! 60: prog_name = argv[0]; /* really just for error messages */ ! 61: rastdir = "."; /* current directory by default */ ! 62: ! 63: options(); /* first get command line options */ ! 64: arguments(); /* then process non-option arguments */ ! 65: ! 66: exit(x_stat); /* everything probably went OK */ ! 67: ! 68: } /* End of main */ ! 69: ! 70: ! 71: /*****************************************************************************/ ! 72: ! 73: ! 74: options() ! 75: ! 76: ! 77: { ! 78: ! 79: ! 80: int ch; /* return value from getopt() */ ! 81: char *names = "DIF:R:o:"; ! 82: ! 83: extern char *optarg; /* used by getopt() */ ! 84: extern int optind; ! 85: ! 86: ! 87: /* ! 88: * ! 89: * Reads and processes the command line options. Right now the recognized ! 90: * options are, ! 91: * ! 92: */ ! 93: ! 94: ! 95: while ( (ch = getopt(argc, argv, names)) != EOF ) { ! 96: ! 97: switch ( ch ) { ! 98: ! 99: case 'o': /* processing range list */ ! 100: out_list(optarg); ! 101: break; ! 102: ! 103: case 'F': /* new troff font directory */ ! 104: fontdir = optarg; ! 105: break; ! 106: ! 107: case 'R': /* set raster table directory */ ! 108: rastdir = optarg; ! 109: break; ! 110: ! 111: case 'D': /* debug flag */ ! 112: debug = ON; ! 113: break; ! 114: ! 115: case 'I': /* ignore FATAL errors */ ! 116: ignore = ON; ! 117: break; ! 118: ! 119: case '?': /* don't understand the option */ ! 120: error(FATAL, ""); ! 121: break; ! 122: ! 123: default: /* don't know what to do for ch */ ! 124: error(FATAL, "missing case for option %c\n", ch); ! 125: break; ! 126: ! 127: } /* End switch */ ! 128: ! 129: } /* End while */ ! 130: ! 131: argc -= optind; /* get ready for non-option args */ ! 132: argv += optind; ! 133: ! 134: } /* End of options */ ! 135: ! 136: ! 137: /*****************************************************************************/ ! 138: ! 139: ! 140: arguments() ! 141: ! 142: ! 143: { ! 144: ! 145: ! 146: char name[100]; /* raster file pathname */ ! 147: char *font; /* includes up to the '.' in *argv */ ! 148: char *size; /* number after '.' and possibly 'r' */ ! 149: int i; /* just a loop index */ ! 150: ! 151: char *strtok(); ! 152: ! 153: ! 154: /* ! 155: * ! 156: * All the remaining arguments are the names of raster files in *rastdir ! 157: * that we want to display. Because two raster file naming conventions ! 158: * are used in rast.c we can't be absolutely sure we're really displaying ! 159: * the raster file that the user wanted. That's why the pathname is built ! 160: * up in name[] and access to the file is checked. That's probably good ! 161: * enough for our purposes, but it still doesn't guarantee you get what ! 162: * you asked for. It shouldn't cause any real problems as long as you ! 163: * don't try and keep raster files with the two different naming conventions ! 164: * in the same directory. ! 165: * ! 166: */ ! 167: ! 168: ! 169: if ( argc < 1 ) ! 170: error(FATAL, "can't read standard input"); ! 171: else { /* have at least one argument */ ! 172: while ( argc > 0 ) { ! 173: sprintf(name, "%s/%s", rastdir, *argv); ! 174: if ( access(name, 04) == -1 ) ! 175: error(FATAL, "can't read file %s", name); ! 176: ! 177: if ( (font = strtok(*argv, ".")) == NULL ) ! 178: error(FATAL, "Bad raster file name %s", *argv); ! 179: ! 180: if ( *(size = font + strlen(font) + 1) == 'r' ) size++; ! 181: ! 182: fprintf(stdout, "Get raster file for font %s, size %s\n", font, size); ! 183: getrastdata(font, atoi(size)); ! 184: ! 185: for ( i = fam->first; i <= fam->last; i++ ) ! 186: if ( in_olist(i) == ON ) ! 187: dump_glyph(i, stdout); ! 188: ! 189: argc--; ! 190: argv++; ! 191: } /* End while */ ! 192: } /* End else */ ! 193: ! 194: } /* End of arguments */ ! 195: ! 196: ! 197: /*****************************************************************************/ ! 198: ! 199:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.