         MACRO                                                          06000003
&NAME    IOHALT  &UCB,&OFFSET                                           06050003
.********************************************************************** 06100003
.*                     IOHALT MACRO                                     06150003
.*  OS/VS2                                                              06200003
.*  FUNCTION:                                                           06250003
.*       SETS UP REGISTERS 0 & 1 IN FORMAT REQUIRED BY SVC33            06300003
.*                                                                      06350003
.*  MACRO CALL:                                                         06400003
.*       LABEL  IOHALT &UCB,&OFFSET                                     06450003
.*                                                                      06500003
.*       WHERE:                                                         06550003
.*             LABEL - OPTIONAL LABEL                                   06600003
.*                                                                      06650003
.*             &UCB = (REGISTER), SYMBOLIC OR ABSOLUTE, WHICH           06700003
.*                    CONTAINS THE ADDRESS OF THE UCB COMMON SEGMENT    06750003
.*                                     -OR-                             06800003
.*                    LABEL OF UCB COMMON SEGMENT (LA WILL BE DONE)     06850003
.*                                                                      06900003
.*             &OFFSET = (REGISTER), SYMBOLIC 0,2-15 OR ABSOLUTE 0-15,  06950003
.*                    WHICH CONTAINS THE OFFSET FROM THE IOB TO THE     07000003
.*                    CCW TO BE MODIFIED TO A NOP                       07050003
.*                                     -OR-                             07100003
.*                    VALUE, SYMBOLIC OR ABSOLUTE, OF THE OFFSET FROM   07150003
.*                    THE IOB TO THE CCW TO BE MODIFIED TO A NOP (LA    07200003
.*                    WILL BE DONE)                                     07250003
.*                                                                      07300003
.*             NOTE:                                                    07350003
.*                  &UCB MUST BE SUPPLIED                               07400003
.*                                                                      07450003
.*                  &OFFSET IS OPTIONAL.                                07500003
.*                       IF CODED, SVC33 WILL CALL THE EXCP             07550003
.*                       MODIFY ROUTINE. OTHERWISE, SVC33 WILL          07600003
.*                       CALL THE IOS HALT I/O ROUTINE.                 07650003
.*                                                                      07700003
.*                  IF THE OFFSET PARAMETER IS CODED USING A SYMBOLIC   07750003
.*                  REGISTER 1, AN ASSEMBLY ERROR WILL OCCUR.           07800003
.*                                                                      07850003
.*  OUTPUT:                                                             07900003
.*       REGISTER 0 - CONTAINS THE UCB COMMON SEGMENT ADDRESS           07950003
.*                                                                      08000003
.*       REGISTER 1 -                                                   08050003
.*             BYTE 0-1 = IOB OFFSET (IF SUPPLIED) OR ZERO              08100003
.*             BYTE   2 = ZERO (RESERVED)                               08150003
.*             BYTE   3 = OPTION INDICATOR                              08200003
.*                        X'01' - USE IOS HALT I/O ROUTINE              08250003
.*                                (&OFFSET NOT CODED)                   08300003
.*                        X'81' - USE EXCP MODIFY ROUTINE               08350003
.*                                (&OFFSET WAS CODED)                   08400003
.*                                                                      08450003
.*      SVC 33 ISSUED                                                   08500003
.*                                                                      08550003
.*  CHANGE ACTIVITY                                                     08600003
.*   A-000000-999999                                           @ZA43366 08650003
.*                                                                      08680003
.********************************************************************** 08710003
         MNOTE 0,'***THIS VERSION OF THE IOHALT MACRO USES THE ALTERNATX08740003
               E INTERFACE          TO SVC 33 ***'                      08770003
* IOHALT - THIS MACRO SETS UP REGISTERS 0 AND 1 FOR SVC33 AS FOLLOWS:   08800003
*          REGISTER 0 - UCB COMMON SEGMENT ADDRESS (1ST PARAMETER)      08850003
*          REGISTER 1 - IOB OFFSET, IF SUPPLIED (2ND PARAMETER)         08900003
*                       AND OPTION INDICATOR (GENERATED BY MACRO BASED  08950003
*                       ON WHETHER THE 2ND POSITIONAL PARAMETER WAS     09000003
*                       SUPPLIED)                                       09050003
*                                                                       09100003
         AIF   ('&UCB' EQ '').E1        ERROR IF UCB PARM NOT SUPPLIED  09150003
         AIF   ('&NAME' EQ '').CHKUCB                                   09200003
&NAME    DS    0H                                                       09250003
.CHKUCB  ANOP                                                           09300003
         AIF   ('&OFFSET' NE '').MODOPT IF MODIFY OPTION,GO TO MOD RTN  09350003
.* ****** IOHALT  ONLY, PROCESSED HERE                                  09400003
         AIF   ('&UCB' EQ '(0)').HALTCD  UCB ALREADY IN REG 0           09450003
         AIF   ('&UCB'(1,1) EQ '(').HALTREG  UCB IN REGISTER            09500003
         LA    0,&UCB               PUT UCB ADDRESS IN REG0             09550003
         AGO   .HALTCD                                                  09600003
