*COMDECK PTCLAS 
_$J+? 
_***********************************************************************
*                                                                      *
** FUNCTION NAME -                 PTCLAS                              *
*                                                                      *
** OVERVIEW-                                                           *
*         PTCLAS IS CALLED BY THE WORKLIST PROCESSOR TO TAKE ACTION    *
*         ON CLA STATUS WORKLIST ENTRIES GENERATED BY THE LEVEL 1      *
*         MODEM STATE PROGRAMS. THE PRIMARY FUNCTIONS OF PTCLAS ARE    *
*         TO GIVE CONTROL TO THE LINE INITIALIZER ON DETECTION OF      *
*         CERTAIN MODEM SIGNALS, TO GIVE CONTROL TO TIPS ON THE        *
*         OCCURRENCE OF ERROR CONDITIONS, AND TO MAKE C.E. ERROR FILE  *
*         ENTRIES FOR LINE ERRORS.                                     *
*                                                                      *
** INPUTS-                                                             *
*         CLA STATUS WORKLIST ENTRY IN THE INTERMEDIATE ARRAY.         *
*                                                                      *
** OUTPUTS-                                                            *
*         CONTROL TO THE LINE INITIALIZER OR TIP ON CERTAIN LINE       *
*         CONDITIONS.                                                  *
*                                                                      *
** EXTERNAL SUBROUTINES USED -                                         *
*         PBBFAVAIL - TO CHECK AVAILABILITY OF BUFFERS                 *
*         PBGET1BF  - TO GET SMALL BUFFERS FOR TIMER PACKETS           *
*         PBTOQUE   - TO START TIMEOUTS                                *
*         PMCDRV    - TO TURN ON ISR.ISON  AFTER OVERFLOW TIMEOUT      *
*         PNCEFILE  - TO GENERATE MODEM ERROR RELATED C.E. MESSAGES    *
*         PBHALT    - TO HALT ON INVALID CONDITION DETECTED            *
*                                                                      *
** REMARKS-                                                            *
*         IF THERE ARE NO BUFFERS AVAILABLE FOR TIMEOUT ENTRIES,       *
*         THE STATUS HANDLER WILL REPORT THE HARD ERROR WHETHER        *
*         IT BE MODEM RESPONSE TIMEOUT OR CLA STATUS OVERFLOW.         *
*         THERE IS A FIELD(MMSCI) IN THE FIRST WORD OF THE WORKLIST    *
*         ENTRY THAT INDICATES THE TYPE OF STATUS CONDITION RECOGNIZED *
*         BY THE MODEM STATE PROGRAM.                                  *
*                                                                      *
***********************************************************************?
_$I-,G-,R-    NON-RECURSIZE,INTERRUPTABLE                              ?
FUNCTION PTCLAS (PTLINO : INTEGER) : BOOLEAN; 
LABEL 
  
  10; 
CONST 
  CINOP = 4;                           _LINE INOPERATIVE CODE          ?
  CSTOP = 6;                           _LINE STOP ERROR CODE           ?
  CI1SEC  = 10;                        _ONE SECOND TIMEOUT             ?
  CI200MS =  2;                        _200 MS TIMEOUT                 ?
VAR 
  CLASPKT : NKINCOM;                   _COMMAND PACKET(CONTROL)        ?
VALUE 
  CLASPKT = ($E00,0,$8A8B,0,0);        _INIT. CMD. PACKET FOR ISON,ISR ?
_***********************************************************************
*                               PTCTIM                                 *
*  GENERATE TIMER ENTRY FOR MODEM RESPONSE TIMEOUT                     *
*                                                                      *
***********************************************************************?
PROCEDURE PTCTIM (PSCI : M0SCTYP; PTIME : INTEGER); 
VAR 
  CTIMBUF : B0BUFPTR;                  _BUFFER POINTER FOR TIMER ENTRY ?
BEGIN 
  CTIMBUF := PBGET1BF (B0S8);          _GET BUFFER FOR TIMER ENTRY     ?
  WITH CTIMBUF' DO                     _SET UP TIMEOUT BUFFER          ?
  BEGIN 
    BFTREL         := TRUE;            _SET BUFFER RELEASE FLAG        ?
    BFTSCI         := PSCI;            _STATUS INDICATOR FOR RETURN    ?
    BFTWKCOD       := MMCLAS;          _WORKCODE FOR RETURN            ?
    BFTLINO.BDLINO := PTLINO;          _LINE NUMBER                    ?
    BFTWLIND       := MMEWLQ;          _EVENT WORKLIST QUEUE INDEX     ?
    BFTOVAL        := PTIME;           _TIMEOUT VALUE                  ?
    PBTOQUE (CTIMBUF);                 _CALL TIMEOUT ROUTINE           ?
  END;
