Anleitung zu HPTools

M.Janson 1. Mai 1997

Inhaltsverzeichnis

1 Was ist HPTools ? 2 2 Rechtslage 2 3 Kompilieren und Installieren 2 4 Benutzung 3 5 Optionen 4 6 Kommandos 4

6.1 Drucker-Steuerung . . . . . . . . . . . . . . . . . . . . . . . . . . 4 6.2 Seiten-Steuerung . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 6.3 Schriftarten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

7 Benutzung von speziellen Druckern 6 8 Benutzung in Filtern der Printcap 6 9 Die Eingabe über den Prompt 7 10 Kommende Versionen 7 11 Fehler 8 12 Danksagungen 8

1 Was ist HPTools ?

HPTools wurde vorwiegend geschrieben, um das lästige Eingeben von ESC-Codes ein für alle mal zu beenden. ESC-Codes sind Druckerbefehle die den Drucker dazu bringen quer, unterstrichen, klein, gross usw. zu drucken. Mit HPTools werden die Befehle in einfache leicht zu merkende Ausdrücke umgewandelt. Wahrscheinlich der wichtigste Grund HPTools unter Linux zu nutzen, ist wohl die Tatsache, daß HP Drucker am Ende einer Zeile einen sogenannten ’Linefeed’ erwarten, der aber im (echten) ASCII unter Linux nicht existiert. Daraus folgt, daß der Drucker nicht erkennt wann eine Zeile beendet ist, und somit den ganzen Text, und sei er noch so lang, in eine Zeile druckt. Das Senden eines einfachen Befehles behebt dieses Problem. Der ESC-Code zu diesem Befehl ist &k2G welcher sich mit HPTools zu cr vereinfacht. Alle weiteren Befehle sind in diesem Dokument beschrieben. Das Programm wurde für den HP560C geschrieben, sollte aber mit den meisten Druckern von HP, sowie mit einigen anderen funktionieren. Erfolgreich wurde es zum Beispiel auf einem OKI Laserline 6 elite eingesetzt, der allerdings HP Laserjet kompatibel ist.

2 Rechtslage

Es kann keine Garantie und Haftung auf die Funktion, Vollständigkeit und Richtigkeit des Softwarepaketes übernommen werden. Die Benutzung des Programmes geschieht auf eigenes Risiko d.h. es wird keine Haftung auf Schäden jeglicher Art übernommen, welche auf das Programm zurückzuführen sind. Das Softwarepaket darf und soll frei vervielfältigt werden, jedoch darf ausschließlich nur das unveränderte Archiv mit seinem Originalinhalt weitergegeben werden.

3 Kompilieren und Installieren

Um in den Genuß dieses Programmes zu kommen muß es kompiliert werden. Um dies zu tun ist ein ANSI fähiger C oder C++ Kompiler notwendig. In Linux ist das üblicherweise der GNU-C. Außerdem sollte zuerst der Makefile editiert werden, welcher in diesem Software Paket zu finden ist. Die erforderlichen Änderungen betreffen das Drucker–Device und den Pfad in dem installiert werden soll. Die Drucker–Devices sind im Verzeichnis /dev zu finden. Der Standard Drucker ist meist /dev/lp0 . Dieses Device entspricht dem LPT1 unter MSDOS. Welches Device benutzt weden soll ist jedoch von dem lokalen System abhängig. Ein Blick in den Konfigurationsfile /etc/printcap könnte hier weiterhelfen. Im Makefile ist folgende Zeile zu finden

DEVICE= ’“/dev/lp0“’

Hier sollte /dev/lp0 mit dem entsprechenden Device ersetzt werden. Es ist auch möglich anstelle des Devices einen beliebigen Filenamen einer Datei anzugeben, in welche dann die Ausgabe des Programmes umgeleitet wird. Das hier angegebene Device oder File wird als Standard benutzt. Es können jedoch ohne Probleme nach dem Kompilieren andere angegeben werden. Dies geschieht dann über die Optionen, welche in 5 erklärt sind.

Der Pfad in den das Programm installiert wird befindet sich in der Zeile

HPPATH= /usr/bin

und der Pfad in dem die Manpage installiert werden soll ist in

MANPATH = /usr/man

zu finden. Als nächstes geht es an das Kompilieren. Im Pfad in dem sich das Makefile und hp.c befindet einfach

make all

eingeben. Ist das erfolgreich beendet sollte man zuerst das Executable im lokalen Verzeichnis testen. Dies geschieht durch Eingabe von hpset. Das Programm sollte eine Liste von Befehlen ausgeben, welche verfügbar sind. Ist die Funktionsfähigkeit des Programmes sichergestellt kann mit

make install

das Executable in das im Makefile angegebene Verzeichnis installiert werden. Die Kommandos von hpset sind im Abschnitt 6 beschrieben. Sollte es beim Kompilieren oder beim Installieren Probleme geben, sollten noch einmal alle Einträge im Makefile kontrolliert werden. Sollte es dennoch nicht kompilieren kann mir eine Fehlerbeschreibung gemailt werden. Die Adresse ist in Abschnitt 11 zu finden.

