*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
