#ifndef XPRKERMIT_H

#define XPRKERMIT_H	1

/*
 * $Header: Work:src/xprkermit/RCS/xprkermit.h,v 1.3 91/11/09 06:55:40 swalton Exp Locker: swalton $
 */

#include "xproto.h"

/*
 * The abstract data type for setting up XPR Kermit.
 */

typedef struct {
	void *DataSeg;			/* ADDITION--Data segment for reentrancy */
	char FileName[256];
	int ParityFlag,
	TextFlag,
	ConvertFlag,
	MaxPacket,
	BlockCheckType,
	RetryLimit,
	Timeout,
	KeepFlag,
	GetFlag;
} SetupVars;

/* xprkermit.c */
long XProtocolSend(struct XPR_IO *IO);
long XProtocolReceive(struct XPR_IO *IO);
long XProtocolSetup(struct XPR_IO *IO);
int SetupFromString(struct XPR_IO *IO, char *s, SetupVars *sv);
long XProtocolCleanup(struct XPR_IO *IO);
int XPRParity(struct XPR_IO *IO);
void XPRLong(struct XPR_IO *IO, long i);
void ioerr(struct XPR_IO *IO, char *msg);

#pragma regcall(SetupFromString(a0, a1, a2))
#pragma regcall(XPRParity(a0))
#pragma regcall(XPRLong(a0, d0))
#pragma regcall(ioerr(a0,a1))

/*
 * The structure for XProtocolBase.  Now we need to know about this.
 */

#include <exec/libraries.h>

struct XProtocolBase {
	struct Library xp_Lib;
	unsigned long xp_SegList;
};
/*
 * Pragmas for the user-callable functions.  No more stubs for me!
 */

#pragma amicall(XProtocolBase, 0x1e, XProtocolCleanup(a0))
#pragma amicall(XProtocolBase, 0x24, XProtocolSetup(a0))
#pragma amicall(XProtocolBase, 0x2a, XProtocolSend(a0))
#pragma amicall(XProtocolBase, 0x30, XProtocolReceive(a0))

/*
 * Prototypes for the callbacks.  We can't use amicall pragmas, sigh.
 */

long calla(long (*f)(), void *);
long calld(long (*f)(), long);
long callda(long (*f)(), long, void *);
long callaa(long (*f)(), void *, void *);
long callad(long (*f)(), void *, long);
long calladd(long (*f)(), void *, long, long);
long calldaa(long (*f)(), long, void *, void *);
long calladda(long (*f)(), void *, long, long, void *);


#endif
