*DECK IPINITH 
USETEXT TEXTIPL 
      PROC IPINITH; 
*CALL COPYRITE          CDCNET - COPYRIGHT CONTROL DATA. 1992.
# TITLE IPINITH - IP NAM INPUT TRAFFIC HANDLER.                        #
  
      BEGIN                            # IPINITH                       #
# 
****  IPINITH  IP NAM INPUT TRAFFIC HANDLER.
* 
*     THIS PROCEDURE HANDLES ALL INPUT THROUGH THE AIP NAM INTERFACE. 
* 
*     PROC IPINITH
* 
*     ENTRY    NSUP    = NAM SUPERVISORY WORD 
* 
*     EXIT     INPBUF  = ARRAY CONTAINING SUPERVISORY/DATA MESSAGE
*              P<ABH>  = PTR TO INPUT APPLICATION BLOCK HEADER. 
* 
*     METHOD   CALL NETGETL FOR EITHER SUPERVISORY MESSAGES OR DATA.
*              IF A SUPERVISORY MESSAGE IS OBTAINED THEN *IPISPSM*
*              IS CALLED, IF DATA IS OBTAINED THE *IPIPIDB* IS CALLED.
*              IF NO NAM INPUT IS AVAILABLE NETWAIT IS CALLED.
*              RELEASE THE DEBUG LOG FILE IF MESSAGE COUNT EXPIRED. 
# 
  
# 
****  PROC IPINITH - XREF LIST
# 
      XREF
        BEGIN 
        PROC IPIPIDB;    # PROCESS INPUT DATA BLOCK                    #
        PROC IPISPSM;    # PROCESS SUPERVISORY MESSAGE                 #
        PROC NETGETL;    # GET NEXT BLOCK ON SPECIFIED LIST            #
        PROC NETREL;     # RELEASE LOG FILE                            #
        PROC NETWAIT;    # SUSPEND NETWORK APPLICATION                 #
        END 
# 
**
# 
  
      ITEM GETMLIST  U = DATA$;        # LIST TO GET TRAFFIC FROM      #
  
      SWITCH GETTRAFFIC                # SWITCH TO GET TRAFFIC FROM NAM#
        S0D0G0,                        # NO DATA AVAILABLE             #
        S0D0G1,                        # NO DATA AVAILABLE             #
        S0D1G0,                        # GET DATA (LIST 1)             #
        S0D1G1,                        # GET DATA (LIST 1)             #
        S1D0G0,                        # GET SM   (LIST 0)             #
        S1D0G1,                        # GET SM   (LIST 0)             #
        S1D1G0,                        # GET DATA (LIST 1)             #
        S1D1G1;                        # GET SM   (LIST 0)             #
      CONTROL EJECT;
  
# 
****  START OF *IPINITH*
# 
  
# 
****  IF NO NAM INPUT IS AVAILABLE CALL NETWAIT.
*     IF TRAFFIC IS AVAILABLE, ISSUE A NETGETL ON EITHER THE
*     SUPERVISORY MESSAGE LIST OR THE DATA LIST, ROTATING BETWEEN THE 
*     TWO MESSAGE TYPE.  CALL THE APPROPRIATE PROCESSOR.
# 
  
      P<ABH>  = LOC(IABH);
  
      GOTO GETTRAFFIC[NSUP$SU[0]*4+NSUP$DU[0]*2+GETMLIST];
  
    S0D0G0:                            # NO TRAFFIC AVAILABLE          #
    S0D0G1: 
  
      IF BLOCK
      THEN
        BEGIN 
        NETWAIT(NORMWAIT$, 0);
        END 
      ELSE
        BEGIN 
        NETWAIT(NOWAIT$, 0);
        END 
  
      GOTO NTHEND;                     # GO TO COMMON END OF PROCEDURE #
  
    S1D0G0:                            # GET SUPERVISORY MESSAGE       #
    S1D0G1: 
    S1D1G1: 
  
      GETMLIST = SM$;                  # SET GET MESSAGE TYPE TO SM    #
      NETGETL (GETMLIST, IABH, INPBUF, INPSIZE$);  # INPUT THE MESSAGE #
  
      IF     ABHABT [0] NQ 0           # NOT A NULL BLOCK FROM NAM     #
         AND ABHIBU [0] EQ 0           # AND A BLOCK WAS DELIVERED     #
      THEN
        BEGIN 
        IPISPSM;                       # PROCESS SUPERVISORY MESSAGE   #
        END 
  
      GOTO NTHEND;                     # GO TO COMMON END OF PROCEDURE #
  
    S0D1G0:                            # GET DATA MESSAGE              #
    S0D1G1: 
    S1D1G0: 
  
      GETMLIST = DATA$;                # SET GET MESSAGE TYPE TO DATA  #
      NETGETL (GETMLIST, IABH,         # GET CONNECTION TRAFFIC        #
               INPBUF, INPSIZE$); 
  
      IF     ABHABT [0] NQ 0           # NOT A NULL BLOCK FROM NAM     #
         AND ABHIBU [0] EQ 0           # AND A BLOCK WAS DELIVERED     #
      THEN
        BEGIN 
        IPIPIDB;                       # PROCESS DATA BLOCK            #
        END 
  
      GOTO NTHEND;                     # GO TO COMMON END OF PROCEDURE #
  
    NTHEND:                            # COMMON END                    #
  
      IF (IPMC NQ 0) AND
         (NSUP$MC GQ IPMC)
      THEN
        NETREL (NDLFILE, 0, 0);        # RELEASE *ZZZZZDN* FILE        #
  
      RETURN;                          # RETURN TO CALLER              #
  
      END                              # IPINITH                       #
  
    TERM
