#ifndef  CLIB_GOTCHALIB_PROTOS_H
#define  CLIB_GOTCHALIB_PROTOS_H

#ifndef  EXEC_TYPES_H
#include <exec/types.h>
#endif
#ifndef EXEC_LISTS_H
#include <exec/lists.h>
#endif
#ifndef GOTCHALIB_H
#include <libraries/gotchalib.h>
#endif

#ifdef REG
#undef REG
#endif
#ifdef LIBENT
#undef LIBENT
#endif

#define REG(x)  register __ ## x
#define LIBENT  __asm __saveds

/*** private ***/
BOOL LIBENT GL_LockNL(void);
BOOL LIBENT GL_UnlockNL(void);
VOID LIBENT GL_AddPort2List(REG(a0) UBYTE *);
VOID LIBENT GL_RemPortFromList(REG(a0) UBYTE *);
/***  ***/

struct gl_context * LIBENT GL_OpenNL(REG(a0) char * );
struct gl_context * LIBENT GL_CloseNL(REG(a0) struct gl_context * );
LONG LIBENT GL_XtractInfos(REG(a0) struct gl_address * , REG(a1) UBYTE * );
LONG LIBENT GL_FindNode(REG(a0) struct gl_address * , REG(a1) struct gl_context * , REG(a2) struct gl_nodeinfo * , REG(a3) struct gl_pattern * );
LONG LIBENT GL_TranslatePhone(REG(a0) struct gl_context * , REG(a1) UBYTE * , REG(a2) UBYTE * );
LONG LIBENT GL_GetCosts(REG(a0) struct gl_context * , REG(a1) UBYTE * );
LONG LIBENT GL_ReadItem(REG(a0) UBYTE * , REG(d0) long , REG(a1) long * );
VOID LIBENT GL_GetPassword(REG(a0) struct gl_context * , REG(a1) struct gl_nodeinfo * );
UBYTE * LIBENT GL_StripSpaces(REG(a0) UBYTE * );
LONG LIBENT GL_FindNodeFirst(REG(a0) struct gl_address * , REG(a1) struct gl_context * , REG(a2) struct gl_nodeinfo * , REG(a3) struct gl_pattern * );
LONG LIBENT GL_FindNodeNext(REG(a0) struct gl_address * , REG(a1) struct gl_context * , REG(a2) struct gl_nodeinfo * , REG(a3) struct gl_pattern * );
LONG LIBENT GL_GetOpenCount(VOID);
LONG LIBENT GL_AddressToString(REG(a0) struct gl_address * , REG(a1) UBYTE * );
int LIBENT GL_AdrCmp(REG(a0) struct gl_address * , REG(a1) struct gl_address * );
int LIBENT GL_AdrCmpPat(REG(a0) struct gl_address * , REG(a1) struct gl_address * );
ULONG LIBENT GL_GetConfig(REG(a0) struct gl_context * , REG(a1) struct gl_address * , REG(a2) ULONG , REG(a3) UBYTE ** , REG(a4) struct gl_address * );
BOOL LIBENT GL_GetDZNLists(REG(a0) struct gl_context * , REG(a1) UBYTE *** , REG(a2) UWORD ** , REG(a3) UWORD ** );
BOOL LIBENT GL_FreeDZNLists(REG(a0) struct gl_context * , REG(a1) UBYTE *** , REG(a2) UWORD ** , REG(a3) UWORD ** );
VOID LIBENT GL_MoveIndexDomain( REG(d0) LONG , REG(a0) LONG * , REG(a1) LONG * , REG(d1) UWORD ** , REG(d2) UWORD ** );
VOID LIBENT GL_MoveIndexZone(REG(d0) LONG , REG(a0) LONG * , REG(a1) UWORD ** );
LONG LIBENT GL_NodeRequest(REG(a0) struct gl_browser * );
APTR LIBENT GL_AllocRem(REG(a0) ULONG * , REG(d0) ULONG , REG(d1) ULONG );
VOID LIBENT GL_FreeRem(REG(a0) ULONG * );
BOOL LIBENT GL_SendRxCmd(REG(a0) UBYTE * , REG(a1) UBYTE * , REG(a2) UBYTE * , REG(d0) LONG , REG(d1) ULONG );
LONG LIBENT GL_PortRequest(REG(a0) struct gl_portreq * );
VOID LIBENT GL_PlaySample(REG(a0) UBYTE *, REG(a1) ULONG , REG(d0) USHORT , REG(d1) ULONG , REG(d2) BYTE);
struct List * LIBENT GL_DupGotchaPortList(VOID);
BOOL LIBENT GL_AddNotifyTask(REG(d0) LONG);
BOOL LIBENT GL_RemNotifyTask(REG(d0) LONG);

