*COMDECK MACRO
 MACRO    CTEXT  COMMONLY USED COMPASS MACROS.
          SPACE  4,10 
**        SYMBOL DEFINITIONS REQUIRED FOR MACROS. 
  
  
 PLOCNAM  MICRO  1,,         LAST PASSLOC NAME USED 
 PLOCWC   SET    0           PASSLOC TABLE WORD COUNT 
 CAPSULE  SPACE  4,10 
***       CAPSULE - MACRO FOR DEFINING A CAPSULE ENTRY. 
* 
*         CAPSULE NAME
* 
*         NAME = NAME OF A CAPSULE TO BE INSERTED IN A CAPSULE LIST.
*         MAXAGE = MAX AGE UNITS ALLOWED BEFORE CAPSULE IS UNLOADED 
*                  MUST BE GE ZERO AND LT (777776B - DFRETIRE)
* 
*             THIS MACRO DEFINES THE ENTRIES IN THE CAPSULE LIST FOR
*         CDCS.  EACH ENTRY IS TWO WORDS OF THE FOLLOWING FORMAT: 
*         42/0LCAPNAME,1/LOADED,17/UNUSED 
*         1/LOCKED,5/UNUSED/,18/LOCK-COUNT,18/MAXAGE,18/LAST-CALL 
*         THE ENTRY WILL BE USED BY THE *INCAP* MACRO.* 
  
          PURGMAC CAPSULE 
  
 CAPSULE  MACRO  NAME,MAXAGE
 ._NAME   VFD    42/0L_NAME,18/0
          VFD    24/0,18/MAXAGE,18/0
          ENDM
 INCAP    SPACE  4,10 
***       INCAP - MACRO FOR DEFINING ENTRY POINTS IN CAPSULES.
* 
* ENTRY   INCAP  CAP,OVL
* 
*         ENTRY = ENTRY POINT NAME WHICH OCCURS IN CAPSULE. 
*         CAP = CAPSULE NAME AND ENTRY IN CAPSULE LIST. 
*         OVL = OMITTED FOR ENTRY POINTS DEFINED IN THE (0,0) OVERLAY.
* 
*              THIS MACRO IS USED TO DEFINE ENTRY POINTS WHICH WILL CALL
*         THE SUPERVISOR TO LOAD THE CAPSULE IF NOT ALREADY LOADED AND
*         TO JUMP TO THE INDICATED ENTRY POINT.  THE ENTRY POINT NAMES
*         MUST BE IN ALPHANUMERIC ORDER BECAUSE A PASSLOC TABLE BODY
*         IS GENERATED IN THE REMOTE TABLE *PASSLOC* AND THE FDL
*         RESIDENT REQUIRES PASSLOCS TO BE IN INCREASING ORDER.  THE
*         CAPSULE ENTRY POINT NAME CANNOT BE USED OTHERWISE LOADER
*         WOULD GENERATE DUPLICATE ENTRY POINT DIAGNOSTICS SO THE 
*         ENTRY POINT NAME"S THIRD CHARACTER IS A PERIOD INSTEAD OF A 
*         DOLLAR.   A SUBST *DB$ENTRY BECOMES DB.ENTRY*  MUST BE
*         USED IN THE (0,0) OVERLAY (SEE SKELGEN).  THE ENTRY POINT MUST
*         ALSO BE REINSTATED IN THE CAPSULE BY USING *ENTRY BECOMES 
*         ENTRY* WITHIN THE CAPSULE DEFINITION.  FOR CAPSULE ENTRY
*         POINTS DEFINED IN NON-(0,0) OVERLAYS THE ENTRY POINT CAN BE 
*         USED WITHOUT CHANGING THE DOLLAR BECAUSE THERE CAN BE 
*         NO CONFUSION BETWEEN ENTRY POINTS IN THE (X,Y) OVERLAY AND
*         THE SAME ENTRY POINT WITHIN AN OVCAP.  THIS MEANS *SKELGEN* IS
*         MUCH CLEANER WITHOUT ALL THE REDEFINITIONS OF ENTRY POINTS. 
  
          PURGMAC INCAP 
  
          MACRO  INCAP,ENT,CAP,OVL
          NOREF  EXIT.
 '?PRFX   MICRO  1,3, ENT 
 '?SUFX   MICRO  4,4, ENT 
          IFC    NE, "'?PRFX" DB$ ,1
          ERR    "'?PRFX"_"'?SUFX" - ENTRY POINT MUST BEGIN WITH DB$
          IFC    NE, OVL  ,2
 ENT      JP     *+1S17 
          SKIP   1
 DB._"'?SUFX" JP  *+1S17D 
          ENTRY  DB._"'?SUFX" 
 EXIT.    SET    *
          SX5    #_ENT
          RJ     =XDB$OLOC
          EQ     EXIT.
 -        VFD    12/0,18/._CAP
 #_ENT    PASS   ENT
          ENDM
 MOVE     SPACE  6,14D
