*DECK NETDBG
USETEXT AIPDEF
USETEXT NP$DB 
USETEXT NP$MODE 
USETEXT NP$NWL
 PROC NETDBG ((OPT1),(OPT2),DBSTAT);
  
*IF,DEF,IMS 
 #
*1DC  NETDBG
* 
*     1. PROC NAME         AUTHOR               DATE
*        NETDBG            J. P. YOUNG          77/04/08
* 
*     2. FUNCTIONAL DESCRIPTION 
*        PROCESSES THE NETDBG CALL FROM AN APPLICATION.  THE DEBUG
*        OPTIONS ARE SET AS SPECIFIED WHEN AIP IS COMPILED WITH 
*        *DEFINE,DEBUG.  OTHERWISE STATUS IS RETURNED INDICATING THE
*        DEBUG OPTION IS NOT AVAILABLE (STATUS = 1).
* 
*     3. METHOD USED
*        MOST OF THE LOGIC IN THIS PROCEDURE IS CONDITIONALLY COMPILED. 
*        WHEN *DEFINE,DEBUG IS NOT USED, STATUS IS SET EQUAL TO 1 AND 
*        CONTROL IS RETURNED TO CALLER.  WHEN *DEFINE,DEBUG IS USED,
*        DB$SM IS SET TRUE IF OPT1 = 0 OR FALSE OTHERWISE.  DB$DM IS
*        SET TRUE IF OPT2 = 0 OR FALSE OTHERWISE.  STATUS IS SET EQUAL
*        TO ZERO.  THE CALL TO NETDBG IS LOGGED ON FILE ZZZZZDN.
*        WHEN DEBUG OPTION IS DEFINED A TWO WORD ENTRY IS WRITTEN TO
*        THE DEBUG LOG FILE.
*        WORD 0 
*                                   2 
*         0                         4 
*        I-------------------------I----------------I 
*        I                         I                I 
*        I SECONDS SINCE DEADSTART I MILLISECONDS   I 
*        I                         I                I 
*        I-------------------------I----------------I 
* 
*        WORD 1 
*                                 2         4    5
*         0        1        2     4         2    3
*        I--------I--------I-----I---------I----I--------I
*        I        I        I     I         I    I        I
*        I DB$SMF I DB$DMF I     I DB$CAL  I    I DB$OPC I
*        I        I        I     I         I    I        I
*        I--------I--------I-----I---------I----I--------I
* 
*        DB$SMF - SUPERVISORY MESSAGE LOGGING 
*                 =1 IF ON
*        DB$DMF - DATA MESSAGE LOGGING
*                 =1 IF ON
*        DB$CAL - CALLING ADDRESS 
*        DB$OPC - NETDBG OPCODE (=20) 
* 
* 
*     4. ENTRY CONDITIONS 
*          OPT1 = 0   LOG SUPERVISORY MESSAGES, EXCEPT FC/ACK 
*               NOT 0 NO LOGGING OF SUPERVISORY MESSAGES
*          OPT2 = 0   LOG DATA MESSAGES AND FC/ACK
*               NOT 0  NO LOGGING OF DATA MESSAGES
* 
*     5. EXIT CONDITIONS
*          DBSTAT = 0   DEBUG OPTION AVAILABLE
*                 = 1   DEBUG OPTION NOT AVAILABLE (I.E. AIP LOADED WAS 
*                       NOT COMPILED WITH *DEFINE,DEBUG)
*          DB$SM AND DB$DM (COMMON BLOCK NP$DB) ARE SET TRUE OR FALSE 
*             AS REQUESTED
* 
*     6. COMDECKS CALLED AND SYMPL TEXTS USED.
*        AIPDEF    NP$CRT 
*        NP$DB     NP$DBA    NP$MODE   NP$NWL 
* 
*     7. PROCEDURES/FUNCTIONS CALLED
*        NP$PIOE - PROCESS I/O ERROR ON DEBUG LOG FILE
*        NP$RTIM - RETURNS CURRENT TIME FROM DEADSTART IN SECONDS 
*                  AND MILLISECONDS 
*        NP$WRTW - WRITES WORDS TO FILE - NOS DATA TRANSFER MACRO 
*        NP$ERR - DAYFILE ERROR MESSAGE AND ABORT.
* 
*     8. DAYFILE/DIAGNOSTIC MESSAGES
*        NETWORK APPLICATION ABORTED, RC = 34.
*        NETDBG: REQUEST INVALID BEFORE NETON.
* 
 #
