*DECK NETGETF USETEXT AIPDEF USETEXT NP$GETS USETEXT NP$MODE USETEXT NP$NWL USETEXT NP$STAT USETEXT NP$TAA *IF,DEF,DEBUG USETEXT NP$DB *ENDIF PROC NETGETF((ADR),HA,(NA),TAAA); *IF DEF,IMS # *1DC NETGETF * * 1. PROC NAME AUTHOR DATE * NETGETF J.C. LEE 78/10/10 * NETGTFL * * 2. FUNCTIONAL DESCRIPTION * THIS ROUTINE BUILDS A NETGETF OR A NETGTFL REQUEST IN THE * NWL WORKLIST, FOR A BLOCK FROM THE SPECIFIED CONNECTION OR * LIST. REQUESTS FOR SUPERVISORY MESSAGES MAY BE MADE ON * CONNECTION / LIST ZERO. * * 3. METHOD USED * IF THE APPLICATION IS USING THE UPLINE DATA QUEUE FEATURE, OR * THE DOWNLINE BUFFERING FEATURE, THIS PROGRAM CANNOT BE CALLED. * A NETGETF ENTRY IS BUILT IN THE WORKLIST FOR A NON-ZERO ACN. * A NETGTFL IS BUILT IN THE WORKLIST FOR ALL ALN. * A NETGTFL MAY HAVE ONE OF THE FOLLOWING FORMAT: * * 1. I-----------------------------------------------------I * I OP CODE WORD WITH A NON-ZERO LOC OF TEXT AREA ARRAY I * I-----------------------------------------------------I * I ABH WORD CONTAINING TLMAX AND THE CONNECTION NO I * I-----------------------------------------------------I * * 2. I-----------------------------------------------------I * I OP CODE WORD WITH A ZERO LOC OF TEXT AREA ARRAY I * I-----------------------------------------------------I * I ABH WORD CONTAINING TLMAX AND THE CONNECTION NO I * I-----------------------------------------------------I * I A NULL WORD - SO THAT NIP DOES NOT NEED ALLOCATE I * I ANOTHER BUFFER TO SF.LIST THE TEXT AREA ARRAY. (AN I * I SF.LIST REQUIRES TWO SUBSYSTEM FUNCTION PARAMETER I * I WORDS PLUS A WORD FOR NIP"S BUFFER HEADER. I * I-----------------------------------------------------I * I TEXT AREA ARRAY CONTAINING SIZES AND LOCATIONS OF I * I EACH FRAGMENTED BUFFERS. I * I-----------------------------------------------------I * * THE TEXT AREA ARRAY CONTAINING SIZES AND LOCATIONS OF BUFFER * FRAGMENTS, IS COPIED TO THE NWL IF THERE IS ENOUGH ROOM: * 2 HEADER WORDS (OP, ABH) + A NULL WORD + LTAA + 2 WORDS FOR A * GSM ENTRY. FOR A GETF/GTFL ON A ZERO ACN/ALN, A MESSAGE IS * DELIVERED FROM THE SMB, VIA NP$GSM. * * 4. ENTRY CONDITIONS * ADR - APPLICATION CONNECTION NUMBER / APPLICATION LIST NUMBER * HA - HEADER AREA * NEXT - NEXT AVAILABLE SPACE POINTER FOR WORKLIST * SPACE$LEFT - NUMBER OF CELLS AVAILABLE IN NWL * NA - NUMBER OF FRAGMENTED BUFFERS * TAA - TEXT AREA ARRAY * * 5. EXIT CONDITIONS * DEFER$GSM - TRUE FOR ADR=0 IF SMB IS EMPTY * LTAA - RESET TO ZERO * NEXT - NEXT AVAILABLE SPACE POINTER, RESET TO INITIAL VALUE * SPACE$LEFT - NUMBER OF CELLS AVAILABLE IN WORKLIST, RESET TO * INITIAL VALUE. * * 6. COMDECKS CALLED AND SYMPL TEXTS USED. * AIPDEF NP$CRT NP$DB NP$GETS * NP$NWL NP$STAT NP$TAA * NP$MODE * * 7. ROUTINES CALLED * NP$GET - PROCESS A GET REQUEST. * * 8. DAYFILE MESSAGES * * NETWORK APPLICATION ABORTED, RC = 55. * * * NETGETF: REQUEST INVALID FOR DATA QUEUE. * * * * NETWORK APPLICATION ABORTED, RC = 56. * * * NETGTFL: REQUEST INVALID FOR DATA QUEUE. * * # *ENDIF BEGIN *CALL NP$CRT CONTROL LIST; # ROUTINES CALLED # XREF BEGIN PROC NP$ERR; # ISSUE ERR MSG AND ABORT APP # PROC NP$GET; END # LOCAL VARIABLES # ITEM ADR I, # APP CONNECTION / LIST NO # HA I, # HEADER ADDRESS # NA I, # NO OF FRAGMENTED BUFFERS # NAA I, # TEMPORARY VARIABLE # TAAA I, # TEXT ARRAY AREA ADDRESS # I I, # TEMPORARY VARIABLE # J I; # TEMPORARY VARIABLE # #**********************************************************************# # NETGETF EXECUTION BEGINS HERE # OPCODE = OP$GETF; *IF,DEF,STAT IAM = TYPE"GETF"; IF GMBUSE OR DOWNUSE # UPLINE DATA QUEUE OR DOWNLINE# THEN # BUFFER FEATURE BEING USED. # BEGIN NP$ERR("55"); # ABORT APP WITH ERROR MESSAGE # END LIST = FALSE; # SET FLAG FOR NOT LIST PROCESS# *ENDIF GOTO NETGTF1; ENTRY PROC NETGTFL((ADR),HA,(NA),TAAA); OPCODE = OP$GTFL; *IF,DEF,STAT IAM = TYPE"GTFL"; IF GMBUSE OR DOWNUSE # UPLINE DATA QUEUE OR DOWNLINE# THEN # BUFFER FEATURE BEING USED # BEGIN NP$ERR("56"); # ABORT APP WITH ERROR MESSAGE # END LIST = TRUE; # SET FLAG FOR LIST PROCESSING # *ENDIF NETGTF1: NAA = NA; # STORE INPUT PARAMETERS IN COMMON BLOCK # ACLN = ADR; LOC$HA = LOC(HA); LOC$TA = LOC(TAAA); TLMX = 0; LTAA = NAA; *IF DEF,DEBUG NP$NA = NA; *ENDIF P = LOC$TA; FOR I=1 STEP 1 UNTIL NA DO TLMX = TLMX + TAASIZE[I]; *IF DEF,DEBUG # SET UP PARAMETERS FOR DEBUG MESSAGE LOGGING # IF OPCODE EQ OP$GETF THEN DB$CALL = LOC(NETGETF); ELSE DB$CALL = LOC(NETGTFL); *ENDIF # SET UP GETF OR GTFL NWL ENTRY # NWL[NEXT] = 0; # CLEAR NWL OPCODE WORD # BS = OPABHSIZ; # INITIALIZE NWL ENTRY SIZE # NWL$LTAA[NEXT] = NAA; # LENGTH OF TEXT AREA ARRAY # IF NA LQ (SPACE$LEFT - GMMESIZE - NTRYSIZ3 - OPABHSIZ) AND NAA LQ MAXNA THEN # SPACE AVAILABLE IN NWL FOR # BEGIN # TEXT AREA ARRAY # BS = NA + NTRYSIZ3; # RESET NWL ENTRY SIZE # I = NEXT + NTRYSIZ3 - 1; FOR J=1 STEP 1 UNTIL NA DO # COPY TAA TO NWL # NWL[I+J] = TAAWORD[J]; END ELSE NWL$TA[NEXT] = LOC$TA; # TAA CANNOT FIT INTO NWL # NP$GET; # VALIDATE CALL AND SET UP # RETURN; END # NETGETF # TERM