VM Update is now published by SDS (Software Diversified Services). New articles, which are published regularly in Acrobat format, may be downloaded free of charge from SDS's Web site, http://www.sdsusa.com/vmupdate.html. Back-issues of VM Update from January 1997 onwards are also available from SDS in Acrobat format, also free of charge.

Multiple secondary user facility


USING THE FLASH OPERATOR FACILITY

The FLASH operator facility is a GCS IUCV program, running
in a separate virtual GCS machine (not belonging to any GCS
group), which supports multiple secondary users. Usually each
user-id can authorize any other (but only one) user-id to be his
secondary user (and the corresponding change in the system
directory must be made). Our program enables an arbitrary (in
principle) number of user-ids to be the secondary user of the
VTAM machine, for example. It means that many users can
simultaneously submit VTAM operator commands from CMS,
GCS, or CP environments. It enables you, for example, to
obtain VTAM messages during the test run of your GCS job
which uses the network. So it is perfect for any testing of SNA,
VTAM, or OSI applications. It is also extremely useful for
multi-user access to any application, for example RACF,
TSAF, RSCS, RSCS Version 2, PDM, system OPERATOR
itself, etc, or other user application with an operator interface.

If you use FLASH you have to authorize only the FLASH
operator itself to be the secondary user of the controlled
machine (eg VTAM). The FLASH operator will reflect all
activities in the controlled system (for example all VTAM
messages) to all users logged on to the FLASH system. And
you can log-on to FLASH from CMS, GCS, or CP
environments. One VTAM command submitted at your
terminal will cause VTAM messages to be sent to any user
logged on to the FLASH system. The FLASH operator
machine has a minimal impact on the performance of the
system and on the security of the system. All user activities in
the FLASH system are logged and it is also very easy to
implement an authorization procedure (similar to that of the
RSCS system).

The use of the FLASH operator is extremely simple. One
communicates with the FLASH operator using the CP SM
command. You can activate many FLASH operators at the
same time (each in separate virtual machine). You can easily
modify the source program in order to remove or to add new
commands or functions.

OPERV is used as the the name of the FLASH operator user-id
(five characters).

To begin the FLASH session:

      sm operv logon

To leave the FLASH session:

      sm operv logoff

To list logged on users:

      sm operv query

Examples of the commands that can be issued are:

      sm operv cmd d net,id=nodeid,e
      sm operv cmd v net,id=nodeid,act
      sm operv cmd v net,id=nodeid,inact
      sm operv cmd f net,table,option=load,.......

Other VTAM commands etc can also be issued.

To start subtasks:

      sm operv subtask sname

where sname is the name of the module in the global
LOADLIB. If the sname is shorter than eight characters, move
the cursor to the right (to have an 8-character long argument for
the command).

GCS commands can be issued. For example, if OPERV is the
secondary user of VTAM:

      sm operv gcs send vtam acc 299 a
      sm operv gcs send vtam execname
      sm operv gcs send vtam vtam d net,sessions,list=all
      sm operv gcs send vtam q disk
      sm operv gcs send vtam q v dasd
      sm operv gcs send vtam q v
      sm operv gcs send vtam q loadlib
      sm operv gcs send vtam q group
      sm operv gcs msg all hallo
      sm operv gcs wng all spool voll

where execname is the arbitrary GCS EXEC on VTAM 299
disk. If the FLASH operator is the secondary user of another
machine you can send the command from your user-id to that
machine using a GCS command.

If help is required:

      sm operv help

This will show you a list of all standard commands.

To turn header off:

      sm operv hof

Any messages sent to users (and logged in the FLASH
operator) will contain no user-id (default).

To turn header on:

      sm operv hon

Any messages sent to users (and logged in the FLASH
operator) will contain a user-id.

If you use SM commands in an EXEC many times, use:

      SLEEP 1 SEC

between each SM command. Otherwise, the response will be
delayed.


START EXEC

/*  */
'SET MSG IUCV'
'SET EMSG OFF'
'SET SMSG IUVC'
'SET IMSG OFF'
'SET WNG OFF'
'GLOBAL LOADLIB IUCV1'
USER=USERID()
OPER=substr(USER,1,5)
'OSRUN FLASH000 PARM='OPER


FLASH PROGRAM

