*DECK CSSASO
USETEXT TEXTCS
USETEXT TEXTSS
USETEXT TXCMDCS 
USETEXT TXTAPSS 
USETEXT TXTSMCS 
      PROC CSSASO;
      # TITLE - ACTION SEND TO OPERATOR                                #
      BEGIN 
# 
**    CSSASO - ACTION SEND TO OPERATOR. 
* 
*     D.K. ENDO     83/03/22
* 
*     THIS ROUTINE SENDS MESSAGES TO OTHER OPERATORS. 
* 
*     PROC CSSASO 
* 
*     ENTRY         1. HDRCMD[0] = COMMAND HEADER WORD. 
*                   2. PARMS[0]  = COMMAND PARAMETER BLOCK. 
* 
*     EXIT          1. MESSAGE SENT TO OPERATOR.
* 
# 
  
# 
****  CSSASO - XREF LIST
# 
      XREF
        BEGIN 
        PROC MOVE;           # MOVES A BLOCK OF CM WORDS               #
        PROC SSBSBF;         # STORE BIT FIELD                         #
        PROC SSTAQE;         # ACCEPT QUEUE ENTRY                      #
        END 
# 
****
# 
  
      DEF FOMTXTL # 3 #;     # LENGTH OF FOM MESSAGE IN CM WORDS       #
      DEF MSINDX # HDR$TXWCNT[0]+3 #;  # INDX INTO PARM LIST FOR MS    #
      DEF TEINDX # HDR$TXWCNT[0]+2 #;  # INDX INTO PARM LIST FOR TE    #
  
      ITEM CCNT;             # CHARACTER COUNT                         #
      ITEM CNST1;            # CONSTANT 1                              #
      ITEM CNST2;            # CONSTANT 2                              #
      ITEM CNST3;            # CONSTANT 3                              #
      ITEM HOPFLAG B;        # FLAG SET WHEN MSG IS TO BE SENT TO HOP  #
      ITEM I;                # OPERATOR CONTROL BLOCK ORDINAL          #
      ITEM WC;               # WORD COUNT                              #
  
# 
*     FOM - *FROM OPERATOR* MESSAGE, SENT ALONG WITH THE MESSAGE TO THE 
*     OPERATOR. 
# 
      ARRAY FOM [00:00] S(FOMTXTL); 
        BEGIN 
        ITEM FOM$TXT1   C(00,00,14) = ["FROM OPERATOR "]; 
        ITEM FOM$TNAM   C(01,24,07);
        ITEM FOM$TXT2   C(02,06,02) = [": "]; 
        ITEM FOM$ZBYT   U(02,18,42) = [0];
        END 
  
  
  
  
# 
*     SET UP WCB WORD.  SET UP THE ABH WORD.  IF THIS MESSAGE IS FOR THE
*     HOST, THEN SET THE ACN FOR THE HOP, OTHERWISE SEARCH THE OCB-S
*     FOR THE TERMINAL NAME AND SET THE ACN TO THE OCB ORDINAL WHEN 
*     FOUND.
# 
      WCB$WORD[1] = 0;
      WCB$SMID[1] = SMID"TTEXT";
  
      ABHWORD[1] = 0; 
  
      IF PAR$PCODE[TEINDX] EQ "HO0" 
      THEN
        BEGIN 
        ABHADR[1] = HOPORD$;
        WCB$HAF[1] = TRUE;
        HOPFLAG = TRUE; 
        I = HOPORD$;
        END 
  
      ELSE
        BEGIN 
        FOR I=HOPORD$+1 STEP 1 WHILE PAR$ELNAME[TEINDX] NQ OC$TNAM[I] 
                                       AND I LQ MAXACN$ 
        DO
          BEGIN 
          END 
  
        IF I LQ MAXACN$ 
        THEN
          BEGIN 
          ABHADR[1] = I;
          HOPFLAG = FALSE;
          END 
        ELSE
          BEGIN 
          GOTO ENDEXIT; 
          END 
        END 
  
# 
*     ENTER NAME OF THE TERMINAL IN TEXT AND SEND THE TEXT TO THE 
*     OPERATOR.  IF THE IS MESSAGE IS TO GO TO THE HOP THEN SET THE 
*     AUDIENCE GROUP THE HOP AND SEND IT TO THE OPERATOR RESPONSE QUEUE 
*     TO ENTER THE MESSAGE INTO THE HISTORY QUEUE.
# 
      CNST1 = 1;
      CNST2 = 24; 
      CNST3 = 42; 
      SSBSBF(FOM,CNST1,CNST2,CNST3,B<0,42>OC$TNAM[HDR$OPORD[0]]); 
  
      WCB$WC[1] = FOMTXTL + 2;
  
      SSTAQE(P<CNQ>,WCBUF[1],ABH[1],FOM); 
  
      IF HOPFLAG
      THEN
        BEGIN 
        ABHADR[1] = AUDGR6$;
  
        SSTAQE(P<ORQ>,WCBUF[1],ABH[1],FOM); 
        ABHADR[1] = I;
        END 
  
# 
*     MOVE TEXT OF MESSAGE TO THE MSG BUFFER.  SEND THE TEXT TO THE 
*     BUFFER.  IF THIS MESSAGE IS TO BE SENT TO THE HOP, THEN SEND
*     THE MESSAGE TO THE OPERATOR RESPONSE QUEUE TO BE PUT IN THE 
*     HISTORY BUFFER. 
# 
  
      WC = (PAR$MSGCL[MSINDX] + 10) / 10; 
      CCNT = (WC * 10) - PAR$MSGCL[MSINDX]; 
      IF CCNT LS 2
      THEN
        BEGIN 
        WC = WC + 1;
        END 
      WCB$WC[1] = WC + 2; 
  
      MOVE(WC,PARMS[MSINDX+1],CSSM[1]); 
  
      SSTAQE(P<CNQ>,WCBUF[1],ABH[1],CSSM[1]); 
  
      IF HOPFLAG
      THEN
        BEGIN 
        ABHADR[1] = AUDGR6$;
        SSTAQE(P<ORQ>,WCBUF[1],ABH[1],CSSM[1]); 
        END 
  
# 
*     SEND AN EMPTY TERMINAL TEXT WITH THE INPUT ALLOWED FLAG SET TO
*     COMPLETE THE COMMAND. 
# 
      WCB$WC[1] = 2;
      WCB$IAF[1] = TRUE;
      ABHADR[1] = HDR$OPORD[0]; 
  
      SSTAQE(P<CNQ>,WCBUF[1],ABH[1],CSSM[1]); 
  
  
ENDEXIT:  
      END  # CSSASO # 
  
 TERM 
