
 gemgs 1.3 - Ghostscript fr Atari
 ---------------------------------

Tja, eigentlich war die Version 1.2 vom Januar 1999 ja die offiziell letzte 
von mir, aber nun gibt doch etwas neues!
In der Zwischenzeit habe ich mein Studium beendet und bin nach Frankfurt
gezogen. Da der TT bis auf weiteres in Hamburg steht, ich der Atari-
Plattform aber trozdem treu bleiben wollte, habe ich mir auf dem Linux-PC 
STonX mit N.AES installiert und dazu einen Cross-Compiler, um Atari-Programme 
bersetzen zu knnen. 
Als diese neue Umgebung stabil lief, erschien GS Version 6.01 von Aladdin - und
da dachte ich mir, gemgs ist ein guter Test fr die neue Programmierumgebung!
An gemgs 1.3 ist im wesentlichen der GS-Kern 6.01 neu. Auerdem sind ein paar
Laserdruckertreiber dazugekommen (s.u.) 


Hier folgt nun die eigentlich Anleitung zu gemgs:
-------------------------------------------------

Bei gemgs handelt es sich um einen Port des bekannten Postscript-Anschau-
und -druckprogramms von GNU fr Atari TOS/MiNT/MagiC.
Ich habe den Port der Version 3.53 von Tim Gallivan als Grundlage genommen 
und den gesamten Quelltext aufgerumt und berholt. Das Programm bekam eine
neue Oberflche, die dem europischen GEM-Standard gengt :-) 
Whrend der Entwicklung kamen neue Ghostscript-Versionen heraus, die dann
gleich in gemgs bernommen wurde. So steht mit gemgs ein aktuelles
Ghostscript 6.01 fr Atari zur Verfgung, mit dem neben PS und EPS nun auch 
PDF-Dateien auf dem Atari angeschaut (s.u.) und ausgedruckt werden knnen.


Allgemeines:
------------

Da es sich bei Ghostscript eigentlich um ein kommandozeilen-orientiertes
Programm handelt, ist fr die Anzeige im Fenster eigentlich ein zweites
Programm erforderlich (unter UNIX z.B. ghostview), da parallel zu dem
eigentlichen Interpreter luft. Tim Gallivan hat in seinem Port das
gesamte GEM-Frontend mit in den Interpreter integriert. Dies hat den 
Vorteil, da keine Kommunikation mit einem zweiten Programm abluft und 
so kein Multitasking-System notwendig ist. Der Nachteil dieser Methode ist 
jedoch, da der GEM-Teil nur zu bestimmten Zeitpunkten aktiv ist um z.B. 
Fenster neuzuzeichnen. Wird gerade eine Grafik interpretiert, ist der GEM-
Teil nicht aktiv und es scheint so, als ob da etwas hngen geblieben ist.

