UltraScript - Ein Postscript-Interpreter

PostScript - Dieser Begriff geistert seit einigen Jahren durch die DTP- und Drucktechnikwelt. ST-Besitzer mußten sich bisher aus der Welt der PostScript-Benutzer ausgeschlossen fühlen, da es zwar einige Programme gibt, die PostScript-Ausgaben erzeugen können (PublishingPartner, Page-Stream, Timeworks DTP), aber bisher keine weitere Verwendungsmöglichkeit für derartige PostScript-Dateien in der ST-Welt existierte. Mit der Vorstellung von UltraScript, das von ATARI vertrieben wird, hat sich dies geändert. UltraScript ist ein Post-Script-Clone, der den ATARI-Laserdrucker in Zusammenarbeit mit einem ST mit mindestens 2 MB Speicher zu einem PostScript-fähigen Drucker machen soll.

Da PostScript in der ST-Welt bisher zu kurz gekommen ist, hier zunächst einmal eine kurze Einführung zum Thema: Was und wofür ist PostScript?

PostScript wurde entwickelt, um grafische Ausgaben auf effiziente und vor allem geräteunabhängige Art zwischen Programmen und Ausgabegeräten aus-tauschen zu können. PostScript wird häufig als ‘Seiten-Beschreibungssprache' bezeichnet. Tatsächlich ist PostScript aber eine vollständige Programmiersprache mit sehr vielseitigen grafischen Funktionen. PostScript arbeitet wie ein Maler mit Ölfarben: Auf eine Leinwand wird mit deckenden Farben gezeichnet. Wenn eine Stelle der Leinwand übermalt wird, sieht man immer nur die zuletzt aufgebrachte Farbe. Für PostScript ist Text nur ein Spezialfall von Grafik, dem allerdings besondere Beachtung geschenkt wird.

Einiges an der Idee von PostScript ist ungewöhnlich. So gibt es für PostScript-Programme keine compilierte Form, die Sprache soll ausschließlich von Interpretern verarbeitet werden. Als Seiteneffekt der Interpretierung entsteht auf dem an den Interpreter angeschlossenen Raster-Ausgabegerät dann das durch das Programm beschriebene Bild. Beispiel: Der Apple-LaserWriter ist eigentlich nichts weiter als ein Computer mit eingebautem PostScript-Interpreter, an den als Ausgabeeinheit ein Laser-Druckwerk angeschlossen ist. Wenn man mit einem LaserWriter drucken will, muß man ihm ein PostScript-Programm im Klartext schicken. Dieses Programm wird ausgeführt, und als Ergebnis kann eine Druckseite entstehen. Der PostScript-Interpreter läßt sich natürlich auch zu anderen Dingen mißbrauchen. Es existieren z.B. PostScript-Programme, die an den sendenden Computer Klartext-Fehlermeldungen zurückschicken, wenn ein Programm Fehler enthält, und die somit die Entwicklung von PostScript-Program-men erleichtern. Im Prinzip kann statt einem Drucker auch ein Bildschirm an den PostScript-Interpreter an geschlossen sein; der NeXT-Computer benutzt beispielsweise einen Display-PostScript-Interpreter für seine Bildschirmgrafik.

PostScript-Grafik kann aus geraden Linienstücken oder Bézier-Kurven (mit denen alle gekrümmten Linien emuliert werden) zusammengesetzt werden. Auch Buchstaben werden nur als aus diesen Grundelementen zusammengesetzte Objekte aufgefaßt. Dabei können Linien beliebiger Dicke und Farbe sowie Flächenfüllungen in beliebigen Farben verwendet werden. Zusätzlich können auch Pixel-Grafiken integriert werden. Die Grundidee zur Beschreibung einer Grafik ist folgende: Man beschreibt zuerst den ‘Weg', den der Zeichenstift auf dem imaginären Papier zurücklegt, und beschreibt dann, welche Stiftbreite oder -färbe (usw.) man für diesen Weg benutzen will. Auch Text kann so entlang eines beliebig gekrümmten Weges gesetzt werden.

Wenn man Ähnlichkeiten zu anderen Sprachen sucht, findet man sie am ehesten bei Forth. Wie Forth ist auch PostScript stackorientiert (diese Arbeitsweise kennen Sie vielleicht von HP-Taschenrechnern). Man legt also zuerst einen oder mehrere Operanden auf den Stack und wendet dann einen Operator an. Ein Beispiel: Statt ‘1+2' schreibt man '1 2 +'. PostScript macht keinen Unterschied zwischen Daten und Programm, es betrachtet ein Programm als Ganzes als Strom von Objekten, die der Reihe nach ausgeführt werden und als Seiteneffekt eine Druckausgabe erzeugen können.

