/* tcla.h - tool command language -- amiga, header file */

/* the structure we send around amongst our Amiga Tcl message ports... */

#include <exec/libraries.h>
#include <exec/ports.h>

struct AmigaTclMessage {
	struct Message message;
	char *request;
	char *result;
	char *callback;
	char *termptr;
	int returnval;
	int errorline;
};

struct TclaBase {
	struct Library			ml_Lib;
	unsigned long			ml_SegList;	/* seg list of mylib itself*/
	long					ml_value;
};

void *ckalloc(size_t len);
void ckfree(void *what);
void Tcl_AddErrorInfo(Tcl_Interp  *interp, char *message);
char Tcl_Backslash(char *src, int *readPtr);
char *Tcl_Concat(int argc, char **argv);
void Tcl_CreateCommand(Tcl_Interp  *interp, char *cmdName, int (*proc)(), 
	int *clientData, void (*deleteProc)());
Tcl_Interp *Tcl_CreateInterp(void);
int *Tcl_CreateTrace(Tcl_Interp  *interp, int level, void (*proc)(), 
	int *clientData);
void Tcl_DeleteCommand(Tcl_Interp  *interp, char *cmdName);
void Tcl_DeleteInterp(Tcl_Interp  *interp);
void Tcl_DeleteTrace(Tcl_Interp  *interp, int *trace);
int Tcl_Eval(Tcl_Interp  *interp, char *cmd, int flags, char **termPtr);
int Tcl_Expr(Tcl_Interp  *interp, char *string, int *valuePtr);
char *Tcl_GetVar(Tcl_Interp  *interp, char *varName, int global);
char *Tcl_Merge(int argc, char **argv);
char *Tcl_ParseVar(Tcl_Interp  *interp, char *string, char **termPtr);
void Tcl_Return(Tcl_Interp  *interp, char *string, int status);
void Tcl_SetVar(Tcl_Interp  *interp, char *varName, char *newValue, 
	int global);
int Tcl_SplitList(Tcl_Interp  *interp, char *list, int *argcPtr, 
	char ***argvPtr);
int Tcl_StringMatch(char *string, char *pattern);
void Tcl_WatchInterp(Tcl_Interp  *interp, void (*proc)(), int *clientData);
void *LocateResource(char *groupname, char *itemname);
int ConnectResource(char *groupname, char *resourcename, void *data);
void *DisconnectResource(char *groupname, char *resourcename);
struct TclaHeader *Tcla_Init(Tcl_Interp *interp, char *progname, char *portname);
int Tcla_Send(char *program, char *message, char **result);
void Tcla_AddEventLoop(Tcl_Interp *interp, struct TclaHeader *thp, void (*func)(), long *waitmask_ptr);
void Tcla_CleanupRoutine(struct TclaHeader *TclaHead, void (*cleanup_routine)(void));
void Tcla_PanicRoutine(struct TclaHeader *TclaHead, void (*panic_routine)(char *));
void Tcla_LowMemRoutine(struct TclaHeader *TclaHead, int (*lowmem_routine)(long));


#pragma amicall(TclaBase, 0x1e, ckalloc(d0))
#pragma amicall(TclaBase, 0x24, ckfree(a0))
#pragma amicall(TclaBase, 0x2a, Tcl_AddErrorInfo(a0,a1))
#pragma amicall(TclaBase, 0x30, Tcl_Backslash(a0,a1))
#pragma amicall(TclaBase, 0x36, Tcl_Concat(d0,a0))
#pragma amicall(TclaBase, 0x3c, Tcl_CreateCommand(a0,a1,a2,a3,d0))
#pragma amicall(TclaBase, 0x42, Tcl_CreateInterp())
#pragma amicall(TclaBase, 0x48, Tcl_CreateTrace(a0,d0,a1,a2))
#pragma amicall(TclaBase, 0x4e, Tcl_DeleteCommand(a0,a1))
#pragma amicall(TclaBase, 0x54, Tcl_DeleteInterp(a0))
#pragma amicall(TclaBase, 0x5a, Tcl_DeleteTrace(a0,a1))
#pragma amicall(TclaBase, 0x60, Tcl_Eval(a0,a1,d0,a2))
#pragma amicall(TclaBase, 0x66, Tcl_Expr(a0,a1,a2))
#pragma amicall(TclaBase, 0x6c, Tcl_GetVar(a0,a1,d0))
#pragma amicall(TclaBase, 0x72, Tcl_Merge(d0,a0))
#pragma amicall(TclaBase, 0x78, Tcl_ParseVar(a0,a1,a2))
#pragma amicall(TclaBase, 0x7e, Tcl_Return(a0,a1,d0))
#pragma amicall(TclaBase, 0x84, Tcl_SetVar(a0,a1,a2,d0))
#pragma amicall(TclaBase, 0x8a, Tcl_SplitList(a0,a1,a2,a3))
#pragma amicall(TclaBase, 0x90, Tcl_StringMatch(a0,a1))
#pragma amicall(TclaBase, 0x96, Tcl_WatchInterp(a0,a1,a2))
#pragma amicall(TclaBase, 0x9c, LocateResource(a0,a1))
#pragma amicall(TclaBase, 0xa2, ConnectResource(a0,a1,a2))
#pragma amicall(TclaBase, 0xa8, DisconnectResource(a0,a1))
#pragma amicall(TclaBase, 0xae, Tcla_Init(a0,a1,a2))
#pragma amicall(TclaBase, 0xb4, Tcla_Send(a0,a1,a2))
#pragma amicall(TclaBase, 0xba, Tcla_AddEventLoop(a0,a1,a2,a3))
#pragma amicall(TclaBase, 0xc0, Tcla_CleanupRoutine(a0,a1))
#pragma amicall(TclaBase, 0xc6, Tcla_PanicRoutine(a0,a1))
#pragma amicall(TclaBase, 0xcc, Tcla_LowMemRoutine(a0,a1))