FLASH000 CSECT
**       F L A S H    OPERATOR  F A C I L I T Y
**
**   OPERATING SYSTEM : VM/SP REL 4 TO 6
**   TESTED IN        : VM/SP REL 5 PUT LEVEL 8904
**   LANGUAGE         : ASSEMBLER(STANDARD CMS ASSEMBLE COMMAND)
**   ENVIRONMENT      : GCS,IUCV
**   ROUTINES         : ESTAE ROUTINE,IUCV INTERRUPT HANDLER
**   USED MACROS      : WTO,IUCVINI,IUCVCOM,WAIT,POST,IUCV,WTOP,CMDSI
**   DUMMY SECTIONS   : IPARML
*********************************************************************
         SPACE
         STM   14,12,12(13)           SAVE REGISTERS
         BALR  12,0                   GET ADDRESS INTO R12
         USING *,12                   ESTABLISH R12 AS BASIS
         ST    13,SAVEMAIN+4          STORE OLD SAVE ADR INTO NEW
         LA    15,SAVEMAIN            LOAD NEW SAVE ADR IN R15
         ST    15,8(13)               ST NEW SAVE ADR INTO OLD
         LR    13,15                  LOAD NEW SAVE ADR IN R13
* USER-ID OF THE FLASH OPERATOR MUST BE FIVE CHARACTERS LONG
         MVC   OPER(5),6(1)            GET USER-ID FROM PARAMETER LIST
         SPACE
         ESTAE TOTALWEG               SET ESTAE ROUTINE
ANFANG   EQU   *
         XC    CONECB,CONECB          CLEAR
         XC    MESECB,MESECB          CLEAR
*   DEFINE YOURSELF TO IUCV ENVIRONMENT
         IUCVINI SET,NAME=ANDRZEJ,ERROR=DCLFAIL,EXIT=IUCVINT
         XC   PLIST,PLIST             CLEAR
         LA   2,PLIST                 LOAD ADR OF IUCV PARAMETER LIST
         USING IPARML,2               ESTABLISH ADDRESSAB OF PLIST
         OI    IPFLAGS1,IPRMDATA      ALLOW DATA IN PARAMETER LIST
         NI    IPFLAGS1,X'FF'-(IPAPPC)  DISALLOW APPC
         MVC   IPVMID,IDENT           DEFINE SERVICE
*  CONNECT TO IUCV
         IUCVCOM CONNECT,PRMLIST=PLIST,NAME=ANDRZEJ,ERROR=CONERR1
         WAIT  1,ECB=CONECB           WAIT FOR CONNECTION COMPLETE
WAITAP   WAIT  1,ECB=MESECB           WAIT FOR PENDING MESSAGE
RECEIV0  XC    PLIST,PLIST            CLEAR IUCV PLIST
         DROP  2                      DROP R2
         LA    2,PLIST                LOAD ADDRESS OF RECEIVE PLIST
         USING IPARML,2               ESTABL ADDR OF REC PLIST
         OI    IPFLAGS1,IPNORPY       NO REPLY WILL BE USED
         OI    IPFLAGS1,IPFGPID       PATH-ID WILL BE USED
         OI    IPFLAGS1,IPFGMCL       MSG CLASS WILL BE USED
         NI    IPFLAGS1,X'FF'-(IPFGMID)   MSG-ID WILL BE NOT USED
         NI    IPFLAGS1,X'FF'-(IPBUFLST)  NO BUFFER LIST
         NI    IPFLAGS1,X'FF'-(IPAPPC)    NO APPC
         MVC   IPPATHID,USERPATH      MOVE PATH-ID
         MVC   IPTRGCLS,TCLAS         MOVE MSGCLASS
         LA    8,253                  LOAD THE LENGTH OF BUFFER
         ST    8,IPBFLN1F             STORE THE LENGTH IN PLIST
         SR    8,8                    CLEAR R8
         LA    8,SPLSNUID             LOAD ADDRESS OF BUFFER
         ST    8,IPBFADR1             STORE THE ADDR IN PLIST
