SYSMSG
          IDENT  SYSMSG 
          ENTRY  MSG
          LCC    OVERLAY(SYSMSG,0,0)
*COMMENT  SYSMSG - SYSTEM MESSAGE TASK. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          TITLE  SYSMSG - SYSTEM MESSAGE TASK.
          SPACE  4
***       SYSMSG - SYSTEM MESSAGE TASK. 
*         B. T. ZEMLIN       75/07/04.
*         B. C. ANTIN        78/06/15.
          SPACE  4
***       THIS SYSTEM TASK IS SCHEDULED BY THE TRANSACTION
*         EXECUTIVE TO SEND A MESSAGE TO A TERMINAL.  THE MESSAGE 
*         MAY HAVE THE FOLLOWING ORIGINS - IT IS A MESSAGE
*         ISSUED BY A *K.MESSAGE* COMMAND, OR IT IS A DIAGNOSTIC
*         MESSAGE ISSUED IN THE PROCESSING OF A K-DISPLAY COMMAND 
*         THAT ORIGINATED FROM A TASK (CTI FUNCTION 7). 
*         THIS TASK IS INTENDED AS AN EXAMPLE AND MAY BE MODIFIED 
*         BY THE SPECIFIC INSTALLATION. 
          SPACE  4
*CALL     COMCMAC 
          LIST   X
*CALL     COMKKIM 
          LIST   -X 
*CALL     COMKMAC 
*CALL     COMSPRD 
  
          TRXCOM B1          DEFINE COMMUNICATIONS BLOCK SYSBOLS
  
***       COMMUNICATION BLOCK WORDS.
* 
*T  TERC  42/ TN,6/,12/ WC
*T, MSGC  42/0,18/ DMC
*T, MSGC+1  60/ MS
* 
*         TN     TERMINAL NAME. 
*         WC     WORD COUNT OF MESSAGE. 
*         DMC    K-DISPLAY COMMAND DIAGNOSTIC MESSAGE CODE. 
*         MS     IF DMC = *KDM0*, THEN START OF *K.MESSAGE* MESSAGE.
*                ELSE, ATTEMPTED K-DISPLAY COMMAND KEYWORD IF 
*                AVAILABLE. 
  
          BSS    COMCL       RESERVE SPACE FOR COMMUNICATIONS BLOCK 
  
 .1       NOREF 
  
          SPACE  4
**        TMSG   DEFINE A K-DISPLAY DIAGNOSTIC MESSAGE. 
* 
*         TMSG   A
* 
*         ENTRY  *A* = MESSAGE TO BE DEFINED. 
* 
*         EXIT    A K-DISPLAY DIAGNOSTIC MESSAGE IS DEFINED.
*                 A K-DISPLAY DIAGNOSTIC MESSAGE INDEX TABLE ENTRY
*                 IS DEFINED. 
  
  
 TMSG     MACRO  A
          LOCAL  ADR         ADDRESS OF K-DISPLAY DIAGNOSTIC MESSAGE
 ADR      SET    *
          LOC    .1 
 .1       SET    .1+1 
          DATA   C*"SYSPR"_A*  DEFINE K-DISPLAY DIAGNOSTIC MESSAGE
          LOC    *O 
  
*         DEFINE A K-DISPLAY DIAGNOSTIC MESSAGE INDEX TABLE ENTRY.
  
 RMSG     RMT 
          VFD    42/0,18/ADR
 RMSG     RMT 
          ENDM
          TITLE  SEND MESSAGE.
 SYSMSG   SPACE  4,10 
**        SYSMSG - SEND A SYSTEM ORIGIN MESSAGE TO A TERMINAL.
*         THE WORD, *MSGC*, IN THE COMMUNICATIONS BLOCK, CONTAINS A 
*         CODE USED TO DETERMINE WHICH MESSAGE TO SEND.  IF 
*         THE CODE IS *KDM0*, THEN THE MESSAGE TO BE SENT IS FROM A 
*         *K.MESSAGE* COMMAND AND THE MESSAGE IS CONTAINED IN THE 
*         COMMUNICATIONS BLOCK.  IF THE CODE IS GREATER THAN *KDM0*,
*         THEN THE CODE INDICATES WHICH DIAGNOSTIC MESSAGE TO ISSUE.
  
  
 MSG      SB1    1
          SA2    TERC        CHECK FOR NON-TERMINAL ASSOCIATED TASK 
          MX0    42 
          BX5    X0*X2       TERMINAL NAME
          ZR     X5,MSG3     IF NO TERMINAL SPECIFIED 
  
