*DECK HPPUT 
USETEXT NIPDEF
USETEXT ACB 
USETEXT ACNB
USETEXT ACNT
USETEXT AHEADER 
USETEXT APPSTAT 
USETEXT AT
USETEXT DBGBUF
USETEXT DRHDR 
USETEXT DUMPFLG 
USETEXT KDIS
USETEXT LLCB
USETEXT NCNB
USETEXT NBT 
USETEXT NHEADER 
USETEXT NWLHEAD 
USETEXT NWLNTRY 
USETEXT OVERLAY 
USETEXT PARAMP
USETEXT PARAMS
USETEXT PT
USETEXT STATTAB 
USETEXT SUPMSG
 PROC HPPUT;                 # PROCESS A *NET PUT* WORK LIST ENTRY     #
  
 STARTIMS;
 #
*1DC  HPPUT 
* 
*     1. PROC NAME           AUTHOR              DATE 
*        HPPUT               J. J. LYON          75/05/02 
*                            Y HSIEH             77/05/10 
*                            C. BITTNER          81/07/17 
* 
*     2. FUNCTIONAL DESCRIPTION.
*        THIS ROUTINE IS RESPONSIBLE FOR PROCESSING A *NET PUT* WORK
*        LIST ENTRY.  THIS IS DONE VIA SEVERAL JUMP TABLES. 
* 
*     3. METHOD USED. 
*          EDIT ENTRY 
*          IF ABT = 1 OR 2
*            IF IN NORMAL CONDITION (ALL DATA ALLOWED) THEN CALL
*            NFOB TO QUEUE DATA TO THE PIP OUTBOUND CHAIN 
*            (BYPASS THE STATE TABLES) ELSE 
*            CALL HOST BLOCK PROTOCOL STATE TABLE PROCESSOR (HBSTTP)
*            TO PUT-DATA
*          IF ABT = 3 THEN USE APP JUMP TABLE 
*          IF ABT = 4 AND MSG TO NIP
*            VALIDATE THAT MESSAGE IS FROM NS OR CS 
*            LINK MESSAGE TO PIP OUTBOUND CHAIN BASED 
*            ON SOURCE NODE (COUPLER NUMBER)
* 
*     4. ENTRY PARAMETERS.
*          NWLABT            APPLICATION BLOCK TYPE 
*          NWLEABH           APPLICATION BLOCK HEADER 
*          NWLOP             OPPUTF OR OPPUT
*          ACBADDR           CURRENT APPLICATION"S ACB
*          WLADDR            CURRENT WORKLIST ENTRY 
* 
*     5. EXIT PARAMETERS. 
*          NWLADR            PROCESS NUMBER OF APPLICATION
*          OVLNAME           ROUTINE TO PROCESS NIP PFC/SFC MESSAGES
*          PARAMS1           REASON CODE FOR LGL/ERR,IF ONE OCCURS
* 
*     6. COMDECKS CALLED AND SYMPL TEXTS USED.
*        ACB     ACNB     APPSTAT     AT
*        DBGBUF     DRHDR     NIPDEF
*        NWLHEAD  NWLNTRY   OVERLAY   PARAMS
*        PT     STATTAB     SUPMSG
*        ACNT     AHEADER     LLCB
*        NCNB     PARAMP
* 
*     7. ROUTINES AND OVERLAYS CALLED.
*          HLGLERR    OVL    ISSUE LGL/ERR SUP MSG
*          HPUTF      OVL    READ FRAGMENTED TEXT ARRAY INTO NIP FL 
*          HRDPUT            READ PUT THAT DIDN-T FIT IN W/L
*          HRELPWL           RELEASE USED PORTION OF NWL
*          HUPDDAW           UPDATE DATA AVAILABLE WORD 
*          OVLCALL           LOAD OVERLAY 
*          XTRACE            TRACES CALLS 
*          XCTLW             COMPUTE MSG LENGTH IN CM WORDS 
*          HBCHECK           VALIDATE CHARACTER TYPE
*          LOCLLCB           LOCATE LLCB
*          NFOB              LINK MESSAGE TO PIP OUTBOUND CHAIN 
*         FROM APPLICATION JUMP TABLE 
*          HBSTTP            HOST BLOCK PROTOCOL STATE TABLE PROCESSOR
*          HCHGICT    OVL    CHANGE INPUT CHARACTER TYPE IN ACNB
*          HCSTTP            HOST CONNECTION STATE TABLE PROCESSOR
*          HDCTRU     OVL    SET DATA TRUNCATION MODE IN ACNB OR ACB
*          HLONOFF    OVL    TURN ON/OFF ACN IN LIST X
*          HLSTDX     OVL    SET HALF/FULL DUPLEX 
*          HPDBGST    OVL    PROCESS DBG/STOP 
*          HPKDISP    OVL    PROCESS HOP COMMAND
*          HPNPDRL    OVL    PROCESS NPD/REL
*          HPSHISD    OVL    PROCESS SH/ISD (SHUTDOWN)
*          HPNOFFN    OVL    PROCESS NET/OFF/N AND FAIL/APPL/N
*          NGIGO      OVL    SEND GARBLED MESSAGE TO DAYFILE
*          NLOPIP     OVL    LINK MSG FROM NIP,NS,CS TO PIP OUTBOUND CHA
*          HPNONVF    OVL    PROCESS *NET ON* RESPONSE FROM NVF 
* 
*     8. DAYFILE MESSAGES.  NONE
*        THIS PROCEDURE IS CALLED BY HWLP.
* 
 #
 STOPIMS; 