Das Kompilieren auf anderen Systemen wurde von mir noch nicht ausprobiert. Jedoch sollte hpset auf allen ANSI-C tauglichen Kompilern erfolgreich kompilieren. Jedoch sind dann die systemspezifischen Programmteile anzupassen. Hierzu gehört z.B. das Drucker–Device sowie die Kompilerflags im Makefile. Sollte jemand hpset auf einem anderen System kompiliert haben, wäre ich dankbar für eine Mail mit allen Änderungen, um die Informationen in dieses Paket einzubringen.

4 Benutzung

Die Anwendung des Programmes ist einfach. Der Aufruf erfolgt durch Eingabe des Programmnamens, normalerweise hpset, gefolgt von den gewünschten Befehlen.

hpset [Optionen] [Befehl1] [Befehl2] …

Zu beachten ist, daß einige Befehle nur in einer bestimmten Reihenfolge, und nur gemeinsam ausgeführt werden können. Dies wird im Abschnitt 6 näher beschrieben. Bei der ersten Benutzung ist es sinnvoll die Funktionsfähigkeit des Programmes mit dem Befehl hpset test zu überprüfen. Dies sollte den druckereigenen Selbsttest starten.

5 Optionen

-h  Ausgabe der Hilfe

-c Leitet die Ausgabe auf stdout um. Diese Option ist gleich mit

-o stdout

-o [File oder Device] Leited die Ausgabe in den angegebenen File oder Device

6 Kommandos

6.1 Drucker-Steuerung

back  Setzt alle Einstellungen zurück auf den druckereigenen Standard.

test Startet den Selbsttest. Der Selbsttest ist druckerspezifisch, d.h. das Druckergebnis sieht bei unterschiedlichen Druckern möglicherweise unterschiedlich aus.

out Wenn im Drucker ein Blatt Papier eingezogen ist, wird es mit diesem

Befehl ausgeworfen.

cr Nach diesem Befehl ist der Wagenrücklauf aktiviert, d.h. am Ende jeder Textzeile fährt der Druckkopf an den Papieranfang zurück. Dies ist unter Linux erforderlich, da der ASCII Standard keine Formatierungszeichen kennt. Unter MSDOS jedoch ist an jedem Ende einer Zeile ein spezielles Zeichen, welches den Drucker zurückfahren lässt.

lbon Nach ausführen dieses Befehles bricht der Drucker zu lange Textzei-

len automatisch nach erreichen des Zeilenenendes um.

leftright Zwingt den Drucker von links nach rechts zu drucken.
rightleft Zwingt den Drucker von rechts nach links zu drucken.
bidirect Zwingt den Drucker in beide Richtungen zu drucken.
execoff Alle folgenden Befehle werden ausgeführt.

execon Alle folgenden Befehle werden nicht ausgeführt sondern ausge-

druckt. (Allerdings nicht der Befehlsname, sondern der ESC-Code)

nice  Drucken mit hoher Qualität
econo  schnelles und sparsames drucken

6.2 Seiten-Steuerung

landscape Quer drucken
portrait  Hochkant drucken

lpi# Bestimmt die Anzahl der Zeilen pro Inch, wobei für # entweder 6 oder 8 angegebenen werden muß

6.3 Schriftarten

Die folgenden Befehle müssen zusammen und in der aufgelisteten Reihenfolge geschickt werden. Sollte eine falsche Reihenfolge angegebenen oder ein Befehl ausgelassen werden kann es sein, daß der Drucker Unsinn bzw. nicht in der gewünschten Schriftart druckt. Die Sequenz hat folgendermaßen auszusehen:

hpset [Zeichensatz] [Zeichenabstand] [Zeichendichte] [Punktgröße] [Schriftlage] [Strichdicke] [Schriftart]

Zeichensatz  english ISO 4
ansi  ANSI ASCII ISO 6
sweden ISO 10
italian ISO 15
spain  ISO 17
german ISO 21
france ISO 69
Zeichenabstand prop  Proportional
fix  Fest

Wenn der Drucker auf Proportional eingestellt ist, muß die Zeichendichte nicht mehr angegeben werden.

Zeichendichte cpi#  # steht für 5,6,10,12,16,16.67,20 oder 24
Punktgröße  point# # steht für 4.75,5,6,7,8,9.5,10,12,14,19 oder 24
Schriftlage italic Kursiv
upright Normal
Strichdicke bold Fett
normal Normal
Schriftart  courier Courier
times  CG Times
gothic Letter Gothic
univers Univers

Zu Beachten ist, daß nicht jede Kombination der oben genannten Befehle erlaubt ist. Die folgende Tabelle zeigt die möglichen Kombinationen ^{1}

1Aus der Deutschen Anleitung des HP DeskJet 560C

Schrift Ausrichtung Zeichendichte Punktgröße Lage  Dicke
courier portrait 5,10,16.67,20 6,12 upright normal

