Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Funktion CLOSE

Die Funktion CLOSE schließt die Datei.

Falls für den OPEN noch Fenster definiert sind, werden sie mit Standardwerten für die Operanden abgebaut.

Von der Funktion CLOSE werden nur die nachfolgend beschriebenen Funktionsoperanden ausgewertet.

Format FCT=*CLOSE

Operation

Operanden

DIV

[,FCT = *CLOSE / adr / (r)]

[,ID = adr / (r)]

MF = L

MF = E,PARAM = adr / (r)

MF = D[,PREFIX = D / pre]

MF = C / M

[,PREFIX = D / pre]

[,MACID = IVP / macid]

Operandenbeschreibung

FCT

Bestimmt die auszuführende DIV-Funktion.

= *CLOSE
Die Funktion CLOSE schließt die Datei.
Bei der Form MF=L ist nur die direkte Angabe erlaubt.

= adr
Ist die symbolische Adresse eines 1 Byte langen Feldes, das den Wert für die Funktion CLOSE enthält (Feld DIVPCLS, siehe Layout der Parameterliste, "Funktion CLOSE").

= (r)
Ist ein Register, das den Wert für die Funktion CLOSE enthält.

ID

Mit ID wird der OPEN spezifiziert, für den die Funktion CLOSE ausgeführt werden soll.

Wird dieselbe Parameterliste benutzt wie bei OPEN, ist die Angabe von ID nicht erforderlich, da sich dann die Identifikation des OPEN bereits in der Parameterliste befindet. Die Identifikation ist in DIVPID (siehe Parameterliste) enthalten.

Wird eine andere Parameterliste benutzt wie bei OPEN, kann durch ID die Identifikation zur Verfügung gestellt und in die neue Parameterliste übertragen werden (mit der Form MF=M des Makros DIV).

ID kann nicht mit der MF=L-Form angegeben werden.

= adr
Ist die symbolischen Adresse eines 8 Byte langen Feldes, das die Identifikation enthält.

= (r)
Register mit der Adresse eines 8 Byte langen Feldes, das die Identifikation enthält.

MACID

Zu MACID siehe Beschreibung beim Format FCT=*OPEN, "Funktion OPEN".

MF

Die Formen des MF-Operanden sind detailliert im Anhang ("Typen von Makroaufrufen") beschrieben.

PARAM

Zu PARAM siehe Beschreibung beim Format FCT=*OPEN, "Funktion OPEN".

PREFIX

Zu PREFIX siehe Beschreibung beim Format FCT=*OPEN, "Funktion OPEN"

Returncodes

Returncodes werden im Header der Parameterliste abgelegt. Die DIV-spezifischen Main-Returncodes werden in nachfolgender Tabelle erläutert. Weitere Returncodes, deren Bedeutung durch Konvention makroübergreifend festgelegt ist, sowie der Aufbau des Standardheaders, sind auf "Standardheader" beschrieben.

Standardheader: ccbbaaaa

Über die Ausführung des Makros DIV wird im Standardheader folgender Returncode übergeben (cc = SUBCODE2, bb = SUBCODE1, aaaa = MAINCODE):

X'cc'

X'bb'

X'aaaa'

Erläuterung


X'00'

X'0000'

Funktion erfolgreich ausgeführt

X'01'

X'0001'

Die Parameterliste ist zumindest nicht in ihrer vollen Länge zugreifbar. Falls auch auf den Header(teil) der Parameterliste nicht zugegriffen werden kann oder die Parameterliste nicht auf Wortgrenze ausgerichtet ist, wird das Programm mit einer Fehlermeldung abgebrochen.

X'01'

X'0002'

Die durch AREA (bei MAP oder UNMAP) spezifizierte Fensteradresse liegt nicht an einer 4-KB-Seitengrenze.

X'01'

X'0003'

Bei MAP, SAVE und RESET:
Die Bereichsgröße (SPAN) führt (evtl. im Zusammenhang mit dem spezifizierten OFFSET) zu einer zu großen Plattenadresse.
Bei MAP zusätzlich möglich:
Die Fenstergröße (SPAN) ist größer als 2 GB.

X'01'

X'0004'