# 
                    EXTERNAL VARIABLES
# 
 XREF BEGIN 
 PROC HBCHECK ; 
 PROC HBSTTP;                # HOST SIDE STATE TABLE PROCESSOR         #
 PROC HCSTTP;                # HOST CONNECTION STATE TABLE PROCESSOR   #
 PROC HRDPUT;                # READ *PUT* THAT DID NOT FIT IN W/L      #
 PROC HRELPWL;               # RELEASE USED PORTION OF THE NWL         #
 PROC HUPDDAW;               # UPDATE DATA AVAILABLE WORD              #
 PROC LOCLLCB ; 
 PROC MGETS ;              # PROC TO GET BUFFER FOR FREE CHAIN         #
 PROC MRELS;                 # RELEASE UNUSED BUFFER SPACE             #
 PROC NFOB ;
 PROC OVLCALL;               # LOAD OVERLAY                            #
 PROC XDROP;                 # DROP PIP (AND NIP)                      #
 PROC XCTLW;
 PROC XTRACE;                # TRACE CALL                              #
 PROC RDUMP;
   END
# 
                    INTERNAL VARIABLES
# 
      ITEM RETURNF  U  ;
# 
                    TABLE OF UCP PFC/SFC CODES
# 
                                                                        000900
 DEF ENDTAB1 #46#;           # SIZE OF PFC/SFC PROCESSING TABLE        #
 ARRAY UCPPFCSFCTAB  [0:ENDTAB1];                                       001200
  BEGIN                                                                 001300
  ITEM VACNFLAG    B(00,00,01) =
                 [TRUE,TRUE,TRUE,FALSE,FALSE, 
                  TRUE,FALSE,FALSE, 
                  FALSE,TRUE,FALSE,FALSE,FALSE,FALSE, 
                  TRUE,TRUE,FALSE,TRUE,TRUE,
                  TRUE,TRUE,
                  TRUE,TRUE,FALSE,FALSE,FALSE,
                  FALSE,FALSE,FALSE,FALSE,FALSE,
                  FALSE,FALSE,FALSE,FALSE,FALSE,
                  FALSE,
                  FALSE,FALSE,
                  FALSE,FALSE,FALSE,FALSE,FALSE,
                  FALSE,FALSE,
                  TRUE];
  
  ITEM UCPPFCSFC  U(00,42,18) = 
              [LSTOFF,LSTON,LSTSWH,LSTFDX,LSTHDX, 
               DCCICT,DBGSTOP,DCSTMR, 
               DCTRU,PRUON,HOPDIS,HOPLG,HOPALT,HOPDAY,
               CONREQN,CONREQA,CONACR,CONEND,INTRRSP, 
               INTRAPP,FCBRK, 
               FCRST,FCINITN,NPDREL,NETONN,NETONA,
               SHISD,CRITEN,CRITEA,CRRAPN,CRRAPA, 
               CRIAPN,CRIAPA,CRSWH,CRRCNN,CRTRM,
               CRRCNA,
               NETOFFN,FAIAPPN, 
               FNTDMS,FNTDSM,FNTIFL,FNTIFR,FNTIAR,
               SACNCL,SAFSAR, 
               0];
  END                                                                   001700
                                                                        001900
# 
                    JUMP TABLE FOR UCP-PFC/SFC PROCEDURES 
# 
                                                                        002400
 SWITCH UCPPFCSFCJT  UCPL0,UCPL0,UCPL1,UCPL2,UCPL2, 
                     UCPL4,UCPL7,UCPL5, 
                     UCPL8,UCPL10,UCPL13,UCPL13,UCPL13,UCPL13,
                     UCPL14A,UCPL14B,UCPL14C,UCPL14D,UCPL15A, 
                      UCPL15AA,UCPL15BB,
                     UCPL15B,UCPL15C,UCPL16,UCPL17B,UCPL17A,
                     UCPL18,UCPL19A,UCPL19B,UCPL19C,UCPL19D,
                     UCPL19E,UCPL19F,UCPL19G,UCPL19H,UCPL19I, 
                     UCPL19J, 
                     UCPL20,UCPL21, 
                     UCPL22A,UCPL22A,UCPL22C,UCPL22D,UCPL22E, 
                     UCPL23,UCPL24, 
                     UCPL25;
                                                                        002900
# 
                    JUMP TABLE FOR ABT CODES
# 
 SWITCH ABTJT  ABT0,ABT1,ABT2,ABT3,ABT4,ABT0,ABT6,ABT7; 
 ITEM COUNT ; 
 ITEM DV;                    # DEVICE TYPE                             #
 ITEM FOUND B ; 
 ITEM INDEX;                 # INDEX FOR SEARCHING THROUGH TABLES      #
 ITEM TEMP ;
 ITEM SWTCH B;
 ITEM WLOPCODE;              # WORKLIST OPCODE                         #
 ITEM WORDCOUNT;             # SIZE OF MSG (IN WORDS)                  #
 ITEM ACNTINDX;              # INDEX INTO ACNT                         #
 ITEM ABT;                   # APPLICATION BLOCK TYPE                  #
 ITEM ACN;                   # APPLICATION CONNECTION NUMBER           #
 ITEM TRIG;                  # TRIGGER FOR STATE TABLE PROCESSOR       #
  
  
