*COMDECK PBTTYSETM
_$J+  PAGE EJECT? 
_*****************************
*                            *
*        PBTTYSETMODE        *
*     SET TELETYPE MODE      *
*                            *
*****************************?
_$R+,G+,I-     RECURSIVE
               INTERRUPTABLE ?
_***********************************************************************
*                                                                      *
**OVERVIEW- PBTTYSETMODE CHANGES THE CONSOLE MODE FROM READ TO         *
*           WRITE OR FROM WRITE TO READ.  WHEN CHANGING TO READ        *
*           MODE, THE 1ST CHARACTER INPUT FLAG IS SET.  WHEN           *
*           CHANGING TO WRITE MODE:                                    *
*                                                                      *
*                  1) IF TUP MODE, SET TUP MESSAGE IN FLAG             *
*                  2) IF OUTPUT INTERRUPTED FLAG SET, RESTART          *
*                     OUTPUT, OTHERWISE PRINT WRITE MODE               *
*                     MESSAGE (*WM) TO PRIME OUTPUT.                   *
*                                                                      *
**INPUT- NONE                                                          *
*                                                                      *
**OUTPUT- CONSOLE MODE CHANGED.                                        *
*                                                                      *
**EXTERNAL SUBROUTINES-                                                *
*              1) PBWRITE          WRITE CHAR/STATUS                   *
*              2) PBLOAD           LOAD CANNED MESSAGE                 *
*              3) PBIOSERV         I/O SERVICES                        *
*              4) PBGET1BF         GET A BUFFER                        *
*                                                                      *
***********************************************************************?
PROCEDURE PBTTYSETMODE; 
CONST READ = BIT9;                          _READ MODE STATUS BIT      ?
VAR FNCTION : CHAR; 
    WMFLG    : BOOLEAN; 
BEGIN 
  WITH JACT[TTY] DO 
  BEGIN 
    WMFLG := FALSE;                         _CLEAR *WM MSG FLAG        ?
    JAMODEFLG := FALSE;                     _CLEAR CHANGE MODE FLAG    ?
    IF READ IN JASTATUS THEN                _CHECK IF READ MODE        ?
    BEGIN 
      FNCTION := TTYRITE;                   _SET WRITE MODE, NO INT    ?
_  ******  CAUTION - HIDDEN *IF DEF,TUP  ******  ?
*IF DEF,TUP 
      IF JUTUPTABLE.JUTUPFLG                _CHECK IF TUP MODE         ?
      THEN JUTUPTABLE.JUMSGINFLG := TRUE    _SET TUP MSG IN FLAG       ?
      ELSE
*ENDIF
_  ******  CAUTION - HIDDEN *ENDIF FOR TUP CODE  ******  ?
      IF JAINPROGFLG                        _CHECK IF OUTPUT INT       ?
      THEN FNCTION := TTYWRITE              _SET WRITE MODE WITH INT   ?
      ELSE WMFLG := TRUE;                   _SET *WM MSG FLAG          ?
    END 
    ELSE
    BEGIN                                   _SET READ MODE             ?
      JATIMER := J1FIVEMIN;                 _SET 5 MINUTE TIMER        ?
      FNCTION := TTYREAD;                   _READ MODE FUNCTION        ?
      IF NIL = JAOLDIBP                     _CHECK IF INPUT IN-PROGRESS?
      THEN JAFRSTFLG := TRUE;               _NO- SET 1ST CHAR FLAG     ?
    END;
    PBWRITE(TTYSTAT,FNCTION,TTY);           _SET CONSOLE MODE          ?
    IF WMFLG THEN                           _CHECK *WM MSG FLAG        ?
    BEGIN 
      RCLRP1.JCPOINTER := PBGET1BF(B0S32);  _GET SMALL BUFFER          ?
      PBLOAD(RCLRP1.JCPOINTER,J6WMSG,       _LOAD *WM MSG              ?
             J1FRSTCHAR,J1LST32); 
      PBIOSERV(RCLRP1,WMFLG);               _PRINT MESSAGE             ?
    END;
  END; _WITH? 
END; _PBTTYSETMODE? 
