11% Barcode Writer in Pure PostScript
22% https://bwipp.terryburton.co.uk
33%
4- % Copyright (c) 2004-2024 Terry Burton
4+ % Copyright (c) 2004-2025 Terry Burton
55%
66% $Id$
77%
3838currentglobal
3939true setglobal
4040/setpacking where {pop currentpacking true setpacking} if
41- 10 dict
42- dup /loadctx dup /uk.co.terryburton.bwipp findresource put
43- dup /unloadctx dup /uk.co.terryburton.bwipp findresource put
41+ 50 dict
4442dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
4543dup /processoptions dup /uk.co.terryburton.bwipp findresource put
4644dup /renlinear dup /uk.co.terryburton.bwipp findresource put
4745begin
46+
47+ /royalmail.barchars (ZUVWXY501234B6789AHCDEFGNIJKLMTOPQRS) readonly def
48+
49+ /royalmail.encs [
50+ (3300) (2211) (2301) (2310) (3201) (3210)
51+ (1122) (0033) (0123) (0132) (1023) (1032)
52+ (1302) (0213) (0303) (0312) (1203) (1212)
53+ (1320) (0231) (0321) (0330) (1221) (1230)
54+ (3102) (2013) (2103) (2112) (3003) (3012)
55+ (3120) (2031) (2121) (2130) (3021) (3030)
56+ (2) (3)
57+ ] readonly def
58+
59+ /royalmail.latevars dup 1 dict def load /init {
60+
61+ currentglobal
62+ true setglobal
63+
64+ //royalmail.latevars begin
65+
66+ /charvals 36 dict def
67+ 0 1 35 {
68+ charvals exch dup //royalmail.barchars exch 1 getinterval exch put
69+ } for
70+ /charvals charvals readonly def
71+
72+ /init { //royalmail.latevars {def} forall } def
73+
74+ end
75+
76+ //royalmail.latevars /init get exec
77+
78+ setglobal
79+
80+ } bind put
81+
4882/royalmail {
4983
5084 20 dict begin
5185
5286 /ctx null def
87+
5388 /dontdraw false def
5489 /includetext false def % Enable/disable text
5590 /validatecheck false def
@@ -62,31 +97,15 @@ begin
6297 //processoptions exec /options exch def
6398 /barcode exch def
6499
100+ //royalmail.latevars /init get exec
101+
65102 barcode () eq {
66103 /bwipp.royalmailEmptyData (The data must not be empty) //raiseerror exec
67104 } if
68105
69- /royalmail //loadctx exec
70-
71- {
72- % Create a string of the available characters
73- /barchars (ZUVWXY501234B6789AHCDEFGNIJKLMTOPQRS) def
74- /charvals 36 dict def
75- 0 1 35 {charvals exch dup barchars exch 1 getinterval exch put} for
76-
77- % Create an array containing the character mappings
78- /encs
79- [ (3300) (2211) (2301) (2310) (3201) (3210)
80- (1122) (0033) (0123) (0132) (1023) (1032)
81- (1302) (0213) (0303) (0312) (1203) (1212)
82- (1320) (0231) (0321) (0330) (1221) (1230)
83- (3102) (2013) (2103) (2112) (3003) (3012)
84- (3120) (2031) (2121) (2130) (3021) (3030)
85- (2) (3)
86- ] def
87- } ctxdef
88-
106+ %
89107 % Validate the input
108+ %
90109 0 1 barcode length 1 sub {
91110 barcode exch 1 getinterval charvals exch known not {
92111 /bwipp.royalmailBadCharacter (RM4SCC must contain only capital letters and digits) //raiseerror exec
@@ -105,7 +124,7 @@ begin
105124 } for
106125 /checksum checksumrow 6 mod 6 mul checksumcol 6 mod add def
107126 validatecheck {
108- barcode barlen get barchars checksum get ne {
127+ barcode barlen get //royalmail. barchars checksum get ne {
109128 /bwipp.royalmailBadCheckDigit (Incorrect RM4SCC check digit provided) //raiseerror exec
110129 } if
111130 /barcode barcode 0 barlen getinterval def
@@ -114,26 +133,32 @@ begin
114133 /encstr barlen 4 mul 6 add string def
115134 /txt barlen 1 add array def
116135
136+ %
117137 % Put start character
118- encstr 0 encs 36 get putinterval
138+ %
139+ encstr 0 //royalmail.encs 36 get putinterval
119140
120141 0 1 barlen 1 sub {
121142 /i exch def
122143 /indx charvals barcode i 1 getinterval get def
123- encstr i 4 mul 1 add encs indx get putinterval
144+ encstr i 4 mul 1 add //royalmail. encs indx get putinterval
124145 txt i [barcode i 1 getinterval i 4 mul 1 add 3.312 mul textyoffset textfont textsize] put
125146 } for
126147
148+ %
127149 % Put the checksum character
128- encstr barlen 4 mul 1 add encs checksum get putinterval
150+ %
151+ encstr barlen 4 mul 1 add //royalmail.encs checksum get putinterval
129152 includecheckintext {
130- txt barlen [barchars checksum 1 getinterval barlen 4 mul 1 add 3.312 mul textyoffset textfont textsize] put
153+ txt barlen [//royalmail. barchars checksum 1 getinterval barlen 4 mul 1 add 3.312 mul textyoffset textfont textsize] put
131154 } {
132155 txt barlen [( ) barlen 4 mul 1 add 3.312 mul textyoffset textfont textsize] put
133156 } ifelse
134157
158+ %
135159 % Put end character
136- encstr barlen 4 mul 5 add encs 37 get putinterval
160+ %
161+ encstr barlen 4 mul 5 add //royalmail.encs 37 get putinterval
137162
138163 /bbs encstr length array def
139164 /bhs encstr length array def
@@ -158,7 +183,6 @@ begin
158183 } if
159184 } for
160185
161- % Return the arguments
162186 <<
163187 /ren /renlinear
164188 /bbs bbs
@@ -172,8 +196,6 @@ begin
172196
173197 dontdraw not //renlinear if
174198
175- //unloadctx exec
176-
177199 end
178200
179201}
0 commit comments