*   IUCV RECEIVE THE MESSAGE FROM THE MESSAGE PENDING QUEUE
         IUCVCOM  RECEIVE,PRMLIST=PLIST,NAME=ANDRZEJ,ERROR=CONERR1
         WTOP  SPLSNUID,90            DISPLAY PART OF THE MESSAGE
         SR    8,8                    CLEAR R8
         LA    8,SPLSNUID             LOAD ADDR OF MESSAGE BUFFER
         CLC   8(3,8),DMKMES          CHECK IF DMK MESSAGE
         BC    8,RECEIV0              IF YES,IGNORE IT
         CLC   8(4,8),HELP            CHECK IF HELP MESSAGE
         BC    8,NOTA                 IF YES,DISPLAY COMMANDS
         CLC   8(5,8),GETLOG          CHECK IF LOG-ON TO FLASH
         BC    8,CMD1                 IF YES,TRY TO ACCEPT IT
         CLC   8(8,8),SHUTMES         CHECK IF SHUTDOWN
         BC    8,EXITSHUT             IF YES TRY TO DO IT
         CLC   8(3,8),OF              CHECK IF HEADER OFF
         BC    8,HEADEROF             IF YES MAKE HEADER OFF
         CLC   8(3,8),ON              CHECK IF HEADER ON
         BC    8,HEADERON             IF YES MAKE HEADER ON
         CLC   8(8,8),SUBTASK         CHECK IF ATTACH SUBTASK
         BC    8,CMDTASK              IF YES TRY TO DO IT
         CLC   8(4,8),GCS             CHECK IF GCS COMMAND
         BC    8,CMDGCS               IF YES DO IT
         CLC   8(4,8),OPERCMD         CHECK IF VTAM COMMAND
         BC    8,CMDVT                IF YES DO IT
         CLC   8(5,8),QUERY           CHECK IF QUERY
         BC    8,CMDQ                 IF YES DISPLAY USER-IDS
         CLC   8(6,8),LOGOFF          CHECK IF LOG-OFF
         BC    8,CMD2                 IF YES DO IT
         CLC   0(5,8),OPER            CHECK IF SECONDARY USER MESSAGE
         BC    8,AFTERCMD             IF YES FLASH IT
         B     NOTA                   OTHERWISE DISPLAY HELP MESSAGE
* CHECKING IF SHUTDOWN BY AUTHORIZED USER
EXITSHUT EQU   *
         CLC   0(5,8),MAINT           CHECK IF MAINT
         BC    8,EXIT                 IF YES EXIT
         CLC   0(8,8),OPERATOR        CHECK IF OPERATOR
         BC    8,EXIT                 IF YES EXIT
         B     NOTA                   OTHERWISE HELP MESSAGE
* HANDLING HEADER OFF MESSAGE
HEADEROF EQU   *
         XC    HEADER,HEADER          CLEAR HEADER
         MVC   HEADER,OF              SET HEADER OFF
         B     AFTERCMD               FLASH THE RESPONSE
* HANDLING HEADER ON MESSAGE
HEADERON EQU   *
         XC    HEADER,HEADER          CLEAR HEADER
         MVC   HEADER,ON              SET HEADER ON
         B     AFTERCMD               FLASH THE RESPONSE
* HANDLING ATTACH OF SUBTASK
* IF MODULE NOT IN GLOBAL LIBRARY THE FLASH OPERATOR WILL DUMP
CMDTASK  EQU   *
         SR    8,8                    CLEAR R8
         LA    8,TASK                 LOAD ADDR OF TASK NAME
         MVC   0(8,8),SPLSNUID+16     MOVE TASK NAME FROM THE COMMAND
*  ATTACH  SUBTASK (NOT WAIT FOR THE SUBTASK TO FINISH)
         ATTACH EPLOC=(8),SZERO=NO,VL=1      ATTACH
         B     AFTERCMD               FLASH THE RESPONSE
* HANDLING OF QUERY COMMAND
CMDQ     EQU   *
         SR    8,8                    CLEAR R8
         LA    8,VTCM                 LOAD ADDR OF RESPONSE BUFFER
         MVC   7(8,8),SPLSNUID        MOVE THE USER-ID OF SENDER
         MVC   16(110,8),TITLE        MOVE THE TITLE OF RESPONSE
         CMDSI VTCM,120               SEND THE TITLE
         MVC   7(8,8),SPLSNUID        MOVE THE USER-ID OF SENDER
         MVC   16(110,8),USER00       MOVE THE RESPONSE LIST
         CMDSI VTCM,120               SEND THE RESPONSE TO QUERY
         B     RECEIV0                GO TO NEXT MESSAGE
* HANDLING OF HELP MESSAGE
NOTA     EQU   *
         SR    8,8                    CLEAR R8
         LA    8,VTCM                 LOAD ADDR OF RESPONSE BUFFER
         MVC   7(8,8),SPLSNUID         MOVE THE USER-ID OF SENDER
         MVC   16(110,8),NOTAU        MOVE THE RESPONSE TEXT
         CMDSI VTCM,120               SEND THE RESPONSE TO HELP
         B     RECEIV0                GO TO NEXT MESSAGE