#**********************************************************************#
      BEGIN 
      CONTROL IFEQ DEBUG,1 ;
        XTRACE("HPPUT") ; 
      CONTROL FI; 
  
      P<NWLENTRY> = WLADDR;  # ADDR OF NETPUT WORKLIST ENTRY           #
      WLOPCODE = NWLOP[0]; # WORKLIST OPCODE                           #
      P<ACB> = ACBADDR; 
      PARAMS7 = 0 ;          # CLEAR ERROR PARAMS                      #
# 
 STEP 1             EDIT FIELDS IN NWL ENTRY
# 
      TEMP = 0;        #INITIALIZE TEMP # 
      ABT = NWLABT[0]; # APPLICATION BLOCK TYPE                        #
      IF ABT LS APPBLK
        OR ABT GR APPQMSG 
      THEN
        BEGIN 
        TEMP = RLG"IAB";  # ILLEGAL ABT                                #
        GOTO PPUT75;
        END 
      IF ( NWLACT[0] GQ ACTMAX
              OR NWLACT LQ 0 )
      THEN
        BEGIN 
        TEMP = RLG"IA" ;
        GOTO PPUT75 ; 
        END 
  
      XCTLW(NWLEABH[0],WORDCOUNT);
      IF ABT EQ APPCMD
        AND WORDCOUNT EQ 0
      THEN
        BEGIN 
        TEMP = RLG"ISM";  # RC=7 ILLOGICAL SM                          #
        GOTO PPUT75;
        END 
  
      IF WORDCOUNT GR TLWMAX
          OR NWLTLC[0] GR TLCMAX
      OR (( WLOPCODE NQ WLOPPUTF) 
      AND ( WORDCOUNT NQ NWLEBS - HDRSIZE)
      AND ( NWLTA EQ 0))
      OR (( WLOPCODE EQ WLOPPUTF) 
      AND (NWLELTAA NQ NWLEBS - FLSIZE) 
      AND ( NWLTA EQ 0))
      THEN
        BEGIN 
        TEMP = RLG"IT" ;
        GOTO PPUT75 ; 
        END 
  
      IF NWLTA NQ 0 
      THEN
        BEGIN 
        IF WLOPCODE EQ WLOPPUTF 
        THEN
          COUNT = NWLELTAA ;
        ELSE
          COUNT = WORDCOUNT ; 
  
        HRDPUT(COUNT) ; 
        IF NOT DONE 
        THEN
          RETURN; 
        END 
      IF WLOPCODE EQ WLOPPUTF 
      THEN
        BEGIN 
        OVLNAME = HPUTFP;    # NAME OF OVERLAY TO LOAD                 #
        OVLCALL;             # LOAD AND EXECUTE OVERLAY                #
        IF (PARAMP1 EQ 0) OR # BAD NETPUTF CALL                        #
           (NOT DONE)        # TEXT DID NOT GET READ INTO NIP-S MEMORY #
        THEN                 # CANNOT CONTINUE PROCESSING NETPUTF REQ  #
          BEGIN 
          RETURN;            # ***** EXIT FROM ROUTINE *****           #
          END 
        END 
  
      P<NWLENTRY> = WLADDR; # RESET CURRENT WORKLIST ADDRESS           #
      NWLIBU[0] = FALSE;     # PRECAUTION TO CLEAR IBU BIT             #
  
      CONTROL IFEQ DEBUG,1; 
        PNVALUE[0] = ACBAN[0]; # APPLICATION NUMBER                    #
        BPUTW[BPUTP] = PNWORD[0]; # STORE AN IN DEBUG BUFFER           #
        BPUTP = BPUTP + 1;   # INCREMENT BUFFER OFFSET PTR             #
        IF BPUTP GR 999 
        THEN                 # END OF BUFFER HAS BEEN REACHED          #
          BPUTP = 0;         # INITIALIZE OFFSET PTR TO BEG OF BUFFER  #
  
#       COPY DATA BLOCK TO DEBUG BUFFER                                #
        P<DRHDRWD> = WLADDR;
        P<TRAP> = WLADDR;    # NETWORK WORKLIST ENTRY ADDRESS          #
        FOR TRAPINDEX = 0 STEP 1 UNTIL DRBS[0] - 1 DO 
          BEGIN 
          BPUTW[BPUTP] = WORD[TRAPINDEX]; 
          BPUTP = BPUTP + 1; # INCREMENT BUFFER OFFSET PTR             #
          IF BPUTP GR 999 
          THEN               # END OF BUFFER HAS BEEN REACHED          #
            BPUTP = 0;       # INTIALIZE OFFSET PTR TO BEG OF BUFFER   #
          END 
      CONTROL FI; 
  
# 
 STEP 2             SWITCH ON ABT 
