DEFINE PRINTER

DEFINE PRINTER ([logical-printer-name=]n)  
    [OUTPUT operand1]              

PROFILE operand2
CODEPAGE operand2
FORMS operand2
NAME operand2
DISP operand2
CLASS operand2
COPIES operand3
PRTY operand4

Dieses Dokument behandelt folgende Themen:

Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.

Verwandte Statements: AT END OF PAGE | AT TOP OF PAGE | CLOSE PRINTER | DISPLAY | EJECT | FORMAT | NEWPAGE | PRINT | SKIP | SUSPEND IDENTICAL SUPPRESS | WRITE | WRITE TITLE | WRITE TRAILER

Gehört zur Funktionsgruppe: Erstellen von Ausgabe-Reports


Funktion

Das Statement DEFINE PRINTER dient dazu, einer Report-Nummer einen symbolischen Namen zuzuordnen und die Zuweisung eines Reports zu einem logischen Bestimmungsort (Drucker) zu steuern. Dies bietet zusätzliche Flexibilität bei der Erstellung von Ausgaben für verschiedene logische Drucker-Warteschlangen.

Ist bei der Ausführung dieses Statements der angegebene Drucker bereits offen, bewirkt dieses Statement implizit, dass der Drucker geschlossen wird. Um einen Drucker explizit zu schließen, sollten Sie das Statement CLOSE PRINTER verwenden.

Weitere Informationen zum DEFINE PRINTER-Statement, siehe Unicode- und Codepage-Unterstützung in der Natural-Programmiersprache, Abschnitt Natural-Statements.

Syntax-Beschreibung

Operanden-Definitionstabelle:

Operand Mögliche Struktur Mögliche Formate Referenzierung erlaubt Dynam. Definition
operand1 C S       A U                       ja nein
operand2 C S       A U                       ja nein
operand3 C S           N                     ja nein
operand4 C S           N P I                 ja nein

Syntax-Element-Beschreibung:

Syntax-Element Beschreibung
(n)
Druckernummer:

Allen im Verlauf einer Session zu benutzenden Druckdateien muss im Voraus eine Zugriffsmethode zugewiesen werden, und zwar über den Subparameter AM (Typ der Zugriffsmethode) des Profilparameters PRINT oder automatisch mittels einer Definition in der JCL (nur bei Zugriffsmethode AM=STD).

Die Druckernummer n kann ein Wert im Bereich von 0 − 31 sein. Dies ist die Nummer, die auch verwendet werden soll in einem DISPLAY / WRITE oder CLOSE PRINTER-Statement.

Die Druckernummer 0 verweist auf den Hardcopy-Drucker. Einige Zugriffsmethoden unterstützen den Hardcopy-Drucker nicht, z.B. AM=PC.

logical-printer-name
Logischer Druckername:

Als Option können Sie dem Drucker n einen logischen Druckernamen logical-printer-name zuweisen. Dieser Name kann für die rep-Notation in einem DISPLAY- oder WRITE-Statement benutzt werden.

Die Namenskonventionen für logical-printer-name sind identisch mit denen für Benutzervariablen. Mehrere logische Namen können ein- und derselben Druckernummer zugewiesen werden. Im Gegensatz zum Wert des OUTPUT-Operanden (siehe unten), wird logical-printer-name zur Kompilierungszeit ausgewertet und ist deshalb unabhängig vom Programmkontrollfluss.

OUTPUT operand1
Druckername:

Als operand1 können Sie einen der folgenden Namen angeben:

  • den Druckernamen innerhalb des Online Spooling-Systems,

  • den der Druckernummer zuzuweisenden Druckdateinamen,

  • den Namen eines zusätzlichen Druckers oder

  • den Namen eines Remote-JES-Druckers.

Siehe Druckername für zusätzliche Reports und Remote-Ziele weiter unten.

Der 8−Byte lange logische Druckername kann zu Anfang über den Subparameter DEST des Profilparameters PRINT definiert werden. Sein Standardwert ist vom Typ der Zugriffsmethode abhängig und kann durch operand1 überschrieben werden.