struct List * LIBENT GL_NewList(VOID);
BOOL LIBENT GL_FreeList(REG(a0) struct List *);
struct Node * LIBENT GL_AddNodeString(REG(a0) UBYTE *, REG(a1) struct List *, REG(d0) UWORD , REG(d1) ULONG);
VOID * LIBENT GL_AddNodeData(REG(a0) struct List *,REG(d0) ULONG,REG(d1) UWORD ,REG(d2) ULONG );
VOID * LIBENT GL_GetNodeNr(REG(a0) struct List *, REG(d0) ULONG);
struct Node * LIBENT GL_FindNodeString(REG(a0) UBYTE *,REG(a1) struct List *, REG(d0) ULONG);
VOID LIBENT GL_DeleteNode(REG(a0) struct Node *);
struct List * LIBENT GL_StringListDup(REG(a0) struct List *,REG(d0) BOOL,REG(d1) UWORD);
BOOL LIBENT GL_GetListsDiffs(REG(a0) struct List *, REG(a1) struct List *, REG(a2) struct List **, REG(a3) struct List **, REG(d0) struct List **, REG(d1) ULONG );
struct List * LIBENT GL_StringListDupCB(REG(a0) struct List *, REG(a1) BOOL __asm (*cmpfunc)(REG(a0) struct Node *,REG(a1) void *), REG(d0) BOOL, REG(d1) UWORD, REG(a2) void *);

char ** LIBENT GL_GetDomainArray(REG(a0) struct gl_context *);
VOID LIBENT GL_FreeDomainArray(REG(a0) char**);

LIBENT VOID *GL_ExtraOpen(REG(a0) UBYTE *);
LIBENT VOID GL_ExtraClose(REG(a0) struct gl_extra *);
LIBENT BOOL GL_ExtraFlush(REG(a0) struct gl_extra *);
LIBENT BOOL GL_ExtraDel(REG(a0) struct gl_extra *, REG(a1) void *);
LIBENT VOID GL_ExtraLock(REG(a0) struct gl_extra *);
LIBENT VOID GL_ExtraUnlock(REG(a0) struct gl_extra *);
LIBENT VOID GL_ExtraLockTag(REG(a0) struct gl_extra *, REG(a1) void *);
LIBENT VOID GL_ExtraUnlockTag(REG(a0) struct gl_extra *, REG(a1) void *);
LIBENT VOID GL_ExtraTagDate(REG(a0) struct gl_extra *, REG(a1) void *, REG(a2) struct DateStamp *ds);
LIBENT BOOL GL_ExtraPut(REG(a0) struct gl_extra *,REG(a1) struct gl_address *ad,REG(a2) void *,REG(d0) ULONG tag,REG(d1) ULONG size,REG(d2) ULONG flags);
LIBENT VOID *GL_ExtraFind(REG(a0) struct gl_extra *, REG(a1) struct gl_address *ad, REG(a2) ULONG *size, REG(d0) tag);
LIBENT VOID *GL_ExtraFindLock(REG(a0) struct gl_extra *, REG(a1) struct gl_address *ad, REG(a2) ULONG *size, REG(d0) tag);
LIBENT LONG GL_ExtraEnumNode(REG(a0) struct gl_extra *, REG(a1) BOOL (*func)(struct gl_address*,void*), REG(a2) void *ud);
LIBENT LONG GL_ExtraEnumTag(REG(a0) struct gl_extra *,REG(a1) struct gl_address *ad,REG(a2) BOOL (*func)(void *,ULONG,ULONG,void*),REG(a3) VOID *ud);
LIBENT BOOL GL_ExtraChange( REG(a0) struct gl_extra *,REG(a1) struct gl_address *ad,REG(a2) void *,REG(d0) ULONG tag,REG(d1) ULONG size,REG(d2) ULONG flags);

LIBENT UBYTE *GL_Poll(REG(a0)struct gl_poll *);
LIBENT VOID GL_PollFreeStr(REG(a0) UBYTE *);


#undef LIBENT
#undef REG

#endif /* CLIB_GOTCHALIB_PROTOS_H */