Bei MAP, SAVE und RESET:
Der Wert für OFFSET entspricht einer zu großen Plattenadresse.

X'01'

X'0005'

Bei MAP: Der Wert für DISPOS ist weder *OBJECT noch *UNCHNG.
Bei UNMAP: Der Wert für DISPOS is weder *FRESH noch *UNCHNG.

X'01'

X'0006'

Der Wert für PFCOUNT liegt nicht im Bereich von 0 bis 15 (MAP).

X'01'

X'0007'

Der Wert für RELEASE ist weder *NO noch *YES (RESET).

X'01'

X'0008'

Der Wert für MODE (OPEN) ist weder *INPUT noch *INOUT noch *OUTIN.

X'01'

X'0009'

Der Wert für SHARUPD (OPEN) ist weder *NO noch *WEAK noch *YES.

X'01'

X'000A'

Der Wert für LOCVIEW (OPEN) ist weder *NONE noch *MAP.

X'01'

X'000B'

Der Wert für ENV (OPEN) ist weder *HOST noch *XCS.

X'01'

X'000C'

Der Wert für LARGE_FILE (OPEN) ist weder *ALLOWED noch *FORBIDDEN.

X'01'

X'000D'

DIV wird auf SPARC-HSI nicht unterstützt.

X'40'

X'0014'

DIV-Aufrufe aus TPR sind nicht erlaubt.


X'40'

X'0015'

Von der (allgemeinen) OPEN-Behandlung des DMS wurde ein Fehler erkannt. Der DMS-Fehlercode ist im Feld DIVPDMSC enthalten.

X'40'

X'0016'

Von der (allgemeinen) CLOSE-Behandlung des DMS wurde ein Fehler erkannt. Der DMS-Fehlercode ist im Feld DIVPDMSC enthalten.

X'40'

X'0017'

Die Datei ist bereits eröffnet.
Die OPEN-Anforderung wird zurückgewiesen, weil MODE-Wert und/oder SHARUPD-Wert der aktuellen OPEN-Anforderung und der bereits existierenden Eröffnung keine parallele Bearbeitung gestatten.

X'40'

X'0018'

Der OPEN wird auf Grund folgender Situationen zurückgewiesen:

  • Im Kommando ADD-FILE-LINK wurde ein OPEN MODE spezifiziert, der von DIV nicht unterstützt wird (z.B. OUTPUT).

  • Im Kommando ADD-FILE-LINK wurde ein anderer OPEN MODE spezifiziert als vom Programm.

  • Im Kommando ADD-FILE-LINK wurde ein unzulässiger Wert für ACCESS-METHOD spezifiziert.

  • Für eine neue Datei (MODE=*OUTIN) wurde im Kommando ADD-FILE-LINK der Operand BUFFER-LENGTH explizit mit einem
    Wert ungleich 2 spezifiziert.

  • Im Kommando ADD-FILE-LINK wurde der Operand BLOCK-CONTROL-INFO fehlerhaft spezifiziert oder es wird versucht, eine
    existierende Datei zu eröffnen, die nicht die Eigenschaft BLKCTRL=NO besitzt.

X'40'

X'0019'

Es ist weder ein Linkname noch ein Dateiname angegeben (OPEN).

X'40'

X'001A'

Die zu eröffnende Datei befindet sich auf einer Shared Private Disk (SPD). Dateien auf Shared Private Disk (SPD) werden von DIV nicht bearbeitet.

X'40'

X'001B'

Ein Fenster mit dem Attribut DISPOS=*UNCHNG ist nicht für eine mit MODE=*INPUT eröffnete Datei erlaubt (MAP).

X'40'

X'001C'

Die Privilegierung (USER oder SYSTEM) des Eröffners (OPEN) unterscheidet sich von der Privilegierung des Rufers der Funktion MAP, UNMAP, SAVE, RESET oder CLOSE.

X'40'

X'001D'

Die bei einer der Funktionen MAP, UNMAP, SAVE, RESET oder CLOSE zur Kennzeichnung des OPEN mitgegebene ID ist DIV nicht (mehr) bekannt. Möglicherweise ist die Parameterliste von der Parameterliste des OPEN verschieden und ID wurde nicht versorgt oder die Datei wurde bereits geschlossen.

