    IFND EXEC_LIBRARIES_I
EXEC_LIBRARIES_I SET 1
**********************************************************************
*
* Commodore-Amiga, Inc. -- ROM Operating System Executive Include File
*
**********************************************************************
*
*   Source Control:
*
*  $Header: libraries.i,v 1.0 85/08/28 15:11:09 carl Exp $
*
*  $Locker:  $
*
**********************************************************************

    IFND EXEC_NODES_I
    INCLUDE "exec/nodes.i"
    ENDC !EXEC_NODES_I


*------ Special Constants ---------------------------------------

LIB_VECTSIZE   EQU   6
LIB_RESERVED   EQU   4
LIB_BASE       EQU   $FFFFFFFA   * (-LIB_VECTSIZE)
LIB_USERDEF    EQU   LIB_BASE-(LIB_RESERVED*LIB_VECTSIZE)
LIB_NONSTD     EQU   LIB_USERDEF

*----------------------------------------------------------------
*
*   Library Definition Macros
*
*----------------------------------------------------------------

*------ LIBINIT sets base offset for library function definitions:

LIBINIT     MACRO   * [baseOffset]
         IFC       '\1',''
COUNT_LIB   SET     LIB_USERDEF
            ENDC
         IFNC    '\1',''
COUNT_LIB   SET       \1
         ENDC
            ENDM


*------ LIBDEF is used to define each library function entry:

LIBDEF      MACRO   * libraryFunctionSymbol
\1          EQU     COUNT_LIB
COUNT_LIB   SET     COUNT_LIB-LIB_VECTSIZE
            ENDM


*----------------------------------------------------------------
*
*   Standard Library Functions
*
*----------------------------------------------------------------

    LIBINIT LIB_BASE

    LIBDEF  LIB_OPEN
    LIBDEF  LIB_CLOSE
    LIBDEF  LIB_EXPUNGE
    LIBDEF  LIB_EXTFUNC       * reserved *


*----------------------------------------------------------------
*
*   Standard Library Data Structure
*
*----------------------------------------------------------------

 STRUCTURE LIB,LN_SIZE
    UBYTE   LIB_FLAGS
    UBYTE   LIB_pad
    UWORD   LIB_NEGSIZE                 * number of bytes before LIB
    UWORD   LIB_POSSIZE                 * number of bytes after LIB
    UWORD   LIB_VERSION                 * major
    UWORD   LIB_REVISION                * minor
    APTR    LIB_IDSTRING                * identification
    ULONG   LIB_SUM                     * the checksum itself
    UWORD   LIB_OPENCNT                 * number of current opens
    LABEL   LIB_SIZE


*------ LIB_FLAGS bit definitions:

    BITDEF  LIB,SUMMING,0               * we are currently checksumming
    BITDEF  LIB,CHANGED,1               * we have just changed the lib
    BITDEF  LIB,SUMUSED,2               * set if we should bother to sum
    BITDEF  LIB,DELEXP,3                * delayed expunge


*----------------------------------------------------------------
*
*   Function Invocation Macros
*
*----------------------------------------------------------------

*------ CALLLIB for calling functions where A6 is already correct:

CALLLIB     MACRO   * functionOffset
   IFGT NARG-1
       FAIL    !!! CALLLIB MACRO - too many arguments !!!
   ENDC
            JSR     \1(A6)
            ENDM


*------ LINKLIB for calling functions where A6 is incorrect:

LINKLIB     MACRO   * functionOffset,libraryBase
   IFGT NARG-2
       FAIL    !!! LINKLIB MACRO - too many arguments !!!
   ENDC
            MOVE.L  A6,-(SP)
            MOVE.L  \2,A6
            CALLLIB \1
            MOVE.L  (SP)+,A6
            ENDM

    ENDC !EXEC_LIBRARIES_I
