*COMDECK NTSTEST
_$J+  PAGE EJECT? 
  
  
  
  
_                     NN      NN  TTTTTTTTTT    SSSSSS
                      NNN     NN  TTTTTTTTTT   SSSSSSSS 
                      NNNN    NN      TT      SS      SS
                      NN NN   NN      TT      SS
                      NN  NN  NN      TT      SSSSSSSSS 
                      NN   NN NN      TT       SSSSSSSSS
                      NN    NNNN      TT              SS
                      NN     NNN      TT      SS      SS
                      NN      NN      TT       SSSSSSSS 
                      NN      NN      TT        SSSSSS
  
  
                      XX      XX  PPPPPPPP    TTTTTTTTTT
                       XX    XX   PPPPPPPPP   TTTTTTTTTT
                        XX  XX    PP      PP      TT
                         XXXX     PP      PP      TT
                          XX      PPPPPPPPP       TT
                          XX      PPPPPPPP        TT
                         XXXX     PP              TT
                        XX  XX    PP              TT
                       XX    XX   PP              TT
                      XX      XX  PP              TT
  
  
                      TTTTTTTTTT    IIIIII    PPPPPPPP
                      TTTTTTTTTT    IIIIII    PPPPPPPPP 
                          TT          II      PP      PP
                          TT          II      PP      PP
                          TT          II      PPPPPPPPP 
                          TT          II      PPPPPPPP
                          TT          II      PP
                          TT          II      PP
                          TT        IIIIII    PP
                          TT        IIIIII    PP
? 
_$J+  PAGE EJECT? 
  
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*                         PNTSXPTIP                                   * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
_$R-,G-,I-    NON-RECURSIVE 
              INTERRUPTABLE?
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*         N E T W O R K  T E R M I N A L  S T I M U L A T O R         * 
*                                                                     * 
*                         I N T E R F A C E                           * 
*                                                                     * 
*                   T R A N S P A R E N T  T I P                      * 
*                                                                     * 
*    THE NTS TRANSPARENT TIP IS USED TO TEST ANY OF THE SYNCHRONOUS   * 
*    PROTOCOL TIP.  THE NTS TIP DRIVES THE REAL SYNCHRONUOS LINE.     * 
*    THIS TIP INPUTS OR OUTPUTS THE DATA THRU THE ITS SYNCHRONOUS CLA * 
*    FROM OR TO THE CLA OF THE TESTING TIP.                           * 
*                                                                     * 
*    THE BASIC TEST CONFIGURATION TO TEST THE TIP USING THE NTS TIP   * 
*    IS THE FOLLOWING.                                                * 
*                                                                     * 
*            I                                                        * 
*      CYBER I         I---------I         I-----I                    * 
*      HOST  I <-----> I TESTING I ******* I CLA I                    * 
*            I         I   TIP   I         I-----I                    * 
*            I         I---------I            .                       * 
*            I                                .                       * 
*            I                                                        * 
*            I                                .                       * 
*            I         I---------I            .                       * 
*      NTS   I         I NTS XPT I         I-----I                    * 
*      HOST  I <-----> I   TIP   I ******* I CLA I                    * 
*            I         I---------I         I-----I                    * 
*            I                                                        * 
*                                                                     * 
*      NOTE : THE CYBER HOST REFERS TO ANY APPLICATION PROGRAM        * 
*             WHICH CAN TALK TO THE TESTING TIP.  FOR EXAMPLE: IAF,   * 
*             RBF, NTS, ETC...                                        * 
*                                                                     * 
*                                                                     * 
*    THE FUNCTION OF THE TRANSPARENT TIP                              * 
*    -----------------------------------                              * 
*    THE NTS HOST ACTS AS THE USER TERMINAL ON THE NTS XPT TIP SIDE.  * 
*    INORDER TO GIVE FULL CONTROL OF TESTING PROCESS TO THE NTS       * 
*    HOST, THE NTS TIP WILL NOT GENERATE OR LOOK AT ANY TYPE OF INPUT * 
*    OR OUTPUT DATA.  THE NTS TIP ASSUMES THE DOWNLINE DATA           * 
*    WILL ALWAYS BE IN TRANSPARENT MODE AND SENDS ONLY UPLINE         * 
*    TRANSPARENT DATA TO THE NTS HOST.                                * 
*                                                                     * 
*    THE CONTENCE OF THE USER DATA AND THE NON-USER DATA (TERMINAL    * 
*    DATA) ARE DEFINED AS THE NTS SCRIPT IN THE NTS APPLICATION       * 
*    PROGRAM.                                                         * 
*                                                                     * 
*                                                                     * 
*    NTS TRANSPARENT TIP PROGRAM STRACTURE                            * 
*    -------------------------------------                            * 
*    1)  WORKLIST HANDLING   - MAIN PROGRAM (PNTSXPTIP)               * 
*    2)  OUTPUT PROCESSING   - DOWNLINE DATA HANDLING (PNTSDLH)       * 
*                            - OUTPUT DATA  (PNTSXMIT)                * 
*    3)  INPUT PROCESSING    - UPLINE DATA HANDLING (PNTSULH)         * 
*                                                                     * 
*                                                                     * 
*    ESTABLISHING CONNECTION OF THE NTS XPT TIP                       * 
*    ------------------------------------------                       * 
*    THE NTS TRANSPARENT TIP MUST DEFINED AS AN AUTO LOG-IN TERMINAL  * 
*    IN THE NDL TERMINAL DEFINITION.  THE TIP WILL DISCARD THE FIRST  * 
*    DOWNLINE DATA WHICH IS THE DOWNLINE AUTO LOG-IN BANNER.  THE TIP * 
*    USES THE WORKLIST INDEX OF [B0XPTNTS] AND THE USER2 TIP TYPE.    * 
*    THE NTS TIP USES THE LCB AND TCB ACTION TABLES WHICH             * 
*    BELONG TO THE TESTING TIP.  IF TWO NPUS ARE USED TO TEST THE TIP * 
*    (THE TESTING TIP IN ONE NPU AND THE NTS TIP ON THE OTHER), THE   * 
*    USER MUST PROVIDE THE LCB AND TCB ACTION TABLES OF TESTING TIP   * 
*    (DEFINITION IN THE CCP GLOBAL AND MPEDIT STATEMENTS) IN THE NTS  * 
*    TIP SIDE NPU.                                                    * 
*                                                                     * 
*                                                                     * 
*    WORKLIST PROCESSING                                              * 
*    -------------------                                              * 
*    A0SMEN,    RECEIVING WORKLISTS FROM THE SERVICE MODULE.          * 
*    A0SMDA,    SENDS THE WORKLIST BACK TO THE SVM WITH THE APPROPRI- * 
*    A0SMRCTCB: ATE RESPONSE.                                         * 
*                                                                     * 
*    A0QUEOUT : SEND DATA TO THE TESTING TIP.                         * 
*                                                                     * 
*    MMOBUX   : INDICATION THAT THE OUTPUT BUFFER HAS BEEN TRANSMITTED* 
*                                                                     * 
*    TIP WORKCODE :                                                   * 
*               ANY WORKCODES WHICH ARE GREATER THAN OR EQUAL TO      * 
*               A0WK21 ($21) WILL BE SENT TO THE NTS HOST.            * 
*               THE NTS TIP WILL CHECK FOR THE BUFFER POINTER         * 
*               [NADATAPTR] IN THE INCOMING WORKLIST ENTRY TO         * 
*               DETERMINE WHETHER TO SEND THE INPUT DATA WITH         * 
*               THE INCOMING WORKCODE.                                * 
*                                                                     * 
*                                                                     * 
*    CODE DEPENDENCY:                                                 * 
*    ----------------                                                 * 
*           THE NTS TRANSPARENT TIP USES THE LCB AND TCB ACTION       * 
*           TABLES AND THE SECOND PHASE OUTPUT TEXT PROCESSING        * 
*           ROUTINE (THE BSC LEVEL 2) TO CALCULATE THE VALUE          * 
*           OF THE CRC.                                               * 
*                                                                     * 
*                                                                     * 
*    NOTE:  THE NTS TRANSPARENT TIP IS USED TO TEST THE BISYNC TIP    * 
*           LEVEL 2 AND POSSIBLY THE BISYNC TIP SYSTEM TEST FOR       * 
*           THE I AND E (CONFIGURATION 3).                            * 
*                                                                     * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PNTSXPTIP;
  
