Blame


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