# 
      P<AHEADER> = WLADDR + AIPHSIZE ;   # APPLICATION BLOCK HEADER    #
      P<SUPMSG> = WLADDR + AIPHSIZE + ABHSIZE;  # ADDRESS OF SUP MSG   #
      P<SMNVF> = P<SUPMSG>; 
      INDEX = 0;
      P<ACNT> = ACBACNT[0];  # ADDRESS OF APPL CONNECTION TABLE        #
      P<ACNB> = 0;
      IF ABT NQ APPPN 
      THEN                   # VALIDATE ACN                            #
        BEGIN 
        IF NWLADR[0] NQ 0 
        THEN  # CONNECTION DATA OR SYCH SM                             #
          ACN = NWLADR[0];
        ELSE
          BEGIN              # SM                                      #
          IF ABT NQ APPCMD
          THEN # DATA SENT ON CONNECTION ZERO                          #
            BEGIN # SEND ERROR LOGICAL TO APPLICATION                  #
            TEMP = RLG"ACN"; # INVALID ACN REASON CODE                 #
            GOTO PPUT75;
            END 
          ACN = SPACN[0]; 
          UCPPFCSFC[ENDTAB1] = PFCSFC[0];  # GUARANTEES A MATCH        #
  
PPUT10: 
          IF UCPPFCSFC[INDEX] EQ PFCSFC[0]
          THEN
            GOTO PPUT20;
          INDEX = INDEX + 1;
          GOTO PPUT10;  # CHECK NEXT ENTRY IN JUMP SWITCH              #
          END 
  
PPUT20: 
        IF INDEX EQ ENDTAB1 AND PFC[0] NQ IFC AND 
        PFC[0] NQ OFC AND PFC[0] NQ SET 
          AND PFC[0] NQ IFT 
             AND PFC[0] NQ OFT
                 AND PFC[0] NQ XFT
        THEN
          BEGIN 
          TEMP = RLG"ISM";
          GOTO PPUT75;
          END 
        IF (ACN NQ 0 AND PFC[0] NQ HOP) 
        OR VACNFLAG[INDEX]
        THEN                 # VALIDATE ACN                            #
          BEGIN 
          IF ACN NQ 0 AND 
             ACN GQ ACNTMINACN[0]  AND
             ACN LQ ACNTHCN[0]
          THEN
            BEGIN 
            ACNTINDX = ACN - ACNTMINACN[0] + ACNTHSIZE; 
            P<ACNB> = ACNTACNB[ACNTINDX]; 
            IF P<ACNB> NQ 0 
            THEN
              GOTO ABT$;   # SWITCH ON APPLICATION BLOCK TYPE          #
            END 
          TEMP = RLG"ACN";    # RC=4 INVALID ACN                       #
          GOTO PPUT75;
          END 
        END 
  
ABT$: 
      IF P<ACNB> NQ 0 
      THEN # ACNB EXISTS, GET NCNB ADDRESS                             #
        BEGIN 
        P<NCNB> = ACNBNCNB[0];
        DV = NCNBDT[0];      # DEVICE TYPE OF CONNECTION               #
        END 
      GOTO ABTJT[ABT]; # SWITCH ON APPLICATION BLOCK TYPE              #
  
ABT0: 
      TEMP = RLG"IAB";       # ABT = 0 IS ILLEGAL                      #
      GOTO PPUT75;           # SEND LGL/ERR MSG TO APPL                #
  
ABT6:                        # QBLK BLOCK PROCESSING                   #
ABT7:                        # QMSG BLOCK PROCESSING                   #
      IF P<NCNB> NQ 0 
        AND ((DV NQ DT$INTA 
        AND DV NQ DT$ATOA)
        OR ACNBBLK[0]) # NO INTERMIXING OF BLK/MSG WITH QBLK/QMSG      #
      THEN # QBLK/QMSG ALLOWED ON A-A CONNECTION ONLY                  #
        BEGIN # ISSUE ERROR LOGICAL RC = 9 TO APPLICATION              #
        TEMP = RLG"NCE";
        GOTO PPUT75;
        END 
      IF ABT EQ APPQBLK 
      THEN # RECEIVED QBLK OF A MULTI-BLOCK QUALIFIED MESSAGE          #
        ACNBQBLK[0] = TRUE; # SET QBLK OUTSTANDING FLAG                #
      ELSE # RECEIVED QMSG BLOCK                                       #
        ACNBQBLK[0] = FALSE;
      GOTO ABT$BLK; # PROCESS AS A BLK/MSG BLOCK                       #
  
ABT1: 
ABT2: 
      IF ACNBQBLK[0]
      THEN # QBLK BLOCK OUTSTANDING, NO QMSG RECEIVED YET              #
        BEGIN # NO INTERMIXING OF QBLK AND REGULAR BLOCK ALLOWED       #
        TEMP = RLG"NCE"; # SEND ERROR LOGICAL RC=9                     #
        GOTO PPUT75;
        END 
      IF ABT EQ APPBLK
      THEN # RECEIVED BLK BLOCK OF A MESSAGE                           #
        ACNBBLK[0] = TRUE;
      ELSE # RECEIVED MSG BLOCK OF A MESSAGE                           #
        ACNBBLK[0] = FALSE; 