operand1 kann 1 bis 253 Zeichen lang sein. Ist operand1 eine Variable, muss die Länge mindestens 8 Bytes betragen. Sie können entweder einen Druckernamen oder einen logischen oder physischen Dataset-Namen angeben. Das mögliche Format ist abhängig von der Betriebssystemumgebung und von der über den Subparameter AM des Profilparameters PRINT für diese Druckernummer definierten Zugriffsmethode.

Wenn der angegebene Name bereits für eine andere Druckernummer definiert ist, und dieser Drucker unbenutzt ist, d.h. den Status geschlossen hat, wird die Druckausgabe zu diesem Drucker weitergeleitet, wenn der Subparameter ROUTE=ON des Profilparameters PRINT für die spezifizierte Druckernummer angegeben wurde. Passt kein Druckername zu operand1, wird der unbenutzte Drucker mit der höchsten Nummer benutzt, und sein Name wird durch operand1 überschrieben. Die Weiterleitung des Drucks erfolgt für den Benutzer unsichtbar und kann nicht mit dem SYSFILE-Kommando angezeigt werden.

Informationen zu betriebssystemabhängigen oder TP-Monitor-abhängigen Drucker-Namenskonventionen befinden sich in folgenden Abschnitten:

  Bei den folgenden Klauseln können Sie Druckersteuer-Informationen angeben, die vom Spooling-System des TP-Monitors bzw. Betriebssystem interpretiert werden sollen. Sie können eine oder mehrere dieser Klauseln angeben, aber jede von diesen nur einmal.
PROFILE operand2
Name der Druckersteuerzeichen-Tabelle:

Bei der PROFILE-Klausel geben Sie als operand2 den Namen einer Druckersteuerzeichen-Tabelle an. Die maximal zulässige Länge für operand2 ist 8 Bytes.

Sie definieren die Druckersteuerzeichen-Tabelle über den Profilparameter CCTAB (Definition der Drucker-Umschaltzeichensequenz).

Anmerkung:
Bei Natural Advanced Facilities kann die Druckersteuerzeichen-Tabelle online gepflegt werden (wie in der Natural Advanced Facilities-Dokumentation beschrieben).

CODEPAGE operand2
Name der Codepage:

Mit CODEPAGE geben Sie als operand2 den Namen (Format/Länge: A64) einer Codepage an, wie im NATCONFG-Modul angegeben.

CODEPAGE wird ignoriert, wenn das Syntax-Element nicht für das entsprechende OUTPUT-Ausgabemedium gilt.

Spooling-Systemparameter

Bei den im Folgenden aufgeführten Klauseln können Werte für Parameter des Spooling-Systems vom TP-Monitor angegeben werden. Den Standardwert dieser Klauseln können Sie mit den entsprechenden Subparametern des Profilparameters PRINT setzen (siehe PRINT Schlüsselwortparameter für DEFINE PRINTER-Statement).

Wird ein Drucker geschlossen, werden alle Optionen auf ihre Standardwerte zurückgesetzt. Wenn die Definitionen in einer Natural-Umgebung nicht eindeutig sind, empfiehlt die Software AG, sie in jedem Modul mittels des DEFINE PRINTER-Statements zu setzen.

Syntax-Element Beschreibung
FORMS operand2
Formular:

Maximale Länge des Operanden: 8 Bytes.

Der Standardwert dieser Klausel kann mit dem Subparameter FORMS des Profilparameters PRINT gesetzt werden.

NAME operand2
Listname:

Maximale Länge des Operanden: 8 Bytes.

Der Standardwert dieser Klausel kann mit dem Subparameter NAME des Profilparameters PRINT gesetzt werden.

DISP operand2
Disposition:

Maximale Länge des Operanden: 4 Bytes.

Für die DISP-Klausel sind die möglichen Werte für operand2 DEL, HOLD, KEEP und LEAV. Der Standardwert dieser Klausel kann mit dem Subparameter DISP des Profilparameters PRINT gesetzt werden. Wenn die DISP-Klausel weggelassen wird (oder falsch angegeben wird), gilt standardmäßig DEL.

CLASS operand2
Spool-Klasse:

Maximale Länge des Operanden: 1 Byte.

