Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

SWITCH - Benutzer- und Auftragsschalter abfragen und verändern

&pagelevel(3)&pagelevel

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
auftragsübergreifenden Benutzerschalter ist ein interner Fehler aufgetreten.
Dieser Returncode kann nur bei Benutzerschaltern (MODE=USER)
auftreten.

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.