Dieser Abschnitt behandelt folgende Themen:
Diese API ermöglicht Ihnen den Zugriff auf UNIX- und Windows-Dateien aus Natural-Programmen.
Bei FILE / READ oder FILE / WRITE und wenn der
Puffer-Typ B, C oder D benutzt
wird:
CALLNAT 'NOPUNX1N' NOPUNX1A data-buffer
Bei allen anderen Aufrufen:
CALLNAT 'NOPUNX1N' NOPUNX1A
Zum Aufrufen von NOPUNX1N müssen Sie die Parameter Data Area
NOPUNX1A benutzen, die im folgenden Abschnitt beschrieben
wird.
Die Parameter in der Parameter Data Area NOPUNX1A haben
folgende Bedeutung:
| Parameter | Format/Länge | Verwendung | ||
|---|---|---|---|---|
OBJECT |
A16 | ein | Mögliche Werte:
|
|
FUNCTION
|
A8 | ein | Mögliche Werte für USER:
|
|
LOGON |
Bei einem Knoten anmelden | |||
LOGOFF
|
Bei einem Knoten abmelden. | |||
Mögliche Werte für FILE:
|
||||
APPEND |
An eine existierende Datei anhängen. | |||
COPY |
Datei kopieren. | |||
CLOSE |
Datei schließen. | |||
DELETE |
Datei löschen. | |||
DELDIR |
Verzeichnis löschen. | |||
DIR |
Datei-Liste. | |||
DTA |
Dateien sortiert nach Änderungszeit in aufsteigender Reihenfolge auflisten. | |||
DTD |
Dateien sortiert nach Änderungszeit in absteigender Reihenfolge auflisten. | |||
GETATTR |
Datei-Attribute abrufen. | |||
LINECNT |
Zeilen einer Datei zählen. | |||
MOVE |
Datei verschieben (oder umbenennen). | |||
READ |
Datei lesen. | |||
SCAN |
In ein Datei nach Strings suchen. | |||
WRITE |
Datei schreiben. | |||
Mögliche Werte für
JOB:
|
||||
CANCEL |
Einen Job stornieren. | |||
COMMAND |
Ein Kommando ausführen. | |||
GETEXIT |
Den Exit Code eines bereits beendeten Jobs abrufen. | |||
Mögliche Werte für
SERVER:
|
||||
CL-TL-G |
Command Log Level und Trace Level abrufen. | |||
RETURN-CODE |
N8 | aus | 0 | Funktion war ok. Anderer Wert: siehe Inhalt von
RETURN-TEXT
|
RETURN-TEXT |
A80 | aus | Erklärung zu
RETURN-CODE.
|
|
NODE |
N5 | ein | Knoten, wie in Entire Operations definiert. | |
NODE-NAME |
A16 | ein | Knoten-Name
|
|
NODE-ACCESS-MODE |
A1 | nur von der API zu ändern | leer | Noch nicht geprüft. |
N |
Knoten ist nicht lokal. | |||
Y |
Knoten ist lokal. | |||
Dieses Feld wird von der API bei
USER / LOGON gesetzt. Es soll von der Anwendung nicht
geändert werden.
|
||||
USERID |
A20 | ein | Benutzerkennung für Logon. | |
GROUP |
A20 | ein | Optional: | |
| UNIX | Group für Logon. | |||
| Windows | Domäne für Logon. | |||
PASSWORD |
A16 | ein | Passwort für Logon.
Anmerkung: |
|
SID |
N10 | nur von der API zu ändern | Session
ID von Entire System Server.
Dieses Feld wird von der API bei |
|
UID |
A10 | nur von der API zu ändern | Interne
Benutzerkennung des Betriebssystems.
Dieses Feld wird von der API bei |
|
REDEF-1 |
A10 | - | Redefinitionsbereich. | |
SERVER-COMMAND-LOG-LEVEL |
N5 | aus | Ausgabe
von SERVER / CL-TL-G.
|
|
SERVER-TRACE-LEVEL |
N5 | aus | Ausgabe
von SERVER / CL-TL-G.
|
|
HTML-CODE-HANDLING |
A1 | ein/aus | Für
FILE-Funktionen.
|
|
CODEPAGE-ID |
N5 | ein | Für die
FILE-Funktionen WRITE und APPEND.
|
|
OPSYS-CLASS |
A1 | ein/aus | Betriebssystemklasse des Knotens (NODE).
Mögliche Werte |
|
B |
BS2000 | |||
M |
z/OS | |||
V |
z/VSE | |||
X |
UNIX | |||
W |
Windows | |||
USE-PAM |
A1 | ein | Für
USER / LOGON.
|
|
INHERIT-ACCESS-TIME |
A1 | ein | Für
FILE-Funktionen.
|
|
BUFFER-FORMAT |
A1 | ein | Für die
FILE-Funktionen READ, WRITE und
APPEND.
Mögliche Werte |
|
T |
Text, einzelner Datensatz. | |||
3 |
Text, mehrere Datensätze, 3-Byte-Felder. | |||
L |
Text, mehrere Datensätze, Felder mit variabler Länge. | |||
A |
Base64-kodiertes Format. | |||
UNUSED-1 |
A10 | - | Unbenutzt. | |
ESC-TRIGRAPH |
A1 | ein | Trigraph-Verwendung: | |
leer oder N |
Keine Trigraph-Konvertierung. | |||
Y
|
Fragezeichen (?) als Trigraph-Escape verwenden | |||
| anderes Zeichen | Dieses Zeichen als Trigraph-Escape verwenden. | |||
TRACE-LEVEL |
N1 | ein | 0 |
Kein Trace. |
> 0 |
Trace eingeschaltet. | |||
TRACE-TARGET |
A1 | ein | Gibt an, wohin der Trace geschrieben werden soll. | |
S |
SYSOUT | |||
L |
Entire Operations-Protokoll (NOP Log) | |||
B |
Beide: SYSOUT und
Entire Operations-Protokoll (NOP Log). Nur relevant, wenn
TRACE-LEVEL > 0.
|
|||
BUFFER-TYPE |
A1 | ein | Puffer-Typ.
Hauptsächliche Verwendung bei den Mögliche Werte |
|
A oder leer
|
XS-FIRWA-BUFFER-TYPE Größe 600. | |||
B |
XS-FIRWB-BUFFER-TYPE size 9700. | |||
C |
XS-FIRWC-BUFFER-TYPE size 99000. | |||
D |
XS-FIRWD-BUFFER-TYPE size 59000. | |||
Für die Puffer-Typen
B, C und D:
Der Puffer muss als separater Parameter im Statement
|
||||
OBJECT-AREA |
A1200 | - | Objekt-spezifische Felder.
Objekt: |
|
F-FILE |
A250 | ein | Dateiname.
Der Dateiname ist vollqualifiziert anzugeben, d.h. als kompletter Pfad ab Basis des Dateisystems. Der Dateiname darf Umgebungsvariablen enthalten. |
|
F-HANDLE |
N10 | nur von der API zu ändern | Datei-Handle.
Wird vom Entire System Server beim ersten Zugriff auf die Datei
vergeben; gilt bis |
|
F-LINE |
N10 | ein/aus | ein | Zeilennummer, ab der gelesen werden soll (0 oder 1: ab Dateibeginn lesen) |
| aus | (letzte) gelesene Zeilennummer. | |||
F-NUMBER-RECORDS |
N10 | aus | Anzahl der gelesenen Datensätze. | |
F-SEARCH-TEXT |
A100 | ein | Nur FILE /
SCAN: Text, nach dem in der Datei gesucht werden soll.
|
|
F-RECORD-BUFFER |
A600 | ein/aus | Gesamter Record-Buffer
(Redefinition von F-RECORD-BUFFER)
Wird nur bei |
|
F-RECORD-250 |
A250 | ein/aus | FILE / READ,
FILE / WRITE: Effektiver Datensatz.
Wird nur bei |
|
Die API ist unter Entire Operations auf Großrechnern und Entire Operations auf Open Systems (UNIX + Windows) einsetzbar.
Mit der API kann nur auf UNIX- und Windows-Knoten zugegriffen werden.
In der verwendeten Natural-Umgebung müssen als Steplibs SYSEOR und die von SYSEOR verwendeten Steplibs definiert sein.
Die von Entire Operations verwendeten Systemdateien (System File 1,
SAT Log File) müssen über LFILE-Zuweisung definiert
sein.
Im folgenden bedeutet der Aufruf OBJECT / FUNCTION (z.B.
USER / LOGON) den Aufruf von NOPUNX1N mit dem
angebenen Objekt und der angegebenen Funktion.
Windows-Dateinamen können auch mit normalen Schrägstrich-Zeichen (/) anstelle des umgekehrten Schrägstrichs (\) angegeben werden.
c:/work/file1.txt
ist gleichbedeutend mit
c:\work\datei1.txt
Alle Datei-Operationen funktionieren nur innerhalb einer gültigen Session.
Die Session wird mit USER / LOGON aufgebaut und mit
USER / LOGOFF beendet.
Während der Session dürfen SESSION-ID, UID,
GID nicht geändert werden.
USER / LOGON FILE / ... FILE / ... ... USER / LOGOFF
Dateien brauchen nicht explizit geöffnet zu werden. Das wird beim
ersten Zugriff mit FILE / READ oder FILE / WRITE
automatisch ausgeführt.
Nach dem Lesen oder Schreiben einer Datei muss die Datei mit
FILE / CLOSE geschlossen werden.
Nach jedem Aufruf von NOPUNX1N ist der Fehlercode in
NOPUNX1A.RETURN-CODE zu überprüfen. In
NOPUNX1A.RETURN-TEXT wird ein Fehlertext zurückgegeben.
Mit der Funktion FILE/READ wird eine Datei sequenziell
gelesen.
In NOPUNX1A.F-LINE kann eine Startzeile übergeben
werden.
Wenn NOPUNX1A.F-LINE den Wert 0 (Null) oder 1
enthält, wird ab Dateibeginn gelesen.
USER / LOGON
R1. repeat
FILE / READ
if (NOPUNX1A.RETURN-CODE ne 0)
escape bottom (R1.)
end-if
... Record behandeln
end-repeat /* R1.
FILE / CLOSE
USER / LOGOFF
Mit der Funktion FILE / SCAN ist es möglich, eine Datei
gezielt nach einer bestimmten Zeichenkette zu durchsuchen. Der Suchzeichenkette
muss in NOPUNX1A.F-SEARCH-TEXT übergeben werden.
USER / LOGON
R1. repeat
FILE / SCAN
if (NOPUNX1A.RETURN-CODE ne 0)
escape bottom (R1.)
end-if
... Record behandeln
add 1 to NOPUNX1A.F-LINE
* -- Startzeile für Folge-Scan
end-repeat /* R1.
FILE / CLOSE
USER / LOGOFF
Mit der Funktion FILE / WRITE wird eine Datei sequenziell
geschrieben.
USER / LOGON
R1. repeat
... allocate record in NOPUNX1A.F-RECORD-250
FILE / WRITE
if (...)
escape bottom (R1.)
end-if
end-repeat /* R1.
FILE / CLOSE
USER / LOGOFF
Beispiel für die Verwendung eines großen Puffers für das Lesen und Schreiben von Dateien.
Definieren Sie einen großen Puffer:
1 #BUFFER-99000 (A99000)
Wählen Sie einen der folgenden Puffer-Typen:
NOPUNX1A.BUFFER-TYPE := 'B' /* 9900 bytes NOPUNX1A.BUFFER-TYPE := 'C' /* 99000 bytes NOPUNX1A.BUFFER-TYPE := 'D' /* 59000 bytes
Rufen Sie die API auf:
CALLNAT 'NOPUNX1N' NOPUNX1A #BUFFER-99000
Die Parameterdefinition für NOPUNX1N ist:
DEFINE DATA PARAMETER USING NOPUNX1A PARAMETER 1 P-BUFFER-99000 (A99000) BY VALUE RESULT OPTIONAL ... END-DEFINE
Anmerkung:#BUFFER-99000 kann je nach der Größe, die mit
NOPUNX1A.BUFFER-TYPE angegeben wird, maximal 9900, 99000 oder
59000 Bytes enthalten. Die in den Puffer geschrieben Daten dürfen weniger Bytes
haben, aber nicht die angegebene Puffergröße überschreiten.
Mit FILE / DELETE kann man eine oder mehrere Dateien
löschen.
Wenn F-FILE ein Platzhalterzeichen (*) enthält, werden alle
Dateien gelöscht, für die das Platzhalterzeichen zutrifft.
Für FILE / COPY wird die Zieldatei in
F-RECORD-250 übergeben.
Für FILE / MOVE wird die Zieldatei in
F-RECORD-250 übergeben.
Zur Existenzprüfung einer Datei kann die Funktion FILE /
DIR mit einem eindeutigen Dateinamen verwendet werden. Wenn in
NOPUNX1A.RETURN-CODE eine Null zurückgegeben wird, so existiert
die Datei.
Mit FILE / DIR können Sie Dateilisten für ein Verzeichnis
erstellen.
Mit dem in NOPUNX1A.F-FILE bereitgestellten
Platzhalterzeichen-Ausdruck können Sie die Liste eingrenzen.
/tmp/* |
Alle Dateien im Verzeichnis
/tmp.
|
/tmp/*.txt |
Dateien im Verzeichnis /tmp, die mit
.txt enden.
|
Die Dateinamen werden in F-RECORD-BUFFER zurückgegeben. Die
Namen sind durch Semikolon (;) getrennt.
Als Beispiel für die Separierung siehe SHOW-DIR-BUFFER
(weiter unten).
Wenn der Puffer für die Dateinamen nicht ausgereicht hat, wird in
NOPUNX1A.RETURN-CODE der Wert 19 (more
objects) zurückgegeben.
Dateiename mit Platzhalterzeichen (Wildcard-Notation).
USER / LOGON
... allocate file name (with wildcard) in NOPUNX1A.F-FILE
R1. repeat
FILE / DIR
decide on first value of NOPUNX1A.RETURN-CODE
value 0, 19 /* 0: ok, 19: more objects
perform SHOW-DIR-BUFFER
none value
ignore
end-decide
if NOPUNX1A.RETURN-CODE ne 19
escape bottom (R1.)
end-if
add 1 to NOPUNX1A.F-LINE
end-repeat /* R1.
FILE / CLOSE
USER / LOGOFF
* ---------------------------------------------------------------------
DEFINE SUBROUTINE SHOW-DIR-BUFFER
* ---------------
* -- Function FILE / DIR:
* -- The record buffer contains a file list, with delimiter ';'
* -- This routine separates the single file names out of the buffer.
* -- #DIR-FILE and #DIR-REST should be declared as (A600)
*
SDB1. REPEAT
EXAMINE NOPUNX1A.F-RECORD-BUFFER FOR ';' REPLACE FIRST WITH ':'
SEPARATE NOPUNX1A.F-RECORD-BUFFER INTO #DIR-FILE #DIR-REST
WITH DELIMITER ':'
* -- now #DIR-FILE contains a single file name, without qualifiers
IF #DIR-REST = ' '
ESCAPE BOTTOM (SDB1.)
END-IF
NOPUNX1A.F-RECORD-BUFFER := #DIR-REST
END-REPEAT /* SDB1.
END-SUBROUTINE