/* $Revision Header * Header built automatically - do not edit! *************
 *
 *	(C) Copyright 1990 by MXM
 *
 *	Name .....: rexxhostbase.h
 *	Created ..: Sunday 07-Jan-90 18:55
 *	Revision .: 6
 *
 *	Date            Author          Comment
 *	=========       ========        ====================
 *	09-Sep-90       Olsen           Added new function
 *	24-May-90       Olsen           Added new functions
 *	31-Mar-90       Olsen           General cleanup, added HOSTMASK
 *	17-Mar-90       Olsen           Compatibility fixes
 *	16-Mar-90       Olsen           Added protos & pragmas
 *	07-Jan-90       Olsen           Created this file!
 *
 ****************************************************************************
 *
 *	This Amiga shared library is based on example source code
 *	written by Gary Samad & Bill Hawes.
 *
 * $Revision Header ********************************************************/

#ifndef _REXXHOSTBASE_H
#define _REXXHOSTBASE_H 1

#ifndef REXX_RXSLIB_H
#include <rexx/rxslib.h>
#endif	/* !REXX_RXSLIB_H */

	/* Main library structure (note: RexxSysBase can be reused
	 * by opening program).
	 */

struct RexxHostBase
{
	struct Library	 LibNode;
	struct RxsLib	*RexxSysBase;

	/* Everything below this point is considered PRIVATE and
	 * subject to change without notice (even though there isn't
	 * very much yet).
	 */
};

	/* This is an extended MsgPort structure which includes
	 * a special ID CreateRexxHost/DeleteRexxHost/SendRexxCommand
	 * rely on.
	 */

struct RexxHost
{
	struct MsgPort	rh_Port;	/* Exec link. */

		/* Never touch the tags below,
		 * hands off - this may change
		 * soon.
		 */

	ULONG		rh_Private0;
	ULONG		rh_Private1[4];
};

	/* This macro can be used to turn the signal bit
	 * contained in a RexxHost into a Wait-mask.
	 * Note: Argument must be a pointer.
	 */

#define HOSTMASK(Host) (1L << ((struct RexxHost *)Host) -> rh_Port . mp_SigBit)

	/* Library name and current revision. */

#define REXXHOSTNAME	"rexxhost.library"
#define REXXHOSTVERSION	36L

	/* Use this value rather than REXXHOSTVERSION to open
	 * rexxhost.library.
	 */

#define REXXHOSTMINIMUM	34L

	/* The compiler version differences require the
	 * following preprocessor 'orgy'.
	 */

#ifdef __NO_PROTOS
#undef __NO_PROTOS
#endif	/* __NO_PROTOS */

#ifdef AZTEC_C

	/* No version symbol? We'll redefine it. */

#ifndef __VERSION
#define __VERSION 360
#endif	/* __VERSION */

	/* Aztec 'C' 5.0 includes full prototype checking and
	 * pragma support.
	 */

#if __VERSION < 500
#define __NO_PROTOS	1
#define __NO_PRAGMAS	1
#endif	/* __VERSION */

#endif	/* AZTEC_C */

	/* Now for the prototype handling. */

#ifdef __NO_PROTOS
#define __ARGS(x) ()
#else
#define __ARGS(x) x
#endif	/* __NO_PROTOS */

	/* Prototypes for library functions. */

