TITLE 'ICATS SEND-A-MESSAGE-TO-SOMEBODY ROUTINE' MES00010
*********************************************************************** MES00020
* * MES00030
* MODULE NAME = MESSAGE * MES00040
* * MES00050
* FUNCTION = SEND A MESSAGE IN RESPONSE TO THIS ICATS REQUEST * MES00060
* TO WHOEVER GAVE IT TO ME, EITHER TO ANOTHER VIRTUAL * MES00070
* MACHINE IF THIS IS AN SMSG COMMAND, OR TO MYSELF * MES00080
* IF A CONSOLE COMMAND. IF THIS HAPPENS TO BE A UTS * MES00090
* COMMAND, GIVE THE MESSAGE TO THE CONSOLE. * MES00100
* * MES00110
* ENTRY POINTS = MESSAGE * MES00120
* * MES00130
* LINKAGE = BALR R14,R15 FROM ANYWHERE IN ICATS PROGRAM. * MES00140
* THE ADDRESS OF THIS ROUTINE IS KEPT IN AN ADDRESS * MES00150
* CONSTANT IN THE ICATS COMMON DATA AREA (ICDATA). * MES00160
* FOR EXAMPLE, * MES00170
* LA R1,MESSAGE * MES00180
* L R15,AMESSAGE * MES00190
* BALR R14,R15 * MES00200
* * MES00210
* REGISTER CONTENTS UPON ENTRY = * MES00220
* R1 = POINTS TO THE CHARACTER MESSAGE LENGTH AND TEXT * MES00230
* WHICH IS IN THE FORMAT OF * MES00240
* MESSAGE DC AL1(N) # BYTES OF CHAR DATA * MES00250
* DC CLN'THIS IS YOUR MESSAGE' * MES00260
* R2 = POINTS TO THE ICATS COMMON DATA AREA AS ALWAYS. * MES00270
* R14 = RETURN ADDRESS BACK TO CALLER. * MES00280
* R15 = ADDRESS OF THIS SUBROUTINE (USED FOR BASE REG). * MES00290
* * MES00300
* ALSO, SMSGVMID = USER ID OF THE GUY WHO GAVE ME THIS SMSG, * MES00310
* ONLY IF THIS IS A SMSG COMMAND. * MES00320
* * MES00330
* REGISTER CONTENTS UPON EXIT = * MES00340
* R15 = 0 = EVERYTHING WENT OK. * MES00350
* * MES00360
* REGISTER USAGE: * MES00370
* R0-R1 = USED TO PASS PARAMETERS TO SUBROUTINES. * MES00380
* R2 = ADDRESS OF ICATS COMMON DATA AREA (AS ALWAYS). * MES00390
* R3-R5 = FREE. * MES00400
* R6 = MESSAGE ADDRESS. * MES00410
* R7 = MESSAGE LENGTH. * MES00420
* R8-R13 = FREE. * MES00430
* R14 = RETURN ADDRESS FOR WHEN I CALL SUBROUTINES * MES00440
* R15 = SUBROUTINE ADDRESS * MES00450
* * MES00460
* MODULE LOGIC = * MES00470
* 1) IF THIS ISN'T AN SMSG COMMAND, DO A LINEDIT TO PUT THIS * MES00480
* MESSAGE TO THE CONSOLE. * MES00490
* 2) ELSE, DO A CP MESSAGE COMMAND TO THE VM USER ID IN * MES00500
* SMSGVMID. * MES00510
* * MES00520
* NORMAL EXIT = * MES00530
* R15 = 0 * MES00540
* * MES00550
* EXTERNAL REFERENCES = NONE * MES00560
* * MES00570
* CONTROL BLOCKS = ICDATA (ICATS COMMON DATA AREA) * MES00580
* * MES00590
* NON-STANDARD MACROS (FOUND IN ICATS MACLIB) * MES00600
* ICDATA = ICATS COMMON DATA AREA DSECT. * MES00610
* * MES00620
* CHANGE ACTIVITY * MES00630
* DATE NAME REASON FOR CHANGE * MES00640
* 04/18/83 RICK JASPER BROKEN AWAY FROM ICATS MAINLINE INTO * MES00650
* SEPARATE SUBROUTINE * MES00660
* 04/25/83 RICK JASPER ADDED THE DELAYED MESSAGE ENTRY POINT * MES00670
* 09/16/83 RICK JASPER TOOK AWAY THE DELAYED MESSAGE CODE * MES00680
* (IT WAS A STUPID WAY OF DOING THINGS) * MES00690
* * MES00700
*********************************************************************** MES00710
EJECT MES00720
PRINT GEN,NODATA MES00730
MESSAGE CSECT MES00740
USING ICDATA,R2 ADDRESS ICATS COMMON DATA AREA MES00750
USING MESSAGE,R15 USE R15 FOR NEXT INSTRUCTION ONLY MES00760
STM R0,R14,MESSREGS SAVE CALLERS REGISTERS MES00770
DROP R15 MES00780
USING MESSAGE,R11 USE R11 FOR THIS ROUTINE'S BASE REG MES00790
LR R11,R15 SWITCH BASE REGISTER TO R11 MES00800
* MES00810
LR R6,R1 SWITCH MESSAGE ADDRESS TO R6 MES00820
SR R7,R7 PICK UP MESSAGE LENGTH IN R7 MES00830
IC R7,0(R6) MES00840
LTR R7,R7 CHECK FOR NULL MESSAGE MES00850
BZ MESSBYE IGNORE IF SO MES00860
TM FLAGB,SMSGCMD IS THIS AN SMSG COMMAND ?? MES00870
BO MESSCONA YES, GO DO THE CP MSG COMMAND MES00880
LINEDIT TEXTA=(R6),RENT=NO,DOT=NO MES00890
B MESSBYE GOODBYE. MES00900
MESSCONA DS 0H MES00910
MVC MSGUID,SMSGVMID MOVE IN SMSG'ER USER ID MES00920
LA R6,1(R6) BUMP PAST MESSAGE LENGTH MES00930
* THIS IS AN SMSG COMMAND. MES00940
* R6 = ADDRESS OF MESSAGE TEXT MES00950
* R7 = LENGTH OF MESSAGE TEXT (WHICH IS POSITIVE) MES00960
MVI MSGTEXT,C' ' BLANK OUT OLD MESSAGE MES00970
MVC MSGTEXT+1(79),MSGTEXT MES00980
C R7,=F'80' IF MESSAGE LENGTH > 80, MES00990
BNH MESSCOND THEN GIVE JUST THE MES01000
LA R7,80 FIRST 80 CHARACTERS. MES01010
MESSCOND DS 0H MES01020
BCTR R7,R0 DECREMENT LENGTH FOR MVC INSTR. MES01030
EX R7,MESSMVC MOVE MESSAGE INTO COMMAND MES01040
* PUT IN THE DELIMITING 8X'FF' MES01050
LR R10,R7 PREPARE INDEX REGISTER MES01060
N R10,=X'FFFFFFF8' MES01070
L R8,=X'FFFFFFFF' MES01080
ST R8,MSGTEXT+8(R10) PUT IN THE FIRST 4 X'FF' MES01090
ST R8,MSGTEXT+12(R10) NOW THE NEXT 4 MES01100
LA R1,MSGCMD DO A 'CP MESSAGE ...' COMMAND MES01110
SVC 202 MES01120
DC AL4(*+4) MES01130
MESSBYE LA R15,0 RETURN CODE = 0 = EVERYTHING'S GREAT MES01140
LM R0,R14,MESSREGS MES01150
BR R14 BYE MES01160
* MES01170
MESSREGS DS 15F MES01180
MSGCMD DS 0D MUST BE DOUBLEWORD ALIGNED MES01190
DC CL8'CP' MES01200
DC CL8'MESSAGE' MES01210
MSGUID DC CL8' ' MES01220
MSGTEXT DS CL128 MES01230
MESSMVC MVC MSGTEXT(0),0(R6) MES01240
LTORG MES01250
ICDATA MES01260
END MES01270