CONST 
  
_ 
* * * *  NTS TRANSPARENT TIP WORKCODE DEFINITION
? 
_     MMOBUX                                 OUTPUT BUFFER TRANSMITTED ?
  
_ 
* * * *  THE TERMINAL STATUS DEFINITION 
? 
      N1IDLE     = 0;                       _INITIAL STATE             ?
      N1ACTIVE   = 1;                       _CONNECTION ACTIVE         ?
      N1DALNREQ  = 2;                       _DISABLE LINE REQUESTED    ?
      N1DLTMLREQ = 3;                       _DELETE TML REQUESTED      ?
      N1HARDERR  = 4;                       _HARE  ERROR NOTIFIED      ?
_ 
* * * *  DATA POSITION IN BUFFER
? 
  
      NTSTEST    = $D;                      _CONTROL BYTE FOR TEST     ?
                                            _ SET UP                   ?
        NTSCRC   = 1;                       _  CRC NEEDS TO BE         ?
                                            _   CALCLATED              ?
        NTSNOCRC = 2;                       _  NO CRC REQUIRED         ?
  
      NTSDATA    = $E;                      _START OF DATA             ?
  
_ 
* * * *  INITIAL STATE INDEX FOR INPUT
? 
      NTSINTP    = 4;                       _THE INITIAL INPUT STATE   ?
  
  
  
TYPE
  
*CALL NTSXTYP1
  
VAR 
  
      NTSOUTWLE  : N0WLE;                   _OUTGOING WORKLIST ENTRY   ?
      NTSINWLE   : N0WLE;                   _INCOMING WORKLIST ENTRY   ?
      NTSLCB     : BZLCBP;                  _LCB ADDRESS               ?
      NTSTCB     : B0BUFPTR;                _TCB ADDRESS               ?
  
*CALL FCCRC 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*               RELEASE THE OUTSTANDING DATA BUFFER                    *
*                                                                     * 
*                           PNTSRELBUF                                * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
** OVERVIEW:                                                          * 
*              RELEASE THE DATA BUFFERS WHICH THE TIP                 * 
*              CURRENTLY OWNS                                         * 
*                                                                     * 
** INPUT:                                                             * 
*              BSFMSGQ   - THE FIRST MESSAGE POINTER                  * 
*              BSNFRST   - THE CURRENT BLOCK POINTER                  * 
*                                                                     * 
** OUTPUT:                                                            * 
*              NONE                                                   * 
*                                                                     * 
** CALLING PROGRAM:                                                   * 
*                                                                     * 
*              MAIN PROGRAM (CASE OF TERMINAL STATUS IN MMOBUX)       * 
*                                                                     * 
** EXTERNAL SUBROUTINES:                                              * 
*                                                                     * 
*              PBRELZRO  - RELEASE THE CHAIN OF DATA BUFFERS          * 
*                                                                     * 
** NOTE:                                                              * 
*                                                                     * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PNTSRELBUF; 
  
VAR 
      RELBUF    : B0BUFPTR;                 _MESSAGE BUFFER POINTER TO ?
                                            _ BE RELEASED              ?
  
BEGIN 
  
WITH  NTSTCB'.BSTCB  DO 
  BEGIN 
  
  WHILE  BSFMSGQ " NIL  DO                  _RELEASE OUTSTANDING       ?
    BEGIN                                   _ MESSAGE BUFFERS          ?
    RELBUF  := BSFMSGQ;                     _MESSAGE POINTER           ?
    BSFMSGQ := BSFMSGQ'.BCCHAINS[QCHN];     _NEXT MESSAGE BUFFER PTR   ?
    PBRELZRO (RELBUF, BEDBSIZE);
    END;  _ WHILE BSFMSGQ " NIL ? 
  
  PBRELZRO (BSNFRST, BEDBSIZE);             _RELEASE CURRENT BLOCK     ?
  
  END;  _ WITH NTSTCB ? 
