*COMDECK PBCHEXECU
_$J+  PAGE EJECT? 
_*****************************
*                            *
*         PBCHEXECUTE        *    LOCAL TO PBTTYINT 
*   EXECUTE CONSOLE CONTROL  *
*                            *
*****************************?
_***********************************************************************
*                                                                      *
**OVERVIEW- PBCHEXECUTE EXECUTES CONSOLE CONTROL MESSAGES (ONES        *
*           THAT BEGIN WITH A SLASH).                                  *
*                                                                      *
**INPUT- NONE                                                          *
**OUTPUT- PROPER FUNCTION PERFORMED.                                   *
*                                                                      *
**EXTERNAL SUBROUTINES-                                                *
*              1) PBLOAD           LOAD A CANNED MSG                   *
*              2) PBIOSERV         I/O SERVICES                        *
*              3) PBDRCOMPL        COMMON DRIVER COMPLETION            *
*              4) PBLSGET          GET A WORKLIST ENTRY                *
*              5) PBREL1BF         RELEASE A BUFFER                    *
*              6) PBGET1BF         GET A BUFFER                        *
***********************************************************************?
PROCEDURE PBCHEXECUTE;
VAR PARAM1, 
    PARAM2 : INTEGER; 
    WL : BOOLEAN; 
BEGIN 
  WITH JACT[TTY],                           _TTY CONTROLLER TABLE      ?
       JAOLDIBP',                           _CONSOLE CONTROL MSG BFR   ?
       JACUREQ'.BCPRP DO                    _CURRENT I/O REQUEST       ?
  BEGIN 
    PBCHDECODE(J1FRSTCHAR+1,PARAM1);        _DECODE OP-CODE            ?
    PARAM2 := SUPQ; 
    IF (BADC = PARAM1) ! (BADC = PARAM2) THEN 
    BEGIN                                   _BAD FORMAT                ?
      PBLOAD(JAOLDIBP,ERRMSG,BFLCD,LSTCHAR);_LOAD *ERR AFTER MSG       ?
      BFDATAC[BFFCD] := #*#;
      RCLRP.JCPOINTER := JAOLDIBP;
      PBIOSERV(RCLRP,WL);                   _PASS TO CONSOLE           ?
    END 
    ELSE
    BEGIN 
      CASE PARAM1 OF
_?
      SUPQ,OVLQ,ORDQ: 
      JAQCHOSEN := PARAM1;                  _ SET CONSOLE MODE         ?
_?
      REQ:                                  _REQUEUE A CONSOLE MSG     ?
      IF JAINTFLG THEN                      _CHECK IF MSG INTERRUPTED  ?
      BEGIN 
        JAINTFLG := FALSE;                  _CLEAR MSG INTERRUPTED FLAG?
        JAIOBUF  := JCPOINTER;              _RESET TO 1ST BUFFER       ?
        JACHRCNT := JAIOBUF'.BFFCD-1;       _RESTORE CHARACTER COUNT   ?
      END;
_?
      CAN:                                  _CANCEL CONSOLE MSG        ?
      BEGIN 
        IF JAINTFLG & JCCOMFLG THEN         _CHECK IF MSG IN-PROGRESS  ?
        BEGIN 
          JCCHAINFLG := FALSE;              _DO NOT START ANOTHER MSG  ?
          PBDRCOMPL(TTY,JACUREQ);           _GET RID OF CURRENT MSG    ?
        END;
        JAINPROGFLG := FALSE;               _CLEAR OUTPUT IN-PROGRESS  ?
        JAINTFLG    := FALSE;               _CLEAR MSG INTERRUPTED FLAG?
      END;
_?
      MTQ:                                  _EMPTY CONSOLE QUEUE(S)    ?
      FOR WL := J1REGWL TO J1PRIWL DO       _REGULAR/PRIORITY          ?
      WHILE NOT PBLSGET (BWWLENTRY[CNSLE],
                        BYWLCB[JAIOWL[WL]]) DO _ GET EACH ENTRY        ?
      WITH BWWLENTRY[CNSLE],BWPKTPTR'.BCPRP DO
      BEGIN 
        JCRELPRPFLG := TRUE;                _RELEASE PRP               ?
        JCCHAINFLG  := FALSE;               _DO NOT START ANOTHER MSG  ?
        PBDRCOMPL(TTY,BWPKTPTR);            _GET RID OF MSG            ?
      END;
_?
      END; _CASE? 
      PBREL1BF(JAOLDIBP,R0BUFSZE);          _RELEASE CONSOLE CONTROL   ?
    END; _ELSE? 
  END; _WITH? 
END; _PBCHEXECUTE?