bold

courier portrait 5,10,20 6,12 italic normal

bold

courier landscape 10,16.67,10 6,12,24 upright normal

bold

times portrait  prop  5,6,7,8  upright normal
10,12,14  italic  bold
gothic portrait  6,12,24  6,12  upright normal
italic  bold
gothic landscape 12,24 6,12,24 upright normal

bold

gothic landscape 16.67 4.75,9.5,19 upright normal

bold

univers portrait prop 5,6,7,8 upright normal
10,12,14  bold
univers portrait prop 5,6,10,12 italic normal

bold

7 Benutzung von speziellen Druckern

Wenn man hpset z.B. auf einem Netzwerkdrucker benutzen möchte ist es notwendig die Ausgabe von hpset zum stdout umzuleiten. Diese Ausgabe wird dann mit Hilfe einer Pipe in einen Druckermanager umgeleitet. Normalerweise wird lpr benutzt. Angenommen es soll ein Befehlssatz an einen Drucker mit dem Namen rhp gesendet werden, dann sieht der Aufruf wie folgt aus:

hpset -c [Befehle] |lpr -Prhp -l

oder

hpset -o stdout [Befehle] |lpr -Prhp -l

8 Benutzung in Filtern der Printcap

Bei der Benutzung von lpr möchte man vielleicht in besonderen Schriftarten oder anderen Einstellungen drucken. Um dies permanent zu erreichen, d.h. auch wenn zuvor durch das Drucken auf andere Art und Weise die Einstellungen verändert sind, kann man einen Filter in der Printcap definieren. Der notwendige Eintrag ist if=/etc/text-filter wobei /etc/text-filter ein Skript ist welches die Drucker Befehle enthält. Zunächst ein Beispiel der Konfiguration eines Druckers mit Filter in der Printcap :

lp:lp=/dev/lp1:sd=/usr/spool/lp1:if=/etc/text-filter:sh Genauere Informationen zu den Einträgen in der Printcap sind in der Manual Page der Printcap zu finden. ^{2} Der Inhalt des Filters text-filter könnte wie folgt aussehen:

#! /bin/bash hpset -o stdout out back cr lbon portrait zcat -f hpset -o stdout out

Zu Beachten ist, daß hpset in den stdout ausgeben muß, was mit -o stdout oder -c erreicht wird. Die Benutzung von zcat anstelle von cat ermöglicht das Drucken von gezipten Files.

9 Die Eingabe über den Prompt

Wenn hpset ohne Kommandos aufgerufen wird springt der Cursor eine Zeile unter die Eingabezeile und wartet auf Befehle. Wohlgemerkt wenn keine Kommandos angegeben wurden, Optionen jedoch dürfen angegeben werden. Jetzt können alle zur Verfügung stehenden Kommandos eingegeben werden, welche dann auch sofort ausgeführt werden. Eine Typische Befehlsfolge könnte dann z.B. wie folgt aussehen.

bytekiller: $ hpset hpset>execoff sending execoff command to /dev/lp1 hpset>landscape sending landscape command to /dev/lp1 hpset>execon sending execon command to /dev/lp1 hpset>out sending out command to /dev/lp1 hpset>quit bytekiller: $

Dies hat zur Folge, daß die ESC Sequenz des landscape Befehls ausgedruckt, und danach das Papier ausgeworfen wird. Mit quit oder exit kann die Eingabe über den Prompt verlassen werden. Eine Hilfe wird durch die Eingabe von help angezeigt.

10 Kommende Versionen

In zukünftigen Versionen soll der Befehlssatz aus dem Programm raus, und in einen Konfigurationsfile wieder zu finden sein. Somit wird es möglich das Programm an jeden Drucker anzupassen, und Erweiterungen durch Steckkarten des Druckerherstellers lassen sich einfach in das Programm integrieren. Da aber hiermit das Programm nicht mehr an die Drucker der Firma HP gebunden ist, sondern für alle Drucker gilt, wird es seinen Namen wechseln. Welcher das sein wird ist noch nicht bestimmt, jedoch wird es in jedem Falle noch eine Version mit dem Namen HPtools geben, in welcher der Verweis auf die neue Version gegeben ist.

2Aufruf durch man printcap

11 Fehler

Wenn irgendwelche Fehler auftreten, ob im Programm oder in der Dokumentation, wäre ich dankbar für eine Mail mit einer genauen Beschreibung des Fehlers. Wenn der Weg über das Internet nicht möglich ist, ist auch der Postweg möglich.

EMail: michael.janson@stud.uni-karlsruhe.de

Michael Janson Ostmarkstr.19 76227 Karlsruhe

12 Danksagungen

Danke an Stephan Fuhrmann (stephan.fuhrmann@stud.uni-karlsruhe.de) und Claudio Matsuoka (claudio@brasil.enemy.org) für das Testen diese Programmes sowie der Unterstützung in einigen Problemen beim Programieren.