X'40'

X'001E'

SPID wurde angegeben, kennzeichnet jedoch keinen Datenraum für das Fenster oder einen Datenraum, auf den der Rufer nicht zugreifen darf (MAP, UNMAP).

X'40'

X'001F'

Zumindest ein Teil des für ein Fenster spezifizierten Adressraums ist bereits von einem existierenden Fenster belegt (MAP).


X'40'

X'0020'

Zumindest ein Teil des für ein Fenster spezifizierten Dateibereichs ist bereits in einem Fenster des Eröffners abgebildet (MAP).

X'40'

X'0021'

SPAN ist nicht spezifiziert (bzw. SPAN=0) und kann zur Definition eines Fensters (MAP) von DIV nicht bestimmt werden, weil entweder

  • die Datei leer ist oder

  • OFFSET hinter die logisch letzte Seite zeigt.

X'40'

X'0022'

Der Fensterbereich enthält mehrere Speicherklassen (z.B. Klasse-5-Speicher und Klasse-6-Speicher) (MAP).

X'40'

X'0023'

Eine Seite im virtuellen Adressraum soll zu einer Fensterseite gemacht werden und ist (für eine Ein/Ausgabe) fixiert (MAP).

X'40'

X'0024'

Eine für ein Fenster vorgesehene Seite im virtuellen Adressraum ist resident (MAP).

X'40'

X'0025'

Eine für ein Fenster vorgesehene Seite im virtuellen Adressraum ist eine READ-ONLY Seite (MAP).

X'40'

X'0026'

Zumindest ein Teil des für ein Fenster definierten Adressraums ist nicht allokiert (es wurde z. B. kein REQM durchgeführt) (MAP).

X'40'

X'0027'

Der für ein Fenster spezifizierte Adressraum ist sharable (MAP).

X'40'

X'0028'

Der für ein Fenster spezifizierte Adressraum ist nicht für den nicht-privilegierten Anwender zugreifbar und der Rufer ist nicht privilegiert (MAP).

X'40'

X'0029'

Eine DIV-interne Tabelle kann nicht angelegt werden wegen fehlendem Benutzeradressraum (MAP).

X'40'

X'002A'

Die Datei kann nicht (physikalisch) verlängert werden (MAP), weil

  • entweder kein Plattenbereich mehr für den Benutzer zur Verfügung steht oder

  • für die Datei eine Sekundärallokierung nicht vorgesehen ist (Operand SPACE... SEC-ALLOC im Kommando CREATE-FILE
    oder MODIFY-FILE-ATTRIBUTES).

X'40'

X'002B'

Beim Lesen eines Blocks trat ein Fehler auf (MAP, UNMAP).

X'40'

X'002C'

Beim Schreiben eines Blocks trat ein Fehler auf (SAVE).

X'40'

X'002D'

Das durch AREA (und SPID) definierte Fenster existiert nicht für den aktuellen OPEN (UNMAP).

X'40'

X'002E'

Für den durch OFFSET und SPAN definierten Datenbereich existiert kein Fenster (SAVE, RESET).

X'40'

X'002F'

SAVE ist für einen Leser nicht erlaubt.

X'40'

X'0030'

Beim Zugriff auf eine Datei im Modus SHARUPD=YES wurde festgestellt, dass die Dateigröße den Wert von 32 GB übersteigt, beim OPEN für diese Datei wurde aber ein Überschreiten von 32 GB nicht erlaubt.


X'80'

X'003C'

Das Subsystem DIV wurde durch ein Kommando gestoppt.
Weitere OPEN werden daher abgewiesen.

X'80'

X'003E'

Zum Aufbau interner Tabellen von DIV benötigter Systemadressraum steht nicht zur Verfügung (OPEN, MAP).

X'20'

X'0046'

DIV-interner Fehler.

X'20'

X'0047'

Vermutlich auf Grund eines DIV-internen Fehlers wurde vergeblich auf die Freigabe eines gesperrten Betriebsmittels gewartet.


Erläuterungen zu den Returncodes

