#ifndef CLIB_FEELIN_PROTOS_H
#define CLIB_FEELIN_PROTOS_H

/*
** $VER: feelin_protos.h v3.00 (21.06.02)
**
** C prototype definitions
**
** © Olivier Laviale (lotan9@aol.com)
*/

#ifndef     EXEC_TYPES_H
#include    <exec/types.h>
#endif

APTR F_CreatePool(ULONG nFlags, ULONG nItemSize, ULONG nItemNumber);
ULONG F_DeletePool(APTR psPool);
APTR F_NewP(APTR psPool,ULONG nSize);
APTR F_New(ULONG nSize);
ULONG F_Dispose(APTR paMem);
void F_OPool(APTR psPool);
void F_SPool(APTR psPool);
void F_RPool(APTR psPool);
void F_NamePool(APTR psPool,STRPTR pcName);

APTR F_LinkTail(struct FeelinList *psList,struct FeelinNode *psNode);
APTR F_LinkHead(struct FeelinList *psList,struct FeelinNode *psNode);
APTR F_LinkInsert(struct FeelinList *psList,struct FeelinNode *psNode, struct FeelinNode *psPrev);
APTR F_LinkMove(struct FeelinList *psList,struct FeelinNode *psNode, struct FeelinNode *psPrev);
APTR F_LinkRemove(struct FeelinList *psList,struct FeelinNode *psNode);
APTR F_LinkMember(struct FeelinList *psList,struct FeelinNode *psNode);

BOOL F_StrCmp(STRPTR pcStr1,STRPTR pcStr2,ULONG nLength);

struct FeelinClass *F_FindClass(STRPTR pcID);
struct FeelinClass *F_OpenClass(STRPTR pcID);
ULONG F_FreeClass(struct FeelinClass *psClass);
struct FeelinClass *F_CreateClass(...);
struct FeelinClass *F_CreateClassA(struct TagItem *psTaglist);
ULONG F_RemoveClass(struct FeelinClass *psClass);

ULONG F_Do(APTR paObj,ULONG nMethod, ...);
ULONG F_DoA(APTR paObj,ULONG nMethod,ULONG *pnArgs);
ULONG F_ClassDo(struct FeelinClass *psClass,APTR paObj,ULONG nMethod, ...);
ULONG F_ClassDoA(struct FeelinClass *psClass,APTR paObj,ULONG nMethod,ULONG *pnArgs);
ULONG F_SuperDo(struct FeelinClass *psClass,APTR paObj,ULONG nMethod, ...);
ULONG F_SuperDoA(struct FeelinClass *psClass,APTR paObj,ULONG nMethod,ULONG *pnArgs);

APTR F_NewObj(STRPTR pcID, ...);
APTR F_NewObjA(STRPTR pcID, struct TagItem *psTaglist);
APTR F_MakeObj(ULONG nType,...);
APTR F_MakeObjA(ULONG nType,ULONG *pnParams);
ULONG F_DisposeObj(APTR paObj);

ULONG F_Get(APTR paObj,ULONG nAttr);
ULONG F_Set(APTR paObj,ULONG nAttr,ULONG nData);
void F_Draw(APTR paObj,ULONG nFlags);
void F_AskMinMax(APTR paObj);
void F_Layout(APTR paObj,WORD nX,WORD nY,WORD nW,WORD nH,ULONG nFlags);
void F_ModifyHandler(struct FeelinEventHandler *psHandler,ULONG nAdd,ULONG nRem);
void F_DrawBackground(APTR paObj,WORD nX1,WORD nY1,WORD nX2,WORD nY2,ULONG nFlags);

void F_Alert(STRPTR pcTitle,STRPTR pcBody, ...);
void F_AlertA(STRPTR pcTitle,STRPTR pcBody, APTR pnArgs);
APTR F_NextObject(APTR paObjptrptr);

struct FeelinServer *F_OpenServer(STRPTR pcServerName);
ULONG F_FreeServer(struct FeelinServer *psServer);
ULONG F_RemoveServer(struct FeelinServer *psServer);
ULONG F_SendServerMessage(struct FeelinServer *psServer,ULONG nAction,...);
ULONG F_SendServerMessageA(struct FeelinServer *psServer,ULONG nAction,ULONG *pnArgs);

#endif   /* CLIB_FEELIN_PROTOS_H */
