122 lines
2.8 KiB
OpenEdge ABL
122 lines
2.8 KiB
OpenEdge ABL
|
IFND EXEC_LIBRARIES_I
|
||
|
EXEC_LIBRARIES_I SET 1
|
||
|
**
|
||
|
** $Filename: exec/libraries.i $
|
||
|
** $Release: 1.3 $
|
||
|
**
|
||
|
**
|
||
|
**
|
||
|
** (C) Copyright 1985,1986,1987,1988 Commodore-Amiga, Inc.
|
||
|
** All Rights Reserved
|
||
|
**
|
||
|
|
||
|
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
|