COMFCID 
COMMON
  
* COMFCID    PROVIDES CYBIL TO COMPASS STANDARD INTERFACE 
* 
*         COPYRIGHT CONTROL DATA SYSTEMS INC.  1992.
  
          CTEXT  COMFCID - CYBIL INTERFACE DEFINITIONS
          SPACE  2
          B1=1
          SPACE  4
*** THE FOLLOWING DEFINES THE NIL POINTER, INDICATING IN CYBIL
*   A POINTER POINTING TO NOTHING 
  
  
NIL       EQU    377777B
          SPACE  4
*** THE FOLLOWING MACROS DEFINE THE ENTRY/EXIT SEQUENCE OF
*   CYBIL PROCEDURES. 
  
*   ENTRY CONDITIONS
*     B1   1
*     B2   POINTER TO CALLER'S STACK FRAME / TOP OF STACK (TOS) 
*     B3   STACK LIMIT
*     X1   1ST ARGUMENT THAT FITS IN A REGISTER IF IT FITS (IF ANY) 
*     X2   2ND ARGUMENT THAT FITS IN A REGISTER IF IT FITS (IF ANY) 
*     X3   3RD ARGUMENT THAT FITS IN A REGISTER IF IT FITS (IF ANY) 
*     X4   4TH ARGUMENT THAT FITS IN A REGISTER IF IT FITS (IF ANY) 
*     X5   5TH ARGUMENT THAT FITS IN A REGISTER IF IT FITS (IF ANY) 
*     B5   POINTER TO ARGUMENT EXTENSION LIST (IF ANY)
*     X7   PROCEDURE LINKAGE WORD (RETURN ADDRESS)
  
*   EXIT CONDITIONS 
*     B1   1
*     B2   AS ON ENTRY
*     B3   AS ON ENTRY
*     X1   AS X7 ON ENTRY 
  
          SPACE  4
*** THE FOLLOWING MACRO DEFINES THE ENTRY SEQUENCE
*   USING THE CYBIL STACK DISCIPLINE. 
  
  
          PURGMAC ENTR
  
          MACRO  ENTR,NAME
          LOCAL  MORE 
MORE      RJ     =XCIL#SPE    * CALL PROLOG EXCEPTION ROUTINE 
NAME      SX0    B2          * COPY POINTER TO CALLER'S STACK FRAME 
          LX0    18          * POSITION IT
          BX6    X7+X0       * MERGE IT INTO LINKAGE WORD 
          SB7    6           * SET ROUTINE STACK FRAME SIZE 
          SB2    B2-B7       * ADJUST STACK FRAME POINTER 
          GE     B3,B2,MORE  * CHECK IF ROOM IN STACK SEGMENT 
          SA6    B2          * STORE LINKAGE WORD INTO STACK
          ENDM
          SPACE  4
*** DONE DEFINES THE CODE SEQUENCE TO RETURN FROM A 
*   CYBIL PROCEDURE.
  
  
          PURGMAC DONE
  
DONE      MACRO 
          SA1    B2          * LOAD LINKAGE WORD
          SB7    X1          * GET RETURN ADDRESS 
          SB2    B2+6        * RESTORE CALLER'S STACK POINTER 
          JP     B7          * RETURN 
          ENDM
          SPACE  4
*** THE FOLLOWING MACRO DEFINES THE CALLING SEQUENCE FOR A CYBIL
*   PROGRAM.  IT IS ASSUMED, THAT ARGUMENTS ARE ALREADY SET UP. 
  
  
          PURGMAC CALL
  
CALL      MACRO  P
          LOCAL  RETAD
          SX7    RETAD       * SET RETURN ADDRESS 
          EQ     P           * TRANSFER CONTROL TO PROCEDURE
RETAD     BSS    0
          ENDM
          SPACE  2
          ENDX