*ENDIF
  
    BEGIN 
  
*CALL NP$CRT
#     PARAMETERS                                                       #
#                                                                      #
      ITEM OPT1;             # LOG SUPERVISORY MESSAGE OPTION          #
      ITEM OPT2;             # LOG DATA MESSAGE OPTION                 #
      ITEM DBSTAT;           # DEBUG AVAILABILITY STATUS RETURNED      #
      XREF
        BEGIN 
        PROC NP$PIOE;                  # PROCESS I/O ERROR             #
        PROC NP$WRTW;                   # WRITES WORDS TO DEBUG LOG    #
        PROC NP$RTIM;                   # REAL TIME                    #
        PROC NP$ERR;                    # DAYFILE ERROR.               #
        END 
*IF,DEF,DEBUG 
  
      CONTROL LIST;                     # NETDBG USES VARIABLE NSUPWRD.#
  
# 
      LOCAL VARIABLES 
# 
      ITEM TIMEWD  U;        # REAL TIME SINCE DEADSTART               #
  
      ARRAY DBGLOG P(2);     # LOG NETDBG CALL                         #
*CALL NP$DBA
*ENDIF
#**********************************************************************#
#     NETDBG EXECUTION BEGINS HERE                                     #
  
      ENTRY PROC QTDBG((OPT1),(OPT2),DBSTAT); # QTRM ENTRY PT FOR PROC #
  
#                                                                      #
#     INITIALIZE STATUS                                                #
  
*IF,-DEF,DEBUG
      DBSTAT = 1; 
*ENDIF
*IF,DEF,DEBUG 
  
      DBSTAT = 0; 
*ENDIF
  
      IF NOT ACCEPTED 
      THEN
        NP$ERR("34");                  # REQUEST INVALID BEFORE NETON. #
*IF,DEF,DEBUG 
  
#     SET DEBUG OPTIONS                                                #
  
      IF OPT1 EQ 0
        THEN DB$SM = TRUE;
        ELSE DB$SM = FALSE; 
  
      IF OPT2 EQ 0
        THEN DB$DM = TRUE;
        ELSE DB$DM = FALSE; 
  
#     FORMAT LOG FILE ENTRY                                            #
  
      P<CALLADR> = LOC(NETDBG);        # GET CALL ADDRESS              #
      NP$RTIM(TIMEWD);       # REAL TIME SINCE DEADSTART               #
      DB$TIME[0] = TIMEWD;
      DB$SMF[0] = DB$SM;
      DB$DMF[0] = DB$DM;
      DB$CAL[0] = CALLADDR[0];
      DB$OPC[0] = OP$DBG; 
      NP$WRTW (DB$FET,DBGLOG,2);
# 
      NSUPWRD BASED ARRAY POINTER TO THE USER COMMUNICATION WORD
      WAS SET BY NETON.  THE ARRAY IS LOCATED IN NP$NWL COMDECK.
  
      UPDATE MSGCNT IN NSUP COMMUNICATION  WORD.
# 
      MSGCNT[0] = MSGCNT[0] + 1;
# 
      CHECK FOR I/O ERROR IN DEBUG LOG FILE 
# 
      IF FET$AT[0] NQ 0 
      THEN                             # I/O ERROR HAS OCCURRED ON FILE#
        BEGIN 
        NP$PIOE(DB$FET);               # PROCESS I/O ERROR             #
        END 
*ENDIF
  
    END  # NETDBG # 
  
 TERM  # NETDBG # 
