Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/planix-v0/sys/src/cmd/postscript/misc/laserbar.c – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 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
}