END;  _ PROCEDURE PNTSRELBUF                                           ?
_$J+  PAGE EJECT? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*          SENDS THE COMMAND PACKET TO THE COMMAND DRIVER             * 
*                                                                     * 
*                           PNTSCOIN                                  * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
** OVERVIEW:                                                          * 
*              LAUNCH THE OUTPUT                                      * 
*                                                                     * 
** INPUT:                                                             * 
*              COMMAND   - COMMAND TO THE COMMAND DRIVER              * 
*                          THREE COMMANDS ARE USED                    * 
*                           1) NKINOUT : INPUT AFTER OUTPUT           * 
*                           2) NKINPT  : INPUT READY                  * 
*                           3) NKENDIN : NO MORE INPUT                * 
*              OUTPUT    - OUTPUT BUFFER POINTER                      * 
*                          (IT ONLY REQUIRS FOR CMD TYPE OF NKINOUT)  * 
*                                                                     * 
** OUTPUT:                                                            * 
*              NTSCMDPKT - COMMAND PACKET                             * 
*                                                                     * 
** CALLING PROGRAM:                                                   * 
*                                                                     * 
*              PNTSXMIT  - TRANSMIT THE OUTPUT                        * 
*              PNTSVM    - SERVICE MODULE RESPONSE HANDLER            * 
*                                                                     * 
** EXTERNAL SUBROUTINES:                                              * 
*                                                                     * 
*              PBCOIN    - COMMAND DRIVER                             * 
*                                                                     * 
** NOTE:                                                              * 
*                                                                     * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PNTSCOIN (COMMAND : B08BITS;  OUTPUT : B0BUFPTR); 
  
VAR 
      NTSCMDPKT : NKINCOM;                  _INPUT TO THE MUX COMMAND  ?
                                            _ DRIVER                   ?
BEGIN 
  
WITH  NTSCMDPKT  DO 
  BEGIN 
  NKCMD   := COMMAND;                       _ * INPUT AFTER OUTPUT     ?
                                            _ * INPUT READY            ?
                                            _ * NO MORE INPUT          ?
  NKOBP   := OUTPUT;                        _OUTPUT BUFFER POINTER     ?
  NKLINO  := NTSLCB'.BZLINO.BDLINO;         _LINE NUMBER               ?
  
  IF COMMAND " NKENDIN                      _COMMAND IS TO ACCEPT INPUT?
  THEN
    BEGIN 
    NKISTAI := NTSINTP;                     _INPUT STATE INDEX = $04   ?
    NKISPTA := NTSINPST;                    _INPUT STATE POINTER TABLE ?
                                            _ ADDRESS                  ?
    END;
  
  PBCOIN (NTSCMDPKT);                       _ISSUE THE COMMAND         ?
  
  END;  _ WITH NTSCMDPKT ?
END;  _ PROCEDURE PNTSCOIN                                             ?
_$J+  PAGE EJECT? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*                     TRANSMIT THE OUTPUT                             * 
*                                                                     * 
*                           PNTSXMIT                                  * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
** OVERVIEW:                                                          * 
*              SET UP THE OUTPUT DATA FOR THE TESTING TIP.            * 
*              TWO TYPES OF DATA WILL BE GENERATED:                   * 
*              1) OUTPUT DATA WITH CRC CALCULATED                     * 
*              2) OUTPUT DATA WITHOUT CRC                             * 
*                                                                     * 
** INPUT:                                                             * 
*              BSFMSGQ   - THE FIRST MESSAGE IN THE MESSAGE QUEUE     * 
*                                                                     * 
** OUTPUT:                                                            * 
*              BSOUTBUF  - THE OUTPUT DATA BUFFER POINTER             * 
*                                                                     * 
** CALLING PROGRAM:                                                   * 
*                                                                     * 
*              MAIN PROGRAM (CASE OF MMOBUX)                          * 
*              PNTSDLH   -  DOWNLINE HANDLER                          * 
*                                                                     * 
** EXTERNAL SUBROUTINES:                                              * 
*                                                                     * 
*              PTS2OTEXT - CALCULATE CRC AND STORE THE VALUE OF THE   * 
*                          CRC INTO THE OUTPUT BUFFER                 * 
*              PNTSCOIN  - ISSUE THE COMMAND WITH/WITHOUT THE         * 
*                          OUTPUT BUFFER                              * 
*                                                                     * 
** NOTE:                                                              * 
*                                                                     * 
*           1) CALLING THE BSC TIP ROUTINE                            * 
*              THE BSC TIP ROUTINE [PTS2OTEXT] IS CALLED FROM THIS    * 
*              PROGRAM TO DO THE CALCULATION OF CRC.                  * 
*                                                                     * 
*                                                                     * 
*           2) THE FORMAT OF THE DOWNLINE DATA.                       * 
*                          I          I          I                    * 
*                          I----------I----------I                    * 
*                 WORD 04  I    DN    I    SN    I                    * 
*                          I----------I----------I                    * 
*                 WORD 05  I    CN    I   BTPT   I                    * 
*                          I----------I----------I                    * 
*                 WORD 06  I    DBC   I CTL BYTE I ---> BSCTLBYTE     * 
*                          I----------I----------I                    * 
*                 WORD 07  I          I          I                    * 
*                 WORD 08  I      DOWNLINE       I                    * 
*                 WORD 09  I                     I                    * 
*                 WORD 0A  I        DATA         I                    * 
*                          I          .          I                    * 
*                          I          .          I                    * 
*                          I          .          I                    * 
*                          I          .          I                    * 
*                          I          .          I                    * 
*                          I----------I----------I                    * 
*                 WORD 3F  I     BUFFER CHAIN    I                    * 
*                          I---------------------I                    * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PNTSXMIT; 
  
BEGIN 
  
WITH  NTSTCB'.BSTCB  DO 
  BEGIN 
_ 
* * * *  GET THE FIRST MESSAGE FROM THE MESSAGE CHAIN 
* * * *  AND UPDATE THE MESSAGE CHAIN POINTER 
? 
  BSOUTBF := BSFMSGQ;                       _COPY MESSAGE ADDRESS ON TO?
                                            _ ANOTHER FIELD            ?
  BSFMSGQ := BSFMSGQ'.BCCHAINS[QCHN];       _UPDATE MESSAGE QUEUE PTR  ?
  
  IF BSFMSGQ = NIL                          _NO MORE OUTSTANDING       ?
  THEN                                      _ MESSAGE LEFT IN QUE CHAIN?
    BSLMSGQ := NIL;                         _CLEAR THE LAST MESSAGE PTR?
  
