Diese Exit-Routine wird aufgerufen, nachdem ein Datensatz der auszugebenden Datei gelesen wurde, aber bevor der Datensatz gemäß den Angaben im PRINT-DOCUMENT vom SPOOL weiterverarbeitet wird.
Der Exit ist verwendbar für die Ausgabe auf Zeilendrucker, Laserdrucker (Seitendrucker). Er kann nicht verwendet werden bei Ausgabe auf Magnetband oder Diskette.
Die Exit-Routine kann folgende Maßnahmen des Systems veranlassen:
den gelesenen Datensatz akzeptieren (verändert oder unverändert)
den gelesenen Datensatz ersetzen
den gelesenen Datensatz übergehen
den gelesenen Datensatz und alle bis Dateiende folgenden Datensätze übergehen
Folgende Informationen werden an die Exit-Routine übergeben:
R1 = A(EX090-Parameterbereich) R12 = A(TPR Program Manager) R13 = A(Sicherungsbereich) R14 = A(indirekter Rücksprung) R15 = A(Exit-Routine)
Die Returncodes werden im Standardheader eingetragen:
Standardheader:
dd | cc | bb | aa |
Über die Ausführung von EX090 wird im Standardheader ein Returncode übergeben:
aa=Maincode1
bb=Maincode2
cc=Subcode1
dd=Subcode2
X'aa' | Erläuterung |
00 | Gelesenen Datensatz akzeptieren |
04 | Gelesenen Datensatz durch Inhalt des Ausgabeblockes ersetzen |
08 | Gelesenen Datensatz übergehen |
0C | Gelesenen Datensatz und alle Folgenden bis Dateiende übergehen |
Hinweise
Die Exit-Routine sollte nicht aktiviert bzw. deaktiviert werden, solange ein SPOOLOUT bearbeitet wird.
Der Makroaufruf PRNTDOC darf in der Exit-Routine verwendet werden, nicht aber $PRNT und $SPRQ.
Die Exit-Routine erhält die Steuerung bei jedem von der Eingabedatei gelesenen Satz, also auch beim Probedruck der ersten Seite, solange bis der Operator den Druck startet. Das Gleiche gilt für die RESPOOL-Verarbeitung (HOLD-PRINT-JOB-/RESUME-PRINT-JOB-Kommando), wobei die Exit-Routine die Lage des RESPOOL-Beginns berücksichtigen muss.
Die notwendigen Informationen zur Verarbeitung von Dateien mit Steuerzeichen entnehmen Sie bitte dem PRINT-DOCUMENT-Kommando bzw. dem SPOOL-Control-Block.
Wenn eigene Ausgabeblöcke zur Verfügung gestellt werden, ist eine beliebige Speicherklasse erlaubt. Es empfiehlt sich aber, den Klasse-5-Speicher zu nehmen. Der Speicher wird vom Exit wieder freigegeben, sobald der Exit die Kontrolle wieder zurückbekommen hat.
DSECT
Eine DSECT/CSECT für den Parameterbereich (Adresse wird in Register 1 übergeben) kann mit dem Makro EX090 erzeugt werden, wobei „prefix“ max. 3 Zeichen lang sein darf. name EX090 D/C,[prefix]
Die Eingabefelder werden nach dem Rücksprung von der rufenden SPOOL-Komponente nicht mehr abgeprüft. Der erste und der letzte Aufruf der Exit-Routine erfolgt, ohne dass ein Satz der Datei bereitgestellt wird (ICLTYP = X'02' bzw. X'03'). Das Byte IPRTYP gibt das Ausgabegerät an.
Die Ausgabefelder werden von der Exit-Routine versorgt. Das Byte IEXRC steuert die von der Exit-Routine gewünschte Funktion. Die Funktionen sind im Anschluss an die DSECT näher beschrieben.
EX090 D
* SPOOL INPUT RECORDS ROUTINE EXIT PARAMETER LIST
*
IRC MFCHK MF=D,DMACID=E90,ALIGN=F,SUPPORT=(C,D),ENTRY=NO, C
PREFIX=I,MACID=E90,DNAME=C
IRC DSECT ,
*,##### PREFIX=I, MACID=E90 #####
*
* STANDARD HEADER RETURN INFORMATION
*
IBEG DS 0H
00100510
FHDR MF=(C,I),EQUATES=NO
00100600
DS 0A
IFHE DS 0XL8 0 GENERAL PARAMETER AREA HEADER
*
IIFID DS 0A 0 INTERFACE IDENTIFIER
IFCTU DS AL2 0 FUNCTION UNIT NUMBER
* BIT 15 HEADER FLAG BIT,
* MUST BE RESET UNTIL FURTHER NOTICE
* BIT 14-12 UNUSED, MUST BE RESET
* BIT 11-0 REAL FUNCTION UNIT NUMBER
IFCT DS AL1 2 FUNCTION NUMBER
IFCTV DS AL1 3 FUNCTION INTERFACE VERSION NUMBER
*
IRET DS 0A 4 GENERAL RETURN CODE
ISRET DS 0AL2 4 SUB RETURN CODE
ISR2 DS AL1 4 SUB RETURN CODE 2
ISR1 DS AL1 5 SUB RETURN CODE 1
IMRET DS 0AL2 6 MAIN RETURN CODE
IMR2 DS AL1 6 MAIN RETURN CODE 2
IMR1 DS AL1 7 MAIN RETURN CODE 1
IFHL EQU 8 8 GENERAL OPERAND LIST HEADER LENGTH
*
* EQUATES FOR EXIT RETURN INFORMATION
*
IACCPT EQU 0 ACCEPT RECORD AS IT IS
IADD EQU 4 ADD RECORD(S)
IDEL EQU 8 DELETE (SKIP) RECORD
IEOF EQU 12 TERMINATE PRINT (SIMULATE EOF)
*
* INPUT FIELDS FOR THE INPUT EXIT ROUTINE
*
IREC@ DS A INPUT RECORD ADDRESS
ISCB@ DS A SCB ADDRESS
IRCLEN DS Y INPUT RECORD LENGTH
IPRTYP DS AL1 TYPE OF PRINT
ILINES EQU 32 LINES PRINTER TYPE 751
IPAGES EQU 33 PAGE PRINTER TYPE 751
ILOADL EQU 34 LOADABLE LINE PRINTER TYPE 751
IRBP EQU 35 RBP PRINTER TYPE 751
IRSOPB EQU 36 PUBLIC RSO PRINTER 752
IRSOPR EQU 37 PRIVATE RSO PRINTER 752
IAPAPR EQU 38 APA PRINTERS
IPUNCH EQU 48 PUNCH TYPE 751
ICLTYP DS AL1 CALL TYPE
ICLREC EQU 1 RECORD CALL TYPE
ICLFST EQU 2 NO RECORD FIRST TIME CALL
ICLLST EQU 3 NO RECORD LAST TIME CALL
DS CL4 RESERVED FOR EXTENSION
*
* OUTPUT FIELDS FROM THE INPUT EXIT ROUTINE
*
IBLK@ DS A DATA BLOCK ADDRESS
IBLKLE DS Y DATA BLOCK LENGTH
IEXRC DS AL1 R-C FROM EXIT ROUTINE MAY BE
* STORED HERE IN ADDITION TO
* THE MAIN RETURN CODE
IBEXRC DS AL1 BASE R-C FROM EXIT ROUTINE
*
IBRCOK EQU 0 BASE R-C O.K.
INEXS EQU 4 EXIT ROUTINE NOT EXISTENT
INACT EQU 8 EXIT ROUTINE NOT ACTIVE
IPARER EQU 12 PARAMETER ERROR
DS CL8 RESERVED FOR EXTENSION
*
* INPUT FIELDS FOR THE INPUT EXIT ROUTINE
*
IPIR DS A PRINTER INFORMATION RECORD ADDR. 755
IDVTYP DS AL1 DEVICE TYPE 755
DS CL11 RESERVED FOR EXTENTION 755
ILEN EQU *-IRC ROUTINE EXIT P/L LENGTH
Funktionen der Exit-Routine
Returncode X'00': gelesenen Satz akzeptieren
Die Adresse des Satzes und die Satzlänge werden in den Feldern IREC@ bzw. IRCLEN an die Exit-Routine übergeben. Der Satz enthält kein Satzlängenfeld.
Die Exit-Routine kann den Satz unverändert vom SPOOL akzeptieren lassen oder ihn ändern. Wenn der Satz dabei nicht länger wird, kann er direkt im Eingabepuffer verändert werden. Die Felder IBLK@ und IBLKLE müssen in diesem Fall mit der Adresse des Satzes aus IREC@ und der gültigen Satzlänge versorgt werden. Wird der Satz durch die Änderung verlängert, muss die Exit-Routine den Satz in einem eigenen, über IBLK@ adressierten Puffer bereitstellen.
Aufbau des Puffers:
Returncode X'04': gelesenen Satz ersetzen
SPOOL ersetzt den eingelesenen Satz durch die Sätze, die von der Exit-Routine im Ausgabeblock (Adresse in IBLK@) bereitgestellt wurden:
Die Exit-Routine muss die Felder IBLK@ und IBLKLE versorgen. Soll der gelesene Satz Bestandteil des Ausgabeblocks sein, muss ihn die Exit-Routine dorthin übertragen.
Returncode X'08': gelesenen Satz übergehen
Die Exit-Routine muss nur den Returncode setzen, weitere Aktionen sind nicht erforderlich.
Returncode X'0C': alle Sätze bis Dateiende übergehen
Die Exit-Routine muss nur den Returncode setzen, weitere Aktionen sind nicht erforderlich.
Operanden im PRINT-DOCUMENT-Kommando/PRNTDOC-Makro
Die Exit-Routine muss alle in PRINT-DOCUMENT-Kommandos angegebenen Operanden beachten! Die entsprechenden Werte können dem SPOOL-Kontrollblock entnommen werden.
RECORD-PART=*PARAMETERS(FIRST-CHARACTER = n):
Alle von der Exit-Routine eingefügten Sätze müssen länger als n Bytes sein, sonst werden sie nicht gedruckt.
OUTPUT-PART=*RANGE(FROM = +n):
Die Sätze 1–n werden ebenfalls an die Exit-Routine übergeben.
OUTPUT-PART=*LAST(LAST = -n):
Die Exit-Routine erhält die Steuerung zunächst für alle Sätze von 1–m (Dateiende, keine Ausgabe). Danach setzt SPOOL den FROM-Wert auf z = (m–n+1) und arbeitet die Datei ab wie bei FROM = +z.
ADDITIONAL-COPIES = n:
Die Exit-Routine kann bei wiederholter Ausgabe einer Datei nicht zwischen den einzelnen Kopien unterscheiden, d.h. es gibt keinen Unterschied in den übergebenen Parametern oder Datensätzen.

