#ifndef CLIB_TRITON_PROTOS_H
#define CLIB_TRITON_PROTOS_H

/*
**	$VER: triton_protos.h 6.5 (11.7.96)
**	Triton Release 2.0
**
**	triton.library prototypes
**	triton.lib definitions
**
**	(C) Copyright 1993-1996 Stefan Zeiger
**	All Rights Reserved
*/


/********************************************************************************* Compiler specific stuff */

#ifdef _DCC

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

#ifndef LIBRARIES_TRITON_H
#include <libraries/triton.h>
#endif

#define REG(x) __ ## x
#define ASM
#define STACK  __stkargs
#define REGS   __regargs

#else

#ifdef __GNUC__

#define REG(x)
#define ASM
#define STACK
#define REGS

#else /* __SASC__ */

#define REG(x) register __ ## x
#define ASM    __asm
#define STACK  __stdargs
#define REGS   __regargs

#endif /* __GNUC__ */

#endif /* _DCC */


/************************************************************************************ User-level functions */

ASM extern struct TR_Project * TR_OpenProject(REG(a1) struct TR_App *app, REG(a0) struct TagItem *);
ASM extern VOID                TR_CloseProject(REG(a0) struct TR_Project *);

ASM extern LONG                TR_FirstOccurance(REG(d0) UBYTE ch, REG(a0) STRPTR str);
ASM extern LONG                TR_NumOccurances(REG(d0) UBYTE ch, REG(a0) STRPTR str);
ASM extern STRPTR              TR_GetErrorString(REG(d0) UWORD num);
ASM extern UWORD               TR_GetLastError(REG(a1) struct TR_App *app);
ASM extern VOID                TR_CloseWindowSafely(REG(a0) struct Window *win);

ASM extern struct TR_Message * TR_GetMsg(REG(a1) struct TR_App *app);
ASM extern VOID                TR_ReplyMsg(REG(a1) struct TR_Message *message);
ASM extern ULONG               TR_Wait(REG(a1) struct TR_App *app, REG(d0) ULONG otherbits);

ASM extern ULONG               TR_SendMessage(REG(a0) struct TR_Project *project, REG(d0) ULONG objectid,
					      REG(d1) ULONG messageid, REG(a1) void *messagedata);
ASM extern VOID                TR_SetAttribute(REG(a0) struct TR_Project *, REG(d0) ULONG ID,
					       REG(d1) ULONG attribute, REG(d2) ULONG value);
ASM extern ULONG               TR_GetAttribute(REG(a0) struct TR_Project *, REG(d0) ULONG ID,
					       REG(d1) ULONG attribute);

ASM extern VOID                TR_LockProject(REG(a0) struct TR_Project *project);
ASM extern VOID                TR_UnlockProject(REG(a0) struct TR_Project *project);

ASM extern ULONG               TR_AutoRequest(REG(a1) struct TR_App *app,
					      REG(a0) struct TR_Project *lockproject,
					      REG(a2) struct TagItem *request_trwintags);
ASM extern ULONG               TR_EasyRequest(REG(a1) struct TR_App *app, REG(a2) STRPTR bodymft,
					      REG(a3) STRPTR gadfmt, REG(a0) struct TagItem *taglist);

ASM extern struct TR_App *     TR_CreateApp(REG(a1) struct TagItem *apptags);
ASM extern VOID                TR_DeleteApp(REG(a1) struct TR_App *app);

ASM extern struct Screen *     TR_LockScreen(REG(a0) struct TR_Project *project);
ASM extern VOID                TR_UnlockScreen(REG(a0) struct Screen *screen);

ASM extern struct Window *     TR_ObtainWindow(REG(a0) struct TR_Project *project);
ASM extern VOID                TR_ReleaseWindow(REG(a0) struct Window *window);



/***************************************************************************************** Support library */

#ifndef TR_NOSUPPORT

STACK extern BOOL                 TR_OpenTriton(ULONG version, ULONG taglist,...);
REGS  extern VOID                 TR_CloseTriton(VOID);
STACK extern struct TR_App     *  TR_CreateAppTags(ULONG taglist,...);
STACK extern struct TR_Project *  TR_OpenProjectTags(struct TR_App *app, ULONG taglist,...);
STACK extern ULONG                TR_EasyRequestTags(struct TR_App *app, STRPTR bodymft, STRPTR gadfmt,
						     ULONG taglist,...);
STACK extern ULONG                TR_AutoRequestTags(struct TR_App *app, struct TR_Project *lockproject,
						     ULONG taglist,...);
STACK extern BOOL                 TR_AddClassTags(struct TR_App *app, ULONG tag, ULONG superTag,
						  TR_Method defaultMethod, ULONG datasize,
						  ULONG taglist,...);
REGS  extern BOOL                 TRIM_trLogo_Init(VOID);
REGS  extern VOID                 TRIM_trLogo_Free(VOID);

#endif /* TR_NOSUPPORT */


/************************************************************************************************* The End */

#endif /* CLIB_TRITON_PROTOS_H */