Der Standardwert dieser Klausel kann mit dem Subparameter CLASS des Profilparameters PRINT gesetzt werden.

COPIES operand3
Anzahl der Kopien:

operand3 muss ein Ganzzahlwert sein. Der Standardwert dieser Klausel kann mit dem Subparameter COPIES des Profilparameters PRINT gesetzt werden.

Anmerkung:
Die Angabe in der COPIES-Klausel entspricht bei Natural Advanced Facilities der Angabe beim Attribut Duplicates. Gemeint ist in beiden Fällen die Anzahl der zu druckenden Exemplare.

PRTY operand4
Listing-Priorität:

Mögliche Werte: 1 − 255.

operand4 muss ein Ganzzahlwert sein.

Der Standardwert dieser Klausel kann mit dem Subparameter PRTY des Profilparameters PRINT gesetzt werden.

Druckername unter z/OS Batch, TSO und Server

Dieses Abschnitt behandelt folgende Themen:

Für eine mit der Zugriffsmethode AM=STD definierte Druckernummer können Sie operand1 benutzen, um einen logischen oder physischen Dataset-Namen anzugeben, der dieser Druckernummer zugewiesen werden soll.

In diesem Fall kann operand1 1 bis 253 Stellen lang sein und folgenden Wert annehmen:

  • ein logischer Dataset-Name (DD-Name, 1 bis 8 Stellen);

  • ein physischer Dataset-Name eines katalogisierten Datasets (1 bis 44 Stellen) oder ein physischer Dataset-Member-Name (1 bis 44 Stellen für den Dataset-Namen plus 1 bis 8 Stellen in Klammern für den Member-Namen);

  • ein Pfad- und Member-Name einer HFS-Datei (1 bis 253 Stellen) in einer MVS-UNIX-Services-Umgebung;

  • eine JES-Spoolfile-Klasse

  • NULLFILE (bezeichnet ein Dummy-Dataset).

Logische Dataset-Namen

Beispiel:

DEFINE PRINTER (21) OUTPUT 'SYSPRINT'

Das angegebene Dataset mit dem DD-Namen SYSPRINT muss zugewiesen worden sein, bevor das DEFINE PRINTER-Statement ausgeführt wird. Weitere Informationen entnehmen Sie dem Abschnitt Zuweisung und Freigabe von Datasets weiter unten.

Die Zuweisung kann über JCL, CLIST (TSO) oder dynamische Zuweisung (SVC 99) erfolgen. Für dynamische Zuweisung können Sie die Programmier-Schnittstelle (API) USR2021N in der Library SYSEXT verwenden.

Der in dem DEFINE PRINTER-Statement angegebene Dataset-Name überschreibt den in dem Subparameter DEST des Profilparameters PRINT angegebenen Namen.

Optional kann dem Dataset-Namen DDN= vorangestellt werden, um anzuzeigen, dass es sich um einen DD-Namen handelt, und um Namenskonflikte mit zusätzlichen Reports zu vermeiden. Zum Beispiel:

DEFINE PRINTER (22) OUTPUT 'DDN=SOURCE'

Physische Dataset-Namen

Beispiel:

DEFINE PRINTER (23) OUTPUT 'TEST.PRINT.FILE'

Das angegebene Dataset muss in katalogisierter Form vorhanden sein. Wenn das DEFINE PRINTER-Statement ausgeführt wird, wird das Dataset dynamisch über SVC 99 mit dem aktuellen DD-Namen und der JCL-Option DISP=SHR zugewiesen. Weitere Informationen entnehmen Sie dem Abschnitt Zuweisung und Freigabe von Datasets weiter unten.

Wenn der Dataset-Name 8 Stellen hat oder kürzer ist und keinen Punkt (.) enthält, könnte er fälschlich als DD-Name interpretiert werden. Um dies zu vermeiden, stellen Sie ihm DSN= voran. Zum Beispiel:

DEFINE PRINTER (22) OUTPUT 'DSN=PRINTXYZ'

Falls das Dataset ein PDS-Member ist, geben Sie den PDS-Member-Namen (1 bis 8 Stellen) in Klammern hinter dem Dataset-Namen (1 bis 44 Stellen) an. Zum Beispiel:

