COMKFLD 
COMMON
          CTEXT  COMKFLD - FIELD MARCRO.
          SPACE  4
          BASE   D
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
***       FLD - DEFINE FIELDS.
*         G. W. PROPP.  76/05/01. 
*         L. E. LOVETT.      80/04/01.
 FLD      SPACE  4,10 
*         FLD - DEFINE FIELDS.
*         TAGS ARE GENERATED TO GIVE THE WORD LOCATION, BIT 
*         LOCATION, AND NUMBER OF BITS IN FIELD.
* 
*         ENTRY  TAG FIELD WP,LB,RP 
*         TAG =  NAME OF FIELD (1-6 LEGAL COMPASS CHARACTERS) 
*             =  *, USE CURRENT VALUE OF PSEUDO ORG COUNTER ORLOC1$ 
*         LB  =  LEFT-MOST BIT POSITION WITHIN A WORD (BIT 59 BEING 
*                SIGN BIT). 
*         RB  =  RIGHT-MOST BIT POSITION WITHIN A WORD. 
* 
*         EXIT   TAGW = WORD LOCATION OF FIELD. 
*                TAGS = LEFT BIT POSITION OF FIELD. 
*                TAGN = NUMBER OF BITS IN FIELD.
  
  
          MACRO  FIELD,TAG,WP,LB,RB 
          IFC    NE,/WP//,4 
          IFC    EQ,/WP/*/,2
 _TAG_W   EQU    ORLOC1$
          SKIP   1
 _TAG_W   EQU    WP 
 _TAG_S   EQU    LB 
 _TAG_N   EQU    LB-RB+1
          ENDM
          SPACE  4,30 
**        PUTFLD - PUT DATA INTO FIELD DEFINED BY *FIELD* MACRO.
*         THE DATA TO BE STORED MUST BE CONTAINED,RIGHT JUSTIFIED,
*         IN X REGISTER *Y*.
* 
*         ENTRY  PUTFLD  Y,RN,TAG 
*         Y     = NUMERIC CHARACTER FOR X REGISTER CONTAINING 
*                RIGHT JUSTIFIED DATA TO BE STORED INTO FIELD *TAG*.
*                2 THRU 7 FOR X2 THRU X7 MAY BE SPECIFIED.
*         RN   = REGISTER CONTAINING FIRST WORD ADDRESS OF THE TABLE
*                WHICH CONTAINS THE SPECIFIED FIELD *TAG*.
*                REGISTER B1 - B7, A2 - A7, X1 - X6.
*                X*Y*,X1,A1,X7 MAY NOT BE USED. 
*         TAG  = NAME OF FIELD SPECIFIED FOR *FIELD* MACRO. 
* 
*         EXIT   THE CONTENTS OF X REGISTER *Y* IS STORED INTO THE
*                FIELD *TAG* AT LOCATION *RN* + *TAGW*. 
*                ALL OTHER FIELDS IN THE SAME WORD ARE UNCHANGED. 
*                ON COMPLETION OF *PUTFLD*, THE RIGHT JUSTIFIED 
*                FIELD IN X REGISTER *Y* IS INTACT .
*                REGISTERS A1, X1, A7 AND X7 ARE
*                CHANGED BY *PUTFLD*. 
*                NOTE - *TAGW* IS THE TABLE WORD INDEX AS GENERATED 
*                       BY THE *FIELD* MACRO. 
* 
*         USES   X*Y*, X1, X7.
*                A1, A7.
  
  
          PURGMAC PUTFLD
* 
 PUTFLD   MACRO  Y,RN,TAG 
          IFC    EQ,/Y/1/ 
          ERR - DATA AND TEMP LOAD REGISTERS SAME.
          ENDIF 
          IFC    EQ,/Y/7/ 
          ERR - DATA AND TEMP STORE/MASK REGISTERS SAME.
          ENDIF 
          IFC    EQ,/XY/RN/ 
          ERR - DATA AND BASE ADDR. REGISTERS SAME. 
          ENDIF 
          IFC    EQ,/RN/X1/ 
          ERR - BASE ADDR. AND TEMP LOAD REGISTERS SAME.
          ENDIF 
          IFC    EQ,/RN/A1/ 
          ERR - BASE ADDR. AND TEMP LOAD REGISTERS SAME.
          ENDIF 
          IFC    EQ,/RN/X7/ 
          ERR - BASE ADDR. AND TEMP STORE/MASK REGISTERS SAME.
          ENDIF 
          MX7    -_TAG_N
          BX_Y    -X7*X_Y 
          SA1    RN+_TAG_W
          LX1    _TAG_N-1-_TAG_S
          BX1    X7*X1
          BX7    X1+X_Y 
          LX7    _TAG_S-_TAG_N+1
          SA7    A1 
 PUTFLD   ENDM
          SPACE  4,25 
**        GETFLD - GET DATA FROM FIELD DEFINED BY *FIELD* MACRO.
*         THE SPECIFIED DATA FIELD IS PLACED INTO X REGISTER *Y*
*         RIGHT JUSTIFIED WITH ZERO FILL. 
* 
*         ENTRY  GETFLD  Y,RN,TAG 
*         Y    = NUMERIC CHARACTER FOR X REGISTER TO RECEIVE THE
*                RIGHT JUSTIFIED DATA FROM FIELD *TAG*. 
*                1 THRU 5 FOR X1 THRU X5 MAY BE SPECIFIED.
*         RN   = REGISTER CONTAINING FIRST WORD ADDRESS OF THE TABLE
*                WHICH CONTAINS THE SPECIFIED FIELD *TAG*.
*                REGISTER B1 - B7, X1 - X6, A1 - A7.
*         TAG  = NAME OF FIELD SPECIFEID FOR *FIELD* MACRO. 
* 
*         EXIT   X REGISTER *Y* CONTAINS THE CONTENTS OF FIELD
*                *TAG* AS OBTAINED FROM LOCATION *RN* + *TAGW*. 
*                THE DATA IS RIGHT JUSTIFIED AND ZERO FILLED. 
*                REGISTERS X7 AND A*Y* ARE CHANGED
*                NOTE - *TAGW* IS THE TABLE WORD INDEX AS 
*                       GENERATED BY THE *FIELD* MACRO. 
* 
*         USES   X*Y*,X7. 
*                A*Y*.
  
  
          PURGMAC GETFLD
* 
 GETFLD   MACRO  Y,RN,TAG 
          IFC    GE,/Y/6/ 
          ERR - LOAD REGISTER .GT. 5. 
          ENDIF 
          IFC    EQ,/Y/0/ 
          ERR - LOAD REGISTER ZERO. 
          ENDIF 
          SA_Y    RN+_TAG_W 
          MX7    -_TAG_N
          LX_Y    _TAG_N-1-_TAG_S 
          BX_Y    -X7*X_Y 
 GETFLD   ENDM
          BASE   *
          ENDX