**        MOVE - MOVE WHOLE WORDS.
* 
*         MOVE   FA,N,TA
* 
*         ENTRY  *FA* = FROM ADDRESS. 
*                *N*  = NUMBER OF WORDS TO MOVE.
*                *TA* = TO ADDRESS. 
* 
*         CALLS  MOV
* 
*         USES   A - 1, 6 
*                B - 2, 3, 4, 5, 6
*                X - 1, 6 
*                (INCLUDING CALL TO MOV)
  
          PURGMAC MOVE
  
 MOVE     MACRO  FA,N,TA
          R=     B3,FA
          R=     B4,N 
          R=     B5,TA
          RJ     =XMOV
          ENDM
 PASS     SPACE  4,10 
***       PASS - MACRO FOR DEFINING PASSLOC ENTRY POINT ENTRIES.
* 
* SYM     PASS   ENTRY,X
* 
*         SYM = OPTIONAL SYMBOL DEFINING THE LOCATION OF THIS 
*         PASSLOC TABLE.
*         ENTRY = ENTRY POINT/EXTERNAL NAME TO BE ADDED TO A PASSLOC
*         LIST. 
*         X = IF PRESENT INDICATES THE NAME IS AN EXTERNAL RATHER THAN
*         AN ENTRY POINT PASSLOC TABLE ENTRY. 
* 
*              ENTRY POINTS AND EXTERNALS CAN BE ADDED TO A PASSLOC 
*         TABLE BY USING THIS MACRO.  THE PASSLOC HEADER MUST BE
*         DEFINED BY USING THE *PASSLOC* MACRO. 
  
          PURGMAC PASS
  
          MACRO  PASS,SYM,ENT,X 
          IFC    LE, ENT "PLOCNAM" ,1 
          ERR    ENT - OUT OF ORDER IN PASSLOC TABLE. 
 PLOCNAM  MICRO  1,, ENT
 PLOCWC   SET    PLOCWC+1 
 NOX      IFC    EQ, X
 PASSLOC  RMT 
 SYM      VFD    42/0L_ENT,18/**
          RMT 
 NOX      ELSE
 PASSLOC  RMT 
 SYM      VFD    42/0L_ENT,18/=X_ENT
          RMT 
 NOX      ENDIF 
          ENDM
 PASSLOC  SPACE  4,10 
***       PASSLOC - MACRO FOR DEFINING A PASSLOC TABLE. 
* 
*         PASSLOC 
* 
*              THIS MACRO FLUSHES ALL THE PREVIOUSLY DEFINED PASSLOC
*         TABLE ENTRIES (SEE *PASS* MACRO). 
  
          PURGMAC PASSLOC 
  
 PASSLOC  MACRO 
          IFEQ   PLOCWC,0,1 
          ERR    EMPTY PASSLOC TABLE. 
          VFD    12/0021B,12/PLOCWC,36/0  *ENTRY* TABLE HEADER
 PASSLOC  HERE
 PLOCWC   SET    0
 PLOCNAM  MICRO  1,,
          ENDM
 DEF      SPACE  4,10 
**        DEF - ACCEPT THE SYMPL DEF STATEMENT. 
* 
*              THIS MACRO ACCEPTS THE FOLLOWING SYMPL STATEMENT:  
* 
*         DEF    NAME#INTEGER#; 
* 
*         WHERE *NAME* IS ONE TO EIGHT CHARACTERS, THE FIRST
*         OF WHICH MUST BE ALPHABETIC.  *INTEGER* IS A STRING 
*         OF DIGITS.  THE DELIMITERS # AND ; MUST BE USED AS SHOWN. 
*         NO BLANKS ARE ALLOWED BETWEEN *NAME* AND THE SEMICOLON. 
*         THE MACRO TRANSFORMS THE SYMPL STATEMENT INTO THE 
*         FOLLOWING COMPASS STATEMENT:  
* 
*         NAME   EQU    INTEGER 
  
          PURGMAC DEF 
          NOREF  N. 
  
 DEF      MACRO  P
 S        MICRO  1,8,#_P_#
 N.       MICCNT S
 T        MICRO  N.+2,, P 
 T        MICRO  1,,#"T"# 
 "S"      EQU    "T"
          ENDM
          ENDX
