*COMDECK PNTSMON
_$J+? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*                    PNTSMON                                          * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
_$R-,G-,I+? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
** OVERVIEW -                                                         * 
*     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             * 
*                  M O N I T O R  I N T E R F A C E                   * 
** INPUT -                                                            * 
*              X5WKCD     = MONITORING CODE                           * 
*              X5LCB      = LCB ADDRESS                               * 
*              X5BUFPTR   = BUFFER POINTER                            * 
*                                                                     * 
** CALLING PROGRAMS                                                   * 
*              PXLVL2        -X25 LEVEL 2                             * 
*              PXLVL3        -X25 LEVEL 3                             * 
*                                                                     * 
** OUTPUT -                                                           * 
** EXTERNAL SUBROUTINES -                                             * 
** NOTES -                                                            * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
_ 
************************************************************************
*                                                                      *
** OVERVIEW -                                                          *
*     THIS ROUTINE GATHERS STATISTICS ON THE X25 TIP.                  *
*     FOR EACH FRAME RELEASED UPLINE OR DOWNLINE FROM                  *
*     EITHER X25 LEVEL 2 OR LEVEL 3 ON A LINE FOR WHICH                *
*     MONITORING IS ACTIVE A 10 WORD ENTRY IS PLACED IN A              *
*     DATA BUFFER TO BE ROUTED UPLINE TO THE  HOST VIA THE             *
*     NTS TIP.                                                         *
*                                                                      *
*     THIS ROUTINE WILL ONLY BE CALLED IF THE GLOBAL X25MONFLG         *
*     IS SET.THIS IS SET BY NTSD4 WHENEVER REQUESTS ARE MADE VIA       *
*     LOP COMMANDS ON NTS LINES TO MONITOR X25 LINES.                  *
*      LOGIC FLOW.                                                     *
*      -----------                                                     *
*                                                                      *
*      STEP 1.                                                         *
*     --------                                                         *
*      CHECK IF THE LINE RESPONSIBLE FOR THIS FRAME IS MONITORED       *
*      THE LINE IS MONITORED IFF BZMONTYPE IS SET IN THE SLCB.         *
*                                                                      *
*      STEP 2.                                                         *
*      -------                                                         *
*      IF LINE MONITORED,THEN LOCATE BUFFER ADDRESS.PROCESSING         *
*      DEPENDS ON MONTYPE.                                             *
*                                                                      *
*     STEP 3.                                                          *
*     -------                                                          *
*      IF CHAINING OF BUFFERS,THEN SET CHAINING FLAG.                  *
*     STEP 4.                                                          *
*     -------                                                          *
*      LOGIC TO GET AND FILL BUFFERS.                                  *
*                                                                      *
*    THE ENTRY TAKES THE FORM:-                                        *
          ------------------- 
          I      T   M      I 
          ------------------- 
          I       TTTT      I 
          ------------------- 
          I      L   N      I 
          ------------------- 
          I       N   N     I 
          ------------------- 
          I    L    IO      I 
          ------------------- 
          I       HDR1      I 
          ------------------- 
          I       HDR2      I 
          ------------------- 
          I       HDR3      I 
          ------------------- 
          I       HDR4      I 
          ------------------- 
          I       HDR5      I 
          ------------------- 
************************************************************************
? 
PROCEDURE PNTSMON(X5WKCD:INTEGER;X5LCB:BZLCBP;X5BUFPTR:B0BUFPTR); 
CONST 
     N5MAXCNT = 5;                          _ MAX ENTRIES PER BUFFER   ?
     MONL3IN  = 1;                          _ CALLED FOR L3 INPUT      ?
     MONL3OU  = 2;                          _ CALLED FOR L3 OUTPUT     ?
     MONL2IN  = 3;                          _ CALLED FOR L2 INPUT      ?
     MONL2OU  = 4;                          _ CALLED FOR L2 OUTPUT     ?
  
_ 
* * * *   X25 WORKLISTS DEFINITION
? 
      MONOUT       = A0WK18;     _$32?      _ MONITOR INFO FROM X25    ?
TYPE
      X0PARAMS = PACKED RECORD              _X25 WORKLISTS DEFINITION  ?
  
      CASE X9TAG1 : INTEGER OF
  
        1 : (XAWORKLIST : BWWORKLIST);      _STANDARD WORKLISTS        ?
        2 : (XADATA     : B08BITS;          _USED FOR CMDATA           ?
             XASP3      : B08BITS);         _SPARE                     ?
        3 : (XAFLG1     : BOOLEAN ;         _ FLAG 1 FOR NTS WKLIST    ?
             XAFLG2     : BOOLEAN ;         _ FLAG FOR NTS WKLIST      ?
             XASP1      : B04BITS ;         _ SPARE                    ?
             XADISC : BOOLEAN;              _DISCONNECT RECONFIGURE    ?
             XAREQ  : BOOLEAN;              _PACKET REQUEST FROM LVL2  ?
                                            _OR FRAGMENT REQUEST       ?
                                            _FROM LEVEL 3 TO SUB TIPS  ?
             XARSWC : B02BITS;              _SPARE                     ?
             XAWC   : B06BITS;              _WORKCODE                  ?
  
             CASE X9TAG2 : INTEGER OF 
  
               1 : (XALINO    : B0LINO;     _LINE NUMBER               ?
                    XAFRMPTR  : B0BUFPTR);  _FRAME    POINTER          ?
               2 : (XATCBLCCB : B0BUFPTR;   _TCB LCCB POINTER          ?
                    XABFRPTR  : B0BUFPTR);  _TCB OBP POINTER           ?
               3 : (XASP4     : INTEGER;    _SPARE                     ?
                    XASP5     : B012BITS;   _SPARE                     ?
                    XACNTYPE  : B04BITS);   _CONNECTION TYPE           ?
  
        );
      END; _X0PARAMS? 
  
