*DECK APSTOR                       26MAY81
USETEXT COMCBEG 
USETEXT COMCAPR 
USETEXT COMCCAE 
USETEXT COMQDEF 
USETEXT COMQFIL 
USETEXT COMQNET 
    PROC APSTOR (BUFF1,ATTR1,QUAL1,TEXTL1,TEXT1); 
      BEGIN    # APSTOR # 
# 
**    APSTOR     ADD ATTRIBUTE TO NETWORK MESSAGE.
* 
*     APSTOR ADDS THE SPECIFIED ATTRIBUTE TO THE NETWORK MESSAGE BEING
*     BUILT FOR A CONNECTION.  APSTOR OBTAINS A NEW BUFFER IF THERE IS
*     NO ROOM FOR TH NEW ATTRIBUTE. 
* 
*     PROC APSTOR 
* 
*     ENTRY      ATTR1 = ATTRIBUTE. 
*                BUFF1 = CURRENT BUFFER.
*                QUAL1 = ATTRIBUTE QUALIFIER. 
*                TEXTL1 = TEXT LENGTH.
*                TEXT1 = TEXT.
*                NTA$ = CURRENT TEXT AREA.
* 
*     EXIT       NHA$LNK, NHA$B, NTA$B UPDATED IF NEW BUFFER OBTAINED.
* 
*     PROCESS    CALL APSTORE TO STORE ATTRIBUTE IN CURRENT BUFFER
*                IF ATTRIBUTE DOES NOT FIT IN BUFFER: 
*                  CALL CMMALF TO OBTAIN NEW BUFFER 
*                  MOVE COMMAND FROM CURRENT TO NEW BUFFER
*                  CALL APSTORE TO STORE ATTRIBUTE IN NEW BUFFER. 
# 
  
      ITEM ATTR1      U;             # ATTRIBUTE #
      ITEM BUFF1      U;             # NETWORK TEXT BUFFER #
      ITEM QUAL1      C(1);          # QUALIFIER #
      ITEM TEXTL1     U;             # LENGTH OF TEXT # 
      ITEM TEXT1      C(240);        # TEXT # 
  
# 
****  XREF
# 
      XREF
        BEGIN 
        FUNC ACFETCH; 
        PROC ACSTORE; 
        FUNC APSTORE; 
        PROC CMMALF;
        PROC MESSAGE;              # DAYFILE MESSAGE #
        PROC NAME;                 # DEBUG CODE # 
        FUNC YCDZ C(10);           # CONVERT OCTAL TO DISPLAY # 
        END 
# 
****  XREF END
# 
  
  
      ITEM FLG        U;
      ITEM SCMD       U;
  
      ARRAY  SC [1:2]  S(1);
        BEGIN 
        ITEM SCR        U(00,00,60);  # ENTIRE WORD # 
        END 
  
  
      $BEGIN
      ARRAY DEBUGM S(5);
        BEGIN 
        ITEM DEBUGM0 C(0,00,10) = ["APSTOR ATT"]; 
        ITEM DEBUGM1 C(1,00,10) = ["RIBUTE =  "]; 
        ITEM DEBUGAT C(2,00,02);
        ITEM DEBUGM2 C(2,12,08) = [", QUAL ="]; 
        ITEM DEBUGM3 C(3,00,01) = [" "];
        ITEM DEBUGQL C(3,06,01);
        ITEM DEBUGM4 C(3,12,08) = [", LENGTH"]; 
        ITEM DEBUGM5 C(4,00,03) = [" = "];
        ITEM DEBUGLN C(4,18,03);
        ITEM DEBUGM6 C(4,36,01) = ["."];
        ITEM DEBUGM7 U(4,42,18) = [0];
        END 
  
        DEBUGAT = YCDZ(ATTR1, 2); 
        DEBUGQL[0] = QUAL1;        # QUALIFIER #
        DEBUGLN = YCDZ(TEXTL1, 3);
        MESSAGE(DEBUGM,3);         # DEBUG CODE # 
        MESSAGE(TEXT1,3);          # DEBUG PROTOCOL DATA #
      $END
  
      FLG=0;
      FLG=APSTORE(BUFF1,ATTR1,QUAL1,TEXTL1,TEXT1);  # STORE ATTRIBUTE # 
      IF FLG NQ 0               # IF ATTRIBUTE DOES NOT FIT IN BUFFER # 
      THEN
        BEGIN 
        CMMALF( (NTLMAX+3), 0, CMMN, FLG);
        NHA$LNK = FLG;
        SCR[2] = NTA$;             # 1ST WORD OF CURRENT TEXT AREA #
        SCMD = ACFETCH(SC,4);      # GET COMMAND (TEXT LENGTH = 4) #
        P<NHA$B>=NHA$LNK; 
        NHA$LNK=0;                   # CLEAR LINK ADDRESS # 
        P<NTA$B> = LOC(NTAH$[0]); 
        ACSTORE (NTA$B, SCMD, NTLMAX);  # STORE COMMAND # 
        FLG=APSTORE(NTA$B,ATTR1,QUAL1,TEXTL1,TEXT1);  # STORE ATTRIB. # 
        END 
  
      END      # APSTOR # 
    TERM
