iPRN II  (C) Peter Missel 1994-97

"Ghn, schon wieder ein Beschleuniger fr die Druckausgabe!"

Jawohl, schon wieder einer. Aber einer mit Statusberwachung per Interrupt.
Und ein richtig schneller noch dazu. Fast 40fache Beschleunigung
gegenber TOS kann erreicht werden.

"Und was heit das, Statusberwachung?"

Nun, ganz einfach: Zustzlich zur bei Druckbeschleunigern blichen 
Beschleunigung des Druckens kann iPRN unterscheiden, ob der Drucker 
nur beschftigt oder in einem Fehlerzustand ist (offline, ausgeschaltet, 
kein Papier, nicht angeschlossen...). So wei das System im voraus, ob es 
mglich ist, Zeichen an den Drucker zu senden oder nicht.
Dadurch entfllt die lstige Gedenkminute, wenn man drucken will und 
der Drucker nicht bereit ist. Die Fehlermeldung erscheint sofort.


iPRN II ist Shareware. Die Demoversionen (Programmdatei IPRN2D.PRG,
Versionsnummer 2-xx statt 2.xx) knnen frei verbreitet werden. Nur das
vollstndige und unvernderte Paket IPRN2xxD.LZH darf weitergegeben werden.


Einschrnkungen der Demoversion:
- Die GEMDOS-Beschleunigung wirkt nur beim ersten Ausdruck.
- Die Statusberwachung funktioniert pro Sitzung nur einmal:
  Wenn der Drucker einmal Offline war und wieder Online gesetzt
  wird, deaktiviert sich die Statusberwachung selbst. Dann luft
  alles normal weiter, nur halt wieder mit Gedenkminute bei Druckerfehler.
  Die Beschleunigungswirkung bleibt erhalten.
- Kein Kontrollfeldmodul:
  - Timeouts nicht konfigurierbar
  - Statusberwachung nicht abschaltbar (schaltet sich sowieso von selber ab)
  - keine Deskjet-Weckfunktion

Die registrierten Versionen 1.00 und hher kosten in Deutschland DM 25,-
und US$ 20 im Ausland.


Registrierung
=============
DM 25,- / US$ 20 berweisen an:

Peter Missel, Stadtsparkasse Augsburg, BLZ 72050000, Kto. 1301522.
Als Verwendungszweck "iPRN Vorname Nachname" angeben.

Zur eindeutigen Identifizierung zustzlich eine Postkarte schicken an:
Peter Missel, Greiffstrae 11, 86157 Augsburg, Deutschland.

Oder eMail an Peter Missel @ A im Mausnetz.
(Peter_Missel@a.maus.de fr Benutzer anderer Netze)
Bitte auch hier die vollstndige Postadresse angeben.


Alternativ kann auch in Grobritannien registriert werden:

Hier die Anleitung meines "UK Registration Office Manager" Denesh Bhabuta:

 How to register/order in the UK
 -------------------------------

 If you require Masterdisks please add 1UKP per program, or 0.80UKP per 
 program if registering 5+ programs. Please note the different postage 
 and packing details for commercial items.
 1) Use the included ORDER_FM.TXT or ORDER_FM.UK to select required products
 2) Make a cheque or Postal Order payable to CYBERSTRIDER for total amount
 3) Don't forget to include your details
 4) Send completed order form and payment to CyberSTrider


 How to register/order from outside the UK
 -----------------------------------------
 If you require Masterdisks please add 1.50UKP (for 1 program) and 1.20UKP 
 per prg (for 2-4 programs) and 1 UKP per prg (for 5+ programs) to the 
 total order to cover postage. Please note the different postage and 
 packing details for commercial items.
 Send the money via one of the following methods:
 - A cheque payable in *Pounds Sterling* drawn on a *UK* bank address
 - A Eurocheque
 - An international Post Office Girocheque payable in *Pounds Sterling*
 - An international money order payable in *Pounds Sterling*
 - A cheque in your own currency (add 6 to the total fee for bank
   charges)
 - Cash - in Pounds Sterling, Dollars and DMs. Send cash at your own
   risk... and in a Registered Letter!

 Contact
 -------
 Mail: CyberSTrider, PO Box 78, Manchester M21 8SJ, UK (ceases late 1997)
 E-mail: General queries - dbhabuta@cix.compulink.co.uk
                           denesh@cyberstrider.org
         Support queries - support@cyberstrider.org
         Feedback        - feedback@cyberstrider.org                
 WWW: http://www.cyberstrider.org



Wirkung (Zeichen pro Sekunde)
=============================
                                BIOS               GEMDOS
Rechner                         ohne  mit iPRN       ohne  mit iPRN II
----------------------------------------------------------------------
ST, 8 MHz, TOS 2.06             1800  13500          1650  >64500
ST, 16 MHz, TOS 1.04            3200  >17200
Falcon030, TOS 4.04             3500  bis 36100 *    2930  >115000
Falcon030, TOS 4.04, Bild aus   4500  bis 39370 *          >115000
Falcon030/32 MHz, Bild aus      4800  bis 39370 *          >115000
TT030 ohne FastRAM, TOS 3.06    5600  bis 34100 *
TT030 mit FastRAM, TOS 3.06       ?   bis 41000 *    4760  >72000

