          EJECT
*         CTEXT CTP$DFT CHECK PACKET STATUS.
*
*         THIS DECK DEFINES CODE WHICH PROCESSES THE VARIOUS
*         PHASES OF PACKET COMMUNICATION. THIS DECK SHOULD BE CALLED
*         IN THE MAIN NON RESIDENT OVERLAY OF DFT.
 CPS      SPACE  4,15
**        CPS - CHECK PACKET STATUS.
*
*         ENTRY  (PKTCW) = PACKET CONTROL WORD.
*                (CELCW) = CONSOLE LOGGING CONTROL WORD.
*
*         EXIT   *LTC* CALLED IF CONSOLE LOGGING REQUIRED/IN PROGRESS.
*                MRT LOGGING INITIATED IF REQUIRED AND NO LOGGING ACTIVE.
*                GENERAL RESPONSE PACKET RECEIVED IF AVAILABLE.
*                GENERAL PACKET SENT IF REQUESTED AND NO LOGGING ACTIVITY.
*                *CHECK-IN* PACKET SENT IF NO OTHER ACTIVITY AND FLAG SET.
*
*         CALLS  CRS, LPT, PFC, PKT, SCF, *LTC*.


          ROUTINE  CPS

          LDML   PKTCW       CHECK GENERAL PACKET STATUS
          SHN    21-17
          PJP    CPS2        IF NO RESPONSE PENDING
          SHN    21-16-21+17
          PJP    CPS0        IF NOT TIMED OUT
          CALL   LPT         LOG PACKET TIMEOUT
          LDM    PKTCW       CLEAR TIMEOUT FLAG
          STM    PKTCW
          LJM    CPS2        SEND PACKET DATA IF ANY

 CPS0     RJM    CRS         CHECK RESPONSE STATUS
          ZJP    CPS1        IF NO RESPONSE PACKET AVAILABLE

*         RECEIVE RESPONSE PACKET.

          LDM    PKTCW       CLEAR RESPONSE PENDING
          STM    PKTCW
          LDN    0           CLEAR TIMER CONTROL WORD
          STML   PKTIM
          LDN    40          REQUEST = RECEIVE PACKET
          STM    CALB+0
          LDC    TOIP        BUFFER ADDRESS = *2AP* BUFFER (AT 2000)
          STML   CALB+2
          LDN    MX          GET CHANNEL 15 INTERLOCK
          RJM    SCF
          CALL   PFC         CALL *2AP*
          CCF    *,MX        RELEASE CHANNEL 15 INTERLOCK
          LDM    CALB+1      CHECK FOR ERRORS
          ZJP    CPSX        IF NO ERROR DETECTED
          LDN    BC
          RJM    CLR
          LDN    0
          STD    ET
          SETDAN (EPCO,DAIS)
          SETFLG (BC.FL)
          LDML   CALB+1
          STML   CPSA
          LDN    NRSP
          RJM    IDA
          CRDL   W0
          LRD    W1
          LDDL   W0
          ADC    RR+NRSBL+1
          CWML   CPSA,ON
          LDN    NRSBL
          STML   LLOG
          LDN    4
          STD    ET
          LDN    1
          STM    RTP1
          CALL   LOG
 CPS1     LJM    CPSX        RETURN

*         DETERMINE IF BACKGROUND PACKETS ARE ALLOWED.

 CPS2     LDML   CELCW       CHECK CONSOLE LOGGING STATUS
          NJN    CPS2.1      IF LOGGING OUTSTANDING/IN PROGRESS
          LDM    MRTU        CHECK IF MRT UPDATE NEEDS TO BE LOGGED
          ZJN    CPS3        IF MRT HAS NOT BEEN UPDATED
          LDN    77          INITIATE MRT TRANSFER
          STM    CELCW
 CPS2.1   CALL   LTC         LOG TO CONSOLE
          UJN    CPS1        RETURN

*         CHECK FOR GENERAL PACKET REQUESTS.

 CPS3     LDM    PKTCW
          ZJN    CPS4        IF NO REQUEST PRESENT
          STML   RTP1
          CALL   PKT         SEND REQUESTED PACKET
          UJN    CPS5        SET RESPONSE PENDING AND RETURN

*         SEND CHECK-IN PACKET IF TIME HAS ELAPSED.

 CPS4     LDM    CPSA        CHECK ELAPSED TIME FLAG
          ZJN    CPS1        IF NOT TIME TO SEND CHECK-IN PACKET
          LDN    0           CLEAR FLAG
          STM    CPSA
