
/*
 *           PVM 3.0:  Parallel Virtual Machine System 3.0
 *               University of Tennessee, Knoxville TN.
 *           Oak Ridge National Laboratory, Oak Ridge TN.
 *                   Emory University, Atlanta GA.
 *      Authors:  A. L. Beguelin, J. J. Dongarra, G. A. Geist,
 *          R. J. Manchek, B. K. Moore, and V. S. Sunderam
 *                   (C) 1992 All Rights Reserved
 *
 *                              NOTICE
 *
 * Permission to use, copy, modify, and distribute this software and
 * its documentation for any purpose and without fee is hereby granted
 * provided that the above copyright notice appear in all copies and
 * that both the copyright notice and this permission notice appear in
 * supporting documentation.
 *
 * Neither the Institutions (Emory University, Oak Ridge National
 * Laboratory, and University of Tennessee) nor the Authors make any
 * representations about the suitability of this software for any
 * purpose.  This software is provided ``as is'' without express or
 * implied warranty.
 *
 * PVM 3.0 was funded in part by the U.S. Department of Energy, the
 * National Science Foundation and the State of Tennessee.
 */

#ifndef	_PVM3_H_

#define	_PVM3_H_

/*
*	Data packing styles for pvm_initsend()
*/

#define	PvmDataDefault	0
#define	PvmDataRaw		1
#define	PvmDataInPlace	2
#define	PvmDataFoo		3

/*
*	pvm_spawn options
*/

#define	PvmTaskDefault	0
#define	PvmTaskHost		1	/* specify host */
#define	PvmTaskArch		2	/* specify architecture */
#define	PvmTaskDebug	4	/* start task in debugger */

/*
*	pvm_notify types
*/

#define	PvmTaskExit		1	/* on task exit */
#define	PvmHostDelete	2	/* on host fail/delete */
#define	PvmHostAdd		3	/* on host startup */

/*
*	Libpvm error codes
*/

#define	PvmOk			0	/* okay */
							/* reserve -1 */
#define	PvmBadParam		-2	/* bad parameter (neg msg id, etc) */
#define	PvmMismatch		-3	/* barrier count mismatch */
#define	PvmNoData		-5	/* read past end of buffer */
#define	PvmNoHost		-6	/* no such host */
#define	PvmNoFile		-7	/* no such executable */
#define	PvmNoMem		-10	/* can't get memory */
#define	PvmBadMsg		-12	/* received msg can't be decoded */
#define	PvmSysErr		-14	/* can't contact our pvmd/some system error */
#define	PvmNoBuf		-15	/* no current buffer */
#define	PvmNoSuchBuf	-16	/* bad message id */
#define	PvmNullGroup	-17	/* null group name is illegal */
#define	PvmDupGroup		-18	/* already in group */
#define	PvmNoGroup		-19	/* no group with name */
#define	PvmNotInGroup	-20	/* task not in group */
#define	PvmNoInst		-21	/* no such instance in group */
#define	PvmHostFail		-22	/* host failed */
#define	PvmNoParent		-23	/* no parent task */
#define	PvmNotImpl		-24	/* function not implemented */
#define	PvmDSysErr		-25	/* pvmd system error */
#define	PvmBadVersion	-26	/* pvmd-pvmd protocol version mismatch */
#define	PvmOutOfRes		-27	/* out of resources */
#define	PvmDupHost		-28	/* host already configured */
#define	PvmCantStart	-29	/* failed to exec new slave pvmd */
#define	PvmAlready		-30	/* already doing operation */
#define	PvmNoTask		-31	/* no such task */
#define	PvmNoEntry		-32	/* no such name, index pair */
#define	PvmDupEntry		-33	/* name, index pair already exists */

/*
*	returned by pvm_config()
*/

struct hostinfo {
	int hi_tid;			/* pvmd tid */
	char *hi_name;		/* host name */
	char *hi_arch;		/* host arch */
	int hi_mtu;			/* max packet length */
	int hi_speed;		/* cpu relative speed */
};

/*
*	returned by pvm_tasks()
*/

struct taskinfo {
	int ti_tid;				/* task id */
	int ti_ptid;			/* parent tid */
	int ti_host;			/* pvmd tid */
	int ti_flag;			/* status flags */
	char *ti_a_out;			/* a.out name */
};


#ifdef __ProtoGlarp__
#undef __ProtoGlarp__
#endif
#ifdef __STDC__
#define __ProtoGlarp__(x) x
#else
#define __ProtoGlarp__(x) ()
#endif