DEFINE PRINTER (4) OUTPUT 'TEST.PRINT.PDS(TEST1)'

Falls das angegebene Member nicht existiert, wird ein neues Member unter diesem Namen angelegt.

HFS-Datei

Beispiel:

DEFINE PRINTER (14) OUTPUT '/u/nat/rec/test.txt'

Der angegebene Pfadname muss existieren. Wenn das DEFINE PRINTER-Statement ausgeführt wird, wird die HFS-Datei dynamisch zugewiesen. Falls das angegebene Member nicht existiert, wird ein neues Member unter diesem Namen angelegt.

Bei dynamischer Zuweisung des Datasets werden folgende z/OS-Pfadoptionen verwendet:

PATHOPTS=(OCREAT,OTRUNC,ORDWR)
PATHMODE=(SIRUSR,SIWUSR,SIRGRP,SIWGRP)
FILEDATA=TEXT

Wird eine HFS-Datei geschlossen, wird sie automatisch von z/OS freigegeben (unabhängig vom Wert des Subparameters FREE im Profilparameter PRINT).

JES-Spoolfile-Klasse

Um ein JES-Spool-Dataset zu erzeugen, geben Sie SYSOUT=x an (wobei x die gewünschte Spoolfile-Klasse ist). Für die Standard-Spoolfile-Klasse geben Sie SYSOUT=* an.

Beispiele:

DEFINE PRINTER (10) OUTPUT 'SYSOUT=A'
DEFINE PRINTER (12) OUTPUT 'SYSOUT=*'

Um zusätzliche Parameter für die dynamische Zuweisung anzugeben, verwenden Sie statt des DEFINE PRINTER-Statements die Programmierschnittstelle (API) USR2021N in der Library SYSEXT.

NULLFILE

Um ein Dummy-Dataset zuzuweisen, geben Sie NULLFILE als operand1 an:

DEFINE PRINTER (n) OUTPUT 'NULLFILE'

Dies entspricht der JCL-Definition:

// DD-name DD DUMMY

Zuweisung und Freigabe von Datasets

Wenn das DEFINE PRINTER-Statement ausgeführt wird und ein physischer Dataset-Name, eine HFS-Datei, eine Spoolfile-Klasse oder ein Dummy-Dataset angegeben wurde, wird das entsprechende Dataset dynamisch zugewiesen. Wenn eine logische Druckdatei bereits geöffnet ist, wird sie automatisch geschlossen, außer wenn der Subparameter CLOSE=FIN des Profilparameters PRINT angegeben wurde, wobei dann ein Fehler ausgegeben wird. Außerdem wird ein bestehendes Dataset mit dem gleichen aktuellen DD-Namen automatisch freigegeben, bevor das neue Dataset zugewiesen wird.

Um Fehler durch verfrühtes Öffnen von beim Programmstart noch nicht zugewiesenen Druckdateien zu vermeiden, sollten Druckdateien mit dem Subparameter OPEN=ACC (Öffnen bei erstem Zugriff) im Profilparameter PRINT definiert werden.

Im Falle einer HFS-Datei oder einer im PRINT-Profilparameter mit Subparameter FREE=ON definierten Druckdatei wird die Druckdatei automatisch freigegeben, sobald sie geschlossen worden ist.

Als Alternative für die dynamische Zuweisung und Freigabe von Datasets steht Ihnen die Programmierschnittstelle (API) USR2021N in der Library SYSEXT zur Verfügung. Diese API ermöglicht auch die Angabe zusätzlicher Parameter für die dynamische Zuweisung.

Druckdateien in Server-Umgebungen

In Server-Umgebungen kann es zu Fehlern kommen, wenn mehrere Natural-Sessions versuchen, ein Dataset mit dem gleichen DD-Namen zuzuweisen oder zu öffnen. Um dies zu vermeiden, geben Sie entweder im Profilparameter PRINT den Subparameter DEST=* an, oder Sie geben im DEFINE PRINTER-Statement OUTPUT '*' an; Natural generiert dann einen eindeutigen DD-Namen bei der Zuweisung der physischen Datasets, wenn das erste DEFINE PRINTER-Statement für die betreffende Druckdatei ausgeführt wird.