Dieses Konzept wurde in gemgs beibehalten, da ich selbst gerne ein gs
haben wollte, da auch noch unter single-TOS luft und ich nicht alles
neu programmieren mute. Eine mit Pipes realisierte Kommunikation wre
unter MiNT vermutlich kein Problem, da man den UNIX-Treiber fr X11 als 
Vorbild nehmen knnte. Diese Version wrde dann aber wieder nicht mit 
MagiC funktionieren, da MagiC immer noch kein fork() untersttzt :-((

Wie bereits erwhnt basiert gemgs auf der aktuellen Ghostscript Version
6.01. In den Interpreter sind folgende Treiber eincompiliert:

  Nadeldrucker:
	epson		Epson-compatible dot matrix printers (9- or 24-pin)
	lq850		Epson LQ850 printer, also good for Canon BJ300 (LQ850 emu)
	necp6		NEC P6/P6+/P60 printers at 360 x 360 DPI resolution

  Tintendrucker:
	bj10e		Canon BubbleJet BJ10e
	bj200		Canon BubbleJet BJ200
	bjc600		Canon Color BubbleJet BJC-600, BJC-4000 and BJC-70
	bjc800   	Canon Color BubbleJet BJC-800
	cdj500		H-P DeskJet 500C (same as cdjcolor)
	cdj550		H-P DeskJet 550C/560C/660C/660Cse
	deskjet 	H-P DeskJet and DeskJet Plus
	djet500  	H-P DeskJet 500; use -r600 for DJ 600 series
	st800		Epson Stylus 800 printer
	stcolor		Epson Stylus Color

  Laserdrucker:
  	cljet5		H-P Color LaserJet 5/5M
  	cljet5c		H-P Color LaserJet 5/5M
	fs600		Kyocera FS-600 (600 dpi)
	laserjet  	H-P LaserJet
	ljetplus  	H-P LaserJet Plus
	ljet2p		H-P LaserJet IId/IIp/III* with TIFF compression
	ljet3		H-P LaserJet III* with Delta Row compression
	ljet4		H-P LaserJet 4 (defaults to 600 dpi)
	lj5mono		H-P LaserJet 5 & 6 family (PCL XL), bitmap	
	lj5gray		H-P LaserJet 5 & 6 family, gray-scale bitmap
	pxlmono		H-P black-and-white PCL XL printers (LaserJet 5 and 6 family)
	pxlcolor	H-P color PCL XL printers (none available yet)
	slm 		Atari SLM laser printer

  Dateiformate:
	epswrite	EPS output (like PostScript Distillery)
	gemimg		Atari GEM image file format
	jpeg		JPEG format, RGB output
	jpeggray	JPEG format, gray output
	pdfwrite	PDF output (like Adobe Acrobat Distiller)
	pngmono		Monochrome Portable Network Graphics (PNG)
	pnggray		8-bit gray Portable Network Graphics (PNG)
	png16		4-bit color Portable Network Graphics (PNG)
	png256		8-bit color Portable Network Graphics (PNG)
	png16m		24-bit color Portable Network Graphics (PNG)
	pswrite		PostScript output (like PostScript Distillery)
	tiff12nc	TIFF 12-bit RGB, no compression
	tiff24nc	TIFF 24-bit RGB, no compression (NeXT standard format)
	tifflzw		TIFF LZW (tag = 5) (monochrome)
	tiffpack	TIFF PackBits (tag = 32773) (monochrome)
 

Zur Installation:
-----------------

gemgs 1.3 besteht aus insgesamt sechs Archiven:
	
	gemgs13-bin.lzh		Das Programm fr ST und MagiCMac/PC.
	gemgs13-doc.lzh		Dokumentation und Beispieldokumente von Aladdin gs 6.01.
	gemgs13-fnt1.lzh	Die Fonts von Aladdin 6.0
	gemgs13-fnt2.lzh
	gemgs13-lib.lzh		Die PS-Dateien von Aladdin 6.01.

	gemgs13-src.tgz		Quelltext sowie Patches fr den gs-Kern 6.01.

Wenn man die Archive ausgepackt hat, sollte folgende Datei-Struktur entstanden
sein:

	gemgs/
		doc/			gs 6.01 Anleitung im HTML-Format
		
		example/		Beispieldokumente
		
		fonts/			Zeichenstze
		
		lib/			Steuerdateien fr gs 6.01
		
		pdf2ps/			Tool zur Extraktion der Seiteninfos aus PDF-Dateien
		
		gemgs.gtp		Der Interpreter im GEM-Gewand als ST und TT-Version
		gemgs030.gtp
		gemgs.rsc
		gemgs.cfg		

		LiesMich.txt	Diese Datei
		History.txt		Entwicklungsgeschichte

Nachdem die Archive ausgepackt sind, sollte man die Datei gemgs.cfg mit
einem Editor ffnen.
In die Datei sollten die Pfade zu den Steuerdateien und den Fonts eingetragen 
werden:

	setenv GS_LIB=X:\gemgs\lib,X:\gemgs\fonts

Zustzlich zu den hier eingetragene Pfaden sucht gemgs die Dateien auch auf
den UNIX-Pfaden /usr/lib/ghostscript/6.01/lib bzw. /usr/lib/ghostscript/fonts.

Zustzlich knnen folgende Dinge eingetragen werden:

  GDOS-Font fr das Console-Fenster (ID und Gre in Punkt)
	fontid 64 
	fontpts 9

  Environment:
  	setenv TMPDIR			Temporrverzeichnis

  	setenv GS_DISPLAY		Das steuert irgendetwas bei der Farbausgabe.
  							Da ich nur monochrom habe, kann ich dazu 
  							nichts zu sagen. 
  							gemgs versteht jedenfalls 'chunky8' und
  							'truecolor'.

  	setenv GS_OPTIONS		Hier kann man wohl einen Parameter-String
  							angeben, aber ich wei nicht, wie der sich
  							auf gemgs auswirkt :-)

	setenv GS_DEVICE		Setzt das Default-Device. Wertet gemgs z.Zt.
							nicht aus!	

Von gemgs aus werden ledeglich die Fensterposition und -gre sowie 
die benutzerdefinierte Auflsung in diese Datei gesichert. Die Zeilen mit
'setenv' knnen nur mit dem Editor verndert werden!!


Zur Bedienung:
--------------

Wenn gemgs gestartet wird, erscheint das Men und es ffnet sich das 
Console-Fenster. Dann dauert es einige Zeit, bis sich der Interpreter 
initialisiert hat (eine der o.g. Situationen, wo der GEM-Teil inaktiv 
ist!) gemgs ist bereit, sobal im Console-Fenster die Eingabeaufforderung 
erscheint:

	GS>

Wer Postscript gerne von Hande programmieren mchte, kann jetzt damit 
beginnen, die Befehle einzutippen :-)
Jeder andere, der nur eine Datei ansehen mchte, kann dies nun ber den 
Menpunkt 'Datei/ffnen' tun.