END;    _END PTCTIM?
_?
BEGIN                                  _START PTCLAS                   ?
  WITH BWWLENTRY[MUX2].B0EWLQ DO       _STATUS WL ENTRY                ?
  BEGIN 
    PTCLAS := FALSE;                   _SET RETURN FOR NO TIP CONTROL  ?
    WITH NAPORT'[MMPORT] DO            _PORT TABLE                     ?
    CASE MMSCI OF                      _ACT ON STATUS INDICATOR FROM WL?
  
_                                      *** LINE INITIALIZATION ***     ?
    M0CLAON,M0RING, 
    M0DSR,M0NDSR, 
    M0NALL,M0ALL, 
    M0LUP,
    M0ENBL : PTCLAS := TRUE;           _ PASS TO LINIT IF RING INDICATR?
                                       _ ENABLED OR CLA STATUS ON      ?
                                            _DATA SET READY,           ?
                                            _ALL SIGNALS REPORT        ?
                                            _LINE UP                   ?
  
  
  
_                                      *** HARD ERRORS ***             ?
    M0HERR: 
10: 
    BEGIN 
      IF NOT MMLDSR                    _IF ERROR DUE TO DSR DROP       ?
      THEN
        IF NBLTYT[NALTYP,1].NBANSMOD   _SWITCHED OR DEDICATED LINE     ?
        THEN
          NRCODE := CEABDSR            _C.E. CODE FOR DSR LOSS         ?
        ELSE
      ELSE
        IF MMLILE                      _TEST FOR INPUT LOOP ERROR      ?
        THEN NRCODE := CEILE           _C.E. CODE FOR ILE              ?
        ELSE
          IF MMLOLE                    _TEST FOR OUTPUT LOOP ERROR     ?
          THEN NRCODE := CEOLE;        _C.E. CODE FOR OLE              ?
      MMWKCOD := MMHARDERR;            _WORKCODE FOR TIP               ?
      MMINOP  := CINOP;                _INOP CODE FOR TIP              ?
      PTCLAS  := TRUE;                 _RETURN SET FOR TIP CONTROL     ?
    END;
_?
_                                      *** SOFT OUTPUT ERROR ***       ?
    M0SOER: 
      NRCODE := CENCNA;                _C.E. CODE FOR NCNA             ?
_?
_                                      *** SOFT INPUT ERRORS           ?
    M0SIER: 
      BEGIN 
        IF NOT MMLDCD                  _TEST FOR DCD DROPPED ERROR     ?
        THEN NRCODE := CEABDCD         _SET UP C.E. CODE FOR NOT DCD   ?
        ELSE
          IF MMLDTO                    _TEST FOR DATA TRANSFER OVERRUN ?
          THEN NRCODE := CEDTO         _SET UP C.E. CODE FOR DTO       ?
          ELSE
            IF MMLFES                  _TEST FOR FRAMING ERROR STATUS  ?
            THEN
            BEGIN 
              PTCLAS  := TRUE;         _RETURN SET FOR TIP CONTROL     ?
              MMWKCOD := MMFES;        _CHANGE WORKCODE INDICATING FES ?
            END;
      END;
_?
_                                      *** BREAK  (FES) CONDITION  *** ?
    M0BREAK:  
      BEGIN 
        PTCLAS   := TRUE;              _RETURN SET FOR TIP CONTROL     ?
        MMWKCODE := MMBREAK;           _BREAK WORKCODE FOR TIP         ?
      END;