Alle Druckdateien, deren DD-Namen mit CM anfangen, werden von allen Sessions in einer Server-Umgebung gemeinsam benutzt. Eine solche Druckdatei wird von der ersten Session geöffnet, aber erst bei Beendigung des Servers physisch geschlossen. Weitere Informationen siehe Abschnitt Natural as a Server in der Operations-Dokumentation

Druckername unter CICS

Für eine mit der Zugriffsmethode AM=CICS definierte Druckernummer kann operand1 in Abhängigkeit vom Subparameter TYPE im Profilparameter PRINT für den Drucker ein Übergangsdaten- oder Zwischenspeicher-Warteschlangen-Name (1 bis 8 Zeichen) sein. Für TYPE=TD (Übergangsdaten) werden nur die ersten 4 Zeichen von operand1 berücksichtigt und das Ausgabemedium für die Übergangsdaten muss vorher für CICS definiert worden sein.

Weitere Informationen entnehmen Sie auch dem Abschnitt Natural Print and Work Files under CICS im Natural CICS Interface-Teil der TP Monitor Interfaces-Dokumentation.

Druckername unter Com-plete

Wird AM=COMP gesetzt, kann eine gültige Druckernummer (TID) oder ein logischer Druckername zugewiesen werden. Beispiel:

DEFINE PRINTER (1) OUTPUT '11'
DEFINE PRINTER (2) OUTPUT 'P102'

Druckername unter Com-plete/SMARTS

Wird AM=SMARTS gesetzt, können Sie einen nicht definierten Druckernamen angeben. Zum Beispiel:

DEFINE PRINTER (14) OUTPUT '/nat/path/printer'
DEFINE PRINTER (14) OUTPUT '/nat/path/printer/file/'
DEFINE PRINTER (14) OUTPUT 'printer'

Es ist vom Parameter MOUNT_FS von SMARTS abhängig, ob die Datei auf einem SMARTS Portable File System oder auf dem Native File System residiert. Das erste Element des Pfades (/nat/) legt das Zieldateien-System fest.

Wenn die Zeichenkette mit einem Schrägstrich (/) abgeschlossen wird, wird das letzte Element als Namen der Druckdatei benutzt. Sonst wird der Name der Datei aus der Benutzer-ID und einer Reihenfolge-Nummer generiert. Wenn die Zeichenkette nicht mit einem Schrägstrich anfängt, wird der Pfad der Datei aus der Umgebungsvariable $NAT_PRINT_ROOT genommen.

Der angegebene Pfadname muss vorhanden sein. Wenn das Statement DEFINE PRINTER ausgeführt wird, wird die Datei dynamisch zugewiesen. Wenn das angegebene Member nicht vorhanden ist, wird ein neues Member dieses Namens erstellt.

Druckernamen unter Natural Advanced Facilities

Benutzer von Natural Advanced Facilities können den logischen Namen jedes vordefinierten logischen Druckerprofils angeben. Dieses logische Druckerprofil muss nicht zu dem gerade aktiven Benutzerprofil gehören; es darf jedes in der NATSPOOL-Datei definierte logische Druckerprofil sein. Dieses Profil gilt nur während der Ausführung des Programms, das das DEFINE PRINTER-Statement enthält.

Weitere Informationen siehe Natural Advanced Facilities-Dokumentation.

Druckername für zusätzliche Reports und Remote-Ziele

Mit den folgenden Namen können Sie standardmäßig zusätzliche Reports und Remote-Ziele zuweisen:

Report Funktion
BROADCST Ausgabe der Meldungszeile an einen TP-Monitor-Terminal. Gleiche Funktion wie MESSAGE (siehe unten), außer dass unter Com-plete die Meldung nicht an den gewünschten Terminal geschickt wird, bis keine Transaktionen auf diesem Terminal mehr aktiv sind.
CCONTROL CCONTROL ist der Name einer bestimmten Druckersteuerzeichen-Tabelle, die mit dem Drucker n-1 in Verbindung steht; sie darf nicht geändert werden. Weitere Informationen entnehmen Sie dem Abschnitt Printer-Advance Control Characters in der Operations-Dokumentation.
CONNECT Ausgabe in ein Con-nect-Fach.