(Die "grer als"-Werte sind aus Benchmarks, bei denen der Rechner schneller
senden konnte, der Drucker aber nicht schnell genug war.)

* Bei 68030-Rechnern schwanken die BIOS-Mewerte mit der Lage von
  Treiber und Software im CPU-Cache. Im schlechtesten Fall erhlt man
  etwa 20% weniger Durchsatz, "normal" etwa 5% weniger als die angegebenen
  Maximalwerte.
  Die GEMDOS-Druckroutine in iPRN II pat jedoch komplett in den Cache,
  so da die angegebenen Werte meistens ungefhr erreicht werden.


Installation 
============
IPRN2.PRG gehrt in den AUTO-Ordner, und zwar so weit hinten wie mglich. 
MiNT-Anwender mssen es vor MINT.PRG (oder MINTNP.PRG) in den AUTO-Ordner
stecken. 
Die Demoversion fordert beim Systemstart die Eingabe "iPRN II<Return>".
Andernfalls installiert sie sich nicht. (Achtung Grafikkartenbesitzer:
Wenn kein Programm installiert ist, das die Textausgaben der Bootphase
auf die Grafikkarte umleitet, mu die Eingabe ohne Sichtkontrolle erfolgen.)

IPRN2.CPX ist das Kontrollfeldmodul und gehrt in den Ordner, in dem die
schon vorhandenen Moduln auch schon sind. Normalerweise ist das C:\CPX\.
Es ist allerdings nur in der registrierten Version dabei.


Bedienung
=========
An IPRN2.PRG (bzw. IPRN2D.PRG in der Demoversion) gibt es nichts zu bedienen.
Es wird im AUTO-Ordner automatisch gestartet und installiert sich.
Falls die Installation unmglich ist, wird eine Fehlermeldung ausgegeben:
"already installed" oder "Printer port already in use", wenn das Programm 
bereits installiert ist bzw. wenn bereits ein anderes Programm den Interrupt 
der Druckerschnittstelle belegt hat.

Das Kontrollfeld-Modul dient zur Konfiguration des Programms:
- "Offline Timeout" ist die maximale Zeit in Sekunden, die vor dem Absenden 
  eines Zeichens gewartet wird, bevor der Drucker fr abwesend erklrt und 
  eine Fehlermeldung erzeugt wird.
- "End-of-job delay" ist die Zeit, die nach dem letzten gedruckten Zeichen
  verstreichen mu, bevor die Zustandsberwachung wieder wirksam wird.
- "Printer state watchdog": Zustandsberwachung des Druckers per Interrupt.
  Kann jederzeit an- und ausgeschaltet werden. Ausschalten empfiehlt sich
  vor der Benutzung eines Programms, das selbst die Hardware direkt benutzt.
- Nebenbei kann man durch Druck auf "OK" oder "Save" auch eingeschlafene
  Deskjets wieder zum Leben erwecken.

Das Kontrollfeldmodul ist nur in den registrierten Versionen enthalten;
in den Demoversionen ist "Offline Timeout" auf 45, "End-of-job delay" auf 2
Sekunden fest eingestellt, und der "Printer state watchdog" deaktiviert sich
nach dem ersten Druckerfehler von selbst.


Die erwnschten Nebenwirkungen von iPRN II sind:

- Die Erzeugung des STROBE-Signals funktioniert unabhngig von der 
  Geschwindigkeit des Rechners. Auch Besitzer ultraschneller Gerte 
  jenseits des TT knnen iPRN II benutzen.

- Auch bei der Hardcopy entfllt die lstige Pause bei abwesendem Drucker. 
  Der Druckvorgang wird auch hier beschleunigt.

- Beim Reset des Rechners wird statt eines undefinierten Mllzeichens 
  ein definiertes Mllzeichen gesendet, nmlich ein Nullbyte. 
  Da es gesendet wird, ist im TOS so festgenagelt (zumindest bis TOS 1.04) 
  und lt sich nicht vermeiden.


Unerwnschte Nebenwirkungen:

- Programme, die die Druckausgabe direkt auf die Hardware machen (anstatt 
  ber GEMDOS oder BIOS), lsen damit pro Byte zwei Interrupts aus, was 
  _diese_ Druckvorgnge langsamer macht als vorher. (Aber zum Glck nicht 
  viel.) Das betrifft allerdings auch nur solche Oldies wie Calamus 1.x 
  oder Signum!Zwei. (Zu letzterem gibt es ein Update, das diesen Mangel
  behebt.) Besitzer einer registrierten Version von iPRN II knnen 
  vor dem Ausdruck mit solchen Programmen die Druckerstatusberwachung 
  ber das Kontrollfeld deaktivieren.

