*COMDECK MACRO
 MACRO    CTEXT  COMMONLY USED QU 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.
* 
*              THIS MACRO DEFINES A LABEL OF THE SAME NAME AS THE 
*         CAPSULE.  THIS LABEL WILL BE USED BY THE *INCAP* MACRO TO 
*         REFERENCE THE CAPSULE ENTRY.
  
          PURGMAC CAPSULE 
  
 CAPSULE  MACRO  NAME 
 ._NAME   VFD    42/0L_NAME,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 APPENDED WITH A DOLLAR IS USED.  THIS
*         REQUIRES THAT A SUBST OF THE FORM *ENTRY BECOMES ENTRY$* BE 
*         USED IN THE (0,0) OVERLAY (SEE QUGEN).  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 APPENDING A DOLLAR TO IT BECAUSE THERE CAN BE
*         NO CONFUSION BETWEEN ENTRY POINTS IN THE (X,Y) OVERLAY AND
*         THE SAME ENTRY POINT WITHIN AN OVCAP.  THIS MEANS *QUGEN* IS
*         MUCH CLEANER WITHOUT ALL THE REDEFINITIONS OF ENTRY POINTS. 
  
          PURGMAC INCAP 
  
          MACRO  INCAP,ENT,CAP,OVL
'?INCAP   MICRO  1,6, ENT 
          IFC    NE, OVL  ,2
 ENT      SUBR   =
          SKIP   1
"'?INCAP"_$ SUBR =
          SX5    #_ENT
          RJ     =XQU.LOC 
          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  MOVEW       (MOVE WHOLE WORDS ROUTINE) 
* 
*         USES   A - 1, 6 
*                B - 2, 3, 4, 5, 6
*                X - 1, 6 
*                (INCLUDING CALL TO MOVEW)
  
          PURGMAC MOVE
  
 MOVE     MACRO  FA,N,TA
          R=     B3,FA
          R=     B4,N 
          R=     B5,TA
          RJ     =XMOVEW
          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