Anmerkung für die Natural-Installation: das NATPCNT-Modul von Natural muss mit dem Natural-Nukleus verbunden werden.

DUMMY Ausgabe wird gelöscht.
HARDCOPY Ausgabe an das aktuelle Hardcopy-Gerät.
INCORE Ausgabe an die NSPF Incore-Datenbank.
INFOLINE Ausgabe in der Natural-Infoline. Näheres zur Infoline siehe Terminalkommando %X in der Terminalkommandos-Dokumentation.
MESSAGE Ausgabe der Meldungszeile an einen TP-Monitor-Terminal. Die ersten 8 Bytes einer Meldung müssen die Ziel-Terminal-ID enthalten. Für TSO ist die User-ID anstatt der Terminal-ID erforderlich. Ein Beispiel-Programm mit Namen MSGSW ist in der Library SYSEXTP vorhanden.
SOURCE Ausgabe in den Arbeitsbereich des Natural-Editors.
WORKPOOL Ausgabe in den Natural-ISPF-Workpool.

Daten in einer Remote-JES-Umgebung drucken

Sie können das Write-to-Spool Feature (siehe Operations-Dokumentation) benutzen, um Daten über einen Remote-JES-Knoten zu leiten und sie an einen Benutzer zu senden oder um sie auf einem Gerät zu drucken, das in der Remote-JES-Umgebung definiert ist.

Beispiele

Beispiel 1 — Definition des Druckernamens für Com-plete

/* PRINTER NAME DEFINITION FOR COM-PLETE
*
DEFINE PRINTER (1) OUTPUT 'TID100'
WRITE (1) 'PRINTED ON PRINTER TID100'  
END

Beispiel 2 — Definition des Druckernamens für Batch-Umgebung

/* OUTPUT ON 'SYSPRINT' (FOR BATCH ENVIRONMENTS)
*
DEFINE PRINTER (REPORT1 = 1) OUTPUT 'SYSPRINT'
WRITE (REPORT1) 'REPORT 1 PRINTED ON PRINTER SYSPRINT'  
*
/* OUTPUT TO DEFAULT PRINTER DESTINATION
/* DEFINED WITH PROFILE PARAMETER 'PRINT', SUBPARAMETER 'DEST'
*
DEFINE PRINTER (REPORT2 = 2)
WRITE (REPORT2) 'REPORT PRINTED TO DESTINATION'

Beispiel 3 — Druckausgabe an Infoline

** Example 'DPIEX1': DEFINE PRINTER                                     
************************************************************************
*                                                                       
SET CONTROL 'XI+'        /* SWITCH INFOLINE MODE ON                     
SET CONTROL 'XT'         /* INFOLINE TOP                                
*                                                                       
DEFINE PRINTER (1) OUTPUT 'INFOLINE'                                   
WRITE (1) 'EXECUTING' *PROGRAM 'BY' *INIT-USER                          
WRITE 'TEST OUTPUT'                                                     
EJECT                    /* FORCE PHYSICAL I/O                          
*                                                                       
SET CONTROL 'X'          /* SWITCH BACK TO NORMAL                       
*                                                                       
END

Ausgabe des Programms DPIEX1:

EXECUTING DPIEX1   BY HTR                                                      
Page      1                                                  05-01-13  14:54:33                                                                           
TEST OUTPUT                                                                   

Beispiel 4 — Benutzung einer Session mit vordefiniertem Drucker

** Example 'DPREX1': DEFINE PRINTER                                     
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPL-VIEW VIEW OF EMPLOYEES                                           
  2 NAME                                                                
END-DEFINE                                                              
*                                                                       
*  USE SESSION WITH DEFINED PRINTER 1                                   
*                                                                       
DEFINE PRINTER (INVOICE-LIST=1) OUTPUT 'OUTQ1'                         
LIMIT 5                                                                 
READ EMPL-VIEW BY NAME                                                  
  WRITE (INVOICE-LIST) NAME                                             
END-READ                                                                
*                                                                       
END