static char rcsid[] =
	"$Id: lpvmglob.c,v 1.19 2004/01/14 18:50:57 pvmsrc Exp $";

/*
 *         PVM version 3.4:  Parallel Virtual Machine System
 *               University of Tennessee, Knoxville TN.
 *           Oak Ridge National Laboratory, Oak Ridge TN.
 *                   Emory University, Atlanta GA.
 *      Authors:  J. J. Dongarra, G. E. Fagg, M. Fischer
 *          G. A. Geist, J. A. Kohl, R. J. Manchek, P. Mucci,
 *         P. M. Papadopoulos, S. L. Scott, and V. S. Sunderam
 *                   (C) 1997 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 version 3 was funded in part by the U.S. Department of Energy,
 * the National Science Foundation and the State of Tennessee.
 */

/*
 *	lpvmglob.c
 *
 *	Libpvm Globals.
 *
 * $Log: lpvmglob.c,v $
 * Revision 1.19  2004/01/14 18:50:57  pvmsrc
 * Added new AIX5* arches.
 * (Spanker=kohl)
 *
 * Revision 1.18  2001/02/07 23:14:08  pvmsrc
 * First Half of CYGWIN Check-ins...
 * (Spanker=kohl)
 *
 * Revision 1.17  2000/06/15 17:51:52  pvmsrc
 * Fixed bug in WIN32 direct routing.
 * 	- stupid #endif in the wrong place, pvm_fd_add() call whacked.
 * 	- turned back on direct routing default and setopt.
 * (Spanker=kohl)
 *
 * Revision 1.16  2000/02/17 23:12:15  pvmsrc
 * *** Changes for new BEOLIN port ***
 * 	- MPP-like, similar to SP2, etc.
 * 	- submitted by Paul Springer <pls@smokeymt.jpl.nasa.gov>.
 * 	- format-checked & cleaned up by Jeembo...  :-)
 * (Spanker=kohl)
 *
 * Revision 1.15  2000/02/16 22:01:00  pvmsrc
 * Added #ifndef NO_NETINET_TCP_H around <netinet/tcp.h> for
 * 	archs that can't handle it...  :-)
 * (Spanker=kohl)
 *
 * Revision 1.14  1999/07/08 18:59:59  kohl
 * Fixed "Log" keyword placement.
 * 	- indent with " * " for new CVS.
 *
 * Revision 1.13  1999/03/12  20:55:37  pvmsrc
 * Don't allow direct routing in WIN32 until we fix it.  Shit.
 * (Spanker=kohl)
 *
 * Revision 1.12  1998/11/20  20:04:07  pvmsrc
 * Changes so that win32 will compile & build. Also, common
 * Changes so that compiles & builds on NT. Also
 * common source on win32 & unix.
 * (Spanker=sscott)
 *
 * Revision 1.11  1997/09/22  21:13:32  pvmsrc
 * Added new pvmsettaskname() linkage (for shell-spawned tasks only!).
 * 	- call pvmsettaskname() before joining PVM, sends task name
 * 		(stored in new char *pvmmytaskname global) to pvmd in
 * 		TM_CONN2 message.
 * 	- appears in trace events and console ps.
 * (Spanker=kohl)
 *
 * Revision 1.10  1997/08/06  22:43:18  pvmsrc
 * Added new SGI6 and SGIMP6 arches.
 *
 * Revision 1.9  1997/06/27  19:53:56  pvmsrc
 * Fixed polltype/polltime bug in AIX4MP.
 *
 * Revision 1.8  1997/06/27  17:32:25  pvmsrc
 * Updated for WIN32 header files & Authors.
 *
 * Revision 1.7  1997/05/29  15:13:06  pvmsrc
 * Moved decl (init) of pvmrouteopt inside MPP/SHMEM vs. "normal" defines.
 * 	- for MPP/SHMEM -> PvmDontRoute, "normal" -> PvmAllowDirect.
 *
 * Revision 1.6  1997/05/21  16:01:52  pvmsrc
 * Updated ifdefs to include AIX4MP arch type.
 *
 * Revision 1.5  1997/03/06  21:08:28  pvmsrc
 * 		Added includes:
 * 		<netinet/in.h>, <netinet/tcp.h> "host.h" "pvmmimd.h"
 *
 * Revision 1.4  1997/02/13  23:35:54  pvmsrc
 * Added new PvmNoReset setopt/getopt option.
 * 	- added new pvmnoreset, pvmnoresetindex globals in lpvm.[ch].
 * 	- to set use pvm_putinfo() -> PVMNORESETCLASS first avail w/lock,
 * 		save index in pvmnoresetindex.
 * 	- to unset use pvm_delinfo().
 *
 * Revision 1.3  1997/01/28  19:26:28  pvmsrc
 * New Copyright Notice & Authors.
 *
 * Revision 1.2  1996/12/18  22:28:55  pvmsrc
 * Added new FILE *logfp decl.
 * 	- only #ifdef LOG.  (previously only in shmem stuff)
 * 	- needed for now shared pvmlogerror() routine.
 *
 * Revision 1.1  1996/10/24  19:43:39  pvmsrc
 * Initial revision
 *
 *
 */