_ 
* * * *  CHECKS FOR THE NTS TESTING CONTROL BYTE [BSCTLBYTE]
           BSCTLBYTE = 1  : TEXT PROCESS AND CALCULATE CRC FOR
                            THE TRANSMITTING DATA.
                     = 2  : DOSE NOT NEED TO CALCULATE CRC
                            (IT DOES NOT GO THRU TEXT PROCESS)
? 
  BSOUTBUF'.BFFCD := $10;                   _RESET BUFFER FCD          ?
  BSCTLBYTE       := ORD(BSOUTBUF'.BFDATAC[NTSTEST]); 
                                            _EXTRACT NTS TESTING       ?
                                            _ CONTROL BYTE             ?
_ 
* * * *  CHECK FOR THE CONTROL BYTE 
? 
  IF BSCTLBYTE = NTSCRC                     _ TOO BAD IT REQUIRS TO    ?
  THEN                                      _ CALCULATE CRC FOR DATA   ?
    PTS2OTEXT (BSOUTBUF); 
  
_ 
* * * *  READY TO LAUNCH THE OUTPUT                      B A N Z A I
? 
  PNTSCOIN (NKINOUT, BSOUTBUF); 
  
  END;  _ WITH NTSTCB ? 
END;  _ PROCEDURE PNTSXMIT                                             ?
_$J+  PAGE EJECT? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*                 SENDS UPLINE DATA TO NTS HOST                       * 
*                                                                     * 
*                           PNTSULH                                   * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
** OVERVIEW:                                                          * 
*              SENDS THE INPUT DATA TO THE NTS HOST.  THE TRANSPARENT * 
*              FLAG WILL BE SET FOR ALL UPLINE DATA.  NO ACTION IS    * 
*              TAKEN ON THE RESPONSE FROM UPLINE TIP SERVICES (ULTS). * 
*                                                                     * 
** INPUT:                                                             * 
*              TEXT PROCESSED UPLINE DATA.                            * 
*                          NADATAPTR FROM INCOMING WORKLIST           * 
*                          FROM INPUT STATE PROGRAM.                  * 
*              BSFLGWRD  - ULTS FLAG WORD                             * 
*              BSINPBUF  - UPLINE DATA POINTER                        * 
*                                                                     * 
** OUTPUT:                                                            * 
*              BSINPBUF  - UPLINE DATA TO NTS HOST VIA THE ULTS       * 
*              BSFLGWRD  - FLAG WORD TO THE ULTS                      * 
*                                                                     * 
** CALLING PROGRAM:                                                   * 
*                                                                     * 
*              MAIN PROGRAM                                           * 
*                                                                     * 
** EXTERNAL SUBROUTINES:                                              * 
*                                                                     * 
*              PBULTS    - UPLINE TIP SERVICE                         * 
*              PBRELZRO  - RELEASE THE CHAIN OF DATA BUFFERS          * 
*              PBGET1BF  - GET A DATA BUFFER                          * 
*                                                                     * 
** NOTE:                                                              * 
*                                                                     * 
*                                                                     * 
*              TWO TYPES OF UPLINE DATA WOLL BE GENERATED.            * 
*                                                                     * 
*              1)  UPLINE BLOCK WITH THE WORKCODE ONLY                * 
*                                                                     * 
*                          I          I          I                    * 
*                          I----------I----------I                    * 
*                 WORD 04  I    DN    I    SN    I                    * 
*                          I----------I----------I                    * 
*                 WORD 05  I    CN    I   BTPT   I                    * 
*                          I----------I----------I                    * 
*                          I          I INCOMING I                    * 
*                 WORD 06  I    DBC   I WORKCODE I                    * 
*                          I----------I----------I                    * 
*                 WORD 07  I          I          I                    * 
*                 WORD 08  I                     I                    * 
*                          I         NO          I                    * 
*                          I                     I                    * 
*                          I        DATA         I                    * 
*                          I                     I                    * 
*                          I          .          I                    * 
*                          I          .          I                    * 
*                          I          .          I                    * 
*                          I----------I----------I                    * 
*                 WORD 3F  I     BUFFER CHAIN    I                    * 
*                          I---------------------I                    * 
*                                                                     * 
*                                                                     * 
*                                                                     * 
*              2)  UPLINE BLOCK WITH WORKCODE AND DATA                * 
*                                                                     * 
*                          I          I          I                    * 
*                          I----------I----------I                    * 
*                 WORD 04  I    DN    I    SN    I                    * 
*                          I----------I----------I                    * 
*                 WORD 05  I    CN    I   BTPT   I                    * 
*                          I----------I----------I                    * 
*                          I          I INCOMING I                    * 
*                 WORD 06  I    DBC   I WORKCODE I                    * 
*                          I----------I----------I                    * 
*                 WORD 07  I          I          I                    * 
*                 WORD 08  I                     I                    * 
*                          I        DATA         I                    * 
*                          I                     I                    * 
*                          I        FROM         I                    * 
*                          I                     I                    * 
*                          I       TESTING       I                    * 
*                          I                     I                    * 
*                          I         TIP         I                    * 
*                          I          .          I                    * 
*                          I          .          I                    * 
*                          I          .          I                    * 
*                          I----------I----------I                    * 
*                 WORD 3F  I     BUFFER CHAIN    I  >..               * 
*                          I---------------------I     .              * 
*                                                      .              * 
*                                                     .               * 
*                       .......<..............<.......                * 
*                     .                                               * 
*                     .                                               * 
*                      .                                              * 
*                       >  I----------I----------I                    * 
*                 WORD 00  I   LCD    I   FCD    I                    * 
*                          I----------I----------I                    * 
*                 WORD 01  I          I          I                    * 
*                          I----------I----------I                    * 
*                 WORD 02  I          I          I                    * 
*                          I----------I----------I                    * 
*                          I          I          I                    * 
*                          I----------I----------I                    * 
*                          I          I          I                    * 
*                          I                     I                    * 
*                          I          .          I                    * 
*                          I          .          I                    * 
*                          I        DATA         I                    * 
*                          I          .          I                    * 
*                          I          .          I                    * 
*                          I----------I----------I                    * 
*                 WORD 3F  I     BUFFER CHAIN    I                    * 
*                          I---------------------I                    * 
*                                                                     * 
*                                                                     * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PNTSULH;
  