.HALTREG ANOP                                                           09650003
         LR    0,&UCB(1)            PUT UCB ADDRESS IN REG0             09700003
.HALTCD  ANOP                                                           09750003
         LA    1,1(0)               TURN ON LOW ORDER BIT TO           X09800003
                                    INDICATE IOHALT REQUESTED           09850003
         SVC   33                   ISSUE IOHALT SVC                    09900003
         MEXIT                                                          09950003
.* MODIFY OPTION REQUESTED                                              10000003
.*                                                                      10050003
.*    **** BECAUSE IT MAY NOT BE POSSIBLE TO DETERMINE IF THE UCB       10100003
.*    **** IS BEING PASSED IN REG1 AND/OR THE OFFSET IN REG0 (WHICH     10150003
.*    **** WAS THE OLD INTERFACE TO SVC33), THE REGS ARE                10200003
.*    **** FIRST SET UP IN THE OLD FORMAT (IE. UCB IN REG1 AND          10250003
.*    **** OFFSET IN REG0) AND THEN EXCHANGED.                          10300003
.*    **** BEFORE THIS IS DONE THOUGH, CHECKS ARE MADE TO DETERMINE     10350003
.*    **** IF THE PARAMETERS CAN BE PUT DIRECTLY INTO THE NEW           10400003
.*    **** PARAMETER REGISTERS (IE. UCB IN REG0, OFFSET IN REG1)        10450003
.*    **** IN ORDER TO AVOID THE EXTRA CODE CAUSED BY THE XR'S.         10500003
.MODOPT  ANOP                                                           10550003
         AIF   ('&UCB' EQ '(1)' AND '&OFFSET' EQ '(0)').XCHNG           10600003
         AIF   ('&UCB' EQ '(0)' AND '&OFFSET' EQ '(1)').MODCD           10650003
.*                             PARAMETERS ALREADY SET UP                10700003
         AIF   ('&UCB'(1,1) EQ '('  OR '&OFFSET'(1,1)  EQ '(').MOD010   10750003
.* ******************                                                   10800003
.*    **** THIS SECTION HANDLES THE CASE WHERE NEITHER PARAMETER IS     10850003
.*         IN A REGISTER                                                10900003
.* ******************                                                   10950003
         LA    0,&UCB               PUT UCB ADDRESS IN REG0             11000003
         LA    1,&OFFSET            PUT OFFSET IN REG1                  11050003
         AGO   .MODCD                                                   11100003
.MOD010  ANOP                   AT LEAST ONE PARAMETER IS IN A REGISTER 11150003
         AIF   ('&UCB' NE '(0)').MOD020                                 11200003
.* ******************                                                   11250003
.*    **** UCB ALREADY IN REG0, PUT OFFSET IN REG1                      11300003
.* ******************                                                   11350003
         AIF   ('&OFFSET'(1,1) EQ '(').MOD015 CHECK IF OFFSET IN REG    11400003
         LA    1,&OFFSET            PUT OFFSET IN REG1                  11450003
         AGO   .MODCD                                                   11500003
.MOD015  ANOP                                                           11550003
         LR    1,&OFFSET(1)         PUT OFFSET IN REG1                  11600003
         AGO   .MODCD                                                   11650003
.MOD020  ANOP                                                           11700003
         AIF   ('&UCB'(1,1) NE '(' OR '&OFFSET'(1,1) EQ '(').MOD030     11750003
.* ******************                                                   11800003
.*    **** UCB IN REG AND OFFSET NOT IN REG                             11850003
.* ******************                                                   11900003
         LR    0,&UCB(1)            PUT UCB ADDRESS IN REG0             11950003
         LA    1,&OFFSET            PUT OFFSET IN REG1                  12000003
         AGO   .MODCD                                                   12050003
.MOD030  ANOP                                                           12100003
         AIF   ('&OFFSET' NE '(1)').MOD040  CHECK IF OFFSET IN R1       12150003
.* ******************                                                   12200003
.*    **** OFFSET ALREADY IN REG1, PUT UCB IN REG0                      12250003
.* ******************                                                   12300003
         AIF   ('&UCB'(1,1) EQ '(').MOD035  UCB IN REG                  12350003
         LA    0,&UCB               PUT UCB ADDRESS IN REG0             12400003
         AGO   .MODCD                                                   12450003
.MOD035  ANOP                                                           12500003
         LR    0,&UCB(1)            PUT UCB ADDRESS IN REG0             12550003
         AGO   .MODCD                                                   12600003
