![]() |
| 17. CFS-Benutzerexits |
| Unter CFS können externe Routinen aufgerufen werden als: | |
| a) | User Options zur Auswertung der Katalogeinträge nach speziellen Merkmalen. | |
| b) | Variable Actions zur Realisierung besonderer Verarbeitungsarten für Dateien /Bibliothekselemente/Jobvariablen. | |
| c) | Action-Codes zur Realisierung besonderer Verarbeitungsarten für Dateien/ Bibliothekselemente/Jobvariablen über eigene Action-Codes. | |
| d) | Kommandos zur Realisierung besonderer Verarbeitungsarten für Dateien/ Bibliothekselemente/Jobvariablen. | |
| Der CFS-Anwender kann eine externe User Option bzw. Kommandoroutine in folgender Form aufrufen: | |
| (modul [, bibl]) [ params] | |
| Der Aufruf einer externen Routine für eine Variable Action erfolgt in der Form: | |
| ONX(modul [, bibl]) [ params] | ON&(modul [, bibl]) [ params] | |
| modul | Name der aufzurufenden Routine (Modul-/CSECT-Name). | |
| bibl | Bibliothek, aus der die Benutzerroutine nachzuladen ist. | |
| Standard: CFSLIB | ||
| params | wahlweise Parameter, die der Benutzerroutine beim Aufruf mitgegeben werden und die deren Ausführung steuern. | |
| Der Aufruf einer externen Action-Code Routine geschieht durch Angabe des betreffenden Action-Codes in der Action-Spalte. | |
| Damit CFS diesen Action-Code richtig verarbeitet, muß er vom Systemverwalter in eine CFS-interne Action-Code Tabelle eingetragen werden. Genaueres hierzu finden Sie im Quellprogramm CFSMAIN in der CFS.S.LMSLIB. | |
| Aufrufkonventionen für externe Routinen: | |
| R1 | Adresse der Parameterliste | |
| R13 | Adresse einer 72 Byte langen Save-Area | |
| R14 | Returnadresse in CFS | |
| R15 | Ansprungadresse der Benutzerroutine | |
| Die Registersicherstellung sollte nach den Standardkonventionen erfolgen: | |
| STM | 14,12,12(13) (Ansprung) | |
...
| LM | 14,12,12(13) (Rückkehr) | |
| In der ausgelieferten LMS-Bibliothek CFS.S.LMSLIB befinden sich Quellprogramme als Beispiele zu den einzelnen Arten von externen Routinen: | |
| a) | FREE als Beispiel einer Routine zur Realisierung eine benutzereigenen User Option (Free Space). | |
| b) | CONV als Beispiel einer Routine für eine benutzereigene Variable Action. | |
| c) | PREMOTE als Beispiel einer Routine für einen benutzereigenen Action-Code (PD). | |
| d) | VSNSP als Beispiel einer Routine für ein benutzereigenes CFS-Kommando. | |
| VSNSP gibt für die spezifizierte Datei (siehe unten) alle VSNs, auf denen die Datei Speicherplatz belegt hat, sowie für jede VSN die Anzahl der auf ihr belegten PAM-Seiten. Die Aufrufsyntax lautet: (VSNSP) datei. | ||
| Hinweise: | |
| Die beim Aufruf der externen Routinen benutzten Eingabeparameterleisten sind in den oben erwähnten Beispielprogrammen intern dokumentiert. | |
| Benutzerdefinierte Action-Codes müssen, um als solche erkannt zu werden, dem CFS-System bekannt gemacht werden. Hierzu existiert eine besondere Action-Code Tabelle. Die Struktur des Tabellenelements für den Action-Code PD ist im Quellprogramm CFSMAIN in der CFS.S.LMSLIB beschrieben. | |
| Auch im Connection-Handler besteht die Möglichkeit einer eigenen Nachrichtenbehandlung. Für nähere Informationen hierzu kontaktieren Sie bitte die OPG Online-Programmierung. | |
| CFS als Unterprogramm |
| LINK ENTRY=CFSMAIN,LIBNAM=$TSOS.CFSLIB,INHIBIT=YES | |
| Beim Laden von CFSMAIN werden weitere Module per Autolink-Funktion nachgezogen. Daher bietet es sich an, gleich einen Großmodul über LINK-Makro zu laden, der die notwendigen Untermodule CFSUP und GDATE bereits enthält. Dieser Großmodul CFS2 kann durch /DO CFS. S.LMSLIB(CFSLNK2) erzeugt werden. |
| Der Modul CFSMAIN bzw. der Großmodul CFS2 muß auf Seitengrenze im unteren Adressraum geladen werden. |
| Der Modul CFSMAIN liegt in der Bibliothek CFS.S.LMSLIB im Sourcecode vor und kann zur Initialisierung von RZ- bzw. benutzerspezifischen Standardwerten angepaßt werden. |
| CFS aktiviert intern Stxit's für INTR-, ABEND-, K2- (ESCPBRK) und SVC-Ereignisse. |
| Das Hauptprogramm kann CFS Selektionsparameter, Kommandos, Action-Codes, sowie Daten zur Modifikation von Dateien mitgeben. Damit besteht die Möglichkeit, beim Aufruf von CFS durch ein übergeordnetes Hauptprogramm bereits eine Reihe von Aktionen ausführen zu lassen, z.B. Dateien / Elemente aus einer bestimmten Bibliothek selektieren, Eröffnen von Connections, Laden von P-Tasten, bestimmte CFS-Modi einstellen, bestimmte Dateien/Bibliothekselemente selektieren, Dateien in den EDT laden, Dateien im Display von CFS anzeigen usw. |
| Die verschiedenen Nutzungsmöglichkeiten von CFS als Unterprogramm werden am besten durch die Beschreibung der Aufrufparameterliste erläutert. |
| Aufrufkonventionen und Parameterliste: Hauptprogramm --> CFS |
| Registerbelegung | ||
| R1 | Adresse der Parameterliste für CFSUP. | ||
| R13 | Adresse einer 18 Worte langen Save-Area im aufrufenden Programm. | ||
| R14 | Rückkehradresse in das Hauptprogramm. | ||
| R15 | Einsprungadresse: Beginn des Moduls CFS2 bzw. CFSMAIN. | ||
| Parameterliste | ||
P1 DC A(RECTABLE) | A(0)
| |
P2 DC A(IND)
| |
DC A(3) | optional, nur bei IND = C'N' sinnvoll | |
P3 DC A(CFSLIB) | optional, nur bei IND = C'N' sinnvoll | |
P1 DC A(RECTABLE)
| |
| Liste von Eingabesätzen im RDATA-Format. | |
| CFS verhält sich wie in einer Dialogprozedur (siehe Seite 19-). Insbesondere wird die durch einen *002-Satz definierte Selektion ausgeführt. | |
| RECTABLE | Liste von Eingabesätzen im V-Format. RECTABLE hat die gleiche Funktion wie SYSDTA, nur daß die Datensätze im virtuellen Speicher und nicht in einer Datei übergeben werden. Das Ende von RECTABLE ist durch das Zeichen X'80' zu markieren. Nach Erreichen des Endes von RECTABLE, bzw. nach Lesen eines *DIA-Satzes (siehe Seite 19-) erwartet CFS alle weiteren Eingaben vom Bildschirm. | ||
P1 DC A(0)
| |
| CFS erhält vom aufrufenden Programm keine Eingaben. | |
| Nach dem Ansprung durch das Benutzerprogramm kommt CFS am Bildschirm mit der Selektionsmaske wie nach einem normalen EXEC durch den Benutzer. Die Rückkehr in das Hauptprogramm kann erfolgen durch die Kommandos END / * / MAIN. | |
P2 DC A(IND)
| |
IND DC C'N'
| ||
| New | CFS beginnt mit einem neuen Verarbeitungsgang, d.h. es wird als erstes ein Satz zur Spezifizierung der Selektionsbedingungen erwartet (*001-, bzw. *002-Satz). | ||
IND DC C'C'
| ||
| Continue | Fortsetzungsaufruf. CFS fährt an der Stelle fort, an welcher es beim letzten Aufruf aufgrund der Kommandos END / * / MAIN unterbrochen wurde. | ||
P3 DC A(CFSLIB)
| |
CFSUID DC CL54'$userid.CFSLIB'
| ||
| Name der eingesetzten CFSLIB. | |||
| Falls angegeben, wird aus dieser Angabe die Kennung, unter der CFS gespeichert ist ermittelt. Die Kennung wird anstelle der Standardkennung $TSOS. vor die Namen der internen CFS-Dateien CFSLIB, CFSHELP, CFSCOM, CFS.MESSAGE, CFSPROT, CFSTERM, CFS.PDFILE, CFS.INF.FORMAT und CFSUSER gesetzt. | |||
| Beispiel: | |
| In der CFS.S.LMSLIB finden Sie unter dem Namen TEST ein einfaches Musterprogramm, in dem CFS mehrere Male als Unterprogramm aufgerufen wird. Das Programm kann mit /DO CFS.S.LMSLIB(ASSEMB),TEST übersetzt und mit /EXEC (TEST, CFSLIB) aufgerufen werden. | |
| Im folgenden Beispiel ist eine Parameterleiste des Hauptprogramms für CFS dargestellt. | |
P1 DC A(RECTABLE)
| |
P2 DC A(IND)
| |
IND DC C'N'
| |
RECTABLE DS 0A
| |
REC1 DC AL2(REC1L,0)
| |
DC C'*002 FILE=NO'
| |
REC1L EQU *-REC1
| |
REC2 DC AL2(REC2L,0)
| |
DC C'OC1/LOGON user-id,acct,C''passw'''
| |
REC2L EQU *-REC2
| |
REC3 DC AL2(REC3L,0)
| |
DC C'LOAD programm'
| |
REC3L EQU *-REC3
| |
REC4 DC AL2(REC4L,0)
| |
DC C'^'
| |
REC4L EQU *-REC4
| |
REC5 DC AL2(REC5L,0)
| |
DC C'PL plus-modul,maplib'
| |
REC5L EQU *-REC5
| |
REC6 DC AL2(REC6L,0)
| |
DC C'EDT,datei'
| |
REC6L EQU *-REC6
| |
REC7 DC AL2(REC7L,0)
| |
DC C'@RET'
| |
REC7L EQU *-REC7
| |
REC8 DC AL2(REC8L,0)
| |
DC C'NP'
| |
REC8L EQU *-REC8
| |
DC X'80'
| |
|
| |
|
| |
[____ Es folgt kein weiterer Datensatz
| |
| Hinweis: | |
| Bei Übergabe einer RECTABLE sollten vor dem Ansprung von CFS die Prozeßschalter 1 und 4 gesetzt werden ( SETSW ON=(1,4) ). | |