* HANDLING OF GCS COMMAND
*IT IS A VERY POWERFUL COMMAND, WITH THE HELP OF WHICH YOU CAN SEND
*A COMMAND TO ANY USER, THE SECONDARY USER OF WHICH IS YOUR FLASH
*OPERATOR (ENTRY IN DIRECTORY). SOMETIMES IT IS NECESSARY
*TO ADD SOME BLANKS TO THE END OF THE THE TEXT IN THE COMMAND THAT
*IS SENT. DO THIS BY SIMPLY MOVING THE CURSOR TO THE RIGHT.
*YOU CAN OBTAIN THE SAME WITH THE HELP OF THE CMD COMMAND, BUT IN THIS
*CASE YOU CAN SEND THE COMMAND TO ONE SPECIFIED USER (IN OUR CASE VTAM).
CMDGCS   EQU   *
         SR    8,8                    CLEAR R8
         XC    GCSCMD,GCSCMD          CLEAR BUFFER
         LA    8,GCSCMD               LOAD ADDR OF BUFFER
         MVC   0(90,8),SPLSNUID+12    MOVE TEXT OF COMMAND
         CMDSI GCSCMD,90              EXECUTE IT
         B     AFTERCMD               FLASH THE RESPONSE
* HANDLING OF VTAM COMMAND
CMDVT    EQU   *
         SR    8,8                    CLEAR R8
         LA    8,VTCM0                LOAD ADDR OF BUFFER
         MVC   15(100,8),SPLSNUID+12  MOVE THE TEXT OF COMMAND
         CLC   15(1,8),BLANK          CHECK IF BLANK
         BC    8,NOTA                 IF YES IGNORE
         CLC   15(3,8),SHU            CHECK IF SHUTDOWN
         BC    8,NOTA                 IF YES IGNORE
         CMDSI VTCM0,120              SUBMIT VTAM COMMAND
         B     AFTERCMD               FLASH THE RESPONSE
* HANDLING OF LOG-ON COMMAND
CMD1     SR    8,8                    CLEAR R8
         LA    8,USER00               LOAD ADRRESS OF USER LIST
COMPARE  CLC   0(8,8),SPLSNUID         COMPARE IF EQUAL TO SENDER
         BC    8,AFTERCMD             IF YES FLASH THE RESPONSE
         CLC   0(7,8),ENDUSER         CHECK IF END OF LIST
         BC    8,CMD11                IF YES GO TO SECOND CHECK
         LA    8,8(8)                 ADD 8 TO ENTRY ADDRESS
         B     COMPARE                CHECK THE NEXT ENTRY IN THE LIST
CMD11    SR    8,8                    CLEAR R8
         LA    8,USER00               LOAD ADDR OF USER LIST
COMPARE0 CLC   0(5,8),DUMMY           CHECK IF DUMMY(FREE ENTRY)
         BC    8,MOVE                 IF YES MAKE A NEW ENTRY
         CLC   0(7,8),ENDUSER         CHECK IF END OF LIST
         BC    8,AFTERCMD             IF YES LEAVE THE CHECK OF LIST
         LA    8,8(8)                 TAKE THE NEXT ENTRY
         B     COMPARE0               CHECK THE NEXT ENTRY
MOVE     MVC   0(8,8),SPLSNUID        MOVE THE SENDER NAME INTO LIST
         B     AFTERCMD               FLASH THE RESPONSE
* HANDLING OF THE LOGOFF COMMAND
CMD2     SR    8,8                    CLEAR R8
         LA    8,USER00               LOAD ADDRESS OF USER LIST
COMPARE1 CLC   0(8,8),SPLSNUID        CHECK IF SENDER IN THE LIST
         BC    8,MOVE1                IF YES GO TO REMOVE IT
         CLC   0(7,8),ENDUSER         CHECK IF END OF LIST
         BC    8,AFTERCMD             IF YES FLASH THE RESPONSE
         LA    8,8(8)                 TAKE THE NEXT ENTRY
         B     COMPARE1               CHECK THE NEXT ENTRY
MOVE1    MVC   0(8,8),DUMMY           DELETE THE SENDER ENTRY
         B     AFTERCMD               FLASH THE RESPONSE