ABT$BLK:  
      IF P<NCNB> NQ 0 
      THEN # NETWORK CONNECTION BLOCK EXISTS                           #
        BEGIN 
        IF ACNTABO[ACNTINDX] GQ ACNBABL[0]
        THEN # APPLICATION BLOCK LIMIT EXCEEDED ON CONNECTION          #
          BEGIN 
          TEMP = RLG"ABL";
          GOTO PPUT75; # ISSUE ERR/LGL                                 #
          END 
  
        ELSE # VALIDATE APPLICATION CHARACTER TYPE USED                #
          BEGIN 
          IF (NWLACT[0] EQ CT60TRANS AND
              DV EQ DT$CONS) # ACT ON CONSOLE CONNECTION               #
            OR (DV EQ DT$ATOA AND 
                NOT (NWLACT[0] EQ CT8ASCII OR 
                     NWLACT[0] EQ CT12ASCII)) # ACT 1 OR 4 ON INTER-H  #
             OR ( DV EQ DT$INTA                # IN-TRA HOST WITH ACT 4#
                AND NWLACT[0] EQ CT6DISPLAY )  # IS NOT ALLOWABLE      #
          THEN # INVALID ACT ON DOWNLINE BLOCK                         #
            BEGIN 
            TEMP = RLG"IA"; 
            GOTO PPUT75; # ISSUE ERR/LGL                               #
            END 
          END 
  
        IF NWLACT[0] EQ CT6DISPLAY
          AND DV EQ DT$CONS 
        THEN
          NWLXPT[0] = FALSE; # CLEAR TRANSPARENT MODE BIT              #
  
        IF NCNBBST[0] EQ NBALLD # ALL DATA ALLOWED ON NETWORK SIDE     #
          AND ACNTIS[ACNTINDX] EQ HBALLD # ALL DATA ALLOWED ON HOST SI #
        THEN
          BEGIN # QUEUE DOWNLINE DATA DIRECTLY                         #
          ACNTABO[ACNTINDX] = ACNTABO[ACNTINDX] + 1;
          IF ACNBTLO[0] 
            AND (ABT EQ APMSG 
            OR ABT EQ APPQMSG)
          THEN # TURN OFF TLO FLAG ON HALF DUPLEX CONNECTION           #
            BEGIN 
            ACNBTLO[0] = FALSE;  # CLEAR TEMPORARY LIST OFF FLAG       #
            HUPDDAW(P<ACB>,P<ACNB>,0,ACNBBLKSQ[0]); 
            END 
          NFOB(P<NWLENTRY>,P<NCNB>);
          GOTO PPUT77;
          END 
        END 
  
      HBSTTP(P<ACNB>,RMSG,P<NWLENTRY>); # CALL BLOCK STATE PROCESSOR   #
      GOTO PPUT77;
  
ABT3: 
      CONTROL IFEQ STAT,1;   # STATISTICS ON                           #
      ST$LNB = ST$LNB + 1;   # INCREMENT *LOCAL NON-DATA BLOCKS*       #
      ST$LNC = ST$LNC + NWLTLC[0]; # INC *LOCAL NON-DATA CHARACTERS*   #
      CONTROL FI; 
      IF NWLADR[0] NQ 0 
      THEN
        BEGIN                           # SYN SM                       #
        IF NWLACT[0] NQ  CT8ASCII 
           AND NWLACT[0] NQ CT12ASCII 
        THEN
          BEGIN 
          TEMP = RLG"IA" ;
          GOTO PPUT75 ; 
          END 
        ELSE
          GOTO ABT1;
        END                           # SYN SM                         #
      ELSE
        IF NWLACT[0] NQ CT60TRANS 
        THEN
        BEGIN 
          TEMP = RLG"IA" ;
          GOTO PPUT75 ; 
          END 
  
  
      GOTO UCPPFCSFCJT[INDEX];
  
  
UCPL0:  
#     TURN ON/OFF ACN IN LIST X                                        #
      OVLNAME = HLONOFFP;    # NAME OF OVERLAY PROGRAM TO LOAD         #
      GOTO PPUT76;
  
UCPL1:  
#     SWITCH LISTS                                                     #
      IF ACNBLO[0]
      THEN                   # CONNECTION HAS LIST PROCESSING OFF      #
        BEGIN 
        ACNBLO[0] = FALSE;   # TURN LIST PROCESSING ON FOR NEW LIST    #
        HUPDDAW(P<ACB>,P<ACNB>,0,ACNBBLKSQ[0]);  # UPDATE NO OF DELIV  #
        END 
      ACNBALN[0] = LSTALN[0];# NEW LIST NUMBER FOR CONNECTION          #
      GOTO PPUT77;
  
UCPL2:  
#     SET HALF OR FULL DUPLEX MODE                                     #
      OVLNAME = HLSTDXP;     # NAME OF OVERLAY PROGRAM TO LOAD         #
      GOTO PPUT76;
  
  
UCPL4:  
#     CHANGE INPUT CHARACTER TYPE                                      #
      OVLNAME = HCHGICTP;    # NAME OF OVERLAY PROGRAM TO LOAD         #
      GOTO PPUT76;
  
UCPL5:  
#     CHANGE INACTIVITY TIMER TO APPLICATION SPECIFIED VALUE           #
      OVLNAME = HDCSTMRP;    # NAME OF OVERLAY PROGRAM TO LOAD         #
      GOTO PPUT76;
  
UCPL7:  
      CONTROL IFEQ DEBUG,1; 
      IF KNAMDB[0]
      THEN                   # ACTIVATE DYNAMIC DEBUG CODE             #
        BEGIN 
        OVLNAME = HPDBGSTP;  # CALL DEBUG/STOP PROCESSOR               #
        GOTO PPUT76;
        END 
      CONTROL FI; 
  