Natürlich sind auch in PostScript Kontrollstrukturen wie in prozeduralen Sprachen möglich.

Schließen wir diese kurze Einführung mit einem Beispiel ab: Das Programm zeichnet drei mit unterschiedlichen Grautönen gefüllte Quadrate, die jeweils drei Zentimeter Seitenlange besitzen (s. Listing).


% Demo-Programm; Das Prozentzeichen leitet einen Kommentar ein. 

% Zuerst definieren wir eine Prozedur, die mm in die PostScript-
% Grundeinheit Punkt, entsprechend 1/72 Zoll umwandelt. 

/mm { % Name der Prozedur ist mm. 
    72 25.4 div mul % Zuerst packen wir 72 und 25.4 (ein Zoll 
                    % ist 25.4 mm) auf den Stack und divi
% dieren. Das Ergebnis bleibt auf dem 
                    % Stack. Das folgende mul multipliziert 
                    % den Wert auf dem Stack mit dem letzten 
                    % Wert, der vor Aufruf der Prozedur auf den 
                    % Stack gepackt wurde. 
    } def 
/square {           % Prozedur für ein Quadrat 
    30 mm 0 mm rlineto % '30' wird durch das folgende mm in 
                       % Punkte umgewandelt. 
                       % rlineto zieht eine Linie von der 
                       % aktuellen Zeichenstiftposition 
    0 mm 30 mm rlineto 
    -30 mm 0 mm rlineto 
    closepath          % schließt den Weg des Zeichenstiftes. 
        } def 
% Jetzt gehts los... 
newpath                 % Ein neuer Weg für den Zeichenstift... 
    30 mm 30 mm moveto  % Zeichenstift 3 cm von der unteren 
% Ecke wegbewegen. 
    square              % An dieser Position Quadrat zeichnen. 
    0 setgray           % Grauwert auf Schwarz setzen. 
    fill                % Den vom Zeichenpfad umschlossenen Weg 
                        % füllen - erst jetzt wird Farbe aufs 
                        % Papier gekippt. 
newpath                 % Zweites Quadrat 
    45 mm 45 mm moveto 
    square 
    0.4 setgray         % Dunkles Grau 
    fill 
newpath                 % Drittes Quadrat 
    60 mm 60 mm moveto 
    square 
    0.8 setgray         % Helles Grau 
    fill 
    
showpage                % Seite ist fertig - kann gedruckt werden

Ein Beispiel für ein PostScriptprogramm

ATARIs UltraScript

UltraScript besteht aus zwei Teilen: Dem eigentlichen Interpreter und einer GEM-Bedienungsoberfläche. Der Interpreter kann auch aus einer Shell per Kommandozeilenaufruf benutzt werden. Die Bedienungsoberfläche ist ein einfaches GEM-Programm mit Menüleiste und zwei Fenstern. Eines der Fenster enthält eine Liste der zu druckenden Dateien, das andere Kommentare und Fehlermeldungen des Interpreters. Maximal 36 Dateien können auf einmal gedruckt werden. Die Auswahl geschieht per Menüleiste und Fileselektorbox. Es lassen sich auch einzelne oder mehrere Programme wieder aus der Liste entfernen. Das ‘Print'-Kommando druckt jede Datei ein- oder mehrfach. Schließlich gibt es noch einen Direktmodus, mit dem man PostScript-Programmzeilen direkt an den Interpreter schicken kann. Damit lassen sich kurze Demo-Programme auch ohne Texteditor eingeben, für längere Eingaben fehlt doch der Komfort. Überhaupt könnte ein Primitiv-Texteditor dem Programm nicht schaden... Die Bedieneroberfläche eignet sich nur für den Ausdruck von Dateien. Ein DTP-Programm müßte also erst in eine Datei drucken, um dann später mit UltraScript den Drucker benutzen zu können. Vor allem der nötige Programmwechsel ist lästig. Hoffentlich gibt es bald eine UltraScript-Version, die sich, ähnlich wie der Diablo-Emulator, im Hintergrund installieren läßt. Im Moment könnte man auch anders Abhilfe schaffen: Die meisten Programme erlauben den Aufruf von Fremdprogrammen. Man müßte nur ein kleines Progrämmchen schreiben, daß den Benutzer nach dem zu druckenden Dateinamen fragt und dann die Kommandozeilenversion von UltraScript mit dem Namen als Kommandozeile aufruft. Auch eine Accessory-Version wäre möglich. Man müßte zwar immer noch in eine Datei drucken, aber das Layout-Programm müßte nicht mehr verlassen werden, um den Ausdruck zu sehen.

