summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/barcodes/barcodes.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/barcodes/barcodes.dtx')
-rw-r--r--Master/texmf-dist/source/latex/barcodes/barcodes.dtx2590
1 files changed, 2590 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/barcodes/barcodes.dtx b/Master/texmf-dist/source/latex/barcodes/barcodes.dtx
new file mode 100644
index 00000000000..d86058a6578
--- /dev/null
+++ b/Master/texmf-dist/source/latex/barcodes/barcodes.dtx
@@ -0,0 +1,2590 @@
+% \iffalse meta-comment
+%
+% This is part of the barcode package.
+% You should run
+% tex barcodes.ins
+% instead of reading/running this file.
+% Among other things, you will then get a documentation.
+% I guess you need some, or you wouldn't look here.
+% \fi
+%
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % EAN documentation starts here %%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%<*eandoc>
+\documentclass{article}
+\begin{document}
+\author{Peter Willadt}
+\title{EAN Barcodes by \TeX{} an Metafont}
+\date{1998-01-24}
+\maketitle
+\begin{abstract}
+This article documents the use of the font {\tt wlean.mf}. With the font,
+there also comes an auxiliary Perl file for preprocessing TeX source.
+Its use is also documented here.
+\end{abstract}
+
+\section{Legal Restrictions and Introduction}
+
+All the files in this package are subject to the \LaTeX\ Project Public
+License. Also I got a special wish: If you find this package useful,
+support TUG or your local \TeX\ user group.
+
+The complete contents of this package is
+described in the file {\tt README}. That file also contains some
+information about the use of the other barcode fonts that are
+contained. For more information about these other files you may want
+to read an article that has appeared in the december, 1997 issue of
+{\em TUGboat}. Please see also the remarks in the section {\em
+Address} later in this file.
+
+\section{About {\sc ean}}
+
+In stores, {\sc upc} and {\sc ean} codes are widely used for automatic
+identification, pricing etc. {\sc ean} consist of either eight or
+thirteen digits. Twelve digit {\sc upc} codes are like thirteen digit
+{\sc ean} with the first digit equal to zero. {\sc ean} specifications
+do not only
+require bars, also the encoded number has to be written in plain text,
+in case a reader is defective or the code is too hard to read. {\sc
+ean} is a high-density code, and so it is highly vulnerable.
+
+\subsection{Coding}
+
+The last digit of an {\sc ean} is a weighted mod 10 checksum. Digits
+are alternatingly multiplied by 1 or 3. The so calculated sum over all
+digits has to be divisible by ten without any remainder.
+
+There are three different {\sc ean} character sets labeled A, B, and
+C. Eight digit {\sc ean} codes use character sets A and C, {\sc ean}
+codes with thirteen digits use all three character sets---see below.
+
+\begin{verse}
+{\sc ean} with eight digits consists of:\\
+a sidebar\\
+the first four digits (coded in character set A),\\
+the middle separator,\\
+the other four digits (coded in character set C)\\
+another sidebar.
+\end{verse}
+
+The first half of an {\sc ean} code with thirteen digits is coded in
+the character sets A and B, the second half in character set C. The
+coding of the very first digit is hidden in the varying use of the
+character sets A and B. A C programmer might use the following table
+and algorithm to decide which character set to use for digits 2--7:
+
+\begin{verbatim}
+static UBYTE abtab[10][6]={
+ {0,0,0,0,0,0}, /* 0 */
+ {0,0,1,0,1,1}, /* 1 */
+ {0,0,1,1,0,1}, /* 2 */
+ {0,0,1,1,1,0}, /* 3 */
+ {0,1,0,0,1,1}, /* 4 */
+ {0,1,1,0,0,1}, /* 5 */
+ {0,1,1,1,0,0}, /* 6 */
+ {0,1,0,1,0,1}, /* 7 */
+ {0,1,0,1,1,0}, /* 8 */
+ {0,1,1,0,1,0} /* 9 */
+};
+
+char eancode[18];
+char eansource[14]="4025700001030";
+
+eancode[0]=eansource[0];
+eancode[1]=' ';
+eancode[2]='+';
+for(i=1;i<7;i++)
+ eancode[i+2]='A'+eansource[i]-'0'
+ +abtab[eansource[0]-'0'][i-1]*('a'-'A');
+/* then the middle separator, digits 7--13,
+ * and the final + sign */
+\end{verbatim}
+
+
+A zero means to use character set A and a one means to use character
+set B for the respective digit. The printed code of an {\sc ean} 13
+consist of the following elements, from left to right:
+
+\begin{verse}
+The first digit in human-readable form\\
+an {\sc ean} sidebar\\
+six digits in character sets A or B\\
+the {\sc ean} middle separator\\
+six digits in character set C\\
+another {\sc ean} sidebar
+\end{verse}
+
+Magazines or codes with pricing have a so called extension following
+the main code with some fixed distance. This extension consists of one
+sidebar and two or five digits. As I have no full {\sc ean}
+documentation at hand at the time of this writing, I am sorry that I
+am not able to tell you more about this.
+
+The {\sc ean} digits themselves obey to the following rules: Each
+digit takes seven units of space. Some of the seven elements are
+white, others are black. Digits from character set A always are white
+at the left edge and black at the right, and they always have an odd numer
+of black elements. Digits from character set B are quit similiar, but
+they have an even number of black elements. Digits from Character set C
+always start with a black element and have an even number of
+black elements. The rightmost element in character set C is always white.
+The sidebars are three elements wide, the middle separator takes five
+elements.
+
+\subsection{What {\sc ean} numbers may I use?}
+
+For inhouse use, you may use any 13-digit {\sc ean} that starts with a
+2. If you want to have your products sold elsewhere, you have to buy a
+set of {\sc ean} numbers from the organisation in your country that
+holds these numbers. For germany, this organisation is the {\em
+Zentrale f\"ur Coorganisation} in Cologne. Almost any country has a
+similiar organisation.
+
+The first digit or sometimes the first two digits code the country of
+origin, the next five to six digits code the manufacturer, the eigth
+to twelfth digits are for free use by the manufacturer. The
+thirteenth digit is, as explained above, a checksum. {\sc ean} do not
+contain any qualifiers, so if you get an {\sc ean} from somewhere, you
+may find out about the country of origin and about the manufacturer of
+the product, but if you want to know more, you have to contact the
+manufacturer.
+
+\section{Using {\tt wlean.mf}}
+
+{\tt wlean.mf} is rather raw. It contains all three {\sc ean}
+character sets within one single font, but at different places.
+The character sets A, B, C, and the digits are
+featured through the following characters:
+
+\begin{verse}
+0 to 9 yield the digits from 0 to 9\\
+A to J yield the codes from character set A\\
+a to j yield the codes from character set B\\
+K to T yield the codes from character set C\\
++ makes the left and right sidebar and\\
+- makes the middle sign
+\end{verse}
+
+So, to code the number {\tt 2099993098253}, you have to write\\
+\verb*|{\eanfont2 +AJjjJd-KTSMPN+}|. The space is necessary to separate
+the leading 2 from the barcode.
+
+{\tt wlean.mf} does not use true {\sc ocr} digits, as it should. As
+the digits will not be used for {\sc ocr}, I do not consider this as
+a serious restriction. If you really need {\sc ocr} digits, there is
+an {\sc ocr} font on {\sc ctan}. And in {\em TUGboat}, there has been
+a publication about {\sc ean}, where \TeX{} draws the bars and
+the {\sc ocr} font prints the digits, see [1].
+
+{\tt wlean.mf} uses the normal {\sc ean} dimensions. If you would like
+lower bars---in contradiction to the {\sc ean} rules---you have to edit
+the source. The rules also make recommendations about the scaling. To
+be fully compatible, this font may be scaled 0.8, 0.9, 1, 1.2, 1.4,
+1.5, 1.7, 1.85, or 2 times the original size. With a 300 dpi printer,
+I do not recommend using sizes$<1.0$.
+
+\subsection{Installation}
+
+The installation itself is pretty mundane, like with any plain font.
+Just copy {\tt wlean.mf} to a location where Metafont can find
+it. Then invoke Metafont to create a {\sc tfm} file. Move this {\sc
+tfm} file where \TeX{} can find it. Type in the example at the end of
+this file and run it through \TeX{}. Then call Metafont again to
+produce a font suitable for your printer or previewer and move this
+font to an appropriate location. You may also want to edit {\tt
+codean.pl} to run on your shell. For this purpose you have to read
+your system's documentation or the documentation that comes with Perl.
+
+\subsection{Making readable output}
+
+Don't make {\sc ean} too small. With a 300 dpi printer, you should not
+use this font with magnification$<1$; {\tt scaled 1200} will be okay.
+If you want to do mass production, go to somebody with a barcode
+reader and check your output, {\em before} you loose money. You also
+should consider changes in the blackness that may be caused by
+production printing devices. And, of course, you should only use
+colours that can be used with barcode reading devices. Especially, do
+not use red and watch for much contrast between the colour you print
+and the colour of the paper.
+
+\subsection{Coding the numbers}
+
+You will perhaps not want to write something as ugly and error-prone
+as \verb*|{\eanfont2 +AJjjJd-KTSMPN+}| manually. So you have to use a
+preprocessor\footnote{See bcfaq.tex for \TeX{} code to go without
+preprocessing. It is very fine.}. With {\tt wlean.mf} there comes a
+tiny Perl program ({\tt codean.pl}) that does preprocessing within
+your \TeX{} sources\footnote{codean.pl in the meantime also handles
+code 128. See bcfaq.tex}.
+
+The \TeX{} file to be filtered may contain any number of lines
+that have one of the following commands starting at the leftmost position.
+
+\begin{itemize}
+\item \verb|\ean{|{\em12 or 13 digit number}\verb|}|
+The number will be coded as {\sc ean}. If it is only 12 digits long, the
+checksum will be calculated, too.
+
+\item \verb|\embed{|{\em12 or 13 digit number}\verb|}|
+The number is used as a base for embedding article numbers \&c.\
+within an {\sc ean}.
+
+\item \verb|\eean{|{\em number with at most 11 digits}\verb|}|
+This number is to be embedded within an {\sc ean}.
+
+\item \verb|\isbn{|{\em valid ISBN}\verb|}| An {\sc isbn} to
+make an embedded {\sc ean} of.
+\end{itemize}
+
+Let's look at an example: You want the {\sc isbn} {\tt0-201-13448-9}
+to be embedded. So you write \verb|\isbn{0201134489}|, but you might
+also use the embedding method and write
+\verb|\embed{9780000000000}| and, somewhere later in the file,
+\verb|\eean{020113448}|. In this latter case you have to omit the last digit,
+as {\sc isbn} loose their check digit in favour of the {\sc ean} check digit.
+Anyway you do it, you get your command replaced by
+\verb|\EAN{|{\em13-digit-number-coded-strange}\verb|}| in the output
+file.
+
+But embedding is especially useful if you also write the program that
+reads the barcodes. This program might then extract your article
+number from an {\sc ean} starting with {\tt20}, eg.
+
+What you have to do is, of course, to use stub definitions for the
+three macros mentioned above---as they shall never actually be
+typeset---and to use a valid definition for \verb|\EAN|. Then you run
+your \TeX{} source through {\tt codean.pl}. This program takes as
+first parameter the name of your original file and as second parameter
+the name of your destination file. If you omit the parameters, you will
+be asked for them.
+
+You may of course also peek the source of {\tt codean.pl} to see how
+{\sc ean} checksums are calculated, and so on.
+
+\subsection{Example}
+
+Here is a full example.
+Use this \TeX{} source:
+
+\begin{verbatim}
+\font\eanfont=WLEAN
+\def\ean#1{\message{Call codean.pl}}
+\def\eean#1{\message{Call codean.pl}}
+\def\isbn#1{\message{Call codean.pl}}
+\def\embed#1{}
+\def\EAN#1{\vbox{\vskip10pt\eanfont#1\vskip10pt}}
+ Now, something to do:
+\ean{4025700001030} % or, without checksum:
+\ean{402570000103}
+\embed{2500000000000}
+\eean{123}
+\isbn{0201134489}
+\end{verbatim}
+
+
+
+Having run your file through {\tt codean.pl}, the lines after the percent
+sign look like this:
+
+\begin{verbatim}
+ Now, something to do:
+\EAN{4 +AcFHaa-KKLKNK+} % or, without checksum: %(4025700001030)
+\EAN{4 +AcFHaa-KKLKNK+} %(402570000103)
+\embed{2500000000000}
+\EAN{2 +FAaaAa-KKLMNT+} % embedded(123)
+\EAN{9 +HiaCaB-LNOOSN+} % ISBN(0201134489)
+\end{verbatim}
+
+
+Running this file through \TeX{}, you get {\sc dvi} output containig
+{\sc ean} barcodes. Perhaps you wonder why there is not even a
+single {\sc ean} contained within this documentation. The reason is
+quite simple: You should be able to read the docs {\em before} you
+have installed the font. But now is the right time to try the example
+on your own. Better yet, you may code an {\sc ean} where you have
+taken the number from something like your favourite candy and then,
+having printed it, you may compare the bars. This is a nice way to
+spend your evenings. I actually started deciphering {\sc ean} codes in
+this way, several years ago.
+
+\section{The End}
+
+\subsection{Address}
+
+Just in case you want to write to me, here is my address---but
+please note: I am not the {\sc ean} guru.
+
+\begin{verbatim}
+Peter Willadt
+75177 Pforzheim
+Germany
+email: Willadt@t-online.de
+\end{verbatim}
+
+I also would appreciate if only one version of the material contained
+in this package is distributed. So if you have any corrections,
+suggestions, \&c., please do not hesitate to send them to me to
+incorporate them within this package.
+
+\subsection{Acknowledgement}
+
+I want to express my special thanks to Barbara Beeton for proofreading
+and making valuable suggestions. If there are still any typos or
+illegibilities, that is due to the fact that I had to change some
+things later on.
+
+\begin{thebibliography}{1}
+
+\bibitem{bc:ean}
+Peter Ol{\v{s}}ak.
+\newblock The {\sc ean} barcodes by {\TeX}.
+\newblock {\em TUGboat}, 15(4):459--464, 1994.
+
+\end{thebibliography}
+
+\end{document}
+%</eandoc>
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % EAN documentation ends here %%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % general documentation starts here %%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%<*bcfaq>
+% this file contains answers to frequently asked questions (FAQ)
+% about barcodes and---to some extent---VPL files.
+\documentclass[a4paper]{article}
+\bibliographystyle{alpha}
+
+% macros for the examples
+% These are documented within the text.
+
+% Barcode fonts
+\font\itf=wlitf scaled 1200
+
+% barcodes with depth
+\def\bcbox#1{\lower3pt\hbox{\itf +#1-}}
+
+% barcodes made taller
+\newbox\bsavebox
+\newdimen\bcboxdepth
+\bcboxdepth=4pt
+\def\bdbox#1{\setbox\bsavebox\hbox{\itf +#1-}
+\vbox{\hsize=\wd\bsavebox\offinterlineskip%
+ \copy\bsavebox%
+ \vskip-\ht\bsavebox\vskip\bcboxdepth%
+ \box\bsavebox\vskip-\bcboxdepth}}
+\def\bebox#1{\setbox\bsavebox\hbox{\itf +#1-}
+\vbox{\hsize=\wd\bsavebox\offinterlineskip%
+ \copy\bsavebox%
+ \copy\bsavebox%
+ \vskip-\ht\bsavebox\vskip\bcboxdepth%
+ \box\bsavebox\vskip-\bcboxdepth}}
+
+\def\tbs{{\tt\char92}}
+% makes a typewriter backslash
+\begin{document}
+\title{Barcodes-FAQ}
+\author{Peter Willadt}
+\date{2003-05-24}
+\maketitle
+\begin{abstract}
+
+This file deals with questions about barcode fonts created for
+\TeX{}. Its purpose is not to replace the regular documents, but to add
+informations that may be of no interest for the casual reader.
+
+\end{abstract}
+
+\section{Changelog}
+
+\subsection{Changes of the barcode package in general}
+\begin{tabular}{ll}
+\em Date & \em Change\\
+2003-05-24 & new release with some corrections to codean.pl\\
+ & Thanks to Jacek Ruzycka (uv\_centcom@yahoo.com)\\
+1999-05-29 & added license note to README\\
+1999-05-29 & added install.bat\\
+1998-11-28 & included wlcr39, wlcf39, and wlc93\\
+1998-04-21 & fixed wlitf bug\\
+1998-04-10 & switched partially to docstrip archive\\
+ & added support for code 11\\
+1998-01-24 & added code 128 in MF format, changed codean.pl\\
+1997-11-08 & changed metrics of {\sc itf} start/stop chars\\
+1997-10-09 & released first version of the barcode package
+\end{tabular}
+
+\subsection{Changes within this document}
+
+\begin{tabular}{ll}
+\em Date & \em Change\\
+1999-05-29 & added short info about install.bat\\
+1998-11-28 & added docs about code 93\\
+1998-04-10 & added docs about code 11\\
+1998-01-24 & added information about code 128\\
+1997-12-08 & added contributions to {\sc ean} coding by Kalvis M. Jansons\\
+ & changed section on plessey\\
+1997-11-09 & added several items, rearranged sections\\
+1997-11-08 & started writing first version
+\end{tabular}
+
+\section{Introduction}
+
+The barcode package itself can be found on {\tt ctan} in the
+subdirectory\\ {\tt fonts/barcodes/willadt}. It contains---among
+others---several fonts in {\sc vpl} format, so your {\sc dvi} driver
+should be able to handle virtual fonts. If it doesn't, you may perhaps
+use {\em dvicopy} to resolve the references to virtual fonts, or you
+may perhaps upgrade to a more modern \TeX{} package.
+
+\section{What about docs?}
+
+\subsection{Docs about barcodes}
+
+With the barcode package, there comes documentation about {\sc ean}
+fonts. In the README file, there are short examples of the use of
+the other fonts, too. Also the files {\tt examples.tex} shows the look
+and basic usage of the barcodes.
+
+In {\sl TUGboat}, barcoding has been covered in several
+articles \cite{bc:ean,bc:sauter,bc:vulis}. The barcode package itself
+is covered in an article that has appeared in the december issue,
+1997, of {\sl TUGboat}. As TUGboat is making the elder articles available
+online, I recommend looking for it.
+
+\subsection{Some information about code 128}
+
+Code 128 is able to print all 128 ascii chars. There are a little more
+than a hundred glyphs that are interpreted in three different
+ways. Some of the glyphs are used as shift chars to determine which
+interpretation to use. A checksum is mandatory. To use it, you must
+install {\tt wlc128.mf}.
+
+The preprocessing---switching among the different character sets,
+coding efficiently, calculating the checksum---is handled by the
+newer versions of codean.pl. This is perhaps not as pleasing as to do
+it with \TeX{} alone, but, alas, it works.
+
+The way to run the preprocessor is described in {\tt eandoc.tex}. To
+use code 128, you have to write a line starting with {\tt\tbs cxxviii\{}
+followed by the characters you want to code and followed by a closing
+brace. Non-printing seven-bit ascii characters may be specified in hex
+in C or \TeX{} style, like {\tt\tbs x3f} or \verb|^^3f|. Anything up to
+the rightmost closing brace in this line will be coded---there is no
+brace matching. But you will get a warning message if your text
+includes a right brace. So you may want to code braces in hex form to
+avoid this message. Please note that {\tt codean.pl} does almost no
+checking for errors, so if you intend to produce garbage, there are
+lots of ways. If you need code 128 escape characters, they may be
+included as hex characters with codes starting at 0x80.
+
+\begin{tabular}{lllll}
+\em Input Code & \em C128 number &\multicolumn{3}{c}{\em meaning}\\
+\em(hex) & \em(dec.) & \em Set A & \em Set B & \em Set C\\
+0x80 & 96 & FNC3 & FNC3 & 96\\
+0x81 & 97 & FNC2 & FNC2 & 97\\
+0x82 & 98 & SHIFT & SHIFT & 98\\
+0x83 & 99 & CODE C& CODE C& 99\\
+0x84 & 100 & CODE B& FNC4 & CODE B\\
+0x85 & 101 & FNC4 & CODE A& CODE A\\
+0x86 & 102 & FNC1 & FNC1 & FNC1\\
+0x87 & 103 & START A& START A& START A\\
+0x88 & 104 & START B& START B& START B\\
+0x89 & 105 & START C& START C& START C\\
+0x8a & 106 & STOP & STOP & STOP
+\end{tabular}
+
+But please keep in mind that {\tt codean.pl} does almost anything for you,
+you should not have the need to insert start/stop codes and the
+like. Only if you use EAN128, you will need {\tt FNC1}. Just to make
+it clear: For your barcode to include {\tt FNC1} you have to write
+\verb|^^86| before preprocessing.
+
+{\tt codean.pl} will insert a sequence of hex digits; the original
+text will be appended to the line as a comment.
+Also, your \TeX{} file has to define some macros. They look like
+this:
+
+\begin{verbatim}
+\font\fntcxx=wlc128 scaled \magstep3
+\def\CXXVIII{\bgroup\fntcxx\let\next\hexchar\next}
+\def\cxxviii{\message{OOPS, use codean.pl}}
+\def\hexchar#1#2{\if#1@
+ \global\let\next\egroup
+ \else\char"#1#2\fi\next}
+\end{verbatim}
+
+If you do not like end recursion, you might use other ones. If
+you dislike the hex format produced by {\tt codean.pl}, you are free to
+change it---as long as you don't redistribute.
+
+\subsection{A little bit about code 11}
+
+Code 11 is a numeric-only barcode. It is almost as space-efficient as
+{\sc itf}, and it comes with a checksum. The checksum should be
+swallowed by the reading device. The checksum is a weighted mod-11
+checksum. There are apparently two kinds of checksum in use: such with
+one checkdigit and such with two checkdigits.
+
+To use code 11, you should include {\tt barcode.sty}. \TeX{} will
+calculate the checksum on its own. If you need two check digits, you
+should say\\
+{\tt\tbs codexichecksumktrue}.\\
+How many check digits you
+actually need should be made clear in the documentation to your
+reading device\footnote{You may also want to check the documentation
+to find out if your reading device supports code 11 at all; code 11 is
+not that common.}. You may code the digits 0--9, and the minus
+sign. The start and stop sign is mapped to the @ character. Here is a
+full example. {Please note: If you do not use \LaTeX{}, you may
+have to supply a definition for {\tt\tbs makeatletter}
+and {\tt\tbs makeatother}}:
+
+\begin{verbatim}
+\input barcodes.sty
+%% with two check digits
+\codexichecksumktrue
+\codxi{12-1234}
+
+%% with only one check digit.
+\codexichecksumkfalse
+\codxi{12-1234}
+\bye
+\end{verbatim}
+
+\subsection{Which Code 39 should I use, there are different versions?}
+
+Well, you may \verb|\input code39| in your \TeX\ document to get the
+macro version. It is absolutely flexible in repect of barcode size and
+so on, but it is made of \TeX\ macros and there are probably
+situations where you may prefer a {\em real} font. So there is {\tt
+wlc39.mf} as a real font, {\tt wlcr39.mf} as a font running sideways,
+and{\tt wlcf39.vpl} as a full ascii code 39 in vpl format. The
+ltter two fonts are experimental, that means, they are not that much
+tested as the others.
+
+I recommend using either the \TeX\ macro or {\tt wlc39.mf}. The others
+are too special for normal use, rotation by the graohics driver is
+mor robust than building towers of letters, and full ascii code~39 is
+less than optimal.
+
+\subsection{About code 93}
+
+Code 93 is a little bit more compact than code 39 (as it uses also the
+gap between the characters), but in other aspects it is quite
+similiar. A checksum with two digits is mandatory. As with code 11,
+checksumming works by weighing the characters different depending on
+their position within the barcode.
+
+The version of code 93 that is included within the package resorts to
+uppercase ascii, digits, and to some other signs. Start and stop sign
+are mapped to {\tt<} and {\tt>}, respectively.
+
+Full ascii works similiar to full ascii with code 39 (that means with
+escape characters), but fortunately the escape characters are
+different from ordinary characters, so that you can hardly be
+misunderstood. Unfortunately the escape characters are named (\$),
+(\%), (/), and (+), so I decided to map them to opening and closing
+parentheses and brackets, respectively. This may not seem very clever
+when it comes to full ascii, but these characters may also appear as
+checksum characters, so we need them when doing uppercase ascii,
+too. For full ascii, it would be clever to redo the font in a
+completely different way and to map start sign, stop sign and the four
+escape characters to positions above 128, so that any 7 bit ascii
+character can be input directly.
+
+Code 93 is supported by codean.pl in the same way as ean or code 128
+are. You have to write {\tt\tbs xciii\{YOUR DATA 123\}}, run the file
+through {\tt codean.pl}, then you'll get\\
+{\tt\tbs XCIII\{YOUR DATA 123NN\}\%Code93(YOUR DATA 123)}
+
+The NN make up the two check characters. Normally, they are different,
+but in this example they are equal, by incident.
+
+\subsection{Docs about VPL Files}
+
+VPL files are documented in the files {\tt VPtoVF.WEB} and {\tt
+VFtoVP.WEB}. Both files can be found on {\sc ctan} under {\tt
+SYSTEMS/KNUTH}. {\em WEAVE} may be used to produce \TeX{} files. The
+documentation about the VPL/VF file formats is covered within the
+first few sections.
+
+\section{I want other metrics etc.}
+
+\subsection{My barcodes should have depth}
+
+You have got several possibilities to obtain depth. The most simple
+approach may be to set the barcodes with the regular barcode fonts into an
+{\tt\tbs hbox} and then to {\tt\tbs lower} this hbox.
+
+Let's look at an example:
+
+\begin{verbatim}
+\font\itf=wlitf scaled 1200
+\def\bcbox#1{\lower3pt\hbox{\itf +#1-}}
+ Example:
+{\sc itf} barcode looks like \quad\bcbox{1009}\quad
+for 1009, e.g.
+\end{verbatim}
+
+This code yields the following result:
+
+{\sc itf} barcode looks like \quad\bcbox{1009}\quad for 1009, e.g.
+
+Another approach is to edit the font sources. In case of {\sc vpl}
+files, this is quite painful. Rules in {\sc vpl} files do not have
+depth, so you have to change the characters mapping in a way that you
+add a {\em movedown} before you draw, and a {\em moveup} afterwards.
+You may see the changes for an arbitrary character from {\tt
+WLITF.VPL}:
+
+\begin{verbatim}
+(CHARACTER D48
+ (COMMENT from WLITF.VPL}
+ (CHARWD D 14) (CHARHT R 10)
+ (CHARDP R 0) (CHARIC R 0.0)
+ (MAP
+ (SETRULE R 14 R 1)(MOVERIGHT R 1)
+ (SETRULE R 14 R 1)(MOVERIGHT R 1)
+ (SETRULE R 14 R 2)(MOVERIGHT R 2)
+ (SETRULE R 14 R 2)(MOVERIGHT R 2)
+ (SETRULE R 14 R 1)(MOVERIGHT R 1)
+ )
+ )
+\end{verbatim}
+
+This character may be lowered by four units by editing in a way that the
+following lines result. Please note that there were not only the {\em
+moveup} and {\em movedown} commands added, but also the height an
+depth have been changed.
+
+\begin{verbatim}
+(CHARACTER D48
+ (COMMENT Lowered to give some depth)
+ (CHARWD D 14) (CHARHT R 10)
+ (CHARDP R 4) (CHARIC R 0.0)
+ (MAP
+ (MOVEDOWN R 4)
+ (SETRULE R 14 R 1)(MOVERIGHT R 1)
+ (SETRULE R 14 R 1)(MOVERIGHT R 1)
+ (SETRULE R 14 R 2)(MOVERIGHT R 2)
+ (SETRULE R 14 R 2)(MOVERIGHT R 2)
+ (SETRULE R 14 R 1)(MOVERIGHT R 1)
+ (MOVEUP R 4)
+ )
+ )
+\end{verbatim}
+
+\subsection{My barcodes are too tall}
+
+For the sake of the person who has to scan the barcodes, barcodes just
+can't be tall enough. If the complete code is as tall as wide, the
+reading device can be twisted against the code at an angle of 45
+degrees. If they are half as high, the angle reduces to 26 degrees.
+
+If you really want short codes, you have to edit the sources. In the
+{\sc vpl} file, you have to change the {\em charht} and the first parameter
+to the {\em setrule} command at well. You also should change the {\em
+designsize} parameter.
+
+For the EAN font, search for {\tt bheight\#} and change {\tt22.85
+mm\#} to the height you need. To get an EAN font without the digits
+(bars only), you also have to edit the character definitions by
+leaving out the last lines (saying {\tt nuller;}, e.g. and you have to
+change the formula for calculating {\tt totheight} to not include the
+height of the digits any more, also you should remove any references
+to {\tt klotz}.
+
+\subsection{My barcodes are not tall enough}
+
+You may also change the sources, like described in the previous
+subsection. But there is another solution that is perhaps more
+practical. The idea is simple that double black is still black and
+that you may overlay several printouts of the same barcode. Here is
+the example code (it may be made taller by adding more copies of the
+barcode box, of course). There is an extra dimension {\em bcboxdepth}
+added to yield depth for the barcodes.
+
+\begin{verbatim}
+\newbox\bsavebox
+\newdimen\bcboxdepth
+\bcboxdepth=4pt
+\def\bdbox#1{\setbox\bsavebox\hbox{\itf +#1-}
+\vbox{\hsize=\wd\bsavebox\copy\bsavebox%
+ \vskip-\ht\bsavebox\vskip\bcboxdepth%
+ \box\bsavebox\vskip-\bcboxdepth}}
+\def\bebox#1{\setbox\bsavebox\hbox{\itf +#1-}
+\vbox{\hsize=\wd\bsavebox\copy\bsavebox%
+ \vskip0pt\copy\bsavebox%
+ \vskip-\ht\bsavebox\vskip\bcboxdepth%
+ \box\bsavebox\vskip-\bcboxdepth}}
+ Example:
+Tall {\sc itf} barcode looks like \quad\bdbox{1009}\quad
+or (still taller) \quad\bebox{1009}\quad for 1009, e.g.
+\end{verbatim}
+
+And here is the result, you may compare it with the output of the
+previous example:
+
+Tall {\sc itf} barcode looks like \quad\bdbox{1009}\quad or (still
+taller) \quad\bebox{1009}\quad for 1009, e.g.
+
+\subsection{My barcodes are too wide/too narrow}
+
+Perhaps you should change the barcode size (by changing
+{\tt\tbs magnification}) and then read the subsections above about too
+tall bars and bars that are not tall enough.
+
+\subsection{My barcodes should run vertically}
+
+Vertically oriented barcode is a good idea for cans, bottles and
+similiar things.
+
+It just depends on your {\sc dvi} driver. Perhaps there is a
+possibility to handle rotation via {\tt\tbs special}, as with {\em
+dvips} and the {\em rotate} macros. For experimantal purposes I have
+included a code 39 version running down instead right ({\tt
+wlcr39.mf}). You may perhaps use it with {\tt\tbs shortstack} or
+similiar. Here is some code I used (successfully) with plain \TeX:
+
+\begin{verbatim}
+\font\testfont=wlcr39 scaled 1200
+\def\bcbax{\let\next\bcbox\vbox\bgroup
+ \offinterlineskip\testfont\setbox0\hbox{@}\hsize=\wd0
+ \noindent{}@\hfil\break\next}
+\def\fertig{@\hfil\break\egroup}
+\def\bcbox#1{\if @#1\let\next\fertig\else#1\hfil\break\fi\next}
+
+Look buddy, this is \bcbax1406632@ code 39
+stacked and running downwards.
+\end{verbatim}
+
+\subsection{I heard something about full ascii code 39}
+
+Well, umh, now that you ask\dots The truth is: You may perhaps be able to
+configure your reading device to accept full ascii code~39. Then you may
+code any 7~bit character you may think of. The bad news is that most of
+the symbols have to be coded by two
+characters -- and as code 39 has already low density, you should not
+expect to get much use of it. Perhaps you might want to try code 128
+instead---it features full 7-bit ascii without any compromise.
+
+Another anti-feature is that switching to reading full-ascii code~39
+may lead to some bad reads of `normal' code~39. In full ascii, the lower
+case letters, e.g., are made by prepending the uppercase letters with a
+plus sign, so {\tt+A} is read as {\tt a}. So, if you have got regular
+code~39 that contains such character sequences, and you have switched
+your reading device to full ascii, you may get bad results.
+
+But, now that you want it: With the barcode package there comes a font
+{\tt wlcf39.vpl}. You may install it like the other vpl files. It has got
+132 characters and has already taken all the coding for full ascii, so
+when you typ {\tt e,\$4+A}, it will silently be mapped to what you
+would have typed as {\tt+E/L/D/KA}, if you would use the plain code~39
+format\footnote{Please take note: 6 characters are blown up to 9,
+think again about using another code}. In my version of full ascii
+code~39, the start/stop sign is mapped to @@ (or \verb|\char128|). So
+you actually had to add @@ to the front and the end of the example
+string. If you can not exclude that the character sequence @@ appears
+within the text you want to code, you have to avoid ligature
+processing. You may do that like this:
+
+\begin{verbatim}
+\font\fullas=wlcf39 scaled 1728
+\def\alphanolig{\char64\kern0pt}
+\def\printacode#1{{\fullas@@{\catcode`\@=\active%
+ \let @=\alphanolig#1}@@}}
+\end{verbatim}
+
+You also have to escape or circumscribe special characters to make
+them really printable, of course, so that when you wanted a backspace,
+a tab, a space, a dollar sign, a percent sign, and a bell character to
+be coded, you would type something like
+
+\begin{verbatim}
+{\fullas @@\char8\char9\char32\$\%\char7}
+\end{verbatim}
+
+\section{Troubleshooting}
+
+\subsection{My barcodes can't be decoded}
+
+At the very, very first, check if you really have added start and stop
+codes. If you haven't, you're lost. Then check if you have enabled
+decoding of your special barcodes within your reading device. With
+modern scanners, you can disable almost any coding scheme.
+
+At first, try to make them larger. If that does't help, make them
+larger, again. If that will not help, obtain fonts in \TeX{} or
+Metafont format and make them brighter. Or, perhaps better, obtain a
+better printer.
+
+You also should check the contrast between bars and background,
+especially when using a dot matrix printer or coloured background
+or---still worse---red bars.
+
+\subsection{My decoder reads extra digits, sometimes}
+
+I guess you use {\sc itf} barcode with a number of digits that is
+sometimes even and sometimes odd. As {\sc itf} always codes two digits
+at once, you should take care just to code an even number of digits at
+any time. If an excess zero at the beginning of your number is not
+acceptable, you might try another kind of barcode instead of {\sc
+itf}.
+
+\subsection{Can't run pdf\TeX\ with barcode fonts}
+
+Get a later version of pdf\TeX, and you're done.
+
+\section{Missing items}
+
+\subsection{I am missing two-of-five}
+
+I got specs for two-of-five (three bars). If you want it, let me know;
+I might implement it. For other kinds of two-of-five, I haven't got
+complete specs.
+
+\subsection{I am missing plessey}
+
+I got the specs but I haven't yet got the time to implement them. With
+plessey, there also rise several questions due to the fact that
+plessey has never been officialy standardized. The only thing that is
+absolutely sure about plessey is how binary ones and zeros are
+encoded. There are codes that are more wide-spread. Several modern
+barcode readers can't cope with plessey code.
+
+\subsection{I am missing \dots{} some other barcode}
+
+I have checked out several two-dimensional barcodes. But for most of
+them, support by \TeX{} seems to be rather pointless. Perhaps Metafont
+could be called any time you have to code something to draw the
+symbols, but you might as well use a custom drawing program that comes
+from the barcode vendor. Also, most two-dimensional barcodes (and
+other barcodes not mentioned here) are proprietary. Last not least the
+reading devices I have access to can deal only with a finite range of
+barcodes.
+
+I am sorry, but I haven't got the specs for further barcodes
+not mentioned here. If you could be so kind as to send them to me, I
+might perhaps implement them.
+
+\section{Contributions}
+
+\subsection{EAN without preprocessing}
+
+The following code is due to Kalvis M. Jansons.
+
+It handles printing of {\sc ean} without having to run a
+preprocessor. Not only are the {\sc ean} bars drawn, also the checksum
+checksum is checked. It can be easily
+adapted to non-\LaTeX{} use by omitting anything before \verb|\font|
+
+\begin{verse}
+Kalvis M. Jansons
+
+eMail: \verb|<kalvis@math.ucl.ac.uk>|
+
+\end{verse}
+
+An easy way to use the barcode fonts in \LaTeX{}:
+
+\begin{verbatim}
+\documentclass[a4paper]{article}
+
+\pagestyle{empty}
+
+\setlength{\oddsidemargin}{0pt}
+\setlength{\textwidth}{\paperwidth}
+\addtolength{\textwidth}{-2in}
+\setlength{\marginparwidth}{0pt}
+
+\setlength{\textheight}{\paperheight}
+\addtolength{\textheight}{-2.5in}
+\setlength{\topmargin}{0pt}
+
+\font\eanfont=WLEAN scaled 2000
+\def\ean#1{\vbox{\vskip20pt\eanfont#1\vskip20pt}}
+\newcount\num
+\def\a#1{\num=#1 \advance\num by `A \char\num}
+\def\b#1{\num=#1 \advance\num by `a \char\num}
+\def\c#1{\num=#1 \advance\num by `K \char\num}
+\def\C#1#2#3#4#5#6{\c#1\c#2\c#3\c#4\c#5\c#6}
+
+\def\A#1#2#3#4#5#6#7{\ifcase #7
+{\a#1\a#2\a#3\a#4\a#5\a#6}%
+\or {\a#1\a#2\b#3\a#4\b#5\b#6}%
+\or {\a#1\a#2\b#3\b#4\a#5\b#6}%
+\or {\a#1\a#2\b#3\b#4\b#5\a#6}%
+\or {\a#1\b#2\a#3\a#4\b#5\b#6}%
+\or {\a#1\b#2\b#3\a#4\a#5\b#6}%
+\or {\a#1\b#2\b#3\b#4\a#5\a#6}%
+\or {\a#1\b#2\a#3\b#4\a#5\b#6}%
+\or {\a#1\b#2\a#3\b#4\b#5\a#6}%
+\or {\a#1\b#2\b#3\a#4\b#5\a#6}%
+\fi}
+
+\newcount\cha
+\newcount\chb
+\makeatletter
+\long\def\for{\@for}
+\makeatother
+\gdef\mysix#1#2#3#4#5#6{,#1#2,#3#4,#5#6}
+\gdef\mywork#1#2{\advance\cha by #1 \advance\chb by #2}
+\gdef\barch#1.#2.#3.{
+\xdef\mylist{0#1\mysix#2\mysix#3}
+\cha=0
+\chb=0
+\for \x:=\mylist\do{\expandafter\mywork\x}
+\multiply\cha by 3
+\advance\chb by \cha
+\cha=\chb
+\divide\cha by 10
+\multiply\cha by -10
+\advance\chb by \cha}
+\def\bar#1.#2.#3.{\barch#1.#2.#3.
+ \ifnum\chb>0 #1#2#3 has a bad check sum!\\[20pt]
+ \else \ean{#1 +\A#2#1-\C#3+}\fi}
+\begin{document}
+
+ Examples
+
+\bar3.034325.106199.
+
+\bar4.074400.410000.
+
+\bar5.449000.055521.
+
+\bar5.010027.522336.
+
+\bar8.410005.421052.
+
+\bar9.780192.828941.
+
+\end{document}
+\end{verbatim}
+
+\section{Installation}
+
+Installation is described within the README file, in short.
+Here I assume that you have a TDS compliant \TeX{} installation
+already running.
+
+Installation consists of several steps:
+
+\begin{enumerate}
+ \item unpack barcodes.dtx by running barcodes.ins through \TeX (I
+guess you have already done that, lest you would not be able to read
+this text), like {\tt tex barcodes.ins}
+\item run {\tt vptovf} on all the vpl files, e.g. type something like
+ {\tt vptovf wlitf.vpl wlitf.vf wlitf.tfm}
+\item if your \TeX\ system does not support automatic generation of
+{\tt tfm} files, run mf on all the .mf files.
+\item move all the files to appropriate locations
+\item install codean.pl for use with Perl
+\item run the documentation through \LaTeX{}
+\item clean up
+\end{enumerate}
+
+Items 1,2,4,6, and part of 7 can be automatically executed on ms-dos or
+ms windows systems by running {\tt install.bat}. If you do not supply
+any parameters, {\tt install} will install to {\tt C:\char92TeXMF}. If
+you do supply a parameter, it should be the path to your TEXMF tree
+(no trailing backslash, please).
+
+Here are the appropriate locations mentioned above -- all of them
+in the TEXMF tree:
+
+\begin{tabular}{ll}
+\em move & \em to\\
+\tt *.mf & \tt fonts/source/public/misc\\
+\tt *.tfm & \tt fonts/tfm/public/misc\\
+\tt *.vf & \tt fonts/vf/public\\
+\tt code39.tex &\tt tex/generic/misc\\
+\tt barcodes.sty &\tt tex/latex/misc\\
+\end{tabular}
+
+Of course other locations might also work, but to me it seems fine
+this way.
+
+Running plain \TeX{} on {\tt examples.tex} is the ultimate test: This
+will only work when all the installation is well done.
+
+The installation of Perl programs is beyond the scope of this
+documentation. If you do not need code 128, you can go without
+{\tt codean.pl}, especially if you use the macros described above.
+
+\bibliography{bcfaq}
+
+\end{document}
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % general documentation ends here %%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%</bcfaq>
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % bibliography for general documentation %%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%<*bcfaqbbl>
+\begin{thebibliography}{Sau92}
+
+\bibitem[Ol{\v{s}}94]{bc:ean}
+Peter Ol{\v{s}}ak.
+\newblock The ean barcodes by {\TeX}.
+\newblock {\em TUGboat}, 15(4):459--464, 1994.
+
+\bibitem[Sau92]{bc:sauter}
+John Sauter.
+\newblock Postnet codes using metafont.
+\newblock {\em TUGboat}, 13(4):472--476, 1992.
+
+\bibitem[Vul91]{bc:vulis}
+Dimitri Vulis.
+\newblock {\TeX} and envelopes.
+\newblock {\em TUGboat}, 12(2):279--284, 1991.
+
+\end{thebibliography}
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % end of bibliography for general documentation %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%</bcfaqbbl>
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % example sheet starts here %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%<*example>
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% This file documents look and use of
+%% the barcodes this package belongs to.
+%% It may be freely used without any
+%% further permission.
+%% You should have received this file as part of
+%% the barcode package.
+%%
+%% Author: Peter Willadt
+%% Date: 1997-11-29
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Note:
+%% 1. This file has already been run through codean.pl
+%%
+%% 2. You need to have the fonts installed, of course.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Fonts
+%%
+\font\xlix=wlc39 scaled 2000
+\font\itf=wlitf scaled 2000
+\font\cdb=wlcdb scaled 2000
+\font\eanfont=WLEAN scaled 1200
+\font\fntcxx=wlc128 scaled \magstep3
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Inputs
+%%
+\input code39.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Def's
+%%
+%% for EAN
+\def\ean#1{\message{Call codean.pl}}
+\def\eean#1{\message{Call codean.pl}}
+\def\isbn#1{\message{Call codean.pl}}
+\def\embed#1{}
+\def\EAN#1{\vbox{\hsize=0.4\hsize\vskip10pt\eanfont#1\vskip10pt}}
+%% for Code 128
+\def\CXXVIII{\bgroup\fntcxx\let\next\hexchar\next}
+\def\hexchar#1#2{\if#1@\global\let\next\egroup\else\char"#1#2\fi\next}
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Here we go
+\parindent0pt
+Hello, this is a test sheet of the barcode fonts.
+
+At first, we deal with code 39. Code 39 is represented in this package
+both in form of a native font (Metafont-source) and in form of
+\TeX{}-macros. code 39 features low-density alphanumeric encoding.
+
+Here you may see how HELLO looks like in code 39 (the start and stop
+sign is mapped to @, if you're curious, so in the source to this sheet
+I have written {\tt@HELLO@} after having selected the proper
+font). This first example uses the font.
+
+{\xlix@HELLO@}
+
+Another approach is to use \TeX{} macros to make up bars. Here is the
+same HELLO with macros: Please note that for the macro version, you
+have to use the underbar if you want to have a space coded.
+
+\begincodethirtynine{HELLO}\endcodethirtynine
+
+Interleaved two-of-five (ITF for short) features high-density
+numerical-only encoding. Your code has to have an even number of
+digits. The start sign is mapped to $+$, the end sign to $-$.
+So, to code 0123456789, you type {\tt+0123456789-}, and the result
+looks like this:
+
+{\itf+0123456789-}
+
+If you still have not got enough of barcoding, here is codabar. Here
+you got four sets of start/stop signs that get decoded together with
+the numbers. The start/stop sign pairs are a/t, b/n, c/*, and d/e. So
+{\tt a12345t} looks like this:\bigskip
+
+{\cdb a12345t}
+
+Now you should have a look at code 128. The bars itself look sometimes
+disrupted; this is due to the fact that the widest elements are four
+times as wide as the narrowest. Code 128 enables you to code any 7-bit
+ascii character. With digits only, it is as efficent as itf. The bad
+news is the preprocessing required, so you have to read the docs. The
+following bars mean {\tt Hallo123456}\bigskip
+
+\CXXVIII 6828414C4C4F630C2238506A@@ % Code128(Hallo123456)
+
+
+And, last and perhaps most important, the EAN font. Read {\tt
+eandoc.tex} to find out how these are coded, here is just the output
+of the example code mentioned there:
+\embed{2500000000000}
+
+\line{
+\EAN{4 +AcFHaa-KKLKNK+} % or, without checksum: %(4025700001030)
+\hfil
+\EAN{4 +AcFHaa-KKLKNK+} %(402570000103)
+}
+\line{
+\EAN{2 +FAaaAa-KKLMNT+} % embedded(123)
+\hfil
+\EAN{9 +HiaCaB-LNOOSN+} % ISBN(0201134489)
+}
+
+And that's all. Perhaps you may think that this is not a beautiful
+document---but barcodes aren't beautiful. As long as reading devices
+do not have \ae{}sthetic feelings, I don't regard this as a problem.
+\bye
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % example sheet ends here %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%</example>
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % style file starts here %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%<*bcsty>
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Options for using barcodes %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% documented in bcfaq.tex %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% itf stuff
+%% general
+\font\xlix=wlc39 scaled 2000
+\font\fntxciii=wlc93 scaled 2000
+\font\itf=wlitf scaled 2000
+\font\cdb=wlcdb scaled 2000
+\font\eanfont=wlean scaled 1200
+\font\fntcxx=wlc128 scaled \magstep3
+%% barcodes with depth
+\def\bcbox#1{\lower3pt\hbox{\itf +#1-}}
+%% barcodes made taller
+\newbox\bsavebox
+\newdimen\bcboxdepth
+\bcboxdepth=4pt
+\def\bdbox#1{\setbox\bsavebox\hbox{\itf +#1-}
+\vbox{\hsize=\wd\bsavebox\offinterlineskip%
+ \copy\bsavebox%
+ \vskip-\ht\bsavebox\vskip\bcboxdepth%
+ \box\bsavebox\vskip-\bcboxdepth}}
+\def\bebox#1{\setbox\bsavebox\hbox{\itf +#1-}
+\vbox{\hsize=\wd\bsavebox\offinterlineskip%
+ \copy\bsavebox%
+ \copy\bsavebox%
+ \vskip-\ht\bsavebox\vskip\bcboxdepth%
+ \box\bsavebox\vskip-\bcboxdepth}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Code 128 stuff
+\font\fntcxx=wlc128 scaled \magstep3
+\def\XCIII#1{\bgroup\fntxciii #1}
+\def\CXXVIII{\bgroup\fntcxx\let\next\hexchar\next}
+\def\cxxviii{\message{OOPS, use codean.pl}}
+\def\hexchar#1#2{\if#1@
+ \global\let\next\egroup
+ \else\char"#1#2\fi\next}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Code 11 stuff
+\font\codxifnt=wlc11 scaled\magstep2
+%% relies on counters \cha and \chb defined below
+\newif\ifcodexichecksumk
+\codexichecksumkfalse
+\makeatletter
+\def\check@xichar{%
+ \ifcodexichecksumk%
+ {\count0=\cha\count1=\count0\divide\count1by11%
+ \multiply\count1by11\advance\count0by-\count1%
+ \ifnum10=\count0-\else\relax\the\count0\fi%
+ \global\advance\chb by\count0\global\advance\cha by\chb%
+ }\fi
+ \chb=\cha\divide\chb by11%
+ \multiply\chb by11\advance\cha by-\chb%
+ \ifnum10=\cha-\else\the\cha\fi%
+}
+\def\csumxi#1{%
+ \if @#1%
+ \let\next\check@xichar%
+ \else \if-#1\advance\chb by10%
+ \else\advance\chb by#1%
+ \fi%
+ \advance\cha by\chb%
+ #1%
+ \fi%
+ \next%
+}
+\makeatother
+\def\codxi#1{{
+ \codxifnt
+ \cha=0\chb=0%
+ @\let\next\csumxi\expandafter\expandafter\expandafter\csumxi#1@@
+}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% misc things
+\font\codtnfnt=wlc39 scaled\magstep2
+\def\codxxxix#1{{\codtnfnt @#1@}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EAN stuff
+%% this code comes from Kalvis M. Jansons
+%% eMail: <kalvis@math.ucl.ac.uk>
+%%
+\font\eanfont=WLEAN scaled 2000
+\def\ean#1{\vbox{\vskip20pt\eanfont#1\vskip20pt}}
+\newcount\num
+\def\a#1{\num=#1 \advance\num by `A \char\num}
+\def\b#1{\num=#1 \advance\num by `a \char\num}
+\def\c#1{\num=#1 \advance\num by `K \char\num}
+\def\C#1#2#3#4#5#6{\c#1\c#2\c#3\c#4\c#5\c#6}
+\def\A#1#2#3#4#5#6#7{\ifcase #7
+{\a#1\a#2\a#3\a#4\a#5\a#6}%
+\or {\a#1\a#2\b#3\a#4\b#5\b#6}%
+\or {\a#1\a#2\b#3\b#4\a#5\b#6}%
+\or {\a#1\a#2\b#3\b#4\b#5\a#6}%
+\or {\a#1\b#2\a#3\a#4\b#5\b#6}%
+\or {\a#1\b#2\b#3\a#4\a#5\b#6}%
+\or {\a#1\b#2\b#3\b#4\a#5\a#6}%
+\or {\a#1\b#2\a#3\b#4\a#5\b#6}%
+\or {\a#1\b#2\a#3\b#4\b#5\a#6}%
+\or {\a#1\b#2\b#3\a#4\b#5\a#6}%
+\fi}
+\newcount\cha
+\newcount\chb
+\makeatletter
+\long\def\for{\@for}
+\makeatother
+\gdef\mysix#1#2#3#4#5#6{,#1#2,#3#4,#5#6}
+\gdef\mywork#1#2{\advance\cha by #1 \advance\chb by #2}
+\gdef\barch#1.#2.#3.{
+\xdef\mylist{0#1\mysix#2\mysix#3}
+\cha=0
+\chb=0
+\for \x:=\mylist\do{\expandafter\mywork\x}
+\multiply\cha by 3
+\advance\chb by \cha
+\cha=\chb
+\divide\cha by 10
+\multiply\cha by -10
+\advance\chb by \cha}
+\def\bar#1.#2.#3.{\barch#1.#2.#3.
+ \ifnum\chb>0 #1#2#3 has a bad check sum!\\[20pt]
+ \else \ean{#1 +\A#2#1-\C#3+}\fi}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % style file ends here %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%</bcsty>
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % code 39 macro file starts here %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%<*code39mac>
+%%% ====================================================================
+%%% @TeX-file{
+%%% author = "Peter Willadt",
+%%% version = "1",
+%%% date = "16 August 1997",
+%%% time = "10:00:00 GMT",
+%%% filename = "code39.tex",
+%%% address = "Peter Willadt
+%%% 75177 Pforzheim
+%%% Germany",
+%%% email = "Willadt@t-online.de",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "Barcode, Code39, TeX",
+%%% abstract = "This file contains macros to support the inclusion
+%%% of code 39 barcode in TeX documents.",
+%%% }
+%%% ====================================================================
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% This code supports barcodes in Code 39
+%% Usage:
+%% For alphanumerical barcodes:
+%% \begincodethirtynine followed by
+%% the stuff to code,
+%% ended with \endcodethirtynine
+%% For numerical only code:
+%% modify the code for pharamceuticals
+%% For german pharmaceutics:
+%% \pzncode1234562@ when 1234562 is the
+%% number to be coded as -1234562.
+%% this will also verify the checksum
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% This file may be freely used without any
+%% further permission.
+%% It comes with absolutely no warranty.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% this is the common stuff
+\newdimen\dick
+\newdimen\duenn
+\newdimen\duennbar
+\newdimen\dickbar
+\newdimen\antibleed
+\dick=1mm
+\duenn=0.5mm
+\antibleed=0mm
+\dickbar=\dick
+\advance\dickbar by -\antibleed
+\duennbar=\duenn
+\advance\duennbar by -\antibleed
+% b means bar
+\def\b{\vrule width\duennbar}
+\def\B{\vrule width\dickbar}
+% s means space
+\def\s{\hskip\duenn\hskip\antibleed}
+\def\S{\hskip\dick\hskip\antibleed}
+%%
+ \def\tnzero{\b\s\b\S\B\s\B\s\b\s}
+ \def\tnone{\B\s\b\S\b\s\b\s\B\s}
+ \def\tntwo{\b\s\B\S\b\s\b\s\B\s}
+\def\tnthree{\B\s\B\S\b\s\b\s\b\s}
+ \def\tnfour{\b\s\b\S\B\s\b\s\B\s}
+ \def\tnfive{\B\s\b\S\B\s\b\s\b\s}
+ \def\tnsix{\b\s\B\S\B\s\b\s\b\s}
+\def\tnseven{\b\s\b\S\b\s\B\s\B\s}
+\def\tneight{\B\s\b\S\b\s\B\s\b\s}
+ \def\tnnine{\b\s\B\S\b\s\B\s\b\s}
+ \def\tninestart{\b\S\b\s\B\s\B\s\b\s}
+ \def\tnineminus{\b\S\b\s\b\s\B\s\B\s}
+ \def\tnineplus{\b\S\b\s\b\S\b\S\b\s}
+\def\tninedollar{\b\S\b\S\b\S\b\s\b\s}
+ \def\tnineslash{\b\S\b\S\b\s\b\S\b\s}
+ \def\tninedot{\B\S\b\s\b\s\B\s\b\s}
+\def\tninepercnt{\b\s\b\S\b\S\b\S\b\s}
+ \def\tninespace{\b\S\B\s\b\s\B\s\b\s}
+\def\tninelettera{\B\s\b\s\b\S\b\s\B\s}
+\def\tnineletterb{\b\s\B\s\b\S\b\s\B\s}
+\def\tnineletterc{\B\s\B\s\b\S\b\s\b\s}
+\def\tnineletterd{\b\s\b\s\B\S\b\s\B\s}
+\def\tninelettere{\B\s\b\s\B\S\b\s\b\s}
+\def\tnineletterf{\b\s\B\s\B\S\b\s\b\s}
+\def\tnineletterg{\b\s\b\s\b\S\B\s\B\s}
+\def\tnineletterh{\B\s\b\s\b\S\B\s\b\s}
+\def\tnineletteri{\b\s\B\s\b\S\B\s\b\s}
+\def\tnineletterj{\b\s\b\s\B\S\B\s\b\s}
+\def\tnineletterk{\B\s\b\s\b\s\b\S\B\s}
+\def\tnineletterl{\b\s\B\s\b\s\b\S\B\s}
+\def\tnineletterm{\B\s\B\s\b\s\b\S\b\s}
+\def\tninelettern{\b\s\b\s\B\s\b\S\B\s}
+\def\tninelettero{\B\s\b\s\B\s\b\S\b\s}
+\def\tnineletterp{\b\s\B\s\B\s\b\S\b\s}
+\def\tnineletterq{\b\s\b\s\b\s\B\S\B\s}
+\def\tnineletterr{\B\s\b\s\b\s\B\S\b\s}
+\def\tnineletters{\b\s\B\s\b\s\B\S\b\s}
+\def\tninelettert{\b\s\b\s\B\s\B\S\b\s}
+\def\tnineletteru{\B\S\b\s\b\s\b\s\B\s}
+\def\tnineletterv{\b\S\B\s\b\s\b\s\B\s}
+\def\tnineletterw{\B\S\B\s\b\s\b\s\b\s}
+\def\tnineletterx{\b\S\b\s\B\s\b\s\B\s}
+\def\tninelettery{\B\S\b\s\B\s\b\s\b\s}
+\def\tnineletterz{\b\S\B\s\B\s\b\s\b\s}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% this is the code for 39 mode
+\def\activatethemall{
+ \catcode`\A=\active \catcode`\B=\active
+ \catcode`\C=\active \catcode`\D=\active
+ \catcode`\E=\active \catcode`\F=\active
+ \catcode`\G=\active \catcode`\H=\active
+ \catcode`\I=\active \catcode`\J=\active
+ \catcode`\K=\active \catcode`\L=\active
+ \catcode`\M=\active \catcode`\N=\active
+ \catcode`\O=\active \catcode`\P=\active
+ \catcode`\Q=\active \catcode`\R=\active
+ \catcode`\S=\active \catcode`\T=\active
+ \catcode`\U=\active \catcode`\V=\active
+ \catcode`\W=\active \catcode`\X=\active
+ \catcode`\Y=\active \catcode`\Z=\active
+ \catcode`+=\active \catcode`-=\active
+ \catcode`\_=\active \catcode`.=\active
+ \catcode`\$=\active \catcode`\%=\active
+ \catcode`\/=\active
+ \catcode`\0=\active \catcode`\1=\active
+ \catcode`\2=\active \catcode`\3=\active
+ \catcode`\4=\active \catcode`\5=\active
+ \catcode`\6=\active \catcode`\7=\active
+ \catcode`\8=\active \catcode`\9=\active
+}
+{\activatethemall
+\gdef\begincodethirtynine{
+ \bgroup\activatethemall\strut\tninestart
+ \letA=\tninelettera \letB=\tnineletterb
+ \letC=\tnineletterc \letD=\tnineletterd
+ \letE=\tninelettere \letF=\tnineletterf
+ \letG=\tnineletterg \letH=\tnineletterh
+ \letI=\tnineletteri \letJ=\tnineletterj
+ \letK=\tnineletterk \letL=\tnineletterl
+ \letM=\tnineletterm \letN=\tninelettern
+ \letO=\tninelettero \letP=\tnineletterp
+ \letQ=\tnineletterq \letR=\tnineletterr
+ \letS=\tnineletters \letT=\tninelettert
+ \letU=\tnineletteru \letV=\tnineletterv
+ \letW=\tnineletterw \letX=\tnineletterx
+ \letY=\tninelettery \letZ=\tnineletterz
+ \let+=\tnineplus \let-=\tnineminus
+ \let_=\tninespace \let.=\tninedot
+ \let$=\tninedollar \let%=\tninepercnt
+ \let/=\tnineslash
+ \let0=\tnzero \let1=\tnone
+ \let2=\tntwo \let3=\tnthree
+ \let4=\tnfour \let5=\tnfive
+ \let6=\tnsix \let7=\tnseven
+ \let8=\tneight \let9=\tnnine
+}
+}
+\def\endcodethirtynine{
+ \tninestart\egroup
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% this code is used for german pharmaceutics
+\newcount\ziffern
+\newcount\checksum
+\newcount\multreg
+\def\tndigit#1{%
+ \ifcase#1\tnzero\or\tnone%
+ \or\tntwo\or\tnthree%
+ \or\tnfour\or\tnfive%
+ \or\tnsix\or\tnseven%
+ \or\tneight\or\tnnine%
+ \fi}
+\def\endtncode{%
+ \tninestart%
+ \ifnum\ziffern=9
+ \else\message{wrong digit count}
+ \fi%
+ \ifnum\checksum=0
+ \else\message{wrong checksum}
+ \fi%
+ \egroup}
+\def\nexttn#1{%
+ \advance\ziffern by1
+ \if@#1\let\next\endtncode
+ \else
+ \tndigit#1%
+% begin checksum stuff
+ \ifnum\ziffern=8
+ \multreg=\checksum
+ \divide\multreg by 11
+ \multiply\multreg by 11
+ \advance\checksum by-\multreg
+ \multreg=#1
+ \advance\checksum by-\multreg
+ \ifnum\checksum=10
+ \checksum=0
+ \fi
+ \else
+ \multreg=#1
+ \multiply\multreg by\ziffern
+ \advance\checksum by\multreg
+ \fi%
+ \fi%
+% end checksum stuff
+ \next}
+\def\pzncode{
+ \bgroup
+ \let\next\nexttn
+ \ziffern=1\checksum=0\multreg=0
+ \strut
+ \tninestart\tnineminus%
+ \next%
+}
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % code 39 macro file ends here %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%</code39mac>
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % MetaFont Code for Code 11 starts here %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%<*code11mf>
+%% Code 11 in Metafont format
+%% Peter Willadt 1998-04-10
+%% For copyright and the like see the documentation
+%% to the barcode package, from which this file is part of.
+%% If you received only this file,
+%% then maybe someone fooled you.
+%%
+%% Code 11 requires one or two check digits.
+%% These check digtis are calculated using a weighted mod 11-checksum.
+%% You have to see the docs.
+%% Start and stop chars are mapped to @,
+%% codeable are 0--9 and the minus sign.
+
+mode_setup;
+
+bheight#:=5mm#;
+
+% high res: .264 mm#
+% med res: .33 mm#
+bwidth# :=.33 mm#;
+
+designsize :=bheight#;
+font_slant :=0;
+font_normal_space :=8*bwidth#;
+font_extra_space :=0;
+font_normal_stretch:=0;
+font_normal_shrink :=0;
+font_quad :=15*bwidth#;
+
+define_pixels(bheight, bwidth);
+
+def CODExichar(expr charnum, spex) =
+ numeric mywid, asval, i;
+ mywid=6;
+ for i= 0 upto 4:
+ asval:=ASCII(substring(i,i+1) of spex);
+ asval:=asval-ASCII("0");
+ mywid:=mywid+asval;
+ endfor;
+ beginchar(charnum, mywid*bwidth#,bheight#,0);
+ y1=y2=0;
+ y3=y4=bheight;
+ numeric myright,myleft,barweight,spcweight;
+ myright:=0;myleft:=0;barweight:=0;spcweight:=0;
+ for i=0 upto 4:
+ asval:=ASCII(substring(i,i+1) of spex);
+ asval:=asval-ASCII("0");
+ myright:=myright+(asval+1)*bwidth;
+ if not odd (i):
+ % actual drawing
+ x1:=myleft-blacker;
+ x4:=x1;
+ x2:=myright+blacker;
+ x3:=x2;
+ fill (z1)--(z2)--(z3)--(z4)--cycle;
+ fi
+ myleft:=myright;
+ endfor;
+ endchar;
+enddef;
+
+CODExichar("-","00100");
+CODExichar("0","00001");
+CODExichar("1","10001");
+CODExichar("2","01001");
+CODExichar("3","11000");
+CODExichar("4","00101");
+CODExichar("5","10100");
+CODExichar("6","01100");
+CODExichar("7","00011");
+CODExichar("8","10010");
+CODExichar("9","10000");
+CODExichar("@","00110");
+
+end;% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % MetaFont Code for Code 11 ends here %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%</code11mf>
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % MetaFont Code for Code 39 starts here %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%<*code39mf>
+%% Code 39, in Metafont mode
+%% Willadt 1997-08-17
+mode_setup;
+
+bheight#:=5mm#;
+
+%% high res .2 mm,
+%% med res .3 mm,
+%% lo res .4 mm.
+
+bwidth# :=.3mm#;
+
+designsize :=bheight#;
+font_slant :=0;
+font_normal_space :=13*bwidth#;
+font_extra_space :=0;
+font_normal_stretch:=0;
+font_normal_shrink :=0;
+font_quad :=13*bwidth#;
+
+define_pixels(bheight, bwidth);
+
+def thirtyninechar(expr charnum, spex) =
+ beginchar(charnum, 13*bwidth#,bheight#,0);
+ numeric myright,myleft;
+ numeric asval, i;
+ myright:=0;myleft:=0;
+ y1=y2=0;y3=y4=bheight;
+ for i=0 upto 11:
+ asval:=ASCII(substring(i,i+1) of spex);
+ exitif asval=-1;
+ asval:=asval-ASCII("0");
+ myright:=myright+asval*bwidth;
+ if not odd (i):
+ % actual drawing
+ x1:=myleft-blacker;
+ x4:=x1;
+ x2:=myright+blacker;
+ x3:=x2;
+ fill (z1)--(z2)--(z3)--(z4)--cycle;
+ fi
+ myleft:=myright;
+ endfor;
+ endchar;
+enddef;
+
+\thirtyninechar("0")("1112212111");
+\thirtyninechar("1")("2112111121");
+\thirtyninechar("2")("1122111121");
+\thirtyninechar("3")("2122111111");
+\thirtyninechar("4")("1112211121");
+\thirtyninechar("5")("2112211111");
+\thirtyninechar("6")("1122211111");
+\thirtyninechar("7")("1112112121");
+\thirtyninechar("8")("2112112111");
+\thirtyninechar("9")("1122112111");
+\thirtyninechar( 64)("1211212111"); % start = @
+\thirtyninechar("-")("1211112121");
+\thirtyninechar("+")("1211121211");
+\thirtyninechar("$")("1212121111");
+\thirtyninechar("/")("1212111211");
+\thirtyninechar(".")("2211112111");
+\thirtyninechar( 37)("1112121211"); % percent
+\thirtyninechar( 32)("1221112111"); % space
+\thirtyninechar("A")("2111121121");
+\thirtyninechar("B")("1121121121");
+\thirtyninechar("C")("2121121111");
+\thirtyninechar("D")("1111221121");
+\thirtyninechar("E")("2111221111");
+\thirtyninechar("F")("1121221111");
+\thirtyninechar("G")("1111122121");
+\thirtyninechar("H")("2111122111");
+\thirtyninechar("I")("1121122111");
+\thirtyninechar("J")("1111222111");
+\thirtyninechar("K")("2111111221");
+\thirtyninechar("L")("1121111221");
+\thirtyninechar("M")("2121111211");
+\thirtyninechar("N")("1111211221");
+\thirtyninechar("O")("2111211211");
+\thirtyninechar("P")("1121211211");
+\thirtyninechar("Q")("1111112221");
+\thirtyninechar("R")("2111112211");
+\thirtyninechar("S")("1121112211");
+\thirtyninechar("T")("1111212211");
+\thirtyninechar("U")("2211111121");
+\thirtyninechar("V")("1221111121");
+\thirtyninechar("W")("2221111111");
+\thirtyninechar("X")("1211211121");
+\thirtyninechar("Y")("2211211111");
+\thirtyninechar("Z")("1221211111");
+
+\end;
+
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % MetaFont Code for Code 39 ends here %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%</code39mf>
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % MetaFont Code for Code 128 starts here %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%<*code128mf>
+%% Code 128, in Metafont mode
+%% This gives a raw font, that should be mapped properly
+%% so read the docs!
+%% Willadt 1997-08-17
+
+mode_setup;
+
+bheight#:=5mm#;
+
+%% high res: .264 mm#
+%% med res: .33 mm#
+bwidth# :=.33 mm#;
+
+designsize :=bheight#;
+font_slant :=0;
+font_normal_space :=11*bwidth#;
+font_extra_space :=0;
+font_normal_stretch:=0;
+font_normal_shrink :=0;
+font_quad :=11*bwidth#;
+
+define_pixels(bheight, bwidth);
+
+def CXXVIIIchar(expr charnum, spex) =
+ numeric mywid, asval, i;
+ mywid=0;
+% for i = 0 upto 8:
+% asval:=ASCII(substring(i,i+1) of spex);
+% exitif asval=-1;
+% asval:=asval-ASCII("0");
+% mywid:=mywid+asval;
+% endfor
+% beginchar(charnum, mywid*bwidth#,bheight#,0);
+ beginchar(charnum, 11*bwidth#,bheight#,0);
+ y1=y2=0;
+ y3=y4=bheight;
+ numeric myright,myleft,barweight,spcweight;
+ myright:=0;myleft:=0;barweight:=0;spcweight:=0;
+ for i=0 upto 8:
+ asval:=ASCII(substring(i,i+1) of spex);
+ exitif asval=-1;
+ asval:=asval-ASCII("0");
+ myright:=myright+asval*bwidth;
+ if not odd (i):
+% check for typos
+% barweight:=barweight+asval;
+ % actual drawing
+ x1:=myleft-blacker;
+ x4:=x1;
+ x2:=myright+blacker;
+ x3:=x2;
+ fill (z1)--(z2)--(z3)--(z4)--cycle;
+% check for typos
+% else:
+% spcweight:=spcweight+asval;
+ fi
+ myleft:=myright;
+ endfor;
+% check for typos
+% if not odd(spcweight): message "error in spc cnt";
+% fi
+% if odd(barweight): message "error in bar cnt";
+% fi
+ endchar;
+enddef;
+
+CXXVIIIchar(107,"212222"); % Ersatz fuer Null
+CXXVIIIchar( 0,"212222");
+CXXVIIIchar( 1,"222122");
+CXXVIIIchar( 2,"222221");
+CXXVIIIchar( 3,"121223");
+CXXVIIIchar( 4,"121322");
+CXXVIIIchar( 5,"131222");
+CXXVIIIchar( 6,"122213");
+CXXVIIIchar( 7,"122312");
+CXXVIIIchar( 8,"132212");
+CXXVIIIchar( 9,"221213");
+CXXVIIIchar( 10,"221312");
+CXXVIIIchar( 11,"231212");
+CXXVIIIchar( 12,"112232");
+CXXVIIIchar( 13,"122132");
+CXXVIIIchar( 14,"122231");
+CXXVIIIchar( 15,"113222");
+CXXVIIIchar( 16,"123122");
+CXXVIIIchar( 17,"123221");
+CXXVIIIchar( 18,"223211");
+CXXVIIIchar( 19,"221132");
+CXXVIIIchar( 20,"221231");
+CXXVIIIchar( 21,"213212");
+CXXVIIIchar( 22,"223112");
+CXXVIIIchar( 23,"312131");
+CXXVIIIchar( 24,"311222");
+CXXVIIIchar( 25,"321122");
+CXXVIIIchar( 26,"321221");
+CXXVIIIchar( 27,"312212");
+CXXVIIIchar( 28,"322112");
+CXXVIIIchar( 29,"322211");
+CXXVIIIchar( 30,"212123");
+CXXVIIIchar( 31,"212321");
+CXXVIIIchar( 32,"232121");
+CXXVIIIchar( 33,"111323");
+CXXVIIIchar( 34,"131123");
+CXXVIIIchar( 35,"131321");
+CXXVIIIchar( 36,"112313");
+CXXVIIIchar( 37,"132113");
+CXXVIIIchar( 38,"132311");
+CXXVIIIchar( 39,"211313");
+CXXVIIIchar( 40,"231113");
+CXXVIIIchar( 41,"231311");
+CXXVIIIchar( 42,"112133");
+CXXVIIIchar( 43,"112331");
+CXXVIIIchar( 44,"132131");
+CXXVIIIchar( 45,"113123");
+CXXVIIIchar( 46,"113321");
+CXXVIIIchar( 47,"133121");
+CXXVIIIchar( 48,"313121");
+CXXVIIIchar( 49,"211331");
+CXXVIIIchar( 50,"231131");
+CXXVIIIchar( 51,"213113");
+CXXVIIIchar( 52,"213311");
+CXXVIIIchar( 53,"213131");
+CXXVIIIchar( 54,"311123");
+CXXVIIIchar( 55,"311321");
+CXXVIIIchar( 56,"331121");
+CXXVIIIchar( 57,"312113");
+CXXVIIIchar( 58,"312311");
+CXXVIIIchar( 59,"332111");
+CXXVIIIchar( 60,"314111");
+CXXVIIIchar( 61,"221411");
+CXXVIIIchar( 62,"431111");
+CXXVIIIchar( 63,"111224");
+CXXVIIIchar( 64,"111422");
+CXXVIIIchar( 65,"121124");
+CXXVIIIchar( 66,"121421");
+CXXVIIIchar( 67,"141122");
+CXXVIIIchar( 68,"141221");
+CXXVIIIchar( 69,"112214");
+CXXVIIIchar( 70,"112412");
+CXXVIIIchar( 71,"122114");
+CXXVIIIchar( 72,"122411");
+CXXVIIIchar( 73,"142112");
+CXXVIIIchar( 74,"142211");
+CXXVIIIchar( 75,"241211");
+CXXVIIIchar( 76,"221114");
+CXXVIIIchar( 77,"413111");
+CXXVIIIchar( 78,"241112");
+CXXVIIIchar( 79,"134111");
+CXXVIIIchar( 80,"111242");
+CXXVIIIchar( 81,"121142");
+CXXVIIIchar( 82,"121241");
+CXXVIIIchar( 83,"114212");
+CXXVIIIchar( 84,"124112");
+CXXVIIIchar( 85,"124211");
+CXXVIIIchar( 86,"411212");
+CXXVIIIchar( 87,"421112");
+CXXVIIIchar( 88,"421211");
+CXXVIIIchar( 89,"212141");
+CXXVIIIchar( 90,"214121");
+CXXVIIIchar( 91,"412121");
+CXXVIIIchar( 92,"111143");
+CXXVIIIchar( 93,"111341");
+CXXVIIIchar( 94,"131141");
+CXXVIIIchar( 95,"114113");
+CXXVIIIchar( 96,"114311");
+CXXVIIIchar( 97,"411113");
+CXXVIIIchar( 98,"411311");
+CXXVIIIchar( 99,"113141");
+CXXVIIIchar(100,"114131");
+CXXVIIIchar(101,"311141");
+CXXVIIIchar(102,"411131");
+CXXVIIIchar(103,"211412");
+CXXVIIIchar(104,"211214");
+CXXVIIIchar(105,"211232");
+CXXVIIIchar(106,"2331112");
+
+end;
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % MetaFont Code for Code 128 ends here %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%</code128mf>
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % MetaFont Code for EAN starts here %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%<*codeeanmf>
+%% Font for printing EAN Code
+%% For small sizes (on the Deskjet, < 1,0) you have to be
+%% very careful and test if the font is still machine readable.
+%% On write-black-printers, it may be necessary to reduce
+%% the width of black bars by fiddling with
+%% the definition of fb().
+%% For producing EAN Add-ons or codes with variable height,
+%% it would be a good idea to shorten the height of the bars and
+%% to leave the numbers out of the bars-definition, so that you
+%% could stack several bars above each other.
+%% Flexibility would increase, but---on the other hand---
+%% TeX macros for setting EAN code would become even more complicated.
+%
+%% Peter Willadt 1997, September, 21
+%
+% For more information about EAN-Codes, you may consult the Centrale
+% f\"ur Coorganisation in K\"oln, Germany, or one of the associated
+% organisations in your country. The complete EAN-Handbook costs
+% about a hundred german marks.
+%
+% Just some information:
+% EAN-Digits consist of seven elements that are either black or white.
+% Each element has the same width.
+% Fonts A, B, and C are differently coded.
+% The first half of the EAN-number is coded in fonts A and B, the second
+% half is coded in font C. The first digit of the EAN-number is not
+% directly coded but will be taken from the alternate uses of characters
+% from font A and font B for the first half.
+% This strange coding is a direct consequence of
+% the ancestry of the EAN-code---it is derived from the american UPC-code
+% (12 digits)---and there had to be a way of compatibly expanding the UPC.
+%
+% The first two digits of the EAN-number code the country of origin of
+% the product, the next five digits (mostly) code the manufacturer, the
+% remaining digits (with the exception of the last) code the product.
+% The last digit of the EAN-number is a checksum.
+% For In-House-Use, you may use EAN starting with 20 to 29.
+%
+% EAN numbers do not contain any qualifiers. From a number, you cannot say
+% which kind of product is coded, unless you contact the manufacturer.
+%
+% Eight digit EAN numbers consist of four digits from font A and four digits
+% from font C.
+%
+% UPC is EAN with the first digit equal to zero.
+%
+% Here is a table that shows which code to use for the digits 2 to 7
+% depending on the first digit.
+% The number on the right shows the first digit.
+% A zero in the array means to choose font A, a one means to choose font B.
+%
+% static UBYTE abtab[10][6]={
+% {0,0,0,0,0,0}, /* 0 */
+% {0,0,1,0,1,1}, /* 1 */
+% {0,0,1,1,0,1}, /* 2 */
+% {0,0,1,1,1,0}, /* 3 */
+% {0,1,0,0,1,1}, /* 4 */
+% {0,1,1,0,0,1}, /* 5 */
+% {0,1,1,1,0,0}, /* 6 */
+% {0,1,0,1,0,1}, /* 7 */
+% {0,1,0,1,1,0}, /* 8 */
+% {0,1,1,0,1,0} /* 9 */
+% };
+% This font is coded in a way that requires extensive preprocessing.
+% 0 to 9 yield the digits from 0 to 9
+% A to J yield the codes from charset A
+% a to j yield the codes from charset B
+% K to T yield the codes from charset C
+% + makes the start and stop sign and - the middle sign
+% So, to code the number 2099993098253, you have to write
+% {\eanfont2 +AJjjJd-KTSMPN+}. Please note that the last
+% digit is a checksum.
+% This font is free to be used without any further permission;
+% it comes with no warranty. I strongly recommend to test
+% the readability of barcodes before going into mass production.
+%
+% There should be a Perl routine delivered together with this font
+% that takes a TeX file and replaces EAN numbers by their encoded
+% equivalent. There also should be a file called EANDOC.TEX
+% that tells you more about that.
+%
+%% Author
+%% Peter Willadt
+%% 75177 Pforzheim
+%% Germany
+%% email: Willadt@t-online.de
+%
+
+mode_setup;
+
+%% EAN size 1 (100%)
+%
+bheight#:=22.85mm#;
+bdepth#:=1.65mm#;
+bwidth#:=0.33mm#;
+digheight#:=2.75mm#;
+numgap#=1mm#;
+digdiam#=0.9pt#;
+lgap#:= bwidth#+0.5 digdiam#;
+totheight#=bheight#+digheight#+numgap#;
+ndheight#:=totheight#-bheight#-bdepth#;
+define_pixels(ndheight,digheight,numgap,lgap,bwidth);
+define_blacker_pixels(bheight,totheight,digdiam);
+
+font_normal_space=7*bwidth#;
+font_size 10pt#;
+
+def fb(expr posn) =
+ x20:=(posn-1)*bwidth;
+ x21:=x20;
+ x22:=posn*bwidth;
+ x23:=x22;
+ y20:=y22:=digheight+numgap;
+ y21:=y23:=h;
+ fill z20--z21--z23--z22--cycle;
+enddef;
+
+def klotz(expr posn) =
+ x1:=(posn-1)*bwidth;x2:=posn*bwidth;
+ x3:=x2;x4:=x1;
+ y1:=y2:=ndheight;
+ y3:=y4:=digheight+numgap;
+ fill z1--z2--z3--z4--cycle;
+enddef;
+
+def nuller =
+ x1=0.5w;
+ y1=digheight;
+ x2=lgap;
+ y2=0.8y1;
+ x3=x2;
+ y3-y4=y1-y2;
+ y4=0;
+ x4=x1;
+ x5=w-x3;
+ y5=y3;
+ x6=x5;
+ y6=y2;
+ pickup pencircle scaled digdiam;
+ draw z1..{down}z2--z3{down}..z4..{up}z5--z6{up}..cycle;
+enddef;
+
+def einser =
+ x1=x2=0.5w+lgap;
+ x3=2*lgap;
+ y1=0;
+ y2=digheight;
+ y3=0.8digheight;
+ pickup pencircle scaled digdiam;
+ draw z1--z2--z3;
+enddef;
+
+def zweier =
+ x1=w-lgap;
+ x2=lgap;
+ y1=y2=0;
+ x3=x2;
+ y3=0.15 digheight;
+ x4=w-lgap;
+ y4=0.6 digheight;
+ x5=x4;
+ y5=0.9 digheight;
+ x6=0.5w;
+ y6=digheight;
+ x7=x2;
+ y7=y5;
+ pickup pencircle scaled digdiam;
+ draw z1--z2{up}..z3..z4..z5..z6..z7;
+enddef;
+
+def dreier =
+ x1=lgap;
+ w-x2=x1;
+ y1=y2=digheight;
+ x3=0.5w;
+ y3=0.6digheight;
+ y4=0.5y3;
+ x4=x2;
+% y5=0.5digdiam;
+ y5=0;
+ x5=0.5w;
+ x6=x1;
+ y6=0.2 digheight;
+ pickup pencircle scaled digdiam;
+ draw z1--z2--z3{right}..z4..z5..z6;
+enddef;
+
+def vierer =
+ x1=0.6w;y1=digheight;
+ x2=lgap;
+ y2=0.3digheight;
+ y3=y2;
+ w-x3=x2;
+% w-x4=x4-x1;
+ x4=0.5[x1,x3];
+ x5=x4;
+ y4=0.5digheight;
+ y5=0;
+ pickup pencircle scaled digdiam;
+ draw z1--z2--z3;
+ draw z4--z5;
+enddef;
+
+def fuenfer =
+ x2=lgap;
+ x2=w-x1;
+ y1=y2=digheight;
+ x3=x2;
+ y3=0.7digheight;
+ x4=x1;
+ y3-y4=y4;
+ x5=x2;
+ y5=0;
+ pickup pencircle scaled digdiam;
+ draw z1--z2--z3{right}..z4..{left}z5;
+enddef;
+
+def sechser =
+ x1=0.6w;
+ y1=digheight;
+ x2=lgap;
+ x4=w-x2;
+% y2=y4=0.3digheight;
+ y2=y4=0.5y5;
+ x3=x5=0.5w;
+ y3=0;
+% y5=0.6 digheight;
+ y5=x4-x2;
+ pickup pencircle scaled digdiam;
+ draw z2..z3..z4..z5..cycle;
+ draw z1..{down}z2;
+enddef;
+def siebener =
+ x1=lgap;
+ x2=w-x1;
+ y1=y2=digheight;
+ x3=x4=0.5w;
+ y3=0.3digheight;
+ y4=0;
+ pickup pencircle scaled digdiam;
+ draw z1--z2;
+ draw z2..z3...z4;
+enddef;
+def achter =
+ x1=x3=x5=0.5w;
+ y1=digheight;
+ y3=0.6digheight;
+ y5=0;
+ x2=w-x7;
+ x4=w-x6;
+ y2=y7=0.5[y1,y3];
+ y4=y6=0.5[y3,y5];
+ x2=1.5lgap;
+ x4=w-lgap;
+ pickup pencircle scaled digdiam;
+ draw z1..z2..z3..z7..cycle;
+ draw z3..z4..z5..z6..cycle;
+enddef;
+def neuner =
+ x1=0.4w;
+ y1=0;
+ x2=w-lgap;
+ x4=w-x2;
+% y2=y4=0.7digheight;
+ y2=y4=0.5[y5,y3];
+ x3=x5=0.5w;
+ y3=digheight;
+ y5=0.4 digheight;
+ pickup pencircle scaled digdiam;
+ draw z1..{up}z2;
+ draw z2..z3..z4..z5..cycle;
+enddef;
+beginchar("+",3*bwidth#,totheight#,0); "Das Randzeichen";
+ fb(1); fb(3);
+ klotz(1);
+ klotz(3);
+endchar;
+beginchar("-",5*bwidth#,totheight#,0); "Das Mittenzeichen";
+ fb(2); fb(4);
+ klotz(2);
+ klotz(4);
+endchar;
+
+beginchar("0",7*bwidth#,digheight#,0);
+ nuller;
+endchar;
+
+beginchar("1",7*bwidth#,digheight#,0);
+ einser;
+endchar;
+
+beginchar("2",7*bwidth#,digheight#,0);
+ zweier;
+endchar;
+
+beginchar("3",7*bwidth#,digheight#,0);
+ dreier;
+endchar;
+
+beginchar("4",7*bwidth#,digheight#,0);
+ vierer;
+endchar;
+
+beginchar("5",7*bwidth#,digheight#,0);
+ fuenfer;
+endchar;
+
+beginchar("6",7*bwidth#,digheight#,0);
+ sechser;
+endchar;
+
+beginchar("7",7*bwidth#,digheight#,0);
+ siebener;
+endchar;
+
+beginchar("8",7*bwidth#,digheight#,0);
+ achter;
+endchar;
+
+beginchar("9",7*bwidth#,digheight#,0);
+ neuner;
+endchar;
+
+% Zeichensatz A
+
+beginchar("A",7*bwidth#,totheight#,0); "Die Null (A)";
+ fb(4);fb(5);fb(7);
+ nuller;
+endchar;
+
+beginchar("B",7*bwidth#,totheight#,0); "Die Eins (A)";
+ fb(3);fb(4);fb(7);
+ einser;
+endchar;
+
+beginchar("C",7*bwidth#,totheight#,0); "Die Zwei (A)";
+ fb(3);fb(6);fb(7);
+ zweier;
+endchar;
+beginchar("D",7*bwidth#,totheight#,0); "Die Drei (A)";
+ fb(2);fb(3);fb(4);fb(5);fb(7);
+ dreier;
+endchar;
+beginchar("E",7*bwidth#,totheight#,0); "Die Vier (A)";
+ fb(2);fb(6);fb(7);
+ vierer;
+endchar;
+beginchar("F",7*bwidth#,totheight#,0); "Die Fuenf (A)";
+ fb(2);fb(3);fb(7);
+ fuenfer;
+endchar;
+beginchar("G",7*bwidth#,totheight#,0); "Die Sechs (A)";
+ fb(2);fb(4);fb(5);fb(6);fb(7);
+ sechser;
+endchar;
+beginchar("H",7*bwidth#,totheight#,0); "Die Sieben (A)";
+ fb(2);fb(3);fb(4);fb(6);fb(7);
+ siebener;
+endchar;
+
+beginchar("I",7*bwidth#,totheight#,0); "Die Acht (A)";
+ fb(2);fb(3);fb(5);fb(6);fb(7);
+ achter;
+endchar;
+
+beginchar("J",7*bwidth#,totheight#,0); "Die Neun (A)";
+ fb(4);fb(6);fb(7);
+ neuner;
+endchar;
+
+% Zeichensatz B
+
+beginchar("a",7*bwidth#,totheight#,0); "Die Null (B)";
+ fb(2);fb(5);fb(6);fb(7);
+ nuller;
+endchar;
+
+beginchar("b",7*bwidth#,totheight#,0); "Die Eins (B)";
+ fb(2);fb(3);fb(6);fb(7);
+ einser;
+endchar;
+
+beginchar("c",7*bwidth#,totheight#,0); "Die Zwei (B)";
+ fb(3);fb(4);fb(6);fb(7);
+ zweier;
+endchar;
+beginchar("d",7*bwidth#,totheight#,0); "Die Drei (B)";
+ fb(2);fb(7);
+ dreier;
+endchar;
+beginchar("e",7*bwidth#,totheight#,0); "Die Vier (B)";
+ fb(3);fb(4);fb(5);fb(7);
+ vierer;
+endchar;
+beginchar("f",7*bwidth#,totheight#,0); "Die Fuenf (B)";
+ fb(2);fb(3);fb(4);fb(7);
+ fuenfer;
+endchar;
+beginchar("g",7*bwidth#,totheight#,0); "Die Sechs (B)";
+ fb(5);fb(7);
+ sechser;
+endchar;
+beginchar("h",7*bwidth#,totheight#,0); "Die Sieben (B)";
+ fb(3);fb(7);
+ siebener;
+endchar;
+
+beginchar("i",7*bwidth#,totheight#,0); "Die Acht (B)";
+ fb(4);fb(7);
+ achter;
+endchar;
+
+beginchar("j",7*bwidth#,totheight#,0); "Die Neun (B)";
+ fb(3);fb(5);fb(6);fb(7);
+ neuner;
+endchar;
+
+% Zeichensatz C
+
+beginchar("K",7*bwidth#,totheight#,0); "Die Null (C)";
+ fb(1);fb(2);fb(3);fb(6);
+ nuller;
+endchar;
+
+beginchar("L",7*bwidth#,totheight#,0); "Die Eins (C)";
+ fb(1);fb(2);fb(5);fb(6);
+ einser;
+endchar;
+
+beginchar("M",7*bwidth#,totheight#,0); "Die Zwei (C)";
+ fb(1);fb(2);fb(4);fb(5);
+ zweier;
+endchar;
+beginchar("N",7*bwidth#,totheight#,0); "Die Drei (C)";
+ fb(1);fb(6);
+ dreier;
+endchar;
+beginchar("O",7*bwidth#,totheight#,0); "Die Vier (C)";
+ fb(1);fb(3);fb(4);fb(5);
+ vierer;
+endchar;
+beginchar("P",7*bwidth#,totheight#,0); "Die Fuenf (C)";
+ fb(1);fb(4);fb(5);fb(6);
+ fuenfer;
+endchar;
+beginchar("Q",7*bwidth#,totheight#,0); "Die Sechs (C)";
+ fb(1);fb(3);
+ sechser;
+endchar;
+beginchar("R",7*bwidth#,totheight#,0); "Die Sieben (C)";
+ fb(1);fb(5);
+ siebener;
+endchar;
+
+beginchar("S",7*bwidth#,totheight#,0); "Die Acht (C)";
+ fb(1);fb(4);
+ achter;
+endchar;
+
+beginchar("T",7*bwidth#,totheight#,0); "Die Neun (C)";
+ fb(1);fb(2);fb(3);fb(5);
+ neuner;
+endchar;
+
+end;
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % MetaFont Code for EAN ends here %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%</codeeanmf>
+%<*wlcr39mf>
+% Code 39, in Metafont mode
+% $90^0$ rotated to the right,
+% make Barcodes run down instead of across.
+% Willadt 1998-04-28
+mode_setup;
+
+bwidth#:=5mm#;
+
+% high res .2 mm,
+% med res .3 mm,
+% lo res .4 mm.
+
+bheight# :=.3mm#;
+
+designsize :=13*bheight#;
+font_slant :=0;
+font_normal_space :=bwidth#;
+font_extra_space :=0;
+font_normal_stretch:=0;
+font_normal_shrink :=0;
+font_quad :=bwidth#;
+
+define_pixels(bheight, bwidth);
+
+def thirtyninechar(expr charnum, spex) =
+ beginchar(charnum, bwidth#,12*bheight#,bheight#);
+ numeric mytop,mybot;
+ numeric asval, i;
+ mytop:=12*bheight;mybot:=mytop;
+ x1=x2=0;x3=x4=bwidth;
+ for i=0 upto 11:
+ asval:=ASCII(substring(i,i+1) of spex);
+ exitif asval=-1;
+ asval:=asval-ASCII("0");
+ mybot:=mybot-asval*bheight;
+ if not odd (i):
+ % actual drawing
+ y1:=mytop+blacker;
+ y4:=y1;
+ y2:=mybot-blacker;
+ y3:=y2;
+ fill (z1)--(z2)--(z3)--(z4)--cycle;
+ fi
+ mytop:=mybot;
+ endfor;
+ endchar;
+enddef;
+
+\thirtyninechar("0")("1112212111");
+\thirtyninechar("1")("2112111121");
+\thirtyninechar("2")("1122111121");
+\thirtyninechar("3")("2122111111");
+\thirtyninechar("4")("1112211121");
+\thirtyninechar("5")("2112211111");
+\thirtyninechar("6")("1122211111");
+\thirtyninechar("7")("1112112121");
+\thirtyninechar("8")("2112112111");
+\thirtyninechar("9")("1122112111");
+\thirtyninechar( 64)("1211212111"); % start = @
+\thirtyninechar("-")("1211112121");
+\thirtyninechar("+")("1211121211");
+\thirtyninechar("$")("1212121111");
+\thirtyninechar("/")("1212111211");
+\thirtyninechar(".")("2211112111");
+\thirtyninechar( 37)("1112121211"); % percent
+\thirtyninechar( 32)("1221112111"); % space
+\thirtyninechar("A")("2111121121");
+\thirtyninechar("B")("1121121121");
+\thirtyninechar("C")("2121121111");
+\thirtyninechar("D")("1111221121");
+\thirtyninechar("E")("2111221111");
+\thirtyninechar("F")("1121221111");
+\thirtyninechar("G")("1111122121");
+\thirtyninechar("H")("2111122111");
+\thirtyninechar("I")("1121122111");
+\thirtyninechar("J")("1111222111");
+\thirtyninechar("K")("2111111221");
+\thirtyninechar("L")("1121111221");
+\thirtyninechar("M")("2121111211");
+\thirtyninechar("N")("1111211221");
+\thirtyninechar("O")("2111211211");
+\thirtyninechar("P")("1121211211");
+\thirtyninechar("Q")("1111112221");
+\thirtyninechar("R")("2111112211");
+\thirtyninechar("S")("1121112211");
+\thirtyninechar("T")("1111212211");
+\thirtyninechar("U")("2211111121");
+\thirtyninechar("V")("1221111121");
+\thirtyninechar("W")("2221111111");
+\thirtyninechar("X")("1211211121");
+\thirtyninechar("Y")("2211211111");
+\thirtyninechar("Z")("1221211111");
+
+\end;
+%</wlcr39mf>
+%<*code93mf>
+% not complete, yet
+%% Code 93 in Metafont format
+%% Peter Willadt 1998-04-21
+%% For copyright and the like see the documentation
+%% to the barcode package, from which this file is part of.
+%% If you received only this file,
+%% then maybe someone fooled you.
+%%
+%% Code 93 requires one or two check digits.
+%% These check digtis are calculated using a weighted mod 11-checksum.
+%% You have to see the docs.
+%% Start and stop chars are mapped to < and >, respectively.
+%% codeable are 0--9 , A-Z, -,+, space, dot, $, /, and percent.
+%% To print full ascii, ordinary characters have to be preceeded with
+%% on of four shift characters. Thes shift characters are
+%% ($) mapped to =
+%% (%) mapped to [
+%% (/) mapped to |
+%% (+) mapped to ]
+
+mode_setup;
+
+bheight#:=5mm#;
+
+% high res: .264 mm#
+% med res: .33 mm#
+bwidth# :=.33 mm#;
+
+designsize :=bheight#;
+font_slant :=0;
+font_normal_space :=9*bwidth#;
+font_extra_space :=0;
+font_normal_stretch:=0;
+font_normal_shrink :=0;
+font_quad :=10*bwidth#;
+
+define_pixels(bheight, bwidth);
+
+def CODExciiichar(expr charnum, spex) =
+ numeric mywid, asval, i;
+ mywid=0;
+ for i= 0 upto 5:
+ asval:=ASCII(substring(i,i+1) of spex);
+ asval:=asval-ASCII("0");
+ mywid:=mywid+asval;
+ endfor;
+ beginchar(charnum, mywid*bwidth#,bheight#,0);
+ y1=y2=0;
+ y3=y4=bheight;
+ numeric myright,myleft,barweight,spcweight;
+ myright:=0;myleft:=0;barweight:=0;spcweight:=0;
+ for i=0 upto 5:
+ asval:=ASCII(substring(i,i+1) of spex);
+ asval:=asval-ASCII("0");
+ myright:=myright+asval*bwidth;
+ if not odd (i):
+ % actual drawing
+ x1:=myleft-blacker;
+ x4:=x1;
+ x2:=myright+blacker;
+ x3:=x2;
+ fill (z1)--(z2)--(z3)--(z4)--cycle;
+ fi
+ myleft:=myright;
+ endfor;
+ endchar;
+enddef;
+
+CODExciiichar("0","131112");
+CODExciiichar("1","111213");
+CODExciiichar("2","111312");
+CODExciiichar("3","111411");
+CODExciiichar("4","121113");
+CODExciiichar("5","121212");
+CODExciiichar("6","121311");
+CODExciiichar("7","111114");
+CODExciiichar("8","131211");
+CODExciiichar("9","141111");
+CODExciiichar("A","211113");
+CODExciiichar("B","211212");
+CODExciiichar("C","211311");
+CODExciiichar("D","221112");
+CODExciiichar("E","221211");
+CODExciiichar("F","231111");
+CODExciiichar("G","112113");
+CODExciiichar("H","112212");
+CODExciiichar("I","112311");
+CODExciiichar("J","122112");
+CODExciiichar("K","132111");
+CODExciiichar("L","111123");
+CODExciiichar("M","111222");
+CODExciiichar("N","111321");
+CODExciiichar("O","121122");
+CODExciiichar("P","131121");
+CODExciiichar("Q","212112");
+CODExciiichar("R","212211");
+CODExciiichar("S","211122");
+CODExciiichar("T","211221");
+CODExciiichar("U","221121");
+CODExciiichar("V","222111");
+CODExciiichar("W","112122");
+CODExciiichar("X","112221");
+CODExciiichar("Y","122121");
+CODExciiichar("Z","123111");
+CODExciiichar("-","121131");
+CODExciiichar(".","311112");
+CODExciiichar( 32,"311211");% space
+CODExciiichar( 36,"321111");% dollar
+CODExciiichar("/","112131");
+CODExciiichar("+","113121");
+CODExciiichar( 37,"211131");% percent
+% % the four escape characters
+CODExciiichar("(","121221");% ought to be ($)
+CODExciiichar(")","312111");% ought to be (%)
+CODExciiichar("[","311121");% ought to be (/)
+CODExciiichar("]","122211");% ought to be (+)
+CODExciiichar("<","111141");% start sign
+CODExciiichar(">","1111411");% stop sign has extra bar
+
+end;
+%</code93mf>