Returncodes werden im Header der Parameterliste abgelegt:

  • Der Main Returncode in einem Halbwort mit dem Namen DIVPMRET.

  • Der Subcode1 in einem Byte mit dem Namen DIVPSR1.
    Subcode1 beschreibt Fehlerklassen, die es dem Aufrufer emöglichen, auf Fehlerklassen zu reagieren (vgl. Tabelle "Standardheader"). Der Aufrufer kann sich sowohl am Maincode als auch am Subcode1 orientieren.

  • Der Subcode2 wird z.Zt. nicht verwendet. Er ist immer null (X'00').

In folgenden Fällen können die Returncodes nicht im Header abgelegt werden:

  • Die Liste ist dem Aufrufer nicht zugewiesen.

  • Die Liste ist nicht auf Wortgrenze ausgerichtet.

  • Die Liste ist gegen Schreibzugriff geschützt.

Das aufrufende Programm wird dann mit einer Fehlermeldung beendet (siehe Abschnitt „Fehlermeldungsschlüssel im DVS") und das STXIT Ereignis „nicht behebbarer Programmfehler“ erzeugt.

Die mit der C- oder D-Form des Makros generierten Feldnamen und EQU-Anweisungen für die Returncodes beginnen standardmäßig mit der Zeichenfolge DIVP, die durch PREFIX und MACID geändert werden kann.

Layout der Parameterliste

Von einem DIV-Makroaufruf mit MF=D wird folgende Parameterliste abgesetzt:

           DIV   MF=D 
1          MFCHK MF=D,PREFIX=D,MACID=IVP,PARAM=, 
1                SVC=126,DMACID=IVP,DNAME=IVPLIST,SUPPORT=(C,D,E,L,M) 
2 DIVPLIST DSECT , 
2                *,##### PREFIX=D, MACID=IVP ##### 
1          #INTF REFTYPE=REQUEST,INTNAME=DIV,INTCOMP=002 
1 * 
1 DIVPPA   DS    0F          BEGIN of PARAMETERAREA 
1          FHDR  MF=(C,DIVP),EQUATES=YES 
2          DS    0A
2 DIVPFHE  DS    0XL8            0   GENERAL PARAMETER AREA HEADER 
2 * 
2 DIVPIFID DS    0A              0   INTERFACE IDENTIFIER 
2 DIVPFCTU DS    AL2             0   FUNCTION UNIT NUMBER 
2 *                                  BIT 15    HEADER FLAG BIT, 
2 *                                  MUST BE RESET UNTIL FURTHER NOTICE 
2 *                                  BIT 14-12 UNUSED, MUST BE RESET 
2 *                                  BIT 11-0  REAL FUNCTION UNIT NUMBER 
2 DIVPFCT  DS    AL1             2   FUNCTION NUMBER 
2 DIVPFCTV DS    AL1             3   FUNCTION INTERFACE VERSION NUMBER 
2 * 
2 DIVPRET  DS    0A              4   GENERAL RETURN CODE 
2 * 
2 * GENERAL_RETURN_CODE CLEARED (X'00000000') MEANS 
2 * REQUEST SUCCESSFUL PROCESSED AND NO ADDITIONAL INFORMATION 
2 * 
2 DIVPSRET DS    0AL2            4   SUB RETURN CODE 
2 DIVPSR2  DS    AL1             4   SUB RETURN CODE 2 
2 * ALWAYS CLEARED (X'00') IF MAIN_RETURN_CODE IS X'FFFF' 
2 * Standard subcode2 values as defined by convention: 
2 DIVPR2OK EQU   X'00'               All correct, no additional info 
2 DIVPR2NA EQU   X'01'               Successful, no action was necessary 
2 DIVPR2WA EQU   X'02'               Warning, particular situation 
2 DIVPSR1  DS    AL1             5   SUB RETURN CODE 1 
2 * 
2 * GENERAL INDICATION OF ERROR CLASSES 
2 * 
2 * CLASS A    X'00'           FUNCTION WAS SUCCESSFULLY PROCESSED 
2 * CLASS B    X'01' - X'1F'   PARAMETER SYNTAX ERROR 
2 * CLASS C    X'20'           INTERNAL ERROR IN CALLED FUNCTION 
2 * CLASS D    X'40' - X'7F'   NO CLASS SPECIFIC REACTION POSSIBLE 
2 * CLASS E    X'80' - X'82'   WAIT AND RETRY 
2 * 
2 DIVPRFSP EQU   X'00'               FUNCTION SUCCESSFULLY PROCESSED
2 DIVPRPER EQU   X'01'               PARAMETER SYNTAX ERROR 
2 *  3 GLOBALLY DEFINED ISL ERROR CODES IN CLASS X'01' - X'1F' 
2 DIVPRFNS EQU   X'01'               CALLED FUNCTION NOT SUPPORTED 
2 DIVPRFNA EQU   X'02'               CALLED FUNCTION NOT AVAILABLE 
2 DIVPRVNA EQU   X'03'               INTERFACE VERSION NOT SUPPORTED 
2 * 
2 DIVPRAER EQU   X'04'               ALIGNMENT ERROR 
2 DIVPRIER EQU   X'20'               INTERNAL ERROR 
2 DIVPRCAR EQU   X'40'               CORRECT AND RETRY 
2 *  2 GLOBALLY DEFINED ISL ERROR CODES IN CLASS X'40' - X'7F' 
2 DIVPRECR EQU   X'41'               SUBSYSTEM (SS) MUST BE CREATED 
2 *                                  EXPLICITELY BY CREATE-SS 
2 DIVPRECN EQU   X'42'               SS MUST BE EXPLICITELY CONNECTED 
2 * 
2 DIVPRWAR EQU   X'80'               WAIT FOR A SHORT TIME AND RETRY 
2 DIVPRWLR EQU   X'81'                    "     LONG       " 
2 DIVPRWUR EQU   X'82'               WAIT TIME IS UNCALCULABLY LONG 
2 *                                  BUT RETRY IS POSSIBLE 
2 *  2 GLOBALLY DEFINED ISL ERROR CODES IN CLASS X'80' - X'82' 
2 DIVPRTNA EQU   X'81'               SS TEMPORARILY NOT AVAILABLE 
2 DIVPRDH  EQU   X'82'               SS IN DELETE / HOLD 
2 * 
2 DIVPMRET DS    0AL2            6   MAIN RETURN CODE 
2 DIVPMR2  DS    AL1             6   MAIN RETURN CODE 2 
2 DIVPMR1  DS    AL1             7   MAIN RETURN CODE 1 
2 * 
2 * SPECIAL LAYOUT OF LINKAGE_MAIN_RETURN_CODE (YYYY IN X'00XXYYYY') 
2 * 
2 DIVPRLNK EQU   X'FFFF'             LINKAGE ERROR / REQ. NOT PROCESSED 
2 DIVPFHL  EQU   8               8   GENERAL OPERAND LIST HEADER LENGTH 
2 * 
1 *                          DIV-FUNCTIONS: 
1 DIVPOPEN EQU   1           OPEN 
1 DIVPCLS  EQU   2           CLOSE 
1 DIVPMAP  EQU   3           MAP 
1 DIVPUNMP EQU   4           UNMAP 
1 DIVPSAVE EQU   5           SAVE 
1 DIVPRES  EQU   6           RESET 
1 *                          DIV-MAINCODES: 
1 DIVPPNAC EQU   1           PARLIST NOT ACCESSIBLE 
1 DIVPIWAD EQU   2           INVALID WINDOW ADDRESS 
1 DIVPISPA EQU   3           INVALID SPAN 
1 DIVPIOFF EQU   4           INVALID OFFSET 
1 DIVPIDSP EQU   5           INVALID DISPOS 
1 DIVPIPFC EQU   6           INVALID PFCOUNT 
1 DIVPIREL EQU   7           INVALID RELEASE 
1 DIVPIOM  EQU   8           INVALID OPEN MODE 
1 DIVPISUM EQU   9           INVALID SHARUPD MODE
1 DIVPILVM EQU   10          INVALID LOCVIEW MODE 
1 DIVPIENV EQU   11          INVALID LOCKENV 
1 DIVPILRF EQU   12          INVALID LARGE_FILE 
1 DIVPNSPA EQU   13          DIV NOT SUPPORTED ON SPARC-HSI 
1 DIVPPRVC EQU   20          PRIVILEGED DIV CALL 
1 DIVPDOER EQU   21          DMS OPEN ERROR 
1 DIVPDCER EQU   22          DMS CLOSE ERROR 
1 DIVPICOM EQU   23          INCOMPATIBLE OPEN MODE 
1 DIVPICFS EQU   24          INCOMPATIBLE FILE SPEC 
1 DIVPNLNF EQU   25          NEITHER LINK NOR FILE 
1 DIVPPD   EQU   26          PRIVATE DISK 
1 DIVPDOI  EQU   27          DISPOS OPEN INCONSISTENCY 
1 DIVPPRVI EQU   28          PRIV INCONSISTENCY 
1 DIVPWRID EQU   29          WRONG ID 
1 DIVPSIDU EQU   30          SPID UNDEFINED 
1 DIVPSPOV EQU   31          SPACE OVERLAP 
1 DIVPFOV  EQU   32          FILE OVERLAP 
1 DIVPUSNP EQU   33          UNDEF SPAN NOT POSSIBLE 
1 DIVPINHM EQU   34          INHOMOG MEM 
1 DIVPPFIX EQU   35          PAGE FIXED 
1 DIVPRESP EQU   36          RESIDENT PAGE 
1 DIVPROP  EQU   37          READ ONLY PAGE 
1 DIVPMNA  EQU   38          MEM NOT ALLOC 
1 DIVPSHRM EQU   39          SHARABLE MEMORY 
1 DIVPPRSP EQU   40          PRIVILEGED SPACE 
1 DIVPNOAS EQU   41          NO ADDRESS SPACE 
1 DIVPALER EQU   42          ALLOC ERROR 
1 DIVPRDER EQU   43          READ ERROR 
1 DIVPWRER EQU   44          WRITE ERROR 
1 DIVPWNF  EQU   45          WINDOW NOT FOUND 
1 DIVPNWIR EQU   46          NO WINDOW IN RANGE 
1 DIVPSAVN EQU   47          SAVE NOT ALLOWED 
1 DIVPLFNS EQU   48          LARGE_FILE NOT SPECIFIED 
1 DIVPSSS  EQU   60          SUBSYSTEM STOPPED 
1 DIVPSOR  EQU   61          SHORTAGE OF RESOURCES 
1 DIVPIERR EQU   70          INTERNAL ERROR 
1 DIVPTOUT EQU   71          TIME RUNOUT 
1 * 
1 DIVPID   DS    XL8         ID 
1 DIVPLARF DS    AL1         LARGE_FILE 
1 DIVPFRBD EQU   0           LARGE_FILE=FORBIDDEN 
1 DIVPALWD EQU   1           LARGE_FILE=ALLOWED 
1 DIVPUNUS DS    AL1         UNUSED BYTE 
1 DIVPDMSC DS    H           DMS-CODE 
1 DIVPLINK DS    CL8         LINK 
1 DIVPFILE DS    CL54        FILE 
1 DIVPOMOD DS    AL1         MODE 
1 DIVPINPT EQU   1           MODE=INPUT
1 DIVPINOT EQU   2           MODE=INOUT 
1 DIVPOUTI EQU   3           MODE=OUTIN 
1 DIVPSUPD DS    AL1         SHARUPD 
1 DIVPSNO  EQU   1           SHARUPD=NO 
1 DIVPSWEA EQU   2           SHARUPD=WEAK 
1 DIVPSYES EQU   3           SHARUPD=YES 
1 DIVPLOCV DS    AL1         LOCVIEW 
1 DIVPLNON EQU   1           LOCVIEW=NONE 
1 DIVPLMAP EQU   2           LOCVIEW=MAP 
1 DIVPDISP DS    AL1         DISPOS 
1 DIVPOBJ  EQU   1           DISPOS=OBJECT 
1 DIVPUNCH EQU   2           DISPOS=UNCHNG 
1 DIVPFRSH EQU   3           DISPOS=FRESH 
1 DIVPREL  DS    AL1         RELEASE 
1 DIVPRNO  EQU   1           RELEASE=NO 
1 DIVPRYES EQU   2           RELEASE=YES 
1 DIVPLENV DS    AL1         LOCKENV 
1 DIVPHOST EQU   1           LOCKENV=HOST 
1 DIVPXCS  EQU   2           LOCKENV=XCS 
1 DIVPSIZE DS    F           SIZE 
1 DIVPSPID DS    XL8         SPID 
1 DIVPAREA DS    A           AREA 
1 DIVPOFFS DS    F           OFFSET 
1 DIVPSPAN DS    F           SPAN 
1 DIVPPFC  DS    F           PFCOUNT 
1 DIVP#    EQU   (*-DIVPPA)  LENGTH OF STRUCTURE  

Beispiele

Beispiel 1: Lesen und Aktualisieren einer existierenden Datei

*---------------------------------------------------------------------*
* Beispiel 1: Lesen und Aktualisieren einer existierenden Datei.      *
*---------------------------------------------------------------------*
D1       DIV     MF=D
*
BSP001   START
         BALR  R10,0
         USING *,R10
         USING D1,R9
         LA    R9,PA
*---------------------------------------------------------------------*
* Eröffnen der Datei mit INOUT                                        *
*---------------------------------------------------------------------*
         DIV   MF=E,PARAM=PA
         CLI   DIVPSR1,DIVPRFSP
         BNE   ERROR
*---------------------------------------------------------------------*
* Ermitteln der Dateigröße und Anfordern der Seiten für ein Fenster   *
* REQM liefert die Anfangsadresse in R1.                              *
*---------------------------------------------------------------------*
         L     R3,DIVPSIZE        DATEIGROESSE IN 4KB-SEITEN -> R3
         REQM  (R3),PARMOD=31
         LTR   R15,R15
         BNZ   ERROR
         LR    R8,R1
*---------------------------------------------------------------------*
* Erzeugen eines Fensters, in dem die Seiten der Datei erst bei einem *
* Zugriff erscheinen (DISPOS=*OBJECT und LOCVIEW=*NONE sind Standard) *
* Das Fenster wird in der Dateigröße angelegt (OFFSET und SPAN sind   *
* nicht spezifiziert).                                                *
*---------------------------------------------------------------------*
         DIV   MF=M,PARAM=PA,FCT=*MAP,AREA=(R8)
         DIV   MF=E,PARAM=PA
         CLI   DIVPSR1,DIVPRFSP
         BNE   ERROR
*---------------------------------------------------------------------*
* Schreiben geänderter Fensterseiten in die Datei.                    *
*---------------------------------------------------------------------*
         DIV   MF=M,PARAM=PA,FCT=*SAVE
         DIV   MF=E,PARAM=PA
         CLI   DIVPSR1,DIVPRFSP
         BNE   ERROR
*---------------------------------------------------------------------*
* Abbau des Fensters und Schließen der Datei.                         *
* Nach dem Abbau des Fensters sind die Seiten im Zustand wie unmittel-*
* bar nach REQM.                                                      *
*---------------------------------------------------------------------*
*
         DIV   MF=M,PARAM=PA,FCT=*UNMAP,DISPOS=*FRESH
         DIV   MF=E,PARAM=PA
         CLI   DIVPSR1,DIVPRFSP
         BNE   ERROR
*
         DIV   MF=M,PARAM=PA,FCT=*CLOSE
         DIV   MF=E,PARAM=PA
         CLI   DIVPSR1,DIVPRFSP
         BNE   ERROR
*
*
ERROR    DS   0Y
*
*
PA       DIV   MF=L,FCT=*OPEN,LINK='TST001',MODE=*INOUT
         END


Beispiel 2: Kopieren und Modifizieren einer Datei

*---------------------------------------------------------------------*
* Beispiel 2: Kopieren und Modifizieren einer Datei.                  *
*---------------------------------------------------------------------*
*
D1       DIV     MF=D
*
BSP002   START
         BALR  R10,0
         USING *,R10
         USING D1,R9
         LA    R9,PA1
*---------------------------------------------------------------------*
* Eröffnen einer existierenden Datei.                                 *
*---------------------------------------------------------------------*
         DIV   MF=E,PARAM=PA1
         CLI   DIVPSR1,DIVPRFSP
         BNE   ERROR
*---------------------------------------------------------------------*
* Ermitteln der Dateigröße und Anfordern der Seiten für ein Fenster   *
* REQM liefert die Anfangsadresse in R1.                              *
*---------------------------------------------------------------------*
         L     R3,DIVPSIZE        DATEIGROESSE IN 4KB-SEITEN -> R3
         REQM  (R3),PARMOD=31
         LTR   R15,R15
         BNZ   ERROR
         LR    R8,R1
*---------------------------------------------------------------------*
* Erzeugen eines Fensters, wobei die Seiten der Datei sofort einge-   *
* lesen werden (Die Seiten der Datei erscheinen im Fenster wegen      *
* DISPOS=*OBJECT (Standardfall), die Seiten werden sofort eingelesen  *
* wegen LOCVIEW=*MAP).                                                *
* Das Fenster wird in der Dateigröße angelegt (OFFSET und SPAN sind   *
* nicht spezifiziert).                                                *
*---------------------------------------------------------------------*
         DIV   MF=M,PARAM=PA1,FCT=*MAP,AREA=(R8)
         DIV   MF=E,PARAM=PA1
         CLI   DIVPSR1,DIVPRFSP
         BNE   ERROR
*---------------------------------------------------------------------*
* Modifizieren von Fensterseiten.                                     *
*---------------------------------------------------------------------*
*
*
*---------------------------------------------------------------------*
* Abbau des Fensters und Schließen der Datei.                         *
* Der Inhalt der Fensterseiten bleibt erhalten (wegen DISPOS=*UNCHNG).*
*---------------------------------------------------------------------*
*
         DIV   MF=M,PARAM=PA1,FCT=*UNMAP,DISPOS=*UNCHNG
         DIV   MF=E,PARAM=PA1
         CLI   DIVPSR1,DIVPRFSP
         BNE   ERROR
*
         DIV   MF=M,PARAM=PA1,FCT=*CLOSE
         DIV   MF=E,PARAM=PA1
         CLI   DIVPSR1,DIVPRFSP
         BNE   ERROR
*
*---------------------------------------------------------------------*
* Öffnen der neuen Datei.                                             *
*---------------------------------------------------------------------*
         LA    R9,PA2
         DIV   MF=E,PARAM=PA2
         CLI   DIVPSR1,DIVPRFSP
         BNE   ERROR
*---------------------------------------------------------------------*
* Erzeugen eines Fensters, wobei die Daten erhalten bleiben (wegen    *
* DISPOS=*UNCHNG).                                                    *
* Die Bereichsadresse ist noch in R8, die Fenstergröße in R3          *
*---------------------------------------------------------------------*
         DIV   MF=M,PARAM=PA2,FCT=*MAP,AREA=(R8),DISPOS=*UNCHNG,SPAN=(R3)
         DIV   MF=E,PARAM=PA2
         CLI   DIVPSR1,DIVPRFSP
         BNE   ERROR
*---------------------------------------------------------------------*
* Schreiben der Fensterseiten in die neue Datei.                      *
*---------------------------------------------------------------------*
         DIV   MF=M,PARAM=PA2,FCT=*SAVE
         DIV   MF=E,PARAM=PA2
         CLI   DIVPSR1,DIVPRFSP
         BNE   ERROR
*---------------------------------------------------------------------*
* Abbau des Fensters und Schliessen der Datei.                        *
*---------------------------------------------------------------------*
         DIV   MF=M,PARAM=PA2,FCT=*UNMAP,DISPOS=*FRESH
         DIV   MF=E,PARAM=PA2
         CLI   DIVPSR1,DIVPRFSP
         BNE   ERROR
*
         DIV   MF=M,PARAM=PA2,FCT=*CLOSE
         DIV   MF=E,PARAM=PA2
         CLI   DIVPSR1,DIVPRFSP
         BNE   ERROR
*
*
ERROR    DS   0Y
*
*
PA1      DIV   MF=L,FCT=*OPEN,LINK='TST001',LOCVIEW=*MAP
PA2      DIV   MF=L,FCT=*OPEN,LINK='TST002',MODE=*OUTIN
         END