*  HANDLING OF FLASHING (SENDING TO LOGGED ON USERS) OF RESPONSES
AFTERCMD EQU   *
         SR    8,8                    CLEAR R8
         LA    8,MSGTEXT              LOAD ADDR OF BUFFER
         SR    7,7                    CLEAR R7
         LA    7,OPERATOR             LOAD ADDR
NEXTUSER LA    7,8(7)                 LOAD ADDR OF USER LIST
         CLC   0(7,7),ENDUSER         CHECK IF END OF USER LIST
         BC    8,CLEAR00              IF YES CLEAR
         B     NEXT000                IF NO GO TO SEND
CLEAR00  XC    SPLSNTXT,SPLSNTXT      CLEAR MESSAGE TEXT
         B     RECEIV0                GO TO NEXT MESSAGE
NEXT000  CLC   0(5,7),DUMMY           CHECK IF DUMMY
         BC    8,NEXTUSER             IF YES GO TO NEXT ENTRY
         MVC   7(8,8),0(7)            MOVE THE ENTRY INTO RESPONSE
         CLC   HEADER,ON              CHECK IF HEADER ON
         BC    8,MON                  IF YES GO TO LONG MOVE
         MVC   16(100,8),SPLSNTXT     MOVE SHORT
         B     CMDS                   GO TO SEND
MON      EQU   *
         MVC   16(100,8),SPLSNUID     MOVE LONG(WITH SENDER NAME)
CMDS     CMDSI MSGTEXT,120            SEND THE RESPONSE
         B     NEXTUSER              GO TO NEXT ENTRY IN USER LIST
* HANDLING OF IUCV CONNECTION ERRORS
* CAN BE SUBSTANTIALLY SHORTENED (IT IS IMPORTANT ONLY DURING
* THE TESTS WITH THE FLASH OPERATOR) OR REPLACED THROUGH DUMMY ROUTINE.
* IT CHECKS IF THE RETURN CODE IS EQUAL TO THE SPECIFIC VALUE
CONERR1  LR    3,2
         DROP  2
         USING IPARML,3
         CLI   IPRCODE,X'00'
         BE    ERR0
         CLI   IPRCODE,X'01'
         BE    ERR1
         CLI   IPRCODE,X'02'
         BE    ERR2
         CLI   IPRCODE,X'03'
         BE    ERR3
         CLI   IPRCODE,X'04'
         BE    ERR4
         CLI   IPRCODE,X'0A'
         BE    ERR10
         CLI   IPRCODE,X'0C'
         BE    ERR13
         CLI   IPRCODE,X'0D'
         BE    ERR14
         CLI   IPRCODE,X'15'
         BE    ERR21
         CLI   IPRCODE,X'19'
         BE    ERR25
         CLI   IPRCODE,X'1A'
         BE    ERR26
         CLI   IPRCODE,X'1B'
         BE    ERR27
         CLI   IPRCODE,X'1D'
         BE    ERR30
         B     EXIT
ERR0     EQU   *
         XC    MESECB,MESECB
         B     WAITAP
ERR1     WTO   'RC= 1'
         B     EXIT
ERR13    WTO   'RC= 13'
         B     EXIT
ERR14    WTO   'RC= 14'
         B     EXIT
ERR2     WTO   'RC= 2'
         B     EXIT
ERR3     WTO   'RC= 3'
         B     EXIT
ERR4     WTO   'RC= 4'
         B     EXIT
ERR10    WTO   'RC= 10'
         B     EXIT
ERR21    WTO   'RC= 21'
         B     EXIT
ERR25    WTO   'RC= 25'
         B     EXIT
ERR26    WTO   'RC= 26'
         B     EXIT
ERR27    WTO   'RC= 27'
         B     EXIT
ERR30    WTO   'RC= 30'
*END OF IUCV CONNECTION ERROR HANDLING
         B     EXIT
* HANDLING OF IUCV INIT ERROR
DCLFAIL  DS    0H
         WTO   'INIT FAILED'
EXIT     DS    0H
* LEAVING THE  IUCV ENVIRONMENT AFTER THE ERROR OR SHUTDOWN
*        XC    PLIST,PLIST
*        IUCVCOM SEVER,NAME=ANDRZEJ,PRMLIST=PLIST
         IUCVINI CLR,NAME=ANDRZEJ
         L     13,SAVEMAIN+4         LOAD ADDRESS OF LOAD SAVE
         LM    14,12,12(13)          RESTORE OLD REGISTERS
         SR    15,15                 CLEAR RETURN CODE
         BR    14                    BRANCH TO RETURN ADDRES