#include <stdio.h>
#include <pvm3.h>

#if defined(WIN32) || defined(CYGWIN)
#include "..\xdr\types.h"
#include "..\xdr\xdr.h"
#else
#include <rpc/types.h>
#include <rpc/xdr.h>
#endif

#ifndef WIN32
#include <netinet/in.h>
#ifndef NO_NETINET_TCP_H
#include <netinet/tcp.h>
#endif
#endif

#include "pmsg.h"
#include <pvmtev.h>
#include "tevmac.h"
#include "host.h"
#include "waitc.h"
#include "global.h"



/***************
 **  Globals  **
 **           **
 ***************/

int pvmautoerr = 1;						/* whether auto print err msg */

struct Pvmtracer pvmctrc =				/* child tracer info */
	{ 0, 0, 0, 0, 0, 0, 0, 0, "" };

struct Pvmtracer pvmtrc =				/* task tracer info */
	{ 0, 0, 0, 0, 0, 0, 0, 0, "" };

int pvmmyptid = -1;						/* parent task id */
int pvmmytid = -1;						/* this task id */
int pvmmyupid = -1;						/* process unix pid */
int pvm_useruid = -1;					/* user's unix uid */
int pvmmydsig = 0;						/* native data enc, init XDR */
int pvmschedtid = 0;					/* scheduler task */
int pvmrescode = 0;						/* allow reserved tids, tags */
int pvmshowtaskid = 1;					/* catchout shows task ids */
int pvmtoplvl = 1;						/* funct called outside lib */
int pvmdebmask = 0;						/* which debugging info */
int pvmnoreset = 0;						/* task reset override */
int pvmnoresetindex = -1;				/* task reset overrd mb index */

char *pvmmytaskname = (char *) NULL;	/* task name */

#if defined(IMA_CM5) || defined(IMA_CUBE) || defined(IMA_I860) \
  || defined(IMA_PGON) || defined(IMA_SP2MPI) || defined(IMA_ALPHAMP) \
  || defined(IMA_CSPP) || defined(IMA_HPPAMP) || defined(IMA_RS6KMP) \
  || defined(IMA_SGIMP) || defined(IMA_SGIMP6) || defined(IMA_SGIMP64) \
  || defined(IMA_SUNMP) || defined(IMA_AIX4MP) || defined(IMA_AIX5MP) \
  || defined(AIX4SP2) || defined(IMA_AIX5SP2) || defined(IMA_BEOLIN)
#include "pvmmimd.h"
int pvmrouteopt = PvmDontRoute;			/* task-task routing style */
int pvmfrgsiz = MAXFRAGSIZE;			/* msg frag length (to pack) */
int pvmudpmtu = MAXFRAGSIZE;			/* local UDP MTU */
#else
int pvmrouteopt = PvmAllowDirect;		/* task-task routing style */
int pvmfrgsiz = UDPMAXLEN;				/* msg frag length (to pack) */
int pvmudpmtu = UDPMAXLEN;				/* local UDP MTU */
#endif

int pvmmyctx = 0;						/* current message context */
int pvmnsibs = -1;						/* number in our spawn group */
int *pvmsibtids = 0;					/* tids in our spawn group */

struct pmsg *pvmrxlist = 0;				/* not-recvd msg list */

struct pmsg *pvmrbuf = 0;				/* current recv/unpack msg */
struct pmsg *pvmsbuf = 0;				/* current send/pack msg */


#if defined(IMA_ALPHAMP) || defined(IMA_CSPP) || defined(IMA_HPPAMP) \
	|| defined(IMA_RS6KMP) || defined(IMA_SGIMP) \
	|| defined(IMA_SGIMP6) || defined(IMA_SGIMP64) \
	|| defined(IMA_AIX4MP) || defined(IMA_AIX5MP) \
	|| defined(IMA_SUNMP)
int pvmpolltype = PvmPollSleep;			/* memory polling style */
int pvmpolltime = BUSYWAIT;				/* time value for poll wait */
#endif


#ifdef LOG
FILE *logfp = 0;						/* my own log file */
#endif


/* General Trace Globals */

struct pvmtrcencvec *pvmtrccodef;		/* trace packing vector */

struct timeval pvmtrcztv = { 0, 0 };	/* trace zero time value */

struct pmsg *pvmtrcmp;					/* trace record buffer mesg */

int pvmtrcsbfsave = 0;					/* trace save send buffer */
int pvmtrcsbf = 0;						/* trace record buffer */

int pvmtrcdesc;							/* trace descriptor status */
int pvmtrctmp;							/* trace temporary storage */

int pvmtrcsavekind;						/* trace event kind for fin */



syntax highlighted by Code2HTML, v. 0.9.1