gemgs wertet seine Kommandozeile aus, d.h. man kann es als Applikation fr
*.ps, *.eps und *.pdf anmelden. gemgs wertet auch die Nachricht VA_START aus
und es knnen Dateien per Drag&Drop auf die Fenster abgelegt werden, um
sie zu ffnen. 

Beim ffnen verhlt sich gemgs etwas anders als die alte Version 3.54. 
Zunchst versucht gemgs herauszubekommen, wieviele Seiten das Dokument 
hat. Gelingt dieses, werden die Seiten einzeln aus dem Dokument heraus-
gezogen (auf das Temp-Verzeichnis) und knnen einzeln angeschaut werden.
Man erkennt diesen Seiten-Modus an verschiedenen Dingen:

	- In der Console taucht nicht der Dokumentdateiname auf sondern zwei
	  Zeilen der Art 'p:/gs_pro.ps' und 'p:/gs_pg1.ps'
	- Im Fenstertitel erscheint eine Seitenangabe, bestehend aus der
	  aktuellen Seite und der Gesamtanzahl an Seiten.

Im Seiten-Modus kann beiebig durch das Dokument gewandert werden. Dazu
sind im Men die drei Punkte vorhanden:
	Nchste Seite
	Vorherige Seite
	Gehe zu Seite

Auf der rechten Maustaste liegt ein Popup, da die Eintrge aus dem
Datei-Men enthlt. Damit lt sich recht einfach durch ein Dokument
navigieren.

Der Seiten-Modus sollte eigentlich bei allen mehrseitigen Dokumenten 
funktionieren. 
Sollte er mal nicht	funktionieren, kann nur vorwrts durch das Dokument
per Return im Consolefenster geblttert werden. Auerdem mu man durch
das gesamte Dokument hindurch, bevor ein neues geffnet werden kann!!
Wer solch ein Dokument hat, mge es mir bitte zukommen lassen!	
	

Wie drucke ich mit gemgs?
-------------------------

Annahme: gemgs ist bereits gestartet und wartet auf die Eingabe.
Man ffnet den Dialog 'Ausgabe'. Dort fhrt man folgende Schritte
aus:
	1. Dokument whlen. War schon ein Dokument zur Anzeige geffnet,
	   steht der Name bereits in dem entsprechenden Feld.
	2. Ausgabegert whlen. Es erscheint ein Dialog, in dem die Art
	   der Ausgabe (Drucker oder Dateiformat) aktiviert wird und
	   ein entsprechender Treiber ausgwhlt wird.
	   Wird der Dialog verlassen, schaltet der Interpreter um und
	   bringt eine Meldung in dem Console-Fenster.
	3. Ausgabekanal whlen. Es stehen der Druckerport (ber GEMDOS)
	   sowie die Umleitung in eine Datei zur Verfgung. 
	   Die gettigte Auswahl wird wieder im Console-Fenster besttigt.
	4. Auflsung einstellen. Es stehen einige Auslsungen zur Verfgung,
	   ist die bentigte nicht verfgbar, whlt man im Popup 'frei'
	   und trgt die Auflsung in das Editfeld ein.
	5. Endlich, nun darf man den 'start'-Button drcken und nach einiger
	   Zeit sollte der Drucker angfandgen zu drucken bzw. die Datei
	   erzeugt werden.

Standardmig nimmt gemgs DIN A4 als Papierformat an. Das Format lt
sich ber den entsprechenden Menpunkt ndern. 
Leider knnen die gettigten Einstellungen nicht in der CFG gesichert
werden, da sie beim Start von gemgs nicht automatisch eingestellt werden
knnen. Dies ist ein entscheidender Nachteil, wenn die GEM-Oberflche in
den Interpreter integriert wird.

Wem dieses ganze GEM-Geklicke zu viel ist und er den schnellen Weg ber
die Kommandozeile gehen will, kann folgendes z.B. in der Mupfel tippen
oder sich ein entsprechendes Script bauen:

gemgs.gtp --no-gem -dNOPAUSE -sDEVICE=lq850 -r180 -sOutputFile=PRN: doc.ps quit.ps