- Schlielich bercksichtigen viele Programme nicht, da die Zeichenausgabe- 
  funktion des BIOS einen Fehlercode zurckliefert, so da man den Drucker 
  nicht whrend des Drucks offline schalten kann. iPRN II ignoriert deswegen
  den Offline-Zustand innerhalb 2 Sekunden nach dem letzten gesendeten 
  Zeichen (in den registrierten Versionen konfigurierbar).
  Sptestens nach dem "groen" Timeout (normalerweise 45 Sekunden, 
  in der registrierten Version konfigurierbar) gehen dann trotzdem Zeichen 
  verloren, und der Ausdruck bekommt ein paar Spezialeffekte dazu.
  Das passiert allerdings auch mit der normalen Druckfunktion des TOS 
  und hat mit iPRN II nichts zu tun.

- Auch die Rckgabewerte der GEMDOS-Funktionen werden lngst nicht von
  allen Programmen beachtet oder gar korrekt behandelt.
  
  
Kontraindikationen:

- Nicht anwenden bei hardwaremiger Inkompatibilitt des Druckerausgangs, 
  etwa bei GEMulator- oder JANUS-Steckkarten fr DOS-PCs oder Mag!C Mac.

==============================================================================

Fr die Techniker: iPRN II hngt im BIOS-Trap (mit XBRA-Kennung "iPRN") 
und fngt Bconout( 0, ... ) und Bcostat( 0 ) ab. Mit der gleichen Kennung 
installiert es sich im GEMDOS-Trap und fngt den Drucker betreffende Aufrufe
von Fcreate, Fopen, Fclose, Fwrite, Fdup und Fforce ab. Zustzlich installiert
es sich in den Vektoren xconout0, xcostat0, prv_lst, prv_lsto und resvector. 
Es aktiviert und benutzt MFP Interrupt I0. Ein Cookie "iPRN" wird eingetragen, 
dessen Wert ein Zeiger auf Konfigurationswerte ist; diese wiederum knnen mit 
dem Kontrollfeldmodul verndert werden. (Nur in den registrierten Versionen.)

Verbesserungen im Verhalten der einzelnen Funktionen gegenber TOS:
Bcostat( 0 ) liefert auch mitten im Druckvorgang einen aussagekrftigen Wert,
weil unterschieden wird, ob der Drucker wegen eines gerade gesendeten 
Zeichens busy ist, oder von sich aus die BUSY-Leitung gesetzt hat (etwa weil 
ein Fehler aufgetreten ist oder der Drucker offline geschaltet ist).
Das Ergebnis ist wie gewohnt -1 fr "ready" und 0 fr "not ready", nur da 
ein gewhnlicher Busy-Zustand auch als "ready" gemeldet wird.

Fopen, Fcreate und Fdup liefern EDRVNR, wenn der Drucker nicht bereit ist.

Fwrite liefert im Gegensatz zur Originalfunktion die tatschlich gedruckte
Anzahl Bytes. Im Fehlerfall kann das durchaus weniger sein als die bergebene
Menge. Die Originalfunktion liefert immer letztere als Ergebnis, egal, ob sie
die Daten tatschlich gedruckt hat oder nicht. Korrekterweise mu ein Anwender-
programm also mehrere Flle unterscheiden:
- Der Rckgabewert ist positiv und gleich der bergebenen Datenmenge.
  In diesem Fall ist alles in Ordnung.
- Der Rckgabewert ist positiv, aber kleiner als die zu druckende Anzahl Bytes.
  Das Programm mu den Benutzer informieren und ggf. die restlichen Daten
  nochmal mittels Fwrite absetzen.
- Der Rckgabewert ist negativ. Es wurde kein Byte gedruckt, und der Wert
  ist ein GEMDOS-Fehlercode, blicherweise EDRVNR. Die Reaktion des 
  Anwenderprogramms ist die gleiche wie vor, nur da der ganze Block nochmals
  gesendet werden mu.

==============================================================================

Dank geht an:

Thomas Fladerer (mein mutiges Dauer-Versuchskaninchen)

Die Betatester: Franz Blaha, Thomas Fladerer, Robert Federle, Andreas Kohout,
Heinz Ltkebohmert, Michael Nolte.

Die unfreiwilligen Tester: Werner Deinbck, Mathias Donat, Michael Ruge,
Walter Vieser.

Atari fr die Hardware-Dokumentation, einige kleine Codefetzen zum 
Thema Interrupthandling und Programmstart, und die Tools zum Erzeugen
von Kontrollfeld-Moduln;

Harun Scheutzow fr Beistand im Ringen gegen die Zicken des MFP;

Julian F. Reschke frs geduldige Verwalten der XBRA-Liste.

Besonderer Dank an Thomas Fladerer, Andreas Kohout und Michael Kunert, 
die mir ihre Drucker samt Tinte fters mal geborgt haben.


Peter Missel, im Mrz 1997
