*DECK NP$GET USETEXT AIPDEF USETEXT HEADER USETEXT NP$GETS USETEXT NP$MODE *IF DEF,XFR USETEXT NX$ACBF *ENDIF USETEXT NP$NWL USETEXT NP$STAT USETEXT NP$TAA *IF,DEF,DEBUG USETEXT NP$DB *ENDIF PROC NP$GET; *IF DEF,IMS # * * 1. PROC NAME AUTHOR DATE * NP$GET J.C. LEE 78/10/10 * * 2. FUNCTIONAL DESCRIPTION * THIS ROUTINE IS CALLED BY NETGET AND NETGETF TO BUILD A GET * REQUEST IN THE NWL WORKLIST FOR A BLOCK FROM A SPECIFIED * CONNECTION OR LIST IF THERE IS DATA FOR THE APPLICATION QUEUED * IN NIP, OR TO DELIVER A SUPERVISORY MESSAGE IF IT * IS A GET REQUEST ON CONNECTION/LIST ZERO AND SMB IS NOT EMPTY. * * 3. METHOD USED * SEE DOCUMENTATION ON NETGET AND NETPUT. * * 4. ENTRY CONDITIONS * ACLN - APPLICATION CONNECTION / LIST NUMBER. * BS - WORKLIST ENTRY SIZE. * IAM - ROUTINE CURRENTLY EXECUTING. * LOC$HA - ADDRESS OF HEADER AREA. * LOC$TA - ADDRESS OF TEXT ARRAY. * NEXT - NEXT AVAILABLE SPACE POINTER IN WORKLIST. * OPCODE - OPCODE VALUE. * SPACE$LEFT - NUMBER OF CELLS AVAILABLE IN WORKLIST. * * 5. EXIT CONDITIONS * DEFER$GSM - TRUE FOR ADR=0 IF SMB IS EMPTY. * I$FLAG - TRUE IF INPUT DATA QUEUED IN NIP * S$FLAG - TRUE IF A NON-EMPTY SMB OR SM QUEUED IN NIP * LTAA - RESET TO ZERO. * NEXT - RESET TO INITIAL VALUE IF NWL IS SENT TO NIP. * SPACE$LEFT - RESET TO INITIAL VALUE IF NWL IS SENT TO NIP. * * 6. COMDECKS CALLED AND SYMPL TEXTS USED. * AIPDEF NP$CRT NP$DB NP$GETS * NP$MODE NP$NWL NP$STAT * * 7. ROUTINES CALLED * NP$ERR - ERROR PROCESSOR. * NP$GSM - DELIVER A SUPERVISORY MESSAGE TO APPLICATION. * NP$SEND - SEND NWL TO NIP. * NP$SN - UPDATE STATISTICS COUNTERS. * NP$UCV - UPDATE NWL CONTROL VARIABLES * NP$USI - UPDATE S AND I BITS IN NSUP WORD * * 8. DAYFILE MESSAGES * NETWORK APPLICATION ABORTED, RC = 31. * NP$GET: REQUEST INVALID BEFORE NETON. * * NETWORK APPLICATION ABORTED, RC = 42. * NP$GET: PREVIOUS REQUEST INCOMPLETE. * * # *ENDIF BEGIN *CALL NP$CRT # ROUTINES CALLED # XREF BEGIN PROC NP$ERR; # ERROR PROCESSOR # PROC NP$GSM; # DELIVER A SM TO APP # PROC NP$SEND; # SEND NWL TO NIP # *IF DEF,STAT PROC NP$SN; # INCREMENT STATISTICS COUNTERS# *ENDIF PROC NP$UCV; # UPDATE CONTROL VARIABLES # PROC NP$USI; # UPDATE S AND I BITS IN NSUP # *IF,DEF,XFR PROC NP$ITMG ; # INTERCEPT MESSAGE # *ENDIF END # LOCAL VARIABLES # ITEM I I; *IF,DEF,STAT ITEM NULLBLK B; # SEND NULL BLOCK TO APP FLAG # *ENDIF *IF,DEF,XFR ITEM TEMP$HA U ; # TEMP LOCATION FOR TRUE ABH # ITEM TEMP$TA U ; # TEMP LOACTION FOR TRUE TEXT # *ENDIF #**********************************************************************# # NP$GET EXECUTION BEGINS HERE # *IF DEF,STAT # UPDATE STATISTICS IF STAT IS TURNED ON # NP$SN(IAM); # INCREMENT STATISTICS COUNTER # *ENDIF IF NOT ACCEPTED THEN NP$ERR("31"); # REQUEST INVALID BEFORE NETON. # IF DEFER$PRO THEN NP$ERR("42"); # PREVIOUS REQUEST INCOMPLETE. # *IF DEF,DEBUG # SET UP PARAMETERS FOR DEBUG MESSAGE LOGGING # DB$OP = OPCODE; # NWL OP CODE # *ENDIF # HA IS INITIALIZED TO CONTAIN A NULL BLOCK HEADER # *IF,DEF,XFR TEMP$HA = LOC$HA ; # SAVE THE TRUE APPL ABH # TEMP$TA = LOC$TA ; # AND THE TRUE APPL TEXT AREA # MSGFORAP = FALSE; # ASSUMING MSG NOT FOR APPL. # FOR I = I WHILE NOT MSGFORAP # LOOP TO GET UNTIL OBTAIN A # DO # MESSAGE FOR APPLICATION # BEGIN *ENDIF I = NEXT + 1; ABH[I] = 0; ABH$ADR[I] = ACLN; P
= LOC$HA; # HEADER ADDRESS # ABHWORD[0] = ABH[I]; # IF THERE IS DATA QUEUED IN NIP FOR THIS APPLICATION, THEN BUILD A GET WORKLIST ENTRY FOR A NON-ZERO ACN, OR FOR A LIST ZERO REQUEST WHEN AIP"S SMB DOES NOT CONTAIN SUPERVISORY MSG. # IF HEAD NQ FOOT AND # AIP HAS SUP MSG QUEUED # ACLN EQ 0 # APP WILL ACCEPT SUP MSG # THEN # DELIVERED QUEUED SUP MSG # BEGIN NP$GSM; # GET SUPERVISORY MESSAGE # END ELSE # NEED TO GET MSG FROM NIP # BEGIN *IF,DEF,STAT NULLBLK = TRUE; # INIT FLAG TO RETURN NULL BLOCK# *ENDIF IF NOT AIPQONLY THEN # OKAY TO SEND WORKLIST TO NIP # BEGIN IF (ACLN EQ 0 ) AND (SD$FLAG NQ 0) THEN # SENT GETSM WORKLIST ONLY # BEGIN DEFER$GSM = TRUE; # SET DEFERRED GET SUP MSG FLAG # *IF,DEF,STAT NULLBLK = FALSE; # NOT RETURNING NULL BLOCK # *ENDIF END ELSE # CHECK IF NIP HAS DATA TO GET # BEGIN IF ( (LIST ) AND (WD$FLAG ) ) OR ( (NOT LIST ) AND (ACLN NQ 0 ) AND (ID$FLAG NQ 0) ) THEN # SEND GET/GETL WORKLIST TO NIP # BEGIN N$GETAWL[0] = 1; # AWL RESPONSE TO PROCESS # NWL$ID[NEXT] = AWLID; NWL$OP[NEXT] = OPCODE; ABH$TLC[I] = 4095; IF TLMX LS 4095 THEN # BUF LESS THAN MAXIMUM SIZE # BEGIN ABH$TLC[I] = TLMX; END # UPDATE NWL HEADER AND CONTROL VARIABLES # NP$UCV; *IF,DEF,STAT NULLBLK = FALSE; *ENDIF END END END # SEND WORKLIST TO NIP # NP$SEND; # SEND WORKLIST # *IF,DEF,STAT IF NULLBLK THEN # RETURN NULL BLOCK TO APP # BEGIN NP$SN(TYPE"INB"); # UPDATE AIP STATISTICS # END *ENDIF END # UPDATE I, S, AND D BITS IN NSUP WORD # NP$USI; *IF,DEF,XFR # IF FILE TRANSFER CONNECTION IS OUTSTANDING AND BLOCK RETURNED IS NOT A NULL BLOCK AND IBU BIT NOT ON, THEN INTERCEPT THIS BLOCK. # P
= LOC$HA ; # HEADER OF NEW MESSAGE # IF NUMFILEXFR NQ 0 AND ABHABT[0] NQ 0 # NOT A NULL BLOCK # AND ABHIBU[0] NQ 1 # NOT IBU # AND ABHADR[0] EQ 0 # SUPERVISORY MSG ONLY # THEN BEGIN NP$ITMG ; # INTERCEPT THIS MESSAGE # LOC$HA = TEMP$HA ; # RESTORE THE APPLICATION ABH # LOC$TA = TEMP$TA ; # RESTORE THE APPLICATION TA # OPCODE = OP$GET ; *IF DEF,STAT,1 IAM = TYPE"GET" ; END ELSE MSGFORAP = TRUE ; # MSG GOTTEN IS FOR APPLICATION# NWL$TA[NEXT] = LOC$TA ; END # LOOP TO GET # *ENDIF IF NOT DEFER$GSM THEN LTAA = 0; RETURN; END # NP$GET # TERM