Das Kommando gibt die Datei mini.ps auf einem Epson-Drucker am Drucker-
port in 180 DPI aus. Die Parameter sollten eigentlich klar sein:
	--no-gem		ohne GEM
	-dNOPAUSE		am Ende eine Seite wird nicht auf Return gewartet
	-sDEVICE=		Drucker/Dateiformat-Treiber
	-rXXX			Auflsung
	-sOutputFile	Ausgabekanal (PRN: fr Drucker)

Das	quit.ps	als letztes fhrt dazu, das sich gemgs nach dem Ausdruck 
beendet.


Wie schaue ich PDF-Dateien an
-----------------------------

Im Prinzip eignet sich gemgs auch, um PDF-Dateien anzuschauen.
gemgs steht dabei vor dem Problem herauszubekommen, wie viele Seiten das
Dokument enthlt. Da es in PDF viele Mglichkeiten gibt, Seiten anzulegen,
ist es relativ kompliziert diese Seiten-Infos zu bekommen. 
Ghostscript behandelt PDF-Dateien grundstzlich so: unter Multitasking-
Umgebungen (UNIX, OS/2, Win32) wird parallel zu dem eigentlichen Viewer ein 
zweiter gs-Proze im Hintergrund gestartet, der mit Hilfe eines bestimmten 
Skripts die Seiten-Infos aus dem PDF in eine Pipe bzw. temporre Postscript-
Datei extrahiert. Das GS-Frontend (GhostView oder GSView) liest dann diese 
Pipe/Datei ein und man kann im Dokument blttern.

Diesen Parallel-Start habe ich in gemgs nicht eingebaut, da das nur auf 
einem Multi-OS mglich ist und ich gemgs gerne auch unter TOS benutzbar 
machen wollte. Bei MagiC wre der Parallelstart vermutlich mit einer Datei 
auf TEMP mglich, perfekt wre es aber nur unter MiNT realisierbar, da man 
dort den ntigen fork()-Befehl fr Prozess-Abspaltung sowie korrekt 
arbeitende Pipes htte. 
Weiterhin sprach gegen den Parallelstart die Tatsache, da fr eine gewisse 
Zeit /zwei/ gemgs im Speicher wren, was auf 'normale' Ataris wegen der 
Gre von gemgs nicht mehr mglich wre.

Um mit gemgs aber denoch in PDF blttern zu knnen, habe ich mir verschiedene 
PDFs geholt und in gemgs einen eigenen kleinen Scanner eingebaut, der mit 
den Test-PDFs sehr gut funktioniert hat. 
Aber kaum war gemgs verffentlich, gab es natrlich jede Menge PDFs, mit 
den der Scanner nicht korrekt arbeitet.
Fr solche Dokumente bleibt nur den oben erwhnten Parallelstart von Hand
durchzufhren.
Dazu startet man gemgs mit folgenden Parametern:

  gemgs -dNODISPLAY -sPDFname=d:/pdf/test.pdf -sDSCname=d:/pdf/test.ps pdf2dsc.ps

Wichtig ist der absolute Pfade der PDF-Datei, da dieser in die erzeugte PS-
Datei eingetragen wird, damit gemgs spter die PDF-Datei finden kann.
Die entstehende PS-Datei wird dann anschlieend mit gemgs geffnet und zeigt
die Seiten der PDF-Datei an. Damit man dieses Kommando nicht von Hand eingeben
mu, liegt gemgs 1.2 das Programm 'pdf2ps.ttp' bei, da gemgs mit den o.g.
Parametern aufruft. 'pdf2ps' mu sich im gleichen Verzeichnis wie gemgs.gtp
befinden und erzeugt aus der bergebenen PDF-Datei unter Beibehaltung des 
Namens die PS-Datei (nur die Endung ndert sich von PDF auf PS).

Die zweite Mglichkeit PDF-Dateien mit gemgs zu lesen, ist die Konvertierung
der gesamten PDF-Datei in eine PS-Datei:

  gemgs --no-gem -dNOPAUSE -sDEVICE=pswrite -sOutputFile=test.ps test.pdf quit.ps

Dabei wird die PS-Ausgabe verwendet, die sich genau wie ein Drucker-Treiber
verhlt. Bei der Konvertierung mu aber beachtet werden, da manche PDF-Dateien
gepackt sind und der entstehende PS-Code dann wesentlich grer wird!


Die wesenlichen Dinge zu gemgs sind hoffntlich klar geworden. Wer mehr 
(allgemeine) Infos zu Ghostscript braucht, mge sich die ausfhrliche Anleitung
gs5man_d.pdf im InterNet besorgen.

Eigentlich gilt ja weiterhin, da ich die Weiterentwicklung eingestellt habe,
aber ich la' das aber jetzt doch mal offen. Ich plane im Moment nichts neues 
aber wer wei, was die Zukunft bringt... ;-)

Christian Felsch
felsch@tu-harburg.de
25 Mrz 2000
