logo_90
Uni ZH | Informatikdienste | PostScript
  1. Display PostScript
  2. Display PostScript NX (DPS-NX)

1. Display PostScript

Display PostScript bietet dem Workstation-Benutzer die gleichen Möglichkeiten, welche PostScript zu einem Printing-Standard für "Text und Grafik" gemacht haben. Ein Rechner verkehrt mit dem Drucker mittels der Seitenbeschreibungssprache PostScript. Demgegenüber verkehrt ein Programm mit dem X-Server mittels X-Protokoll, schickt also Requests zum Zeichnen etc. und erhält dabei Meldungen über Events. Wenn ein Programm mit dem Bildschirm-Server mittels PostScript kommuniziert, ergeben sich zwei Vorteile: Aber es gibt auch eine Schattenseite: PostScript ist nicht nur aufwendiger als das X-Protokoll, sondern es besitzt auch eine verlängerte Lernkurve. Und der Programmierer muss etwa ein halbes Dutzend Bibliotheksfunktionen aufrufen, bevor er einen ersten Strich oder Schriftzug zeichnen kann. Man kann PostScript-Befehle einzeln als C-Funktionen aufrufen. Aber viel effizienter ist eine C-Funktion, die viel PostScript auf einmal enthält; eine solche kann der Entwickler mit dem Werkzeug PSWrap aus PostScript erzeugen lassen.

Sie finden hier eine 17-seitige Einführung Display PostScript und X11 mit zwei einfachen Beispielen einer DPS/X-Anwendung (pdf).

Zwei Wege führen zu Display PostScript

Um mit Display PostScript zu programmieren, stehen Ihnen sowohl beim X-Window-System als auch bei NextStep zwei Wege offen:
  1. Sie verwenden PostScript-Operatoren in Form von "Client Library"-Aufrufen, z.B. PSsetrgbcolor(.0, 1., .0). Die Client Library ist eine Prozedurensammlung, welche die Schnittstelle zwischen einer Client-Anwendung und Display PostScript (dem Bildschirm-Server) bildet. Bei Display PostScript führt der PostScript-Server einen eigenen Execution Context für jede Applikation, da der Benutzer oder die Benutzerin manchmal mehrere Applikationen gleichzeitig aktiviert hat. Die aktuelle Ausführungsumgebung wird bei jedem Aufruf einer DPS-Funktion angegeben. Beispiel:
    DPStranslate (context, 100.0, 100.0);
    
    Dabei gibt context den Execution Context an, in dem der PostScript-Operator ausgeführt werden soll. Das Argument "context" ist ein DPSContext, der in dpsclient.h definiert ist. Im Gegensatz zu den Funktionen mit dem Praefix PS ist das erste Argument einer DPS-Funktion immer ein DPSContext. Wenn Sie es nur mit einer einzigen Ausführungsumgebung zu tun haben, könnten (und sollen) Sie die Funktion PStranslate( ) statt DPStranslate( ) aufrufen.

  2. Sie nutzen den Praeprozessor PSWrap, der Ihre PostScript-Fragmente in C-Code übersetzt. Dieser Weg ist der einfachere. Die PostScript-Fragmente müssen keineswegs vollständige Programme sein; eine PSWrap-Definition (kurz: Wrap) baut z.B. einen Pfad auf, definiert eine PostScript-Prozedur, setzt einen Schriftzug oder zeichnet ein grafisches Objekt. PSWrap wandelt ein .psw-File in ein C-File um, worauf der C-Compiler ein Objektmodul erzeugt, das dann gebunden werden kann. Dabei wird das "eingewickelte" PostScript-Programm weder interpretiert noch überprüft. Der PostScript-Interpreter entdeckt einen PostScript-Fehler daher erst bei der Ausführung einer Anwendung. Auf der UNIX-Workstation finden Sie allfällige Fehlermeldungen im Konsolenfile.

    Bevor eine DPS/X- oder NextStep-Anwendung eine Wrap-Definition aufrufen kann, kommt das Werkzeug PSWrap zum Einsatz. Die Umwandlung erfolgt mit dem Befehl "pswrap". Beispiel:

    pswrap hitherz.psw -o hitherz.c 
    
    PSWrap liest im Beispiel das File hitherz.psw und schreibt in das File hitherz.c.
Jede Display-PostScript-Applikation enthält mindestens vier Elemente:

Der C-Code des DPS/X-Client

