diff options
author | Karl Berry <karl@freefriends.org> | 2006-07-23 23:05:28 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-07-23 23:05:28 +0000 |
commit | abb699090718cb65cf58d15dffdc8e5508855fe8 (patch) | |
tree | 063340f116e2a482f4c1d9b64734f4af11c12c0a /Master/texmf-dist/dvips/pst-barcode | |
parent | 9c513dd7cec89aed0eaf0cdd6ba1cce22ae231d5 (diff) |
pst-barcode 0.04 (24jul06)
git-svn-id: svn://tug.org/texlive/trunk@1900 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/dvips/pst-barcode')
-rw-r--r-- | Master/texmf-dist/dvips/pst-barcode/pst-barcode.pro | 1382 |
1 files changed, 1136 insertions, 246 deletions
diff --git a/Master/texmf-dist/dvips/pst-barcode/pst-barcode.pro b/Master/texmf-dist/dvips/pst-barcode/pst-barcode.pro index 31667b82ba7..0054cdac340 100644 --- a/Master/texmf-dist/dvips/pst-barcode/pst-barcode.pro +++ b/Master/texmf-dist/dvips/pst-barcode/pst-barcode.pro @@ -4,10 +4,10 @@ %%EndComments %%EndProlog -% Barcode Writer in Pure PostScript - Version 2005-10-24 +% Barcode Writer in Pure PostScript - Version 2006-05-26 % http://www.terryburton.co.uk/barcodewriter/ % -% Copyright (c) 2005 Terry Burton - tez@terryburton.co.uk +% Copyright (c) 2006 Terry Burton - tez@terryburton.co.uk % % Permission is hereby granted, free of charge, to any % person obtaining a copy of this software and associated @@ -47,16 +47,14 @@ 0 begin /options exch def % We are given an option string - /renderopts options def + /useropts options def /barcode exch def % We are given a barcode string - + /includetext false def % Enable/disable text /textfont /Helvetica def /textsize 12 def - /textpos -2 def + /textpos -4 def /height 1 def - /guardwhitespace false def - /guardpos (unset) def % Parse the input options options { @@ -67,11 +65,6 @@ /textfont textfont cvlit def /textsize textsize cvr def /textpos textpos cvr def - guardpos (unset) eq { - /guardpos textpos 1 add def - } { - /guardpos guardpos cvr def - } ifelse /height height cvr def /barlen barcode length def % Length of the code @@ -113,14 +106,8 @@ ] def /sbs barlen 1 sub 4 mul 11 add string def - - guardwhitespace { - /txt barlen 1 add array def - txt barlen [(>) 99 guardpos textfont textsize] put - } { - /txt barlen array def - } ifelse - + /txt barlen array def + % Put the start character sbs 0 encs 10 get putinterval @@ -148,7 +135,7 @@ /enc revenc def } if sbs i 1 sub 4 mul 3 add enc putinterval % Put encoded digit into sbs - txt i [barcode i 1 getinterval i 1 sub 7 mul 4 add textpos textfont 0] put + txt i [barcode i 1 getinterval i 1 sub 7 mul 4 add textpos textfont textsize] put } for % Put the middle character @@ -164,26 +151,28 @@ pop pop % Discard seek and post /enc encs indx get def % Get the indxth encoding sbs i 1 sub 4 mul 8 add enc putinterval % Put encoded digit into sbs - txt i [barcode i 1 getinterval i 1 sub 7 mul 8 add textpos textfont 0] put + txt i [barcode i 1 getinterval i 1 sub 7 mul 8 add textpos textfont textsize] put } for % Put the end character sbs barlen 1 sub 4 mul 8 add encs 12 get putinterval - + % Return the arguments /retval 4 dict def - retval (sbs) sbs put + retval (sbs) [sbs {48 sub} forall] put includetext { - retval (bhs) [height height 12{height .1 sub}repeat height height 12{height .1 sub}repeat height height] put - retval (bbs) [0 0 12{.1}repeat 0 0 12{.1}repeat 0 0] put + retval (bhs) [height height 12{height .075 sub}repeat height height 12{height .075 sub}repeat height height] put + retval (bbs) [0 0 12{.075}repeat 0 0 12{.075}repeat 0 0] put retval (txt) txt put } { retval (bhs) [30{height}repeat] put retval (bbs) [30{0}repeat] put } ifelse - retval (opt) renderopts put + retval (opt) useropts put + retval (guardrightpos) 10 put + retval (borderbottom) 5 put retval - + end } bind def @@ -196,16 +185,14 @@ 0 begin /options exch def % We are given an option string - /renderopts options def + /useropts options def /barcode exch def % We are given a barcode string /includetext false def % Enable/disable text /textfont /Helvetica def /textsize 12 def - /textpos -2 def + /textpos -4 def /height 1 def - /guardwhitespace false def - /guardpos (unset) def % Parse the input options options { @@ -216,11 +203,6 @@ /textfont textfont cvlit def /textsize textsize cvr def /textpos textpos cvr def - guardpos (unset) eq { - /guardpos textpos 1 add def - } { - /guardpos guardpos cvr def - } ifelse /height height cvr def % Create an array containing the character mappings @@ -235,14 +217,7 @@ /barlen barcode length def % Length of the code /sbs barlen 4 mul 11 add string def - - guardwhitespace { - /txt barlen 2 add array def - txt barlen [(<) -9 guardpos textfont textsize] put - txt barlen 1 add [(>) 69 guardpos textfont textsize] put - } { - /txt barlen array def - } ifelse + /txt barlen array def % Put the start character sbs 0 encs 10 get putinterval @@ -273,7 +248,7 @@ pop pop % Discard seek and post /enc encs indx get def % Get the indxth encoding sbs i 4 mul 8 add enc putinterval % Put encoded digit into sbs - txt i [barcode i 1 getinterval i 7 mul 8 add textpos textfont 0] put + txt i [barcode i 1 getinterval i 7 mul 8 add textpos textfont textsize] put } for % Put the end character @@ -281,16 +256,19 @@ % Return the arguments /retval 4 dict def - retval (sbs) sbs put + retval (sbs) [sbs {48 sub} forall] put includetext { - retval (bhs) [height height 8{height .1 sub}repeat height height 8{height .1 sub}repeat height height] put - retval (bbs) [0 0 8{.1}repeat 0 0 8{.1}repeat 0 0] put + retval (bhs) [height height 8{height .075 sub}repeat height height 8{height .075 sub}repeat height height] put + retval (bbs) [0 0 8{.075}repeat 0 0 8{.075}repeat 0 0] put retval (txt) txt put } { retval (bhs) [22{height}repeat] put retval (bbs) [22{0}repeat] put } ifelse - retval (opt) renderopts put + retval (opt) useropts put + retval (guardleftpos) 10 put + retval (guardrightpos) 10 put + retval (borderbottom) 5 put retval end @@ -305,13 +283,13 @@ 0 begin /options exch def - /renderopts options def + /useropts options def /barcode exch def % We are given a barcode string /includetext false def % Enable/disable text /textfont /Helvetica def /textsize 12 def - /textpos -2 def + /textpos -4 def /height 1 def % Parse the input options @@ -396,7 +374,7 @@ i 11 eq { % Last digit is after guard bars txt 11 [barcode 11 1 getinterval 96 textpos textfont textsize 2 sub] put } { - txt i [barcode i 1 getinterval i 7 mul 8 add textpos textfont 0] put + txt i [barcode i 1 getinterval i 7 mul 8 add textpos textfont textsize] put } ifelse } for @@ -405,16 +383,17 @@ % Return the arguments /retval 4 dict def - retval (sbs) sbs put + retval (sbs) [sbs {48 sub} forall] put includetext { - retval (bhs) [4{height}repeat 10{height .1 sub}repeat height height 10{height .1 sub}repeat 5{height}repeat] put - retval (bbs) [0 0 0 0 10{.1}repeat 0 0 10{.1}repeat 0 0 0 0 0] put + retval (bhs) [4{height}repeat 10{height .075 sub}repeat height height 10{height .075 sub}repeat 5{height}repeat] put + retval (bbs) [0 0 0 0 10{.075}repeat 0 0 10{.075}repeat 0 0 0 0 0] put retval (txt) txt put } { retval (bhs) [31{height}repeat] put retval (bbs) [31{0}repeat] put } ifelse - retval (opt) renderopts put + retval (opt) useropts put + retval (borderbottom) 5 put retval end @@ -429,13 +408,13 @@ 0 begin /options exch def % We are given an option string - /renderopts options def + /useropts options def /barcode exch def % We are given a barcode string /includetext false def % Enable/disable text /textfont /Helvetica def /textsize 12 def - /textpos -2 def + /textpos -4 def /height 1 def % Parse the input options @@ -539,16 +518,17 @@ % Return the arguments /retval 4 dict def - retval (sbs) sbs put + retval (sbs) [sbs {48 sub} forall] put includetext { - retval (bhs) [height height 12{height .1 sub}repeat height height height] put - retval (bbs) [0 0 12{.1}repeat 0 0 0] put + retval (bhs) [height height 12{height .075 sub}repeat height height height] put + retval (bbs) [0 0 12{.075}repeat 0 0 0] put retval (txt) txt put } { retval (bhs) [17{height}repeat] put retval (bbs) [17{0}repeat] put } ifelse - retval (opt) renderopts put + retval (opt) useropts put + retval (borderbottom) 5 put retval end @@ -563,16 +543,14 @@ 0 begin /options exch def % We are given an option string - /renderopts options def + /useropts options def /barcode exch def % We are given a barcode string /includetext false def % Enable/disable text /textfont /Helvetica def /textsize 12 def /textpos (unset) def - /height 0.7 def - /guardwhitespace false def - /guardpos (unset) def + /height 0.7 def % Parse the input options options { @@ -588,11 +566,6 @@ } { /textpos textpos cvr def } ifelse - guardpos (unset) eq { - /guardpos textpos 1 add def - } { - /guardpos guardpos cvr def - } ifelse /barlen barcode length def % Length of the code @@ -625,14 +598,8 @@ /mirrormap mirrormaps checksum get def /sbs 31 string def - - guardwhitespace { - /txt 6 array def - txt 5 [(>) 49 guardpos textfont textsize] put - } { - /txt 5 array def - } ifelse - + /txt 5 array def + 0 1 4 { /i exch def @@ -665,13 +632,16 @@ % Return the arguments /retval 4 dict def - retval (sbs) sbs put + retval (sbs) [sbs {48 sub} forall] put retval (bhs) [16{height}repeat] put retval (bbs) [16{0}repeat] put includetext { retval (txt) txt put } if - retval (opt) renderopts put + retval (opt) useropts put + retval (guardrightpos) 10 put + retval (guardrightypos) textpos 4 add put + retval (bordertop) 10 put retval end @@ -686,7 +656,7 @@ 0 begin /options exch def % We are given an options string - /renderopts options def + /useropts options def /barcode exch def % We are given a barcode string /includetext false def % Enable/disable text @@ -694,8 +664,6 @@ /textsize 12 def /textpos (unset) def /height 0.7 def - /guardwhitespace false def - /guardpos (unset) def % Parse the input options options { @@ -711,11 +679,6 @@ } { /textpos textpos cvr def } ifelse - guardpos (unset) eq { - /guardpos textpos 1 add def - } { - /guardpos guardpos cvr def - } ifelse /barlen barcode length def % Length of the code @@ -733,13 +696,7 @@ /mirrormap [(00) (01) (10) (11)] barcode 0 2 getinterval cvi 4 mod get def /sbs 13 string def - - guardwhitespace { - /txt 3 array def - txt 2 [(>) 22 guardpos textfont textsize] put - } { - /txt 2 array def - } ifelse + /txt 2 array def 0 1 1 { /i exch def @@ -773,13 +730,16 @@ % Return the arguments /retval 4 dict def - retval (sbs) sbs put + retval (sbs) [sbs {48 sub} forall] put retval (bhs) [12{height}repeat] put retval (bbs) [12{0}repeat] put includetext { retval (txt) txt put } if - retval (opt) renderopts put + retval (opt) useropts put + retval (guardrightpos) 10 put + retval (guardrightypos) textpos 4 add put + retval (bordertop) 10 put retval end @@ -795,7 +755,7 @@ 0 begin /options exch def % We are given an options string - /renderopts options def + /useropts options def /isbntxt exch def % We are given the isbn text with dashes /includetext false def % Enable/disable ISBN text @@ -894,7 +854,7 @@ } ifelse } if - args (opt) renderopts put + args (opt) useropts put args end @@ -909,7 +869,7 @@ 0 begin % Confine variables to local scope /options exch def % We are given an option string - /renderopts options def + /useropts options def /barcode exch def % We are given a barcode string /includetext false def % Enable/disable text @@ -1006,13 +966,13 @@ % Return the arguments /retval 1 dict def - retval (sbs) sbs put + retval (sbs) [sbs {48 sub} forall] put retval (bhs) [sbs length 1 add 2 idiv {height} repeat] put retval (bbs) [sbs length 1 add 2 idiv {0} repeat] put includetext { retval (txt) txt put } if - retval (opt) renderopts put + retval (opt) useropts put retval end @@ -1027,7 +987,7 @@ 0 begin % Confine variables to local scope /options exch def % We are given an option string - /renderopts options def + /useropts options def /barcode exch def % We are given a barcode string /includecheck false def % Enable/disable checkdigit @@ -1090,7 +1050,7 @@ pop pop % Discard seek and post /enc encs indx get def % Get the indxth encoding sbs i 10 mul 10 add enc putinterval % Put encoded digit into sbs - txt i 1 add [barcode i 1 getinterval i 1 add 16 mul textpos textfont 0] put + txt i 1 add [barcode i 1 getinterval i 1 add 16 mul textpos textfont textsize] put /checksum checksum indx add def } for @@ -1099,26 +1059,26 @@ /checksum checksum 43 mod def sbs barlen 10 mul 10 add encs checksum get putinterval includecheckintext { - txt barlen 1 add [barchars checksum 1 getinterval barlen 1 add 16 mul textpos textfont 0] put + txt barlen 1 add [barchars checksum 1 getinterval barlen 1 add 16 mul textpos textfont textsize] put } { - txt barlen 1 add [() barlen 1 add 16 mul textpos textfont 0] put + txt barlen 1 add [() barlen 1 add 16 mul textpos textfont textsize] put } ifelse sbs barlen 10 mul 20 add encs 43 get putinterval - txt barlen 2 add [(*) barlen 2 add 16 mul textpos textfont 0] put + txt barlen 2 add [(*) barlen 2 add 16 mul textpos textfont textsize] put } { sbs barlen 10 mul 10 add encs 43 get putinterval - txt barlen 1 add [(*) barlen 1 add 16 mul textpos textfont 0] put + txt barlen 1 add [(*) barlen 1 add 16 mul textpos textfont textsize] put } ifelse - + % Return the arguments /retval 2 dict def - retval (sbs) sbs put + retval (sbs) [sbs {48 sub} forall] put retval (bhs) [sbs length 1 add 2 idiv {height} repeat] put retval (bbs) [sbs length 1 add 2 idiv {0} repeat] put includetext { retval (txt) txt put } if - retval (opt) renderopts put + retval (opt) useropts put retval end @@ -1133,7 +1093,7 @@ 0 begin % Confine variables to local scope /options exch def % We are given an option string - /renderopts options def + /useropts options def /barcode exch def % We are given a barcode string /includecheck false def % Enable/disable checkdigit @@ -1226,13 +1186,13 @@ % Return the arguments /retval 1 dict def - retval (sbs) sbs put + retval (sbs) [sbs {48 sub} forall] put retval (bhs) [sbs length 1 add 2 idiv {height} repeat] put retval (bbs) [sbs length 1 add 2 idiv {0} repeat] put includetext { retval (txt) txt put } if - retval (opt) renderopts put + retval (opt) useropts put retval end @@ -1247,7 +1207,7 @@ 0 begin % Confine variables to local scope /options exch def % We are given an option string - /renderopts options def + /useropts options def /barcode exch def % We are given a barcode string /includecheck false def % Enable/disable checkdigit @@ -1355,13 +1315,13 @@ % Return the arguments /retval 1 dict def - retval (sbs) sbs put + retval (sbs) [sbs {48 sub} forall] put retval (bhs) [sbs length 1 add 2 idiv {height} repeat] put retval (bbs) [sbs length 1 add 2 idiv {0} repeat] put includetext { retval (txt) txt put } if - retval (opt) renderopts put + retval (opt) useropts put retval end @@ -1370,6 +1330,601 @@ /interleaved2of5 load 0 1 dict put % --END ENCODER interleaved2of5-- +% --BEGIN ENCODER rss14-- +/rss14 { + + 0 begin % Confine variables to local scope + + /options exch def % We are given an option string + /useropts options def + /barcode exch def % We are given a barcode string + + /height 1 def + /linkage false def + + % Parse the input options + options { + token false eq {exit} if dup length string cvs (=) search + true eq {cvlit exch pop exch def} {cvlit true def} ifelse + } loop + + /height height cvr def + + /getRSSwidths { + /mw exch def + /nm exch def + /val exch def + /j 0 def /i 0 def { + /v () def + mw 1 ne {/v i mw 4 string cvrs def} if + 0 v {48 sub add} forall 4 add nm eq { + j val eq {exit} if + /j j 1 add def + } if + /i i 1 add def + } loop + [4 {1} repeat v {47 sub} forall] v length 4 getinterval + } bind def + + /binval [barcode {48 sub} forall] def + /binval [linkage {1} {0} ifelse binval 0 13 getinterval {} forall] def + + 0 1 12 { + /i exch def + binval i 1 add 2 copy get binval i get 4537077 mod 10 mul add put + binval i binval i get 4537077 idiv put + } for + /right binval 13 get 4537077 mod def + binval 13 2 copy get 4537077 idiv put + + /left 0 def + /i true def + 0 1 13 { + /j exch def + binval j get + dup 0 eq i and { + pop + } { + /i false def + /left left 3 -1 roll 10 13 j sub exp cvi mul add def + } ifelse + } for + + /d1 left 1597 idiv def + /d2 left 1597 mod def + /d3 right 1597 idiv def + /d4 right 1597 mod def + + /tab164 [ + 160 0 12 4 8 1 161 1 + 960 161 10 6 6 3 80 10 + 2014 961 8 8 4 5 31 34 + 2714 2015 6 10 3 6 10 70 + 2840 2715 4 12 1 8 1 126 + ] def + + /tab154 [ + 335 0 5 10 2 7 4 84 + 1035 336 7 8 4 5 20 35 + 1515 1036 9 6 6 3 48 10 + 1596 1516 11 4 8 1 81 1 + ] def + + /i 0 def { + d1 tab164 i get le { + tab164 i 1 add 7 getinterval {} forall + /d1te exch def /d1to exch def + /d1mwe exch def /d1mwo exch def + /d1ele exch def /d1elo exch def + /d1gs exch def + exit + } if + /i i 8 add def + } loop + + /i 0 def { + d2 tab154 i get le { + tab154 i 1 add 7 getinterval {} forall + /d2te exch def /d2to exch def + /d2mwe exch def /d2mwo exch def + /d2ele exch def /d2elo exch def + /d2gs exch def + exit + } if + /i i 8 add def + } loop + + /i 0 def { + d3 tab164 i get le { + tab164 i 1 add 7 getinterval {} forall + /d3te exch def /d3to exch def + /d3mwe exch def /d3mwo exch def + /d3ele exch def /d3elo exch def + /d3gs exch def + exit + } if + /i i 8 add def + } loop + + /i 0 def { + d4 tab154 i get le { + tab154 i 1 add 7 getinterval {} forall + /d4te exch def /d4to exch def + /d4mwe exch def /d4mwo exch def + /d4ele exch def /d4elo exch def + /d4gs exch def + exit + } if + /i i 8 add def + } loop + + /d1wo d1 d1gs sub d1te idiv d1elo d1mwo getRSSwidths def + /d1we d1 d1gs sub d1te mod d1ele d1mwe getRSSwidths def + /d2wo d2 d2gs sub d2to mod d2elo d2mwo getRSSwidths def + /d2we d2 d2gs sub d2to idiv d2ele d2mwe getRSSwidths def + /d3wo d3 d3gs sub d3te idiv d3elo d3mwo getRSSwidths def + /d3we d3 d3gs sub d3te mod d3ele d3mwe getRSSwidths def + /d4wo d4 d4gs sub d4to mod d4elo d4mwo getRSSwidths def + /d4we d4 d4gs sub d4to idiv d4ele d4mwe getRSSwidths def + + /d1w 8 array def + 0 1 3 { + /i exch def + d1w i 2 mul d1wo i get put + d1w i 2 mul 1 add d1we i get put + } for + + /d2w 8 array def + 0 1 3 { + /i exch def + d2w 7 i 2 mul sub d2wo i get put + d2w 6 i 2 mul sub d2we i get put + } for + + /d3w 8 array def + 0 1 3 { + /i exch def + d3w 7 i 2 mul sub d3wo i get put + d3w 6 i 2 mul sub d3we i get put + } for + + /d4w 8 array def + 0 1 3 { + /i exch def + d4w i 2 mul d4wo i get put + d4w i 2 mul 1 add d4we i get put + } for + + /widths [ + d1w {} forall + d2w {} forall + d3w {} forall + d4w {} forall + ] def + + /checkweights [ + 1 3 9 27 2 6 18 54 + 58 72 24 8 29 36 12 4 + 74 51 17 32 37 65 48 16 + 64 34 23 69 49 68 46 59 + ] def + + /checkwidths [ + 3 8 2 1 1 3 5 5 1 1 3 3 7 1 1 + 3 1 9 1 1 2 7 4 1 1 2 5 6 1 1 + 2 3 8 1 1 1 5 7 1 1 1 3 9 1 1 + ] def + + /checksum 0 def + 0 1 31 { + /i exch def + /checksum checksum widths i get checkweights i get mul add def + } for + /checksum checksum 79 mod def + checksum 8 ge {/checksum checksum 1 add def} if + checksum 72 ge {/checksum checksum 1 add def} if + /checklt checkwidths checksum 9 idiv 5 mul 5 getinterval def + /checkrtrev checkwidths checksum 9 mod 5 mul 5 getinterval def + /checkrt 5 array def + 0 1 4 { + /i exch def + checkrt i checkrtrev 4 i sub get put + } for + + /sbs [ + 1 d1w {} forall checklt {} forall d2w {} + forall d4w {} forall checkrt {} forall d3w {} forall 1 1 + ] def + + % Return the arguments + /retval 1 dict def + retval (sbs) sbs put + retval (bhs) [sbs length 1 add 2 idiv {height} repeat] put + retval (bbs) [sbs length 1 add 2 idiv {0} repeat] put + retval (opt) useropts put + retval + + end + +} bind def +/rss14 load 0 1 dict put +% --END ENCODER rss14-- + +% --BEGIN ENCODER rsslimited-- +/rsslimited { + + 0 begin % Confine variables to local scope + + /options exch def % We are given an option string + /useropts options def + /barcode exch def % We are given a barcode string + + /height 1 def + + % Parse the input options + options { + token false eq {exit} if dup length string cvs (=) search + true eq {cvlit exch pop exch def} {cvlit true def} ifelse + } loop + + /height height cvr def + + /getRSSwidths { + /el exch def + /mw exch def + /nm exch def + /val exch def + /j 0 def /i 0 def { + /v () def + mw 1 ne {/v i mw el string cvrs def} if + 0 v {48 sub add} forall el add nm eq { + j val eq {exit} if + /j j 1 add def + } if + /i i 1 add def + } loop + [el {1} repeat v {47 sub} forall] v length el getinterval + } bind def + + /binval [barcode {48 sub} forall] def + /binval [binval 0 13 getinterval {} forall] def + + 0 1 11 { + /i exch def + binval i 1 add 2 copy get binval i get 2013571 mod 10 mul add put + binval i binval i get 2013571 idiv put + } for + /d2 binval 12 get 2013571 mod def + binval 12 2 copy get 2013571 idiv put + + /d1 0 def + /i true def + 0 1 12 { + /j exch def + binval j get + dup 0 eq i and { + pop + } { + /i false def + /d1 d1 3 -1 roll 10 12 j sub exp cvi mul add def + } ifelse + } for + + /tab267 [ + 183063 0 17 9 6 3 6538 28 + 820063 183064 13 13 5 4 875 728 + 1000775 820064 9 17 3 6 28 6454 + 1491020 1000776 15 11 5 4 2415 203 + 1979844 1491021 11 15 4 5 203 2408 + 1996938 1979845 19 7 8 1 17094 1 + 2013570 1996939 7 19 1 8 1 16632 + ] def + + /i 0 def { + d1 tab267 i get le { + tab267 i 1 add 7 getinterval {} forall + /d1te exch def /d1to exch def + /d1mwe exch def /d1mwo exch def + /d1ele exch def /d1elo exch def + /d1gs exch def + exit + } if + /i i 8 add def + } loop + + /i 0 def { + d2 tab267 i get le { + tab267 i 1 add 7 getinterval {} forall + /d2te exch def /d2to exch def + /d2mwe exch def /d2mwo exch def + /d2ele exch def /d2elo exch def + /d2gs exch def + exit + } if + /i i 8 add def + } loop + + /d1wo d1 d1gs sub d1te idiv d1elo d1mwo 7 getRSSwidths def + /d1we d1 d1gs sub d1te mod d1ele d1mwe 7 getRSSwidths def + /d2wo d2 d2gs sub d2te idiv d2elo d2mwo 7 getRSSwidths def + /d2we d2 d2gs sub d2te mod d2ele d2mwe 7 getRSSwidths def + + /d1w 14 array def + 0 1 6 { + /i exch def + d1w i 2 mul d1wo i get put + d1w i 2 mul 1 add d1we i get put + } for + + /d2w 14 array def + 0 1 6 { + /i exch def + d2w i 2 mul d2wo i get put + d2w i 2 mul 1 add d2we i get put + } for + + /widths [ + d1w {} forall + d2w {} forall + ] def + + /checkweights [ + 1 3 9 27 81 65 17 51 64 14 42 37 22 66 + 20 60 2 6 18 54 73 41 34 13 39 28 84 74 + ] def + + /checkseq [ + 0 1 43 {} for + 45 52 57 + 63 1 66 {} for + 73 1 79 {} for + 82 + 126 1 130 {} for + 132 + 141 1 146 {} for + 210 1 217 {} for + 220 + 316 1 323 {} for + 326 337 + ] def + + /checksum 0 def + 0 1 27 { + /i exch def + /checksum checksum widths i get checkweights i get mul add def + } for + /checksum checksum 89 mod def + /seq checkseq checksum get def + /swidths seq 21 idiv 8 3 6 getRSSwidths def + /bwidths seq 21 mod 8 3 6 getRSSwidths def + + /checkwidths [0 0 0 0 0 0 0 0 0 0 0 0 1 1] def + 0 1 5 { + /i exch def + checkwidths i 2 mul swidths i get put + checkwidths i 2 mul 1 add bwidths i get put + } for + + /sbs [ + 1 d1w {} forall checkwidths {} forall d2w {} forall 1 1 + ] def + + % Return the arguments + /retval 1 dict def + retval (sbs) sbs put + retval (bhs) [sbs length 1 add 2 idiv {height} repeat] put + retval (bbs) [sbs length 1 add 2 idiv {0} repeat] put + retval (opt) useropts put + retval + + end + +} bind def +/rsslimited load 0 1 dict put +% --END ENCODER rsslimited-- + +% --BEGIN ENCODER rssexpanded-- +/rssexpanded { + + 0 begin % Confine variables to local scope + + /options exch def % We are given an option string + /useropts options def + /barcode exch def % We are given a barcode string + + /height 1 def + + % Parse the input options + options { + token false eq {exit} if dup length string cvs (=) search + true eq {cvlit exch pop exch def} {cvlit true def} ifelse + } loop + + /height height cvr def + + /getRSSwidths { + /mw exch def + /nm exch def + /val exch def + /j 0 def /i 0 def { + /v () def + mw 1 ne {/v i mw 4 string cvrs def} if + 0 v {48 sub add} forall 4 add nm eq { + j val eq {exit} if + /j j 1 add def + } if + /i i 1 add def + } loop + [4 {1} repeat v {47 sub} forall] v length 4 getinterval + } bind def + + /binval [barcode {48 sub} forall] def + /datalen binval length 12 idiv def + + /tab174 [ + 347 0 12 5 7 2 87 4 + 1387 348 10 7 5 4 52 20 + 2947 1388 8 9 4 5 30 52 + 3987 2948 6 11 3 6 10 104 + 4191 3988 4 13 1 8 1 204 + ] def + + /dxw datalen array def + + 0 1 datalen 1 sub { + + /x exch def + + /d binval x 12 mul 12 getinterval def + /d 0 0 1 11 {/j exch def 2 11 j sub exp cvi d j get mul add} for def + + /j 0 def { + d tab174 j get le { + tab174 j 1 add 7 getinterval {} forall + /dte exch def /dto exch def + /dmwe exch def /dmwo exch def + /dele exch def /delo exch def + /dgs exch def + exit + } if + /j j 8 add def + } loop + + /dwo d dgs sub dte idiv delo dmwo getRSSwidths def + /dwe d dgs sub dte mod dele dmwe getRSSwidths def + + /dw 8 array def + x 2 mod 0 eq { + 0 1 3 { + /j exch def + dw 7 j 2 mul sub dwo j get put + dw 6 j 2 mul sub dwe j get put + } for + } { + 0 1 3 { + /j exch def + dw j 2 mul dwo j get put + dw j 2 mul 1 add dwe j get put + } for + } ifelse + + dxw x dw put + + } for + + /widths [ + dxw {{} forall} forall + ] def + + /checkweights [ + 77 96 32 81 27 9 3 1 + 20 60 180 118 143 7 21 63 + 205 209 140 117 39 13 145 189 + 193 157 49 147 19 57 171 91 + 132 44 85 169 197 136 186 62 + 185 133 188 142 4 12 36 108 + 50 87 29 80 97 173 128 113 + 150 28 84 41 123 158 52 156 + 166 196 206 139 187 203 138 46 + 76 17 51 153 37 111 122 155 + 146 119 110 107 106 176 129 43 + 16 48 144 10 30 90 59 177 + 164 125 112 178 200 137 116 109 + 70 210 208 202 184 130 179 115 + 190 204 68 93 31 151 191 134 + 148 22 66 198 172 94 71 2 + 40 154 192 64 162 54 18 6 + 120 149 25 75 14 42 126 167 + 175 199 207 69 23 78 26 79 + 103 98 83 38 114 131 182 124 + 159 53 88 170 127 183 61 161 + 55 165 73 8 24 72 5 15 + 89 100 174 58 160 194 135 45 + ] def + + /checksum 0 def + 0 1 widths length 1 sub { + /i exch def + /checksum checksum widths i get checkweights i get mul add def + } for + /checksum checksum 211 mod datalen 3 sub 211 mul add def + + /i 0 def { + checksum tab174 i get le { + tab174 i 1 add 7 getinterval {} forall + /cte exch def /cto exch def + /cmwe exch def /cmwo exch def + /cele exch def /celo exch def + /cgs exch def + exit + } if + /i i 8 add def + } loop + + /cwo checksum cgs sub cte idiv celo cmwo getRSSwidths def + /cwe checksum cgs sub cte mod cele cmwe getRSSwidths def + + /cw 8 array def + 0 1 3 { + /i exch def + cw i 2 mul cwo i get put + cw i 2 mul 1 add cwe i get put + } for + + /finderwidths [ + 1 8 4 1 1 1 1 4 8 1 + 3 6 4 1 1 1 1 4 6 3 + 3 4 6 1 1 1 1 6 4 3 + 3 2 8 1 1 1 1 8 2 3 + 2 6 5 1 1 1 1 5 6 2 + 2 2 9 1 1 1 1 9 2 2 + ] def + + /finderseq [ + [0 1] + [0 3 2] + [0 5 2 7] + [0 9 2 7 4] + [0 9 2 7 6 11] + [0 9 2 7 8 11 10] + [0 1 2 3 4 5 6 7] + [0 1 2 3 4 5 6 9 8] + [0 1 2 3 4 5 6 9 10 11] + [0 1 2 3 4 7 6 9 8 11 10] + ] def + + /seq finderseq datalen 2 add 2 idiv 2 sub get def + /fxw seq length array def + 0 1 seq length 1 sub { + /x exch def + fxw x finderwidths seq x get 5 mul 5 getinterval put + } for + + /sbs [ + 1 + cw {} forall + 0 1 datalen 1 sub { + /i exch def + i 2 mod 0 eq {fxw i 2 idiv get {} forall} if + dxw i get {} forall + } for + 1 1 + ] def + + % Return the arguments + /retval 1 dict def + retval (sbs) sbs put + retval (bhs) [sbs length 1 add 2 idiv {height} repeat] put + retval (bbs) [sbs length 1 add 2 idiv {0} repeat] put + retval (opt) useropts put + retval + + end + +} bind def +/rssexpanded load 0 1 dict put +% --END ENCODER rssexpanded-- + % --BEGIN ENCODER code2of5-- /code2of5 { @@ -1378,7 +1933,7 @@ 0 begin % Confine variable to local scope /options exch def % We are given an option string - /renderopts options def + /useropts options def /barcode exch def % We are given a barcode string /includecheck false def @@ -1458,13 +2013,13 @@ % Return the arguments /retval 1 dict def - retval (sbs) sbs put + retval (sbs) [sbs {48 sub} forall] put retval (bhs) [sbs length 1 add 2 idiv {height} repeat] put retval (bbs) [sbs length 1 add 2 idiv {0} repeat] put includetext { retval (txt) txt put } if - retval (opt) renderopts put + retval (opt) useropts put retval end @@ -1479,7 +2034,7 @@ 0 begin % Confine variables to local scope /options exch def % We are given an option string - /renderopts options def + /useropts options def /barcode exch def % We are given a barcode string /includecheck false def @@ -1557,23 +2112,23 @@ sbs barlen 6 mul 6 add encs checksum1 get putinterval sbs barlen 6 mul 12 add encs checksum2 get putinterval includecheckintext { - txt barlen [barchars checksum1 1 getinterval xpos textpos textfont 0] put + txt barlen [barchars checksum1 1 getinterval xpos textpos textfont textsize] put /enc encs checksum1 get def 0 1 5 { % xpos+=width of the character /xpos exch enc exch get 48 sub xpos add def } for - txt barlen 1 add [barchars checksum2 1 getinterval xpos textpos textfont 0] put + txt barlen 1 add [barchars checksum2 1 getinterval xpos textpos textfont textsize] put } { - txt barlen [() xpos textpos textfont 0] put - txt barlen 1 add [() xpos textpos textfont 0] put + txt barlen [() xpos textpos textfont textsize] put + txt barlen 1 add [() xpos textpos textfont textsize] put } ifelse sbs barlen 6 mul 18 add encs 11 get putinterval } { sbs barlen 6 mul 6 add encs checksum1 get putinterval includecheckintext { - txt barlen [barchars checksum1 1 getinterval xpos textpos textfont 0] put + txt barlen [barchars checksum1 1 getinterval xpos textpos textfont textsize] put } { - txt barlen [() xpos textpos textfont 0] put + txt barlen [() xpos textpos textfont textsize] put } ifelse sbs barlen 6 mul 12 add encs 11 get putinterval } ifelse @@ -1583,13 +2138,13 @@ % Return the arguments /retval 1 dict def - retval (sbs) sbs put + retval (sbs) [sbs {48 sub} forall] put retval (bhs) [sbs length 1 add 2 idiv {height} repeat] put retval (bbs) [sbs length 1 add 2 idiv {0} repeat] put includetext { retval (txt) txt put } if - retval (opt) renderopts put + retval (opt) useropts put retval end @@ -1604,7 +2159,7 @@ 0 begin % Confine variables to local scope /options exch def % We are given an option string - /renderopts options def + /useropts options def /barcode exch def % We are given a barcode string /includecheck false def % Enable/disable checkdigit @@ -1697,13 +2252,13 @@ % Return the arguments /retval 1 dict def - retval (sbs) sbs put + retval (sbs) [sbs {48 sub} forall] put retval (bhs) [sbs length 1 add 2 idiv {height} repeat] put retval (bbs) [sbs length 1 add 2 idiv {0} repeat] put includetext { retval (txt) txt put } if - retval (opt) renderopts put + retval (opt) useropts put retval end @@ -1712,6 +2267,270 @@ /rationalizedCodabar load 0 1 dict put % --END ENCODER rationalizedCodabar-- +% --BEGIN ENCODER onecode-- +/onecode { + + 0 begin + + /options exch def % We are given an option string + /useropts options def + /barcode exch def % We are given a barcode string + + /height 0.175 def + + % Parse the input options + options { + token false eq {exit} if dup length string cvs (=) search + true eq {cvlit exch pop exch def} {cvlit true def} ifelse + } loop + + /height height cvr def + + /barlen barcode length def + + /normalize { + /base exch def + /num exch def + num length 1 sub -1 1 { + /i exch def + num i 1 sub 2 copy get num i get base idiv add put + num i num i get base mod put + } for + { %loop - extend input as necessary + num 0 get base lt {exit} if + /num [0 num {} forall] def + num 0 num 0 get num 1 get base idiv add put + num 1 num 1 get base mod put + } loop + % Trim leading zeros + /num [/i true def num {dup 0 eq i and {pop} {/i false def} ifelse} forall] def + num length 0 eq {/num [0] def} if + num + } bind def + + /bigadd { + 2 copy length exch length + 2 copy sub abs /offset exch def + lt {exch} if + /a exch def /b exch def + 0 1 b length 1 sub { + dup a exch offset add 2 copy get b 5 -1 roll get add put + } for + a + } bind def + + % Conversion of data fields into binary data + barlen 20 eq {[0]} if + barlen 25 eq {[1]} if + barlen 29 eq {[1 0 0 0 0 1]} if + barlen 31 eq {[1 0 0 0 1 0 0 0 0 1]} if + /binval exch [barcode 20 barlen 20 sub getinterval {48 sub} forall] bigadd def + /binval [binval {} forall barcode 0 get 48 sub] def + /binval [binval {5 mul} forall] [barcode 1 get 48 sub] bigadd 10 normalize def + /binval [binval {} forall barcode 2 18 getinterval {48 sub} forall] def + + % Conversion of binary data into byte array + /bytes 13 array def + /bintmp [binval {} forall] def + 12 -1 0 { + /i exch def + 0 1 bintmp length 2 sub { + /j exch def + bintmp j 1 add 2 copy get bintmp j get 256 mod 10 mul add put + bintmp j bintmp j get 256 idiv put + } for + bytes i bintmp bintmp length 1 sub get 256 mod put + bintmp bintmp length 1 sub 2 copy get 256 idiv put + } for + + % Generation of 11-bit CRC on byte array + /fcs 2047 def + /dat bytes 0 get 5 bitshift def + 6 { + fcs dat xor 1024 and 0 ne { + /fcs fcs 1 bitshift 3893 xor def + } { + /fcs fcs 1 bitshift def + } ifelse + /fcs fcs 2047 and def + /dat dat 1 bitshift def + } repeat + 1 1 12 { + bytes exch get 3 bitshift /dat exch def + 8 { + fcs dat xor 1024 and 0 ne { + /fcs fcs 1 bitshift 3893 xor def + } { + /fcs fcs 1 bitshift def + } ifelse + /fcs fcs 2047 and def + /dat dat 1 bitshift def + } repeat + } for + + % Conversion from binary data to codewords + /codewords 10 array def + 9 -1 0 { + /i exch def + i 9 eq { + /b 636 def + } { + /b 1365 def + } ifelse + 0 1 binval length 2 sub { + /j exch def + binval j 1 add 2 copy get binval j get b mod 10 mul add put + binval j binval j get b idiv put + } for + codewords i binval binval length 1 sub get b mod put + binval binval length 1 sub 2 copy get b idiv put + } for + + % Inserting additional information into codewords + codewords 9 codewords 9 get 2 mul put + fcs 1024 and 0 ne { + codewords 0 codewords 0 get 659 add put + } if + + % Conversion from codewords to characters + /tab513 1287 dict def + /lo 0 def + /hi 1286 def + 0 1 8191 { + { % no loop - provides common exit point + /i exch def + /onbits 0 def + 0 1 12 { + i exch 1 exch bitshift and 0 ne { + /onbits onbits 1 add def + } if + } for + onbits 5 ne {exit} if + /j i def + /rev 0 def + 16 { + /rev rev 1 bitshift j 1 and or def + /j j -1 bitshift def + } repeat + /rev rev -3 bitshift def + rev i lt {exit} if + rev i eq { + tab513 hi i put + /hi hi 1 sub def + } { + tab513 lo i put + tab513 lo 1 add rev put + /lo lo 2 add def + } ifelse + exit + } loop + } for + + /tab213 78 dict def + /lo 0 def + /hi 77 def + 0 1 8191 { + { % no loop - provides common exit point + /i exch def + /onbits 0 def + 0 1 12 { + i exch 1 exch bitshift and 0 ne { + /onbits onbits 1 add def + } if + } for + onbits 2 ne {exit} if + /j i def + /rev 0 def + 16 { + /rev rev 1 bitshift j 1 and or def + /j j -1 bitshift def + } repeat + /rev rev -3 bitshift def + rev i lt {exit} if + rev i eq { + tab213 hi i put + /hi hi 1 sub def + } { + tab213 lo i put + tab213 lo 1 add rev put + /lo lo 2 add def + } ifelse + exit + } loop + } for + + /chars 10 array def + 0 1 9 { + /i exch def + codewords i get dup 1286 le { + tab513 exch get + } { + tab213 exch 1287 sub get + } ifelse + chars i 3 -1 roll put + } for + + 9 -1 0 { + /i exch def + 2 i exp cvi fcs and 0 ne { + chars i chars i get 8191 xor put + } if + } for + + % Conversion from characters to the OneCode encoding + /barmap [ + 7 2 4 3 1 10 0 0 9 12 2 8 5 5 6 11 8 9 3 1 + 0 1 5 12 2 5 1 8 4 4 9 11 6 3 8 10 3 9 7 6 + 5 11 1 4 8 5 2 12 9 10 0 2 7 1 6 7 3 6 4 9 + 0 3 8 6 6 4 2 7 1 1 9 9 7 10 5 2 4 0 3 8 + 6 2 0 4 8 11 1 0 9 8 3 12 2 6 7 7 5 1 4 10 + 1 12 6 9 7 3 8 0 5 8 9 7 4 6 2 10 3 4 0 5 + 8 4 5 7 7 11 1 9 6 0 9 6 0 6 4 8 2 1 3 2 + 5 9 8 12 4 11 6 1 9 5 7 4 3 3 1 2 0 7 2 0 + 1 3 4 1 6 10 3 5 8 7 9 4 2 11 5 6 0 8 7 12 + 4 2 8 1 5 10 3 0 9 3 0 9 6 5 2 4 7 8 1 7 + 5 0 4 5 2 3 0 10 6 12 9 2 3 11 1 6 8 8 7 9 + 5 4 0 11 1 5 2 2 9 1 4 12 8 3 6 6 7 0 3 7 + 4 7 7 5 0 12 1 11 2 9 9 0 6 8 5 3 3 10 8 2 + ] def + + /bbs 65 array def + /bhs 65 array def + 0 1 64 { + /i exch def + /dec chars barmap i 4 mul get get 2 barmap i 4 mul 1 add get exp cvi and 0 ne def + /asc chars barmap i 4 mul 2 add get get 2 barmap i 4 mul 3 add get exp cvi and 0 ne def + dec not asc not and { + bbs i 3 height mul 8 div put + bhs i 2 height mul 8 div put + } if + dec not asc and { + bbs i 3 height mul 8 div put + bhs i 5 height mul 8 div put + } if + dec asc not and { + bbs i 0 height mul 8 div put + bhs i 5 height mul 8 div put + } if + dec asc and { + bbs i 0 height mul 8 div put + bhs i 8 height mul 8 div put + } if + } for + + /retval 4 dict def + retval (bbs) bbs put + retval (bhs) bhs put + retval (sbs) [bhs length 1 sub {1.44 1.872} repeat 1.44] put + retval (opt) useropts put + retval + + end + +} bind def +/onecode load 0 1 dict put +% --END ENCODER onecode-- + % --BEGIN ENCODER postnet-- /postnet { @@ -1720,7 +2539,7 @@ 0 begin /options exch def % We are given an option string - /renderopts options def + /useropts options def /barcode exch def % We are given a barcode string /includetext false def % Enable/disable text @@ -1728,7 +2547,7 @@ /textfont /Courier def /textsize 10 def /textpos -7 def - /height 0.2 def + /height 0.125 def % Parse the input options options { @@ -1780,7 +2599,7 @@ heights j enc j 1 getinterval cvi height mul 5 div put } for bhs i 5 mul 1 add heights putinterval % Put encoded digit into sbs - txt i [barcode i 1 getinterval i 20 mul 4 add textpos textfont textsize] put + txt i [barcode i 1 getinterval i 5 mul 1 add 3.312 mul textpos textfont textsize] put /checksum checksum indx add def % checksum+=indx } for @@ -1795,9 +2614,9 @@ bhs barlen 5 mul 1 add heights putinterval includecheckintext { - txt barlen [barchars checksum 1 getinterval barlen 20 mul 4 add textpos textfont textsize] put + txt barlen [barchars checksum 1 getinterval barlen 5 mul 1 add 3.312 mul textpos textfont textsize] put } { - txt barlen [( ) barlen 10 mul 4 add textpos textfont textsize] put + txt barlen [( ) barlen 5 mul 1 add 72 mul 25 div textpos textfont textsize] put } ifelse % Put end character @@ -1812,15 +2631,11 @@ /retval 1 dict def retval (bhs) bhs put retval (bbs) [bhs length {0} repeat] put - /sbs bhs length 2 mul 1 sub string def - 0 1 sbs length 1 sub { - sbs exch 50 put % Fill with 2s - } for - retval (sbs) sbs put + retval (sbs) [bhs length 1 sub {1.44 1.872} repeat 1.44] put includetext { retval (txt) txt put } if - retval (opt) renderopts put + retval (opt) useropts put retval end @@ -1835,7 +2650,7 @@ 0 begin /options exch def % We are given an option string - /renderopts options def + /useropts options def /barcode exch def % We are given a barcode string /includetext false def % Enable/disable text @@ -1843,7 +2658,7 @@ /textfont /Courier def /textsize 10 def /textpos -7 def - /height 0.3 def + /height 0.175 def % Parse the input options options { @@ -1888,7 +2703,7 @@ pop pop % Discard seek and post /enc encs indx get def % Get the indxth encoding encstr i 4 mul 1 add enc putinterval - txt i [barcode i 1 getinterval i 16 mul 4 add textpos textfont textsize] put + txt i [barcode i 1 getinterval i 4 mul 1 add 3.312 mul textpos textfont textsize] put /checksumrow checksumrow indx 6 idiv add def /checksumcol checksumcol indx 6 mod add def } for @@ -1898,9 +2713,9 @@ /enc encs checksum get def encstr barlen 4 mul 1 add enc putinterval includecheckintext { - txt barlen [barchars checksum 1 getinterval barlen 16 mul 4 add textpos textfont textsize] put + txt barlen [barchars checksum 1 getinterval barlen 4 mul 1 add 3.312 mul textpos textfont textsize] put } { - txt barlen [( ) barlen 16 mul 4 add textpos textfont textsize] put + txt barlen [( ) barlen 4 mul 1 add 3.312 mul textpos textfont textsize] put } ifelse % Put end character @@ -1932,15 +2747,11 @@ /retval 4 dict def retval (bbs) bbs put retval (bhs) bhs put - /sbs bhs length 2 mul 1 sub string def - 0 1 sbs length 1 sub { - sbs exch 50 put % Fill with 2s - } for - retval (sbs) sbs put + retval (sbs) [bhs length 1 sub {1.44 1.872} repeat 1.44] put includetext { retval (txt) txt put } if - retval (opt) renderopts put + retval (opt) useropts put retval end @@ -1955,14 +2766,15 @@ 0 begin /options exch def % We are given an option string - /renderopts options def + /useropts options def /barcode exch def % We are given a barcode string - /includetext false def % Enable/disable text + /includetext false def % Enable/disable text /textfont /Courier def /textsize 10 def /textpos -7 def - /height 0.3 def + /height 0.175 def + /custinfoenc (character) def % Parse the input options options { @@ -1985,50 +2797,72 @@ (033) (103) (113) (123) (130) (131) (132) (133) (203) (213) (223) (230) (231) (232) (233) (303) (313) (323) (330) (331) (332) (333) (003) (013) + (00) (01) (02) (10) (11) (12) (20) (21) (22) (30) (13) (3) ] def % Create a string of the available characters /barchars (ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz #) def - % Create an array of numeric mappings - /nencs - [ (00) (01) (02) (10) (11) - (12) (20) (21) (22) (30) - ] def - /barlen barcode length def - /encstr 37 string def - /txt 8 array def + barcode 0 2 getinterval (11) eq {37} if + barcode 0 2 getinterval (59) eq {52} if + barcode 0 2 getinterval (62) eq {67} if + /encstr exch string def + /txt barlen 2 sub array def % Put start character - encstr 0 encs 64 get putinterval + encstr 0 encs 74 get putinterval - % Encode the type + % Encode the FCC 0 1 1 { /i exch def - nencs barcode i 1 getinterval cvi get + encs barcode i 1 getinterval cvi 64 add get encstr i 2 mul 2 add 3 2 roll putinterval } for % Encode the DPID 2 1 9 { /i exch def - nencs barcode i 1 getinterval cvi get + encs barcode i 1 getinterval cvi 64 add get encstr i 2 mul 2 add 3 2 roll putinterval - txt i 2 sub [barcode i 1 getinterval i 2 sub 8 mul 24 add textpos textfont textsize] put + txt i 2 sub [barcode i 1 getinterval i 2 sub 2 mul 6 add 3.312 mul textpos textfont textsize] put } for + + % Encode the customer information + custinfoenc (numeric) eq { + 0 1 barlen 11 sub { + /i exch def + encs barcode i 10 add 1 getinterval cvi 64 add get + encstr i 2 mul 22 add 3 2 roll putinterval + txt i 8 add [barcode i 10 add 1 getinterval i 2 mul 22 add 3.312 mul textpos textfont textsize] put + } for + /ciflen barlen 10 sub 2 mul def + } { + 0 1 barlen 11 sub { + /i exch def + barcode i 10 add 1 getinterval barchars exch search + pop + length /indx exch def + pop pop + /enc encs indx get def + encstr i 3 mul 22 add enc putinterval + txt i 8 add [barcode i 10 add 1 getinterval i 3 mul 22 add 3.312 mul textpos textfont textsize] put + } for + /ciflen barlen 10 sub 3 mul def + } ifelse - % Add a pad character - encstr 22 encs 65 get putinterval + % Add any filler characters + 22 ciflen add 1 encstr length 14 sub { + encstr exch encs 75 get putinterval + } for - % Create the 64x64 multiplication table + % Create the 64x64 Reed-Solomon table /rstable 64 64 mul array def rstable 0 [ 64 {0} repeat ] putinterval rstable 64 [ 0 1 63 {} for ] putinterval /prev 1 def - 1 1 63 { - /i exch def + 64 { /next prev 1 bitshift def next 64 and 0 ne { /next next 67 xor def @@ -2042,19 +2876,19 @@ } if } for /prev next def - } for + } repeat - % Calculate the reed-solomon codes for triples - /rscodes 11 array def + % Calculate the Reed-Solomon codes for triples + /rscodes encstr length 16 sub 3 idiv 4 add array def rscodes 0 [ 4 {0} repeat ] putinterval - 2 3 22 { + 2 3 encstr length 16 sub { /i exch def rscodes rscodes length i 2 sub 3 idiv sub 1 sub encstr i 1 getinterval cvi 16 mul encstr i 1 add 1 getinterval cvi 4 mul add encstr i 2 add 1 getinterval cvi add put - } for + } for rscodes length 5 sub -1 0 { /i exch def 0 1 4 { @@ -2064,7 +2898,6 @@ xor put } for } for - /checkcode (000000000000) def 0 1 3 { /i exch def @@ -2073,9 +2906,9 @@ } for % Put checkcode and end characters - encstr 23 checkcode putinterval - encstr 35 encs 64 get putinterval - + encstr encstr length 14 sub checkcode putinterval + encstr encstr length 2 sub encs 74 get putinterval + /bbs encstr length array def /bhs encstr length array def 0 1 encstr length 1 sub { @@ -2102,15 +2935,11 @@ /retval 4 dict def retval (bbs) bbs put retval (bhs) bhs put - /sbs bhs length 2 mul 1 sub string def - 0 1 sbs length 1 sub { - sbs exch 50 put % Fill with 2s - } for - retval (sbs) sbs put + retval (sbs) [bhs length 1 sub {1.44 1.872} repeat 1.44] put includetext { retval (txt) txt put } if - retval (opt) renderopts put + retval (opt) useropts put retval end @@ -2125,7 +2954,7 @@ 0 begin /options exch def % We are given an option string - /renderopts options def + /useropts options def /barcode exch def % We are given a barcode string /includetext false def % Enable/disable text @@ -2133,7 +2962,7 @@ /textfont /Courier def /textsize 10 def /textpos -7 def - /height 0.3 def + /height 0.175 def % Parse the input options options { @@ -2172,7 +3001,7 @@ pop pop % Discard seek and post /enc encs indx get def % Get the indxth encoding encstr i 4 mul enc putinterval - txt i [barcode i 1 getinterval i 16 mul textpos textfont textsize] put + txt i [barcode i 1 getinterval i 4 mul 3.312 mul textpos textfont textsize] put } for /bbs encstr length array def @@ -2201,15 +3030,11 @@ /retval 4 dict def retval (bbs) bbs put retval (bhs) bhs put - /sbs bhs length 2 mul 1 sub string def - 0 1 sbs length 1 sub { - sbs exch 50 put % Fill with 2s - } for - retval (sbs) sbs put + retval (sbs) [bhs length 1 sub {1.44 1.872} repeat 1.44] put includetext { retval (txt) txt put } if - retval (opt) renderopts put + retval (opt) useropts put retval end @@ -2224,7 +3049,7 @@ 0 begin % Confine variables to local scope /options exch def % We are given an option string - /renderopts options def + /useropts options def /barcode exch def % We are given a barcode string /includecheck false def % Enable/disable checkdigit @@ -2304,13 +3129,13 @@ % Return the arguments /retval 1 dict def - retval (sbs) sbs put + retval (sbs) [sbs {48 sub} forall] put retval (bhs) [sbs length 1 add 2 idiv {height} repeat] put retval (bbs) [sbs length 1 add 2 idiv {0} repeat] put includetext { retval (txt) txt put } if - retval (opt) renderopts put + retval (opt) useropts put retval end @@ -2325,7 +3150,7 @@ 0 begin % Confine variables to local scope /options exch def % We are given an option string - /renderopts options def + /useropts options def /barcode exch def % We are given a barcode string /includetext false def % Enable/disable text @@ -2422,13 +3247,13 @@ % Return the arguments /retval 1 dict def - retval (sbs) sbs put + retval (sbs) [sbs {48 sub} forall] put retval (bhs) [sbs length 1 add 2 idiv {height} repeat] put retval (bbs) [sbs length 1 add 2 idiv {0} repeat] put includetext { retval (txt) txt put } if - retval (opt) renderopts put + retval (opt) useropts put retval end @@ -2446,26 +3271,26 @@ /barcode exch def % We are given a barcode string barcode (fima) eq { - /sbs (111515111) def - /bhs [.25 .25 .25 .25 .25] def + /sbs [2.25 2.25 2.25 11.25 2.25 11.25 2.25 2.25 2.25] def + /bhs [.625 .625 .625 .625 .625] def /bbs [0 0 0 0 0] def } if barcode (fimb) eq { - /sbs (13111311131) def - /bhs [.25 .25 .25 .25 .25 .25] def + /sbs [2.25 6.75 2.25 2.25 2.25 6.25 2.25 2.25 2.25 6.75 2.25] def + /bhs [.625 .625 .625 .625 .625 .625] def /bbs [0 0 0 0 0 0] def } if barcode (fimc) eq { - /sbs (11131313111) def - /bhs [.25 .25 .25 .25 .25 .25] def + /sbs [2.25 2.25 2.25 6.75 2.25 6.75 2.25 6.75 2.25 2.25 2.25] def + /bhs [.625 .625 .625 .625 .625 .625] def /bbs [0 0 0 0 0 0] def } if barcode (fimd) eq { - /sbs (1111131311111) def - /bhs [.25 .25 .25 .25 .25 .25 .25] def + /sbs [2.25 2.25 2.25 2.25 2.25 6.75 2.25 6.75 2.25 2.25 2.25 2.25 2.25] def + /bhs [.625 .625 .625 .625 .625 .625 .625] def /bbs [0 0 0 0 0 0 0] def } if @@ -2489,19 +3314,16 @@ 0 begin % Confine variables to local scope /args exch def % We are given some arguments - /sbs args (sbs) get def - /bhs args (bhs) get def - /bbs args (bbs) get def - /renderopts args (opt) get def - - % Get the text if known, otherwise it is empty - args (txt) known { - /txt args (txt) get def - } { - /txt [] def - } ifelse % Default options + /sbs [] def + /bhs [] def + /bbs [] def + /txt [] def + /barcolor (unset) def + /textcolor (unset) def + /bordercolor (unset) def + /backgroundcolor (unset) def /inkspread 0.15 def /width 0 def /barratio 1 def @@ -2512,13 +3334,27 @@ /bordertop 1 def /borderbottom 1 def /borderwidth 0.5 def - - % Parse the render options - renderopts { + /guardwhitespace false def + /guardleftpos 0 def + /guardleftypos 0 def + /guardrightpos 0 def + /guardrightypos 0 def + /guardwidth 6 def + /guardheight 7 def + + % Apply the renderer options + args {exch cvlit exch def} forall + + % Parse the user options + opt { token false eq {exit} if dup length string cvs (=) search true eq {cvlit exch pop exch def} {cvlit true def} ifelse } loop - + + /barcolor barcolor cvlit def + /textcolor textcolor cvlit def + /bordercolor bordercolor cvlit def + /backgroundcolor backgroundcolor cvlit def /inkspread inkspread cvr def /width width cvr def /barratio barratio cvr def @@ -2528,56 +3364,110 @@ /bordertop bordertop cvr def /borderbottom borderbottom cvr def /borderwidth borderwidth cvr def + /guardleftpos guardleftpos cvr def + /guardleftypos guardleftypos cvr def + /guardrightpos guardrightpos cvr def + /guardrightypos guardrightypos cvr def + /guardwidth guardwidth cvr def + /guardheight guardheight cvr def % Create bar elements and put them into the bars array /bars sbs length 1 add 2 idiv array def - /x 0.00 def + /x 0.00 def /maxh 0 def 0 1 sbs length 1 add 2 idiv 2 mul 2 sub { /i exch def i 2 mod 0 eq { % i is even - /d sbs i get 48 sub barratio mul barratio sub 1 add def % d=digit*r-r+1 + /d sbs i get barratio mul barratio sub 1 add def % d=digit*r-r+1 /h bhs i 2 idiv get 72 mul def % Height from bhs /c d 2 div x add def % Centre of the bar = x + d/2 /y bbs i 2 idiv get 72 mul def % Baseline from bbs /w d inkspread sub def % bar width = digit - inkspread bars i 2 idiv [h c y w] put % Add the bar entry + h maxh gt {/maxh h def} if } { - /d sbs i get 48 sub spaceratio mul spaceratio sub 1 add def % d=digit*r-r+1 + /d sbs i get spaceratio mul spaceratio sub 1 add def % d=digit*r-r+1 } ifelse /x x d add def % x+=d } for gsave + currentpoint translate + % Force symbol to given width width 0 ne { width 72 mul x div 1 scale } if + % Display the border and background + newpath + borderleft neg borderbottom neg moveto + x borderleft add borderright add 0 rlineto + 0 maxh borderbottom add bordertop add rlineto + x borderleft add borderright add neg 0 rlineto + 0 maxh borderbottom add bordertop add neg rlineto + closepath + backgroundcolor (unset) ne { + gsave + (< >) dup 1 backgroundcolor putinterval cvx exec {255 div} forall setrgbcolor + fill + grestore + } if + showborder { + gsave + bordercolor (unset) ne { + (< >) dup 1 bordercolor putinterval cvx exec {255 div} forall setrgbcolor + } if + borderwidth setlinewidth stroke + grestore + } if + % Display the bars for elements in the bars array + gsave + barcolor (unset) ne { + (< >) dup 1 barcolor putinterval cvx exec {255 div} forall setrgbcolor + } if bars { {} forall - setlinewidth moveto 0 exch rlineto stroke + newpath setlinewidth moveto 0 exch rlineto stroke } forall - - % Display the border - showborder { - borderwidth setlinewidth - borderleft neg borderbottom neg moveto - x borderleft add borderright add 0 rlineto - 0 h borderbottom add bordertop add rlineto - x borderleft add borderright add neg 0 rlineto - 0 h borderbottom add bordertop add neg rlineto - closepath stroke - } if + grestore % Display the text for elements in the text array + textcolor (unset) ne { + (< >) dup 1 textcolor putinterval cvx exec {255 div} forall setrgbcolor + } if + /s 0 def /f () def txt { {} forall - dup 0 ne {exch findfont exch scalefont setfont} {pop pop} ifelse + 2 copy s ne exch f ne or { + 2 copy /s exch def /f exch def + exch findfont exch scalefont setfont + } { + pop pop + } ifelse moveto show } forall + % Display the guard elements + guardwhitespace { + 0.75 setlinewidth + guardleftpos 0 ne { + newpath + guardleftpos neg guardwidth add guardleftypos guardwidth 2 div add moveto + guardwidth neg guardheight -2 div rlineto + guardwidth guardheight -2 div rlineto + stroke + } if + guardrightpos 0 ne { + newpath + guardrightpos x add guardwidth sub guardrightypos guardheight 2 div add moveto + guardwidth guardheight -2 div rlineto + guardwidth neg guardheight -2 div rlineto + stroke + } if + } if + grestore end |