*** ../netlib/pvm3.3.1/conf/KSR1.def	Sat Jun  4 17:52:05 1994
--- conf/KSR1.def	Wed Jun 29 11:33:51 1994
***************
*** 1,4 ****
! ARCHCFLAGS	=	-DNOWAIT3 -DNOUNIXDOM
  ARCHDLIB	=
  ARCHDOBJ	=
  ARCHLIB	=	-lrpc
--- 1,4 ----
! ARCHCFLAGS	=	-DNOWAIT3 -DNOUNIXDOM -DHASSTDLIB
  ARCHDLIB	=
  ARCHDOBJ	=
  ARCHLIB	=	-lrpc
*** ../netlib/pvm3.3.1/conf/KSR1.m4	Fri Apr  2 10:17:58 1993
--- conf/KSR1.m4	Mon Jun 27 09:41:31 1994
***************
*** 1,9 ****
  divert(-1)
  undefine(`len')
  #
! # do nothing special to FORTRAN function names
  #
! define(`FUNCTION',`$1')
  #
  # FORTRAN character strings are passed as follows:
  # a pointer to the base of the string is passed in the normal
--- 1,9 ----
  divert(-1)
  undefine(`len')
  #
! # append an underscore to FORTRAN function names
  #
! define(`FUNCTION',`$1_')
  #
  # FORTRAN character strings are passed as follows:
  # a pointer to the base of the string is passed in the normal
*** ../netlib/pvm3.3.1/doc/bugreport	Tue Jun 21 15:40:23 1994
--- doc/bugreport	Mon Jun 27 14:16:40 1994
***************
*** 15,20 ****
--- 15,22 ----
  * The machine type(s) you're using, hardware and software (e.g. DEC
    3000/500 running OSF 1.2).
  
