*COMDECK PBTTYWRIT
_$J+  PAGE EJECT? 
_*****************************
*                            *
*         PBTTYWRITE         *    LOCAL TO PBTTYINT 
*        WRITE CONSOLE       *
*                            *
*****************************?
_***********************************************************************
*                                                                      *
**OVERVIEW- PBTTYWRITE WRITES CHARACTERS TO THE LOCAL CONSOLE.         *
*           A CARRIAGE RETURN AND LINE FEED ARE OUTPUT AFTER           *
*           EVERY MESSAGE.  COMMON DRIVER COMPLETION IS CALLED         *
*           IF REQUESTED IN THE I/O REQUEST.  AT EOM IN TUP            *
*           MODE, THE CONSOLE IS SET TO READ MODE.                     *
*                                                                      *
**INPUT- NONE                                                          *
*                                                                      *
**OUTPUT- CHARACTER OUTPUT.                                            *
*                                                                      *
**EXTERNAL SUBROUTINES-                                                *
*              1) PBWRITE          WRITE CHAR/FUNCTION                 *
*              2) PBTTYSETMODE     SET CONSOLE MODE                    *
*              3) PBDRCOMPL        COMMON DRIVER COMPLETION            *
*              4) PBTUPDUMP        TUP DUMP                            *
***********************************************************************?
PROCEDURE PBTTYWRITE; 
BEGIN 
  WITH JACT[TTY],JAIOBUF' DO
  BEGIN 
    CHN := JABUFSZE'.BEMSK.BAINT+1;         _SET UP CHAIN INDEX        ?
    IF (BFEOTFLG ! (NIL = BCCHAIN[CHN])) &  _CHECK FOR END-OF-MSG      ?
       (BFLCD @ JACHRCNT) THEN
    CASE EOMSTATE OF
    1:  
    BEGIN 
      PBWRITE(TTYIO,J1CR,TTY);              _WRITE CR                  ?
      EOMSTATE := 2;
    END;
    2:  
    BEGIN 
      PBWRITE(TTYSTAT,TTYEOP,TTY);          _WAIT FOR EOP INTERRUPT    ?
      PBWRITE(TTYIO,J1LF,TTY);              _WRITE LF                  ?
      EOMSTATE := 3;
    END;
    3:  
    BEGIN 
      JAINPROGFLG := FALSE;                 _CLEAR OUTPUT IN-PROGRESS  ?
      EOMSTATE := 1;
_  ******  CAUTION - HIDDEN *IF DEF,TUP  ******  ?
*IF DEF,TUP 
      IF JUTUPTABLE.JUTUPFLG THEN           _CHECK IF TUP MODE         ?
      BEGIN 
        JUTUPTABLE.JUTPINPROGFLG := FALSE;  _CLEAR TUP OUTPUT IN-PROG  ?
        IF BUSY IN JASTATUS THEN            _CHECK IF CONSOLE BUSY     ?
        BEGIN 
          PBWRITE(TTYSTAT,TTYEOP,TTY);      _SET EOP INTERRUPT         ?
          JAMODEFLG := TRUE;                _WAIT FOR EOP INTERRUPT    ?
        END 
        ELSE PBTTYSETMODE;                  _SET CONSOLE MODE          ?
      END;
*ENDIF
_  ******  CAUTION - HIDDEN *ENDIF FOR TUP CODE  ******  ?
      IF JACUREQ'.BCPRP.JCCOMFLG            _CHECK COMPLETION FLAG     ?
      THEN PBDRCOMPL(TTY,JACUREQ);          _HANDLE COMPLETION         ?
    END;
    END _CASE?
    ELSE
    BEGIN 
      IF BFLCD @ JACHRCNT THEN              _CHECK FOR END-OF-BUFFER   ?
      BEGIN 
        JAIOBUF := JAIOBUF'.BCCHAIN[CHN];   _CHAIN TO NEXT OUTPUT BFR  ?
        JACHRCNT:= JAIOBUF'.BFFCD-1;        _SET 1ST CHAR TO WRITE     ?
_  ******  CAUTION - HIDDEN *IF DEF,TUP  ******  ?
*IF DEF,TUP 
        IF JUTUPTABLE.JUDPCFLG              _CHECK TUP DUMP IN-PROGRESS?
        THEN PBTUPDUMP;                     _CONTINUE DUMP             ?
*ENDIF
_  ******  CAUTION - HIDDEN *ENDIF FOR TUP CODE  ******  ?
      END;
      JACHRCNT := JACHRCNT+1;               _BUMP CHAR INDEX           ?
      PBWRITE(TTYIO,JAIOBUF'.               _WRITE CHARACTER           ?
              BFDATAC[JACHRCNT],TTY); 
      JATIMER := J1ONESEC;                  _SET 1 SECOND TIMER        ?
    END; _ELSE? 
  END; _WITH? 
END; _PBTTYWRITE? 
