*COMDECK NSTOREM
*#
*1DC  NSTORE MACRO
* 
*     PURPOSE 
*         STORE INTO A PREDEFINED FIELD IN CENTRAL MEMORY A VALUE 
*         OR THE VALUE OF A NAM PREDEFINED SYMBOL.
*     CALLING SEQUENCE
*         [LABEL]   NSTORE       ARRAY,FIELD=VALUE
*     PARAMETERS
*         <ARRAY>-  THE ADDRESS OF THE FIRST WORD OF THE ARRAY
*                   INTO WHICH THE VALUE SHOULD BE PLACED. IT 
*                   CAN BE AN ADDRESS LABEL OR THE NAME OF A
*                   REGISTER. 
*         <FIELD>-  THE PREDEFINED SYMBOLIC FIELD NAME IN NAM 
*                   INTO WHICH THE VALUE SHOULD BE STORED.
*         <VALUE>-  VALUE TO BE STORED INTO THE ARRAY.
*                   IT CAN BE:  
*                   A RIGHT JUSTIFIED INTEGER,
*                   A RIGHT JUSTIFIED, ZERO FILLED CHARACTER STRING,
*                   A SYMBOLIC NAME PREDEFINED IN NAM,
*                   X OR B REGISTER NAME CONTAINING ONE OF THE
*                   FIRST TWO POSSIBILITIES STATED ABOVE. 
*     ACTIONS 
*         VALUE SPECIFIED IS STORED INTO THE PREDEFINED FILED IN
*         THE GIVEN ARRAY.
*     REGISTERS 
*         A5, X5, X6, A6, X7
*#
* 
          PURGMAC NSTORE
* 
 NSTORE   MACRO  P1,P2X 
          IF     -REG,P1,4   NOT A REGISTER 
          IF     -LOC,P1,3
          IF     -ABS,P1,2
          IF     -REL,P1,1
          ERR    P1          ERROR IN 1ST PARAMETER 
  
 P2       MICRO  1,,=P2X= 
 P2C      MICCNT P2 
 P3       MICRO  P2C+2,, P2X
  
          IF     -DEF,"P2"_#,1
          ERR    "P2"          ILLEGAL FIELD MNEMONICS
  
 NS1      IF     REG,"P3" 
 P31#     MICRO  1,1, "P3"
 P32#     MICRO  2,, "P3" 
 #NS1#    SET    0
 NS1A     ECHO   ,A1=(X,B)
          IFC    EQ,*A1*"P31#"*,4 
          IFC    -LT,*"P32#"*0*,2 
          IFC    -GT,*"P32#"*7*,1 
 #NS1#    SET    1
          STOPDUP 
 NS1A     ENDD
          IFEQ   #NS1#,0,1
          ERR    "P3"        ERROR IN 3RD PARAMETER 
 NS1      ENDIF 
  
 NS1D     IFC    EQ,*X5*"P3"* 
 NS1C     IFC    EQ,*X7*P1* 
          BX6    X5 
          SA5    P1+"P2"_#
          BX7    X6 
 NS1C     ELSE
          BX7    X5 
          SA5    P1+"P2"_#
 NS1C     ENDIF 
 NS1D     ELSE
          SA5    P1+"P2"_#
 NS1A     IF     REG,"P3" 
 NS1B     IFC    EQ,*X*"P31#"*
          BX7    "P3" 
 NS1B     ELSE
          SX7    "P3" 
 NS1B     ENDIF 
 NS1A     ENDIF 
 NS1D     ENDIF 
          MX6    -"P2"_$
          LX6    "P2"_?-"P2"_$+1
          BX6    X6*X5
          SA6    A5 
 NS2Z     IF     -REG,"P3"
 P4       MICRO  1,7, '_"P3"
 NS2T     IF     DEF,"P4" 
          SX5    "P3" 
 NS2T     ELSE
          SA5    =_"P3" 
 NS2T     ENDIF 
 NS2Z     ELSE
          BX5    X7 
 NS2Z     ENDIF 
          MX7    -"P2"_$
          BX5    -X7*X5 
          LX5    "P2"_?-"P2"_$+1
          BX6    X6+X5
          SA6    A6 
 NSTORE   ENDM
