# Hewlett-Packard Graphics Language

Die Hewlett Packard Graphics Language (HP-GL; deutsch Hewlett-Packard-Grafiksprache) ist eine von Hewlett-Packard entwickelte Seitenbeschreibungssprache zur Ansteuerung von Stiftplottern.
Sie wurde 1977 zusammen mit dem Plotter HP-8972 eingeführt. Andere Plotterhersteller haben HP-GL zur Ansteuerung ihrer eigenen Plotter übernommen.

## Sprachaufbau

HP-GL ist eine einfach aufgebaute Sprache. Die Kommandos bestehen aus zwei Großbuchstaben, denen ein oder mehrere Argumente folgen. Die Daten stehen im lesbaren ASCII-Format.
Beispiele für HP-GL-Kommandos :
| Kommando | Bedeutung |
| PA | Position absolute (Stift zu absoluten Koordinaten bewegen) |
| PR | Position relative (Stift um Anzahl von Einheiten bewegen) |
| PD | Pen down (Stift senken) |
| PU | Pen up (Stift heben) |
| SP | Select pen (Stift auswählen) |
Das Koordinatensystem basiert auf der kleinsten Einheit, die ein HP-Plotter damals unterstützte, und wurde auf 25 µm (40 Einheiten pro Millimeter bzw. 1016 Einheiten pro Zoll) festgelegt. HP-GL enthält auch Befehle (LB) zur Ausgabe von einfachen ASCII-Texten.

## Inkjet- und Laserplotter

Auch zur Ansteuerung von Inkjet- und Laserplottern wird HP-GL verwendet. Diese Plotter bauen das Bild zunächst im Speicher auf (man spricht vom Rasterisieren) und geben es dann auf Papier aus. Dabei arbeiten diese Plotter mit „virtuellen Stiften“, das heißt, es gibt eine Tabelle, in der jeder Stiftnummer eine Linienbreite und gegebenenfalls eine Farbe zugeordnet wird. Diese Tabelle kann fix im Plotter abgespeichert werden (heute kaum mehr gebräuchlich) oder mit den HP-GL-Daten mitgesendet werden (ab HP-GL/2 oder mit herstellerspezifischen Headern).

## HP-GL/2

HP-GL/2 ist eine Weiterentwicklung der Sprache HP-GL. Eine wichtige Neuerung ist die Möglichkeit, Strichstärken (und andere Linienattribute) festzulegen sowie binär und somit platzsparend kodierte Befehle (z. B. PE = Polyline Encoding) zu erzeugen. Da HP-GL für Stiftplotter entwickelt wurde, gab es keine Befehle, um die Strichstärken zu definieren, denn diese waren durch die Stifte festgelegt. Der Anwender musste das Stiftkarussel entsprechend seinen Wünschen bestücken. Als die ersten Inkjetplotter aufkamen, musste der Anwender stattdessen am Plotter eine Stifttabelle eingeben. Mit HP-GL/2 wurde dieser unkomfortable und fehlerträchtige Schritt überflüssig.
Beispiele für HP-GL/2 Kommandos :
| Kommando | Bedeutung |
| NPx | Number of Pens (Anzahl der Stifte festlegen); x=1..256 |
| PCx,r,g,b | Pen Color (Farbe von Stift x festlegen); x=Stift, r=rot, g=grün, b=blau, jeweils 0..255 |
| PWw,x | Pen Width (Strichstärke von Stift x festlegen); w=Strichstärke in mm mit Dezimalpunkt, x=Stift |
Kommandos (Mnemonics) in HP-GL/2 können groß oder kleingeschrieben werden. Ein Kommando hat kein, ein oder mehrere (optionale) Parameter. Trennzeichen bei Parametern können sein: Komma, Leerzeichen, + oder - (bei Zahlen). Kommandos werden beendet durch: Semikolon, das nächste Kommando oder Zwischenraumzeichen. Empfohlen sind Komma, und nächstes Kommando oder Semikolon.

## HP-GL und HP-GL/2 als Datenaustauschformat

Obwohl sie nicht dafür geschaffen wurde, entwickelte sich HP-GL wegen ihrer Einfachheit zum Datenaustauschformat für Vektordaten von Grafiken. Viele CAD-Programme unterstützen den Export im HP-GL-Format. Eine weitere gängige Möglichkeit, HP-GL-Daten zu erzeugen ist der „Druck in eine Datei“ mit einem entsprechenden Druckertreiber. Das ist problematisch, da die Sprache mit Erscheinen neuer Plottermodelle immer wieder erweitert wird und es dadurch zu Kompatibilitätsproblemen kommen kann. Ein weiteres Problem sind herstellerspezifische Header, die vor den eigentlichen HP-GL-Daten gesendet werden, um bestimmte Plottereigenschaften anzusteuern – zum Beispiel die Printer Job Language von Hewlett-Packard oder das Remote Control Format von Océ.
Zur Vermeidung von Kompatibilitätsproblemen gilt (frei nach Jonathan Postel): “be liberal in what you accept, be conservative in what you send”. Man kann davon ausgehen, dass der Befehlssatz des Plotters HP-750C allgemein verstanden wird. Außerdem ist die softwaretechnisch stark begrenzte systembedingte Genauigkeit eines „Druckes“ in diesem einfachen Übertragungsformat gegenüber dem DXF-Dateiformat zu beachten.
HP-GL wird auch verwendet, um Graviermaschinen anzusteuern.

## Beispielhaftes csh-Skript zum Drucken von Etiketten

Das Skript druckt einen Etikettenbogen A4 mit 4 × 10 Etiketten. Die Kommentare im Skript (#kommentar) und die Variablennamen ($name) erlauben eine Orientierung. Innerhalb der "Zeichenketten" (rot) befinden sich HP-GL/2-Code und Variableninhalte. Auf ein Etikett werden eine rechteckige Fläche mit der Farbe Leinen und vier Zeilen zentrierter Text in Blautönen mit verschiedener Zeichengröße gedruckt. Die rechteckige Fläche ist kleiner als ein Etikett. Auskommentiert ist das Zeichnen eines rechteckigen Rahmens. Die Sequenzen \r und \e sind zu beachten. Sie repräsentieren die nicht abdruckbaren Zeichen CarriageReturn und ESCape. Diese Sequenzen werden durch echo_style=both von der (t)csh berücksichtigt. Der angegebene Text ist ein Phantasie-Text.