Der C-Code einer einfachen DPS/X-Anwendung, welche die Mausposition abfängt und ein grafisches Objekt zeichnet, ist nach folgendem Muster angefertigt:
XCreateWindow( ) /* bildet Drawable */
Zuerst erzeugt die Xlib-Prozedur XCreateWindow() ein neues X-Fenster bzw. ein X-Drawable.
XCreateGC( ) /* bildet GC */
Die Xlib-Prozedur XCreateGC() gibt die X-Ressource "Graphics Context" an, d.h. die Wiedergabeattribute, mit denen gezeichnet werden soll.
XDPSCreateSimpleContext( ) /* bildet ctxt */
Nachdem Drawable und GC festgelegt sind, kann diese Prozedur nun den "Execution Context" von PostScript erzeugen. Jetzt folgt die Ereignis-Schleife (main event loop), welche alle Ereignisse behandelt:
while (TRUE) 
{
	XEvent event;
	XNextEvent( ) /* liest naechstes Ereignis */

	switch(event.type) {

  		case ButtonRelease:
		     PSitransform( ) /* konvertiert x und y */
		     PSWDraw( )	     /* Wrap zeichnet Objekt */
         	}
}
Bei der Uebernahme des nächsten Ereignisses durch XNextEvent() werden die Koordinaten des Mauszeigers im Datensatz "event record" abgelegt. Falls ein bestimmtes Ereignis, z.B. "ButtonRelease", eintritt, wandelt die Prozedur PSitransform() die Zeigerposition in das PostScript-Koordinatensystem um. Schliesslich kann die Wrap-Definition an der Position des Mauszeigers ein bestimmtes Objekt zeichnen. PSitransform ist eine Komponente der DPS Client Library, während PSWDraw vom Benutzer entwickelt worden ist.

Es ist typisch für eine DPS/X-Anwendung, dass PSWrap-Definitionen die grafischen Objekte beschreiben, während das C-Programm den Ablauf steuert. Dabei braucht der PostScript-Programmierer keine Rücksicht zu nehmen auf die Auflösung des Bildschirms, die vorhandenen Farben und die Schriftgrössen.

Plattformen

Eine DPS/X-Anwendung könnte z.B. auf einer IBM RS/6000 wie folgt geladen und ausgetestet werden:
	cc -ldps -lX11 -lm main.c
Das Flag "-ldps" steht für die PostScript Client Library. Das Programm ist auch auf anderen Plattformen lauffähig. Auf anderen Workstations lautet der Ladeaufruf wie folgt:
	cc main.c -ldps -lXext -lX11 -lm
Bei Solaris befinden sich die benötigten Libraries unter /usr/openwin/lib. (Zum Laden und Testen käme bei NextStep der ProjectBuilder zum Zuge.)

Als X-Server konnte früher nur eine IBM-Workstation, eine Sparc-Workstation oder eine Iris-Workstation von Silicon Graphics eingesetzt werden. Ein gewöhnlicher X-Server war nicht ausreichend -- es musste ein DPS/X-Server sein. Dies hat sich nun mit DPS-NX geändert! Der DPS-NX-Agent ermöglicht es, Display PostScript an jedem beliebigen X-Terminal zu fahren. Hat sich allerdings nicht durchgesetzt.


2. Display PostScript NX (DPS-NX)

In the past, Display PostScript technology was available only as a part of operating systems and windowing systems. Not all users of the X Window System has access to Display PostScript graphics. Now, with Display PostScript NX software, X application developers can enjoy the benefits of Display PostScript on systems that have not incorporated the Display PostScript extension. By bundling Display PostScript NX software with your Display PostScript application, you can ensure that your application will run wherever X runs.

DPS-NX
Communicating with Display PostScript NX software

Display PostScript NX software is a host-based program that contains the PostScript interpreter. In this case, Display PostScript is separated from the X server. Instead of being integrated with the X Window System, the software communicates with the X server in the same way an application does. This arrangement lets your Display PostScript application create high-quality fonts and graphics on any X server, including X terminals and PCX servers.

The Display PostScript NX agent is a separate process from the application. The agent contains the PostScript interpreter. It executes the PostScript language code and converts it into X drawing primitives. These drawing primitives are sent to the X server for rendering in the application window. The agent does not tie up the network by downloading large bitmaps; rather, it communicates with the X server in high-performance X protocol. The agent has characteristics of both an X server (for example, it can accept network connections, process protocol requests, and multiplex simultaneous accesses) and an X client (for example, it sends drawing requests to the X server through Xlib).

Mehrere Anwendungen können gleichzeitig den gleichen DPS-NX-Agent benutzen. Erst Display PostScript ermöglicht es letztlich, eine Vielfalt von Schriften gut leserlich am Bildschirm darstellen zu können. Besonders wichtig ist dies für Acrobat-User, die PDF-Dokumente betrachten möchten.

Literatur

Adobe Systems Inc. (1990), PostScript Language, Reference Manual, 2nd Edition (red book) Addison-Wesley.

Adobe Systems Inc. (1992), Programming the Display PostScript System with NextStep (purple book) Addison-Wesley.

Adobe Systems Inc. (1993), Programming the Display PostScript System with X (orange book) Addison-Wesley.

Adobe Systems Inc. (1990), X Window System Programmer's Supplement to the Client Library Reference Manual, IBM SC23-2211.

Jones, Oliver (1991), Einführung in das X Window System, Carl Hanser Verlag.

Vollenweider, Peter (1992), PostScript für Workstations -- Display PostScript usw. Addison-Wesley. BUCH vergriffen, out-of-print

Ueberblick X11-Fonts.


Uni ZH | Informatikdienste | PostScript
HTML 3.2 Last update: Thursday, 11-Oct-2001 21:40:24 CEST by vo