SAVEMAIN DS    18F
PECB     DS    F
SHU      DC    CL3'SHU'
BLANK    DC    CL1' '
HELP     DC    CL4'HELP'
HEADER   DC    CL3'   '
ON       DC    CL3'HON'
OF       DC    CL3'HOF'
ANDRZEJ  DC    CL8'ANDRZE55'
SUBTASK  DC    CL8'SUBTASK '
TASK     DC    CL8' '
OPER     DC    CL5'OPERV'
QUERY    DC    CL5'QUERY'
OPERCMD  DC    CL4'CMD '
VTCM     DC    CL130'MSGNOH'
GCSCMD   DS    CL90
**   IN OUR CASE, FLASH OPERATOR SERVICES VTAM,
**   BUT THE FLASH OPERATOR CAN BE THE SECONDARY OPERATOR
**   OF ANY MACHINE.
VTCM0    DC    CL130'SEND VTAM VTAM      '
ANS      DC    CL1' '
E11      DS    F
MSGIDENT DS    F
IDENT    DC    CL8'*MSG'
GETLOG   DC    CL5'LOGON'
LOGOFF   DC    CL6'LOGOFF'
DUMMY    DC    CL8'DUMMY000'
DMKMES   DC    CL3'DMK'
ENDUSER  DC    CL7'ENDUSER'
*****the USER00 label begins the list of logged on users.
*****In our case the maximum is equal to 13. But it can be increased.
*****Simply add a new DUMMY entry. The number of possible
*****insertions is limited by the addressability range of the basis
*****register. (One could use GETMAIN to obtain the
*****storage in order to overcome this problem.)
OPERATOR DC    CL8'OPERATOR'
USER00   DC    CL8'DUMMY'
USER01   DC    CL8'DUMMY'
USER02   DC    CL8'DUMMY'
USER03   DC    CL8'DUMMY'
USER04   DC    CL8'DUMMY'
USER05   DC    CL8'DUMMY'
USER06   DC    CL8'DUMMY'
USER07   DC    CL8'DUMMY'
USER08   DC    CL8'DUMMY'
USER09   DC    CL8'DUMMY'
USER0A   DC    CL8'DUMMY'
USER0B   DC    CL8'DUMMY'
USER0C   DC    CL8'DUMMY'
USER0D   DC    CL8'ENDUSER'
TITLE    DC    CL110'                 THE VTAM LOG USERS         '
NOTAU    DC    CL110'AVAILABLE COMMANDS:  LOGON,LOGOFF,QUERY,CMD,HELP'
TCLAS    DC    F'9'
USERPATH DS    H
IDENTPTH DS    H
SAVERC   DS    F
IUCVECB  DS    F
MSGTEXT  DC     CL120'MSGNOH                    '
SHUTMES  DS     CL8'SHUTDOWN'
COSAVE   DS     F
MAINT    DC     CL5'MAINT'
GCS      DC     CL4'GCS '
ZERO     DC     F'0'
IUCVTYPE DC     X'4000'
IUCVENAB EQU    X'02'
DEALPROG DC     X'0210'
FCOMPMSK EQU    X'20'
CNTRLMSK EQU    X'08'
CPENDMSK EQU    X'80'
CCOMPMSK EQU    X'40'
SEVERMSK EQU    X'20'
ECBIUCV  DC     F'0'
REPECB   DC     F'0'
EVENTCMP EQU    X'40'
         DS    0D
PLIST    DS    XL40
INTBUF   DS    XL40
SPLBUF   DS    0D
SPLSNUID DC    CL8' '
SPLSNTXT DS    CL244
         DC    X'15'
SPLEN    EQU   *-SPLSNUID
CONECB   DS    F
CONECB1  DS    F
SEVECB   DS    F
SENECB   DS    F
CL9      DC    F'9'
         DS   0H
MESECB   DS    F
MESECB1  DS    F
*   COPY OF DUMMY SECTION WITH LAYOUT OF IUCV PARAMETER LIST
         COPY  IPARML
         LTORG
