Es wird ein IO-Area-Pool eingerichtet oder der Aufrufer an einen bestehenden gekoppelt. In die Parameterliste wird eine Kennung eingetragen (FPAMIPID), die bei den folgenden OPEN Aufrufen zu benutzen ist. Wenn dabei dieselbe Parameterliste benutzt wird, ist die Kennung bereits eingetragen und muss daher nicht beachtet werden. Von der Funktion ENAIPO werden nur die nachfolgend beschriebenen Funktionsoperanden ausgewertet.
Format FCT=*ENAIPO
Operation | Operanden |
|
|
| |
| |
|
Operandenbeschreibung
FCT
Bestimmt die auszuführende FASTPAM-Funktion.
Bei der Form MF=L ist nur die direkte Angabe erlaubt.
= *ENAIPO
Ist die direkte Angabe der Funktion ENABLE IOAREA POOL.
Es wird ein IO-Area-Pool eingerichtet oder der Aufrufer an einen bestehenden IO-Area-Pool gekoppelt.
In die Parameterliste wird eine Kennung eingetragen (FPAMIPID), die bei den folgenden OPEN-Aufrufen zu benutzen ist. Wenn dabei dieselbe Parameterliste benutzt wird, ist die Kennung bereits eingetragen und braucht daher nicht beachtet zu werden.
= adr
Ist die symbolische Adresse eines 1 Byte langen Feldes, das den Wert für die auszuführende Funktion ENABLE IOAREA POOL enthält.
= (r)
Ist ein Register, das den Wert für die Funktion ENABLE IOAREA POOL enthält.
IPOADDR
Bestimmt mittels einer Liste von 2 Elementen die Lage des IO-Area-Pools in einem Datenraum (Dataspace) bzw. im Programmraum (Programspace); (siehe Handbuch „Makroaufrufe an den Ablaufteil“ [2]).
= elem1
Enthält die auf 4 KByte ausgerichtete Anfangsadresse des Speicherbereichs im Datenraum bzw. Programmraum. Ist dieser Speicherbereich resident angelegt, darf er sich nicht mit dem Speicherbereich eines anderen IO-Area-Pools, mit dem Parameterlistenbereich eines Environments oder mit einem DIV-Fenster überlappen und muss vorher angefordert worden sein (REQM,REQMP...).
Liegt der Bereich in einem Memory-Pool, muss beim Anlegen des Memory-Pools im Makro ENAMP der Operand FIXED=YES angegeben worden sein.
Bei der Form MF=L ist nur die symbolische Adresse erlaubt, wobei symbolische Namen innerhalb einer DSECT ausgeschlossen sind, da ihre Adresse erst zur Laufzeit bekannt ist.
elem1 hat folgende Form:
elem1 =adr1 / (r1)
adr1 | Ist die symbolische Anfangsadresse des IO-Area-Pools im Daten- bzw. Programmraum. |
(r1) | Ist ein Register, das die Anfangsadresse des IO-Area-Pools im Daten- bzw. Programmraum enthält. |
= elem2
Kennzeichnet den Adressraum.
elem2 = 0: der IO-Area-Pool liegt im Programmadressraum
elem2 not equal 0: der IO-Area-Pool liegt in einem Datenraum mit dem ALET <elem2>
(ALET – Access List Entry Token; Zeiger auf einen Eintrag in der Zugriffsliste;
siehe Handbuch „Makroaufrufe an den Ablaufteil“ [2]). Datenräume werden allerdings nur nicht-resident unterstützt.
Bei der Form MF=L ist nur die direkte Angabe erlaubt.
elem2 hat folgende Form:
elem2 =adr2 / zahl / (r2)
zahl adr2 | Ist der numerische Wert des ALETs bzw. 0. Ist die symbolische Adresse eines 4 Byte langen Feldes, das den ALET |
(r2) | Ist ein Register, das den ALET bzw 0 enthält. |
IPONAME
Bezeichnet den Namen des IO-Area-Pools.
Bei der Form MF=L ist nur die direkte Angabe erlaubt.
= 'name'
Ist der Name des IO-Area-Pools.
Namenslänge: 1 <= 'name' <= 54 Zeichen.
Namensbildung:
1. Zeichen: Buchstabe oder Sonderzeichen #,@.
2. – 54. Zeichen: beliebige Kombination aus der Zeichenmenge (A,...,Z,0,...,9,$,#,@).
Das erste Blank (X'40') beendet den Namen.
Der Name muss in Hochkommata eingeschlossen werden.
= adr
Ist die symbolische Adresse eines 54 Byte langen Feldes, das den Namen des IO-Area-Pools enthält.
= (r)
Ist ein Register, das die Adresse eines 54 Byte langen Feldes mit dem Namen des IO-Area-Pools enthält.
IPOSIZE
Beschreibt die Größe des Speicherbereichs für den IO-Area-Pool in 4-KByte-Einheiten. Dieser Bereich muss zuvor in der entsprechenden Größe angelegt worden sein.
Bei der Form MF=L ist nur die direkte Angabe erlaubt.
= größe
Größe des Speicherbereichs für den IO-Area-Pool in 4-KByte-Einheiten:
(1 <= größe <= 219).
= adr
Ist die symbolische Adresse eines 4 Byte langen Feldes, das die Größe des Speicherbereiches für den IO-Area-Pool in 4-KByte-Einheiten enthält.
= (r)
Ist ein Register, das die Größe des Speicherbereichs in 4-KByte-Einheiten enthält.
MACID
Zu MACID siehe Beschreibung beim Format FCT=*ENAENV, "Funktion ENABLE ENVIRONMENT".
MF
Die Formen des MF-Operanden sind detailliert im Anhang ("Typen von Makroaufrufen") beschrieben.
PARAM
Zu PARAM siehe Beschreibung beim Format FCT=*ENAENV, "Funktion ENABLE ENVIRONMENT".
PREFIX
Zu PREFIX siehe Beschreibung beim Format FCT=*ENAENV, "Funktion ENABLE ENVIRONMENT".
RES
Gibt an, ob der IO-Area-Pool resident oder nicht-resident angelegt werden soll.
Bei der Form MF=L ist nur die direkte Angabe erlaubt.
= *NOT_SPECIFIED
Der IO-Area-Pool besteht schon, und der Teilnehmer will sich daran anschließen, unabhängig davon, ob der IO-Area-Pool resident angelegt ist oder nicht.
= *YES
Der IO-Area-Pool soll resident angelegt werden.
In diesem Fall wird überprüft, ob die Benutzerkennung über die FASTPAM-Berechtigung verfügt und ob die beim Programmaufruf angeforderte Anzahl von residenten Seiten für den IO-Area-Pool ausreicht (Benutzerkatalog: „RESIDENT-PAGES“ bzw. „CLASSII“). Bei negativem Ergebnis erhält der Anwender die Fehleranzeige „FPAMNORE“ und der IO-Area-Pool wird nicht-resident angelegt.
Speicherplatz in Datenräumen wird nur nicht-resident zur Verfügung gestellt.
= *NO
Der IO-Area-Pool soll nicht resident angelegt werden.
= adr
Ist die symbolische Adresse eines 1 Byte langen Feldes, das den Wert für RES enthält.
= (r)
Ist ein Register, das den Wert für RES enthält.
Mögliche Returncodes bei FCT=*ENAIPO
Standardheader: ccbbaaaa
Über die Ausführung des Makros FPAMSRV 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'0002' | Funktion nicht ausgeführt. | |
X'01' | X'0007' | Funktion nicht ausgeführt. | |
X'01' | X'0008' | Funktion nicht ausgeführt. | |
X'01' | X'0012' | Funktion nicht ausgeführt.
| |
X'20' | X'0028' | Funktion nicht ausgeführt. | |
X'40' | X'0032' | Das Environment bzw. der IO-Area-Pool konnte nicht resident angelegt werden. Zu Testzwecken kann das Anwendersystem weiterarbeiten, allerdings auf Kosten der FASTPAM-Performancevorteile. | |
X'01' | X'40' | X'0032' | Die USERID der Task, die das Environment bzw. den IO-Area-Pool eingerichtet hat, verfügt nicht über die FASTPAM-Berechtigung. |
X'02' | X'40' | X'0032' | Zu kleiner Realspeicher. |
X'03' | X'40' | X'0032' | Das beim Programmstart angegebene Kontingent an residentem Hauptspeicher ist überschritten. |
X'04' | X'40' | X'0032' | Konnektierung an ein nicht-residentes Environment bzw. an einen nicht-residenten IO-Area-Pool. |
X'05' | X'40' | X'0032' | In vorliegender FASTPAM-Version werden Datenräume (Data-Spaces) nur nicht-resident unterstützt. |
X'40' | X'0035' | Während der Ausführung der Funktionen *ENAENV/*ENAIPO läuft eine Ein-/Ausgabe auf die zu fixierenden Speicherseiten. | |
X'40' | X'0037' | Systembetriebsmittelengpass. | |
X'40' | X'0038' | An das genannte FASTPAM-Betriebsmittel können sich nur TPR-Tasks konnektieren. | |
X'40' | X'0039' | An das genannte FASTPAM-Betriebsmittel können sich nur Tasks einer Kennung mit FASTPAM-Privileg konnektieren. | |
X'40' | X'003D' | Der Teilnehmer will sich an einen bestehenden IO-Area-Pool mit einem anderen Operandenwert für IPOADDR konnektieren. | |
X'40' | X'003E' | Der Teilnehmer will sich an einen bestehenden IO-Area-Pool mit einem anderen Operandenwert für IPOSIZE konnektieren. | |
X'40' | X'0049' | Die Task ist bereits an den IO-Area-Pool konnektiert. | |
X'40' | X'004A' | Der angegebene Anwenderspeicher überlappt sich mit einem DIV-Fenster. | |
X'40' | X'004B' | Der angegebene Anwenderspeicher überlappt sich mit einem bereits verwendeten FASTPAM-Anwenderspeicher. | |
X'40' | X'0057' | Der Speicher für den IO-Area-Pool ist nicht vollständig angefordert worden. | |
X'40' | X'005B' | Beim 'ENAMP'-Aufruf zum Anlegen des Memory-Pools für die Access-Listen bzw. den IO-Area-Pool wurde nicht 'FIXED=YES' angegeben. |