Skip to content

Commit c94ea6c

Browse files
committed
royalmail: Uplift
1 parent 51904f4 commit c94ea6c

1 file changed

Lines changed: 55 additions & 33 deletions

File tree

src/royalmail.ps.src

Lines changed: 55 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
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
%
@@ -38,18 +38,53 @@
3838
currentglobal
3939
true 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
4442
dup /raiseerror dup /uk.co.terryburton.bwipp findresource put
4543
dup /processoptions dup /uk.co.terryburton.bwipp findresource put
4644
dup /renlinear dup /uk.co.terryburton.bwipp findresource put
4745
begin
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

Comments
 (0)