HP-GL Interpreter

Plottergrafik für die Schneider Joyce

Die Hewlett Packard Graphics Language, oder kurz HP-GL, ist ein Steuerbefehlssatz für Stiftplotter, der von Hewlett-Packard (HP) entwickelt wurde. HP-GL war ursprünglich ein Befehlssystem für HP-Plotter, wird aber mittlerweile von vielen CAD-Anwendungen und Plottern als Standardbefehlssatz verwendet. Es gibt auch eine Erweiterung namens HP-GL/2 (insbes. für Rasterplotter) mit Funktionen wie Befehlskomprimierung, Farbdaten, Rastergrafikunterstützung, Strichstärken, usw.

Neben der Steuerung von Plottern wird die Sprache aber auch z.B. für CNC-Maschinen zum Fräsen oder Gravieren eingesetzt. Die HP-GL-Dateien haben oft die Endung ".plt" (für "plot"). Es handelt sich um gewöhnliche Textdateien mit einem vergleichsweise einfachen Aufbau. Die HP-GL-Befehle beginnen mit einem Code ("Mnemonic") aus zwei Großbuchstaben, dann können ein oder mehrere Parameter folgen, z.B. Stiftnummern, Farbcodes oder X-/Y-Koordinaten zur Stiftpositionierung.

Beispiele:
   
IN;   Initialize = Plot Job beginnen
PU50,50;   pen up = Stift anheben und zur Koordinate 50,50 bewegen
PD100,0,100,100,0,100,0,0;   pen down = Stift absenken und zu den Koordinaten 100,0,
dann 100,100, dann 0,100 und schließlich zu 0,0 bewegen
(zeichnet ein Quadrat mit der Kantenlänge 100)

Das Semikolon schließt jeden Befehl ab. Trennsymbole können neben dem Komma auch Leerzeichen oder andere Whitespaces sein. Weitere Details zur Sprache finden man u.a. auf Wikipedia !

Die Befehle zum Zeichnen von Linien, Ellipsen, usw. erzeugen also ein Bild auf Papier oder in Holz oder Metall gefräst; dieses Bild kann man aber auch auf einem Computermonitor ausgeben. Dazu muss der Interpreter die HP-GL-Befehle in Zeichenbefehle umwandeln, dann kann man die Bildentstehung auf dem Monitor bewundern.

Der HP-GL Interpreter unterstützt nur den Teil der möglichen Befehle, der für die Bildschirmausgabe sinnvoll ist. Das sind insbesondere die Befehle zum Positionieren und zum Zeichnen von Linien. Verschiedene Farben werden nicht unterstützt, auch keine Strichdicken oder verschiedene Stifte. Damit kann man bereits viele plt-Dateien ansehnlich auf dem Bildschirm darstellen.

Das Programm wurde in Turbo Pascal 3.00A geschrieben. Die verwendete Grafikbibliothek ist ein Mix aus Turbo Pascal und Assembler-Routinen für die Grafik-Kernbefehle. Die Grafikbibliothek wurde überarbeitet und optimiert; so wurde u.a. die häufig verwendete Line-Funktion in Assembler neu geschrieben (Bresenham-Algorithmus).

Auf der Kommandozeile gibt man einfach hpgl35 ein um das Programm im interaktiven Modus zu starten. Alternativ kann man auch gleich einen Dateinamen angeben, z.B. hpgl35 girl02.plt.

Im interaktiven Modus erscheint ein Dialog, der zu Beginn zur Eingabe des Dateinamens der HP-GL-Datei auffordert (z.B. girl02.plt). Der Dateiname muss vollständig eingegeben werden, inklusive der Extension (.plt). Lässt man den Dateinamen leer und drückt auf die Enter-Taste, dann wird das Programm beendet.

Bisher akzeptierte der HP-GL Interpreter im interaktiven Modus nur 8.3-Dateinamen ohne Laufwerksbuchstabe. Jetzt kann auch ein Laufwerksbuchstabe bei der HPGL-Datei angegeben werden (z.B. B:girl02.plt).

Dann kann optional der Dateiname eingegeben werden, unter der die Grafik als Bitmap-Datei im Format PBM gespeichert werden soll. Das Feld kann auch leer bleiben, dann wird keine PBM-Datei erzeugt. Im Feld "AR correction" muss man mit Y für Yes oder N für No angeben, ob eine Korrektur des Seitenverhältnisses (aspect ratio) durchgeführt werden soll. In dem Fall wird das Bild in doppelter Höhe ausgegeben und es erscheint auf dem PC unverzerrt. Da die Pixel der Joyce nicht quadratisch sind, sondern etwa doppelt so hoch wie breit, ist die Korrektur zu empfehlen, wenn man die Dateien auf dem PC betrachten möchte.