VAR 
      X5PARAMS : X0PARAMS;
     N5MONMSG  : ARRAY [1..10]  OF INTEGER; _ CONTAINS SKELETON MON MSG?
     MNTYPES : ARRAY[1..4] OF INTEGER;      _ CONTAINS TYPES FOR MESSAG?
      N5MONCNT   : INTEGER;                 _ NUMBER ENTRIES IN BUFFER ?
      N5MONBUF   : B0BUFPTR;                _ POINTS TO DATA BUFFER    ?
      I          : INTEGER;                 _ LOOP COUNT               ?
      N5MONWORD  : INTEGER;                 _ WORD IN MON BUFFER       ?
  
VALUE 
      N5MONMSG = ( #TM#,$0000,              _ CURRENT TIME IN SECONDS  ?
                   #LN#,$0000,              _ LINE NUMBER FOR FRAME    ?
                   $0000,$0000,             _ LEVEL INOUT HDR1         ?
                   $0000,$0000,             _  HDR2   HDR3             ?
                   $0000,$0000);            _     HDR4   HDR5          ?
  
     MNTYPES = (#3I#,#3O#,#2I#,#2O#);       _ MESSAGE TYPES            ?
  
BEGIN 
_ 
* * * *  CHECK IF THIS LINE IS MONITORED
? 
IF (X5LCB'.BZSLCBPTR'.BZXSLCB.BZMONFLG)     _MONITORING THE LINE       ?
                     &                      _   AND                    ?
   (PB1BFAVAIL (B0TH3LV))                   _BUFFER AVAILABLE          ?
THEN
     BEGIN
  
_ 
* * * *  SET UP VALUES IN CANNED MESSAGE
? 
     N5MONMSG[2] := CASECNTR;               _ SET TIME IN WORD 2       ?
     N5MONMSG[4] := X5LCB'.BZLINO.BDLINO;   _ LINE NUMBER FROM LCB     ?
_ 
* * * * SET UP WORD 4 FOR TYPE OF MONITOR 
? 
     N5MONMSG[5] := MNTYPES[X5WKCD];        _ SET LEVEL AND IO CHAR    ?
_ 
* * * *  NOW PACK FRAME AND PACKET HEADERS INTO MESSAGE 
? 
     WITH X5BUFPTR' DO                      _ WITH DATA BUFFER         ?
       FOR I := 5 TO 9 DO                   _ LOOP THRU HEADER         ?
         BEGIN
         N5MONMSG[I+1] := BIINT[I]; 
         END; 
_ 
* * * * CHECK IF BUFFER AVAILABLE 
? 
     IF N5MONBUF = NIL                      _ IF NOT AVAILABLE         ?
     THEN 
       BEGIN
       N5MONBUF := PBGET1BF(BEDBSIZE);      _ GET A DATA BUFFER        ?
       N5MONCNT := 0;                       _ RESET MONITOR ENTRY COUNT?
_ 
* * * *   SET UP BUFFER HEADER FIELDS 
? 
       WITH N5MONBUF' DO
         BEGIN
         BFLCD := 13;                       _ SET LCD                  ?
         BFFCD := 12;                       _ SET FCD                  ?
         BFDATAC[12] := CHR(4); 
         N5MONWORD := 7;                    _ SET WORD COUNT IN BUFFER ?
         END; 
       END;  _ IF NO BUFFER ? 
  
_ 
* * **  MOVE CANNED MESSAGE INTO BUFFER 
? 
     WITH N5MONBUF' DO
     BEGIN
     FOR I:= 1 TO 10 DO                     _ LOOP THRU CANNED MESSAGE ?
       BIINT[N5MONWORD +I] := N5MONMSG[I];  _ MOVE INTO BUFFER         ?
     N5MONWORD := N5MONWORD +10;            _ UPDATE POSITION IN BUFFER?
     N5MONCNT := N5MONCNT + 1;              _ UPDATE NO.ENTRIES        ?
     BFLCD    := BFLCD + 20;                _ UPDATE LCD               ?
_ 
* * * *  IF BUFFER FULL,SHIP IT UPLINE
? 
     IF N5MONCNT = N5MAXCNT                 _ IF AT MAXIMUM            ?
     THEN 
       BEGIN
       N5MONCNT := 0;                       _ RESET NO. OF ENTRIES     ?
_ 
* * * * SET UP WRKLIST TO NTS 
? 
       WITH X5PARAMS DO 
         BEGIN
         XAWC := MONOUT;                    _ SET WORKCODE? 
         XABFRPTR := N5MONBUF;              _ SET BUFFER POINTER       ?
         PBLSPUT(X5PARAMS.XAWORKLIST,BYWLCB[B0NTSWL]);
         END; _ WITH X5PARAMS ? 
       N5MONBUF := NIL;                     _ RESET LOCAL POINTER      ?
      END;      _ END IF AT MAX    ?
    END;     _ WITH N5MONBUF'   ? 
  END; _IF LINE IS MONITORED  AND  BUFFER IS AVAILABLE? 
END; _PNTSMON?