+ * The machine architecture PVM chooses for you (e.g. ALPHA).
+ 
  * A short description of the problem (what happens, when, etc.).
    Include error messages (don't edit them to summarize).
  
*** ../netlib/pvm3.3.1/examples/Makefile.aimk	Sat Jun  4 18:35:50 1994
--- examples/Makefile.aimk	Fri Jul  1 10:50:27 1994
***************
*** 1,20 ****
  #
! # Custom section
! # Set PVM_ARCH to your architecture type (SUN4, HP9K, RS6K, SGI, etc)
! # if PVM_ARCH = BSD386 then set ARCHLIB = -lrpc
! # if PVM_ARCH = SGI    then set ARCHLIB = -lsun
! # if PVM_ARCH = I860   then set ARCHLIB = -lrpc -lsocket
! # if PVM_ARCH = IPSC2  then set ARCHLIB = -lrpc -lsocket
  # otherwise leave ARCHLIB blank
  #
! # PVM_ARCH and ARCHLIB are set for you if you use '$PVM_ROOT/lib/aimk'.
! # 'aimk' also creates a $PVM_ARCH directory below this one 
! # and will cd to it before invoking make. 
  #
! PVM_ARCH	=	UNKNOWN
! # END of custom section - leave this line here
  #
! PVMLIB	=	$(PVM_ROOT)/lib/$(PVM_ARCH)/libpvm3.a
  SDIR	=	..
  BDIR	=	$(HOME)/pvm3/bin
  XDIR	=	$(BDIR)/$(PVM_ARCH)
--- 1,18 ----
  #
! # Makefile.aimk for PVM example programs.
! #
! # Set PVM_ROOT to the path where PVM includes and libraries are installed.
! # Set PVM_ARCH to your architecture type (SUN4, HP9K, RS6K, SGI, etc.)
! # Set ARCHLIB to any special libs needed on PVM_ARCH (-lrpc, -lsocket, etc.)
  # otherwise leave ARCHLIB blank
  #
! # PVM_ARCH and ARCHLIB are set for you if you use "$PVM_ROOT/lib/aimk"
! # instead of "make".
  #
! # aimk also creates a $PVM_ARCH directory below this one and will cd to it
! # before invoking make - this allows building in parallel on different arches.
  #
! 
  SDIR	=	..
  BDIR	=	$(HOME)/pvm3/bin
  XDIR	=	$(BDIR)/$(PVM_ARCH)
***************
*** 21,98 ****
  
  CC	=	cc
  CFLAGS	=	-g -I$(PVM_ROOT)/include
! LIBS	=	$(PVMLIB) $(ARCHLIB)
! GLIBS   =	$(PVM_ROOT)/lib/$(PVM_ARCH)/libgpvm3.a
  
! F77     =	f77
! FFLAGS	=	-g 
! FLIBS	=	$(PVM_ROOT)/lib/$(PVM_ARCH)/libfpvm3.a
  
  default:	hello hello_other
  
  $(XDIR):
  	- mkdir $(BDIR)
  	- mkdir $(XDIR)
  
! clean:
! 	rm -f *.o timing_slave timing spmd fspmd master slave fmaster fslave testall
! 
! hello: $(SDIR)/hello.c  $(XDIR)
! 	$(CC) $(CFLAGS) -o hello $(SDIR)/hello.c $(LIBS)
  	mv hello $(XDIR)
  
! hello_other: $(SDIR)/hello_other.c  $(XDIR)
! 	$(CC) $(CFLAGS) -o hello_other $(SDIR)/hello_other.c $(LIBS)
  	mv hello_other $(XDIR)
  
! timing_slave: $(SDIR)/timing_slave.c  $(XDIR)
! 	$(CC) $(CFLAGS) -o timing_slave $(SDIR)/timing_slave.c  $(LIBS)
  	mv timing_slave $(XDIR)
  
! timing: $(SDIR)/timing.c  $(XDIR)
! 	$(CC) $(CFLAGS) -o timing $(SDIR)/timing.c $(LIBS)
  	mv timing $(XDIR)
  
! spmd: $(SDIR)/spmd.c  $(XDIR)
! 	$(CC) $(CFLAGS) -o spmd $(SDIR)/spmd.c $(LIBS) $(GLIBS)
  	mv spmd $(XDIR)
  
! fspmd: $(SDIR)/spmd.f  $(XDIR)
! 	$(F77) $(FFLAGS) -o spmd $(SDIR)/spmd.f $(FLIBS) $(GLIBS) $(LIBS)
  	mv spmd $(XDIR)
  
! master: $(SDIR)/master1.c  $(XDIR)
! 	$(CC) $(CFLAGS) -o master1 $(SDIR)/master1.c  $(LIBS)
  	mv master1 $(XDIR)
  
! slave: $(SDIR)/slave1.c  $(XDIR)
! 	$(CC) $(CFLAGS) -o slave1 $(SDIR)/slave1.c  $(LIBS)
  	mv slave1 $(XDIR)
  
! fmaster: $(SDIR)/master1.f  $(XDIR)
! 	$(F77) $(FFLAGS) -o master1 $(SDIR)/master1.f $(FLIBS) $(LIBS)
  	mv master1 $(XDIR)
  
! fslave: $(SDIR)/slave1.f  $(XDIR)
! 	$(F77) $(FFLAGS) -o slave1 $(SDIR)/slave1.f $(FLIBS) $(LIBS)
  	mv slave1 $(XDIR)
  
! testall: $(SDIR)/testall.f  $(XDIR)
! 	$(F77) $(FFLAGS) -o testall $(SDIR)/testall.f $(FLIBS) $(LIBS)
  	mv testall $(XDIR)
  
! hitc: $(SDIR)/hitc.f  $(XDIR)
! 	$(F77) $(FFLAGS) -o hitc $(SDIR)/hitc.f $(FLIBS) $(LIBS)
  	mv hitc $(XDIR)
  
! hitc_slave: $(SDIR)/hitc_slave.f  $(XDIR)
! 	$(F77) $(FFLAGS) -o hitc_slave $(SDIR)/hitc_slave.f $(FLIBS) $(LIBS)
  	mv hitc_slave $(XDIR)
  
! gexample: $(SDIR)/gexample.c  $(XDIR)
! 	$(CC) $(CFLAGS) -o gexample $(SDIR)/gexample.c $(LIBS) $(GLIBS)
  	mv gexample $(XDIR)
  
! fgexample: $(SDIR)/gexample.f  $(XDIR)
! 	$(F77) $(FFLAGS) -o gexample $(SDIR)/gexample.f $(FLIBS) $(GLIBS) $(LIBS)
  	mv gexample $(XDIR)
--- 19,105 ----
  
  CC	=	cc
  CFLAGS	=	-g -I$(PVM_ROOT)/include
! LIBS	=	-lpvm3 $(ARCHLIB)
! GLIBS	=	-lgpvm3
  
! F77	=	f77
! FFLAGS	=	-g
! FLIBS	=	-lfpvm3
  
+ LFLAGS	=	-L$(PVM_ROOT)/lib/$(PVM_ARCH)
+ 
  default:	hello hello_other
  
+ all: c-all f-all
+ 
+ c-all:	gexample hello hello_other master slave spmd timing timing_slave
+ 
+ f-all:	fgexample fmaster fslave fspmd hitc hitc_slave testall
+ 
+ clean:
+ 	rm -f *.o gexample hello hello_other hitc hitc_slave master1 slave1 \
+ 		spmd testall timing timing_slave
+ 
  $(XDIR):
  	- mkdir $(BDIR)
  	- mkdir $(XDIR)
  
! hello: $(SDIR)/hello.c $(XDIR)
! 	$(CC) $(CFLAGS) -o hello $(SDIR)/hello.c $(LFLAGS) $(LIBS)
  	mv hello $(XDIR)
  
! hello_other: $(SDIR)/hello_other.c $(XDIR)
! 	$(CC) $(CFLAGS) -o hello_other $(SDIR)/hello_other.c $(LFLAGS) $(LIBS)
  	mv hello_other $(XDIR)
  
! timing_slave: $(SDIR)/timing_slave.c $(XDIR)
! 	$(CC) $(CFLAGS) -o timing_slave $(SDIR)/timing_slave.c $(LFLAGS) $(LIBS)
  	mv timing_slave $(XDIR)
  
! timing: $(SDIR)/timing.c $(XDIR)
! 	$(CC) $(CFLAGS) -o timing $(SDIR)/timing.c $(LFLAGS) $(LIBS)
  	mv timing $(XDIR)
  
! spmd: $(SDIR)/spmd.c $(XDIR)
! 	$(CC) $(CFLAGS) -o spmd $(SDIR)/spmd.c $(LFLAGS) $(GLIBS) $(LIBS)
  	mv spmd $(XDIR)
  
! fspmd: $(SDIR)/spmd.f $(XDIR)
! 	$(F77) $(FFLAGS) -o spmd $(SDIR)/spmd.f $(LFLAGS) $(FLIBS) $(GLIBS) $(LIBS)
  	mv spmd $(XDIR)
  
! master: $(SDIR)/master1.c $(XDIR)
! 	$(CC) $(CFLAGS) -o master1 $(SDIR)/master1.c $(LFLAGS) $(LIBS)
  	mv master1 $(XDIR)
  
! slave: $(SDIR)/slave1.c $(XDIR)
! 	$(CC) $(CFLAGS) -o slave1 $(SDIR)/slave1.c $(LFLAGS) $(LIBS)
  	mv slave1 $(XDIR)
  
! fmaster: $(SDIR)/master1.f $(XDIR)
! 	$(F77) $(FFLAGS) -o master1 $(SDIR)/master1.f $(LFLAGS) $(FLIBS) $(LIBS)
  	mv master1 $(XDIR)
  
! fslave: $(SDIR)/slave1.f $(XDIR)
! 	$(F77) $(FFLAGS) -o slave1 $(SDIR)/slave1.f $(LFLAGS) $(FLIBS) $(LIBS)
  	mv slave1 $(XDIR)
  
! testall: $(SDIR)/testall.f $(XDIR)
! 	$(F77) $(FFLAGS) -o testall $(SDIR)/testall.f $(LFLAGS) $(FLIBS) $(LIBS)
  	mv testall $(XDIR)
  
! hitc: $(SDIR)/hitc.f $(XDIR)
! 	$(F77) $(FFLAGS) -o hitc $(SDIR)/hitc.f $(LFLAGS) $(FLIBS) $(LIBS)
  	mv hitc $(XDIR)
  
! hitc_slave: $(SDIR)/hitc_slave.f $(XDIR)
! 	$(F77) $(FFLAGS) -o hitc_slave $(SDIR)/hitc_slave.f $(LFLAGS) $(FLIBS) $(LIBS)
  	mv hitc_slave $(XDIR)
  
! gexample: $(SDIR)/gexample.c $(XDIR)
! 	$(CC) $(CFLAGS) -o gexample $(SDIR)/gexample.c $(LFLAGS) $(GLIBS) $(LIBS)
  	mv gexample $(XDIR)
  
! fgexample: $(SDIR)/gexample.f $(XDIR)
! 	$(F77) $(FFLAGS) -o gexample $(SDIR)/gexample.f $(LFLAGS) $(FLIBS) $(GLIBS) $(LIBS)
  	mv gexample $(XDIR)
*** ../netlib/pvm3.3.1/examples/timing.c	Thu Mar 10 10:24:04 1994
--- examples/timing.c	Mon Jun 27 09:17:30 1994
***************
*** 102,108 ****
  
  	puts("\nDoing Bandwidth tests\n");
  
! 	for (numint = 25; numint < 100000; numint *= 10) {
  		printf("\nMessage size %d\n", numint * 4);
  		at1 = at2 = 0;
  		iarray = (int*)malloc(numint * sizeof(int));
--- 102,108 ----
  
  	puts("\nDoing Bandwidth tests\n");
  
! 	for (numint = 25; numint < 1000000; numint *= 10) {
  		printf("\nMessage size %d\n", numint * 4);
  		at1 = at2 = 0;
  		iarray = (int*)malloc(numint * sizeof(int));
***************
*** 138,145 ****
  			at2 += dt2;
  		}
  
! 		at1 /= reps;
! 		at2 /= reps;
  		puts("Avg uSec");
  		printf("     %8d   %8d\n", at1, at2);
  		puts("Avg Byte/uSec");
--- 138,147 ----
  			at2 += dt2;
  		}
  
! 		if (!(at1 /= reps))
! 			at1 = 1;
! 		if (!(at2 /= reps))
! 			at2 = 1;
  		puts("Avg uSec");
  		printf("     %8d   %8d\n", at1, at2);
  		puts("Avg Byte/uSec");
*** ../netlib/pvm3.3.1/gexamples/Makefile	Tue Jun  1 14:32:56 1993
--- gexamples/Makefile	Thu Jun 30 18:46:07 1994
***************
*** 1,11 ****
  
! #PVM_ARCH=
! ARCHCFLAGS	=
! PVMIDIR	=	../include
! PVMLDIR	=	../lib/$(PVM_ARCH)
! PVMLIB	=	-lpvm3 -lgpvm3
  CFLAGS	=	-g -I$(PVMIDIR) -L$(PVMLDIR) $(ARCHCFLAGS)
! BDIR	=	../bin
  XDIR	=	$(BDIR)/$(PVM_ARCH)
  
  all: gexamp tst thb tnb ge tjl tjf gs
--- 1,24 ----
+ #
+ # Makefile for PVM group library example programs.
+ #
+ # Set PVM_ROOT to the path where PVM includes and libraries are installed.
+ # Set PVM_ARCH to your architecture type (SUN4, HP9K, RS6K, SGI, etc.)
+ # Set ARCHLIB to any special libs needed on PVM_ARCH (-lrpc, -lsocket, etc.)
+ # otherwise leave ARCHLIB blank
+ #
+ # PVM_ARCH and ARCHLIB are set for you if you use "$PVM_ROOT/lib/aimk"
+ # instead of "make".
+ #
  
! #PVM_ROOT	=
! #PVM_ARCH	=
! #ARCHCFLAGS	=
! 
! PVMIDIR	=	$(PVM_ROOT)/include
! PVMLDIR	=	$(PVM_ROOT)/lib/$(PVM_ARCH)
! PVMLIB	=	-lgpvm3 -lpvm3
  CFLAGS	=	-g -I$(PVMIDIR) -L$(PVMLDIR) $(ARCHCFLAGS)
! BDIR	=	$(HOME)/pvm3/bin
  XDIR	=	$(BDIR)/$(PVM_ARCH)
  
  all: gexamp tst thb tnb ge tjl tjf gs
*** ../netlib/pvm3.3.1/lib/debugger2	Fri Apr  9 16:50:14 1993
--- lib/debugger2	Mon Jun 27 09:40:23 1994
***************
*** 49,54 ****
--- 49,59 ----
  	set DBFF="-q -x $TEMPCMD"
  	breaksw
  
+ case KSR1:
+ 	set DBCMD="udb"
+ 	set DBFF="-W $TEMPCMD"
+ 	breaksw
+ 
  default:
  # ALPHA PMAX SYMM RS6K
  	breaksw
*** ../netlib/pvm3.3.1/man/man1/pvm.1	Tue Jun 21 15:40:24 1994
--- man/man1/pvm.1	Mon Jun 27 14:51:27 1994
***************
*** 10,16 ****
  [
  hostfile
  ]
- &
  .ft R
  .SH DESCRIPTION
  .I Pvm
--- 10,15 ----
***************
*** 22,28 ****
  .PP
  When started \fIpvm\fR determines if PVM is already running
  and if not automatically executes pvmd3 on this host,
! passing pvmd3 the command line options and hostfile.
  Thus PVM need not be running to start the console.
  Once started the console prints the prompt:
  .br
--- 21,27 ----
  .PP
  When started \fIpvm\fR determines if PVM is already running
  and if not automatically executes pvmd3 on this host,
! passing pvmd3 the command line options and host file.
  Thus PVM need not be running to start the console.
  Once started the console prints the prompt:
  .br
***************
*** 79,86 ****
  
  	pvm  hostfile
  .br
! Starts up console and pvmd3, which inturn reads the hostfile and
  adds the listed computers to the virtual machine.
  
  .SH SEE ALSO
! pvmd3(1PVM)
--- 78,85 ----
  
  	pvm  hostfile
  .br
! Starts up console and pvmd3, which inturn reads the host file and
  adds the listed computers to the virtual machine.
  
  .SH SEE ALSO
! pvm_intro(1PVM), pvmd3(1PVM)
*** ../netlib/pvm3.3.1/man/man1/pvm_intro.1	Fri May  6 15:23:45 1994
--- man/man1/pvm_intro.1	Thu Jun 30 16:55:31 1994
***************
*** 133,140 ****
  Thinking Machines CM-2 Vax front
  .PD
  .RE
  .SH SEE ALSO
! pvm(1PVM), pvmd3(1PVM),
  PVM 3.3 User's Guide and Reference Manual
  .SH AUTHORS
  A. L. Beguelin [4,5],
--- 133,197 ----
  Thinking Machines CM-2 Vax front
  .PD
  .RE
+ .\".SH INSTALLING
+ 
+ .SH ENVIRONMENT VARIABLES
+ The following environment variables are used by PVM and may be used
+ to customize your PVM environment.
+ If you set them,
+ you should do so in your \fI.cshrc\fR or \fI.profile\fR file.
+ .IP PVM_ROOT
+ The path where PVM libraries and system programs are installed,
+ for example /usr/local/pvm3 or $HOME/pvm3.
+ This variable must be set on each host where PVM is used in order
+ for PVM to function.
+ There is no default value.
+ .IP PVM_EXPORT
+ Names of environment variables to export from a parent task
+ to children tasks through \fIpvm_spawn()\fR.
+ Multiple names must be separated by ':'.
+ If PVM_EXPORT is not set, no environment is exported.
+ .IP PVM_DEBUGGER
+ The debugger script to use when \fIpvm_spawn()\fR is called
+ with \fIPvmTaskDebug\fR set.
+ The default is $PVM_ROOT/lib/debugger.
+ .IP PVM_DPATH
+ [v3.3.2 and later]
+ The path of the pvmd startup script (default is $PVM_ROOT/lib/pvmd).
+ It is overridden by host file option \fIdx=\fR.
+ 
+ This variable is useful if you use a shell that doesn't automatically
+ execute a startup script (such as .cshrc) to allow setting PVM_ROOT
+ on slave (added) hosts.
+ If you set it to the absolute or relative path of the pvmd startup
+ script (for example /usr/local/pvm3/lib/pvmd or pvm3/lib/pvmd),
+ the script will automatically set PVM_ROOT.
+ .PP
+ 
+ The following environment variables are used by PVM internally.
+ With the exception of PVM_ARCH,
+ their values should not be modified.
+ This is for information only.
+ .IP PVM_ARCH
+ The PVM architecture name of the host on which it is set,
+ used to distinguish between
+ machines with different executable (a.out) formats.
+ Copies of a program for different architectures are installed
+ in parallel directories named for PVM architectures.
+ .IP PVMSOCK
+ Is passed from pvmd to spawned task, and gives the
+ address of the pvmd local socket.
+ .IP PVMEPID
+ Holds the expected process id of a spawned task exec'd by the pvmd.
+ The task uses this value to identify itself when reconnecting to the pvmd.
+ .IP PVMTMASK
+ [v3.3 and later]
+ The libpvm trace mask,
+ passed from the pvmd to spawned tasks.
+ .PP
+ 
  .SH SEE ALSO
! aimk(1PVM), pvm(1PVM), pvmd3(1PVM),
  PVM 3.3 User's Guide and Reference Manual
  .SH AUTHORS
  A. L. Beguelin [4,5],
*** ../netlib/pvm3.3.1/man/man1/pvmd3.1	Tue Jun 21 15:40:24 1994
--- man/man1/pvmd3.1	Thu Jun 30 16:57:20 1994
***************
*** 10,15 ****
--- 10,16 ----
  [
  hostfile
  ]
+ &
  .ft R
  .SH DESCRIPTION
  .I Pvmd3
***************
*** 211,217 ****
  Nothing
  .TP 8
  dx
! $PVM_ROOT/lib/pvmd
  .TP 8
  ep
  pvm3/bin/$PVM_ARCH:$PVM_ROOT/bin/$PVM_ARCH
--- 212,218 ----
  Nothing
  .TP 8
  dx
! $PVM_ROOT/lib/pvmd (or environment variable PVM_DPATH)
  .TP 8
  ep
  pvm3/bin/$PVM_ARCH:$PVM_ROOT/bin/$PVM_ARCH
***************
*** 305,308 ****
  .fi
  
  .SH SEE ALSO
! pvm(1PVM)
--- 306,310 ----
  .fi
  
  .SH SEE ALSO
! pvm(1PVM),
! pvm_intro(1PVM)
*** /dev/null	Fri Jul  1 11:25:11 1994
--- man/man3/libpvm.3	Mon Jun 27 15:21:35 1994
***************
*** 0 ****
--- 1,172 ----
+ .TH LIBPVM 3PVM "27 June, 1994"
+ .SH NAME
+ libpvm3.a, libfpvm3.a \- PVM C and Fortran programming libraries
+ 
+ .SH DESCRIPTION
+ 
+ All PVM applications must be linked with the libpvm library to allow them
+ to communicate with other entities in the PVM system.
+ The base library (libpvm3.a) is
+ written in C and
+ directly supports C and C++ applications.
+ The Fortran library (libfpvm3.a) consists of wrapper functions to
+ convert Fortran calling sequences to C.
+ 
+ Applications written in C
+ must be linked with at least the base PVM library, libpvm3.a.
+ Fortran applications must be linked with both libfpvm3.a and libpvm3.a.
+ On some operating systems,
+ PVM programs must be linked with
+ other vendor-provided libraries
+ (containing for example, socket or XDR functions).
+ 
+ Programs that use group functions
+ must also be linked with libgpvm3.a.
+ 
+ .SH SUBROUTINES
+ The libpvm subroutines can be divided into roughly five classes:
+ 
+ .IP Message\ Passing
+ pvm_bufinfo,
+ pvm_freebuf,
+ pvm_getrbuf,
+ pvm_getsbuf,
+ pvm_initsend,
+ pvm_mcast,
+ pvm_mkbuf,
+ pvm_nrecv,
+ pvm_pack,
+ pvm_precv,
+ pvm_probe,
+ pvm_psend,
+ pvm_recv,
+ pvm_recvf,
+ pvm_send,
+ pvm_sendsig,
+ pvm_setmwid,
+ pvm_setrbuf,
+ pvm_setsbuf,
+ pvm_trecv,
+ pvm_unpack
+ .IP Task\ Control
+ pvm_exit,
+ pvm_kill,
+ pvm_mytid,
+ pvm_parent,
+ pvm_pstat,
+ pvm_spawn,
+ pvm_tasks
+ .IP Group\ Library\ Functions
+ pvm_barrier,
+ pvm_bcast,
+ pvm_gather,
+ pvm_getinst,
+ pvm_gettid,
+ pvm_gsize,
+ pvm_joingroup,
+ pvm_lvgroup,
+ pvm_reduce,
+ pvm_scatter
+ .IP Virtual\ Machine\ Control
+ pvm_addhosts,
+ pvm_config,
+ pvm_delhosts,
+ pvm_halt,
+ pvm_mstat,
+ pvm_reg_hoster,
+ pvm_reg_rm,
+ pvm_reg_tasker,
+ pvm_start_pvmd
+ .IP Miscellaneous
+ pvm_archcode,
+ pvm_catchout,
+ pvm_getopt,
+ pvm_hostsync,
+ pvm_notify,
+ pvm_perror,
+ pvm_setopt,
+ pvm_settmask,
+ pvm_tidtohost
+ .PP
+ 
+ 
+ .SH ERRORS
+ On success, most libpvm functions return the constant PvmOk.
+ The following error conditions can be returned by libpvm functions:
+ 
+ .IP PvmBadParam
+ A bad parameter was passed to the function.
+ .IP PvmMismatch
+ The count parameter does not match the count used in peer tasks.
+ .IP PvmNoData
+ The end of a message buffer was reached while trying to unpack data.
+ .IP PvmNoHost
+ There is no host available with the given name.
+ .IP PvmNoFile
+ The named executable does not exist.
+ .IP PvmNoMem
+ Malloc failed to get memory for libpvm.
+ .IP PvmBadMsg
+ The received messages has a data format native to another machine,
+ which cannot be decoded by libpvm.
+ .IP PvmSysErr
+ Libpvm could not contact a pvmd on the local host,
+ or the pvmd failed during an operation.
+ .IP PvmNoBuf
+ There is no current message buffer to pack or unpack.
+ .IP PvmNoSuchBuf
+ There is no message buffer with the given buffer handle.
+ .IP PvmNullGroup
+ A null group name was passed to a function.
+ .IP PvmDupGroup
+ The task has already a member of the group it attempted to join.
+ .IP PvmNoGroup
+ The named group does not exist.
+ .IP PvmNotInGroup
+ The named group has no such member task.
+ .IP PvmNoInst
+ The named group has no member with this instance.
+ .IP PvmHostFail
+ A foreign host in the virtual machine failed during the requested operation.
+ .IP PvmNoParent
+ This task has no parent task.
+ .IP PvmNotImpl
+ This libpvm function or option is not implemented.
+ .IP PvmDSysErr
+ Some internal mechanism in the pvmd failed during the requested operation.
+ .IP PvmBadVersion
+ Two PVM components (pvmd and task, two pvmds or two tasks) have
+ incompatible protocol versions and cannot interoperate.
+ Version mismatch
+ .IP PvmOutOfRes
+ The requested operation could not be completed due to lack of resources.
+ .IP PvmDupHost
+ An attempt was made to add the same host to a virtual machine more than
+ once,
+ or to add a host already a member of another virtual machine owned by
+ the same user.
+ .IP PvmCantStart
+ A pvmd failed to start on the local host.
+ .IP PvmAlready
+ The requested operation requires exclusive access,
+ and another was already in progress.
+ .IP PvmNoTask
+ No task exists with the given tid.
+ .IP PvmNoEntry
+ The class server has no entry matching the lookup request.
+ .IP PvmDupEntry
+ The class server already has an entry matching the insert request.
+ .PP
+ 
+ .SH FILES
+ .IP $PVM_ROOT/include/fpvm3.h
+ .IP $PVM_ROOT/include/pvm3.h
+ .IP $PVM_ROOT/include/pvmsdpro.h
+ .IP $PVM_ROOT/include/pvmtev.h
+ .IP $PVM_ROOT/lib/$PVM_ARCH/libpvm3.a
+ .IP $PVM_ROOT/lib/$PVM_ARCH/libfpvm3.a
+ .IP $PVM_ROOT/lib/$PVM_ARCH/libgpvm3.a
+ .PP
+ 
+ .SH SEE ALSO
+ aimk(1PVM), pvm(1PVM), pvm_intro(1PVM), pvmd3(1PVM)
*** /dev/null	Fri Jul  1 11:25:12 1994
--- man/man3/pvm_delete.3	Mon Jun 27 16:06:51 1994
***************
*** 0 ****
--- 1,38 ----
+ .TH DELETE 3PVM "27 June, 1994"
+ .SH NAME
+ pvm_delete \- delete data from pvmd database
+ 
+ .SH SYNOPSIS
+ .ft B
+ C	int cc = pvm_delete( char *name, int index )
+ .br
+ 
+ Fortran	Not available
+ .fi
+ 
+ .SH PARAMETERS
+ .IP name 0.8i
+ The class name, a null-terminated string.
+ .IP index 0.8i
+ The class index, >= 0.
+ 
+ .SH DISCUSSION
+ See pvm_insert(3PVM) for a description of this database.
+ 
+ \fIpvm_delete\fR
+ deletes entry <name, index> from the database.
+ 
+ .\".SH EXAMPLES
+ 
+ .SH ERRORS
+ If successful, pvm_delete returns PvmOk,
+ otherwise it returns a negative error code:
+ .ta 0.5i 2.0i
+ .nf
+ 	PvmBadParam	giving an invalid argument value.
+ 	PvmNoEntry	the requested <name, index> pair does not exist.
+ .fi
+ .SH SEE ALSO
+ pvm_insert(3PVM),
+ pvm_lookup(3PVM)
+ 
*** /dev/null	Fri Jul  1 11:25:13 1994
--- man/man3/pvm_insert.3	Mon Jun 27 16:06:32 1994
***************
*** 0 ****
--- 1,61 ----
+ .TH INSERT 3PVM "27 June, 1994"
+ .SH NAME
+ pvm_insert \- store data in pvmd database
+ 
+ .SH SYNOPSIS
+ .ft B
+ C	int cc = pvm_insert( char *name, int index, int data )
+ .br
+ 
+ Fortran	Not available
+ .fi
+ 
+ .SH PARAMETERS
+ .IP name 0.8i
+ The class name, a null-terminated string.
+ .IP index 0.8i
+ The class index, >= 0 or -1 for first available.
+ .IP data 0.8i
+ Data to store in the <name, index> entry.
+ 
+ .SH DISCUSSION
+ The master pvmd maintains a simple database,
+ which can be used to store values such as tids and make them
+ accessible anywhere within a virtual
+ machine.
+ This is useful when building an application such as the group
+ server,
+ which must advertise its task id
+ so clients can register send messages to register.
+ 
+ The database stores integer data,
+ indexed by <name, index> pairs.
+ The name may be any null-terminated string
+ and the index any non-negative integer.
+ Database entries are grouped by name into classes;
+ index may be specified as -1 to store or retrieve the first available
+ instance in a class.
+ 
+ These functions are not part of the group library,
+ but are the underlying mechanism used to implement it.
+ 
+ \fIpvm_insert\fR stores data at the given index.
+ If index is -1,
+ the data is stored at the first available index in the named class,
+ starting at 0.
+ 
+ .\".SH EXAMPLES
+ 
+ .SH ERRORS
+ If successful,
+ pvm_insert returns the index at which the data was stored,
+ otherwise it returns a negative result.
+ The following error conditions can be returned:
+ .ta 0.5i 2.0i
+ .nf
+ 	PvmBadParam	giving an invalid argument value.
+ 	PvmDupEntry	the requested <name, index> pair is already in use.
+ .fi
+ .SH SEE ALSO
+ pvm_delete(3PVM),
+ pvm_lookup(3PVM)
*** /dev/null	Fri Jul  1 11:25:13 1994
--- man/man3/pvm_lookup.3	Mon Jun 27 16:06:45 1994
***************
*** 0 ****
--- 1,44 ----
+ .TH LOOKUP 3PVM "27 June, 1994"
+ .SH NAME
+ pvm_lookup \- retrieve data from pvmd database
+ 
+ .SH SYNOPSIS
+ .ft B
+ C	int cc = pvm_lookup( char *name, int index, int *data )
+ .br
+ 
+ Fortran	Not available
+ .fi
+ 
+ .SH PARAMETERS
+ .IP name 0.8i
+ The class name, a null-terminated string.
+ .IP index 0.8i
+ The class index, >= 0 or -1 for first available.
+ .IP data 0.8i
+ Returns the data stored in the <name, index> entry.
+ 
+ .SH DISCUSSION
+ See pvm_insert(3PVM) for a description of this database.
+ 
+ \fIpvm_lookup\fR
+ retrieves data stored in the location given by <name, index>.
+ If index is -1,
+ the data stored at the first existing index in the named class
+ is returned.
+ 
+ .\".SH EXAMPLES
+ 
+ .SH ERRORS
+ If successful, pvm_lookup returns the index at which the data was stored
+ (>= 0),
+ otherwise it returns a negative error code:
+ .ta 0.5i 2.0i
+ .nf
+ 	PvmBadParam	giving an invalid argument value.
+ 	PvmNoEntry	the requested <name, index> pair does not exist.
+ .fi
+ .SH SEE ALSO
+ pvm_delete(3PVM),
+ pvm_insert(3PVM)
+ 
*** ../netlib/pvm3.3.1/patches/Contents	Tue Jun 21 15:40:28 1994
--- patches/Contents	Fri Jul  1 11:24:12 1994
***************
*** 1,3 ****
--- 1,36 ----
+ patch #2
+ version:
+     3.3.1 -> 3.3.2
+ files:
+     patch  conf/KSR1.def
+     patch  conf/KSR1.m4
+     patch  doc/bugreport
+     patch  examples/Makefile.aimk
+     patch  examples/timing.c
+     patch  gexamples/Makefile
+     patch  lib/debugger2
+     patch  man/man1/pvm.1
+     patch  man/man1/pvm_intro.1
+     patch  man/man1/pvmd3.1
+     create man/man3/libpvm.3
+     create man/man3/pvm_delete.3
+     create man/man3/pvm_insert.3
+     create man/man3/pvm_lookup.3
+     patch  src/ddpro.c
+     patch  src/global.h
+     patch  src/lpvmshmem.c
+     patch  src/patchlevel.h
+     patch  src/pvmd.c
+     patch  xep/xep.c
+ what:
+     . (master) pvmd now accepts envar. PVM_DPATH to set default dx= path.
+     . new man page for libpvm.
+     . hack pvmd to work on LINUX machines - fixed "bogus pkt" messages.
+     . fixes to KSR1 port - use <stdlib.h>, fix libfpvm names, debugger script.
+     . fix /0 bug in examples/timing.c.
+     . fix typo in shared memory protocol src/lpvmshmem.c that caused segfault.
+     . fix Makefiles in examples and gexamples.
+     . new man pages documenting "undocumented" functions.
  patch #1
  version:
      3.3.0 -> 3.3.1
***************
*** 60,67 ****
      patch  src/patchlevel.h
      patch  src/tdpro.c
  what:
-     . fix pvm_tasks man page
- for 3.3.1
      . fix pvm_tasks man page.
      . fix macro in include/pvmtev.h to not use i as a local variable.
      . fix host file sp= option - didn't work when other * defaults set.
--- 93,98 ----
*** ../netlib/pvm3.3.1/src/ddpro.c	Tue Jun 21 15:40:29 1994
--- src/ddpro.c	Thu Jun 30 17:34:17 1994
***************
*** 32,37 ****
--- 32,40 ----
   *	Entry points for messages from network.
   *
  $Log: ddpro.c,v $
+  * Revision 1.5  1994/06/30  21:33:46  manchek
+  * addhosts() uses PVM_DPATH envar
+  *
   * Revision 1.4  1994/06/21  18:29:21  manchek
   * subscript arith in dmname() broke with opt
   *
***************
*** 80,85 ****
--- 83,89 ----
  
  extern void pvmbailout();
  extern char *inadport_hex();
+ extern char *getenv();
  char **colonsep();
  char *varsub();
  
***************
*** 110,116 ****
   **           **
   ***************/
  
! static char rcsid[] = "$Id: ddpro.c,v 1.4 1994/06/21 18:29:21 manchek Exp $";
  static char pvmtxt[512];			/* scratch for error log */
  
  int dm_add();
--- 114,120 ----
   **           **
   ***************/
  
! static char rcsid[] = "$Id: ddpro.c,v 1.5 1994/06/30 21:33:46 manchek Exp $";
  static char pvmtxt[512];			/* scratch for error log */
  
  int dm_add();
***************
*** 503,508 ****
--- 507,513 ----
  	int hh;
  	int pid;
  	int *tids;
+ 	char *pvmdpath;
  	char buf[512];
  
  	/*
***************
*** 648,653 ****
--- 653,660 ----
  	mp2 = mesg_new(0);
  	mp2->m_wid = wp->wa_wid;
  	pkint(mp2, ngood);
+ 	if (!(pvmdpath = getenv("PVM_DPATH")))
+ 		pvmdpath = PVMDPATH;
  	for (i = 0; i < count; i++) {
  		hp = wxp->w_hosts[i];
  		if (hp->hd_err)
***************
*** 661,667 ****
  			strcpy(buf, (hp->hd_aname ? hp->hd_aname : hp->hd_name));
  		pkstr(mp2, buf);
  		(void)sprintf(buf, "%s -s -d%x -n%s %d %s %d",
! 				(hp->hd_dpath ? hp->hd_dpath : PVMDPATH),
  				debugmask,
  				hp->hd_name,
  				hosts->ht_master,
--- 668,674 ----
  			strcpy(buf, (hp->hd_aname ? hp->hd_aname : hp->hd_name));
  		pkstr(mp2, buf);
  		(void)sprintf(buf, "%s -s -d%x -n%s %d %s %d",
! 				(hp->hd_dpath ? hp->hd_dpath : pvmdpath),
  				debugmask,
  				hp->hd_name,
  				hosts->ht_master,
*** ../netlib/pvm3.3.1/src/global.h	Tue Jun 21 15:40:29 1994
--- src/global.h	Fri Jul  1 11:08:13 1994
***************
*** 32,37 ****
--- 32,40 ----
   *	Generic includes.
   *
  $Log: global.h,v $
+  * Revision 1.11  1994/07/01  15:08:02  manchek
+  * version to 3.3.2
+  *
   * Revision 1.10  1994/06/21  18:30:26  manchek
   * to version 3.3.1
   *
***************
*** 67,73 ****
  
  /* release version */
  
! #define	PVM_VER	"3.3.1"
  
  /* UDPMAXLEN should be set to the largest UDP message length
     your system can handle. */
--- 70,76 ----
  
  /* release version */
  
! #define	PVM_VER	"3.3.2"
  
  /* UDPMAXLEN should be set to the largest UDP message length
     your system can handle. */
*** ../netlib/pvm3.3.1/src/lpvmshmem.c	Sat Jun  4 17:44:45 1994
--- src/lpvmshmem.c	Thu Jun 30 17:35:47 1994
***************
*** 32,37 ****
--- 32,40 ----
   *	Libpvm core for MPP environment.
   *
  $Log: lpvmshmem.c,v $
+  * Revision 1.3  1994/06/30  21:35:40  manchek
+  * typo in peer_recv()
+  *
   * Revision 1.2  1994/06/04  21:44:31  manchek
   * updated header.
   * changed TM_SET to TM_SETOPT
***************
*** 200,206 ****
   **           **
   ***************/
  
! static char rcsid[] = "$Id: lpvmshmem.c,v 1.2 1994/06/04 21:44:31 manchek Exp $";
  static int debugmask = 0;				/* which debugging info */
  static char pvmtxt[512];				/* scratch for error log */
  static struct umbuf *rxfrag = 0;		/* not-assembled incm msgs */
--- 203,209 ----
   **           **
   ***************/
  
! static char rcsid[] = "$Id: lpvmshmem.c,v 1.3 1994/06/30 21:35:40 manchek Exp $";
  static int debugmask = 0;				/* which debugging info */
  static char pvmtxt[512];				/* scratch for error log */
  static struct umbuf *rxfrag = 0;		/* not-assembled incm msgs */
***************
*** 636,642 ****
  			LISTPUTBEFORE(pvmrxlist, rxup, ub_link, ub_rlink);
  			(*gotem)++;
  			/* XXX */
! 			if (rxup->ub_cod >= TC_FIRST && up->ub_cod <= TC_LAST) {
  				rxup = rxup->ub_rlink;
  				pvmmctl(rxup->ub_link);
  			}
--- 639,645 ----
  			LISTPUTBEFORE(pvmrxlist, rxup, ub_link, ub_rlink);
  			(*gotem)++;
  			/* XXX */
! 			if (rxup->ub_cod >= TC_FIRST && rxup->ub_cod <= TC_LAST) {
  				rxup = rxup->ub_rlink;
  				pvmmctl(rxup->ub_link);
  			}
*** ../netlib/pvm3.3.1/src/patchlevel.h	Tue Jun 21 15:40:29 1994
--- src/patchlevel.h	Thu Jun 30 17:34:43 1994
***************
*** 1,3 ****
  
! #define PATCHLEVEL 1
  
--- 1,3 ----
  
! #define PATCHLEVEL 2
  
*** ../netlib/pvm3.3.1/src/pvmd.c	Sat Jun  4 17:45:14 1994
--- src/pvmd.c	Thu Jun 30 17:37:36 1994
***************
*** 32,37 ****
--- 32,40 ----
   *	Mr. pvm daemon.
   *
  $Log: pvmd.c,v $
+  * Revision 1.13  1994/06/30  21:36:56  manchek
+  * don't check remote sockaddr in netinput() on LINUX
+  *
   * Revision 1.12  1994/06/04  21:45:10  manchek
   * added unix domain sockets
   *
***************
*** 233,239 ****
   **           **
   ***************/
  
! static char rcsid[] = "$Id: pvmd.c,v 1.12 1994/06/04 21:45:10 manchek Exp $";
  static struct deaddata *deads = 0;	/* circ queue of dead task data */
  static char pvmtxt[512];		/* scratch for error log */
  static int ndead = 0;			/* len of deads */
--- 236,242 ----
   **           **
   ***************/
  
! static char rcsid[] = "$Id: pvmd.c,v 1.13 1994/06/30 21:36:56 manchek Exp $";
  static struct deaddata *deads = 0;	/* circ queue of dead task data */
  static char pvmtxt[512];		/* scratch for error log */
  static int ndead = 0;			/* len of deads */
***************
*** 1278,1285 ****
  
  	hh = (src & tidhmask) >> (ffs(tidhmask) - 1);
  	if (hh < 0 || hh > hosts->ht_last || !(hp = hosts->ht_hosts[hh])
  	|| (osad.sin_addr.s_addr != hp->hd_sad.sin_addr.s_addr)
! 	|| (osad.sin_port != hp->hd_sad.sin_port)) {
  		sprintf(pvmtxt, "netinput() bogus pkt from %s\n",
  				inadport_decimal(&osad));
  		pvmlogerror(pvmtxt);
--- 1281,1295 ----
  
  	hh = (src & tidhmask) >> (ffs(tidhmask) - 1);
  	if (hh < 0 || hh > hosts->ht_last || !(hp = hosts->ht_hosts[hh])
+ #ifndef IMA_LINUX
+ 	/*
+ 	* XXX removing these lines is a hack and reduces security between
+ 	* XXX pvmds somewhat, but it's the easiest fix for Linux right now.
+ 	*/
  	|| (osad.sin_addr.s_addr != hp->hd_sad.sin_addr.s_addr)
! 	|| (osad.sin_port != hp->hd_sad.sin_port)
! #endif
! 	) {
  		sprintf(pvmtxt, "netinput() bogus pkt from %s\n",
  				inadport_decimal(&osad));
  		pvmlogerror(pvmtxt);
*** ../netlib/pvm3.3.1/xep/xep.c	Thu May  5 13:21:37 1994
--- xep/xep.c	Fri Jul  1 10:26:54 1994
***************
*** 617,623 ****
  	XtSetArg(args[n], XtNright, XtChainLeft); n++;
  	XtSetArg(args[n], XtNtop, XtChainTop); n++;
  	XtSetArg(args[n], XtNbottom, XtChainTop); n++;
! 	callback[0].callback = quit_cb;
  	callback[0].closure = (caddr_t)0;
  	XtSetArg(args[n], XtNcallback, callback); n++;
  	pm = XCreatePixmapFromBitmapData(xDisp, xRootW,
--- 617,623 ----
  	XtSetArg(args[n], XtNright, XtChainLeft); n++;
  	XtSetArg(args[n], XtNtop, XtChainTop); n++;
  	XtSetArg(args[n], XtNbottom, XtChainTop); n++;
! 	callback[0].callback = (XtCallbackProc)quit_cb;
  	callback[0].closure = (caddr_t)0;
  	XtSetArg(args[n], XtNcallback, callback); n++;
  	pm = XCreatePixmapFromBitmapData(xDisp, xRootW,
***************
*** 631,637 ****
  	XtSetArg(args[n], XtNright, XtChainLeft); n++;
  	XtSetArg(args[n], XtNtop, XtChainTop); n++;
  	XtSetArg(args[n], XtNbottom, XtChainTop); n++;
! 	callback[0].callback = workers_cb;
  	callback[0].closure = (caddr_t)0;
  	XtSetArg(args[n], XtNcallback, callback); n++;
  	XtSetArg(args[n], XtNfromHoriz, w); n++;
--- 631,637 ----
  	XtSetArg(args[n], XtNright, XtChainLeft); n++;
  	XtSetArg(args[n], XtNtop, XtChainTop); n++;
  	XtSetArg(args[n], XtNbottom, XtChainTop); n++;
! 	callback[0].callback = (XtCallbackProc)workers_cb;
  	callback[0].closure = (caddr_t)0;
  	XtSetArg(args[n], XtNcallback, callback); n++;
  	XtSetArg(args[n], XtNfromHoriz, w); n++;
***************
*** 646,652 ****
  	XtSetArg(args[n], XtNright, XtChainLeft); n++;
  	XtSetArg(args[n], XtNtop, XtChainTop); n++;
  	XtSetArg(args[n], XtNbottom, XtChainTop); n++;
! 	callback[0].callback = redo_cb;
  	callback[0].closure = (caddr_t)0;
  	XtSetArg(args[n], XtNcallback, callback); n++;
  	XtSetArg(args[n], XtNfromHoriz, w); n++;
--- 646,652 ----
  	XtSetArg(args[n], XtNright, XtChainLeft); n++;
  	XtSetArg(args[n], XtNtop, XtChainTop); n++;
  	XtSetArg(args[n], XtNbottom, XtChainTop); n++;
! 	callback[0].callback = (XtCallbackProc)redo_cb;
  	callback[0].closure = (caddr_t)0;
  	XtSetArg(args[n], XtNcallback, callback); n++;
  	XtSetArg(args[n], XtNfromHoriz, w); n++;
***************
*** 661,667 ****
  	XtSetArg(args[n], XtNright, XtChainLeft); n++;
  	XtSetArg(args[n], XtNtop, XtChainTop); n++;
  	XtSetArg(args[n], XtNbottom, XtChainTop); n++;
! 	callback[0].callback = zout_cb;
  	callback[0].closure = (caddr_t)0;
  	XtSetArg(args[n], XtNcallback, callback); n++;
  	XtSetArg(args[n], XtNfromHoriz, w); n++;
--- 661,667 ----
  	XtSetArg(args[n], XtNright, XtChainLeft); n++;
  	XtSetArg(args[n], XtNtop, XtChainTop); n++;
  	XtSetArg(args[n], XtNbottom, XtChainTop); n++;
! 	callback[0].callback = (XtCallbackProc)zout_cb;
  	callback[0].closure = (caddr_t)0;
  	XtSetArg(args[n], XtNcallback, callback); n++;
  	XtSetArg(args[n], XtNfromHoriz, w); n++;
***************
*** 676,682 ****
  	XtSetArg(args[n], XtNright, XtChainLeft); n++;
  	XtSetArg(args[n], XtNtop, XtChainTop); n++;
  	XtSetArg(args[n], XtNbottom, XtChainTop); n++;
! 	callback[0].callback = bars_cb;
  	callback[0].closure = (caddr_t)0;
  	XtSetArg(args[n], XtNcallback, callback); n++;
  	XtSetArg(args[n], XtNfromHoriz, w); n++;
--- 676,682 ----
  	XtSetArg(args[n], XtNright, XtChainLeft); n++;
  	XtSetArg(args[n], XtNtop, XtChainTop); n++;
  	XtSetArg(args[n], XtNbottom, XtChainTop); n++;
! 	callback[0].callback = (XtCallbackProc)bars_cb;
  	callback[0].closure = (caddr_t)0;
  	XtSetArg(args[n], XtNcallback, callback); n++;
  	XtSetArg(args[n], XtNfromHoriz, w); n++;