_?
_                                      *** START MODEM RESPONSE TIMEOUT?
    M0STRT: 
      BEGIN 
      PBTODEL (PTLINO);                _DELETE ANY TIMING ENTRIES      ?
      NAMTO  :=  FALSE;                _CLEAR TIMER ENTRY FLAG         ?
      IF NAMSI \ MSTIDL                _IF LINE IS OPERATIONAL         ?
      THEN
        BEGIN 
        IF DCD = FALSE                 _IF DCD IS DOWN                 ?
        THEN
          BEGIN 
          IF PB1BFAVAIL  (B0THTIM)     _IF BUFFER AVAILABLE            ?
          THEN
            BEGIN 
            NAMTO  :=  TRUE;           _SET FLAG FOR TIMING ENTRY      ?
            IF NBLTYT[NALTYP,1].NBANSMOD    _IF DEDICATED LINE         ?
            THEN
              PTCTIM (M0MRTO, NCMDTOTIM)    _TIME OUT IS 15 SECS       ?
            ELSE
              PTCTIM (M0MRTO, NCMSTOTIM);   _TIME OUT IS 300 MSECS     ?
            END _ IF PB1BFAVAIL ? 
          ELSE
            BEGIN 
            NAMSI  :=  MSTERR;         _SET MODEM STATE TO DISCARD     ?
            IF NBLTYT[NALTYP,1].NBANSMOD _IF DEDICATED LINE            ?
            THEN
              NRCODE  :=  CEMODMTO;    _C. E. ERROR CODE FOR MODEM TO  ?
            MMWKCOD  :=  MMHARDERR;    _DECLARE A HARD ERROR           ?
            MMINOP  :=  CINOP;         _LINE INOPERATIVE               ?
            PTCLASS  := TRUE           _PASS TO TIP                    ?
            END  _ ELSE IF PB1BFAVAIL ? 
          END  _ IF DCD = FALSE ? 
        END _  IF NAMSI \ MSTIDL ?
      END;
_?
_                                      *** CLA STATUS OVERFLOW ***     ?
    M0OVRF: 
      BEGIN 
        NRCODE  := CECLAOVF;           _C.E. CODE FOR STATUS OVERFLOW  ?
        MMWKCOD := MMHARDERR;          _WORKCODE FOR TIP               ?
        MMINOP  := CSTOP;              _INOP CODE FOR TIP              ?
        PTCLAS  := TRUE;               _RETURN SET FOR TIP CONTROL     ?
      END;
_?
_                                      *** MODEM RESPONSE TIMEOUT ***  ?
    M0MRTO: 
      BEGIN 
        PBTODEL  (PTLINO);             _DELETE ANY TIMER ENTRIES       ?
      IF NAMTO                         _IF TIMER RUNNING               ?
      THEN
      BEGIN 
        NAMTO := FALSE;                _RESET TIMEOUT IN PROGRESS      ?
        IF NAMSI \  MSTIDL             _IF OPERATIONAL                 ?
        THEN
          BEGIN 
          IF DCD = FALSE               _IF DCD IS NOT UP               ?
          THEN
            BEGIN 
            NAMSI  := MSTERR;          _SET MODEM STATE TO DISCARD     ?
            IF NBLTYT[NALTYP,1].NBANSMOD _IF DEDICATED LINE            ?
            THEN
              NRCODE  :=  CEMODMTO;    _C. E. ERROR CODE FOR MODEM TO  ?
            MMWKCOD  :=  MMHARDERR;    _DECLARE A HARD ERROR           ?
            MMINOP  :=  CINOP;         _LINE INOPERATIVE               ?
            PTCLASS  := TRUE           _PASS TO TIP                    ?
            END; _ IF DCD = FALSE ? 
          END; _ IF NAMSI \ MSTIDL ?
      END; _IF NAMTO? 
      END; _ M0MRTO ? 
_                                       *** SOFT HARDWARE ERROR ***    ?
    M0SHER: 
  
      BEGIN 
      IF CGLCBP'[MMPORT].BZTIPTYPE " N0LINIT _IF NOT LINE INITIALIZER  ?
      THEN
        GOTO 10;                       _PROCESS AS HARD ERROR          ?
      IF (NALTYP = N0LA) !             _IF HARDWIRED LINE, PROCESS AS  ?
         (NALTYP = N0L7) !             _A HARD ERROR WLE               ?
         (NALTYP = N0L2) !
         (NALTYP = N0L3)
      THEN
        GOTO 10;
      PTCLAS  := TRUE;                 _PASS TO PTLINIT                ?
      MMWKCOD := A0WK7;                _MODIFY WORK CODE FOR PTLINIT   ?
      END; _ CASE M0SHER ?
  
    END;   _END CASE MMSCI? 
_?
  END;  _END WITH BWWLENTRY?
END;  _END PTCLAS?
