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