UCPL8:  
#     SET DATA TRUNCATION MODE                                         #
      OVLNAME = HDCTRUP;     # NAME OF OVERLAY PROGRAM TO LOAD         #
      GOTO PPUT76;
  
  
UCPL10: 
# 
      PROCESS A PRU/ON SUPERVISORY MESSAGE FROM APPLICATION 
# 
      PARAMP1 = 0 ; 
      HBSTTP(P<ACNB>,PRUONR,P<NWLENTRY>) ;
      IF PARAMP1 EQ 0 
      THEN
        BEGIN              # PRU/ON WAS O.K.                           #
        P<NCNB> = ACNBNCNB[0] ;          # NETWORK CONNECTION TABLE    #
        IF P<NCNB> NQ 0 
        THEN
          BEGIN 
          FOUND = FALSE ; 
          FOR TEMP = 0 STEP NBTFETNO WHILE
                            ( ( TEMP LQ NBTMAXID) 
                            AND NOT FOUND ) 
  
          DO
            BEGIN            # SEARCH FOR NBT ENTRY                    #
            IF NBTHN[TEMP] EQ NCNBHN[0] 
                             AND NBTIUF[TEMP] 
            THEN
              BEGIN                  # HAVE FOUND                      #
              FOUND = TRUE ;
              INDEX = TEMP + OSTFET ;      # INDEX INTO OUTBOUND       #
              END 
            END 
  
          MGETS(2,TEMP,TRUE) ;       # GET 1-WORD BUFFER FOR SPECIAL   #
          P<DRHDRWD> = TEMP ;        # OUT BOUND BUFFER TO PIP         #
          BLKID[0] = PRUSPECID ;     # WITH THIS SPECIAL ID VALUE      #
          P<NHEADER> = TEMP + BLKHSIZE ;   # SET NETWORK HEADER HAS THE#
          NHWORD[0] = P<NCNB> ;      #       NCNB ADDRESS FOR LATER USE#
          P<DRHDRWD> = NBTIN[INDEX] ; # LINK TO PIP-OUTBOUND BUFFER    #
          IF P<DRHDRWD> NQ 0
          THEN
            NEXTPTR[0] = TEMP ;     # NOT THE FIRST ONE IN CHAIN       #
          ELSE
            NBTFIRST[INDEX] = TEMP ;
          NBTIN[INDEX] = TEMP ; 
          OUTREL = TRUE;
  
          END                            # NON - ZERO NCNB             #
  
        END                        # PRU/UN WAS O.K.                   #
      ELSE                   # PRU/ON SUPERVISORY MESSAGE WAS REJECTED #
        BEGIN 
        IF ACNTIS[ACNTINDX] EQ HBPRU
        THEN                 # NEED TO RESTORE BLOCK PROTOCOL STATE    #
          BEGIN 
          HBSTTP(P<ACNB>,HBPRUFN,0);  # CHANGE HOST BLK PROTOCOL STATE #
          END 
        END 
  
      GOTO PPUT77 ; 
  
UCPL13: 
#     PROCESS HOP/DIS, HOP/LG AND HOP/ALT                              #
      IF ATK[ACBAN[0]]
      THEN
        BEGIN                # APPLICATION VALIDATED FOR K-DISPLAY     #
        OVLNAME = HPKDISPP ;
        GOTO PPUT76;         # LOAD AND EXECUTE OVERLAY                #
        END 
      ELSE
        BEGIN 
        TEMP = RLG"ISM";     # RC=7 ILLOGICAL SM                       #
        GOTO PPUT75;  # ISSUE ERR/LGL                                  #
        END 
  
UCPL14A:  
      TRIG = NCONREQ;        # TRIGGER FOR CON/REQ/N                   #
      GOTO UCPL14;
  
UCPL14B:  
      TRIG = ACONREQ;        # TRIGGER FOR CON/REQ/A                   #
      ACNBRC[0] = RCRC"ARC";  # RC=5 APPL REFUSED CONN                 #
      GOTO UCPL14;
  
UCPL14C:  
      IF WORDCOUNT LS RACRSIZE  # IF WORD COUNT LESS THAN 2            #
      THEN
        BEGIN 
        TEMP = RLG"NFI";        # REASON CODE 10                       #
        GOTO PPUT75;            # GENERATE ERRLGL                      #
        END 
      ELSE
        BEGIN 
        TRIG = CONACRQ;      # TRIGGER FOR CON/ACRQ/R                  #
        ACN = 0;
        GOTO UCPL14;
        END 
  
UCPL14D:  
        TRIG = CONENDR ;           # TRIGGER CON/END/R                 #
  
UCPL14: 
# PROCESS CON/REQ/N,A   CON/ACRQ/R AND CON/END/R                       #
      HCSTTP(P<ACB>,ACN,TRIG,P<NWLENTRY>);       # HOST CONN STP      # 
      GOTO PPUT77;
  
UCPL15A:  
      TRIG = INTRSP;         # TRIGGER FOR INTR/RSP                    #
      GOTO UCPL15;
  
UCPL15AA: 
      TRIG = INTRAPL ;                   # TRIGGER FOR INTR/APP        #
      GOTO UCPL15 ; 
  
UCPL15B:  
      TRIG = RFCRST;         # TRIGGER FOR FC/RST                      #
      GOTO UCPL15;
  