struct RexxHost *	CreateRexxHost __ARGS((STRPTR));
VOID *			DeleteRexxHost __ARGS((struct RexxHost *));
LONG			SendRexxCommand __ARGS((struct RexxHost *,STRPTR,STRPTR,STRPTR));
VOID			FreeRexxCommand __ARGS((struct RexxMsg *));
VOID			ReplyRexxCommand __ARGS((struct RexxMsg *,LONG,LONG,STRPTR));
STRPTR			GetRexxCommand __ARGS((struct RexxMsg *));
STRPTR			GetRexxArg __ARGS((struct RexxMsg *));
LONG			GetRexxResult1 __ARGS((struct RexxMsg *));
LONG			GetRexxResult2 __ARGS((struct RexxMsg *));
STRPTR			GetToken __ARGS((STRPTR,LONG *,STRPTR,LONG));
LONG			GetStringValue __ARGS((STRPTR));
STRPTR			BuildValueString __ARGS((LONG,STRPTR));
LONG			RexxStrCmp __ARGS((UBYTE *,UBYTE *));
struct RexxMsg *	GetRexxMsg __ARGS((struct RexxHost *,LONG));
ULONG			SendRexxMsg __ARGS((STRPTR,STRPTR *,STRPTR,LONG));
VOID			GetRexxString __ARGS((STRPTR,STRPTR));
LONG			GetRexxClip __ARGS((char *Name,LONG WhichArg));

	/* The pragmas, both for Manx & Lattice. */

#ifndef __NO_PRAGMAS
#ifdef AZTEC_C
#pragma amicall(RexxHostBase, 0x1e, CreateRexxHost(a0))
#pragma amicall(RexxHostBase, 0x24, DeleteRexxHost(a0))
#pragma amicall(RexxHostBase, 0x2a, SendRexxCommand(a0,a1,a2,a3))
#pragma amicall(RexxHostBase, 0x30, FreeRexxCommand(a0))
#pragma amicall(RexxHostBase, 0x36, ReplyRexxCommand(a0,d0,d1,a1))
#pragma amicall(RexxHostBase, 0x3c, GetRexxCommand(a0))
#pragma amicall(RexxHostBase, 0x42, GetRexxArg(a0))
#pragma amicall(RexxHostBase, 0x48, GetRexxResult1(a0))
#pragma amicall(RexxHostBase, 0x4e, GetRexxResult2(a0))
#pragma amicall(RexxHostBase, 0x54, GetToken(a0,a1,a2,d0))
#pragma amicall(RexxHostBase, 0x5a, GetStringValue(a0))
#pragma amicall(RexxHostBase, 0x60, BuildValueString(d0,a0))
#pragma amicall(RexxHostBase, 0x66, RexxStrCmp(a0,a1))
#pragma amicall(RexxHostBase, 0x6c, GetRexxMsg(a0,d0))
#pragma amicall(RexxHostBase, 0x72, SendRexxMsg(a0,a1,a2,d0))
#pragma amicall(RexxHostBase, 0x78, GetRexxString(d0,d1))
#pragma amicall(RexxHostBase, 0x7e, GetRexxClip(a0,d0))
#else	/* AZTEC_C */
#pragma libcall RexxHostBase CreateRexxHost 1e 801
#pragma libcall RexxHostBase DeleteRexxHost 24 801
#pragma libcall RexxHostBase SendRexxCommand 2a ba9804
#pragma libcall RexxHostBase FreeRexxCommand 30 801
#pragma libcall RexxHostBase ReplyRexxCommand 36 910804
#pragma libcall RexxHostBase GetRexxCommand 3c 801
#pragma libcall RexxHostBase GetRexxArg 42 801
#pragma libcall RexxHostBase GetRexxResult1 48 801
#pragma libcall RexxHostBase GetRexxResult2 4e 801
#pragma libcall RexxHostBase GetToken 54 a9804
#pragma libcall RexxHostBase GetStringValue 5a 801
#pragma libcall RexxHostBase BuildValueString 60 8002
#pragma libcall RexxHostBase RexxStrCmp 66 9802
#pragma libcall RexxHostBase GetRexxMsg 6c 802
#pragma libcall RexxHostBase SendRexxMsg 72 a9804 
#pragma libcall RexxHostBase GetRexxString 78 1002
#pragma libcall RexxHostBase GetRexxClip 7e 802
#endif	/* AZTEC_C */
#endif	/* __NO_PRAGMAS */

#endif	/* _REXXHOSTBASE_H */
