*DECK HPGET USETEXT NIPDEF USETEXT ACB USETEXT ACNT USETEXT AHEADER USETEXT APPSTAT USETEXT DBGBUF USETEXT NP$TAA USETEXT NWLHEAD USETEXT NWLNTRY USETEXT OVERLAY USETEXT PARAMS PROC HPGET; # PROCESS *NET GET* AND *NET GETL* # STARTIMS; # *1DC HPGET * * 1. PROC NAME AUTHOR DATE * HPGET E. GEE 85/04/10 * * 2. FUNCTIONAL DESCRIPTION. * PROCESS AIP *NETGET*, *NETGETL*, *NETGETF*, AND *NETGTFL* * WORKLIST ENTRIES * * 3. METHOD USED. * IF FRAGMENTED GET CALL, * VALIDATE IT IS CORRECT CALL. * IF GET CALL FOR DATA FROM CONNECTION, * VALIDATE CONNECTION NUMBER IS CORRECT. * IF VALID CALL, * IF ASYNC SUPERVISORY MESSAGE CAN BE DELIVERED, * CALL BDELINK TO DELINK SUPERVISORY MESSAGE FROM ACB DR. * ELSE (CHECK IF DATA MESSAGE CAN BE DELIVERED), * CALL HGETDA TO GET DATA MESSAGE. * UPDATE GET AWL ENTRY. * IF MESSAGE TO DELIVER, * IF TEXT TO WRITE BACK TO APPLICATION TEXT AREA, * IF FRAGMENTED CALL, * CALL HPGTF TO WRITE FRAGMENTED TEXT BACK TO APP. * ELSE (TEXT IS DELIVERED TO ONE BUFFER), * CALL BWLBLK TO WRITE TEXT BACK TO APP TEXT AREA. * ELSE (INVALID GET TYPE CALL), * CALL HLGLERR TO SEND ERR/LGL SUP MSG TO APPLICATION. * * 4. ENTRY PARAMETERS. * WLADDR WORKLIST ENTRY LOCATION * ACBADDR CURRENT APPLICATION"S ACB * NWLOP A GET OR GETL REQUEST * * 5. EXIT PARAMETERS. * AWLADR CONNECTION NUMBER * AWLCB =1,THE COMPLETE BIT * AWLIBU TRUE,IF INPUT BLOCK IS UNDELIVERABLE * AWLRC REASON CODE FOR NETGET RESPONSE * PARAMS1 BAD ACN,TOO MANY FRAGMENTED BUFFERS, * * 6. COMDECKS CALLED AND SYMPL TEXTS USED. * NIPDEF CONSTANT DEFINITIONS * ACB APPLICATION CONTROL BLOCK * ACNB APPLICATION CONNECTION BLOCK * ACNT APPLICATION CONNECTION TABLE * AHEADER APPLICATION BLOCK HEADER WORD * APPSTAT APPLICATION STATUS COMMON BLOCK * AT APPLICATION TABLE * DBGBUF DEBUG BUFFER * DRHDR BUFFER HEADER WORD * NCNB NETWORK CONNECTION BLOCK * NP$NWNC CHARACTER TYPE/WORD CONVERSION TABLE * NP$TAA FRAGMENT TEXT ARRAY * NWLHEAD NETWORK WORKLIST ENTRY HEADER WORD * NWLNTRY NETWORK WORKLIST ENTRY * OVERLAY OVERLAY TABLE * PARAMS PARAMETERS FOR PASSING TO SECONDARY OVERLAY * PT POINTER TABLE * * 7. ROUTINES CALLED. * BDELINK DELINK DATA BLOCK FROM DATA RING * BWLBLK XFER A BLOCK TO THE APP FL * HGETDA GET DATA MESSAGE FOR DELIVERY * HLGLERR OVL FORM AND ENQUEUE LOGICAL ERROR MESSAGE * HPGTF OVL READ FRAGMENTED TEXT INTO NIP-S FL * HRDPUT READ TEXT INTO NIP-S FIELD LENGTH * MRELS RETURN BUFFER TO FREE BUFFER CHAIN * OVLCALL LOAD AND EXECUTE OVERLAY * XTRACE TRACES CALLS * * 8. DAYFILE MESSAGES. NONE * # STOPIMS; # EXTERNAL VARIABLES # XREF BEGIN PROC BDELINK; # DELINK DATA BLOCK FROM DATA RING # PROC BWLBLK; # XFER A BLOCK TO THE APP FL # PROC HGETDA; # GET DATA MESSAGE TO DELIVER # PROC MRELS; # RETURN BUFFER TO FREE CHAIN # PROC OVLCALL; # LOAD AND EXECUTE OVERLAY # PROC XTRACE; # RECORD CALLS # PROC HRDPUT; # READ TEXT OR TEXT DESCRIPTION FROM APP # END # INTERNAL VARIABLES # ITEM ABHWD; # WORD FOR SAVING ABH # ITEM ACNALN; # ACN/ALN IN GET/GETL CALL # ITEM ACNTINDX U ; # ACNT INDEX # ITEM BUFADDR; # ADDR OF BLOCK TO WRITE TO UCP # ITEM ELTAA ; ITEM FOUND B; # RESULT FROM DATA SEARCH SCAN # ITEM FRAG B; # FRAGMENT TYPE CALL FLAG # ITEM I; # INDEX FOR COUNTING FRAG BUF SZ# ITEM LIST B; # LIST NUMBER SCAN FLAG # ITEM OPCODE; # AIP WORKLIST OPCODE # ITEM SEND U; # STATUS FOR SENDING MSG TO APP # ITEM SIZE; # SIZE OF DATA MESSAGE TO DELIVR# ITEM TLW; # TEXT LENGTH IN WORDS # STATUS BLOCKS NULL,DATA,SM; #**********************************************************************# BEGIN CONTROL IFEQ DEBUG,1 ; XTRACE("HPGET") ; CONTROL FI; P = WLADDR; # WORKLIST ADDRESS # P = ACBADDR; # ACB ADDRESS # P = ACBACNT[0] ; # ACNT ADDRESS # ACNALN = NWLADR[0]; # ACN/ALN IN GET/GETL CALL # ACNTINDX = ACNALN + ACNTHSIZE - ACNTMINACN[0] ; ACBAWL0[0] = NWLEAIPH[0]; OPCODE = NWLOP[0] ; FRAG = FALSE; # ASSUME NOT FRAGMENTED CALL # SEND = BLOCKS"NULL"; # ASSUME NULL BLOCK TO BE DELIV # PARAMS1 = 0 ; # VALIDATE NETGETF/NETGTFL CALL # IF (OPCODE EQ WLOPGETF) OR # NETGETF CALL # (OPCODE EQ WLOPGTFL) # NETGTFL CALL # THEN # DELIVER SUP MSGS IF ANY # BEGIN FRAG = TRUE; # SET FRAGMENT CALL FLAG # IF NWLTA[0] NQ 0 THEN # TEXT ARRAY NOT ON WL # BEGIN ELTAA = NWLELTAA[0]; HRDPUT(ELTAA); # READ TEXT # P = WLADDR; # NEW WORKLIST ADDR # END IF ELTAA GR MAXNA THEN # THERE ARE MANY FRAGMENT BUFS # BEGIN PARAMS1 = RLG"RES" ; # FRAG. IO ERROR RETURN # END ELSE # NO OF FRAG BUFS IS OKAY # BEGIN P = WLADDR + FLSIZE ; # TEMPLATE FOR FRAGMENT ENTRY # FOR I = 1 STEP 1 WHILE I LQ ELTAA AND PARAMS1 EQ 0 DO BEGIN IF TAASIZE[I] GQ 64 THEN # SIZE OF FRAG BUF IS TOO LARGE # BEGIN PARAMS1 = RLG"RES" ; # FRAG IO ERROR RETURN CODE # END END END END # VALIDATE NETGET WITH NONZERO ACN CALL # IF (OPCODE EQ WLOPGETL) OR # NETGETL CALL # (OPCODE EQ WLOPGTFL) # NETGTFL CALL # THEN # GET MSG FROM LIST NUMBER CALL # BEGIN LIST = TRUE; END ELSE # GET MSG FROM CON NUMBER CALL # BEGIN LIST = FALSE; IF ACNALN NQ 0 THEN # GET DATA FROM CONNECTION # BEGIN IF (ACNALN GR ACNTHCN[0]) OR # CONNECTION NUMBER TOO LARGE # (ACNALN LS ACNTMINACN[0]) OR # CONNECTION NO TOO SMALL # (ACNTACNB[ACNTINDX] EQ 0) # NONEXISTENT CONNECTION # THEN # BAD CON NUMBER WAS SPECIFIED # BEGIN PARAMS1 = RLG"ACN"; # REASON CODE FOR ERR/LGL SM # END END END IF PARAMS1 EQ 0 THEN # VALID GET TYPE CALL # BEGIN # CHECK IF ASYNCHRONOUS SUPERVISORY MESSAGE CAN BE DELIVERED # ABHWD = 0; # INITIALIZE ABH RESPONSE # IF (ACNALN EQ 0) AND # ALN/ACN ZERO CALL # (ACBDRFP[0] NQ 0) # THERE ARE SUP MSGS QUEUED # THEN # DELIVER SUP MSG TO APP # BEGIN P = ACBDRFP[0] + BLKHSIZE; ABHWD = ABHWORD[0]; # APP BLOCK HEADER WORD # P = LOC(ABHWD); TLW = ABHTLC[0]; # SIZE OF ASYNC SUP MSG IN WDS # IF NWLTLC[0] GQ TLW THEN # BUFFER IS BIG ENOUGH FOR MSG # BEGIN BDELINK(ACBADDR,BUFADDR,TLW); # DELINK SUP MSG # IF ABHABT[0] NQ APPSUP THEN # NOT SUPERVISION BLOCK TYPE # BEGIN ABHABN[0] = 0; # CLEAR ABN IN ABH # END SEND = BLOCKS"SM"; END ELSE # BUFFER IS NOT BIG ENOUGH # BEGIN ABHIBU[0] = 1; # SET IBU BIT IN ABH WORD # END END ELSE # NOT DELIVERING SUP MSG # BEGIN # CHECK IF DATA MESSAGE TO DELIVER # IF LIST OR # GET DATA FROM LIST CALL # (NOT LIST AND ACNALN NQ 0) # GET DATA FROM CON NUM CALL # THEN BEGIN BUFADDR = 0; # SET FLAG FOR NOT COPYING MSG # SIZE = NWLTLC[0]; # APP BUFFER SIZE FOR DATA MSG # HGETDA(BUFADDR,SIZE,ACNALN,LIST,ABHWD); # GET DATA MSG # P = LOC(ABHWD); # ABH WORD OF DELINKED MSG # IF ABHWD NQ 0 THEN # FOUND DATA BLOCK TO DELIVER # BEGIN IF ABHIBU[0] EQ 0 THEN # DATA MSG IS DELIVERABLE # BEGIN SEND = BLOCKS"DATA"; TLW = SIZE - ABHSIZE; # SIZE OF TEXT IN WORDS # END END ELSE # NO DATA BLOCK TO DELIVER # BEGIN ABHADR[0] = ACNALN; # STORE ACN/ALN IN ABH WORD # END END END ACBAWL1[0] = ABHWD; IF SEND NQ BLOCKS"NULL" # MSG TO DELIVER TO APP # THEN # DELIVER MESSAGE TO APP # BEGIN # FOUND MESSAGE TO DELIVER TO APPLICATION # CONTROL IFEQ DEBUG,1; PNVALUE[0] = ACBAN[0]; # APPL. NUMBER # BGETW[BGETP] = PNWORD[0] ; BGETP = BGETP + 1 ; IF BGETP GR 999 THEN BEGIN BGETP = 0; END P = BUFADDR + BLKHSIZE; FOR TRAPINDEX = 0 STEP 1 UNTIL TLW DO BEGIN BGETW[BGETP] = WORD[TRAPINDEX] ; BGETP = BGETP + 1; IF BGETP GR 999 THEN BEGIN BGETP = 0; END END CONTROL FI; IF TLW NQ 0 THEN BEGIN # TEXT WRITEN TO APPL. # # THERE IS TEXT TO WRITE BACK TO APPLICATION TEXT AREA # IF NOT FRAG THEN # NOT FRAGMENT TYPE CALL # BEGIN BWLBLK(BUFADDR,NWLTA[0],TLW) ; END ELSE BEGIN # HPGTF TO PUT DATA INTO # PARAMS1 = BUFADDR ; PARAMS2 = TLW ; OVLNAME = HPGTFP ; OVLCALL ; END END # TEXT WRITTEN TO APPL. # ELSE # NO TEXT TO BE WRITTEN TO APP # BEGIN MRELS(BUFADDR); # RELEASE BUFFER FOR DATA MSG # END END IF DONE THEN BEGIN ACBAWL0C[0] = 1 ; # SET COMPLETE BIT # END END ELSE # APP TO RECEIVE ERR/LGL # BEGIN ACBAWL1[0] = 0 ; # CLEAR AWL RESPONSE WD IN ACB # OVLNAME = HLGLERRP ; # NAME OF OVERLAY TO LOAD # OVLCALL; # LOAD AND EXECUTE OVERLAY # END RETURN; END TERM