CONST 
      WORKCD  = $D;                         _LOCATION OF THE RECEIVED  ?
                                            _ WORKCODE TO BE STORED    ?
BEGIN 
  
WITH  NTSINWLE, 
      NTSTCB'.BSTCB  DO 
  BEGIN 
  
  BSINPBUF := PBGET1BF (BEDBSIZE);          _UPLINE DATA TO ULTS       ?
  
  WITH  BSINPBUF'  DO 
    BEGIN 
  
    BFDATAC[WORKCD] := CHR(NAWC);           _STORE INCOMING WORKCODE   ?
    BFFCD           := $C;                  _SET BUFFER FCD AND LCD    ?
    BFLCD           := WORKCD;
    BFXPT           := TRUE;                _DATA IS ALWAYS IN THE     ?
                                            _ TRANSPARENT MODE         ?
  
    IF (NADATAPTR " NIL)  &                 _DATA TO BE SENT UP        ?
       (NAWC      " A0HARDERR)              _ AND NOT HARD ERROR       ?
    THEN
      BEGIN 
      BIINT[8] := BIINT[2]; 
      BFLCD    := $F; 
      BCCHAINS[DBUFLENGTH] := NADATAPTR;    _CHAIN THE INCOMING DATA   ?
      END 
    ELSE
      BCCHAINS[DBUFLENGTH] := NIL;          _ NO DATA WORKCODE ONLY    ?
  
    END;  _ WITH BSINPBUF ? 
                                            _ TRANSPARENT MODE         ?
  
  WITH  BSFLGWRD  DO
    BEGIN 
    KTWORD   := 0;                          _CLEAR BIP FLAG WORD       ?
    KTBLKT   := HTMSG;                      _MSG TYPE BLOCK            ?
    KTCKSPL  := TRUE;                       _CHECK FOR SPECIAL         ?
    KTIGNRCN := FALSE;                      _IGNORE CANCEL             ?
    KTSEND   := TRUE;                       _SEND IT TO HOST           ?
    END;  _ WITH BSFLGWRD ? 
  
  PBULTS (NTSTCB);                          _SEND DATA TO UPLINE TIP   ?
                                            _ SERVICE                  ?
  IF BSINPBUF " NIL                         _RESPONSE DATA FROM BIP    ?
  THEN
    BEGIN 
    PBRELZRO (BSINPBUF, BEDBSIZE);
    BSINPBUF := NIL;
    END;
  END;  _ WITH NYSINWLE AND NTSTCB ?
END;  _ PROCEDURE PNTSULH                                              ?
_$J+  PAGE EJECT? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*                  GET DOWNLINE NETWORK BLOCK                         * 
*                                                                     * 
*                           PNTSDLH                                   * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
** OVERVIEW:                                                          * 
*              THIS PROGRAM KEEPS ON DEQUEUEING THE DOWNLINE NETWORK  * 
*              BLOCK UNTIL THE OUTPUT QUEUE POINTER [BSQPTR] IS       * 
*              EMPTY.  THE PROGRAM CHECKS FOR THE LOG-IN FLAG         * 
*              [BSLOGIN] TO SEE WHETHER OR NOT THE DOWNLINE BANNER    * 
*              WAS SENT.  IT ASSUMES THAT THE FIRST DOWNLINE DATA ON  * 
*              THE CONNECTION IS THE AUTO LOG-IN BANNER AND THE DATA  * 
*              WILL BE DISCARDED.  ANY INTERNAL BLOCKS OR DOWNLINE    * 
*              COMMAND BLOCKS ARE ALSO DISCARDED.                     * 
*              RECEIPT OF THE MSG TYPE BLOCK TRIGGERS OUTPUT OF THE   * 
*              DOWNLINE NETWORK MESSAGE.                              * 
*                                                                     * 
** INPUT:                                                             * 
*              DLDATA      - DOWNLINE NETWORK BLOCK FROM THE BIP      * 
*                                                                     * 
** OUTPUT:                                                            * 
*              NONE                                                   * 
*                                                                     * 
** CALLING PROGRAM:                                                   * 
*                                                                     * 
*              MAIN PROGRAM (CASE OF A0QUEOUT)                        * 
*                                                                     * 
** EXTERNAL SUBROUTINES:                                              * 
*                                                                     * 
*              PBQUEMAINT  - DEQUEUE A DOWNLINE NETWORK BLOCK FROM    * 
*                            THE OUTPUT QUEUE IN THE TCB [BSQPTR].    * 
*              PBRELZRO    - RELEASE THE CAHIN OF DATA BUFFER.        * 
*                                                                     * 
*              PNTSXMIT    - TRANSMIT THE DOWNLINE MESSAGE (OUTPUT)   * 
*                                                                     * 
** NOTE:                                                              * 
*              THIS ROUTINE WILL NOT ACTION COMMAND BLOCKS.  IT       * 
*              ALSO QUEUES 'BLK' TYPE NETWORK BLOCKS IN THE TCB       * 
*              (BSNFRST, BSNLST) UNTIL IT RECEIVES THE 'MSG' TYPE     * 
*              NETWORK BLOCK.                                         * 
*              IF THE DOWNLINE NETWORK MESSAGE CANNOT BE SENT BECAUSE * 
*              THE NTS TIP HAS NOT RECEIVED THE OBT WORKCODE          * 
*              FROM THE LAST OUTPUT.  THE NETWORK MESSAGE WILL BE     * 
*              KEPT IN THE MSG QUEUE IN TCB [BSFMSGQ, BSLMSGQ] UNTIL  * 
*              RECEIPT OF THE OBT WORKLIST ENTRY.                     * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PNTSDLH;
  
VAR 
      DLDATA   : B0BUFPTR;                  _DOWNLINE NETWORK BLOCK    ?
      BLKTYP   : B0OVERLAY;                 _DOWNLINE BLOCK TYPE       ?
  
BEGIN 
  
DLDATA := NIL;                              _CLEAR DOWNLINE DATA PTR   ?
  
WITH  NTSTCB'.BSTCB  DO 
  BEGIN 
  
  IF NOT BSLOGIN                            _HAS NOT RECEIVED AN AUTO  ?
  THEN                                      _ LOG IN BANNER            ?
    BEGIN 
    PBQUEMAINT (NTSTCB, DLDATA, 0, 0);      _GET A DOWNLINE DATA BLOCK ?
    PBRELZRO (DLDATA, BEDBSIZE);            _RELEASE IT                ?
    BSTMLSTATE := N1ACTIVE;                 _CONNECTION ACTIVE         ?
    BSLOGIN    := TRUE;                     _LOGGED IN                 ?
    BSNFRST    := NIL;                      _CLEAR FIRST AND LAST      ?
    BSNLST     := NIL;                      _ OUTSTANDING DL DATA PTR  ?
    END;  _ NOT RECEIVED BANNER ? 
  
  BLKTYP.BAINT := 0;
  DLDATA       := NIL;
  
  WHILE  BSQPTR.BABUFPTR " NIL  DO          _TAKE ALL DOWNLINE BLOCKS  ?
    BEGIN                                   _ OUT OF DL DATA QUEUE     ?
  
    PBQUEMAINT (NTSTCB, DLDATA, 0, 0);      _GET A DOWNLINE DATA BLOCK ?
    BLKTYP.BARCHAR := DLDATA'.BFDATAC[BTPT];_GET BLOCK TYPE            ?
  
    IF (DLDATA'.BFINTBLK)      !            _INTERNAL DATA             ?
       (BLKTYP.BABLKTYPE.BTYPE = HTCMD)     _RECEIVED COMMAND BLOCK    ?
    THEN                                    _NO ACTION WILL BE MADE    ?
      PBRELZRO (DLDATA, BEDBSIZE)           _ ON COMMAND BLOCK         ?
    ELSE                                    _NOT DOWNLINE COMMAND BLK  ?
      BEGIN 
      DLDATA'.BFFCD := DATA;                _RESET BUFFER FCD TO THE   ?
                                            _ BEGINNING OF DATA        ?
_ 
* * * *  SET UP CURRENT NETWORK BLOCK POINTERS
? 
      IF BSNFRST = NIL                      _NO OUTSTANDING DATA       ?
      THEN
        BEGIN 
        BSNFRST := DLDATA;                  _INITIALIZE FIRST AND LAST ?
        BSNLST  := DLDATA;                  _ DATA POINTER             ?
        END   _ IF BSFBUF = NIL ? 
      ELSE                                  _THERE IS SOME DATA        ?
        BSNLST'.BCCHAINS[DBUFLENGTH]        _CHAIN TO THE END OF       ?
                               := DLDATA;   _ OUTSTANDING DL DATA      ?
  
      WHILE  BSNLST'.BCCHAINS               _LOOK FOR THE LAST BUFFER  ?
                     [DBUFLENGTH] " NIL  DO _ IN CHAIN                 ?
        BSNLST := BSNLST'.                  _GET NEXT BUFFER IN CHAIN  ?
                      BCCHAINS[DBUFLENGTH]; 
  
      IF BLKTYP.BABLKTYP.BTYPE = HTMSG      _MSG TYPE BLOCK FOUND      ?
      THEN
        BEGIN 
  
        BSNFRST'.BCCHAINS[QCHN] := NIL;     _CLEAR THE QUEUE CHAIN     ?
_ 
* * * *  CHECK FOR THE OUTSTANDING DOWNLINE MESSAGE QUEUE 
? 
        IF BSFMSGQ = NIL                    _NO OUTSTANDING MESSAGE    ?
        THEN                                _ IN MSG QUEUE             ?
          BEGIN 
          BSFMSGQ := BSNFRST;               _INITIALIZE INTERNAL QUEUE ?
          BSLMSGQ := BSNFRST;               _ POINTERS                 ?
          END   _ IF MSG QUE EMPTY ?
        ELSE                                _DOWNLINE MESSAGE ALREADY  ?
          BEGIN                             _ IN MSG QUEUE             ?
          BSLMSGQ'.                         _CHAIN THE NEW MESSAGE INTO?
             BCCHAINS[QCHN] := BSNFRST;     _ THE MSG QUEUE CHAIN      ?
          BSLMSGQ           := BSNFRST; 
          END;  _ ELSE MSG QUE NOT EMPTY ?
  
        BSNFRST := NIL; 
        BSNLST  := NIL; 
  
_ 
* * * *  DATA READY TO SEND, CHECK FOR THE OBT FLAG BEFORE OUTPUT 
? 
        IF (BSTMLSTATE = N1ACTIVE)  &       _CONNECTION ACTIVE         ?
           (NOT BSOBTWAIT)                  _NOT AWAITING FOR OBT      ?
        THEN                                _OK TO DO OUTPUT           ?
          PNTSXMIT; 
  
        END;  _ IF BTYPE = MSG BLOCK ?
  
      END;  _ ELSE NOT DOWNLINE COMMAND BLOCK AND NOT INTERNAL DATA ? 
  
    END;  _ WHILE BSQPTR " NIL ?
  END;  _ WITH  NTSTCB ?
END;  _ PROCEDURE PNTSDLH                                              ?
_$J+  PAGE EJECT? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*             CREATE WORKLIST ENTRY TO SERVICE MODULE                 * 
*                                                                     * 
*                            PNTSVM                                   * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
** OVERVIEW:                                                          * 
*              GENERATES THE WORKLIST ENTRY TO SERVICE MODULE         * 
*                                                                     * 
** INPUT:                                                             * 
*              WORKCODE TO SVM - C0LINOP  : LINE ENABLED              * 
*                                C0LNDA   : LINE DISABLED             * 
*                                C0RCTCB  : TCB RECONFIGURED          * 
*                                C0DLTCB  : TCB DELETED               * 
*                                C0LNINOP : LINE INOPERATIVE          * 
*                                                                     * 
*              LCB OR TCB ADDRESS FORM INCOMING WORKLIST ENTRY        * 
*                                                                     * 
** OUTPUT:                                                            * 
*              WORKLIST QUEUED TO THE SERVICE MODULE                  * 
*                                                                     * 
** CALLING PROGRAM:                                                   * 
*                                                                     * 
*              MAIN PROGRAM                                           * 
*                                                                     * 
** EXTERNAL SUBROUTINES:                                              * 
*                                                                     * 
*              PBLSPUT   : QUEUE A WORKLIST ENTRY                     * 
** NOTE:                                                              * 
*                                                                     * 
*                                                                     * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PNTSVM ( SVMWC : B06BITS ); 
  
BEGIN 
  
WITH  NTSOUTWLE  DO                         _OUT GOING WORKLIST ENTRY  ?
  BEGIN 
  
  NAWC := SVMWC;                            _SET WORKCODE              ?
  
  CASE  SVMWC  OF 
  
    C0LINOP:                                _LINE ENABLED              ?
      BEGIN 
      NALINO    := NTSINWLE.NALINO;         _WITH LINE NUMBER          ?
      NADATAPTR := NIL;                     _CLEAR UNNECESSARY FIELD   ?
      PNTSCOIN (NKINPT, NIL);               _READY TO ACCEPT INPUT     ?
      END;
  
    C0LNDA:                                 _LINE DISABLED             ?
      BEGIN 
      NALINO    := NTSINWLE.NALINO;         _WITH LINE NUMBER          ?
      NADATAPTR := NIL;                     _CLEAR UNNECESSARY FIELD   ?
  
      IF NTSLCB'.BZTCBPTR " NIL 
      THEN
        PNTSRELBUF; 
  
      PNTSCOIN (NKENDIN, NIL);              _NO MORE INPUT ACCEPTED    ?
      END;
  
    C0RCTCB:                                _TCB RECONFIGURED          ?
      BEGIN 
      NATCBPTR  := NTSINWLE.NADATAPTR;      _TCB ADDRESS               ?
      END;
  
    C0DLTCB:                                _TCB DELETED               ?
      BEGIN 
      NATCBPTR  := NTSINWLE.NADATAPTR;      _TCB ADDRESS               ?
      PNTSRELBUF; 
      END;
  
    C0LNINOP:                               _LINE INOPERATIVE          ?
      BEGIN 
      IF (NTSLCB'.BZCNFST = C7DAREQ)  !     _DISABLE OR DISCONNECT LINE?
         (NTSLCB'.BZCNFST = C7DCREQ)        _ REQUEST OUTSTANDING      ?
      THEN
       NAWC := C0LNDA;                      _CHANGE THE RESPONSE       ?
  
      NALINO    := NTSINWLE.NALINO;         _WITH LINE NUMBER          ?
      NADATAPTR := NIL;                     _CLEAR UNNECESSARY FIELD   ?
  
      IF NTSLCB'.BZTCBPTR " NIL             _TCB EXIST                 ?
      THEN
        BEGIN 
        PNTSRELBUF;                         _RELEASE OUTSTANDING BUFFER?
        IF (NTSINWLE.NAWC = A0HARDERR)  !   _HARD ERROR DETECTED       ?
           (NTSTCB'.BSTCB.BSTMLSTATE = N1HARDERR) 
        THEN                                _ NOW OR PRIVIOUS TIME     ?
          BEGIN 
          NTSINWLE.NAWC      := A0HARDERR;  _HARD ERROR                ?
          NTSINWLE.NADATAPTR := NIL;        _CLEAR BUFFER POINTER      ?
          PNTSULH;                          _SEND HARD ERROR WORKCODE  ?
                                            _ TO THE NTS HOST          ?
          END;
  
        END;  _ NTSTCB # NIL ?
  
      PNTSCOIN (NKENDIN, NIL);              _NO MORE INPUT             ?
      END;
  
    END;  _ CASE  SVMWC ? 
  
  PBLSPUT (NAWORKLIST, BYWLCB[B0SMWL]);     _PUT WORKLIST ENTRY TO SVM ?
                                            _ WLCB                     ?
  END;  _ WITH  NTSOUTWLE ? 
END;  _ PROCEDURE PNTSVM                                               ?
_$J+  PAGE EJECT? 
  
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*                      M A I N   P R O G R A M                        * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
** OVERVIEW:                                                          * 
*              PROCESS INCOMING WORKCODE                              * 
*                                                                     * 
** INPUT:                                                             * 
*              WORKLIST ENTRY                                         * 
*                                                                     * 
** OUTPUT:                                                            * 
*              NONE                                                   * 
*                                                                     * 
** CALLING PROGRAM:                                                   * 
*                                                                     * 
*              PBMON     : SYSTEM MONITOR                             * 
*                                                                     * 
** EXTERNAL SUBROUTINES:                                              * 
*                                                                     * 
*              PBLCBP    : FIND ADDRESS OF LCB USING LINE NUMBER      * 
*              PBRELZRO  : RELEASE CHAIN OF DATA BUFFER               * 
*                                                                     * 
** NOTE:                                                              * 
*                                                                     * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
BEGIN 
  
NTSINWLE.NAWORKLIST := BWWLENTRY[OPS];      _SAVE INCOMING WORKLIST IN ?
                                            _ THE LOCAL FIELD          ?
_ 
* * * *  CLEAR THE LCB TCB ADDRESS FIELDS 
? 
NTSLCB := NIL;
NTSTCB := NIL;
  
WITH  NTSINWLE  DO
  BEGIN 
  
_ 
* * * *  WORK ON THE INCOMING WORKCODE
? 
  CASE  NAWC  OF
  
_ 
* * * *  WORKCODE FORM THE BIP
? 
    A0QUEOUT:                               _OUTPUT IN QUEUE           ?
      BEGIN 
      NTSTCB := NATCBPTR;                   _COPY TCB ADDRESS          ?
      NTSLCB := NTSTCB'.BSTCB.BSLCBP;       _GET LCB ADDRESS FROM TCB  ?
  
      PNTSDLH;                              _DEQUEUE DOWNLINE DATA     ?
      END;  _ A0QUEOUT ?
  
_ 
* * * *  WORKCODE FROM THE SERVICE MODULE 
? 
    A0SMEN:                                 _ENABLE LINE REQUEST       ?
      BEGIN 
      PBLCBP (NALINO.BDLINO, NTSLCB);       _GET LCB ADDRESS FROM THE  ?
                                            _ LINE NUMBER              ?
      PNTSVM (C0LINOP);                     _LINE ENABLED WORKCODE     ?
                                            _ TO SVM                   ?
      END;  _ A0SMEN ?
  
    A0SMDA:                                 _DISABLE LINE REQUEST      ?
      BEGIN 
      PBLCBP (NALINO.BDLINO, NTSLCB);       _GET LCB ADDRESS FROM THE  ?
                                            _ LINE NUMBER              ?
      NTSTCB := NTSLCB'.BZTCBPTR;           _GET TCB ADDRESS FROM LCB  ?
  
      IF NTSTCB = NIL                       _NO TCB ON THIS LINE       ?
      THEN
        PNTSVM (C0LNDA)                     _GO AHEAD DELETE LINE      ?
      ELSE                                  _THERE IS TCB ATTACHED     ?
  
        WITH  NTSTCB'.BSTCB  DO 
          BEGIN 
          BSTMLSTATE := N1DALNREQ;          _DISABLE LINE REQUESTED    ?
          IF NOT BSOBTWAIT                  _NOT WAITING FOR OBT       ?
          THEN                              _ INDICATION FROM MUX LEVEL?
            PNTSVM (C0LNDA);                _SEND RESPONSE             ?
          END;  _ WITH NTSTCB ? 
      END;  _ A0SMDA ?
  
    A0SMTCB:                                _TCB BUILD REQUEST         ?
      BEGIN 
      PBLCBP (NALINO.BDLINO, NTSLCB);       _GET LCB ADDRESS FROM THE  ?
                                            _ LINE NUMBER              ?
      NTSTCB := NTSLCB'.BZTCBPTR;           _GET TCB ADDRESS FROM LCB  ?
  
      NTSTCB'.BSTCB.BSTMLSTATE := N1IDLE;   _INITIAL STATE             ?
      END;  _ A0SMTCB ? 
  
    A0SMDLTCB:                              _DELETE TCB REQUEST        ?
      BEGIN 
      PBLCBP (NALINO.BDLINO, NTSLCB);       _GET LCB ADDRESS FROM THE  ?
                                            _ LINE NUMBER              ?
      NTSTCB := NADATAPTR;                  _GET TCB ADDRESS FROM LCB  ?
  
      WITH  NTSTCB'.BSTCB  DO 
        BEGIN 
        BSTMLSTATE := N1DLTMLREQ;           _DELETE TERMINAL REQUESTED ?
  
        IF NOT BSOBTWAIT                    _NOT WAITING FOR OBT       ?
        THEN                                _ INDICATION FROM MUX LEVEL?
          PNTSVM (C0DLTCB);                 _SEND RESPONCE             ?
        END;  _ WITH NTSTCB ? 
      END;  _ A0SMDLTCB ? 
  
    A0SMRCTCB:                              _RECONFIGURE TCB REQUEST   ?
      BEGIN 
      PNTSVM (C0RCTCB);                     _TCB RECONFIGURED WORKCODE ?
                                            _ TO SVM                   ?
      END;  _ A0SMRCTCB ? 
  
_ 
* * * *  WORKCODE FROM THE MUX SUB SYSTEM 
? 
    A0HARDERR:                              _HARDWARE ERROR DETECTED   ?
      BEGIN 
      PBLCBP (NALINO.BDLINO, NTSLCB);       _GET LCB ADDRESS FROM THE  ?
                                            _ LINE NUMBER              ?
      NTSTCB := NTSLCB'.BZTCBPTR;           _GET TCB ADDRESS FROM LCB  ?
  
      IF NTSTCB = NIL                       _NO TCB ON THIS LINE       ?
      THEN
        PNTSVM (C0LNINOP)                   _GO AHEAD DELETE LINE      ?
      ELSE                                  _THERE IS TCB ATTACHED     ?
  
        WITH  NTSTCB'.BSTCB  DO 
          BEGIN 
          BSTMLSTATE := N1HARDERR;          _HARD ERROR INDICATION     ?
          IF NOT BSOBTWAIT                  _NOT WAITING FOR OBT       ?
          THEN                              _ INDICATION FROM MUX LEVEL?
            PNTSVM (C0LNINOP);              _SEND RESPONSE             ?
          END;  _ WITH NTSTCB ? 
      END;  _ A0HARDERR ? 
  
_ 
* * * *  WORKCODE FROM THE NTS MUX LEVEL OR THE INPUT STATE PROGRAM 
? 
    MMOBUX:                                 _OUTPUT BUFFER TRANSMITTED ?
      BEGIN 
      PBLCBP(NALINO.BDLINO, NTSLCB);        _GET ADDRESS FROM THE      ?
                                            _ LINE NUMBER              ?
      NTSTCB := NTSLCB'.BZTCBPTR;           _GET TCB ADDRESS FROM LCB  ?
  
      WITH  NTSTCB'.BSTCB  DO 
        BEGIN 
_ 
* * * *  FIRST, RELEASE TRANSMITTED OUTPUT BUFFER 
? 
        PBRELZRO (BSOUTBUF, BEDBSIZE);
        BSOUTBUF  := NIL;                   _BUFFER RELEASED           ?
  
        BSOBTWAIT := FALSE;                 _NO MORE WAITING, IT IS OK ?
                                            _ TO SEND OUTPUT           ?
_ 
* * * *  CHECK TO SEE MORE DATA CAN BE SENT 
? 
        CASE  BSTMLSTATE  OF
  
          N1ACTIVE:                         _TERMINAL ACTIVE           ?
            BEGIN 
            IF BSFMSGQ " NIL                _OUTSTANDING DOWNLINE DATA ?
            THEN                            _ AVAILABLE                ?
              PNTSXMIT;                     _SEND IT                   ?
            END;  _ N1ACTIVE ?
  
          N1DALNREQ:                        _DISABLE LINE REQUEST IS   ?
            BEGIN                           _ OUTSTANDING              ?
            PNTSVM (C0LNDA);                _SEND RESPONSE TO SVM      ?
            END;  _ N1DALNREQ ? 
  
          N1DLTMLREQ:                       _DELETE TERMINAL REQUEST IS?
            BEGIN                           _ OUTSTANDING              ?
            PNTSVM (C0DLTCB);               _SEND RESPONSE             ?
            END;  _ N1DLTMLREQ ?
  
          N1HARDERR:                        _HARD ERROR DETECTED       ?
            BEGIN 
            PNTSVM (C0LNINOP);              _LINE INOPERATIVE          ?
            END;  _ N1HARDERR ? 
  
          END;  _ CASE  BSTMLSTATE ?
        END;  _ WITH NTSTCB ? 
      END;  _ N1OBT ? 
  
    END;  _ CASE NAWC OF ?
  
  END;  _ WITH NTSINWLE ? 
END;  _ PROCEDURE PNTSXPTIP                                            ?
