Annotation of researchv10no/cmd/postscript/misc/laserbar.c, revision 1.1.1.1

1.1       root        1: /* laserbar -- filter to print barcodes on postscript printer */
                      2: 
                      3: #define MAIN 1
                      4: 
                      5: #define        LABEL   01
                      6: #define        NFLAG   02
                      7: #define        SFLAG   04
                      8: 
                      9: #include <stdio.h>
                     10: #include <ctype.h>
                     11: 
                     12: static int code39[256] = {
                     13:        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                     14:        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                     15: /*     sp    !     "     #     $     %     &     '     */
                     16:        0304, 0,    0,    0,    0250, 0052, 0,    0,   
                     17: /*     (     )     *     +     ,     -     -     /     */
                     18:        0,    0,    0224, 0212, 0,    0205, 0604, 0242,
                     19: /*     0     1     2     3     4     5     6     7     */
                     20:        0064, 0441, 0141, 0540, 0061, 0460, 0160, 0045,
                     21: /*     8     9     :     ;     <     =     >     ?     */
                     22:        0444, 0144, 0,    0,    0,    0,    0,    0,   
                     23: /*     @     A     B     C     D     E     F     G     */
                     24:        0,    0411, 0111, 0510, 0031, 0430, 0130, 0015,
                     25: /*     H     I     J     K     L     M     N     O     */
                     26:        0414, 0114, 0034, 0403, 0103, 0502, 0023, 0422,
                     27: /*     P     Q     R     S     T     U     V     W     */
                     28:        0122, 0007, 0406, 0106, 0026, 0601, 0301, 0700,
                     29: /*     X     Y     Z     [     \     ]     ^     _     */
                     30:        0221, 0620, 0320, 0,    0,    0,    0,    0,
                     31: /*     `     a     b     c     d     e     f     g     */
                     32:        0,    0411, 0111, 0510, 0031, 0430, 0130, 0015,
                     33: /*     h     i     j     k     l     m     n     o     */
                     34:        0414, 0114, 0034, 0403, 0103, 0502, 0023, 0422,
                     35: /*     p     q     r     s     t     u     v     w     */
                     36:        0122, 0007, 0406, 0106, 0026, 0601, 0301, 0700,
                     37: /*     x     y     z     {     |     }     ~     del   */
                     38:        0221, 0620, 0320, 0,    0,    0,    0,    0,
                     39:        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                     40:        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                     41:        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                     42:        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                     43:        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                     44:        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                     45:        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                     46:        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                     47: };
                     48: 
                     49: static void barprt();
                     50: void laserbar();
                     51: 
                     52: #ifdef MAIN
                     53: 
                     54: main(argc, argv)
                     55: char **argv;
                     56: {
                     57:        int c, flags = 0, error = 0;
                     58:        double rotate = 0, xoffset = 0, yoffset = 0, xscale = 1, yscale = 1;
                     59:        extern char *optarg;
                     60:        extern int optind;
                     61:        extern double atof();
                     62:        extern void exit();
                     63: 
                     64:        while ((c = getopt(argc, argv, "r:x:y:X:Y:lns")) != EOF) {
                     65:                switch(c) {
                     66:                    case 'r':
                     67:                        rotate = atof(optarg);
                     68:                        break;
                     69:                    case 'x':
                     70:                        xoffset = atof(optarg);
                     71:                        break;
                     72:                    case 'y':
                     73:                        yoffset = atof(optarg);
                     74:                        break;
                     75:                    case 'X':
                     76:                        xscale = atof(optarg);
                     77:                        break;
                     78:                    case 'Y':
                     79:                        yscale = atof(optarg);
                     80:                        break;
                     81:                    case 'l':
                     82:                        flags |= LABEL;
                     83:                        break;
                     84:                    case 'n':
                     85:                        flags |= NFLAG;
                     86:                        break;
                     87:                    case 's':
                     88:                        flags |= SFLAG;
                     89:                        break;
                     90:                    case '?':
                     91:                        ++error;
                     92:                }
                     93:        }
                     94:        if ((argc - optind) != 1)
                     95:                ++error;
                     96:        if (error) {
                     97:                (void) fprintf(stderr,
                     98: "Usage: %s [-r rotate] [-x xoffset] [-y yoffset] [-X xscale] [-Y yscale] [-lns] string\n",
                     99:                    *argv);
                    100:                exit(1);
                    101:        }
                    102:        laserbar(stdout, argv[optind], rotate, xoffset, yoffset, xscale, yscale, flags);
                    103:        return 0;
                    104: }
                    105: 
                    106: #endif MAIN
                    107: 
                    108: static int right = 0;
                    109: 
                    110: void
                    111: laserbar(fp, str, rotate, xoffset, yoffset, xscale, yscale, flags)
                    112: FILE *fp;
                    113: char *str;
                    114: double rotate, xoffset, yoffset, xscale, yscale;
                    115: int flags;
                    116: {
                    117:        xoffset *= 72.;
                    118:        yoffset *= 72.;
                    119:        (void) fprintf(fp, "gsave %s\n", (flags & NFLAG) ? "newpath" : "");
                    120:        if (xoffset || yoffset)
                    121:                (void) fprintf(fp, "%f %f moveto\n", xoffset, yoffset);
                    122:        if (xscale != 1 || yscale != 1)
                    123:                (void) fprintf(fp, "%f %f scale\n", xscale, yscale);
                    124:        if (rotate)
                    125:                (void) fprintf(fp, "%f rotate\n", rotate);
                    126:        (void) fputs("/Helvetica findfont 16 scalefont setfont\n", fp);
                    127:        (void) fputs("/w { 0 rmoveto gsave 3 setlinewidth 0 -72 rlineto stroke grestore } def\n", fp);
                    128:        (void) fputs("/n { 0 rmoveto gsave 1 setlinewidth 0 -72 rlineto stroke grestore } def\n", fp);
                    129:        (void) fputs("/l { gsave 2 -88 rmoveto show grestore } def\n", fp);
                    130:        barprt(fp, '*', 0);
                    131:        while (*str)
                    132:                barprt(fp, *(str++), (flags & LABEL));
                    133:        barprt(fp, '*', 0);
                    134:        (void) fprintf(fp, "%sgrestore\n", (flags & SFLAG) ? "showpage " : "");
                    135:        right = 0;
                    136: }
                    137: 
                    138: static void
                    139: barprt(fp, c, label)
                    140: FILE *fp;
                    141: int c, label;
                    142: {
                    143:        int i, mask, bar, wide;
                    144: 
                    145:        if (!(i = code39[c]))
                    146:                return;
                    147:        if (islower(c))
                    148:                c = toupper(c);
                    149:        if (label)
                    150:                (void) fprintf(fp, "(%c) l", c);
                    151:        else
                    152:                (void) fputs("     ", fp);
                    153:        for (bar = 1, mask = 0400; mask; bar = 1 - bar, mask >>= 1) {
                    154:                wide = mask & i;
                    155:                if (bar) {
                    156:                        if (wide)
                    157:                                ++right;
                    158:                        (void) fprintf(fp, " %d %s", right, wide ? "w" : "n");
                    159:                        right = (wide ? 2 : 1);
                    160:                }
                    161:                else
                    162:                        right += (wide ? 3 : 1);
                    163:        }
                    164:        (void) fputs("\n", fp);
                    165:        ++right;
                    166: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.