*******************************************************************************
*                                                                             *
*                                 B A R C O D E                               *
*                                                                             *
*         Ein  universeller Barcode-Generator fuer PCL*-Drucker unter         *
*                                                                             *
*          HP-UNIX*, IBM-AIX*, LINUX*, SCO-Unix*, DEC-OpenVMS* (u.a.)         *
*                                                                             *
*******************************************************************************


Programmbeschreibung:
=====================
Barcode-Applikationen fuer Microsoft*-Betriebssysteme findet man in Huelle und
Fuelle. Meistens laufen diese Applikationen mit einer eigenen Oberflaeche und
sind nur in seltenen Faellen  (z.B. ueber eine DDE-Schnittstelle) an die
eigenen Beduerfnisse anzupassen. BARCODE basiert auf einem voellig anderen
Ansatz und bietet damit auch auf Unix-Plattformen eine preiswerte und unkom-
plizierte Alternative zur Hardwareaufruestung des (oder der) Drucker.

Das Shareware-Programm interpretiert die Standard-Eingabe (stdin) als die zu
druckenden Daten und untersucht sie auf das Vorhandensein einer speziellen
Barcode-Befehlssequenz, die an die von Kyocera*-Druckern bekannte Sprache
Prescribe* angelehnt ist. Solange diese Sequenz nicht auftritt, werden die
Daten unveraendert 1:1 an die Standard-Ausgabe (stdout) durchgereicht. Tritt
nun aber diese Sequenz auf, so wird ein entsprechender Barcode erzeugt und
dieser in Form einfacher PCL*-Kommandos in den Ausgabedatenstrom ein-
gefuegt. 

Unter UNIX z.B. genuegt es also, den eigentlichen Druckbefehl gegen ein Shell-
Script mit einer Befehlsfolge der Art

                   cat $1 | barcode <register id> | lp

zu ersetzen. Ohne die Angabe <register id> (siehe Datei REG_GERM.TXT) werden
die zu druckenden Zeichen manchmal willkuerlich vertauscht. 


Syntax:
=======
Die Syntax im Drucktext zur Ausgabe eines Barcodes lautet:

!R! BARCODE <mode>,"<text>","<data>",<x>,<y>,<width>,<height>,<rotation>,<options>;EXIT;

mit:

<mode>          Barcode-Typ; moegliche Werte z.zT. 0 fuer "2 of 5 interleaved",
                                                   1 fuer "Code39",
                                                   2 fuer "Code128",
                                                   3 fuer "Codabar",
                                                   4 fuer "MSI".

"<text>"        Klartext, der ueber bzw. unter den Barcode gedruckt werden soll.
                Es wird ein in der Zeichendichte (CPI) an die jeweilige Barcode-
                breite angepasster Zeichensatz "ISO 8859-1 Latin 1 / ECMA1" der
                Schriftart "Courier" verwendet. Gegebenenfalls muss die Hoehe
                der Zeichen durch beidseitiges Hinzufuegen von Leerzeichen redu-
                ziert werden.

                Achtung: Aus programmtechnischen Gruenden  muss zumindest ein
                ======== Leerzeichen als Text angegeben werden, da andernfalls
                         das Barcode-Kommando nicht als solches erkannt wird!

"<data>"        Die als Barcode zu druckende Ziffernfolge. Sie wird ggf. vorne
                mit einer "0" aufgefuellt, denn "2 of 5 interleaved"-Barcodes
                koennen incl. einer evtl. Pruefsumme immer nur eine gerade An-
                zahl Ziffern darstellen !

<x>             Horizontale Startposition in mm relativ zur momentanten Cursor-
                position. Bezugspunkt ist die linke obere Ecke des Barcodes
                (in Scan-Richtung gesehen). Negative Werte bewirken eine Ver-
                schiebung nach links, positive nach rechts.

<y>             Vertikale Startposition in mm relativ zur momentanten Cursor-
                position. Bezugspunkt ist die linke obere Ecke des Barcodes
                (in Scan-Richtung gesehen). Negative Werte bewirken eine Ver-
                schiebung nach oben, positive nach unten.

<width>         Breite des gesamten Barcodes in mm (in Scan-Richtung gesehen).

<height>        Hoehe der Balken in mm.

<rotation>      0 = Waagerechte Darstellung.
                1 = Um 90 Grad gegen den Uhrzeigersinn gedrehte Darstellung.

<options>       0 = Es wird keine Pruefziffer generiert (ausgenommen Code128).
                1 = Aus den Daten des Barcodes wird die Pruefziffer generiert
                    und mit ausgedruckt. Der Aufbau der Pruefziffer entspricht
                    natuerlich dem jeweiligen Standard des verwendeten Barcodes.
                2 = Klartext wird nicht ueber, sondern unter den Barcode
                    gedruckt.
                3 = 1 + 2
                4 = Die Barcodedaten werden als Klartext gedruckt.
                5 = 1 + 4
                6 = 2 + 4
                7 = 1 + 2 + 4


Beispielaufruf:
===============
Nach diesem kurzen Demotext wird ein 2of5-Barcode gezeichnet. Bezugspunkt fuer die
relative Positionsangabe -40, 20 ist die aktuelle Cursorposition zu
Beginn des Barcode-Befehls. In diesem Fall steht der Cursor am Beginn
der kommenden Zeile (wegen des <CR> am Ende dieser Zeile!).
!R! BARCODE 0, "Seriennummer", "08154711", -40, 20, 35, 15, 1,0; EXIT;

Der Befehl zeichnet einen senkrecht orientierten "2 of 5"-Barcode mit einer
Laenge (in Scan-Richtung) von 35 mm und 15 mm langen Balken. Die Startposition
des Barcodes liegt 40 mm links u. 20 mm unterhalb der Grundlinie des ersten "!".


Einschraenkungen:
=================
Derzeit kennt BARCODE die Codes '2 of 5 interleaved', 'Code39', 'Code128',
'Codabar', sowie "MSI".

Weitere Codes sind in Vorbereitung oder koennen auf Wunsch kurzfristig imple-
mentiert werden. 

Die maximale Anzahl darstellbarer Zeichen fuer Barcodes bzw. Text betraegt
jeweils 80 Zeichen. 

Dieses Sharware-Paket enthaelt in den entsprechend bezeichneten Unterverzeich-
nissen Binaerversionen, die z.B. per FTP direkt auf die folgenden Plattformen
uebertragen werden koennen:

- MS-DOS,   getestet auf IMB*-komp. PC unter den MS-DOS*-Versionen 6.20 u. 6.22
- LINUX,    getestet auf IBM*-komp. PC und dem Linux-Kernel V2.0
- HP-UX,    getestet auf HP*9000/800 G60 unter HP-UX* 9.0 und 10.10
- AIX,      getestet auf IBM*6000 C10 unter AIX* 4.1.4 und 4.2
- SCO-Unix, getestet auf IBM*-komp. PC unter SCO-Unix* Release 3.2 Version 4.2
- OpenVMS,  getestet auf DEC* alpha*.


Auch hier koennen alternative Versionen kurzfristig geliefert werden.


Viel Erfolg mit BARCODE wuenscht

Ruediger Kerkloh


Kontaktadresse des Autors:
==========================
Dipl.-Ing. Ruediger Kerkloh
Gartenstrasse 39
D-59387 Ascheberg/Westf.

Phone: 02593/98659
Fax:   02593/98704

EMail: r.kerkloh@t-online.de


*) Alle Warennamen werden ohne Gewaehrleistung der freien Verwendbarkeit
   benutzt und sind moeglicherweise eingetragene Warenzeichen.
