*DECK DB$MSG
          IDENT  DB$MSG 
          TITLE  DB$MSG - ISSUE MESSAGE TO THE DAYFILE AND/OR B-DISPLAY 
*#
* *   DB$MSG  - ISSUE MSG TO A AMD B DISP AND DF PAGE  1
* *   DB$MSGB - ISSUE MSG TO B DISPLAY
* *   C O GIMBER                                 DATE  10/14/75 
* 
* DC  PURPOSE 
* 
*     TO PUT MESSAGES ON DISPLAYS AND/OR THE DAYFILE
* 
* DC  ENTRY CONDITIONS
* 
*     X1 = ADDRESS OF MESSAGE.  AN 80 CHARACTER MESSAGE WILL BE ISSUED
*          UNLESS THE TERMINATION CHARACTER ":" (COLON) IS FOUND IN THE 
*          MESSAGE, OR THE MESSAGE CONTAINS A 12 BIT BYTE OF ZEROES IN
*          THE LEAST SIGNIFICANT PART OF A CM WORD. 
* 
*     IF FLAG DB$DMFF IS TRUE, THEN DB$DMFM CONTAINS A FLASHING MESSAGE 
*     WHICH HAS PRIORITY FOR THE B DISPLAY. 
* 
* DC  EXIT CONDITIONS 
* 
*     IF DB$MSG CALLED, MESSAGE HAS BEEN ISSUED TO BOTH A AND B DISPLAYS
*                       AND THE JOB AND SYSTEM DAYFILES.
*                       IF DB$DMFF WAS TRUE, THE MESSAGE IN DB$DMFM WAS 
*                       REISSUED TO THE B DISPLAY.
*     IF DB$MSG5 CALLED, THE MESSAGE HAS BEEN ISSUED TO SYSTEM
*                       ACCOUNTING FILE ON THE NOS SYSTEM.
*     IF DB$MSG2 CALLED, LINE 2 OF THE B DISPLAY HAS BEEN CLEARED.
*                       (NO PARAMETERS ARE PASSED TO DB$MSG2).
*     IF DB$MSGB CALLED, THE MESSAGE HAS BEEN ISSUED TO THE B DISPLAY.
*                       IF DB$DMFF WAS TRUE, THE MESSAGE IN DB$DMFM WAS 
*                       REISSUED TO THE B DISPLAY.
  
* 
* DC  DESCRIPTION 
*#
          ENTRY  DB$MSG 
DB$MSG    EQ   *+1S17 
          RJ   TERMIN 
          MESSAGE  MSG,,RECALL
          SA2    DB$DMFF
          ZR   X2,DB$MSG     IF NO PRIORITY B DISPLAY MESSAGE 
          SX1    DB$DMFM
          RJ   TERMIN        PLACE DB$DMFM MESSAGE IN MSG 
          MESSAGE MSG,2,RECALL     REISSUE PRIORITY B DISPLAY MESSAGE 
          EQ   DB$MSG 
  
  
*         ENTRY  DB$MSG5
*DB$MSG5   EQ     *+1S17
*         RJ     TERMIN 
*         MESSAGE  MSG,5,RECALL 
*         EQ     DB$MSG5
  
  
          ENTRY  DB$MSG2     NO PARAMETERS
 DB$MSG2  EQ   *+1S17 
          MX6    0
          SA6    MSG         SEND A MESSAGE OF ZEROS
          MESSAGE MSG,2,RECALL     CLEAR LINE 2 OF THE B DISPLAY
          EQ   DB$MSG2
  
  
          ENTRY  DB$MSGB
DB$MSGB   EQ   *+1S17 
          RJ   TERMIN 
          MESSAGE MSG,1,RECALL
          SA2    DB$DMFF
          ZR   X2,DB$MSGB    IF NO PRIORITY B DISPLAY MESSAGE.
          SX1    DB$DMFM
          RJ   TERMIN        PLACE DB$DMFM MESSAGE IN MSG 
          MESSAGE MSG,2,RECALL     REISSUE PRIORITY B DISPLAY MESSAGE 
          EQ   DB$MSGB
  
  
          ENTRY  DB$DMFF
          ENTRY  DB$DMFM
 DB$DMFF  BSSZ   1           1 IF PRIORITY B DISPLAY MESSAGE IN DB$DMFM 
 DB$DMFM  BSSZ   5           PRIORITY B DISPLAY FLASHING MESSAGE
  
  
*#
* 
*     TERMIN IS AN IMBEDDED SUBROUTINE WHICH SCANS THE INPUT MESSAGE
*     AND PRODUCES AN OUTPUT MESSAGE WHICH IS ZERO FILLED FROM THE
*     POSITION OF THE TERMINATION CHARACTER IN THE INPUT MESSAGE. 
*#
  
TERMEND   IX6    X6-X7       REMOVE TERMINATION CHARACTER 
          SA6    A6+B1       STORE CURRENT STORAGE REGISTER 
          MX6    0
          SA6    A6+B1       STORE ADDITIONAL ZERO WORD 
  
TERMIN    EQ   *+1S17 
          SB1    1           (B1) = 1 
          MX0    54D         (X0) = 1 CHARACTER MASK
          SX7    1R:         (X7) = TERMINATION CHARACTER 
          SB7    7D          B7 IS WORD LOOP COUNTER
          SA1    X1          X1 CONTAINS WORD FROM INPUT MESSAGE
          SA6    MSG-1       INITIALIZE STORAGE LOCATION
  
WORDLOOP  MX6    0           ZERO STORAGE REGISTER
          SB6    9D          B6 IS CHARACTER LOOP COUNTER 
  
CHARLOOP  LX0    -6D         SHIFT MASK 
          LX7    -6D         SHIFT TERMINATION CHARACTER
          BX5    -X0*X1      MASK OUT CHARACTER 
          IX6    X6+X5       ADD CHARACTER TO STORAGE REGISTER
          BX5    X5-X7
          ZR   X5,TERMEND    IF TERMINATION CHARCTER
          SB6    B6-B1
          PL   B6,CHARLOOP   IF MORE CHARACTERS IN WORD 
          SA6    A6+B1       STORE STORAGE REGISTER 
          SA1    A1+B1       FETCH NEXT WORD FROM INPUT MESSAGE 
          SB7    B7-B1
          PL   B7,WORDLOOP   IF ANOTHER WORD IN MESSAGE 
          EQ   TERMIN 
  
  
          BSS    1           SCRATCH CELL FOR INITIALIZING STORAGE
MSG       BSS    8           OUTPUT MESSAGE.
          BSS    1           ADDITIONAL WORD IN CASE MESSAGE IS 80 CHARS
          END 
