
Drucken in MagicMacX
Einleitung
Beim Atari wurde ein Drucker i.a. an die parallele, seltener eine serielle, Schnittstelle angeschlossen. Egal, was für ein Drucker oder ein Druckertreiber verwendet wurden, letzendlich wurden immer Rohdaten auf die Schnittstelle geschrieben.
Dieses Konzept ist für MacOS X nicht mehr verwendbar (es sei denn, es gelänge, eine Centronics-Druckerschnittstellenkarte samt Treiber zu entwickeln).
Drucken unter Calamus®
Wenn Sie unter Calamus drucken, ist dies eigentlich kein Thema mehr, denn Calamus hat seinen eigenen Pfad ins MacOS und übernimmt die Druckdialoge des Betriebssystems. Die folgenden Ausführungen gelten daher für alle Programme, die nicht direkt auf das Mac-Betriebssystem zugreifen können, z.B. Papyrus.
Drucken in MacOS X
MacOS X-Programme drucken über unterschiedliche Methoden:
- Cocoa-Programme drucken über eine entsprechende Cocoa-Druckerschnittstelle.
- Carbon-Programme drucken über den Carbon Printing Manager.
- Klasische Unix-Programme verwenden die Kommandoszeilenbefehle lp bzw. lpr zum Senden von Dateien (in unterschiedlichen Formaten) an einen Drucker. Diese Kommandos gehören zu CUPS (s.u.).
- Alle Druckvorgänge werden letztendlich (zumindest ab MacOS 10.2 „Jaguar“) von CUPS (Common Unix Printing System) verwaltet. CUPS übernimmt die Steuerung von lokalen und im Netzwerk befindlichen Druckern. CUPS akzeptiert unterschiedliche Dateiformate (bevorzugt Postscript-Daten) und nimmt auch notwendige Konvertierungen vor. Die Konverter z.B. zwischen Postscript, PDF, Rohdaten usw. werden als Filter bezeichnet.
- CUPS stellt, wenn konfiguriert, lokale als Netzwerkdrucker über das Internet Printing Protocol (IPP) für andere Rechner zu Verfügung.
- CUPS verwendet sogenannte backends für die letztendliche Druckausgabe. Ein CUPS-Backend sendet Rohdaten auf die parallele Schnittstelle (nicht beim Mac), auf eine serielle Schnittstelle (bei manchen älteren Macs), auf USB-Drucker sowie auf Netzwerkdrucker. Beim Netzwerkdruck (der Drucker hängt an einem Printserver bzw. einem anderen Rechner, der als Printserver fungiert) werden die Protokolle Internet Printing Protocol (IPP) sowie das ältere LPR/LPD-Protokoll unterstützt.
- Die Kommunikation mit USB-Druckern ist dagegen nicht einheitlich genormt, weshalb das USB-Backend nur bei manchen Druckern funktioniert, stattdessen werden herstellerspezifische Treiber benötigt.
Es gibt also keine Schnittstelle, um einzelne Bytes an einen Drucker zu senden. Wohl aber kann man Rohdaten ungefiltert an einen Drucker schicken, nämlich über das Kommandozeilenprogramm lp mit dem Parameter -raw.
Leider sind jedoch viele der beim Mac vorhandenen Druckertreiber nicht CUPS-konform und bieten daher die Funktion "lp -raw" nicht an. Da die Kommunikation über die USB-Schnittstelle proprietär ist, können häufig auch keine besseren Treiber wie gutenprint (früher “gimp-print “) oder hpijs eingesetzt werden. Auf solche „abgeschotteten“ Drucker kann MagicMacX daher auch keine Daten schicken bzw. ausdrucken.
Drucken auf dem Atari
Wenn man annimmt, ein Drucker sei an die parallele Druckerschnittstelle („Centronics”) angeschlossen, dann gibt es unterschiedliche Ebenen des Atari-Betriebssystems, über die der Drucker angesprochen werden kann, bis hinunter zum direkten Hardwarezugriff:
- Die höchste Abstraktionsebene zur Druckerausgabe bietet das GEM-Programm OUTPUT.APP. Dieses erwartet eine Datei im sogenannten VDI-Metafile-Fomat. Diese Dateien haben zumeist die Endung .GEM und enthalten im wesentlichen VDI-Zeichenbefehle zur Anzeige von Daten (In Windows wäre das ein .WMF-Datei, auf dem Mac eine .pdf-Datei). Das OUTPUT-Programm verwendet das VDI bzw. das GDOS (s.u.) zur Ausgabe auf einen Drucker o.ä.. Die Methode mit OUTPUT.APP ist zwar von Digital Research, dem Erfinder von GEM, so erdacht worden, jedoch auf dem Atari sehr selten angewandt worden; stattdessen wird fast immer direkt gedruckt, ohne Umweg über eine Datei.
- Die zuletzt für den Atari empfohlene Druckmethode führt über das Virtual Device Interface (VDI) bzw. den Teil des VDI, der die Ausgabegeräte verwaltet, das sogenannte Graphics Device Operating System (GDOS). Statt auf den Bildschirm werden die Zeichenbefehle einfach an ein anderes Ausgabegerät geleitet, das kann ein Drucker sein, aber auch ein Fax, eine .GEM-Datei oder eine Bitmap-Datei wie .IMG o.ä..
- Über GEMDOS kann eine Gerätedatei wie PRN: oder U:\DEV\LPT usw. geöffnet werden, und es können Datei darauf geschrieben werden. Hier handelt es sich immer um Rohdaten, die bereits in der Sprache des Druckers vorliegen müssen. Weiterhin gibt es auch noch die eigentlich veralteten Aufrufe Cpronout() und Cprnos().
- Eine Ebene tiefer und vom GEMDOS aufgerufen liegen die BIOS-Funktionen Bconin(), Bconstat(), Bconout() und Bcostat() zur Ein- und Ausgabe von Einzelzeichen mit Statusabfrage.
- Die eigentlichen BIOS-Funktionen können auch über Funktionstabellen aufgerufen werden, unter Umgehung der Trap-Behandlung.
- Leider gab es auch einige Atari-Programme, die direkt mit der Hardware kommunizieren, unter Umgehung des Betriebssystems.
Nur die obersten beiden Methoden bieten Geräteunabhängigkeit, d.h. beinhalten einen Druckertreiber. Für alle anderen Methoden müssen die Daten aufbereitet werden, d.h. die Applikation benötigt ihren eigenen Druckertreiber (wie .B. 1st Word und Wordplus).
Drucken über GDOS bzw. NVDI
MagicMacX enthält - wie TOS - selbst kein GDOS. Damit steht lediglich eine Bildschirmausgabe, jedoch keine Druckerausgabe über VDI zur Verfügung. Wenn Sie Druckausgabe über GDOS/VDI benötigen, müssen Sie NVDI oder ein anderes GDOS mit den entsprechenden Druckertreibern installieren.
NVDI bietet leider nicht für alle heute erhältlichen Drucker bzw. Druckerfamilien Treiber. Zur Verfügung stehen lediglich (ohne Gewähr, da genauere Informationen nicht verfügbar waren):
- PCL-Drucker. Die Seitenbeschreibungssprache Printer Control Language stammt ursprünglich von Hewlett-Packard, wird aber auch von vielen anderen Druckerherstellern unterstützt.
- NEC-Drucker. Die 24-Nadeldrucker der Familie P6, P7, P60 usw. werden unterstützt.
- Epson-Drucker. Diese Drucker werden mit der Beschreibungssprache Esc/p betrieben. NVDI unterstützt wohl die meisten davon.
Insbesondere gibt es keine Möglichkeit, auf Postcript-Drucker zu drucken, und natürlich werden auch keine "host based"-Drucker (auch als GDI-Drucker oder Windows-Drucker bezeichnet) unterstützt.
In der allergrößten Not kann NVDI auch in ein Bitmap (IMG) drucken, bei entsprechend hoch gewählter Auflösung kann dieses Bild dann über den Mac (z.B. liest GraphicConverter IMG-Dateien) ausgedruckt werden.
Druckeremulation auf BIOS-Ebene
Wie schon MagicMac für MacOS Classic bietet MagicMacX eine Druckeremulation auf Atari-BIOS-Ebene. In der obigen Aufzählung ist dies Punkt (5.). Die Druckdaten werden zunächst in eine Datei geschrieben. Diese temporäre Datei wird mittels eines konfigurierbaren (siehe Druckausgabe konfigurieren) Kommandos an einen Drucker geschickt (oder auch anderweitig verarbeitet).
MagicMac für MacOS Classic bot eine direkte Ausgabe der Daten auf eine serielle Schnittstelle an. Diese Funktionalität ist in MagicMacX immer noch vorhanden, eine Druckausgabe wird dazu vom Programm File2Serial ausgeführt (s.u.).
Zusätzlich gab es für MagicMac ein kostenpflichtiges NVDI 5, welches, neben schnelleren Bildschirmausgaben, auch einen GDOS-VDI-Treiber enhielt, welcher zur Druckausgabe VDI-Aufrufe nach Quickdraw wandeln konnte. Damit konnte jedes modernere Atari-Programm, welches die GDOS-Methode zum Drucken verwendet, hervorragende Druckausgaben auf jedem beliebigen am Mac angeschlossenen Drucker erzielen. Leider müßte der zugehörige Treiber MACPRN.SYS für MagicMacX und OS X angepaßt werden, so daß dieser Weg nun leider nicht mehr möglich ist.
Also bleibt in MagicMacX der klassische Weg, den Atari die Druckaufbereitung erledigen zu lassen (egal ob per GDOS oder per proprietärem Treiber)und die Druckdaten schließlich auf die virtuelle parallele Schnittstelle ("U:/dev/prn") auszugeben.
File2Serial
Einige ältere Macs wie der beige Power Mac G3 von 1997 und 1998 hatten noch bis zu zwei serielle Schnittstellen (RS 422), an welche Drucker oder Modems angeschlossen werden können. Serielle Drucker, die Mac-kompatibel waren, gab es außer von Apple noch von HP und Epson. Neuere Macs, wie z.B. der blauweiße G3 von 1999 hatten keine serielle Schnittstelle mehr, diese ließ sich jedoch nachrüsten.
Ist an den Mac ein serieller Drucker angeschlossen, so wird dieser jedoch von MacOS X nicht mehr unterstützt (MacOS X kann nur auf USB-Drucker und Netzwerkdrucker drucken). Andererseits wird eine vorhandene serielle Schnittstelle sehr wohl, zumindest eingeschränkt unterstützt.
Syntax des Kommandos File2Serial:
Syntax:
File2Serial [-d=devpath] [-r] [-b=baudrate] file
Dabei bedeuten:
-r schaltet RTS/CTS ein
Default-Ausgabegerät ist /dev/cu.printer
Baudraten: ...,9600,14400,19200,28800,38400,56700,76800,115200,230400
Feste Einstellungen: keine Parität, 1 Stop-Bit
File2Serial umgeht das Drucksystem und schreibt direkt auf die serielle Schnittstelle. Die Kommandosyntax wird beschrieben, wenn man das Programm ohne Parameter aufruft. HP-Drucker wie der HP870 werden angesprochen über 57600 baud und RTS/CTS.
im Einstellungs-Dialog, Unterdialog "Geräte", Eingabefeld "Druck-Kommando" ist %s der Platzhalter für den Dateinamen der Spool-Datei, das Kommando könnte dann lauten:
/usr/local/bin/File2Serial -r -d=/dev/cu.modem -b=57600 %s
CUPS SerialBackend
Unter dem Pfad /usr/libexec/cups/backend liegen alle zu CUPS gehörenden "backends". Wie man sieht, gibt es u.a. backends für Firewire, ipp, lpd, SMB (das Windows-Protokoll) und USB, jedoch selbst bei MacOS X „Tiger“ keinen "serial"; diesen hat Apple entweder nicht hinbekommen oder vergessen, oder er gilt als überflüssig.
Für serielle Drucker kann man jedoch einen seriellen
„backend“ nachinstallieren. Diesen „backend“
können dann Druckertreiber wie gutenprint, hpijs oder
turboprint benutzen. Dann wird der Drucker auch vom Betriebssystem
unterstützt. Näheres zum "serial printing" unter:
"http://my.vbe.com/~mbrought/serial_printing.html"
Netzwerkdrucker
Zum anderen kann der Drucker ein Netzwerkdrucker mit
LPR/LPD-Protokoll sein. Diesen kann man direkt ansprechen über
(alles in einer Zeile!):
/System/Library/Printers/IOMs/LPRIOM.plugin/Contents/MacOS/LPRIOMHelper
-P <Drucker_IP_Adresse>
-Q <Druckername_unter_MacOS X>
-U <Benutzername>
<Zu_druckende_Datei>
Dabei kann das "-U" und der Benutzername weggelassen werden. Das ganze
ist auch mit dem Win-LPD getestet, man kann damit also auch auf Drucker
drucken, die an einem (eingeschalteten!) Windows-Rechner hängen.
Andernfalls (z.B. bei einem lokalen USB-Drucker oder bei einem solchen
Drucker, der von OS X erkannt wird) kann man im Modus "raw" über
das Drucksystem drucken, dies ist der empfohlene Weg. Das Kommando
sieht dann so aus:
lpr -P <Druckername> -o raw %s
Den Druckernamen erfährt man z.B. in der Kommandozeile mit dem Kommando "lpstat -p", dieser listet alle Drucker auf.
Achtung: Leider scheint der "raw"-Modus nicht von allen kommerziellen
Druckertreibern
unterstützt zu werden, Epson ist hier ein leuchtendes Beispiel
für schlechte Politik. In diesem Fall empfiehlt es sich, einen
alternativen Treiber zu installieren, z.B.
gutenprint (fast jeder gängige Drucker wird unterstützt),
turboprint (kommerziell)
oder hpijs (HP-Tintenstrahler). Diese Installation beinhaltet
üblicherweise auch
ein ghostscript, dann kann man auch von Mac-Programmen aus über
diesen
Treiber drucken (geht erst ab OS X 10.2).
Eine ausführliche Anleitung zur Einrichtung eines Epson-Druckers für MagicMacX
findet man im Internet unter "http://gerald-dietze.de/dsi.html".