Skip to content

Commit cb2e542

Browse files
committed
plessey: Uplift
1 parent 92ad7fe commit cb2e542

1 file changed

Lines changed: 65 additions & 38 deletions

File tree

src/plessey.ps.src

Lines changed: 65 additions & 38 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,55 @@
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+
/plessey.barchars (0123456789ABCDEF) readonly def
48+
49+
/plessey.encs [
50+
(14141414) (32141414) (14321414) (32321414)
51+
(14143214) (32143214) (14323214) (32323214)
52+
(14141432) (32141432) (14321432) (32321432)
53+
(14143232) (32143232) (14323232) (32323232)
54+
(32321432) (541412323) (323)
55+
] readonly def
56+
57+
/plessey.checksalt [ 1 1 1 1 0 1 0 0 1 ] readonly def
58+
59+
/plessey.checkinit [ 0 0 0 0 0 0 0 0 ] readonly def
60+
61+
/plessey.latevars dup 1 dict def load /init {
62+
63+
currentglobal
64+
true setglobal
65+
66+
//plessey.latevars begin
67+
68+
/charvals 16 dict def
69+
0 1 15 {
70+
charvals exch dup //plessey.barchars exch 1 getinterval exch put
71+
} for
72+
/charvals charvals readonly def
73+
74+
/init { //plessey.latevars {def} forall } def
75+
76+
end
77+
78+
//plessey.latevars /init get exec
79+
80+
setglobal
81+
82+
} bind put
83+
4884
/plessey {
4985

50-
20 dict begin % Confine variables to local scope
86+
20 dict begin
5187

5288
/ctx null def
89+
5390
/dontdraw false def
5491
/includetext false def % Enable/disable text
5592
/validatecheck false def
@@ -63,29 +100,15 @@ begin
63100
//processoptions exec /options exch def
64101
/barcode exch def
65102

103+
//plessey.latevars /init get exec
104+
66105
barcode () eq {
67106
/bwipp.plesseyEmptyData (The data must not be empty) //raiseerror exec
68107
} if
69108

70-
/plessey //loadctx exec
71-
72-
% Create a string of the available characters
73-
{
74-
/barchars (0123456789ABCDEF) def
75-
/charvals 16 dict def
76-
0 1 15 {charvals exch dup barchars exch 1 getinterval exch put} for
77-
78-
% Create an array containing the character mappings
79-
/encs
80-
[ (14141414) (32141414) (14321414) (32321414)
81-
(14143214) (32143214) (14323214) (32323214)
82-
(14141432) (32141432) (14321432) (32321432)
83-
(14143232) (32143232) (14323232) (32323232)
84-
(32321432) (541412323) (323)
85-
] def
86-
} ctxdef
87-
109+
%
88110
% Validate the input
111+
%
89112
0 1 barcode length 1 sub {
90113
barcode exch 1 getinterval charvals exch known not {
91114
/bwipp.plesseyBadCharacter (Plessey must contain only digits and letters A B C D E F) //raiseerror exec
@@ -94,9 +117,11 @@ begin
94117

95118
/barlen barcode length validatecheck {2 sub} if def
96119

120+
%
97121
% Calculate the checksums
122+
%
98123
/checkbits barlen 4 mul 8 add array def
99-
checkbits barlen 4 mul [ 0 0 0 0 0 0 0 0 ] putinterval
124+
checkbits barlen 4 mul //plessey.checkinit putinterval
100125
0 1 barlen 1 sub {
101126
/i exch def
102127
/indx charvals barcode i 1 getinterval get def
@@ -107,13 +132,12 @@ begin
107132
indx -3 bitshift
108133
] putinterval
109134
} for
110-
/checksalt [ 1 1 1 1 0 1 0 0 1 ] def
111135
0 1 barlen 4 mul 1 sub {
112136
/i exch def
113137
checkbits i get 1 eq {
114138
0 1 8 {
115139
/j exch def
116-
checkbits i j add checkbits i j add get checksalt j get xor put
140+
checkbits i j add checkbits i j add get //plessey.checksalt j get xor put
117141
} for
118142
} if
119143
} for
@@ -125,8 +149,8 @@ begin
125149
/checksum1 checkval 15 and def
126150
/checksum2 checkval -4 bitshift def
127151
validatecheck {
128-
barcode barlen get barchars checksum1 get ne
129-
barcode barlen 1 add get barchars checksum2 get ne or {
152+
barcode barlen get //plessey.barchars checksum1 get ne
153+
barcode barlen 1 add get //plessey.barchars checksum2 get ne or {
130154
/bwipp.plesseyBadCheckDigits (Incorrect Plessey check digits provided) //raiseerror exec
131155
} if
132156
/barcode barcode 0 barlen getinterval def
@@ -135,31 +159,36 @@ begin
135159
/sbs barlen 8 mul unidirectional {27} {33} ifelse add string def
136160
/txt barlen 2 add array def
137161

162+
%
138163
% Put start character
139-
sbs 0 encs 16 get putinterval
164+
%
165+
sbs 0 //plessey.encs 16 get putinterval
140166

141167
0 1 barlen 1 sub {
142168
/i exch def
143169
/indx charvals barcode i 1 getinterval get def
144-
sbs i 8 mul 8 add encs indx get putinterval
170+
sbs i 8 mul 8 add //plessey.encs indx get putinterval
145171
txt i [barcode i 1 getinterval i 20 mul 20 add textyoffset textfont textsize] put
146172
} for
147173

174+
%
148175
% Put the checksum characters
149-
sbs barlen 8 mul 8 add encs checksum1 get putinterval
150-
sbs barlen 8 mul 16 add encs checksum2 get putinterval
176+
%
177+
sbs barlen 8 mul 8 add //plessey.encs checksum1 get putinterval
178+
sbs barlen 8 mul 16 add //plessey.encs checksum2 get putinterval
151179
includecheckintext {
152-
txt barlen [barchars checksum1 1 getinterval barlen 20 mul 20 add textyoffset textfont textsize] put
153-
txt barlen 1 add [barchars checksum2 1 getinterval barlen 1 add 20 mul 20 add textyoffset textfont textsize] put
180+
txt barlen [//plessey.barchars checksum1 1 getinterval barlen 20 mul 20 add textyoffset textfont textsize] put
181+
txt barlen 1 add [//plessey.barchars checksum2 1 getinterval barlen 1 add 20 mul 20 add textyoffset textfont textsize] put
154182
} {
155183
txt barlen [( ) barlen 20 mul 20 add textyoffset textfont textsize] put
156184
txt barlen 1 add [( ) barlen 1 add 20 mul 20 add textyoffset textfont textsize] put
157185
} ifelse
158186

187+
%
159188
% Put end character
160-
sbs barlen 8 mul 24 add encs unidirectional {18} {17} ifelse get putinterval
189+
%
190+
sbs barlen 8 mul 24 add //plessey.encs unidirectional {18} {17} ifelse get putinterval
161191

162-
% Return the arguments
163192
<<
164193
/ren /renlinear
165194
/sbs [sbs {48 sub} forall]
@@ -173,8 +202,6 @@ begin
173202

174203
dontdraw not //renlinear if
175204

176-
//unloadctx exec
177-
178205
end
179206

180207
}

0 commit comments

Comments
 (0)