129 lines
3.8 KiB
OpenEdge ABL
129 lines
3.8 KiB
OpenEdge ABL
IFND EXEC_LIBRARIES_I
|
|
EXEC_LIBRARIES_I SET 1
|
|
**
|
|
** $VER: libraries.i 39.2 (10.04.92)
|
|
** Includes Release 39.108
|
|
**
|
|
** Definitions for use when creating or using Exec libraries
|
|
**
|
|
** (C) Copyright 1985-1992 Commodore-Amiga, Inc.
|
|
** All Rights Reserved
|
|
**
|
|
|
|
IFND EXEC_NODES_I
|
|
INCLUDE "exec/nodes.i"
|
|
ENDC ; EXEC_NODES_I
|
|
|
|
|
|
*------ Special Constants ---------------------------------------
|
|
LIB_VECTSIZE EQU 6 ;Each library entry takes 6 bytes
|
|
LIB_RESERVED EQU 4 ;Exec reserves the first 4 vectors
|
|
LIB_BASE EQU -LIB_VECTSIZE
|
|
LIB_USERDEF EQU LIB_BASE-(LIB_RESERVED*LIB_VECTSIZE) ;First user func
|
|
LIB_NONSTD EQU LIB_USERDEF
|
|
|
|
|
|
*----------------------------------------------------------------
|
|
*
|
|
* Library Definition Macros (for creating libraries)
|
|
*
|
|
*----------------------------------------------------------------
|
|
|
|
*------ LIBINIT initializes the base offset for using the "LIBDEF" macro:
|
|
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
|
|
|
|
*------ FUNCDEF is used to parse library offset tables. Many applications
|
|
*------ need a special version of FUNCDEF - you provide your own macro
|
|
*------ to match your needs. Here is an example:
|
|
*
|
|
* FUNCDEF MACRO
|
|
* _LVO\1 EQU FUNC_CNT
|
|
* FUNC_CNT SET FUNC_CNT-6 * Standard offset-6 bytes each
|
|
* FUNC_CNT EQU LIB_USERDEF * Skip 4 standard vectors
|
|
* ENDM
|
|
|
|
*----------------------------------------------------------------
|
|
*
|
|
* Standard Library Functions
|
|
*
|
|
*----------------------------------------------------------------
|
|
|
|
LIBINIT LIB_BASE
|
|
|
|
LIBDEF LIB_OPEN
|
|
LIBDEF LIB_CLOSE
|
|
LIBDEF LIB_EXPUNGE ; must exist in all libraries
|
|
LIBDEF LIB_EXTFUNC ; for future expansion - must return zero.
|
|
|
|
|
|
*----------------------------------------------------------------
|
|
*
|
|
* Library Base Structure Definition
|
|
* Also used for Devices and some Resources
|
|
*
|
|
*----------------------------------------------------------------
|
|
|
|
STRUCTURE LIB,LN_SIZE
|
|
UBYTE LIB_FLAGS ; see below
|
|
UBYTE LIB_pad ; must be zero
|
|
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 ; ASCII identification
|
|
ULONG LIB_SUM ; the system-calculated checksum
|
|
UWORD LIB_OPENCNT ; number of current opens
|
|
LABEL LIB_SIZE ;Warning: Size is not a longword multiple!
|
|
|
|
*------ LIB_FLAGS bit definitions (all others are system reserved)
|
|
BITDEF LIB,SUMMING,0 ; system is currently checksumming
|
|
BITDEF LIB,CHANGED,1 ; something has changed the library since last sum
|
|
BITDEF LIB,SUMUSED,2 ; indicates if the library allows checksumming
|
|
BITDEF LIB,DELEXP,3 ; delayed expunge flag (for use by library)
|
|
BITDEF LIB,EXP0CNT,4 ; special system expunge flag.
|
|
|
|
|
|
*---------------------------------------------------------------------------
|
|
*
|
|
* Function Invocation Macros (for calling existing, opened, libraries)
|
|
* Also see exec/macros.i
|
|
*
|
|
*---------------------------------------------------------------------------
|
|
|
|
*------ 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
|
|
JSR \1(A6)
|
|
MOVE.L (SP)+,A6
|
|
ENDM
|
|
|
|
ENDC ; EXEC_LIBRARIES_I
|