*  ESTAE ROUTINE
FLASH000  CSECT
TOTALWEG BALR  15,0
         USING *,15                   ESTABLISH ADDRESS
         STM   14,12,12(13)           SAVE REGISTERS
         ST    13,SAVETOT1+4          SAVE OLD SAVE ADDR IN NEW SAVE
         ST    14,SAVE140             SAVE RETURN ADDRESS
         LA    13,SAVETOT1            LOAD ADDR OF NEW SAVE IN R13
         LR    3,15                   LOAD ENTRY ADDRESS IN R3
         USING TOTALWEG,3             R3 AS A BASIS
         WTO   'FLASH OPERATOR WILL BE RESTARTED'
         CMDSI 'I GCS'                RE-IPL GCS AFTER ERROR
SAVETOT1 DS    18F
SAVE140  DS    F
         LTORG
* IUCV INTERRUPT HANDLING ROUTINE
FLASH000  CSECT
IUCVINT  BALR  15,0
         USING *,15                   ESTABLISH ADDRESS
         STM   14,12,12(13)           SAVE REGISTERS
         ST    13,SAVEEXI1+4          SAVE ADDR OF OLD SAVE IN NEW SAVE
         ST    14,SAVE14              SAVE RETURN ADDRESS
         LA    13,SAVEEXI1            LOAD ADDRESS OF NEW SAVE IN R13
         LR    3,15                   LOAD ENTRY ADDRESS IN R3
         USING IUCVINT,3              ESTABLISH ADDRESSA OF ROUTINE
         USING IPARML,2               ESTABLISH ADDRESSA OF PLIST
         CLI   IPTYPE,IPTYPPC         CHECK IF PENDING CONNECTION
         BE    PEND                   IF YES GO TO HANDLER
         CLI   IPTYPE,IPTYPCC         CHECK IF COMPLETE CONNECTION
         BE    COMPL                  IF YES GO TO HANDLER
         CLI   IPTYPE,IPTYSVA         CHECK IF SEVER APPC
         BE    SEVER11                IF YES GO TO HANDLER
         CLI   IPTYPE,IPTYPMP         CHECK IF PRIORITY MESSAGE
         BE    PMESSAGE               IF YES GO TO HANDLER
         CLI   IPTYPE,IPTYPMNP        CHECK IF MESSAGE
         BE    MESSAGE                IF YES GO TO HANDLER
         CLI   IPTYPE,IPTYPRNP        CHECK IF REPLY
         BE    REPLY1                 IF YES GO TO HANDLER
         CLI   IPTYPE,IPTYPRP         CHECK IF PRIORITY REPLY
         BE    PREPLY                 IF YES GO TO HANDLER
         CLI   IPTYPE,IPTYPSV         CHECK IF SEVER
         BE    SEVER11                IF YES GO TO HANDLER
         B     ENDE000                OTHERWISE LEAVE
* PRIORITY MESSAGE HANDLING
PMESSAGE EQU   *
         SR    11,11                  CLEAR R11
         L     11,=A(MESECB)          LOAD ADDRESS OF ECB
         POST  (11)                   POST
         B     ENDEXIT                LEAVE
* MESSAGE HANDLING
MESSAGE  EQU   *
         L     4,=A(MSGIDENT)         LOAD ADDRESS OF MSG-ID
         MVC   0(4,4),IPMSGID         MOVE MSG-ID FROM INTERRUPT BUF
         SR    3,3                    CLEAR R3
         L     3,=A(TCLAS)            LOAD ADDRESS OF MSGCLASS
         MVC   0(4,3),IPTRGCLS        MOVE MSGCLASS FROM INTERRUPT BUF
         B     POST0                  GO TO POST
* POSTING
POST0    SR    11,11                  CLEAR R11
         L     11,=A(MESECB)          LOAD ADDR OF ECB
         POST  (11)                   POST
         B     ENDEXIT                LEAVE
*HANDLING OF SEVER (NOT USED, ONLY FOR COMPLETENESS)
SEVEREX  EQU   *
         L     6,=A(USERPATH)         LOAD ADDRESS OF PATH-ID
         MVC   EXPATH,0(6)            MOVE PATH-ID
* IUCV SEVER
         IUCV  SEVER,PRMLIST=PLISTA,PATHID=EXPATH,ALL=NO
         B     ENDEXIT                EXIT
* HANDLING REPLY
REPLY1   EQU   *
         B     ENDEXIT
* HANDLING PRIORITY REPLY
PREPLY   EQU   *
         B     ENDEXIT
* HANDLING PENDING CONNECTION
PEND     EQU   *
         SR    7,7                    CLEAR R7
         L     7,=A(USERPATH)         LOAD ADDRESS OF PATH-ID
         MVC   0(2,7),IPPATHID        MOVE PATH-ID FROM INTERRUPT BUF
         SR    11,11                  CLEAR R11
         L     11,=A(CONECB1)         LOAD ADDRESS OF ECB
         POST  (11)                   POST ECB
         B     ENDEXIT                LEAVE
