*DECK NETGET
USETEXT AIPDEF
USETEXT NP$GETS
USETEXT NP$MODE
USETEXT NP$NWL
USETEXT NP$TAA
USETEXT NP$STAT
*IF DEF,XFR
USETEXT NX$ACBF
*ENDIF
*IF,DEF,DEBUG
USETEXT NP$DB
*ENDIF
PROC NETGET((ADR),HA,ATA,(TLMAX)) ;
*IF DEF,IMS
#
*1DC NETGET
*
* 1. PROC NAME AUTHOR DATE
* NETGET J.C. LEE 78/10/10
* NETGETL
*
* 2. FUNCTIONAL DESCRIPTION
* THIS ROUTINE BUILDS A NETGET OR A NETGETL REQUEST IN THE
* NWL WORKLIST, FOR A BLOCK FROM A 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,
* THIS PROGRAM CANNOT BE CALLED.
* A NETGET ENTRY IS BUILD IN THE WORKLIST FOR A NON-ZERO ACN.
* A NETGETL ENTRY IS BUILT IN THE WORKLIST FOR ALL ALN(S). FOR
* A GET/GETL ON A ZERO ACN/ALN, A MESSAGE IS DELIVERED FROM
* THE SMB (SUPERVISORY MESSAGE BUFFER), VIA NP$GSM. IF THE SMB
* IS EMPTY, THEN A GSM WORKLIST ENTRY IS SENT TO NIP. IN THIS
* CASE IF DEFER$PRO IS TRUE, THEN DEFER$GSM IS SET TO TRUE TO
* INDICATE THAT THE APPLICATION HAS ASKED FOR A SUPERVISORY
* MESSAGE.
*
* 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.
* ATA - APPLICATION TEXT AREA.
* TLMAX - MAXIMUM LENGTH OF DATA BLOCK.
*
* 5. EXIT CONDITIONS
* DEFER$GSM - TRUE FOR ADR = 0 IF SMB IS EMPTY.
* 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$GETS NP$NWL
* NP$TAA NP$STAT
* NP$MODE
*
* 7. ROUTINES CALLED
* NP$GET - PROCESS A GET REQUEST.
*
* 8. DAYFILE MESSAGES
* * NETWORK APPLICATION ABORTED, RC = 53. *
* * NETGET: REQUEST INVALID FOR DATA QUEUE. *
*
* * NETWORK APPLICATION ABORTED, RC = 54. *
* * NETGETL: REQUEST INVALID FOR DATA QUEUE. *
*
#
*ENDIF
BEGIN
*CALL NP$CRT
#
ROUTINES CALLED
#
XREF
BEGIN
PROC NP$ERR; # ISSUE ERR MSG AND ABORT APP #
PROC NP$GET;
*IF,DEF,XFR
PROC NETXFRC;
*ENDIF
END
#
LOCAL VARIABLES
#
ITEM
ADR I, # APP CONNECTION / LIST NO #
HA I, # HEADER ADDRESS #
TLMAX I; # MAXIMUM TEXT LENGTH #
DEF MAXTEXT #511#; # MAX MESSAGE SIZE ALLOWED #
ARRAY ATA [0:MAXTEXT] S(1) ;
ITEM WORD I (0);
#**********************************************************************#
#
NETGET EXECUTION BEGINS HERE
#
OPCODE = OP$GET;
*IF,DEF,STAT
IAM = TYPE"GET";
*ENDIF
IF GMBUSE
THEN # UPLINE DATA QUEUE BEING USED #
BEGIN
NP$ERR("53"); # ABORT APP WITH ERROR MESSAGE #
END
LIST = FALSE; # SET FLAG FOR NOT LIST PROCESS#
GOTO NETGET1;
ENTRY PROC NETGETL((ADR),HA,ATA,(TLMAX)) ;
OPCODE = OP$GETL;
*IF,DEF,STAT
IAM = TYPE"GETL";
*ENDIF
IF GMBUSE
THEN # UPLINE DATA QUEUE BEING USED #
BEGIN
NP$ERR("54"); # ABORT APP WITH ERROR MESSAGE #
END
LIST = TRUE; # SET FLAG FOR LIST PROCESSING #
#
STORE INPUT PARAMETERS IN COMMON BLOCK
#
NETGET1:
ACLN = ADR;
LOC$HA = LOC(HA);
LOC$TA = LOC(ATA) ;
TLMX = TLMAX;
*IF DEF,DEBUG
#
SET UP PARAMETERS FOR DEBUG MESSAGE LOGGING
#
IF OPCODE EQ OP$GET
THEN
DB$CALL = LOC(NETGET);
ELSE
DB$CALL = LOC(NETGETL);
*ENDIF
NWL[NEXT] = 0; # CLEAR NWL OPCODE WORD #
NWL$TA[NEXT] = LOC$TA;
BS = OPABHSIZ; # SET NWL ENTRY SIZE #
NP$GET; # VALIDATE CALL AND SET UP #
*IF,DEF,XFR
IF NUMFILEXFR NQ 0 # FILE TRANSFER OUTSTANDING #
THEN
NETXFRC; # CONTINUE TRANSFERRING FILE #
*ENDIF
RETURN;
END # NETGET #
TERM