*COMDECK MACDEF 
**
*         DEF MACRO 
*         INTERPRETE SYMPL DEF STATEMENT FOR COMPASS. 
*         THIS MACRO HAS TWO FORMATS: 
* 
*         1.  DEF NAMEX#VALUE#
*             NAME   A LOCATION SYMBOL. 
*             X      ANY ALPHANUMERIC CHARACTER.
*             VALUE  AN EXPRESSION WHICH DOES NOT CONTAIN A PLUS SIGN.
* 
*         RESULT IS ONE COMPASS STATEMENT.
*             NAME   EQU  VALUE 
* 
*         2.  DEF NAMEX#SYM+EXP#
*             NAME   A NUMERIC OR A SYMBOL THAT REPRESENTS A NUMERIC. 
*             X      ANY ALPHANUMERIC CHARACTER.
*             SYM    A LOCATION SYMBOL. 
*             EXP    A EVALUATABLE EXPRESSION 
* 
*             THE EXPRESSION SYM+EXP IS EVALUATED TO PRODUCE A
*             FIVE OCTAL DIGIT RESULT -OPPSS-.
*             O      OVERSIZE DIGIT IS 1 FOR OVERSIZE, O FOR NOT. 
*             PP     PRIMARY OVERLAY NUMBER.
*             SS     SECONDARY OVERLAY NUMBER.
* 
*         RESULT IS THREE COMPASS STATEMENTS. 
*             NAME   EQU  (SYM+EXP) 
*             NAME1  EQU  PP
*             NAME2  EQU  SS
* 
          PURGMAC DEF 
* 
 DEF      MACRO  A
 STRG     MICRO  1,, A
 TAG      MICRO  1,,#"STRG"#
 C        MICCNT TAG
 VAL      MICRO  C+2,, A
 VALUE    MICRO  1,,#"VAL"# 
 "TAG"    EQU    "VALUE"
 TES2     MICRO  1,,+"VALUE"+ 
 TESN1    MICCNT VALUE
 TESN2    MICCNT TES2 
 DEF1     IFNE   TESN1,TESN2  CHECK FOR GENERATING PRIMARY AND SECONDARY
 TES3     MICRO  1,C-1, "TAG"     LEVEL NUMBERS FOR LCC CARD
 TES4     OCTMIC "VALUE",5
 TES5     MICRO  2,2, "TES4"  PRIMARY LEVEL NUMBER
 TES6     MICRO  4,2, "TES4"  SECONDARY LEVEL NUMBER
 "TES3"_1 EQU    "TES5"_B 
 "TES3"_2 EQU    "TES6"_B 
 DEF1     ENDIF 
 DEF      ENDM
  
**
*         ITEM MACRO
*         INTERPRETE SYMPL ITEM STATEMENT FOR COMPASS.
*         THIS MACRO HAS THREE FORMATS. 
* 
*         1.  ITEM NAME;
* 
*             NAME   A LOCATION SYMBOL. 
* 
*         RESULT IS ONE COMPASS STATEMENT.
*             NAME  BSS  1
* 
*         2.  ITEM NAME#D#; 
* 
*             NAME   A LOCATION SYMBOL. 
*             D      A DIGIT. 
* 
*         RESULT IS ONE COMPASS STATEMENT.
*             NAME  VFD  42/0L"NAME",18/0 
* 
*         3.  ITEM NAME#T,EP,FBIT,SIZE# 
* 
*             NAME   A LOCATION SYMBOL. 
*             T      TYPE OF THE ITEM.
*             EP     ENTRY POSITION.
*             FBIT   FIRST BIT POSITION.
*             SIZE   ITEM LENGTH
* 
*         RESULT IS THREE COMPASS STATEMENTS. 
*             NAME#  EQU  EP
*             NAME$  EQU  (SIZE IN BITS)
*             NAME?  EQU  (COMPASS BIT POSITION)
* 
          PURGMAC ITEM
