Allgemeines
Anwendungsgebiet: | Benutzer- und Auftragsschalter; siehe "Benutzer- und Auftragsschalter"; Kommunikation; siehe "Kommunikation (Programm, Anwender, System)" |
Makrotyp: | S-Typ, MF-Format 3: C-/D-/L-/E-/M-Form; siehe "S-Typ-Makroaufrufe" |
Der Makro SWITCH vereinigt die Funktionalitäten der Makros GETSW, GETUS, SETSW und SETUS.
Jeder Benutzerkennung stehen 32 Benutzerschalter zur Verfügung. Die Schalter sind im Benutzerkatalog abgelegt. Es werden nur die Benutzerschalter des Benutzerkatalogs des Home-Pubsets verwendet.
Die Benutzerschalter sind von 0 bis 31 durchnummeriert. Nach dem Einrichten einer Benutzerkennung sind alle 32 Schalter ausgeschaltet („OFF“). Danach behalten sie die Stellung, die ihnen der Anwender gibt.
Jeder Schalter kann einzeln ein- bzw. ausgeschaltet oder invertiert werden. Benutzerschalter sind permanente Schalter, d.h. sie behalten ihre Stellung auch nach EXIT-JOB.
Das Betriebssystem stellt jedem Auftrag 32 Auftragsschalter zur Verfügung. Die Auftragsschalter sind von 0 bis 31 durchnummeriert und in Listen des TCB abgelegt. Anders als bei den Benutzerschaltern sind Auftragsschalter zu Beginn eines Auftrags immer ausgeschaltet. Der Anwender muss die Bedeutung der Schalterstellungen für sein Programm selbst festlegen.
Jeder Schalter kann einzeln ein- bzw. ausgeschaltet oder invertiert werden. Die Auftragsschalter sind temporäre Schalter, d.h. sie behalten ihren Wert nur bis zum Ende des Auftrages (bis EXIT-JOB). Es ist zu beachten, dass auch einige Systemkomponenten und Dienstprogramme die Auftragsschalter benutzen (siehe auch Abschnitt „Benutzer- undAuftragsschalter“). Bei Ausführung des Kommandos SET-JOB-STEP werden die Schalter 16 bis 31 ausgeschaltet.
Makrobeschreibung
Mit dem Makro SWITCH kann der Anwender die Benutzerschalter, die seiner Benutzerkennung zugeordnet sind, und die Auftragsschalter, die seinen Aufträgen zugeordnet sind, ein- bzw. ausschalten, invertieren und abfragen.
Makroaufrufformat und Operandenbeschreibung
SWITCH |
[MODE=TASK / USER] ,USERID=*OWN / adr [,SWITCH=adr / (nr, ...)] ,ACTION=*READ / *WRITE / *ON / *OFF / *INVERT / adr ,CONST=YES / NO ,MF=D / C / L / E / M [,PARAM=adr / (r)] ,PREFIX=J / p ,MACID=CSS / macid |
In der nachfolgenden Operandenbeschreibung sind die Operanden alphabetisch geordnet.
ACTION=
gibt an, welche Funktion ausgeführt werden soll.
*READ
Alle Benutzer- oder Auftragsschalter werden abgefragt. Der Operand SWITCH wird nicht ausgewertet.
Die Information, welcher Schalter ein- bzw. ausgeschaltet ist, wird nach dem MF=E-Aufruf in einem 4 Byte-Feld des Datenbereichs (Voreinstellung: JCSSSW) hinterlegt. Dabei entspricht das Bit 2n dem Schalter n. Ist das Bit 2n auf „1“ gesetzt, ist der Schalter n eingeschaltet. Ist es auf „0“ gesetzt, ist der Schalter ausgeschaltet.
*WRITE
Alle Schalter, die im Operanden SWITCH angegeben sind, werden eingeschaltet. Nicht angegebene Schalter werden ausgeschaltet.
*ON
Alle Schalter, die im Operanden SWITCH angegeben sind, werden eingeschaltet. Nicht angegebene Schalter bleiben unverändert.
*OFF
Alle Schalter, die im Operanden SWITCH angegeben sind, werden ausgeschaltet. Nicht angegebene Schalter bleiben unverändert.
*INVERT
Alle Schalter, die im Operanden SWITCH angegeben sind, werden invertiert. Nicht angegebene Schalter bleiben unverändert.
adr
symbolische Adresse (Name) eines 1 Byte langen Feldes, das die auszuführende Funktion in folgender Form enthält:
0 Schalter werden abgefragt 1 Schalter werden ein- bzw. ausgeschaltet 2 Schalter werden eingeschaltet 3 Schalter werden ausgeschaltet 4 Schalter werden invertiert
Bei MF=L ist dieser Operandenwert nicht erlaubt.
CONST=
gibt an, ob Equates generiert werden sollen oder nicht.
YES
Equates werden generiert.
NO
Es werden keine Equates generiert.
MF=
Zur allgemeinen Beschreibung des Operanden MF, der dazugehörenden Operandenwerte und der evtl. nachfolgenden Operanden (z.B. PREFIX, MACID und PARAM) siehe Abschnitt „S-Typ-Makroaufrufe“ . Die gültigen MF-Werte sind zu Beginn der Makrobeschreibung bei „Makrotyp“ angegeben und aus dem Aufrufformat ersichtlich.
Bei der C-Form, D-Form oder M-Form des Makroaufrufs kann ein Präfix PREFIX und bei der C-Form oder M-Form zusätzlich eine Macid MACID angegeben werden (siehe AAbschnitt „S-Typ-Makroaufrufe“).
Bei der E-Form des Makroaufrufes wird die Adresse des Datenbereichs im Operanden PA-RAM abgelegt. Voreinstellung: JCSS$PL
MODE=
legt fest, ob die angegebene Funktion für Benutzer- oder für Auftragsschalter ausgeführt werden soll.
Die Angabe des Operanden ist außer bei MF=M Pflicht.
TASK
Es werden die Auftragsschalter abgefragt oder verändert.
Der Operand USERID wird nicht ausgewertet.
USER
Es werden die Benutzerschalter der angegebenen Kennung abgefragt oder verändert.
SWITCH=
benennt die Benutzer- bzw. Auftragsschalter, deren Stellung abgefragt oder geändert werden soll.
Wird der Operand SWITCH nicht angegeben, wird die voreingestellte Bitmaske
X'00000000' verwendet.
(nr, ...)
nr = Nummer eines Schalters (0 .. 31).
Die mit diesem Operandenwert angegebene Liste von Schaltern benennt diejenigen Schalter, deren Stellung abgefragt oder geändert werden soll, bzw. unterteilt die Gesamtheit der Schalter für eine Änderung bei ACTION=*WRITE.
Auch wenn nur ein Schalter angegeben wird, müssen die Klammern gesetzt werden.
adr
symbolische Adresse (Name) eines 4 Byte langen Feldes (Bitmaske), in welchem jedes Bit einem Benutzer- bzw. Auftragsschalter entspricht:
Bit 20 entspricht Schalter 0, Bit 21 entspricht Schalter 1, ..., Bit 231 entspricht Schalter 31
Diese Bitmaske gibt an, welche Schalter verändert werden sollen. Die Art der Änderung wird durch den Operanden ACTION bestimmt.
Ist das jeweilige Bit auf „1“ gesetzt, wird der entsprechende Schalter ein- bzw. ausgeschaltet oder invertiert. Ist das Bit auf „0“ gesetzt, wird der Schalter nicht verändert, außer bei ACTION=*WRITE: die mit „0“ belegten Schalter werden ausgeschaltet.
Bei MF=L ist die Angabe dieses Operandenwertes nicht erlaubt.
USERID=
gibt die Benutzerkennung an, für die die Benutzerschalter abgefragt oder verändert werden sollen.
Bei Auftragsschaltern (MODE=TASK) wird dieser Operand nicht ausgewertet.
*OWN
Die Benutzerschalter der eigenen Kennung sollen abgefragt oder verändert werden.
adr
symbolische Adresse (Name) eines 8 Byte langen Feldes, das linksbündig (ggf. mit nachfolgenden Leerzeichen) die gewünschte Benutzerkennung als Zeichenkette enthält.
Bei ACTION!=
*READ ist die Angabe einer fremden Benutzerkennung nur unter der privilegierten Benutzerkennung TSOS bzw. mit dem Systemprivileg „USER-ADMINISTRATION“ möglich.Bei ACTION=*READ können die Schalter einer fremden Benutzerkennung auch ohne Privileg abgefragt werden.
Rückinformationen und Fehleranzeige
Standardheader:
+---------------+ | | | | | |c|c|b|b|a|a|a|a| +---------------+
Über die Ausführung des Makros SWITCH wird im Standardheader folgender Returncode übergeben (cc=Subcode2, bb=Subcode1, aaaa=Maincode):
X'cc' | X'bb' | X'aaaa' | Erläuterung |
X'00' | X'00' | X'0000' | Funktion erfolgreich ausgeführt. |
X'02' | X'00' | X'0001' | Warnung: Die Funktion wurde ausgeführt, aber im Umfeld der |
X'00' | X'01' | X'0002' | Operandenfehler. |
X'00' | X'40' | X'0008' | Die angegebene Benutzerkennung existiert nicht. |
X'00' | X'82' | X'000C' | Die angegebene Benutzerkennung ist gesperrt. |
X'00' | X'82' | X'0010' | Die benötigte Zugriffsberechtigung fehlt. |
X'20' | X'0020' | (Verschiedene) interne Fehler. |
Weitere Returncodes, deren Bedeutung durch Konvention makroübergreifend festgelegt ist, können der Tabelle „Standard-Returncodes“ (Standardheader) entnommen werden.
Layout der DSECT für MODE=TASK
SWITCH MF=D,MODE=TASK 1 *--------------------- START OF SWITCH -----------------------------* 1 MFCHK MF=D,PREFIX=J,MACID=CSS,PARAM=, C 1 SVC=42, C 1 DMACID=CSS,SUPPORT=(D,L,C,M,E) 2 JCSS DSECT , 2 *,##### PREFIX=J, MACID=CSS ##### 1 * 1 #INTF REFTYPE=REQUEST,INTNAME=SWITCH,INTCOMP=001 1 JCSS$PL DS 0F BEGIN OF PARAMETERAREA 1 FHDR MF=(C,JCSS),EQUATES=YES 2 DS 0A 2 JCSSFHE DS 0XL8 0 GENERAL PARAMETER AREA HEADER 2 * 2 JCSSIFID DS 0A 0 INTERFACE IDENTIFIER 2 JCSSFCTU 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 JCSSFCT DS AL1 2 FUNCTION NUMBER 2 JCSSFCTV DS AL1 3 FUNCTION INTERFACE VERSION NUMBER 2 * 2 JCSSRET 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 JCSSSRET DS 0AL2 4 SUB RETURN CODE 2 JCSSSR2 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 JCSSR2OK EQU X'00' All correct, no additional info 2 JCSSR2NA EQU X'01' Successful, no action was necessary 2 JCSSR2WA EQU X'02' Warning, particular situation 2 JCSSSR1 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 JCSSRFSP EQU X'00' FUNCTION SUCCESSFULLY PROCESSED
2 JCSSRPER EQU X'01' PARAMETER SYNTAX ERROR 2 * 3 GLOBALLY DEFINED ISL ERROR CODES IN CLASS X'01' - X'1F' 2 JCSSRFNS EQU X'01' CALLED FUNCTION NOT SUPPORTED 2 JCSSRFNA EQU X'02' CALLED FUNCTION NOT AVAILABLE 2 JCSSRVNA EQU X'03' INTERFACE VERSION NOT SUPPORTED 2 * 2 JCSSRAER EQU X'04' ALIGNMENT ERROR 2 JCSSRIER EQU X'20' INTERNAL ERROR 2 JCSSRCAR EQU X'40' CORRECT AND RETRY 2 * 2 GLOBALLY DEFINED ISL ERROR CODES IN CLASS X'40' - X'7F' 2 JCSSRECR EQU X'41' SUBSYSTEM (SS) MUST BE CREATED 2 * EXPLICITELY BY CREATE-SS 2 JCSSRECN EQU X'42' SS MUST BE EXPLICITELY CONNECTED 2 * 2 JCSSRWAR EQU X'80' WAIT FOR A SHORT TIME AND RETRY 2 JCSSRWLR EQU X'81' " LONG " 2 JCSSRWUR 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 JCSSRTNA EQU X'81' SS TEMPORARILY NOT AVAILABLE 2 JCSSRDH EQU X'82' SS IN DELETE / HOLD 2 * 2 JCSSMRET DS 0AL2 6 MAIN RETURN CODE 2 JCSSMR2 DS AL1 6 MAIN RETURN CODE 2 2 JCSSMR1 DS AL1 7 MAIN RETURN CODE 1 2 * 2 * SPECIAL LAYOUT OF LINKAGE_MAIN_RETURN_CODE (YYYY IN X'00XXYYYY') 2 * 2 JCSSRLNK EQU X'FFFF' LINKAGE ERROR / REQ. NOT PROCESSED 2 JCSSFHL EQU 8 8 GENERAL OPERAND LIST HEADER LENGTH 2 * 1 * 1 * ***************************************************************** 1 * *** END OF STANDARD HEADER - START SPECIAL SWITCH PARAMETERLIST 1 * ***************************************************************** 1 * 1 JCSSHDR EQU X'009A0B01',4 std header task switch (TU) 1 * 1 * 1 * ***** SET OF RETURN CODES ***** 1 * OUT OF THE SYSTEM-WIDE DEFINED RETURN-CODES, THE FOLLOWING MAY 1 * BE EXPECTED (CONFER INCLUDE FHDRI): 1 * 00 01 FFFF SPECIFIED FUNCTION IS NOT SUPPORTED 1 * 00 03 FFFF SPECIFIED VERSION IS NOT SUPPORTED 1 * 00 04 FFFF ALIGNMENT ERROR 1 * 1 * ADDITIONAL SPECIAL RETURNCODES ARE DEFINED : 1 *
1 * 00 00 0000 NORMAL EXECUTION 1 * 02 00 0001 EXECUTION, BUT ERROR IN WHENQ PROCESSING 1 * 00 01 0002 PARAMETER ERROR 1 * 00 40 0008 USERID NOT FOUND 1 * 00 82 000C USERID SEVERED 1 * 00 82 0010 NO PRIVILEGED 1 * XX 20 0020 SYSTEM ERROR 1 * 1 * MAIN-RETURNCODES 1 JCSSOK EQU X'0000' execution ok 1 JCSSWHQE EQU X'0001' execution with warning 1 JCSSPARE EQU X'0002' parameter error 1 JCSSUNFE EQU X'0008' userid not found 1 JCSSUSEE EQU X'000C' userid severed 1 JCSSNPRE EQU X'0010' no privileged 1 JCSSIERR EQU X'0020' internal error 1 * 1 * 1 * DATEN-BEREICH 1 JCSSACT DS XL1 ACTION 1 JCSSREA EQU 0 = *READ 1 JCSSWRT EQU 1 = *WRITE 1 JCSSON EQU 2 = *ON 1 JCSSOFF EQU 3 = *OFF 1 JCSSINV EQU 4 = *INVERT 1 * 1 JCSSRES DS XL3 FILLER 1 * 1 JCSSSW DS F SWITCHES 31-0 1 * 1 ORG JCSSSW 1 JCSSSW3 DS XL1 SWITCHES 31 - 24 1 JCSSS31 EQU X'80' = SWITCH 31 1 JCSSS30 EQU X'40' = SWITCH 30 1 JCSSS29 EQU X'20' = SWITCH 29 1 JCSSS28 EQU X'10' = SWITCH 28 1 JCSSS27 EQU X'08' = SWITCH 27 1 JCSSS26 EQU X'04' = SWITCH 26 1 JCSSS25 EQU X'02' = SWITCH 25 1 JCSSS24 EQU X'01' = SWITCH 24 1 * 1 JCSSSW2 DS XL1 SWITCHES 23 - 16 1 JCSSS23 EQU X'80' = SWITCH 23 1 JCSSS22 EQU X'40' = SWITCH 22 1 JCSSS21 EQU X'20' = SWITCH 21 1 JCSSS20 EQU X'10' = SWITCH 20 1 JCSSS19 EQU X'08' = SWITCH 19 1 JCSSS18 EQU X'04' = SWITCH 18
1 JCSSS17 EQU X'02' = SWITCH 17 1 JCSSS16 EQU X'01' = SWITCH 16 1 * 1 JCSSSW1 DS XL1 SWITCHES 15 - 8 1 JCSSS15 EQU X'80' = SWITCH 15 1 JCSSS14 EQU X'40' = SWITCH 14 1 JCSSS13 EQU X'20' = SWITCH 13 1 JCSSS12 EQU X'10' = SWITCH 12 1 JCSSS11 EQU X'08' = SWITCH 11 1 JCSSS10 EQU X'04' = SWITCH 10 1 JCSSS9 EQU X'02' = SWITCH 9 1 JCSSS8 EQU X'01' = SWITCH 8 1 * 1 JCSSSW0 DS XL1 SWITCHES 7 - 0 1 JCSSS7 EQU X'80' = SWITCH 7 1 JCSSS6 EQU X'40' = SWITCH 6 1 JCSSS5 EQU X'20' = SWITCH 5 1 JCSSS4 EQU X'10' = SWITCH 4 1 JCSSS3 EQU X'08' = SWITCH 3 1 JCSSS2 EQU X'04' = SWITCH 2 1 JCSSS1 EQU X'02' = SWITCH 1 1 JCSSS0 EQU X'01' = SWITCH 0 1 * 1 JCSSUID DS CL8 USERID 1 * 1 JCSS# EQU *-JCSS$PL LENGTH OF PARAMETERAREA 1 *--------------------- END OF SWITCH -------------------------------*
Beispiel
SWITCH START PRINT NOGEN SWITCH AMODE ANY BALR R3,0 USING *,R3 MVC TASKSW,INITSW SWITCH MF=M,ACTION=*READ SWITCH MF=E,MODE=TASK,PARAM=TASKSW ----------------------------- (2) SW1 CLC JCSSMRET,=Y(JCSSOK) BNE ERROR * TM JCSSSW0,JCSSS1 ------------------------------------------- (3) SW2 BZ END SWITCH MF=M,ACTION=*INVERT,SWITCH=(2,3) SWITCH MF=E,MODE=TASK,PARAM=TASKSW SWITCH MF=M,ACTION=*READ SWITCH MF=E,MODE=TASK,PARAM=TASKSW ----------------------------- (3) SW3 CLC JCSSMRET,=Y(JCSSOK) BNE ERROR B END * ERROR EQU * ****** ... ERROR HANDLING ... ************** B END END TERM R3 EQU 3 INITSW SWITCH MF=L,MODE=TASK TASKSW SWITCH MF=C,MODE=TASK END
Ablaufprotokoll:
/start-assembh % BLS0500 PROGRAM 'ASSEMBH', VERSION '<ver>' OF '<date>' LOADED % ASS6010 <ver> OF BS2000 ASSEMBH READY //compile source=*library-element(macexmp.lib,switch), - // compiler-action=module-generation(module-format=llm), - // module-library=macexmp.lib, - // listing=parameters(output=*library-element(macexmp.lib,switch)), - // test-support=*aid % ASS6011 ASSEMBLY TIME: 395 MSEC % ASS6018 0 FLAGS, 0 PRIVILEGED FLAGS, 0 MNOTES % ASS6019 HIGHEST ERROR-WEIGHT: NO ERRORS % ASS6006 LISTING GENERATOR TIME: 84 MSEC //end % ASS6012 END OF ASSEMBH
/mod-job-sw on=(1,2,3,4,5) -----------------------------------------------(1) /load-program *m(macexmp.lib,switch),test-options=*aid,run-mod=*adv /%in sw1 /%in sw2 /%in sw3 /%r STOPPED AT LABEL: SW1 , SRC_REF: 20, SOURCE: SWITCH , PROC: SWITCH /%d jcsssw %x;%r ---------------------------------------------------------(2) *** TID: 009301BB *** TSN: 6WWQ ********************************************* CURRENT PC: 00000012 CSECT: SWITCH ************************************** V‘00000090‘ = JCSSSW + #‘00000000‘ 00000090 (00000000) 0000003E .... STOPPED AT LABEL: SW2 , SRC_REF: 24, SOURCE: SWITCH , PROC: SWITCH /%d jcsssw0 %x;%r --------------------------------------------------------(3) CURRENT PC: 00000020 CSECT: SWITCH ************************************** V‘00000093‘ = JCSSSW0 + #‘00000000‘ 00000093 (00000000) 3E . STOPPED AT LABEL: SW3 , SRC_REF: 52, SOURCE: SWITCH , PROC: SWITCH /%d jcsssw %x;%r ---------------------------------------------------------(4) CURRENT PC: 0000003E CSECT: SWITCH ************************************** V‘00000090‘ = JCSSSW + #‘00000000‘ 00000090 (00000000) 00000032 ....
(1) | Vor der Programmausführung werden zur Demonstration die Schalter 1 bis 5 eingeschaltet. |
(2) | Die Auftragsschalter werden gelesen, die Ausgabe erfolgt in das Feld JCSSSW: X'0000003E' = 25 + 24 + 23 + 22 + 21 bedeutet, dass die Schalter 1, 2, 3, 4 und 5 angeschaltet sind, alle anderen Schalter sind ausgeschaltet. |
(3) | Es wird abgefragt, ob Schalter 1 angeschaltet ist: Das Feld JCSSSW0 ist mit X'3E' belegt. Der logische Vergleich mit der Bitmaske ergibt nicht Null. Die Abarbeitung des Programms wird fortgesetzt. |
(4) | Nach der Invertierung der Schalter 2 und 3 werden alle Schalter gelesen, die Aus-gabe erfolgt in das Feld JCSSSW: X'00000032' = 25 + 24 + 21 bedeutet, dass die Schalter 1, 4 und 5 angeschaltet sind, alle anderen Schalter sind ausgeschaltet. |