UCPL15BB: 
      TRIG = RFCBRK;         # TRIGGER FOR FC/BRK                      #
      GOTO UCPL15;
  
UCPL15C:  
      TRIG = NFCINIT;        # TRIGGER FOR FC/INIT/N                   #
  
UCPL15: 
#     PROCESS INTR/RSP/U, FC/RST/U, FC/BRK/U AND FC/INIT/N  # 
      HBSTTP(P<ACNB>,TRIG,P<NWLENTRY>); 
      GOTO PPUT77;
  
UCPL16: 
#     PROCESS NPD/REL        #
      CONTROL IFEQ DEBUG,1; 
      IF ACBAN[0] NQ PROCAN[NSORD]
      THEN
        BEGIN 
        TEMP = RLG"ISM";     # ILLEGAL SM                              #
        GOTO PPUT75;         # ISSUE ERR/LGL                           #
        END 
      OVLNAME = HPNPDRLP ;
      CONTROL FI ;
      GOTO PPUT76;           # LOAD AND EXECUTE OVERLAY                #
  
UCPL17A:    
#     PROCESS NET/ON/A RESPONSE FROM NVF                               #
      ATNVFA[NETAN[0]] = TRUE ;          # SET NET/ON/A RESPONSE BIT   #
UCPL17B:  
#     PROCESS NET/ON/N RESPONSE FROM NVF                               #
      OVLNAME = HPNONVFP;    # PROCESS NET/ON/R FROM NVF               #
      GOTO UCPL19;
  
UCPL18: 
#     PROCESS SH/ISD (SHUTDOWN)                                        #
      PARAMS1 = P<NWLENTRY> ; 
      OVLNAME = HPSHISDP ;
      GOTO UCPL19;
  
UCPL19A:  
      TRIG = RCRITEN;        # NAM RECEIVES CR/ITE/N FROM NVF          #
      GOTO UCPL19;
  
UCPL19B:  
      TRIG = RCRITEA;        # NAM RECEIVES CR/ITE/A FROM NVF          #
      GOTO UCPL19;
  
UCPL19C:  
      TRIG = RCRRAPN;        # NAM RECEIVES CR/RAP/N FROM NVF          #
      GOTO UCPL19;
  
UCPL19D:  
      TRIG = GCRRAPA;        # NAM RECEIVES CR/RAP/A FROM NVF          #
      GOTO UCPL19;
  
UCPL19E:  
      TRIG = RCRIAPN;        # NAM RECEIVES CR/IAP/N FROM NVF          #
      GOTO UCPL19;
  
UCPL19F:  
      TRIG = GCRIAPA;        # NAM RECEIVES CR/IAP/A FROM NVF          #
      GOTO UCPL19;
  
UCPL19G:  
      TRIG = RCRSWHR;        # NAM RECEIVES CR/SWH/R FROM NVF          #
      GOTO UCPL19;
  
UCPL19H:  
      TRIG = RCRRCNN;        # NAM RECEIVES CR/RCN/N FROM NVF          #
      GOTO UCPL19;
  
UCPL19I:  
      TRIG = RCRTRMR;        # NAM RECEIVES CR/TRM/R FROM NVF          #
      GOTO UCPL19 ; 
  
UCPL19J:  
      TRIG = RCRRCNA ;                 # NAM RECEIVES CR/RCN/A FROM NVF#
      GOTO UCPL19 ; 
  
UCPL19: 
# 
      PROCESS CR/ITE/N,A  CR/RAP/N,A  CR/IAP/N,A  CR/SWH
      CR/RCN/N AND CR/TRM 
      REJECT IF SM IS NOT FROM NVF
# 
      IF ACBAN[0] NQ NVFAN
      THEN
        BEGIN 
        TEMP = RLG"ISM";     # RC=7 ILLOGICAL SM                       #
        GOTO PPUT75;         # ISSUE ERR/LGL                           #
        END 
      IF NWLACT[0] NQ CT60TRANS 
      THEN
        BEGIN 
        TEMP = RLG"IA";      #  INVALID ACT                            #
        GOTO PPUT75;
        END 
      IF PFC[0] EQ CR 
      THEN
        BEGIN 
        ACN = CRACN[0]; 
        HCSTTP(P<ACB>,ACN,TRIG,P<NWLENTRY>);
        GOTO PPUT77;
        END 
      ELSE
        GOTO PPUT76;         # LOAD AND EXECUTE OVERLAY                #
  
  
UCPL20: 
UCPL21: 
      OVLNAME = HPNOFFNP ;
      OVLCALL ; 
  
      GOTO PPUT77 ; 
  
UCPL22A:  
# 
         PROCESSING FNT/DMS 
         PROCESSING FNT/DSM 
# 
      PARAMS1 = TDMS ;
      GOTO UCPL22X ;
UCPL22B:  
# 
      UNUSE ACTION
# 
      GOTO UCPL22X ;
UCPL22C:  
# 
         PROCESSING FNT/IFL 
# 
      PARAMS1= TIFL ; 
      GOTO UCPL22X ;
UCPL22D:  
# 
         PROCESSING FNT/IFR 
# 
      PARAMS1 = TIFR ;
      GOTO UCPL22X ;
UCPL22E:  
# 
         PROCESSING FNT/IAR 
# 
      PARAMS1 = TIAR ;
      GOTO UCPL22X ;
  