*         DETERMINE WHICH MESSAGE TO SEND.
  
          MX6    -12
          SA3    MSGC        READ DIAGNOSTIC CODE 
          SB2    X3 
          BX5    -X6*X2      WORD COUNT FOR NON-DIAGNOSTIC MESSAGE
          SB3    KDM0        *K.MESSAGE* CODE 
          SX5    X5-1 
          EQ     B2,B3,MSG1  IF *K.MESSAGE* ISSUED MESSAGE
          NG     B2,MSG3     IF INCORRECT DIAGNOSTIC CODE 
          SB3    B2-KDMTL 
          GT     B3,MSG3     IF INCORRECT DIAGNOSTIC CODE 
  
*         PLACE THE DIAGNOSTIC MESSAGE INTO THE BUFFER. 
  
          SA1    A3+B1       ATTEMPTED K-DISPLAY COMMAND
          SA5    B2+KDMT-1   DIAGNOSTIC MESSAGE INDEX TABLE ENTRY 
          SB3    A1          ASSEMBLY AREA
          SB5    X5+         FWA OF MESSAGE 
          SB2    1R/         SEARCH CHARACTER 
          BX1    X0*X1
          SB5    -B5
          RJ     SNM         SET NAME IN MESSAGE
          SX5    A7-MSGC     MESSAGE WORD COUNT 
  
*         SEND A MESSAGE TO THE TERMINAL. 
  
 MSG1     SX7    10 
          SA3    MSGB        SEND PARAMETER WORD 3
          MX0    -12
          BX5    -X0*X5 
          IX7    X7*X5       MESSAGE CHARACTER COUNT
          BX3    X0*X3
          SA2    MSGA        SEND PARAMETER WORD 1
          BX2    X0*X2
          BX7    X3+X7       MERGE CHARACTER COUNT
          SA7    MSGB 
          BX6    X2+X5       MERGE WORD COUNT 
          SA6    A2 
          SEND   MSGA        SEND THE MESSAGE 
  
*         CHECK FOR BINARY TERMINAL.
  
          SA1    SEQC        FIRST WORD OF COMMUNICATIONS BLOCK.
          RJ     CBT         CHECK FOR BINARY TERMINAL
          ZR     X6,MSG2     IF NOT BINARY
          SA6    MSGE 
          SEND   MSGD        SEND BINARY INPUT REQUEST
 MSG2     CEASE              EXIT TASK WITH A NORMAL CEASE
  
 MSG3     CEASE  1           EXIT TASK WITH AN ABNORMAL CEASE 
  
 MSGA     VFD    5/0,1/1,6/0,18/MSGC+1,12/0,18/0
          CON    0
 MSGB     VFD    6/2,30/0,4/4,8/0,12/0
 MSGD     VFD    1/0,1/0,10/0,18/MSGE,12/0,18/1 
 MSGE     BSS    1
  
**        K-DISPLAY DIAGNOSTIC MESSAGE TABLE. 
  
 .1       SET    0
  
          TMSG   (K-DISPLAY COMMAND UNSUCCESSFUL, "KDM1M" -- ///////.)
          TMSG   (K-DISPLAY COMMAND UNSUCCESSFUL, "KDM2M" -- ///////.)
          TMSG   (K-DISPLAY COMMAND UNSUCCESSFUL, "KDM3M" -- ///////.)
          TMSG   (K-DISPLAY COMMAND UNSUCCESSFUL, "KDM4M" -- ///////.)
          TMSG   (K-DISPLAY COMMAND UNSUCCESSFUL, "KDM5M" -- ///////.)
          TMSG   (K-DISPLAY COMMAND UNSUCCESSFUL, "KDM6M" -- ///////.)
  
 KDMT     BSS    0           K-DISPLAY DIAGNOSTIC MESSAGE INDEX TABLE 
 RMSG     HERE
 KDMTL    EQU    *-KDMT      LENGTH OF TABLE
          SPACE  4
**        COMMON DECKS. 
  
*CALL     COMCSNM 
*CALL     COMKCBT 
  
          END    MSG