Der UltraScript-Desktop

Wie kompatibel ist UltraScript?

Soweit es die Grafik betrifft, scheint UltraScript klaglos so ziemlich alles zu schlucken, was man dem Interpreter anbietet. Ich habe einige Demo-Programme aus Adobes Original-Tutorial übernommen, und sie alle ließen sich ausdrucken. Auch Grafik-Output von PageStream oder dem PublishingPartner druckt UltraScript vollständig und korrekt. Übrigens lassen sich die Grafiken auch nicht von Original-PostScript-Ausgaben unterscheiden.

UltraScripts Problem ist Text. Damit Sie mich richtig verstehen, das Problem ist nicht, daß UltraScript PostScript-Text nicht richtig verarbeiten kann. Das Problem ist, daß UltraScript aus rechtlichen Gründen nicht in der Lage ist, Original-Adobe-Fonts zu verwenden. Deshalb ist es im Augenblick unmöglich, mit irgendeinem DTP-Programm einen vernünftigen Textsatz zu erhalten, da für Textsatz Informationen über die Fontmaße Voraussetzung sind. Bei Verwendung eines Fonts mit anderen Maßen sieht der Textsatz sehr merkwürdig aus... Vermutlich steht Lucida auf dem Mac einigen DTP-Programmen zur Verfügung, so daß man den SLM 804 als PostScript-Laser für den Mac benutzen könnte, aber besonders sinnvoll ist das nicht.

Natürlich wird der Emulator nicht ohne Fonts ausgeliefert; Einige Schriften aus der Lucida-Familie, die in etwa Times und Helvetica entsprechen, werden mitgeliefert, jedoch nützt dies dem Benutzer nichts, solange kein ST-DTP-Programm diese Schriften mit ihren von den Originalschriften abweichenden Maßen benutzen kann. Auch PostScript-Bitmap- und User-Defined-Fonts können ohne Einschränkung verwendet werden.

ATARI Deutschland versicherte uns zwar auf Anfrage, daß in Kürze eine große Zahl von Profi-Schrifttypen für UltraScript zur Verfügung stehen sollen, die dann auch die Originalschriften ersetzen sollen. Vermutlich ist dies vor allem ein finanzielles Problem; die Schriften müssen von verschiedenen Herstellern lizensiert und aufbereitet werden. Leider konnte ATARI auch über Preise für Fonts noch keine Angaben machen.

Auch der umgekehrte Weg, die Verwendung von Lucida als Schrifttyp in den gängigen DTP-Programmen, ist im Augenblick noch nicht möglich, da die Hersteller der DTP-Programme bisher Lucida noch nicht als Font im Programm haben. Es ist wohl ein Font-Editor, der UltraScript-Fonts für die bisherigen ST-Programme verfügbar machen soll, in Arbeit.

Fazit

PostScript ist eine ziemlich umfangreiche Sprache. Natürlich konnten wir daher nicht alle Funktionen durchprobieren. Mit den von uns getesteten Programmen traten aber keine Probleme auf, soweit sie nicht die Behandlung von Fonts betreffen. Das Handbuch zu UltraScript zählt eine Reihe von kleineren Unterschieden zwischen PostScript und UltraScript auf. Es ist somit möglich, PostScript-Code zu erzeugen, der nicht unter UltraScript läuft oder zu einem etwas unterschiedlichen Bild führt. Die meisten dieser Punkte gehören aber zu Techniken, die Adobe im Reference Manual sowieso als ‘not recommended' deklariert. In der Praxis hatten wir keine Probleme.

Solange die Font-Frage nicht geklärt ist, ist ein sinnvoller UltraScript-Einsatz nur Programmierern möglich, die eigene Programme mit PostScript-Ausgabe ausstatten wollen. Ein PostScript-Treiber für ein objektorientiertes Grafikprogramm oder Konkurrenz für Adobe Illustrator und Co. könnte es somit auch bald auf dem ATARI geben. Auf jeden Fall macht die Grafikprogrammierung mit PostScript viel Spaß, der allerdings mit 499,- DM nicht ganz billig ist. Wenn das Font-Problem gelöst ist, wird UltraScript auf dem ST ein sehr nützliches Werkzeug für professionelle Druckvorlagen werden.

CS

Bezugsadresse:

Alle ATARI-Fachhändler



Aus: ST-Computer 05 / 1989, Seite 30

Links

Copyright-Bestimmungen: siehe Über diese Seite