.MOD040  ANOP CHECK TO SEE IF OFFSET IN ABSOLUTE REG 2-15               12650003
         AIF   ('&OFFSET' EQ '(2)').MOD050                              12700003
         AIF   ('&OFFSET' EQ '(3)').MOD050                              12750003
         AIF   ('&OFFSET' EQ '(4)').MOD050                              12800003
         AIF   ('&OFFSET' EQ '(5)').MOD050                              12850003
         AIF   ('&OFFSET' EQ '(6)').MOD050                              12900003
         AIF   ('&OFFSET' EQ '(7)').MOD050                              12950003
         AIF   ('&OFFSET' EQ '(8)').MOD050                              13000003
         AIF   ('&OFFSET' EQ '(9)').MOD050                              13050003
         AIF   ('&OFFSET' EQ '(10)').MOD050                             13100003
         AIF   ('&OFFSET' EQ '(11)').MOD050                             13150003
         AIF   ('&OFFSET' EQ '(12)').MOD050                             13200003
         AIF   ('&OFFSET' EQ '(13)').MOD050                             13250003
         AIF   ('&OFFSET' EQ '(14)').MOD050                             13300003
         AIF   ('&OFFSET' EQ '(15)').MOD050                             13350003
         AGO   .MOD090 OFFSET NOT ABSOLUTE REG 2-15                     13400003
.MOD050  ANOP                                                           13450003
.* ******************                                                   13500003
.*    **** OFFSET SPECIFIED BY AN ABSOLUTE REG IN RANGE OF 2-15         13550003
.* ******************                                                   13600003
         AIF   ('&UCB'(1,1) EQ '(').MOD052  UCB IN REG                  13650003
         LA    0,&UCB               PUT UCB ADDRESS IN REG0             13700003
         AGO   .MOD054                                                  13750003
.MOD052  ANOP                                                           13800003
         LR    0,&UCB(1)            PUT UCB ADDRESS IN REG0             13850003
.MOD054  ANOP                                                           13900003
         LR    1,&OFFSET(1)         PUT OFFSET IN REG1                  13950003
         AGO   .MODCD                                                   14000003
.MOD090  ANOP                                                           14050003
.* ******************                                                   14100003
.*     **** COULD NOT PUT PARAMETERS IN NEW REGISTER FORMAT             14150003
.*     **** DIRECTLY, SO PUT IN OLD FORMAT AND THEN EXCHANGE.           14200003
.* ******************                                                   14250003
         AIF   ('&UCB'(1,1) EQ '(').UREG   UCB IN REG                   14300003
         LA    1,&UCB               PUT UCB ADDRESS IN REG1             14350003
         AGO   .CHKOFF              EXCHANGE REGS                       14400003
.UREG    ANOP                                                           14450003
         AIF   ('&UCB' EQ '(1)').CHKOFF  UCB ALREADY IN REG1            14500003
         LR    1,&UCB(1)            PUT UCB ADDRESS IN REG1             14550003
.CHKOFF  ANOP                                                           14600003
         AIF   ('&OFFSET'(1,1) EQ '(').OREG  IS OFFSET IN A REGISTER    14650003
         LA    0,&OFFSET            PUT OFFSET IN REG0                  14700003
         AGO   .XCHNG                                                   14750003
.OREG    ANOP                                                           14800003
         AIF   ('&OFFSET' EQ '(0)').XCHNG  OFFSET ALREADY IN REG0       14850003
***************                                                         14900003
*              NOTE:IF THE IOB OFFSET IS BEING PASSED TO IOHALT IN      14950003
*              REGISTER 1, AN ABSOLUTE REGISTER MUST BE CODED ON THE    15000003
*              MACRO INVOCATION FOR THIS PARAMETER.                     15050003
***************                                                         15100003
         LR    0,&OFFSET(1)         PUT OFFSET IN REG0                  15150003
         DC    0AL4(X'7FFFFFFF'*(16*((&OFFSET(1)+16)/17)*(17/(&OFFSET+1X15200003
               6))))                                                    15250003
*              IF THE OFFSET IS PASSED IN A SYMBOLIC REG1,THIS DC WILL  15283303
*              CAUSE AN ASSEMBLER ERROR                                 15316603
.XCHNG   ANOP                                                           15350003
         XR    1,0                  EXCHANGE REG1 AND REG0              15400003
         XR    0,1                                                      15450003
         XR    1,0                                                      15500003
.MODCD   ANOP                                                           15550003
         SLL   1,16                 SHIFT IOB OFFSET INTO              X15600003
                                    HIGH ORDER TWO BYTES                15650003
         IC    1,*+8                INDICATE MODIFY OPTION             X15700003
                                    TO BE USED                          15750003
         B     *+6                  BRANCH AROUND CONSTANT              15800003
         DC    X'81'                CONSTANT TO INDICATE               X15850003
                                    MODIFY OPTION                       15900003
         DC    X'00'                UNUSED BYTE                         15950003
         SVC   33                   ISSUE IOHALT SVC                    16000003
         MEXIT                                                          16050003
.E1      IHBERMAC  1                                                    16100003
         MEND                                                           16150003