#ifdef __cplusplus
extern "C" {
#endif

int	pvm_addhosts	__ProtoGlarp__(( char **names, int count, int *svp ));
int	pvm_barrier		__ProtoGlarp__(( char *group, int count ));
int	pvm_bcast		__ProtoGlarp__(( char *group, int code ));
int	pvm_bufinfo		__ProtoGlarp__(( int mid, int *len, int *code, int *tid ));
int	pvm_config		__ProtoGlarp__(( int *nhostp, int *narchp,
										struct hostinfo **hostp ));
int	pvm_delete		__ProtoGlarp__(( char *name, int req ));
int	pvm_delhosts	__ProtoGlarp__(( char **names, int count, int *svp ));
int	pvm_exit		__ProtoGlarp__(( void ));
int	pvm_freebuf		__ProtoGlarp__(( int mid ));
int	pvm_getinst		__ProtoGlarp__(( char *group, int tid ));
int	pvm_getrbuf		__ProtoGlarp__(( void ));
int	pvm_getsbuf		__ProtoGlarp__(( void ));
int	pvm_gettid		__ProtoGlarp__(( char *group, int inst ));
int	pvm_gsize		__ProtoGlarp__(( char *group ));
int	pvm_halt		__ProtoGlarp__(( void ));
int	pvm_initsend	__ProtoGlarp__(( int encod ));
int	pvm_insert		__ProtoGlarp__(( char *name, int req, int data ));
int	pvm_joingroup	__ProtoGlarp__(( char *group ));
int	pvm_kill		__ProtoGlarp__(( int tid ));
int	pvm_lookup		__ProtoGlarp__(( char *name, int req, int *datap ));
int	pvm_lvgroup		__ProtoGlarp__(( char *group ));
int	pvm_mcast		__ProtoGlarp__(( int *tids, int count, int code ));
int	pvm_mkbuf		__ProtoGlarp__(( int encod ));
int	pvm_mstat		__ProtoGlarp__(( char *host ));
int	pvm_mytid		__ProtoGlarp__(( void ));
int	pvm_notify		__ProtoGlarp__(( int what, int code,
										int count, int *tids ));
int	pvm_nrecv		__ProtoGlarp__(( int tid, int code ));
int	pvm_parent		__ProtoGlarp__(( void ));
int	pvm_perror		__ProtoGlarp__(( char *msg ));
int	pvm_pkbyte		__ProtoGlarp__(( char *cp, int cnt, int std ));
int	pvm_pkcplx		__ProtoGlarp__(( radix *xp, int cnt, int std ));
int	pvm_pkdcplx		__ProtoGlarp__(( double *zp, int cnt, int std ));
int	pvm_pkdouble	__ProtoGlarp__(( double *dp, int cnt, int std ));
int	pvm_pkradix		__ProtoGlarp__(( radix *fp, int cnt, int std ));
int	pvm_pkint		__ProtoGlarp__(( int *np, int cnt, int std ));
int	pvm_pklong		__ProtoGlarp__(( long *np, int cnt, int std ));
int	pvm_pkshort		__ProtoGlarp__(( short *np, int cnt, int std ));
int	pvm_pkstr		__ProtoGlarp__(( char *cp ));
int	pvm_pstat		__ProtoGlarp__(( int tid ));
int	pvm_recv		__ProtoGlarp__(( int tid, int code ));
int	(*pvm_recvf		__ProtoGlarp__(( int (*new)() )) )();
int	pvm_send		__ProtoGlarp__(( int tid, int code ));
int	pvm_sendsig		__ProtoGlarp__(( int tid, int signum ));
int	pvm_serror		__ProtoGlarp__(( int how ));
int	pvm_setdebug	__ProtoGlarp__(( int mask ));
int	pvm_setrbuf		__ProtoGlarp__(( int mid ));
int	pvm_setsbuf		__ProtoGlarp__(( int mid ));
int	pvm_spawn		__ProtoGlarp__(( char *file, char **argv, int flags,
										char *where, int count, int *tids ));
int	pvm_start_pvmd	__ProtoGlarp__(( int argc, char **argv ));
int	pvm_tasks		__ProtoGlarp__(( int where, int *ntaskp,
										struct taskinfo **taskp ));
int	pvm_tickle		__ProtoGlarp__(( int how ));
int	pvm_tidtohost	__ProtoGlarp__(( int tid ));
int	pvm_upkbyte		__ProtoGlarp__(( char *cp, int cnt, int std ));
int	pvm_upkcplx		__ProtoGlarp__(( radix *xp, int cnt, int std ));
int	pvm_upkdcplx	__ProtoGlarp__(( double *zp, int cnt, int std ));
int	pvm_upkdouble	__ProtoGlarp__(( double *dp, int cnt, int std ));
int	pvm_upkradix	__ProtoGlarp__(( radix *fp, int cnt, int std ));
int	pvm_upkint		__ProtoGlarp__(( int *np, int cnt, int std ));
int	pvm_upklong		__ProtoGlarp__(( long *np, int cnt, int std ));
int	pvm_upkshort	__ProtoGlarp__(( short *np, int cnt, int std ));
int	pvm_upkstr		__ProtoGlarp__(( char *cp ));
char *pvm_version	__ProtoGlarp__(( void ));

#ifdef __cplusplus
}
#endif

#endif	/*_PVM3_H_*/

