CFS als Unterprogramm
CFS kann von beliebigen Benutzerprogrammen aufgerufen werden, ohne daß diese dabei entladen werden. Das Unterprogramm CFS kann direkt in die Benutzerprogramme eingebunden oder bei Bedarf durch einen Link-Makro nachgeladen werden. Zum Nachladen von CFS ist folgender Link-Makro abzusetzen:
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) ).