* 
  
 ITEM     MACRO  A,A2,A3,A4 
 STRG     MICRO  1,, A
 TAG      MICRO  1,,;"STRG";
 TAGA     MICRO  1,,#"TAG"# 
 C1       MICCNT TAG
 C2       MICCNT TAGA 
 B        IFEQ   C1,C2
 "TAG"    BSS    1
 B        ELSE
 SEG0     MICRO  1,, A4 
 S0       MICCNT SEG0 
 C        IFEQ   S0,0 
 TAGB     MICRO  1,C2-1, "TAGA" 
 "TAGB"   VFD    42/0L"TAGB",18/0 
 C        ELSE
 SEG1     MICRO  C2+2,,#"TAG"#         GET WHATEVER IN BETWEEN #S 
 SEG2     MICRO  1,, "SEG1"            GET TYPE 
 MFACT    SET    1
 D        IFC    EQ, "SEG2" C          IF TYPE IS CHAR
 MFACT    SET    CL 
 D        ENDIF 
 SEG3     MICRO  1,, A4                LENGTH FD
 SEG4     MICRO  1,,#"SEG3"#
 "TAGA"_# EQU    A2                    OFFSET FROM START OF TEMPL.
 "TAGA"_$ EQU    "SEG4"*MFACT          FILED LENGTH 
 "TAGA"_? EQU    60-A3*MFACT-1         START BIT POS WITHIN WORD
 C        ENDIF 
 B        ENDIF 
 ITEM     ENDM
  
**
*         COMMON MACRO
*         MACRO TO GENERATE COMPASS CODE THAT REFERENCES THE SAME 
*         COMMON BLOCK THAT IS REFERENCED BY THE SYMPL STATEMENT. 
*                COMMON NAME; 
*         RESULT IS TWO COMPASS STATEMENTS. 
*                USE /NAME/ 
*         NAME   BSS 0
* 
          PURGMAC COMMON
* 
  
 COMMON   MACRO  C
 STRG     MICRO  1,, C
 TAG      MICRO  1,,;"STRG";
          USE    /"TAG"/
 "TAG"    BSS    0           LABEL FOR BEGINNING OF THE COMMON BLOCK
 COMMON   ENDM
  
  
 ARRAY    MACRO  A
 STRG     MICRO  1,, A
 "STRG"   BSS    0
 ARRAY    ENDM
  
**
*         LCCM MACRO
*         MACRO TO GENERATE LCC CARD. 
*         B    LOCATION SYMBOL OF PRIMARY OVERLAY NUMBER. 
*         C    LOCATION SYMBOL OF SECONDARY OVERLAY NUMBER. 
*         D    LOCATION SYMBOL OF FWA FOR OVERLAY BUFFER. 
* 
          PURGMAC LCCM
* 
  
  
 LCCM     MACRO  B,C,D       MACRO TO GENERATE LCC CARD 
          IFLT   B,8
 LCB1     OCTMIC B,1
          ELSE
 LCB1     OCTMIC B,2
          ENDIF 
          IFLT   C,8
 LCC1     OCTMIC C,1
          ELSE
 LCC1     OCTMIC C,2
          ENDIF 
          LCC    OVERLAY("LCB1","LCC1",O=D) 
 LCCM     ENDM
  
**
*         LOAD MACRO
*         READ CENTRAL MEMORY WORD POINTED TO BY
*         EFFECTIVE ADDRESS CALCULATED FROM L2,L3.
*         L1     ONE OF THE FOLLOWING REQISTERS A1 TO A5
*         L2     ANY X, A, B REGISTER 
*         L3     OFFSET CONSTANT
* 
          PURGMAC LOAD
  
 LOAD     MACRO  L1,L2,L3 
          IFC    GT,*L1*A0*,1 
          IFC    GT,*L1*A5*,1 
 P        ERR 
          IFEQ   L3,0 
          S_L1   L2 
          ELSE
          S_L1   L2+L3
          ENDIF 
 LOAD     ENDM
  
**
*         STORE MACRO 
*         WRITE CONTENT OF A REGISTER TO CENTRAL MEMORY WORD
*         POINTED TO BY EFFECTIVE ADDRESS CALCULATED FROM S2,S3 
*         S1     A6 OR A7 REQISTER
*         S2     ANY ONE OF X, A, B REGISTERS 
*         S3     OFFSET CONSTANT
* 
          PURGMAC STORE 
* 
 STORE    MACRO  S1,S2,S3 
          IFC    GT,*S1*A5*,1 
          IFC    GT,*S1*A7*,1 
 P        ERR 
          IFEQ   S3,0 
          S_S1   S2 
          ELSE
          S_S1   S2+S3
          ENDIF 
 STORE    ENDM
  
  
