*DECK NETGETQ USETEXT AIPDEF USETEXT HEADER USETEXT NP$DB USETEXT NP$GETS USETEXT NP$MODE USETEXT NP$NWL USETEXT NP$STAT *IF,DEF,XFR USETEXT NX$ACBF *ENDIF PROC NETGETQ((ADR),HA,ATA,(TLMAX),OPTWD); # *1DC NETGETQ * * 1. PROC NAME AUTHOR DATE * NETGETQ E. GEE 05/05/85 * * 2. FUNCTIONAL DESCRIPTION. * THIS ROUTINE GETS DATA OR SUPERVISORY MESSAGES FROM EITHER * AIP-S OR NIP-S DATA OR SUPERVISORY MESSAGE BUFFER. * * 3. METHOD USED. * IF APPLICATION HAS ALREADY NETTED ON, * IF APPLICATION WANTS DATA ONLY AND EITHER WANTS ONLY * DATA QUEUED IN AIP OR AIP HAS DATA QUEUED, * CALL NP$GETQ TO GET THE DATA. * ELSE (APPLICATION DOES NOT WANT DATA ONLY), * IF APPLICATION WANTS SUPERVISORY MESSAGES ONLY, * CALL NP$GET TO GET THE SUP MSG. * ELSE (APPLICATION WANTS EITHER DATA OR SUP MSG), * IF AIP DOES NOT HAVE ANY SUP MSGS QUEUED AND EITHER * THE APP WANTS MSGS ONLY FROM AIP-S BUFFERS OR * AIP HAS DATA QUEUED AND EITHER THE APP WANTS * AIP-QUEUED DATA MORE THAN SUP-MSGS QUEUED IN * NIP OR NIP HAS NO SUP MSGS QUEUED, * CALL NP$GETQ TO GET DATA FROM AIP-S BUFFER. * ELSE (DELIVER SUP MSG QUEUED IN AIP/NIP OR DATA * QUEUED IN NIP), * CALL NP$GET TO GET THE SUP MSG OR DATA. * IF DELIVERED SUP MSG IS FC/BRK, * CALL NP$GETQ TO DISCARD MSGS FOR THAT CON. * ELSE (APPLICATION HAS NOT NETTED ON YET), * CALL NP$ERR TO ISSUE DAYFILE MSG AND ABORT APP. * * 4. ENTRY CONDITIONS. * ADR CONNECTION/LIST NUMBER * HA ADDR OF WORD TO RECEIVE APP BLK HEADER * ATA ADDR OF BUFFER TO RECEIVE THE TEXT * TLMAX SIZE OF BUFFER IN WORDS * OPTWD ADDR OF WORD TO PROVIDE ADDITIONAL OPTIONS * FOR THE CALL. THE FOLLOWING BITS (BIT 0 = * RIGHTMOST BIT) IN THAT WORD ARE USED. * BIT 0 = 0 GET DATA OR SUP MSG FROM AIP-S * OR NIP-S BUFFERS. * = 1 GET DATA OR SUP MSG FROM AIP-S * BUFFER ONLY. * BIT 1 = 0 DELIVER SUP MSGS FIRST EVEN IF * DATA MSGS ARE QUEUED IN UPLINE * DATA BUFFER. * BIT 1 = 1 DELIVER DATA QUEUED IN UPLINE * DATA BUFFER FIRST EVEN IF SUP * MSGS ARE QUEUED IN NIP. * 5. EXIT CONDITIONS. * HA CONTAIN NULL BLOCK IF NOT DATA/SUP MSG WAS * AVAILABLE. OTHERWISE, IT WILL CONTAIN THE * APP BLOCK HEADER OF THE MESSAGE. * ATA CONTAINS TEXT OF MESSAGE IF ONE WAS * DELIVERED. * * 6. COMDECKS AND SYMPL TEXT USED. * AIPDEF CONSTANT DEFINITIONS * HEADER ABH AND SUP MSG TEMPLATES * NP$DB UPLINE DATA BUFFER TEMPLATE * NP$GETS GLOBAL VARIABLES * NP$MODE GLOBAL VARIABLES * NP$NWL NETWORK WORKLIST TABLE * NP$STAT STATISTICS TABLE * NX$ACBF FILE TRANSFER TABLE * * 7. PROCEDURES/FUNCTIONS CALLED. * NP$ERR ISSUE ERROR MSG AND ABORT APP * NP$GET GET DATA/SUP MSG FROM AIP/NIP * NP$GETQ GET DATA MSG IN GMM BUFFER * NP$SN INCREMENT AIP STATISTICS * * 8. DAYFILE MESSAGES OR OTHER IMPORTANT INFORMATION. * THIS PROGRAM HAS A SECOND ENTRY POINT NETGTLQ FOR GETTING * DATA FROM A CONNECTION ON LIST ADR. * * * APPLICATION ABORTED, RC = 52. * * * NETFUNC: INVALID FUNCTION CODE USED. * # BEGIN # EXTERNAL ROUTINES CALLED # XREF BEGIN PROC NETXFRC; # FILE TRANSFER COMPLETE ROUTINE# PROC NP$ERR; # ISSUE ERROR MSG AND ABORT APP # PROC NP$GET; # GET DATA/SUP MSG FROM AIP/NIP # PROC NP$GETQ; # GET DATA MSG IN GMM BUFFER # PROC NP$SN; # INCREMENT AIP STATISTICS # END # INPUT VARIABLES # ITEM ADR; # CONNECTION/LIST NUMBER # ITEM HA; # APPLICATION BLOCK HEADER ADDR # ITEM ATA; # APPLICATION TEXT AREA ADDRESS # ITEM TLMAX; # MAXIMUM TEXT LENGTH # ARRAY OPTWD S(1); # ADDR OF WD CONTAINING OPTIONS # BEGIN ITEM OPTWDD B(0,58,01); # GET DATA FROM QUEUE BEFORE # # GETTING SUP MSG FROM NIP # ITEM OPTWDQ B(0,59,01); # GET MSG FROM DATA QUEUE ONLY # END # LOCAL VARIABLES # ITEM GETQDATA B; # GET-DATA-FROM-AIP-BUF FLAG # ITEM GMMSC; # SEARCH CODE FOR NP$GETQ CALL # #**********************************************************************# CONTROL EJECT; # EXECUTABLE CODE BEGINS HERE # IF NOT ACCEPTED THEN # APPLICATION HAS NOT NETTED ON # BEGIN NP$ERR("36"); # ISSUE DAYFILE MSG AND ABORT AP# END OPCODE = OP$GET; # GET DATA FOR CONNECTION OPCODE# *IF,DEF,STAT IAM = TYPE"GETQ"; # TYPE OF AIP CALL # *ENDIF GETQDATA = FALSE; AIPQONLY = OPTWDQ[0]; # GET-MSGS-FROM-AIP-BUF-ONLY FLG# PRIDATA = OPTWDD[0]; # GIVE-PRIORITY-TO-AIP-DATA FLAG# IF (ADR NQ 0 ) AND (GMBHEAD NQ GMBFOOT) THEN # WANT TO GET DATA FROM AIP BUF # BEGIN GETQDATA = TRUE; # SET GET-DATA-FROM-AIP-BUF FLAG# END *IF,DEF,DEBUG DB$CALL = LOC(NETGETQ); # TRACE CALLING ADDRESS # *ENDIF GMMSC = GMMSCN; # GET DATA FOR CONNECTION # LIST = FALSE; # SET FLAG FOR NOT LIST PROCESS # GOTO NETGETQ1; ENTRY PROC NETGTLQ((ADR),HA,ATA,(TLMAX),OPTWD); IF NOT ACCEPTED THEN # APPLICATION HAS NOT NETTED ON # BEGIN NP$ERR("37"); # ISSUE DAYFILE MSG AND ABORT AP# END OPCODE = OP$GETL; # GET DATA FOR LIST OPCODE # *IF,DEF,STAT IAM = TYPE"GTLQ"; # TYPE OF AIP CALL # *ENDIF GETQDATA = FALSE; AIPQONLY = OPTWDQ[0]; # GET-MSGS-FROM-AIP-BUF-ONLY FLG# PRIDATA = OPTWDD[0]; # GIVE-PRIORITY-TO-AIP-DATA FLAG# IF ( (ADR EQ 0 ) AND (HEAD EQ FOOT ) AND ( (GMBHEAD NQ GMBFOOT) AND ( (SD$FLAG EQ 0) OR (PRIDATA ) ) ) ) OR ( (ADR NQ 0 ) AND (GMBHEAD NQ GMBFOOT) ) THEN # WANT TO GET DATA FROM AIP BUF # BEGIN GETQDATA = TRUE; # SET GET-DATA-FROM-AIP-BUF FLAG# END *IF,DEF,DEBUG DB$CALL = LOC(NETGTLQ); # TRACE CALLING ADDRESS # *ENDIF GMMSC = GMMSLN; # GET DATA FOR LIST NUMBER # LIST = TRUE; # SET FLAG FOR LIST PROCESSING # NETGETQ1: # STORE INPUT PARAMETERS IN COMMON BLOCK # *IF,DEF,DEBUG DB$OP = OPCODE; # OPCODE FOR TYPE OF CALL # *ENDIF ACLN = ADR; # CONNECTION/LIST NUMBER # LOC$HA = LOC(HA); # ADDRESS FOR APPL BLK HEADER # LOC$TA = LOC(ATA); # ADDRESS FOR DATA # TLMX = TLMAX; # MAXIMUM TEXT LENGTH ALLOWED # P
= LOC$HA; # ADDR OF ABH OF UPLINE MSG # ABHABT[0] = APPNULL; # INITIALIZE BLOCK TYPE FIELD # IF GETQDATA THEN # ONLY WANT DATA QUEUED IN AIP # BEGIN NP$GETQ(GMMSC); # GET DATA MSG QUEUED IN AIP # END IF ABHABT[0] EQ APPNULL # NO MESSAGES IN AIP DATA QUEUE # THEN # GET MSG FROM AIP SM QUEUE/NIP # BEGIN # OR ANY TYPE OF MSG FROM NIP # NWL[NEXT] = 0; # CLEAR NWL OPCODE WORD # NWL$TA[NEXT] = LOC$TA; # ADDR TO WRITE TEXT TO # BS = OPABHSIZ; # SIZE OF WORKLIST ENTRY # NP$GET; P = LOC$TA; # ADDR OF TEXT OF UPLINE MSG # IF (PFCSFC[0] EQ FCBRK ) AND # DELIVERED UPLINE FC/BRK S M # (ABHABT[0] EQ APPCMD) AND # DELIVERED SUPERVISORY MESSAGE # (ABHADR[0] EQ 0 ) # ASYNC SUPERVISORY MESSAGE # THEN # NEED TO GET RID OF MSG IN QUE # BEGIN ACLN = SPACN[0]; # CONNECTION NUMBER OF FC/BRK # NP$GETQ(GMMDCN); # DISCARD MSGS IN QUEUE # END END *IF DEF,XFR IF NUMFILEXFR NQ 0 THEN # FILE TRANSFER OUTSTANDING # BEGIN NETXFRC; # CONTINUE TRANSFERRING FILE # END *ENDIF RETURN; END TERM