Die HP-GL-Datei wird in zwei Durchläufen gelesen. Zuerst wird eine Analyse durchgeführt, bei der die Minima und Maxima der Koordinaten bestimmt werden. Diese werden in einer Konfigurationsdatei gespeichert, die den gleichen Namen wie die HP-GL-Datei hat, allerdings mit der Extension .cfg. Existiert diese Datei bereits, dann entfällt der Analyse-Durchlauf, was die Wartezeit bei mehrfachem Aufruf derselben Datei deutlich verringert. Im zweiten Durchlauf erfolgt die Größenanpassung und das Zeichnen der Grafik. Die Grafik ist fertig gezeichnet, wenn ein Signal ertönt. Das fertige Bild kann dann in Ruhe betrachtet werden; ein Druck auf eine beliebige Taste beendet das Programm.

Wurde der Dateiname für die PBM-Datei angegeben, dann wird sie nach Abschluss des zweiten Durchlaufs erzeugt. PBM-Dateien können mit dem Zusatzprogramm pbmread gelesen und angezeigt werden. Der Aufruf erfolgt interaktiv mit pbmread oder direkt mit pbmread <Datei>, also z.B. pbmread M:girl02.pbm.

Im interaktiven Modus muss der Dateiname der PBM-Datei eingegeben werden, wieder inklusive der Extension .pbm. Wenn man keinen Dateinamen eingibt und einfach die Enter-Taste drückt, dann wird pbmread beendet. Andernfalls erscheint die geladene Grafik auf dem Bildschirm. Sie wird unabhängig von der "AR correction"-Option korrekt dargestellt, d.h. eine ggf. doppelte Zeilenhöhe wird wieder auf die einfache Zeilenhöhe reduziert, damit das Bild unverzerrt auf dem Joyce-Bildschirm erscheint. Nach Betrachten der Grafik genügt ein Tastendruck um das Programm zu beenden.

 

Bernd Bock, Juni 2021

pbmread V3.2 kann jetzt auch eine Diashow anzeigen


Dazu gibt es die neue Kommandozeilenoption -diashow, die mit einer Laufwerksangabe ergänzt werden kann. Wird kein Laufwerk angegeben, dann wird das aktuelle Laufwerk verwendet.

Die Option zum Invertieren des Bildes beim Laden hat nun auch ein Minus-Zeichen vorangestellt bekommen: -invert.

Beispiele:

pbmread
Zeigt das Menü zur Eingabe eines Dateinamens an. Dem Dateinamen kann auch ein Laufwerksbuchstabe - z.B. B: - vorangestellt werden.

pbmread dodo1.pbm
Lädt die Datei vom aktuellen Laufwerk und zeigt sie an.

pbmread dodo1.pbm -invert
Lädt die Datei vom aktuellen Laufwerk und zeigt sie invertiert an.

pbmread -diashow
Zeigt eine Diashow aller PBM-Dateien des aktuellen Laufwerks an.

pbmread -diashow b:
Zeigt eine Diashow aller PBM-Dateien des Laufwerks B: an.

Hinweise:
  • Keine Diashow: Mit der Taste "I" wird das Bild invertiert. Eine beliebige andere Taste beendet das Programm.
  • Die Diashow kann mit einer beliebigen Taste abgebrochen werden; das begonnene Bild wird noch zuende gezeichnet.

 

HP-GL Interpreter & PMread als C-Version

Es war eine Herausforderung, den Maschinencode-Anteil im z88dk-C zum Laufen zu bringen, aber schließlich hat es funktioniert. Der Maschinencode wird beim HPGL-Interpreter und bei pbmread für das Lesen und Schreiben von PBM-Dateien benötigt, genauer gesagt für den Zugriff auf den Bildspeicher im "Roller RAM".

Damit der Maschinencode in Sicherheit ist, muss dem C-Compiler mitgeteilt werden, dass der Stack unterhalb des gesicherten Speicherbereichs beginnen soll. Das wird mit der Option -pragma-define:REGISTER_SP=0xF3FF erreicht (siehe make.cmd).

Die Quellcode-Dateien und die ausführbaren COM-Dateien sind wie üblich im Download-Bereich des Forums zu finden.

Bernd Bock, August 2023

 

Wer eigene Grafiken auf die JOYCE zaubern möchte, sei auf mein Java-Programm TinySVG verwiesen, mit dem sich SVG-Vektorgrafiken auch in das benötigte "PLoTter-Format" umwandeln lassen.

Weitere Infos findest Du im joyceforum.de !