Mit diesen System Exits wird die Gestaltung der Deckblätter / Schlussblätter bei Ausgaben auf Drucker durch Exit-Routinen gesteuert.
Die Exit-Routinen können dabei die Standardausgabe des SPOOL-Systems unterdrücken, durch eine Alternativausgabe ersetzen oder zusätzlich zur Standardausgabe eine Alternativausgabe veranlassen.
Alternativausgaben für Deck- oder Schlussblätter werden von der Systembetreuung zur Verfügung gestellt und vom Anwender mit den Operanden HEADER-EXIT-NUMBER und TRAILER-EXIT-NUMBER im Kommando PRINT-DOCUMENT angefordert. Die Standardausgabe kann unabhängig von einer EXIT-Routine durch einen Text (Operand HEADER-PAGE-TEXT im Kommando PRINT-DOCUMENT) modifiziert werden.
Beispiel
Festgelegt werden muss ein Standardname, z.B.
HEADERPAGETEXT.n,
der eine SAM-, ISAM-Datei oder eine Jobvariable bezeichnet. Darin können Sie Texte hinterlegen, die Sie mit dem Kommando
PRINT-DOCUMENT ...,LAYOUT-CONTROL=*PARAMETERS(COVER-PAGES= -
*PARAMETERS(HEADER-EXIT-NUMBER=...))
ansprechen können.
Die Exit-Routine muss auf die Datei $userid.HEADERPAGETEXT.n
zugreifen und den Text in den Puffer für das Deckblatt eintragen. Eine Auswahl erfolgt erst, wenn die Exit-Routine aufgerufen ist. Diese Exit-Routinen sichern und stellen alle Register wieder her.
Die Routinen werden aufgerufen:
wenn kein Deck- bzw. Schlussblatt erzeugt wurde
bei bestehendem Deck- bzw. Schlussblatt, um den Verwaltungspuffer wieder aufzubauen
Deckblatt-Exit (091)
Folgende Informationen werden an die EXIT-Routine übergeben:
R1 = A(EX091-Parameterbereich) R12 = A(TPR Program Manager) R13 = A(Sicherungsbereich) R14 = A(indirekter Rücksprung) R15 = A(Exit-Routine)
Die Returncodes werden im Standardheader eingetragen:
dd | cc | bb | aa |
Über die Ausführung von EX091 und EX092 wird im Standardheader ein Returncode übergeben:
aa=Maincode1
bb=Maincode2
cc=Subcode1
dd=Subcode2
X'aa' | Erläuterung |
00 | Kein Deck- bzw. Schlussblatt |
01 | Ohne Änderung Systemdeck- bzw. -schlussblatt drucken |
02 | Angegebenes alternatives Deck- bzw. Schlussblatt drucken |
03 | Das Systemdeck- bzw. Schlussblatt ohne Änderung und das angegebene alternative Deck- bzw. Schlussblatt drucken |
04 | Nur für Exit 92. Kein Schlussblatt. Der letzte Vorschub auf den Vertikaltabulator „Kanal 1“ soll nicht durchgeführt werden |
DSECT
Eine DSECT/CSECT für den Parameterbereich (Adresse wird in Register 1 übergeben) kann mit dem Makro EX091 erzeugt werden, wobei „prefix“ max. 3 Zeichen lang sein darf.
EX091 D * * SPOOL HEADER PAGE ROUTINE EXIT PARAMETER LIST * IHD MFCHK MF=D,DMACID=E91,ALIGN=F,SUPPORT=(C,D),ENTRY=NO, C PREFIX=I,MACID=E91,DNAME=C IHD DSECT , *,##### PREFIX=I, MACID=E91 ##### * * STANDARD HEADER RETURN INFORMATION * IBEG DS 0H FHDR MF=(C,I),EQUATES=NO 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 IN &P.MR1 * IEXNH EQU 0 NO HEADER PAGE OUTPUT IEXSY EQU 1 SYSTEM HEADER UNALTERED IEXAL EQU 2 ALTERNATIVE HEADER IEXBO EQU 3 SYSTEM AND ALTERNATIVE HEADER * * INPUT FIELDS FOR THE INPUT EXIT ROUTINE * IPRTYP DS C PRINTER TYPE ILINES EQU X'20' LINES PRINTER TYPE IPAGES EQU X'21' PAGE PRINTER TYPE ILOADL EQU X'22' LOADABLE LINE PRINTER TYPE 753 IRBP EQU X'23' RBP PRINTER TYPE 753 IRSOPB EQU X'24' PUBLIC RSO PRINTER 753 IRSOPR EQU X'25' PRIVATE RSO PRINTER 753 IAPAPR EQU X'26' APA PRINTER IPUNCH EQU X'30' PUNCH TYPE 753 ICLTYP DS C CALL TYPE INORM EQU X'01' NORMAL CALL 754 IRETRY EQU X'02' RETRY 754 INOBUF EQU X'04' NO BUFFER 754 ISMLHD EQU X'08' SMALL HEADER 802 DS CL2 RESERVED ISCB@ DS A SCB ADDRESS ISYIB@ DS A SYSTEM BUFFER ILNPG DS F # OF LINES PER PAGE ICHLN DS F # OF CHAR. PER LINE * * OUTPUT FIELDS FROM THE INPUT EXIT ROUTINE * IUSOB@ DS A USER BUFFER ADDRESS IUSOBL DS F USER BUFFER LENGTH ISKIP# DS F # SKIP RECORDS ISYDF DS F SYSTEM DUPL FACT IUSDF DS F USER DUPL FACT DS CL12 RESERVED FOR EXTENSION * * INPUT FIELDS FOR THE INPUT EXIT ROUTINE * IPIR DS A PRINTER INFORMATION RECORD ADDR. 756 IDVTYP DS AL1 DEVICE TYPE 756 DS XL1 HW ALIGNMENT IFREQ# DS H SEPARATOR PAGES FREQUENCE # 865 * FREQ# IS INPUT / OUTPUT 865 IFWFR@ DS A ADDR OF 10 FREE FW FOR EXIT 091 865 DS 2F RESERVED - FREE FOR USE 865 ILEN EQU *-IHD ROUTINE EXIT P/L LENGTH
Vor Aufruf der Exit-Routine versorgte Felder:
IPRTYP | Ausgabegerät | |
ILINES | Zeilendrucker | |
IPAGES | Laserdrucker / Seitendrucker | |
ILOADL | Drucker mit ladbarem VFB | |
IRBP | RBP-Drucker | |
IRSOPB | gemeinschaftlicher RSO-Drucker | |
IRSOPR | privater RSO-Drucker | |
IAPAPR | APA-Drucker | |
ICLTYP | Art des Aufrufs | |
INORM | normaler Aufruf | |
IRETRY | wiederholter Aufruf: wenn der Speicherbereich für das | |
INOBUF | kein System-Standarddeckblatt: es wird keine Pufferadresse ISYIB@ | |
ISMLHD | kurzes Deckblatt (nach einer Jobunterbrechung) | |
ISCB@ | Adresse des SPOOL-Kontrollblocks (SCB) | |
ISYIB@ | Adresse des Systempuffers | |
ILNPG | Anzahl Zeilen pro Deckblatt-Seite | |
ICHLN | Anzahl Zeichen pro Deckblatt-Zeile | |
Felder, die von der Exit-Routine versorgt werden können: | ||
IUSOB@ | Klasse-3-Speicheradresse, an der das Alternativ-Deckblatt bereitgestellt ist | |
IUSOBL | Länge des Puffers für das Alternativdeckblatt, entsprechend dem von der Exit- | |
ISKIP# | Anzahl Sätze des Alternativdeckblatts, die bei einer Wiederholung übergangen, d.h. | |
ISYDF | Wiederholungsfaktor für die Ausgabe des Standarddeckblatts; Standard: 1 | |
IUSDF | Wiederholungsfaktor für die Ausgabe des Alternativdeckblatts; Standard: 1 | |
IPIR | Adresse des speziellen Drucker-Informations-Satzes. | |
IDVTYP | Gerätetyp |
Schlussblatt-Exit (092)
Folgende Informationen werden an die Exit-Routine übergeben:
R1 = A(EX092-Parameterbereich) R12 = A(TPR Program Manager) R13 = A(Sicherungsbereich) R14 = A(indirekter Rücksprung) R15 = A(Exit-Routine)
DSECT
Eine DSECT/CSECT für den Parameterbereich (Adresse in R1) kann mit dem Makro EX092 erzeugt werden, wobei „prefix“ max. 3 Zeichen lang sein darf.
EX092 D * * SPOOL TRAILER PAGE ROUTINE EXIT PARAMETER LIST * ITR MFCHK MF=D,DMACID=E92,ALIGN=F,SUPPORT=(C,D),ENTRY=NO, C PREFIX=I,MACID=E92,DNAME=C ITR DSECT , *,##### PREFIX=I, MACID=E92 ##### * * STANDARD HEADER RETURN INFORMATION * IBEG DS 0H FHDR MF=(C,I),EQUATES=NO 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 IN &P.MR1 * IEXNT EQU 0 NO TRAIL. PAGE OUTPUT IEXSY EQU 1 SYSTEM TRAIL. UNALTERED IEXAL EQU 2 ALTERNATIVE TRAILER PAGE IEXBO EQU 3 SYSTEM AND ALTERNATIVE TRAILER * INPUT FIELDS FOR THE INPUT EXIT ROUTINE * IPRTYP DS C PRINTER TYPE ILINES EQU X'20' LINES PRINTER TYPE IPAGES EQU X'21' PAGE PRINTER TYPE 753 ILOADL EQU X'22' LOADABLE LINE PRINTER TYPE 753 IRBP EQU X'23' RBP PRINTER TYPE 753 IRSOPB EQU X'24' PUBLIC RSO PRINTER 753 IRSOPR EQU X'25' PRIVATE RSO PRINTER 753 IAPAPR EQU X'26' APA PRINTERS IPUNCH EQU X'30' PUNCH TYPE 753 ICLTYP DS C CALL TYPE INORM EQU X'01' NORMAL CALL 754 IRETRY EQU X'02' RETRY 754 INOBUF EQU X'04' NO BUFFER 754 DS CL2 RESERVED ISCB@ DS A SCB ADDRESS ISYIB@ DS A SYSTEM BUFFER ILNPG DS F # OF LINES PER PAGE ICHLN DS F # OF CHAR. PER LINE * * OUTPUT FIELDS FROM THE INPUT EXIT ROUTINE * IUSOB@ DS A USER BUFFER ADDRESS IUSOBL DS F USER BUFFER LENGTH ISKIP# DS F # SKIP RECORDS ISYDF DS F SYSTEM DUPL FACT IUSDF DS F USER DUPL FACT DS CL12 RESERVED FOR EXTENSION * * INPUT FIELDS FOR THE INPUT EXIT ROUTINE * IPIR DS A PRINTER INFORMATION RECORD ADDR. 756 IDVTYP DS AL1 DEVICE TYPE 756 DS CL11 RESERVED FOR EXTENTION 756 ILEN EQU *-ITR ROUTINE EXIT P/L LENGTH
Vor Aufruf der Exit-Routine versorgte Felder:
YDDXMAIN | Indikator für das Hauptereignis | |
IPRTYP | Ausgabegerät | |
ILINES | Zeilendrucker | |
IPAGES | Laserdrucker / Seitendrucker | |
ILOADL | Drucker mit ladbarem VFB | |
IRBP | RBP-Drucker | |
IRSOPB | gemeinschaftlicher RSO-Drucker | |
IRSOPR | privater RSO-Drucker | |
IAPAPR | APA-Drucker | |
ICLTYP | Art des Aufrufs | |
INORM | normaler Aufruf | |
IRETRY | wiederholter Aufruf: wenn der Speicherbereich für das Alternativschlussblatt zerstört oder nicht korrekt aufgebaut ist | |
INOBUF | kein System-Standardschlussblatt: es wird keine Pufferadresse ISYIB@ übergeben; die Exit-Routine kann eine Alternativausgabe veranlassen, entsprechend ILNPG und ICHLN (s.u.) | |
ISMLHD | kurzes Schlussblatt (nach einer Jobunterbrechung) | |
ISCB@ | Adresse des SPOOL-Kontrollblocks (SCB) | |
ISYIB@ | Adresse des Systempuffers | |
ILNPG | Anzahl Zeilen pro Schlussblatt-Seite | |
ICHLN | Anzahl Zeichen pro Schlussblatt-Zeile | |
Felder, die von der Exit-Routine versorgt werden können: | ||
IUSOB@ | Klasse-3-Speicheradresse, an der das Alternativ-Schlussblatt bereitgestellt ist | |
IUSOBL | Länge des Puffers für das Alternativschlussblatt, entsprechend dem von der Exit-Routine mit $GETMEM angeforderten Pufferbereich | |
ISKIP# | Anzahl Sätze des Alternativschlussblatts, die bei einer Wiederholung übergangen, d.h. nicht gedruckt werden sollen | |
ISYDF | Wiederholungsfaktor für die Ausgabe des Standardschlussblatts; Standard: 1 | |
IUSDF | Wiederholungsfaktor für die Ausgabe des Alternativschlussblatts; Standard: 1 | |
IPIR | Adresse des speziellen Drucker-Informations-Satzes. | |
IDVTYP | Gerätetyp |
Aufbau der Puffer für Deck-/Schlussblätter
Alternativ-Ausgabe
Für den Aufbau von Alternativ-Ausgaben muss die Exit-Routine einen Puffer im Klasse-3-Speicher reservieren. Die Deck-/Schlussblätter werden aus Sätzen variabler Länge aufgebaut, d.h. mit vorangestelltem 4-Byte-Satzlängenfeld. Die ersten 4 Bytes des Puffer enthalten linksbündig die genutzte Pufferlänge, höchstens 32767 Bytes = X'7FFF'.
pl: | genutzte Pufferlänge |
sl: | Satzlänge/Zeilenlänge + 4 |
_: | Leerzeichen (X' 40' ) |
x: | Kennzeichen für Ausgabetyp (nur SPOOL-intern ausgewertet) X' 0A' Drucker |
satz: | bei PRINT-Ausgabe: 1 Byte Drucksteuerzeichen (s. unten) + Text X' 40': Kein Vorschub vor dem Drucken X' 41': 1 Zeile Vorschub vor dem Drucken X' 42': 2 Zeilen Vorschub vor dem Drucken X' 43': 3 Zeilen Vorschub vor dem Drucken Andere Steuerzeichen können zu unerwünschten Ergebnissen führen, da sie nicht von jedem Gerätetyp verstanden werden. |
Systemdeckblatt
Das Deckblattformat ist abhängig von Papiergröße und verwendetem Zeichensatz. Wieviele Zeilen auf eine Druckseite ausgegeben werden können, lässt sich folgendermaßen bestimmen:
Max.Zeilenzahl = Papierformat in Zoll * Zeilen / Zoll
Ausnahme: Wird bei Laserdruckern das Deckblatt unter LOOP-Steuerung ausgedruckt, ist die Zeilenzahl durch den VFB vorgegeben!
Die Zeilen des Deckblatts werden entsprechend der unten beschriebenen Rangfolge gedruckt (abhängig von der maximalen Zeilenzahl).
Rangfolge
Adress- und Identifikationsfeld (24 Zeilen) Benutzertext (10 Zeilen) + 2 Leerzeilen in „Riesen“-Lettern Auftragsname (10 Zeilen) + 2 Leerzeilen in „Riesen“-Lettern Benutzerkennung (10 Zeilen ) + 2 Leerzeilen in „Riesen“-Lettern Abrechnungsnummer (10 Zeilen) + 2 Leerzeilen in „Riesen“-Lettern
Stehen weniger als 24 Zeilen zur Verfügung, wird kein Standard-Deckblatt gedruckt. Die Exit-Routine kann jedoch geeignete Maßnahmen treffen.
Jede gedruckte Zeile wird als Satz variabler Länge gespeichert, d.h. mit einem vorangestellten Satzlängenfeld (4 Bytes). Leerzeilen enthalten ein Leerzeichen (X'40') als Satzinhalt.
Beispiel
Aufbau eines Standard-Deckblatts, abhängig von Zeichen- und Zeilendichte
Format (Seitengröße): 9 x 11 Zoll
Zeichensatz A: 15 Zeichen/Zoll; 8 Zeilen/Zoll (= 15 cpi / 8 lpi)
Zeichensatz B: 12 Zeichen/Zoll; 6 Zeilen/Zoll (= 12 cpi / 6 lpi)
Zeichensatz A | Zeichensatz B | |
Anzahl Zeichen pro Zeile | 11 * 15 = 165 | 11 * 12 = 132 |
Anzahl Zeilen pro Seite | 9 * 8 = 72 | 9 * 6 = 54 |
Deckblatt-Aufbau | ||
Adressfeld (24 Zeilen) | freie Zeilen: 48 | freie Zeilen: 30 |
Auftragsname (10 + 2 Zeilen) | freie Zeilen: 36 | freie Zeilen: 18 |
Benutzerkennung (10 + 2 Zeilen) | freie Zeilen: 24 | freie Zeilen: 6 |
Abrechnungsnummer (10 + 2 Zeilen) | freie Zeilen: 12 | freie Zeilen: - |
Bemerkung | Deckblatt wird vollständig ausgedruckt | Abrechnungsnummer fehlt |
Länge der Sternchenzeilen | 165 '*' | 132 '*' |
Papiervorschub
Nach Drucken des Systemschlussblatts wird das Folgeblatt auf die erste Zeile positioniert. Das gilt auch, wenn kein Deck- oder Schlussblatt gedruckt wird.
Anwendungshinweise
Die sinnvolle Verwendung der obenbeschriebenen Exits setzt geeignete Vereinbarungen zwischen Systembetreuung und Kunden voraus, z.B. einen Standardnamen für eine SAM- oder ISAM-Datei (oder auch eine Jobvariable). In dieser Datei kann sowohl der privilegierte als auch der nichtprivilegierte Benutzer ein Alternativ-Deckblatt aufbauen.
Beispiel für den Aufbau eines Standardnamens:
HEADERPAGETEXT.n, 0
<= n
<= 2147.483.639
Das Alternativdeckblatt kann dann ausgedruckt werden mit PRINT-DOCUMENT-Kommando (Operand HEADER-EXIT-NUMBER = n) oder PRNTDOC-Makro (Operand COVPAGE).
Die Exit-Routine muss dann auf die Datei $userid.HEADERPAGETEXT.n
zugreifen und den Deckblatt-Puffer mit dem Alternativtext versorgen.
Ob ein Deck-/Schlussblatt gedruckt wird, hängt ab von der Anzahl der Zeichen, die pro Zeile gedruckt werden können.
Wenn bei den Exits 091/092 eigene Ausgabeblöcke zur Verfügung gestellt werden, ist der Klasse-3-Speicher eforderlich. Der Speicher wird von SPOOL, nicht von den Exits wieder freigegeben.