*         LDN    PKRCI       SEND CHECK-IN PACKET
*         STML   RTP1
*         CALL   PKT
          LJM    CPSX        **** DISABLE CHECK-IN PACKETS FOR NOS/VE 1.3.1 ****

*         UPDATE *PKTCW* AND RETURN.

 CPS5     LDC    PKWRP       CLEAR REQUEST AND SET RESPONSE PENDING
          STML   PKTCW
          LJM    CPSX        RETURN

 CPSA     BSSZ   4
 MPR      SPACE  4,10
**        MPR - MAKE PACKET REQUEST.
*
*         ENTRY  (RTP1) = REQUEST.
*                (PKTCW) = PACKET CONTROL WORD.
*
*         EXIT   (PKTCW) UPDATED IF NO REQUEST PREVIOUSLY PRESENT.
*                (RTP1) = 0, IF REQUEST QUEUED.
*                    = PREVIOUS REQUEST, IF NEW REQUEST NOT QUEUED.


          ROUTINE  MPR

          LDM    PKTCW       CHECK PREVIOUS REQUEST (IGNORE RESPONSE PENDING)
          NJN    MPR1        IF PREVIOUS REQUEST PRESENT
          LDM    RTP1        MERGE REQUEST WITH RESPONSE PENDING STATUS IF ANY
          RAML   PKTCW
          LDN    0           SET REQUEST RECORDED
 MPR1     STML   RTP1
 MPR2     LJM    MPRX        RETURN
 PKT      SPACE  4,15
**        PKT - PROCESS CONSOLE PACKETS VIA *2AP*.
*
*         ENTRY  (RTP1) = 2/0,1/R,1/S,2/C,10/CODE.
*                R = 1, IF CALLER WILL HANDLE ERRORS (*PKT* TO RETURN).
*                S = 1, IF BUFFER AND CALL BLOCK PREPARED.
*                C = OFFSET TO PACKET CONTROL WORD FOR TIMING (2).
*                CODE = *PKFDR* SUBCODE (SEE *CTI$PACKET_DEFINITIONS*).
*                     = *PKRLE* TO LOG INFORMATION TO THE CONSOLE.
*
*         USES   T1, T2, T3.
*
*         CALLS  SCF.


          ROUTINE  PKT

          LDML   RTP1        CALL PARAMETERS
          LPC    1777
          STD    T1          SAVE SUBCODE
          LDML   RTP1
          SHN    -14
          LPN    1
          STD    T2          SAVE SETUP FLAG

*         STORE PARAMETERS IN PACKET BUFFER AND *2AP* CALL BLOCK.

          LDC    140         REQUEST = SEND PACKET
          STM    CALB+0
          LDML   TINB        SET BUFFER ADDRESS (*TOIP* OR *TOIPS0*)
          STML   CALB+2
          STDL   T3
          LDM    PPNO        SOURCE ID = *DFT* PP NUMBER
          LPC    0#FF
          SHN    10
          STIL   T3
          LDD    T2
          NJP    PKT1        IF BUFFER AND CALL BLOCK ALREADY PREPARED
          LDD    T1          STORE *PKFDR* SUBCODE IN PACKET BUFFER
          SHN    10
          STML   1,T3
          LDN    PKFDR       FUNCTION = DFT REQUEST
          STM    CALB+1
          LDN    4           DEFAULT LENGTH = 4 (SOURCE ID, FUNCTION, CODE, PAD)
          STM    CALB+3

*         SEND PACKET TO CONSOLE VIA *2AP* AND CHECK FOR ERRORS.

 PKT1     LDN    MX          GET CHANNEL 15 INTERLOCK
          RJM    SCF
          FNC    MXPT,MX     SELECT PORT
          AJM    *,MX
          CALL   PFC         CALL *2AP*
          FNC    MXDM,MX     DESELECT MUX
          AJM    *,MX
          CCF    *,MX        RELEASE CHANNEL 15 INTERLOCK
          LDM    RTP1        ADD TIMEOUT CONTROL INFORMATION
          LPC    0#C00
          SHN    2
          STML   PKTIM
          LDML   RTP1
          SHN    -14
          LPN    2
          NJN    PKT2        IF CALLER WILL PROCESS ERRORS
          CALL   CER         CHECK ERROR RESPONSE
 PKT2     LDN    0
          STM    RTP1
          LJM    PKTX        RETURN
          SPACE  4,10
*         END    CTP$DFT CHECK PACKET STATUS