* HANDLING SEVER
SEVER11  WTO   'SEVERING CONNECTION'
         B     ENDEX0
* HANDLING CONNECTION COMPLETE
COMPL    WTO   'CONNECTION COMPLETE'
         SR    11,11                  CLEAR R11
         SR    10,10                  CLEAR R10
         L     10,=A(USERPATH)        LOAD ADDRESS OF PATH-ID
         MVC   0(2,10),IPPATHID       MOVE PATHID FROM INTERRUPT BUF
         L     11,=A(CONECB)          LOAD ADDRESS OF ECB
         POST  (11)                   POST ECB
         B     ENDEXIT                LEAVE
ENDEXIT  EQU   *
ENDEX0   EQU   *
ENDE000  EQU   *
         L     13,SAVEEXI1+4         LOAD ADDRESS OF OLD SAVE
         LM    14,12,12(13)           RESTORE REGISTERS
         L     14,SAVE14              RESTORE RETURN ADDRESS
         SR    15,15                  CLEAR RETURN CODE
         BR    14                     RETURN
SAVE14   DS    F
ANDRZE0  DC     CL8'ANDRZEJ '
EXPATH   DS    H
PLISTA   DC    CL40' '
SAVEEXI1 DS    18F
         END    FLASH000


WTOP MACRO

         MACRO
&LABEL   WTOP    &CMD,&LENGTH
         LCLC  &PUT,&PLIST,&STORES
&PUT     SETC  'CSI'.'&SYSNDX.B'
&PLIST   SETC  'CSI'.'&SYSNDX.C'
&STORES  SETC  'CSI'.'&SYSNDX.D'
&LABEL   DS    0H
         AIF   ('&CMD' EQ '').ERR2             NO COMMAND SPECIFIED
         AIF   ('&CMD'(1,1) EQ '''').ERR8      BR IF NOT ACTUAL CMD TX
         AIF   ('&CMD'(1,1) EQ '(').ERR9       CMD ADDR IN REGISTER
         AIF   (K'&CMD GT 130).ERR4            LENGTH NOT VALID
         AIF   (&LENGTH GT 130).ERR4           LENGTH NOT VALID
         AIF   ('&LENGTH' EQ '').ERR3          LENGTH NOT SPECIFIED
         B     &PLIST
&PLIST   MVC   &PUT,&CMD                       MOVE TEXT
         CNOP  0,4
         BAL   1,&STORES
         DC    AL2(&LENGTH+4)              MESSAGE LENGTH
         DC    B'0000000000000000'
&PUT     DC    CL134'         '                MESSAGE  TEXT
&STORES  DS    0H
         SVC   35
         MEXIT
         MNOTE 8,'THE REQUIRED PARAMETER ''COMMAND'' IS NOT SPECIFIED'
         MEXIT
         MNOTE 8,'THE REQUIRED PARAMETER ''LENGTH'' IS NOT SPECIFIED'
         MEXIT

         MNOTE 8,'THE ACTUAL TEXT LENGTH EXCEEDS 130'
         MEXIT
         MNOTE 8,'QUOTATION MARK NOT ALLOWED'
         MEXIT
         MNOTE 8,'REGISTER NOTATION NOT ALLOWED'
         MEXIT
         MEND


FLASH DIRECTORY ENTRY

USER OPERV OPERV 1M 16M BG
OPTION ECMODE MAXCONN 10
 ACCOUNT XXXXXXXX XXXXXX
IUCV ALLOW MSGLIMIT 255
 IPL GCS PARM AUTOLOG
 CONSOLE  009  3215 T
 SPOOL 00C 2540  READER *
 SPOOL 00D 2540  PUNCH  M
 SPOOL 00E 1403  A
 LINK MAINT    190 190 RR
 LINK MAINT    19E 19E RR
 LINK MAINT    19D 19D RR
 LINK MAINT    595 595 RR
 MDISK 191 3380 XXX 001 XXXXXX MR

Andrzej Popielewicz
System Analyst
Danet  GmbH (Germany)                        c A Popielewicz 1992

        

Journal home pages: AIX Update  CICS Update  DB2 Update  MQ Update  MVS Update  RACF Update  TCP/SNA Update