UCPL22X:  
      PARAMS2 = ACBAN[0] ;   # ACB OF THE SENDING S.M. APPLICATION     #
      PARAMS3 = P<SUPMSG> ; 
      OVLNAME = HFNTSMP ;    # PROCESS THE FNT S.M. ACCORDINGLY        #
      OVLCALL ; 
      GOTO PPUT77 ; 
  
UCPL23: 
# 
      PROCESSING SAC/NCL SM FROM APPLICATION
# 
      ACBABTC[0] = SACABTC[0] ;                  # SAVE THE ABORT      #
                                                 # CONDITION CODE      #
      GOTO PPUT77 ; 
  
UCPL24: 
# 
      PROCESSING SAF/SAR SM FROM APPLICATION
# 
      PARAMP1 = P<ACB> ;                    # ACB OF SPAWNNING APPL    #
      OVLNAME = HFSPAWNP ;   # PROCESS THE SAF/SAR S.M.                #
      OVLCALL ; 
      GOTO PPUT77 ; 
  
ABT4: 
  
      P<AHEADER> = WLADDR + AIPHSIZE;  # ADDRESS OF ABH                #
      IF (((PFC[0] GQ MNNS AND PFC[0] LQ MXNS) AND
      (ACBAN[0] EQ PROCAN[NSORD])) OR 
      ((PFC[0] GQ MNCS AND PFC[0] LQ MXCS)
      AND (ACBAN[0] EQ PROCAN[CSORD]))) 
      THEN                   # FROM NS OR CS                           #
        BEGIN 
        IF ABHCN[0] NQ 0
        THEN                 # CN NON-ZERO                             #
          TEMP = RLG"ACN";  # RC=4 INVALID ACN                         #
        ELSE
          IF ABHBT[0] NQ APPPN
          THEN             #  BT NOT 4                                 #
            TEMP = RLG"IAB";  # RC=3 ILLEGAL ABT                       #
          ELSE
            BEGIN            # BT = 4                                  #
            IF NWLACT[0] NQ CT8ASCII
            THEN
              TEMP = RLG"IA" ;      # ILLEGAL ACT                      #
            END              # BT = 4                                  #
        IF TEMP NQ 0
        THEN
          GOTO PPUT75;       # ISSUE ERR/LGL                           #
        ELSE
          BEGIN 
           PARAMP1 = P<NWLENTRY> ;
           OVLNAME = NLOPIPP;  #NAME OF OVERLAY TO SEND S M TO PIP     #
           GOTO PPUT76;      # LOAD AND EXECUTE OVERLAY                #
          END 
        END 
      ELSE                   # INVALID SM ON ABT 4                     #
        BEGIN 
        TEMP = RLG"IAB" ;         # ILLEGAL ABT                        #
        GOTO PPUT75;         # ISSUE ERR/LGL                           #
        END 
      GOTO PPUT77;  # EXIT   #
  
UCPL25: 
      IF (PFC[0] EQ IFC OR
          PFC[0] EQ OFC OR
          PFC[0] EQ SET)
      THEN                   # ITS A PRU INTERFACE SUPERVISORY MESSAGE #
        BEGIN 
        HBSTTP(P<ACNB>,PRUMSG,0) ;
        GOTO PPUT77 ; 
        END 
      ELSE
        BEGIN 
        IF PFC[0] EQ IFT
            OR PFC[0] EQ OFT
             OR PFC[0] EQ XFT 
        THEN
          BEGIN 
          IF SFC[0] EQ OFF
           OR PFCSFC[0] EQ XFTIER 
          THEN
            BEGIN 
            TRIG = HXFTOFR;  # TRIGGER FOR HOST CONNECTION STATE TBL   #
            HCSTTP(P<ACB>,ACN,TRIG,P<NWLENTRY>);
            END 
          ELSE
            HBSTTP(P<ACNB>,PRUMSG,P<NWLENTRY>); 
          GOTO PPUT77 ; 
          END 
        ELSE
          BEGIN 
          TEMP = RLG"ISM" ; 
          GOTO PPUT75 ; 
          END 
        END 
  
  
PPUT76: 
      OVLCALL ;              # LOAD AND EXECUTE OVERLAY                #
      IF PARAMS7 NQ 0 
      THEN                   # RETURNED ERROR CODE IS NOT ZERO         #
        BEGIN 
        TEMP = PARAMS7 ;
  
PPUT75: 
        PARAMS1 = TEMP ;     # PROCESS ERROR CODE                      #
        OVLNAME = HLGLERRP ;
        OVLCALL ; 
        END 
  
# 
                    RETURN
# 
PPUT77: 
      IF NWLEID[0] EQ POBIDVALUE
      OR NWLEID[0] EQ HHQIDVALUE
      OR NWLEID[0] EQ PWLIDVALUE
      OR NWLEID[0] EQ DRIDVALUE 
      THEN
                             # BUFFER QUEUED ON PIP OUTBOUND CHAIN
                               OR ON A-A INTRA-HOST QUEUE 
                               OR LINKED ON PCNB
                               OR LINKED ON NCNB
                             #
        BEGIN  # DELINK WORKLIST ENTRY FROM NWL                        #
        HRELPWL;  # RELEASE USED PORTION OF NWL                        #
        END 
      RETURN; 
      END 
 TERM 
