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.