*DECK,CONSOLE 
USETEXT MISC$ 
USETEXT GLOBALI 
USETEXT TCH$COM 
USETEXT TSB$COM 
USETEXT ABH$COM 
USETEXT ACN$COM 
USETEXT TCB$COM 
      PROC CONSOLE (MSGIN,MSGTYPE,MSGLEN);
      BEGIN # CONSOLE # 
*IF DEF,IMS 
 #
*1DC  CONSOLE 
* 
*     1. PROC NAME           AUTHOR              DATE 
*        CONSOLE             B. M. WEST          9 FEB 1977 
* 
*     2. FUNCTIONAL DESCRIPTION.
*        CONSOLE CHAINS A MESSAGE ON A CONSOLE FOR SUBSEQUENT PROCESSING
*        BY IDLE"S ROUTINE SENDMSG. 
* 
*     3. METHOD USED. 
*        CONSOLE WILL CHAIN A MESSAGE ONTO THE TCB$OUTPUT CHAIN 
*        CONSTRUCTING A DISPLAY CHARACTER NETWORK BLOCK (TEXT 
*        AND BLOCK HEADER) WITH THE LENGTH SET. THE ABN FIELD OF
*        THE HEADER IS USED TO LINK THE CHAINED MESSAGES TOGETHER.
* 
* 
*     4. ENTRY PARAMETERS.
* 
*        MSGIN - CHARACTER STRING OF THE MESSAGE. 
* 
*        MSGLEN - LENGTH OF MESSAGE IN CHARACTERS.
* 
*        MSGTYPE - CRITICAL FLAG. 
* 
*     5. EXIT PARAMETERS. 
*        NONE.
* 
*     6. COMDECKS USED. 
* 
*        RBF$COM
*        MOD$COM
*        TSBMDEFS 
*        TCB$COM
*        TSBMBASE 
*        ABH$COM
* 
*     7. ROUTINES CALLED. 
* 
*        GETBUF 
* 
*     8. DAYFILE MESSAGES.
*        NONE.
 #
*ENDIF
  
      XREF FUNC GETBUF U;    # ALLOCATE BUFFER SPACE FUNCTION          #
      XREF PROC SETACN; 
      XREF PROC LINKBLOCK;                       # CHAIN OUTPUT BLOCK  #
      ITEM MSGTYPE B; 
      ITEM MSGLEN I;
      ITEM MSGIN C (90);
      ITEM ORD U; 
      ITEM I     I; 
    CONTROL EJECT;
# 
      PLACE MESSAGE ON CONSOLE"S MESSAGE CHAIN
                                                                       #
# 
      IF CONSOLE IS NOT CURRENTLY CONNECTED TO RBF AND THE MESSAGE IS 
      NOT CRITICAL, IGNORE AND RETURN 
  
      OR IF THE CONSOLE IS ENDING ITS CONNECTION AND NOT GOING TO IAF 
      IGNORE ANY MESSAGES 
                                                                       #
      IF ACN$DEVTYPE [ACN] EQ S"CONSOLE"
      THEN
        I = ACN$STATE [ACN];
      ELSE
        I = ACN$STATE [ACN$CTLR[ACN]];
      IF I EQ CONNECTSTATE"PRE$CONNECT" AND NOT MSGTYPE 
      THEN
        RETURN; 
#                                                                      #
#     GET A BUFFER FOR THE MESSAGE                                     #
#                                                                      #
#                                                                      #
#                                                                      #
      ORD = GETBUF((MSGLEN + 21)/10,MOVEABLE); # HDR+MSG+ZEROBYTES+PAD #
#                                                                      #
#     IF A BUFFER EXIST THEN MOVE THE MESSAGE INTO IT                  #
#                                                                      #
      IF ORD NQ 0 
      THEN
        BEGIN # MOVE MESSAGE INTO THE BUFFER #
        P<ABH> = ADDRESS [ORD]; 
        ABH$TLC = ((MSGLEN+11)/10)*10;     # MUST BE WHOLE WORDS       #
        C<0,MSGLEN>ABH$TEXTC = C<0,MSGLEN>MSGIN;
        ABH$ABT = 0;                             # INDICATE DATA MSG   #
        LINKBLOCK (LOC(TCB$OUTPUT),ORD);
        END 
      RETURN; 
      END   # CONSOLE # 
      TERM; 
