*COMDECK PBTTYREAD
_$J+  PAGE EJECT? 
_*****************************
*                            *
*         PBTTYREAD          *    LOCAL TO PBTTYINT 
*        READ CONSOLE        *
*                            *
*****************************?
_***********************************************************************
*                                                                      *
**OVERVIEW- PBTTYREAD READS CHARACTERS FROM THE LOCAL CONSOLE.         *
*           PARITY IS STRIPPED FROM EACH CHARACTER.  FIRST             *
*           CHARACTER PROCESSING CONSISTS OF SETTING UP THE            *
*           FIRST INPUT BUFFER, CHECKING THE FIRST CHARACTER           *
*           FOR ENTER TUP CHARACTER (CONTROL A) OR CONSOLE             *
*           CONTROL CHARACTER (SLASH).  NON-ORDERWIRE MESSAGES         *
*           ARE EDITED CHARACTER-BY-CHARACTER.  TUP EOM (SLASH)        *
*           CAUSES THE WRITE MODE TO BE ENTERED.                       *
*                                                                      *
**INPUT- NONE                                                          *
*                                                                      *
**OUTPUT- CHARACTER READ AND PROCESSED.                                *
*                                                                      *
**EXTERNAL SUBROUTINES-                                                *
*              1) PBREAD           READ CHAR/STATUS                    *
*              2) PBTTYSETMODE     SET CONSOLE MODE                    *
*              3) PBGET1BF         GET A BUFFER                        *
*              4) PBLOAD           LOAD A CANNED MSG                   *
*              5) PBREL1BF         RELEASE A BUFFER                    *
*              6) PBIOSERV         I/O SERVICES                        *
*              7) PBWRITE          WRITE CHAR/FUNCTION                 *
*                                                                      *
***********************************************************************?
PROCEDURE PBTTYREAD;
BEGIN 
  WITH JACT[TTY],WORK1 DO 
  BEGIN 
    BA1CHAR := PBREAD(TTYIO,TTY);           _READ CHARACTER            ?
    JATIMER := J1FIVEMIN;                   _RESET 5 MINUTE TIMER      ?
    BASET   := BASET - [BIT7];              _STRIP PARITY              ?
    IF ($61 @ BAINT) & ($7A \ BAINT)        _CHECK FOR LOWER CASE      ?
    THEN BAINT := BAINT - $20;              _CONVERT TO UPPER CASE     ?
    IF JAFRSTFLG & (J1CR " BA1CHAR) &       _TEST FOR 1ST CHARACTER    ?
       (J1LF " BA1CHAR) THEN
    BEGIN 
_  ******  CAUTION - HIDDEN *IF DEF,TUP  ******  ?
*IF DEF,TUP 
      IF (J1ENTERTUP = BA1CHAR) &           _TEST FOR ENTER TUP CHAR   ?
         (TTY = JBASSIGNTABLE[J2TUPINPUT]) THEN 
      BEGIN 
        JUTUPTABLE.JUTUPFLG := TRUE;        _SET TUP MODE              ?
        BA1CHAR := J1CR;                    _THROW AWAY CHAR           ?
      END;
      IF JUTUPTABLE.JUTUPFLG
      THEN JACURIBP := JUTUPTABLE.JUTUPIN   _SET TUP INPUT BFR         ?
      ELSE
*ENDIF
_  ******  CAUTION - HIDDEN *ENDIF FOR TUP CODE  ******  ?
      BEGIN 
        JACURIBP := PBGET1BF(R0BUFSZE);     _GET 1ST INPUT BFR         ?
        JAOLDIBP := JACURIBP; 
        JACHFLG  := (#/# = BA1CHAR);        _SET CONSOLE CONTROL IF /  ?
      END;
      JACURIBP'.BFLCD := J1FRSTCHAR;        _SET LCD TO START OF BFR   ?
      JAFRSTFLG := FALSE;                   _TURN OFF 1ST CHAR FLAG    ?
    END;
    IF NOT JAFRSTFLG THEN                   _NOT FIRST CHAR            ?
    WITH JACURIBP' DO 
    BEGIN 
      BFDATAC[BFLCD] := BA1CHAR;            _MOVE CHAR INTO BFR        ?
      IF J1SYSEOM = BA1CHAR THEN            _TEST FOR EOM CHAR         ?
      BEGIN 
        JAFRSTFLG := TRUE;                  _SET 1ST CHAR FLAG         ?
        BFDATAC[BFLCD] := # #;              _WIPE OUT EOM              ?
        PBTTYEOT;                           _HANDLE END-OF-MSG         ?
      END 
      ELSE
      IF (J1IDISCARD = BA1CHAR)             _TEST FOR DISCARD CHAR     ?
_  ******  CAUTION - HIDDEN *IF DEF,TUP  ******  ?
*IF DEF,TUP 
         & NOT JUTUPTABLE.JUTUPFLG
*ENDIF
_  ******  CAUTION - HIDDEN *ENDIF FOR TUP CODE  ******  ?
      THEN
      BEGIN 
        JAFRSTFLG := TRUE;                  _SET 1ST CHAR FLAG         ?
        PBLOAD(JACURIBP,ERRMSG,             _LOAD *ERR MSG             ?
               PBMIN(JACURIBP'.BFLCD,LSTCHAR-6),
               LSTCHAR);
        RCLRP.JCPOINTER := JAOLDIBP;        _SET UP I/O POINTER        ?
        PBIOSERV(RCLRP,ERR);                _SEND TO CONSOLE           ?
      END 
      ELSE
      BEGIN 
        PBEDITTY;                           _EDIT CHARACTER            ?
_  ******  CAUTION - HIDDEN *IF DEF,TUP  ******  ?
*IF DEF,TUP 
        IF JUTUPTABLE.JUTUPFLG &            _TUP MODE                  ?
           ((J1TUPEOM = BA1CHAR) !          _TUP EOM                   ?
            (J1IDISCARD=BA1CHAR) !          _DISCARD INPUT             ?
            (J1TUPCAN = BA1CHAR)) THEN      _TUP CANCEL INPUT          ?
        IF BUSY IN JASTATUS THEN            _TEST CONSOLE BUSY         ?
        BEGIN 
          PBWRITE(TTYSTAT,TTYEOP,TTY);      _SET EOP INTERRUPT         ?
          JAMODEFLG := TRUE;                _WAIT FOR EOP INTERRUPT    ?
        END 
        ELSE PBTTYSETMODE                   _SET CONSOLE TO READ MODE  ?
        ELSE
*ENDIF
_  ******  CAUTION - HIDDEN *ENDIF FOR TUP CODE  ******  ?
        IF LSTCHAR = BFLCD THEN             _TEST IF BFR FULL          ?
        BEGIN 
          BCCHAIN[R0BUFSZE'.BEMSK.BAINT+1] := _GET ANOTHER BUFFER      ?
          PBGET1BF(R0BUFSZE); 
          JACURIBP := BCCHAIN[R0BUFSZE'.
                      BEMSK.BAINT +1];
          JACURIBP'.BFLCD := J1FRSTCHAR;    _SET LCD TO START OF BFR   ?
        END 
        ELSE BFLCD := BFLCD+1;              _BUMP LCD                  ?
      END; _ELSE? 
    END; _WITH? 
  END; _WITH? 
END; _PBTTYREAD?
