187 lines
5.8 KiB
C
187 lines
5.8 KiB
C
/*
|
|
* LDG : Gem Dynamical Libraries
|
|
* Copyright (c) 1997-2004 Olivier Landemarre, Dominique Bereziat & Arnaud Bercegeay
|
|
*
|
|
* Header file of LDG devel library, should be included after the AES header
|
|
*
|
|
* Current version is 2.31
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*
|
|
* $Id: ldg.h 102 2012-10-04 22:31:16Z vriviere $
|
|
*/
|
|
|
|
#ifndef __LDG__
|
|
#define __LDG__
|
|
|
|
|
|
#ifdef __PUREC__
|
|
#define CDECL cdecl
|
|
#else
|
|
#include <compiler.h>
|
|
#define CDECL __CDECL
|
|
#endif
|
|
|
|
#ifdef __GEMLIB__
|
|
#define ldg_global aes_global
|
|
#else
|
|
#ifdef __PUREC__ /* For Pure C users using PCGEMLIB */
|
|
#define ldg_global _GemParBlk.global
|
|
#endif
|
|
#endif
|
|
|
|
#define LDG_QUIT 0x4C4A /* ldg->client : a lib discharged */
|
|
#define LDG_LOST_LIB 0x4C4D /* ldg->client : a lib lost */
|
|
#define LDG_COOKIE 0x4C44474DL /* 'LDGM' */
|
|
#define PATHLEN 128
|
|
|
|
/*
|
|
* Data structures
|
|
*/
|
|
|
|
typedef struct entrie {
|
|
char *name; /* Function name */
|
|
char *info; /* Describe the prototype of the function */
|
|
void *func; /* Function address */
|
|
} PROC;
|
|
|
|
/*
|
|
* The LDG-library descriptor (private)
|
|
*/
|
|
|
|
typedef struct ldg {
|
|
long magic; /* magic number ('LDGM') */
|
|
short vers; /* library version */
|
|
short id; /* AES-id of launcher */
|
|
short num; /* count of avalaible functions */
|
|
PROC *list; /* pointer to the functions list */
|
|
char *infos; /* describe the library */
|
|
void *baspag; /* basepage of library */
|
|
/* from version 0.99 */
|
|
unsigned short flags; /* library flags ( shared, resident, locked) */
|
|
/* from version 0.99c */
|
|
void (*close)(void); /* fonction launched by ldg_term() */
|
|
/* from version 1.00 */
|
|
short vers_ldg; /* LDG-protocol version */
|
|
char path[PATHLEN]; /* real path of the lib */
|
|
long user_ext; /* own library extension */
|
|
long addr_ext; /* for future extension */
|
|
} LDG;
|
|
|
|
/*
|
|
* The LDG cookie
|
|
*/
|
|
|
|
typedef struct {
|
|
short version; /* The cookie number version */
|
|
char path[PATHLEN]; /* Path of LDG-libraries */
|
|
short garbage; /* The garbage collector time */
|
|
short idle; /* Obsolet : for backward compatibility */
|
|
|
|
LDG* CDECL (*ldg_open) ( const char *lib, short *gl);
|
|
/* Open a library */
|
|
short CDECL (*ldg_close) ( LDG *ldg, short *gl);
|
|
/* Close a library */
|
|
void* CDECL (*ldg_find) ( char *fnc, LDG *ldg);
|
|
/* Find a function in a library */
|
|
LDG* CDECL (*ldg_open_ev)( char *lib, short *gl, void (*)(short*));
|
|
/* Obsolet : for backward compatibility */
|
|
short error; /* Last error occuring */
|
|
void CDECL (*ldg_garbage)( short *gl);
|
|
/* Release unused libs */
|
|
void CDECL (*ldg_reset)( short *gl);
|
|
/* Release all libs */
|
|
void* internal; /* Reserved */
|
|
short CDECL (*ldg_libpath)( char *, short *global);
|
|
/* Find the path of a library */
|
|
} LDG_INFOS;
|
|
|
|
/*
|
|
* This structure is used by ldg_init() to initiate the
|
|
* the LDG-protocol inside a LDG-library.
|
|
*/
|
|
|
|
typedef struct ldglib {
|
|
short vers; /* library version */
|
|
short num; /* count of avalaible functions */
|
|
PROC *list; /* pointer to the functions list */
|
|
char *infos; /* description of the lib */
|
|
unsigned short flags; /* library flags (shared, locked, resident) */
|
|
void (*close)(void); /* function executed by ldg_term()*/
|
|
long user_ext; /* own library extension */
|
|
} LDGLIB;
|
|
|
|
/* value of the 'flag' field */
|
|
#define LDG_NOT_SHARED 0x1 /* the library is unshareable */
|
|
#define LDG_LOCKED 0x2 /* the library is locked */
|
|
#define LDG_RESIDENT 0x4 /* the library is memory resident */
|
|
#define LDG_STDCALL 0x100 /* a2/d2 are not scratch register - private */
|
|
|
|
/* Errors returned by ldg_error() */
|
|
#define LDG_LIB_FULLED -1
|
|
#define LDG_APP_FULLED -2
|
|
#define LDG_ERR_EXEC -3
|
|
#define LDG_BAD_FORMAT -4
|
|
#define LDG_LIB_LOCKED -6
|
|
#define LDG_NO_MANAGER -7
|
|
#define LDG_NOT_FOUND -8
|
|
#define LDG_BAD_LIB LDG_BAD_FORMAT
|
|
#define LDG_NO_MEMORY -9
|
|
#define LDG_TIME_IDLE -10
|
|
#define LDG_NO_TSR -11
|
|
#define LDG_BAD_TSR -12
|
|
#define LDG_NO_FUNC -13
|
|
|
|
/* Client functions */
|
|
LDG* ldg_open ( const char *name, short *gl);
|
|
short ldg_close ( LDG *lib, short *gl);
|
|
short ldg_error ( void);
|
|
void* ldg_find ( char *name, LDG *ldg);
|
|
short ldg_libpath ( char *path, short *gl);
|
|
|
|
/* Server functions */
|
|
int ldg_init ( LDGLIB *libldg);
|
|
char *ldg_getpath ( void);
|
|
|
|
/* Diverse functions */
|
|
int ldg_cookie ( long, long *);
|
|
void ldg_debug ( char *, ...);
|
|
void* ldg_Malloc ( long size);
|
|
void* ldg_Calloc ( long count,long size);
|
|
int ldg_Free ( void *memory);
|
|
void* ldg_Realloc ( void *oldblk, long oldsize, long newsize);
|
|
#ifndef __mcoldfire__
|
|
void ldg_cpush ( void);
|
|
#endif
|
|
long CDECL ldg_callback( void *f, ...);
|
|
|
|
/* For backward compatibility */
|
|
#define ldg_exec(a,b) ldg_open( b, ldg_global)
|
|
#define ldg_exec_evnt(a,b,c) ldg_open( b, ldg_global)
|
|
#define ldg_term(a,b) ldg_close( b, ldg_global)
|
|
#define ldg_libexec_evnt(a,b,c) ldg_open( a, b)
|
|
#define ldg_libexec(a,b) ldg_open( a, b)
|
|
#define ldg_libterm(a,b) ldg_close( a,b)
|
|
|
|
/* C-library version (currently 1.20) */
|
|
struct _ldg_version {
|
|
char *name;
|
|
short num;
|
|
};
|
|
|
|
extern struct _ldg_version ldg_version;
|
|
|
|
#endif /* __LDG__ */
|