#! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh 'patch_readme' <<'END_OF_FILE' X This is the first set of patches for PVM version 2.4.1. The file patch_diffs contains a context diff for each of the files listed below. If you have the 'patch' command installed on your system, you should be able to: X X + cd to the top level pvm directory X + type "patch -p0 < patch_diffs" X Otherwise, you will have to modify each file manually (note that you may not care about many of the changes). X The following files are affected by this patch: X________________________________________________________ patch Readme patch aimk patch doc/Arches create doc/FAQ patch doc/Version create f2c/HP9K/Makefile patch f2c/fbarrier.c patch f2c/fenroll.c patch f2c/fgetbytes.c patch f2c/fgetncplx.c patch f2c/fgetndcplx.c patch f2c/fgetndfloat.c patch f2c/fgetnfloat.c patch f2c/fgetnint.c patch f2c/fgetnlong.c patch f2c/fgetnshort.c patch f2c/fgetstring.c patch f2c/fgetstringl.c patch f2c/finithow.c patch f2c/finitiate.c patch f2c/finitiatem.c patch f2c/finitsend.c patch f2c/fleave.c patch f2c/fprobe.c patch f2c/fprobemulti.c patch f2c/fpstatus.c patch f2c/fputbytes.c patch f2c/fputncplx.c patch f2c/fputndcplx.c patch f2c/fputndfloat.c patch f2c/fputnfloat.c patch f2c/fputnint.c patch f2c/fputnlong.c patch f2c/fputnshort.c patch f2c/fputstring.c patch f2c/fputstringl.c patch f2c/fpvmperror.c patch f2c/frcv.c patch f2c/frcvinfo.c patch f2c/frcvmulti.c patch f2c/fready.c patch f2c/fsnd.c patch f2c/fstatus.c patch f2c/fterminate.c patch f2c/fvrcv.c patch f2c/fvrcvmulti.c patch f2c/fvsnd.c patch f2c/fwaituntil.c patch f2c/fwhoami.c patch f2c/nulfix.h patch man/enroll.3 patch man/enroll.30 patch man/get.3 patch man/get.30 patch man/initiate.3 patch man/initiate.30 patch man/pvm_mstat.3 patch man/pvm_mstat.30 patch man/pvmd.1 patch man/pvmd.10 patch man/whoami.3 patch man/whoami.30 patch mandel/Makefile create mandel/xpx.c create src/I386/Makefile create src/KSR1/Makefile patch src/Makefile.generic patch src/PMAX/Makefile patch src/archequiv.c patch src/crunch.c patch src/host.c patch src/pvmd.c patch src/startup.c patch src/ulib.c patch tsts/Makefile patch tsts/timing.c END_OF_FILE if test 2184 -ne `wc -c <'patch_readme'`; then echo shar: \"'patch_readme'\" unpacked with wrong size! fi # end of 'patch_readme' fi if test -f 'patch_diffs' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'patch_diffs'\" else echo shar: Extracting \"'patch_diffs'\" \(114911 characters\) sed "s/^X//" >'patch_diffs' <<'END_OF_FILE' X X*** Readme.old Thu May 28 14:14:11 1992 X--- Readme Mon Jul 20 21:22:39 1992 X*************** X*** 1,6 **** X X Readme file for PVM Version 2.4.1 X! 31 Jan 1992 X X PVM - Parallel Virtual Machine X University of Tennessee, Knoxville, TN. X--- 1,6 ---- X X Readme file for PVM Version 2.4.1 X! 20 Jul 1992 X X PVM - Parallel Virtual Machine X University of Tennessee, Knoxville, TN. X*************** X*** 10,45 **** X ________________________________________________________________________ X UNPACKING X X! This directory should be named "pvm", and reside just below X! your homedir. In the doc directory, there are a few files X! describing PVM design and implementation. In the src directory X! is everything needed to build PVM for your machine. There are X! subdirs there named for machines (SUN4, PMAX, etc) containing X! makefiles for specific architectures. The machine directories X! at this level are where client executables will go. The f2c X! directory contains code to build a Fortran-to-C library, X! allowing one to link Fortran programs with PVM. In the man X! directory are files describing each of the functions in the X C user library, and the PVM daemon. X X ________________________________________________________________________ X BUILDING X X! Check in the src directory for a subdirectory named for your X! machine. Check the doc/Arches file if you can't guess the name. X! If the correct one does not exist, you will have to make a new X! directory. The name choice is arbitrary, but should be concise X! and accurate (PVM will be using the name to identify the X! machine type it is running on). X X! Note: If you are running on a group of similar machines, but X! they have different operating system versions installed (f.e. X! SunOS4.0/4.1), binary executables may not be compatible across X! the entire group due to shared library differences or X! incompatible system calls. In this case you will need to X! define different architecture names to distinguish the correct X! executables. So, instead of architecture type "SUN4" you might X! have "SUN4-4.0" and "SUN4-4.1". X X If you need to make an architecture directory, follow these steps: X X--- 10,42 ---- X ________________________________________________________________________ X UNPACKING X X! This directory should be named "pvm", and reside just below your X! homedir. In the doc directory, there are a few files describing PVM X! design and implementation. In the src directory is everything needed X! to build PVM for your machine. There are subdirs there named for X! machines (SUN4, PMAX, etc) containing makefiles for specific X! architectures. The machine directories at this level are where client X! executables will go. The f2c directory contains code to build a X! Fortran-to-C library, allowing one to link Fortran programs with PVM. X! In the man directory are files describing each of the functions in the X C user library, and the PVM daemon. X X ________________________________________________________________________ X BUILDING X X! Check in the src directory for a subdirectory named for your machine. X! Check the doc/Arches file if you can't guess the name. If the correct X! one does not exist, you will have to make a new directory. The name X! choice is arbitrary, but should be concise and accurate (PVM will be X! using the name to identify the machine type it is running on). X X! Note: If you are running on a group of similar machines, but which X! have different operating system versions installed (f.e. SunOS4.0 vs. X! 4.1), binary executables may not be compatible across the entire group X! due to shared library differences or incompatible system calls. In X! this case you will need to define different architecture names to X! distinguish the correct executables. So, instead of architecture type X! "SUN4" you might have "SUN4-4.0" and "SUN4-4.1". X X If you need to make an architecture directory, follow these steps: X X*************** X*** 49,92 **** X + vi Makefile X X When customizing the Makefile, the only thing you definitely have X! to set is the ARCH definition. You may additionally need to X! define certain switches from the list given, or compiler/loader X! flags. X X To make the PVM daemon (pvmd) and user library (libpvm.a), type X "make" in the appropriate subdirectory of src. X X! Check out the "aimk" program in this directory. This is a X! shell script that automatically sets the ARCH environment X! variable to the appropriate PVM machine type and then calls make. X! You can use it to build the pvm distribution (by typing only X! "cd src;aimk"). It can also be used to build your applications X! without the need for architecture-specific subdirectories or X! separate makefiles. X X ________________________________________________________________________ X INSTALLATION X X! The PVM daemon (pvmd) needs to be named "/tmp/pvm/pvmd" for PVM X! to run on a machine. Specifically, this is so that a remote X! pvmd knows the name to call it by. X X! In the directories mandel/ and chol/ are some simple applications X! that should allow you to test your PVM installation. X X ________________________________________________________________________ X WRITING APPLICATIONS X X! Syntax and semantics of the library functions are described in X! the files in man/. User code must be linked with libpvm.a (in X! the machine-specific src directory), and possibly with other X! libraries (check doc/Arches for notes about this). X X! Your executables must be in directory ~/pvm/NAME/ where NAME is X! the PVM name for your host architecture. X X! Check out the makefile in mandel/ for a simple example of how to X! write a machine-independant makefile to use with "aimk". X X ________________________________________________________________________ X OPERATION X--- 46,91 ---- X + vi Makefile X X When customizing the Makefile, the only thing you definitely have X! to set is the ARCH definition. You may additionally need to define X! certain switches from the list given, or compiler/loader flags. X X To make the PVM daemon (pvmd) and user library (libpvm.a), type X "make" in the appropriate subdirectory of src. X X! Check out the "aimk" program in this directory. This is a shell X! script that automatically sets the ARCH environment variable to the X! appropriate PVM machine type and then calls make. You can use it to X! build the pvm distribution (by typing only "cd src;aimk"). It can X! also be used to build your applications without the need for X! architecture-specific subdirectories or separate makefiles. It also X! sets the environment variable PVMLFLAGS, which can be used to include X! libraries needed by libpvm. X X ________________________________________________________________________ X INSTALLATION X X! The PVM daemon (pvmd) file should be named "/tmp/pvm/pvmd" so that the X! master pvmd can find it. If necessary, you can give the master an X! alternate path to use. Check the manual page for pvmd. X X! In the directories chol/ , mandel/ , and tsts/ are some simple X! applications that should allow you to test your PVM installation. X X ________________________________________________________________________ X WRITING APPLICATIONS X X! Syntax and semantics of the library functions are described in the X! files in man/. User code must be linked with libpvm.a (in the X! machine-specific src directory), and possibly with other libraries X! (check doc/Arches for notes about this). X X! Your executables should be in directory ~/pvm/NAME/ (where NAME is the X! PVM name for an architecture) on each host in order for the pvmd to X! find them. You can change the default path if you wish; check the pvmd X! manual page. X X! Check out the makefile in mandel/ for a simple example of how to write X! a machine-independent makefile to use with "aimk". X X ________________________________________________________________________ X OPERATION X*************** X*** 143,148 **** X--- 142,148 ---- X Readme This file X aimk Script to determine machine type and run make X doc/Arches List of architecture ports X+ doc/FAQ Answers to frequently asked questions X doc/PvmPic Sketch of PVM system organization (Postscript) X doc/Version Terse description of changes between releases X man/ Manual pages for Daemon and User Library X*************** X*** 155,160 **** X--- 155,166 ---- X X /tmp/pvm/pvmd The default pvmd executable (installed on every machine) X ~/pvm/ARCH/ Where user executables go (for machine type ARCH) X+ X+ ________________________________________________________________________ X+ QUESTIONS X+ X+ If you have problems using PVM, check the FAQ file in doc/FAQ. If this X+ doesn't help, send mail to the address below. X X ________________________________________________________________________ X CONTACT X X X X*** aimk.old Thu May 28 15:58:19 1992 X--- aimk Fri Jul 3 16:47:28 1992 X*************** X*** 8,19 **** X # This is a heuristic thing that may need to be tuned from time X # to time. I don't know of a real solution to determining the X # machine type. Claims to pick one of: X! # AFX8, BFLY, C2MP, CM2, CM5, CRAY, HP300, HP9K, I860, KSR1, NEXT, PMAX, X! # RIOS, SGI, SUN2, SUN3, SUN4, SYMM, TITN, UVAX, VAX, X # UNKNOWN X # Need to do: X # IPSC X # X # Notes: X # 1. The output of things like uname seems to change from time to time. X # 2. Local people mess with things. X--- 8,23 ---- X # This is a heuristic thing that may need to be tuned from time X # to time. I don't know of a real solution to determining the X # machine type. Claims to pick one of: X! # AFX8, BFLY, C2MP, CM2, CM5, CRAY, HP300, HP9K, I386, I860, KSR1, NEXT, X! # PMAX, RIOS, SGI, SUN2, SUN3, SUN4, SYMM, TITN, UVAX, VAX, X # UNKNOWN X # Need to do: X # IPSC X # X+ # Aimk exports environment variables that can be used in makefiles X+ # ARCH = the selected architecture X+ # PVMLFLAGS = loader flags needed when using libpvm X+ # X # Notes: X # 1. The output of things like uname seems to change from time to time. X # 2. Local people mess with things. X*************** X*** 103,108 **** X--- 107,121 ---- X if (-e /usr/bin/asm56000) set ARCH=NEXT X if (-e /usr/convex) set ARCH=C2MP X if (-e /usr/alliant) set ARCH=AFX8 X+ if (-x /usr/bin/machine) then X+ switch (`/usr/bin/machine`) X+ case i386: X+ set ARCH=I386 X+ breaksw X+ default: X+ breaksw X+ endsw X+ endif X endif X X # X*************** X*** 110,124 **** X # X X # X # run make in cwd or subdir if exists. X # X X if (-d $ARCH) then X echo making in $ARCH/ for $ARCH X! (cd $ARCH; make ARCH=$ARCH $argv) X else X echo making in . for $ARCH X! make ARCH=$ARCH $argv X endif X X echo done. X--- 123,159 ---- X # X X # X+ # get lflags X+ # X+ X+ switch ($ARCH) X+ case I386: X+ setenv PVMLFLAGS -lrpc X+ breaksw X+ X+ case I860: X+ case IPSC: X+ setenv PVMLFLAGS "-lrpc -lsocket" X+ breaksw X+ X+ case SGI: X+ setenv PVMLFLAGS -lsun X+ breaksw X+ X+ default: X+ setenv PVMLFLAGS X+ endsw X+ X+ # X # run make in cwd or subdir if exists. X # X X if (-d $ARCH) then X echo making in $ARCH/ for $ARCH X! (cd $ARCH; make ARCH=$ARCH "PVMLFLAGS=$PVMLFLAGS" $argv) X else X echo making in . for $ARCH X! make ARCH=$ARCH "PVMLFLAGS=$PVMLFLAGS" $argv X endif X X echo done. X X X X*** doc/Arches.old Thu May 28 16:07:10 1992 X--- doc/Arches Tue Jun 30 12:38:44 1992 X*************** X*** 1,6 **** X X Architecture list for PVM Version 2.4.1 X! 28 May 1992 X X ________________________________________________________________________ X X--- 1,6 ---- X X Architecture list for PVM Version 2.4.1 X! 30 Jun 1992 X X ________________________________________________________________________ X X*************** X*** 14,19 **** X--- 14,20 ---- X CRAY Cray X HP9K HP 9000 (Snake) X KSR1 Kendall Square X+ I386 80[34]86 running BSDI [6] X I860 Intel RX Hypercube [4] X IPSC Intel IPSC/2 X NEXT NeXT X*************** X*** 27,37 **** X UVAX Dec/Microvax X VCM2 Thinking Machines CM-2 Vax front [5] X X [5] In v2.4.1, equated CM2 (SUN4) data format to all other IEEE machines. X X! [4] Add "-lrpc -lsocket" to loader libs when compiling user programs. X X! [3] Add "-lsun" to loader libs when compiling user programs. X If using YP, may have to add "-lsun" to ARCHDLIBS in Makefile. X X [2] Works fine under SunOS 4.[01] X--- 28,43 ---- X UVAX Dec/Microvax X VCM2 Thinking Machines CM-2 Vax front [5] X X+ [6] Add "-lrpc" to loader libs when using libpvm. X+ - rexec() doesn't exist, so startup is restricted to the rsh method. X+ - XDR routines for floats and double floats don't exist, so they X+ were faked using the one for long ints. This should work. X+ X [5] In v2.4.1, equated CM2 (SUN4) data format to all other IEEE machines. X X! [4] Add "-lrpc -lsocket" to loader libs when using libpvm. X X! [3] Add "-lsun" to loader libs when using libpvm. X If using YP, may have to add "-lsun" to ARCHDLIBS in Makefile. X X [2] Works fine under SunOS 4.[01] X X X X*** /dev/null Tue Jul 21 16:40:39 1992 X--- doc/FAQ Tue Jul 21 12:15:39 1992 X*************** X*** 0 **** X--- 1,250 ---- X+ X+ PVM/Frequently Asked Questions X+ 21 Jul 1992 X+ X+ ________________________________________________________________________ X+ X+ Questions: X+ X+ 1. What happened to XPVM? X+ 2. What happened to the shared memory extensions? X+ 3. What does the message "initiate: No such File" mean? X+ 4. I can't get pvmd to start up. X+ 5. How do I look at the output of the mandel demo? X+ 6. Why don't I see output from certain processes right away or at all? X+ 7. What does "xfermess() frg out of order" mean? X+ 8. What do messages like "resend to seq=223, retry=9" mean? X+ 9. Will PVM automatically use the individual processors on my X+ {Hypercube, N-Cube, CM-2, Sequent}? X+ X+ ________________________________________________________________________ X+ 1. What happened to XPVM? X+ X+ XPVM was an X windows interface (primarily) for administrative X+ tasks such as virtual machine configuration, multiple initiates, X+ and primitive debugging. It was developed for PVM1.0, and never X+ ported to PVM2.x, and therefore was never released. Many of the X+ functions supported by XPVM are now included in HeNCE. X+ X+ ________________________________________________________________________ X+ 2. What happened to the shared memory extensions? X+ X+ A distributed-shared memory facility was tried in PVM1.0; some X+ preliminary results and experiences on this may be found in the X+ "Concurrency: Practice and Experience (December 1990)" paper. X+ Since an overwhelming majority of PVM use was, and was anticipated X+ to be, based on message passing, shared-memory support was never X+ implemented in the released versions of PVM. However, there have X+ been recent efforts to incorporate a shared-address space model, X+ using objects and C++ interfaces, into PVM. For more details, X+ please contact vss@mathcs.emory.edu. X+ X+ ________________________________________________________________________ X+ 3. What does the message "initiate: No such File" mean? X+ X+ It means that a pvmd failed to find a file in response to an X+ initiate() call. X+ X+ By default, pvmd searches the directory $HOME/pvm/ARCH (where ARCH X+ is the PVM architecture name for a host) when initiating processes. X+ You can change this by using the "ep=" option in the pvm hosts file. X+ X+ Note that if you don't specify the host on which to initiate a X+ component PVM will pick one. The file must be available on that X+ host, as PVM will not try another once it has decided. X+ X+ ________________________________________________________________________ X+ 4. I can't get pvmd to start up. X+ X+ PVM can fail to start up for a number of reasons. Besides those X+ out of your control, such as a host or network being down, the X+ following are the most common. X+ X+ When a pvmd fails to start up, you may not get the entire error X+ message. Try running pvm on the remote host by hand by typing (to X+ the shell): X+ X+ rsh hostname /tmp/pvm/pvmd X+ X+ On some machines, you need to use "remsh" rather than "rsh". X+ X+ * If you get "Permission denied", it probably means that your .rhosts X+ file on the remote machine doesn't include your local host name. X+ You need to add a line like: X+ X+ local-host local-user-name X+ X+ to your .rhosts file on the remote machine. X+ X+ Sometimes a machine has more than one name, and the remote machine X+ may think your local machine has a different name than you do. To X+ find out what the remote machine thinks is the name of your local X+ machine, log in to the remote machine and type: X+ X+ who am i X+ X+ This will show you what the remote host thinks is the name of the X+ local host (it may be truncated to 16 characters). Make sure you X+ put this name (in full, not truncated) in your .rhosts file on the X+ remote machine. Some older machines will insist that you spell the X+ name exactly the same, including getting the case right; newer X+ machines will let you spell it in either upper or lower case. X+ X+ * If you get "Login incorrect", it probably means that there isn't an X+ account on the remote machine with the same login name you're using X+ the local machine. You need to add a "lo=username" option to your X+ pvm hosts file. X+ X+ If you get something like X+ X+ pvmd version <2.4.1> arch maxml <4096> X+ X+ then pvmd is starting up fine on the remote machine. However, make X+ sure that the version number of the remote pvmd matches the version X+ of the local pvmd. If the two pvmd's aren't the same version, they X+ will refuse to talk to each other. X+ X+ * If you get a message like: X+ X+ /tmp/pvm/pvmd: No Such File X+ X+ the master pvmd is reaching the remote host but can't start the X+ slave pvmd. Make sure the executable file is installed in X+ /tmp/pvm/pvmd or use the "dx=" option in the pvm hosts file to X+ choose a different pathname. X+ X+ * If you get something else, or *any* other output appears before the X+ "pvmd version" line, make sure your .cshrc on the remote machine X+ isn't either (a) printing something out when you log in, or (b) X+ trying to set your terminal characteristics (e.g. erase key) (usually X+ with the "stty" or "tset" commands). Doing either of these things X+ in your .cshrc is generally a Bad Idea. X+ X+ If you want to print out stuff when you log in, you should either X+ do it in your .login script or put the commands in an if statement X+ to ensure that stuff only gets printed when you are logging in X+ interactively, not when you're running a csh commands script. X+ Something like this should do the trick: X+ X+ if ( { tty -s } && $?prompt ) then X+ echo terminal type is $TERM X+ stty erase '^?' kill '^u' intr '^c' echo X+ endif X+ X+ ________________________________________________________________________ X+ 5. How do I look at the output of the mandel demo? X+ X+ Compile and use the 'xpx' program in the mandel directory. We X+ haven't previously included this file, but everyone has been X+ wanting it. X+ X+ ________________________________________________________________________ X+ 6. Why don't I see output from certain processes right away or at all? X+ X+ The stdio library (fgets, printf, etc.) buffers input and output X+ for efficiency whenever possible. That is, it tries to reduce the X+ frequency of actual read() or write() system calls. It decides X+ whether to buffer by looking at the underlying file descriptor of a X+ stream. If the descriptor is for a tty, it buffers only a line at X+ a time, that is, the buffer is flushed whenever the character '\n' X+ is encountered. If the descriptor is a file, pipe, or socket, X+ however, stdio buffers up much more, like 4k bytes. X+ X+ The processes started by pvmd on the 'master' machine inherit its X+ stdout/err files and so their stdio libs decide to flush output X+ every line. Processes started by other ('slave') pvmds inherit X+ their stdout/err files, which are sockets back to the master pvmd. X+ Thus their stdio libs buffer more than a line before writing to the X+ socket (because they don't know they're talking to a human). X+ X+ There are a few ways to see your output at the correct time. You X+ can put "fflush(stdout);" after each printf(). Or, change the X+ buffering mode of stdout to line-oriented for the entire program by X+ putting: X+ X+ setlinebuf(stdout); X+ X+ near the top of the program. X+ X+ ________________________________________________________________________ X+ 7. What does "xfermess() frg out of order" mean? X+ X+ This is the message fragment reassembly code in libpvm X+ complaining. Xfermess() is called by rcv(), rcvmulti(), and X+ probe(). Messages longer than 4k bytes (sometimes other values X+ depending on what host types you're using) are fragmented in X+ the originating process for transmission, then reassembled in X+ the receiving process. X+ X+ This used to happen a lot, mostly due to bugs in libpvm, but X+ the code has been cleaned up, and we haven't seen the problem X+ in quite a while, except when caused by... X+ X+ One mistake PVM users commonly make is to give a byte count X+ instead of object count to a function like getnint(). This X+ can result in two, four, or eight times too many bytes being X+ unpacked, thus writing off the end of the space reserved for X+ the data. X+ X+ If the buffer was obtained by malloc and you scribble past the X+ end of it, you may corrupt the contents of other malloc'd space X+ or housekeeping information. Libpvm functions, especially X+ snd() and rcv(), make extensive use of malloc when buffering X+ messages. There is almost no code in the library to do sanity X+ checking, mostly because there's no good way to do it. Of X+ course, the side effects are chaotic and may come and go X+ seemingly randomly. X+ X+ There's no good solution, other than to carefully check your X+ code. If you're interested, there is an instrumented malloc X+ library that can detect problems like overwriting buffers, X+ accessing buffers after freeing them, and so on. To use it, X+ replace all calls to malloc(), realloc() or free() in your code X+ with i_malloc(), i_realloc(), and i_free(). Then link with X+ imalloc.c (found in the PVM src directory). X+ X+ ________________________________________________________________________ X+ 8. What do messages like "resend to seq=223, retry=9" mean? X+ X+ These are pvmd-to-pvmd packets being resent. Packets are sometimes X+ dropped either by the network or the destination host due to X+ glitches or lack of resources. X+ X+ While they do impact the performance somewhat, messages like the X+ above are no cause for alarm unless the retry count gets down to or X+ near zero. Each packet is allowed ten retries, after which it is X+ discarded. When packets get discarded, things will start to hang X+ or break. X+ X+ ________________________________________________________________________ X+ 9. Will PVM automatically use the individual processors on my X+ {Hypercube, N-Cube, CM-2, Sequent}? X+ X+ PVM can only manage Unix processes right now, that is, a PVM X+ 'process' is required to be a Unix process, with all its X+ resources. In addition, PVM treats each host as a single machine, X+ and does not consider underlying structure. X+ X+ * On a Sequent, for example, the Unix process scheduler assigns X+ processes to each of the physical processors in order to balance X+ the load. Thus, simply starting multiple processes gives X+ parallelism. X+ X+ * On other types of machines, such as Alliants and CM-2s, the X+ programmer must write code to take advantage of the parallel X+ features of the machine. The PVM system will simply think it's X+ managing normal processes. X+ X+ * On machines like Hypercubes, however, node processors present a X+ restricted environment (without sockets or file access for example) X+ that PVM can not deal with. When using these machines, the user is X+ usually required to write both 'host' and 'node' programs. The X+ host program links with libpvm and the manufacturer's custom X+ library and provides communication between the PVM machine and the X+ node program, as well as any special control, such as allocating a X+ partition. The node program then does the calculation. X+ X+ Future versions of PVM will in fact be able to manage PVM 'tasks' X+ that are not full-fledged Unix processes, in some host-specific X+ way. X+ X X X X*** doc/Version.old Thu May 28 16:08:16 1992 X--- doc/Version Mon Jul 20 22:23:46 1992 X*************** X*** 1,8 **** X X Version info for PVM 2.4.1 X! 28 May 1992 X X ________________________________________________________________________ X PVM 2.4.1 X Improvements X + KSR1 port. X--- 1,16 ---- X X Version info for PVM 2.4.1 X! 20 July 1992 X X ________________________________________________________________________ X+ PVM 2.4.1 Patch 1 X+ Improvements X+ + I386 port. X+ + 'aimk' sets variable PVMLFLAGS to correct loader flags for ARCH. X+ Fixes X+ . cleaned up src for better linting. X+ . lots of man pages. X+ . added to host.c. X PVM 2.4.1 X Improvements X + KSR1 port. X X X X*** /dev/null Tue Jul 21 16:40:40 1992 X--- f2c/HP9K/Makefile Mon Jun 8 18:19:39 1992 X*************** X*** 0 **** X--- 1,163 ---- X+ # X+ # PVM 2.4 X+ # University of Tennesee, Knoxville, TN. X+ # Oak Ridge National Laboratory, Oak Ridge, TN. X+ # X+ # Makefile for PVM/HP Snakeage X+ # X+ ARCH = HP9K X+ ARCHCFLAGS = X+ HASRANLIB = f X+ # END of custom section - leave this line here X+ # X+ # Generic half makefile for Fortran to C lib for PVM. X+ # X+ # makefile to generate Fortran to C interface library for PVM (generic) X+ # define architecture (eg. SUN4 SUN3 RIOS) X+ X+ SHELL = /bin/sh X+ SDIR = .. X+ CC = cc X+ CFLAGS = -g -D$(ARCH) -c $(ARCHCFLAGS) X+ X+ LOBS = fbarrier.o \ X+ fenroll.o \ X+ fgetbytes.o \ X+ fgetncplx.o \ X+ fgetndcplx.o \ X+ fgetndfloat.o \ X+ fgetnfloat.o \ X+ fgetnint.o \ X+ fgetnlong.o \ X+ fgetnshort.o \ X+ fgetstring.o \ X+ fgetstringl.o \ X+ finitiate.o \ X+ finitiatem.o \ X+ finithow.o \ X+ finitsend.o \ X+ fleave.o \ X+ fprobe.o \ X+ fprobemulti.o \ X+ fpstatus.o \ X+ fputbytes.o \ X+ fputncplx.o \ X+ fputndcplx.o \ X+ fputndfloat.o \ X+ fputnfloat.o \ X+ fputnint.o \ X+ fputnlong.o \ X+ fputnshort.o \ X+ fputstring.o \ X+ fputstringl.o \ X+ fpvmperror.o \ X+ frcv.o \ X+ frcvinfo.o \ X+ frcvmulti.o \ X+ fready.o \ X+ fsnd.o \ X+ fstatus.o \ X+ fterminate.o \ X+ fwaituntil.o \ X+ fwhoami.o \ X+ fvrcv.o \ X+ fvrcvmulti.o \ X+ fvsnd.o X+ X+ libf2c.a: $(LOBS) X+ ar cr libf2c.a $? X+ case x$(HASRANLIB) in xt ) echo ranlib; ranlib libf2c.a ;; esac X+ X+ clean: X+ rm -f $(LOBS) libf2c.a X+ X+ tidy: X+ rm -f $(LOBS) X+ X+ fbarrier.o: $(SDIR)/fbarrier.c X+ $(CC) $(CFLAGS) $(SDIR)/fbarrier.c X+ fenroll.o: $(SDIR)/fenroll.c X+ $(CC) $(CFLAGS) $(SDIR)/fenroll.c X+ fgetbytes.o: $(SDIR)/fgetbytes.c X+ $(CC) $(CFLAGS) $(SDIR)/fgetbytes.c X+ fgetncplx.o: $(SDIR)/fgetncplx.c X+ $(CC) $(CFLAGS) $(SDIR)/fgetncplx.c X+ fgetndcplx.o: $(SDIR)/fgetndcplx.c X+ $(CC) $(CFLAGS) $(SDIR)/fgetndcplx.c X+ fgetndfloat.o: $(SDIR)/fgetndfloat.c X+ $(CC) $(CFLAGS) $(SDIR)/fgetndfloat.c X+ fgetnfloat.o: $(SDIR)/fgetnfloat.c X+ $(CC) $(CFLAGS) $(SDIR)/fgetnfloat.c X+ fgetnint.o: $(SDIR)/fgetnint.c X+ $(CC) $(CFLAGS) $(SDIR)/fgetnint.c X+ fgetnlong.o: $(SDIR)/fgetnlong.c X+ $(CC) $(CFLAGS) $(SDIR)/fgetnlong.c X+ fgetnshort.o: $(SDIR)/fgetnshort.c X+ $(CC) $(CFLAGS) $(SDIR)/fgetnshort.c X+ fgetstring.o: $(SDIR)/fgetstring.c X+ $(CC) $(CFLAGS) $(SDIR)/fgetstring.c X+ fgetstringl.o: $(SDIR)/fgetstringl.c X+ $(CC) $(CFLAGS) $(SDIR)/fgetstringl.c X+ finitiate.o: $(SDIR)/finitiate.c X+ $(CC) $(CFLAGS) $(SDIR)/finitiate.c X+ finitiatem.o: $(SDIR)/finitiatem.c X+ $(CC) $(CFLAGS) $(SDIR)/finitiatem.c X+ finithow.o: $(SDIR)/finithow.c X+ $(CC) $(CFLAGS) $(SDIR)/finithow.c X+ finitsend.o: $(SDIR)/finitsend.c X+ $(CC) $(CFLAGS) $(SDIR)/finitsend.c X+ fleave.o: $(SDIR)/fleave.c X+ $(CC) $(CFLAGS) $(SDIR)/fleave.c X+ fprobe.o: $(SDIR)/fprobe.c X+ $(CC) $(CFLAGS) $(SDIR)/fprobe.c X+ fprobemulti.o: $(SDIR)/fprobemulti.c X+ $(CC) $(CFLAGS) $(SDIR)/fprobemulti.c X+ fpstatus.o: $(SDIR)/fpstatus.c X+ $(CC) $(CFLAGS) $(SDIR)/fpstatus.c X+ fputbytes.o: $(SDIR)/fputbytes.c X+ $(CC) $(CFLAGS) $(SDIR)/fputbytes.c X+ fputncplx.o: $(SDIR)/fputncplx.c X+ $(CC) $(CFLAGS) $(SDIR)/fputncplx.c X+ fputndcplx.o: $(SDIR)/fputndcplx.c X+ $(CC) $(CFLAGS) $(SDIR)/fputndcplx.c X+ fputndfloat.o: $(SDIR)/fputndfloat.c X+ $(CC) $(CFLAGS) $(SDIR)/fputndfloat.c X+ fputnfloat.o: $(SDIR)/fputnfloat.c X+ $(CC) $(CFLAGS) $(SDIR)/fputnfloat.c X+ fputnint.o: $(SDIR)/fputnint.c X+ $(CC) $(CFLAGS) $(SDIR)/fputnint.c X+ fputnlong.o: $(SDIR)/fputnlong.c X+ $(CC) $(CFLAGS) $(SDIR)/fputnlong.c X+ fputnshort.o: $(SDIR)/fputnshort.c X+ $(CC) $(CFLAGS) $(SDIR)/fputnshort.c X+ fputstring.o: $(SDIR)/fputstring.c X+ $(CC) $(CFLAGS) $(SDIR)/fputstring.c X+ fputstringl.o: $(SDIR)/fputstringl.c X+ $(CC) $(CFLAGS) $(SDIR)/fputstringl.c X+ fpvmperror.o: $(SDIR)/fpvmperror.c X+ $(CC) $(CFLAGS) $(SDIR)/fpvmperror.c X+ frcv.o: $(SDIR)/frcv.c X+ $(CC) $(CFLAGS) $(SDIR)/frcv.c X+ frcvinfo.o: $(SDIR)/frcvinfo.c X+ $(CC) $(CFLAGS) $(SDIR)/frcvinfo.c X+ frcvmulti.o: $(SDIR)/frcvmulti.c X+ $(CC) $(CFLAGS) $(SDIR)/frcvmulti.c X+ fready.o: $(SDIR)/fready.c X+ $(CC) $(CFLAGS) $(SDIR)/fready.c X+ fsnd.o: $(SDIR)/fsnd.c X+ $(CC) $(CFLAGS) $(SDIR)/fsnd.c X+ fstatus.o: $(SDIR)/fstatus.c X+ $(CC) $(CFLAGS) $(SDIR)/fstatus.c X+ fterminate.o: $(SDIR)/fterminate.c X+ $(CC) $(CFLAGS) $(SDIR)/fterminate.c X+ fwaituntil.o: $(SDIR)/fwaituntil.c X+ $(CC) $(CFLAGS) $(SDIR)/fwaituntil.c X+ fwhoami.o: $(SDIR)/fwhoami.c X+ $(CC) $(CFLAGS) $(SDIR)/fwhoami.c X+ fvrcv.o: $(SDIR)/fvrcv.c X+ $(CC) $(CFLAGS) $(SDIR)/fvrcv.c X+ fvrcvmulti.o: $(SDIR)/fvrcvmulti.c X+ $(CC) $(CFLAGS) $(SDIR)/fvrcvmulti.c X+ fvsnd.o: $(SDIR)/fvsnd.c X+ $(CC) $(CFLAGS) $(SDIR)/fvsnd.c X+ X X X X*** f2c/fbarrier.c.old Sun Mar 31 14:42:43 1991 X--- f2c/fbarrier.c Mon Jun 8 18:14:03 1992 X*************** X*** 3,9 **** X #ifdef CRAY X FBARRIER(name,n,info) X #else X! #ifdef RIOS X fbarrier(name,n,info) X #else X fbarrier_( name,n,info ) X--- 3,9 ---- X #ifdef CRAY X FBARRIER(name,n,info) X #else X! #if defined(RIOS) || defined(HP9K) X fbarrier(name,n,info) X #else X fbarrier_( name,n,info ) X X X X*** f2c/fenroll.c.old Thu Mar 21 14:56:37 1991 X--- f2c/fenroll.c Mon Jun 8 18:14:04 1992 X*************** X*** 3,9 **** X #ifdef CRAY X FENROLL(name,num) X #else X! #ifdef RIOS X fenroll(name,num) X #else X fenroll_( name,num ) X--- 3,9 ---- X #ifdef CRAY X FENROLL(name,num) X #else X! #if defined(RIOS) || defined(HP9K) X fenroll(name,num) X #else X fenroll_( name,num ) X X X X*** f2c/fgetbytes.c.old Tue May 28 13:57:47 1991 X--- f2c/fgetbytes.c Mon Jun 8 18:14:04 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FGETBYTES(p,len,info) X #else X! #ifdef RIOS X fgetbytes(p,len,info) X #else X fgetbytes_(p,len,info) X--- 1,7 ---- X #ifdef CRAY X FGETBYTES(p,len,info) X #else X! #if defined(RIOS) || defined(HP9K) X fgetbytes(p,len,info) X #else X fgetbytes_(p,len,info) X X X X*** f2c/fgetncplx.c.old Sun Mar 31 14:45:02 1991 X--- f2c/fgetncplx.c Mon Jun 8 18:14:04 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FGETNCPLX(xp,num,info) X #else X! #ifdef RIOS X fgetncplx(xp,num,info) X #else X fgetncplx_(xp,num,info) X--- 1,7 ---- X #ifdef CRAY X FGETNCPLX(xp,num,info) X #else X! #if defined(RIOS) || defined(HP9K) X fgetncplx(xp,num,info) X #else X fgetncplx_(xp,num,info) X X X X*** f2c/fgetndcplx.c.old Sun Mar 31 14:46:19 1991 X--- f2c/fgetndcplx.c Mon Jun 8 18:14:04 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FGETNDCPLX(zp,num,info) X #else X! #ifdef RIOS X fgetndcplx(zp,num,info) X #else X fgetndcplx_(zp,num,info) X--- 1,7 ---- X #ifdef CRAY X FGETNDCPLX(zp,num,info) X #else X! #if defined(RIOS) || defined(HP9K) X fgetndcplx(zp,num,info) X #else X fgetndcplx_(zp,num,info) X X X X*** f2c/fgetndfloat.c.old Sun Mar 31 14:47:18 1991 X--- f2c/fgetndfloat.c Mon Jun 8 18:14:04 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FGETNDFLOAT(dp,num,info) X #else X! #ifdef RIOS X fgetndfloat(dp,num,info) X #else X fgetndfloat_(dp,num,info) X--- 1,7 ---- X #ifdef CRAY X FGETNDFLOAT(dp,num,info) X #else X! #if defined(RIOS) || defined(HP9K) X fgetndfloat(dp,num,info) X #else X fgetndfloat_(dp,num,info) X X X X*** f2c/fgetnfloat.c.old Sun Mar 31 14:48:23 1991 X--- f2c/fgetnfloat.c Mon Jun 8 18:14:04 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FGETNFLOAT(fp,num,info) X #else X! #ifdef RIOS X fgetnfloat(fp,num,info) X #else X fgetnfloat_(fp,num,info) X--- 1,7 ---- X #ifdef CRAY X FGETNFLOAT(fp,num,info) X #else X! #if defined(RIOS) || defined(HP9K) X fgetnfloat(fp,num,info) X #else X fgetnfloat_(fp,num,info) X X X X*** f2c/fgetnint.c.old Sun Mar 31 14:49:25 1991 X--- f2c/fgetnint.c Mon Jun 8 18:14:05 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FGETNINT(np,num,info) X #else X! #ifdef RIOS X fgetnint(np,num,info) X #else X fgetnint_(np,num,info) X--- 1,7 ---- X #ifdef CRAY X FGETNINT(np,num,info) X #else X! #if defined(RIOS) || defined(HP9K) X fgetnint(np,num,info) X #else X fgetnint_(np,num,info) X X X X*** f2c/fgetnlong.c.old Fri Jul 26 18:24:57 1991 X--- f2c/fgetnlong.c Mon Jun 8 18:14:05 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FGETNLONG(np,num,info) X #else X! #ifdef RIOS X fgetnlong(np,num,info) X #else X fgetnlong_(np,num,info) X--- 1,7 ---- X #ifdef CRAY X FGETNLONG(np,num,info) X #else X! #if defined(RIOS) || defined(HP9K) X fgetnlong(np,num,info) X #else X fgetnlong_(np,num,info) X X X X*** f2c/fgetnshort.c.old Fri Jul 26 18:24:52 1991 X--- f2c/fgetnshort.c Mon Jun 8 18:14:05 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FGETNSHORT(np,num,info) X #else X! #ifdef RIOS X fgetnshort(np,num,info) X #else X fgetnshort_(np,num,info) X--- 1,7 ---- X #ifdef CRAY X FGETNSHORT(np,num,info) X #else X! #if defined(RIOS) || defined(HP9K) X fgetnshort(np,num,info) X #else X fgetnshort_(np,num,info) X X X X*** f2c/fgetstring.c.old Sun Mar 31 14:50:57 1991 X--- f2c/fgetstring.c Mon Jun 8 18:14:05 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FGETSTRING(p,info) X #else X! #ifdef RIOS X fgetstring(p,info) X #else X fgetstring_( p,info ) X--- 1,7 ---- X #ifdef CRAY X FGETSTRING(p,info) X #else X! #if defined(RIOS) || defined(HP9K) X fgetstring(p,info) X #else X fgetstring_( p,info ) X X X X*** f2c/fgetstringl.c.old Fri Apr 12 09:12:20 1991 X--- f2c/fgetstringl.c Mon Jun 8 18:14:05 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FGETSTRINGL(p, len,info) X #else X! #ifdef RIOS X fgetstringl(p,len,info) X #else X fgetstringl_(p,len,info) X--- 1,7 ---- X #ifdef CRAY X FGETSTRINGL(p, len,info) X #else X! #if defined(RIOS) || defined(HP9K) X fgetstringl(p,len,info) X #else X fgetstringl_(p,len,info) X X X X*** f2c/finithow.c.old Thu May 21 15:24:36 1992 X--- f2c/finithow.c Mon Jun 8 18:14:05 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FINITHOW(how, info) X #else X! #ifdef RIOS X finithow(how, info) X #else X finithow_(how, info) X--- 1,7 ---- X #ifdef CRAY X FINITHOW(how, info) X #else X! #if defined(RIOS) || defined(HP9K) X finithow(how, info) X #else X finithow_(how, info) X X X X*** f2c/finitiate.c.old Wed May 29 09:50:24 1991 X--- f2c/finitiate.c Mon Jun 8 18:14:06 1992 X*************** X*** 3,9 **** X #ifdef CRAY X FINITIATE(aout, mc, inc) X #else X! #ifdef RIOS X finitiate(aout, mc, inc) X #else X finitiate_(aout, mc, inc) X--- 3,9 ---- X #ifdef CRAY X FINITIATE(aout, mc, inc) X #else X! #if defined(RIOS) || defined(HP9K) X finitiate(aout, mc, inc) X #else X finitiate_(aout, mc, inc) X X X X*** f2c/finitiatem.c.old Wed May 29 09:51:56 1991 X--- f2c/finitiatem.c Mon Jun 8 18:14:06 1992 X*************** X*** 3,9 **** X #ifdef CRAY X FINITIATEM(aout, mc, inc) X #else X! #ifdef RIOS X finitiatem(aout, mc, inc) X #else X finitiatem_(aout, mc, inc) X--- 3,9 ---- X #ifdef CRAY X FINITIATEM(aout, mc, inc) X #else X! #if defined(RIOS) || defined(HP9K) X finitiatem(aout, mc, inc) X #else X finitiatem_(aout, mc, inc) X X X X*** f2c/finitsend.c.old Tue Mar 12 10:17:55 1991 X--- f2c/finitsend.c Mon Jun 8 18:14:06 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FINITSEND() X #else X! #ifdef RIOS X finitsend() X #else X finitsend_() X--- 1,7 ---- X #ifdef CRAY X FINITSEND() X #else X! #if defined(RIOS) || defined(HP9K) X finitsend() X #else X finitsend_() X X X X*** f2c/fleave.c.old Tue Mar 12 10:18:20 1991 X--- f2c/fleave.c Mon Jun 8 18:14:06 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FLEAVE() X #else X! #ifdef RIOS X fleave() X #else X fleave_() X--- 1,7 ---- X #ifdef CRAY X FLEAVE() X #else X! #if defined(RIOS) || defined(HP9K) X fleave() X #else X fleave_() X X X X*** f2c/fprobe.c.old Mon Apr 1 17:10:27 1991 X--- f2c/fprobe.c Mon Jun 8 18:14:06 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FPROBE(type,status) X #else X! #ifdef RIOS X fprobe(type,status) X #else X fprobe_(type,status) X--- 1,7 ---- X #ifdef CRAY X FPROBE(type,status) X #else X! #if defined(RIOS) || defined(HP9K) X fprobe(type,status) X #else X fprobe_(type,status) X X X X*** f2c/fprobemulti.c.old Sun Mar 31 15:33:30 1991 X--- f2c/fprobemulti.c Mon Jun 8 18:14:06 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FPROBEMULTI(n,typs,type) X #else X! #ifdef RIOS X fprobemulti(n,typs,type) X #else X fprobemulti_(n,typs,type) X--- 1,7 ---- X #ifdef CRAY X FPROBEMULTI(n,typs,type) X #else X! #if defined(RIOS) || defined(HP9K) X fprobemulti(n,typs,type) X #else X fprobemulti_(n,typs,type) X X X X*** f2c/fpstatus.c.old Wed Jul 24 14:31:00 1991 X--- f2c/fpstatus.c Mon Jun 8 18:14:06 1992 X*************** X*** 2,8 **** X #ifdef CRAY X FPSTATUS(nproc, mixed, info) X #else X! #ifdef RIOS X fpstatus(nproc, mixed, info) X #else X fpstatus_(nproc, mixed, info) X--- 2,8 ---- X #ifdef CRAY X FPSTATUS(nproc, mixed, info) X #else X! #if defined(RIOS) || defined(HP9K) X fpstatus(nproc, mixed, info) X #else X fpstatus_(nproc, mixed, info) X X X X*** f2c/fputbytes.c.old Tue May 28 13:57:32 1991 X--- f2c/fputbytes.c Mon Jun 8 18:14:07 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FPUTBYTES(p,len,info) X #else X! #ifdef RIOS X fputbytes(p,len,info) X #else X fputbytes_(p,len,info) X--- 1,7 ---- X #ifdef CRAY X FPUTBYTES(p,len,info) X #else X! #if defined(RIOS) || defined(HP9K) X fputbytes(p,len,info) X #else X fputbytes_(p,len,info) X X X X*** f2c/fputncplx.c.old Sun Mar 31 14:56:34 1991 X--- f2c/fputncplx.c Mon Jun 8 18:14:07 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FPUTNCPLX(xp,num,info) X #else X! #ifdef RIOS X fputncplx(xp,num,info) X #else X fputncplx_(xp,num,info) X--- 1,7 ---- X #ifdef CRAY X FPUTNCPLX(xp,num,info) X #else X! #if defined(RIOS) || defined(HP9K) X fputncplx(xp,num,info) X #else X fputncplx_(xp,num,info) X X X X*** f2c/fputndcplx.c.old Sun Mar 31 14:57:47 1991 X--- f2c/fputndcplx.c Mon Jun 8 18:14:07 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FPUTNDCPLX(zp,num,info) X #else X! #ifdef RIOS X fputndcplx(zp,num,info) X #else X fputndcplx_(zp,num,info) X--- 1,7 ---- X #ifdef CRAY X FPUTNDCPLX(zp,num,info) X #else X! #if defined(RIOS) || defined(HP9K) X fputndcplx(zp,num,info) X #else X fputndcplx_(zp,num,info) X X X X*** f2c/fputndfloat.c.old Sun Mar 31 14:58:41 1991 X--- f2c/fputndfloat.c Mon Jun 8 18:14:07 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FPUTNDFLOAT(dp,num,info) X #else X! #ifdef RIOS X fputndfloat(dp,num,info) X #else X fputndfloat_(dp,num,info) X--- 1,7 ---- X #ifdef CRAY X FPUTNDFLOAT(dp,num,info) X #else X! #if defined(RIOS) || defined(HP9K) X fputndfloat(dp,num,info) X #else X fputndfloat_(dp,num,info) X X X X*** f2c/fputnfloat.c.old Sun Mar 31 14:59:47 1991 X--- f2c/fputnfloat.c Mon Jun 8 18:14:07 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FPUTNFLOAT(fp,num,info) X #else X! #ifdef RIOS X fputnfloat(fp,num,info) X #else X fputnfloat_(fp,num,info) X--- 1,7 ---- X #ifdef CRAY X FPUTNFLOAT(fp,num,info) X #else X! #if defined(RIOS) || defined(HP9K) X fputnfloat(fp,num,info) X #else X fputnfloat_(fp,num,info) X X X X*** f2c/fputnint.c.old Sun Mar 31 15:00:40 1991 X--- f2c/fputnint.c Mon Jun 8 18:14:07 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FPUTNINT(np,num,info) X #else X! #ifdef RIOS X fputnint(np,num,info) X #else X fputnint_(np,num,info) X--- 1,7 ---- X #ifdef CRAY X FPUTNINT(np,num,info) X #else X! #if defined(RIOS) || defined(HP9K) X fputnint(np,num,info) X #else X fputnint_(np,num,info) X X X X*** f2c/fputnlong.c.old Fri Jul 26 18:25:09 1991 X--- f2c/fputnlong.c Mon Jun 8 18:14:08 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FPUTNLONG(np,num,info) X #else X! #ifdef RIOS X fputnlong(np,num,info) X #else X fputnlong_(np,num,info) X--- 1,7 ---- X #ifdef CRAY X FPUTNLONG(np,num,info) X #else X! #if defined(RIOS) || defined(HP9K) X fputnlong(np,num,info) X #else X fputnlong_(np,num,info) X X X X*** f2c/fputnshort.c.old Fri Jul 26 18:25:02 1991 X--- f2c/fputnshort.c Mon Jun 8 18:14:08 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FPUTNSHORT(np,num,info) X #else X! #ifdef RIOS X fputnshort(np,num,info) X #else X fputnshort_(np,num,info) X--- 1,7 ---- X #ifdef CRAY X FPUTNSHORT(np,num,info) X #else X! #if defined(RIOS) || defined(HP9K) X fputnshort(np,num,info) X #else X fputnshort_(np,num,info) X X X X*** f2c/fputstring.c.old Sun Mar 31 15:02:20 1991 X--- f2c/fputstring.c Mon Jun 8 18:14:08 1992 X*************** X*** 3,9 **** X #ifdef CRAY X FPUTSTRING(p,info) X #else X! #ifdef RIOS X fputstring(p,info) X #else X fputstring_( p,info ) X--- 3,9 ---- X #ifdef CRAY X FPUTSTRING(p,info) X #else X! #if defined(RIOS) || defined(HP9K) X fputstring(p,info) X #else X fputstring_( p,info ) X X X X*** f2c/fputstringl.c.old Sun Mar 31 15:03:19 1991 X--- f2c/fputstringl.c Mon Jun 8 18:14:08 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FPUTSTRINGL(p,len,info) X #else X! #ifdef RIOS X fputstringl(p,len,info) X #else X fputstringl_(p,len,info) X--- 1,7 ---- X #ifdef CRAY X FPUTSTRINGL(p,len,info) X #else X! #if defined(RIOS) || defined(HP9K) X fputstringl(p,len,info) X #else X fputstringl_(p,len,info) X X X X*** f2c/fpvmperror.c.old Wed Jan 15 15:11:26 1992 X--- f2c/fpvmperror.c Mon Jun 8 18:14:08 1992 X*************** X*** 3,9 **** X #ifdef CRAY X FPVMPERROR(p) X #else X! #ifdef RIOS X fpvmperror(p) X #else X fpvmperror_(p) X--- 3,9 ---- X #ifdef CRAY X FPVMPERROR(p) X #else X! #if defined(RIOS) || defined(HP9K) X fpvmperror(p) X #else X fpvmperror_(p) X X X X*** f2c/frcv.c.old Wed May 29 09:41:53 1991 X--- f2c/frcv.c Mon Jun 8 18:14:08 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FRCV(type,stat) X #else X! #ifdef RIOS X frcv(type,stat) X #else X frcv_(type,stat) X--- 1,7 ---- X #ifdef CRAY X FRCV(type,stat) X #else X! #if defined(RIOS) || defined(HP9K) X frcv(type,stat) X #else X frcv_(type,stat) X X X X*** f2c/frcvinfo.c.old Mon Jul 22 18:54:33 1991 X--- f2c/frcvinfo.c Mon Jun 8 18:14:08 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FRCVINFO(len, type, proc, inum, info) X #else X! #ifdef RIOS X frcvinfo(len, type, proc, inum, info) X #else X frcvinfo_(len, type, proc, inum, info) X--- 1,7 ---- X #ifdef CRAY X FRCVINFO(len, type, proc, inum, info) X #else X! #if defined(RIOS) || defined(HP9K) X frcvinfo(len, type, proc, inum, info) X #else X frcvinfo_(len, type, proc, inum, info) X X X X*** f2c/frcvmulti.c.old Thu May 7 18:58:08 1992 X--- f2c/frcvmulti.c Mon Jun 8 18:14:09 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FRCVMULTI(n, typs, stat) X #else X! #ifdef RIOS X frcvmulti(n, typs, stat) X #else X frcvmulti_(n, typs, stat) X--- 1,7 ---- X #ifdef CRAY X FRCVMULTI(n, typs, stat) X #else X! #if defined(RIOS) || defined(HP9K) X frcvmulti(n, typs, stat) X #else X frcvmulti_(n, typs, stat) X X X X*** f2c/fready.c.old Mon Apr 1 14:28:41 1991 X--- f2c/fready.c Mon Jun 8 18:14:09 1992 X*************** X*** 3,9 **** X #ifdef CRAY X FREADY(event, info) X #else X! #ifdef RIOS X fready(event, info) X #else X fready_( event, info ) X--- 3,9 ---- X #ifdef CRAY X FREADY(event, info) X #else X! #if defined(RIOS) || defined(HP9K) X fready(event, info) X #else X fready_( event, info ) X X X X*** f2c/fsnd.c.old Sun Mar 31 15:34:37 1991 X--- f2c/fsnd.c Mon Jun 8 18:14:09 1992 X*************** X*** 3,9 **** X #ifdef CRAY X FSND(proc, inum, type, info) X #else X! #ifdef RIOS X fsnd(proc, inum, type, info) X #else X fsnd_(proc, inum, type, info) X--- 3,9 ---- X #ifdef CRAY X FSND(proc, inum, type, info) X #else X! #if defined(RIOS) || defined(HP9K) X fsnd(proc, inum, type, info) X #else X fsnd_(proc, inum, type, info) X X X X*** f2c/fstatus.c.old Thu Mar 21 14:59:49 1991 X--- f2c/fstatus.c Mon Jun 8 18:14:09 1992 X*************** X*** 3,9 **** X #ifdef CRAY X FSTATUS(name,inum,pstatus) X #else X! #ifdef RIOS X fstatus(name,inum,pstatus) X #else X fstatus_( name,inum,pstatus ) X--- 3,9 ---- X #ifdef CRAY X FSTATUS(name,inum,pstatus) X #else X! #if defined(RIOS) || defined(HP9K) X fstatus(name,inum,pstatus) X #else X fstatus_( name,inum,pstatus ) X X X X*** f2c/fterminate.c.old Sun Mar 31 15:35:35 1991 X--- f2c/fterminate.c Mon Jun 8 18:14:09 1992 X*************** X*** 3,9 **** X #ifdef CRAY X FTERMINATE(proc,inc,info) X #else X! #ifdef RIOS X fterminate(proc,inc,info) X #else X fterminate_( proc, inc, info ) X--- 3,9 ---- X #ifdef CRAY X FTERMINATE(proc,inc,info) X #else X! #if defined(RIOS) || defined(HP9K) X fterminate(proc,inc,info) X #else X fterminate_( proc, inc, info ) X X X X*** f2c/fvrcv.c.old Wed Jan 15 15:08:03 1992 X--- f2c/fvrcv.c Mon Jun 8 18:14:09 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FVRCV(type, stat) X #else X! #ifdef RIOS X fvrcv(type, stat) X #else X fvrcv_(type, stat) X--- 1,7 ---- X #ifdef CRAY X FVRCV(type, stat) X #else X! #if defined(RIOS) || defined(HP9K) X fvrcv(type, stat) X #else X fvrcv_(type, stat) X X X X*** f2c/fvrcvmulti.c.old Wed Jan 15 15:25:16 1992 X--- f2c/fvrcvmulti.c Mon Jun 8 18:14:09 1992 X*************** X*** 1,7 **** X #ifdef CRAY X FVRCVMULTI(n, typs, stat) X #else X! #ifdef RIOS X fvrcvmulti(n, typs, stat) X #else X fvrcvmulti_(n, typs, stat) X--- 1,7 ---- X #ifdef CRAY X FVRCVMULTI(n, typs, stat) X #else X! #if defined(RIOS) || defined(HP9K) X fvrcvmulti(n, typs, stat) X #else X fvrcvmulti_(n, typs, stat) X X X X*** f2c/fvsnd.c.old Wed Jan 15 15:08:53 1992 X--- f2c/fvsnd.c Mon Jun 8 18:14:10 1992 X*************** X*** 3,9 **** X #ifdef CRAY X FVSND(proc, inum, type, info) X #else X! #ifdef RIOS X fvsnd(proc, inum, type, info) X #else X fvsnd_(proc, inum, type, info) X--- 3,9 ---- X #ifdef CRAY X FVSND(proc, inum, type, info) X #else X! #if defined(RIOS) || defined(HP9K) X fvsnd(proc, inum, type, info) X #else X fvsnd_(proc, inum, type, info) X X X X*** f2c/fwaituntil.c.old Mon Apr 1 14:29:30 1991 X--- f2c/fwaituntil.c Mon Jun 8 18:14:10 1992 X*************** X*** 3,9 **** X #ifdef CRAY X FWAITUNTIL(event,info) X #else X! #ifdef RIOS X fwaituntil(event,info) X #else X fwaituntil_( event,info ) X--- 3,9 ---- X #ifdef CRAY X FWAITUNTIL(event,info) X #else X! #if defined(RIOS) || defined(HP9K) X fwaituntil(event,info) X #else X fwaituntil_( event,info ) X X X X*** f2c/fwhoami.c.old Mon Apr 1 14:30:27 1991 X--- f2c/fwhoami.c Mon Jun 8 18:14:10 1992 X*************** X*** 2,8 **** X #ifdef CRAY X FWHOAMI(proc,inc,info) X #else X! #ifdef RIOS X fwhoami(proc,inc,info) X #else X fwhoami_( proc, inc, info ) X--- 2,8 ---- X #ifdef CRAY X FWHOAMI(proc,inc,info) X #else X! #if defined(RIOS) || defined(HP9K) X fwhoami(proc,inc,info) X #else X fwhoami_( proc, inc, info ) X X X X*** f2c/nulfix.h.old Thu Mar 21 14:54:40 1991 X--- f2c/nulfix.h Mon Jun 8 18:11:47 1992 X*************** X*** 14,20 **** X * X */ X X! #if defined(CRAY) X X #define NULFIX(s) { \ X char *p; \ X--- 14,20 ---- X * X */ X X! #if defined(CRAY) || defined(HP9K) X X #define NULFIX(s) { \ X char *p; \ X X X X*** man/enroll.3.old Tue May 26 16:55:06 1992 X--- man/enroll.3 Wed Jul 15 22:34:35 1992 X*************** X*** 24,31 **** X Instance numbers are recycled at an epoch (when there are no active X processes). X .PP X! It is an error to enroll more than once without an intervening \fIleave\fR X call. X .SH RETURN VALUE X .I Enroll X returns the assigned instance number (>= 0) if successful. X--- 24,39 ---- X Instance numbers are recycled at an epoch (when there are no active X processes). X .PP X! As a side effect, \fIenroll\fR creates the socket necessary to talk to the pvmd, X! and loads configuration information from it. It is necessary to X! call \fIenroll\fR before taking any other PVM-related actions. X! .PP X! It is an error to call enroll more than once without an intervening \fIleave\fR X call. X+ A process created by \fIinitiate\fR may still call \fIenroll\fR, but it is X+ sufficient to simply call \fIwhoami\fR. X+ If it does call \fIenroll\fR, the \fIname\fR parameter must match X+ the name assigned by \fIinitiate\fR or an error will result. X .SH RETURN VALUE X .I Enroll X returns the assigned instance number (>= 0) if successful. X*************** X*** 37,41 **** X .ta 0.5i 2.0i X PvmSysErr System error X PvmTooLong If name too long X .SH SEE ALSO X! whoami(3pvm) X--- 45,50 ---- X .ta 0.5i 2.0i X PvmSysErr System error X PvmTooLong If name too long X+ PvmAlready Process already enrolled X .SH SEE ALSO X! leave(3pvm), whoami(3pvm) X X X X*** man/enroll.30.old Tue May 26 16:55:34 1992 X--- man/enroll.30 Wed Jul 15 22:34:53 1992 X*************** X*** 24,32 **** X process created with a given name. Instance numbers are X recycled at an epoch (when there are no active processes). X X! It is an error to enroll more than once without an interven- X! ing _l_e_a_v_e call. X X RETURN VALUE X _E_n_r_o_l_l returns the assigned instance number (>= 0) if suc- X cessful. On failure, it returns a negative number and sets X--- 24,40 ---- X process created with a given name. Instance numbers are X recycled at an epoch (when there are no active processes). X X! As a side effect, _e_n_r_o_l_l creates the socket necessary to X! talk to the pvmd, and loads configuration information from X! it. It is necessary to call _e_n_r_o_l_l before taking any other X! PVM-related actions. X X+ It is an error to call enroll more than once without an X+ intervening _l_e_a_v_e call. A process created by _i_n_i_t_i_a_t_e may X+ still call _e_n_r_o_l_l, but it is sufficient to simply call X+ _w_h_o_a_m_i. If it does call _e_n_r_o_l_l, the _n_a_m_e parameter must X+ match the name assigned by _i_n_i_t_i_a_t_e or an error will result. X+ X RETURN VALUE X _E_n_r_o_l_l returns the assigned instance number (>= 0) if suc- X cessful. On failure, it returns a negative number and sets X*************** X*** 35,52 **** X The possible error conditions are: X PvmSysErr System error X PvmTooLong If name too long X X SEE ALSO X! whoami(3pvm) X! X! X! X! X! X! X! X! X! X X X X--- 43,52 ---- X The possible error conditions are: X PvmSysErr System error X PvmTooLong If name too long X+ PvmAlready Process already enrolled X X SEE ALSO X! leave(3pvm), whoami(3pvm) X X X X X X X*** man/get.3.old Tue May 26 16:55:07 1992 X--- man/get.3 Mon Jun 29 17:10:29 1992 X*************** X*** 70,75 **** X--- 70,76 ---- X .SH DESCRIPTION X These functions unpack arrays of various data types from the last X received message. X+ Data is unpacked from messages in the same order that it was packed. X .PP X All except getstring take a pointer to the beginning of the array, X and the number of array elements. X X X X*** man/get.30.old Tue May 26 16:55:34 1992 X--- man/get.30 Mon Jun 29 17:10:42 1992 X*************** X*** 1,16 **** X X X X! GET(3PVM) Parallel Virtual Machine GET(3PVM) X X X X! NAME X! getbytes getncplx getndcplx getndfloat getnfloat getnint X! getnlong getnshort getstring X - unpack data from received message X X! SYNOPSIS X int getbytes(cp, cnt) X char *cp; X int cnt; X--- 1,17 ---- X X X X! 26 May, 1992 GET(3PVM) X! Parallel Virtual Machine X X X X! NAME X! getbytes getncplx getndcplx getndfloat getnfloat getnint getnlong X! getnshort getstring X - unpack data from received message X X! SYNOPSIS X int getbytes(cp, cnt) X char *cp; X int cnt; X*************** X*** 46,80 **** X int getstring(cp) X char *cp; X X! DESCRIPTION X! These functions unpack arrays of various data types from the X! last received message. X X! All except getstring take a pointer to the beginning of the X! array, and the number of array elements. X X- RETURN VALUE X- 0 is returned if the call is successful. On failure, a X- negative number is returned and pvm_errno is set to the same X- value. X X X X- Version 2.4.1 Last change: 26 May, 1992 1 X X X X X X X- GET(3PVM) Parallel Virtual Machine GET(3PVM) X X X X The possible error conditions are: X PvmNoData If at end of receive buffer X X! SEE ALSO X put(3pvm) X X X--- 47,84 ---- X int getstring(cp) X char *cp; X X! DESCRIPTION X! These functions unpack arrays of various data types from the last X! received message. Data is unpacked from messages in the same order that X! it was packed. X X! All except getstring take a pointer to the beginning of the array, and X! the number of array elements. X X X X X X X+ Version 2.4.1 1 X X X X X X X+ GET(3PVM) 26 May, 1992 X+ Parallel Virtual Machine X X+ X+ RETURN VALUE X+ 0 is returned if the call is successful. On failure, a negative number X+ is returned and pvm_errno is set to the same value. X+ X The possible error conditions are: X PvmNoData If at end of receive buffer X X! SEE ALSO X put(3pvm) X X X*************** X*** 122,132 **** X X X X X X! X! X! Version 2.4.1 Last change: 26 May, 1992 2 X! X! X! X--- 126,132 ---- X X X X+ 2 Version 2.4.1 X X X! 99 X X X X*** man/initiate.3.old Tue May 26 16:55:09 1992 X--- man/initiate.3 Wed Jul 15 21:56:48 1992 X*************** X*** 17,24 **** X .I Initiate X creates a PVM process with given name. X Pvmd exec()s a Unix process and enrolls it. X! A file with the correct name must be already installed on the selected host. X By default, pvmd searches the path $(HOME)/pvm/ARCH/ for executables. X .PP X .I Name X may be any null-terminated string up to 31 characters long, X--- 17,27 ---- X .I Initiate X creates a PVM process with given name. X Pvmd exec()s a Unix process and enrolls it. X! A file with name matching the \fIname\fR parameter must already be X! installed on the selected host. X By default, pvmd searches the path $(HOME)/pvm/ARCH/ for executables. X+ A process created via \fIinitiate\fR must call \fIenroll\fR (with the correct X+ name) or \fIwhoami\fR before taking any other PVM-related actions. X .PP X .I Name X may be any null-terminated string up to 31 characters long, X*************** X*** 57,61 **** X PvmNoHost If host cpu class or name does not exist X PvmTooLong If name too long X .SH SEE ALSO X! enroll(3pvm), terminate(3pvm) X X--- 60,64 ---- X PvmNoHost If host cpu class or name does not exist X PvmTooLong If name too long X .SH SEE ALSO X! enroll(3pvm), terminate(3pvm), whoami(3pvm) X X X X X*** man/initiate.30.old Tue May 26 16:55:35 1992 X--- man/initiate.30 Wed Jul 15 21:57:40 1992 X*************** X*** 17,26 **** X X DESCRIPTION X _I_n_i_t_i_a_t_e creates a PVM process with given name. Pvmd X! exec()s a Unix process and enrolls it. A file with the X! correct name must be already installed on the selected host. X! By default, pvmd searches the path $(HOME)/pvm/ARCH/ for X! executables. X X _N_a_m_e may be any null-terminated string up to 31 characters X long, but should probably be human readable for convenience. X--- 17,28 ---- X X DESCRIPTION X _I_n_i_t_i_a_t_e creates a PVM process with given name. Pvmd X! exec()s a Unix process and enrolls it. A file with name X! matching the _n_a_m_e parameter must already be installed on the X! selected host. By default, pvmd searches the path X! $(HOME)/pvm/ARCH/ for executables. A process created via X! _i_n_i_t_i_a_t_e must call _e_n_r_o_l_l (with the correct name) or _w_h_o_a_m_i X! before taking any other PVM-related actions. X X _N_a_m_e may be any null-terminated string up to 31 characters X long, but should probably be human readable for convenience. X*************** X*** 54,61 **** X PvmNoHost If host cpu class or name does not exist X PvmTooLong If name too long X X- SEE ALSO X- enroll(3pvm), terminate(3pvm) X X X X--- 56,61 ---- X*************** X*** 71,76 **** X--- 71,78 ---- X X X X+ SEE ALSO X+ enroll(3pvm), terminate(3pvm), whoami(3pvm) X X X X*************** X*** 123,132 **** X X X X- Version 2.4.1 Last change: 26 May, 1992 2 X X! X! X X X X--- 125,132 ---- X X X X X! Version 2.4.1 Last change: 26 May, 1992 2 X X X X X X X*** man/pvm_mstat.3.old Tue May 26 16:55:16 1992 X--- man/pvm_mstat.3 Fri Jun 26 11:22:00 1992 X*************** X*** 5,16 **** X pvm_mstat \- give configuration of virtual machine X .SH SYNOPSIS X .ft B X! int cpu = pvm_mstat(&ncpu, &ntype, &stats, &names, &arches) X .br X int ncpu; X .br X- int ntype; X- .br X int *stats; X .br X char **names, **arches; X--- 5,14 ---- X pvm_mstat \- give configuration of virtual machine X .SH SYNOPSIS X .ft B X! int cpu = pvm_mstat(&ncpu, &stats, &names, &arches) X .br X int ncpu; X .br X int *stats; X .br X char **names, **arches; X*************** X*** 20,31 **** X returns information about the configuration of the virtual machine. X .PP X On return \fIncpu\fR holds the number of hosts in the machine. X- .I Ntype X- holds the number of different storage formats among the hosts. X- Certain architectures, while different, use the same storage formats X- for integers, reals, and so on. X- A mixture of machines whose architectures are all in the same format `group' X- counts as a homogeneous machine for this purpose. X .I Names X and \fIarches\fR point to arrays (of length \fIncpu\fR) of strings X containing the names and architectures of the hosts. X--- 18,23 ---- X X X X*** man/pvm_mstat.30.old Tue May 26 16:55:39 1992 X--- man/pvm_mstat.30 Fri Jun 26 11:22:06 1992 X*************** X*** 9,17 **** X pvm_mstat - give configuration of virtual machine X X SYNOPSIS X! int cpu = pvm_mstat(&ncpu, &ntype, &stats, &names, &arches) X int ncpu; X- int ntype; X int *stats; X char **names, **arches; X X--- 9,16 ---- X pvm_mstat - give configuration of virtual machine X X SYNOPSIS X! int cpu = pvm_mstat(&ncpu, &stats, &names, &arches) X int ncpu; X int *stats; X char **names, **arches; X X*************** X*** 20,36 **** X virtual machine. X X On return _n_c_p_u holds the number of hosts in the machine. X! _N_t_y_p_e holds the number of different storage formats among X! the hosts. Certain architectures, while different, use the X! same storage formats for integers, reals, and so on. A mix- X! ture of machines whose architectures are all in the same X! format `group' counts as a homogeneous machine for this pur- X! pose. _N_a_m_e_s and _a_r_c_h_e_s point to arrays (of length _n_c_p_u) of X! strings containing the names and architectures of the hosts. X! _S_t_a_t_s points to an array of integers, one per host, which X! indicate activity. Zero means there are no processes run- X! ning on the host, one means that there are one or more X! processes running. X X If any argument is a null pointer, it is ignored. X X--- 19,30 ---- X virtual machine. X X On return _n_c_p_u holds the number of hosts in the machine. X! _N_a_m_e_s and _a_r_c_h_e_s point to arrays (of length _n_c_p_u) of strings X! containing the names and architectures of the hosts. _S_t_a_t_s X! points to an array of integers, one per host, which indicate X! activity. Zero means there are no processes running on the X! host, one means that there are one or more processes run- X! ning. X X If any argument is a null pointer, it is ignored. X X*************** X*** 48,53 **** X--- 42,53 ---- X X SEE ALSO X whoami(3pvm) X+ X+ X+ X+ X+ X+ X X X X X X X*** man/pvmd.1.old Tue May 26 16:55:17 1992 X--- man/pvmd.1 Thu Jun 25 16:20:53 1992 X*************** X*** 252,258 **** X x X Exited X .TP X! w X Waiting on \fIpvmd\fR X .TP X mw X--- 252,258 ---- X x X Exited X .TP X! c X Waiting on \fIpvmd\fR X .TP X mw X X X X*** man/pvmd.10.old Tue May 26 16:55:41 1992 X--- man/pvmd.10 Thu Jun 25 16:21:05 1992 X*************** X*** 215,221 **** X FLAGS Process Status. May be one or more of: X r Running X x Exited X! w Waiting on _p_v_m_d X mw Wait for message X ww Wait for waituntil X bw Wait for barrier X--- 215,221 ---- X FLAGS Process Status. May be one or more of: X r Running X x Exited X! c Waiting on _p_v_m_d X mw Wait for message X ww Wait for waituntil X bw Wait for barrier X X X X*** man/whoami.3.old Tue May 26 16:55:28 1992 X--- man/whoami.3 Wed Jul 15 21:56:39 1992 X*************** X*** 15,21 **** X .I Whoami X returns the name and instance number for the process. X In order for \fIwhoami\fR to succeed, X! the process must have either enrolled or been created by a PVMD. X .PP X Either of the args may be a NULL pointer if that information is not desired. X .I Name X--- 15,24 ---- X .I Whoami X returns the name and instance number for the process. X In order for \fIwhoami\fR to succeed, X! the process must have either enrolled itself or been created by X! another PVM process with \fIinitiate\fR. X! A process created via \fIinitiate\fR must call \fIenroll\fR (with the correct X! name) or \fIwhoami\fR before taking any other PVM-related actions. X .PP X Either of the args may be a NULL pointer if that information is not desired. X .I Name X X X X*** man/whoami.30.old Tue May 26 16:55:45 1992 X--- man/whoami.30 Wed Jul 15 21:57:40 1992 X*************** X*** 16,22 **** X DESCRIPTION X _W_h_o_a_m_i returns the name and instance number for the process. X In order for _w_h_o_a_m_i to succeed, the process must have either X! enrolled or been created by a PVMD. X X Either of the args may be a NULL pointer if that information X is not desired. _N_a_m_e should point to at least 32 bytes of X--- 16,25 ---- X DESCRIPTION X _W_h_o_a_m_i returns the name and instance number for the process. X In order for _w_h_o_a_m_i to succeed, the process must have either X! enrolled itself or been created by another PVM process with X! _i_n_i_t_i_a_t_e. A process created via _i_n_i_t_i_a_t_e must call _e_n_r_o_l_l X! (with the correct name) or _w_h_o_a_m_i before taking any other X! PVM-related actions. X X Either of the args may be a NULL pointer if that information X is not desired. _N_a_m_e should point to at least 32 bytes of X*************** X*** 33,41 **** X X SEE ALSO X enroll(3pvm), initiate(3pvm) X- X- X- X X X X--- 36,41 ---- X X X X*** mandel/Makefile.old Thu May 28 14:41:28 1992 X--- mandel/Makefile Thu Jul 2 12:37:09 1992 X*************** X*** 1,7 **** X # X # makefile for mandelbrot stuff X # X! # ARCH is imported automagically if you use "aimk". X #ARCH = UNKNOWN X X PLIB = ../src/$(ARCH)/libpvm.a X--- 1,7 ---- X # X # makefile for mandelbrot stuff X # X! # ARCH and PVMLFLAGS are imported automagically if you use "aimk". X #ARCH = UNKNOWN X X PLIB = ../src/$(ARCH)/libpvm.a X*************** X*** 10,20 **** X X CC = cc X CFLAGS = -O -DUSE_VC X! #CFLAGS = -O X! LIBS = X X all: mandel_main mandel_tile X X $(XDIR): X - mkdir $(XDIR) X X--- 10,22 ---- X X CC = cc X CFLAGS = -O -DUSE_VC X! LIBS = $(PVMLFLAGS) X X all: mandel_main mandel_tile X X+ xpx: xpx.c X+ $(CC) -o xpx xpx.c -lX11 -lm X+ X $(XDIR): X - mkdir $(XDIR) X X*************** X*** 27,31 **** X mv mandel_tile $(XDIR) X X clean: X! rm -f mandel_main mandel_tile *.o X X--- 29,33 ---- X mv mandel_tile $(XDIR) X X clean: X! rm -f mandel_main mandel_tile *.o xpx X X X X X*** /dev/null Tue Jul 21 16:41:22 1992 X--- mandel/xpx.c Thu Jul 2 12:35:47 1992 X*************** X*** 0 **** X--- 1,780 ---- X+ /* X+ * xpx.c X+ * X+ * usage: X+ * xpx wid hgt [imagefile] X+ * options: X+ * -display X+ * +/-color X+ * +/-c X+ * +/-lut X+ * +/-v X+ * X+ * Display a raw (no header) 8 bit per pixel greyscale image in an Xwindow. X+ * X+ * Jan 1991 Manchek manchek@CS.UTK.EDU. X+ * Mar 1991 Added framing window for pix and lut, handles expose, lut X+ * does rubberline. X+ */ X+ X+ X+ #include X+ #include X+ #include X+ #include X+ #include X+ #include X+ #include X+ #include X+ X+ #define NPV 64 /* this is the number of pixel values used, X+ must be a power of two */ X+ X+ #define min(a,b) ((a)<(b)?(a):(b)) X+ #define max(a,b) ((a)>(b)?(a):(b)) X+ X+ #define MYEVENTS (PointerMotionMask|ButtonPressMask|ButtonReleaseMask|ExposureMask|KeyPressMask) X+ X+ /******************************************* X+ * Known arguments and fallbacks, resources * X+ *******************************************/ X+ X+ char *fallbacks[] = { X+ ".display:", X+ ".color:false", X+ ".lut:false", X+ ".v:false", X+ 0 X+ }; X+ X+ XrmOptionDescRec knownargs[] = { X+ { "-display", ".display", XrmoptionSepArg, (caddr_t)0 }, X+ { "-color", ".color", XrmoptionNoArg, "true"}, X+ { "+color", ".color", XrmoptionSepArg, "false"}, X+ { "-c", ".color", XrmoptionNoArg, "true"}, X+ { "+c", ".color", XrmoptionNoArg, "false"}, X+ { "-lut", ".lut", XrmoptionNoArg, "true"}, X+ { "+lut", ".lut", XrmoptionNoArg, "false"}, X+ { "-v", ".v", XrmoptionNoArg, "true"}, X+ { "+v", ".v", XrmoptionNoArg, "false"} X+ }; X+ X+ struct { X+ char *dispname; X+ int docolor; X+ int dolut; X+ int portrait; X+ } app_res; X+ X+ X+ /********** X+ * Globals * X+ **********/ X+ X+ char *webe; /* out a.out name */ X+ Display *dis; /* display */ X+ Visual *defvi; /* the default visual */ X+ int sn; /* def screen number */ X+ u_long bp, wp; /* black, white on screen */ X+ int np; /* number of planes on screen */ X+ int bpp; /* bits per pixel for direct display */ X+ int bypp; /* bytes per pixel for direct display */ X+ u_long rmsk, gmsk, bmsk; X+ int rshf, gshf, bshf; X+ int nomap = 0; /* not using a colormap */ X+ Colormap cmap; /* default colormap */ X+ int ctes[NPV]; /* colormap indices given to us */ X+ XImage *img; /* image to display */ X+ char *ribuf; /* raw image buffer */ X+ char *imbuf; /* displayed image buffer */ X+ int wid, hgt; /* size of displayed image */ X+ int nb; /* length of raw image in bytes */ X+ int lut[NPV]; /* the (user-specified) lookup table */ X+ u_long reds[NPV]; /* red of rainbow lut */ X+ u_long greens[NPV]; /* green of rainbow lut */ X+ u_long blues[NPV]; /* blue of rainbow lut */ X+ int ibo; /* display image byte order for displays deeper than 8 */ X+ X+ /* xparms() X+ * X+ * Parse the command line, get resources, etc. X+ */ X+ X+ xparms(ac, av, options, numoptions, fallbacks) X+ int *ac; X+ char **av; X+ XrmOptionDescRec *options; X+ int numoptions; X+ char **fallbacks; X+ { X+ char *getenv(); X+ X+ XrmDatabase defdb, udb; X+ XrmValue rval; X+ X+ char *hodir; X+ char *xdfile; X+ int l; X+ X+ webe = (webe = rindex(av[0], '/')) ? webe + 1 : av[0]; X+ X+ XrmInitialize(); X+ defdb = XrmGetStringDatabase(""); X+ if (fallbacks) { X+ while (*fallbacks) { X+ XrmPutLineResource(&defdb, *fallbacks); X+ fallbacks++; X+ } X+ } X+ if (hodir = getenv("HOME")) { X+ l = strlen(hodir); X+ xdfile = (char*)malloc(l + 16); X+ bcopy(hodir, xdfile, l); X+ bcopy("/.Xdefaults", xdfile + l, 12); X+ if (udb = XrmGetFileDatabase(xdfile)) { X+ XrmMergeDatabases(udb, &defdb); X+ } X+ } X+ if (options && numoptions > 0) X+ XrmParseCommand(&defdb, options, numoptions, webe, ac, av); X+ X+ /* X+ * Wierd client-specific part -- have to make this parsing X+ * portable X+ */ X+ X+ { X+ char buf[256]; X+ static char *t[] = {"String", 0}; X+ X+ strcpy(buf, webe); X+ strcat(buf, ".display"); X+ if (XrmGetResource(defdb, buf, "Display", t, &rval)) X+ app_res.dispname = rval.addr; X+ else X+ app_res.dispname = 0; X+ X+ strcpy(buf, webe); X+ strcat(buf, ".color"); X+ if (XrmGetResource(defdb, buf, "Color", t, &rval)) { X+ if (!strcasecmp(rval.addr, "true") X+ || !strcasecmp(rval.addr, "on")) X+ app_res.docolor = 1; X+ } else X+ app_res.docolor = 0; X+ X+ strcpy(buf, webe); X+ strcat(buf, ".lut"); X+ if (XrmGetResource(defdb, buf, "Lut", t, &rval)) { X+ if (!strcasecmp(rval.addr, "true") X+ || !strcasecmp(rval.addr, "on")) X+ app_res.dolut = 1; X+ } else X+ app_res.dolut = 0; X+ X+ strcpy(buf, webe); X+ strcat(buf, ".v"); X+ if (XrmGetResource(defdb, buf, "V", t, &rval)) { X+ if (!strcasecmp(rval.addr, "true") X+ || !strcasecmp(rval.addr, "on")) X+ app_res.portrait = 1; X+ } else X+ app_res.portrait = 0; X+ } X+ } X+ X+ X+ main(argc, argv) X+ int argc; X+ char **argv; X+ { X+ char *fn; X+ X+ /* get resources, options */ X+ X+ xparms(&argc, argv, knownargs, sizeof(knownargs)/sizeof(knownargs[0]), X+ fallbacks); X+ X+ if (argc < 3 || argc > 4) goto usage; X+ X+ wid = atoi(argv[1]); X+ hgt = atoi(argv[2]); X+ X+ setupdpy(); X+ mkrbow(NPV, reds, greens, blues); X+ X+ /* read in the image data */ X+ X+ fn = (argc > 3) ? argv[3] : 0; X+ nb = wid * hgt; X+ getbuf(fn, nb); X+ X+ setupimg(); X+ X+ show(); X+ X+ exit(0); X+ X+ usage: X+ fputs("usage: xpx wid hgt [filename]\n", stderr); X+ fputs("options:\n", stderr); X+ fputs(" -display \n", stderr); X+ fputs(" +/-color\n", stderr); X+ fputs(" +/-c\n", stderr); X+ fputs(" +/-lut\n", stderr); X+ fputs(" +/-v\n", stderr); X+ exit(1); X+ } X+ X+ /* getbuf() X+ * X+ * Read file fn (or stdin if fn = 0) into a buffer. X+ */ X+ X+ getbuf(fn, nb) X+ char *fn; X+ int nb; X+ { X+ int f; X+ int i, j; X+ char c; X+ char *s = "stdin"; X+ X+ if (fn) { X+ if ((f = open(fn, O_RDONLY, 0)) == -1) { X+ perror(fn); X+ exit(1); X+ } X+ } else { X+ fn = s; X+ f = 0; X+ } X+ ribuf = (char*)malloc(nb); X+ bzero(ribuf, nb); X+ X+ if ((j = tread(f, ribuf, nb)) == -1) { X+ perror(fn); X+ exit(1); X+ } X+ if (j < nb) X+ fprintf(stderr, "%s: warning, early EOF\n", fn); X+ else X+ if (read(f, &c, 1) == 1) X+ fprintf(stderr, "%s: warning, extra bytes\n", fn); X+ if (fn != s) X+ (void)close(f); X+ } X+ X+ /* setupdpy() X+ * X+ * Setup display. Initializes globals X+ * dis, sn, bp, wp, nomap, np, defvi. X+ * If nomap is true, initializes X+ * bpp, bypp, rmsk, rshf, gmsk, gshf, bmsk, bshf X+ * else initializes X+ * cmap, ctes X+ */ X+ X+ setupdpy() X+ { X+ XVisualInfo *vin; X+ X+ if (!(dis = XOpenDisplay(app_res.dispname))) { X+ fputs("can't open display\n", stderr); X+ exit(1); X+ } X+ sn = DefaultScreen(dis); X+ X+ bp = BlackPixel(dis, sn); X+ wp = WhitePixel(dis, sn); X+ X+ np = DefaultDepth(dis, sn); X+ defvi = DefaultVisual(dis, sn); X+ X+ if (defvi->class == TrueColor || defvi->class == DirectColor) { X+ XPixmapFormatValues *pfv; X+ int i; X+ X+ nomap = 1; X+ if (!(pfv = XListPixmapFormats(dis, &i))) { X+ fprintf(stderr, "can't get pixmap format list for screen\n"); X+ exit(1); X+ } X+ while (--i >= 0) X+ if (pfv[i].depth == np) break; X+ if (i < 0) { X+ fprintf(stderr, "no pixmap format matches screen depth?\n"); X+ exit(1); X+ } X+ bypp = pfv[i].bits_per_pixel / 8; X+ /* X+ printf("nomap=1, bypp=%d, np=%d\n", bypp, np); X+ */ X+ rmsk = defvi->red_mask; X+ rshf = ffs(rmsk & ~(rmsk >> 1)) - 8; X+ gmsk = defvi->green_mask; X+ gshf = ffs(gmsk & ~(gmsk >> 1)) - 8; X+ bmsk = defvi->blue_mask; X+ bshf = ffs(bmsk & ~(bmsk >> 1)) - 8; X+ X+ ibo = ImageByteOrder(dis); X+ } else { X+ nomap = 0; X+ cmap = DefaultColormap(dis, sn); X+ X+ XAllocColorCells(dis, cmap, 0, NULL, 0, ctes, NPV); X+ } X+ } X+ X+ setupimg() X+ { X+ int i; X+ X+ for (i = 0; i < NPV; i++) X+ lut[i] = i; X+ X+ if (nomap) { X+ imbuf = (char*)malloc(nb * bypp); X+ colbuf(ribuf, imbuf, nb, NPV, lut, app_res.docolor, ibo); X+ X+ img = XCreateImage(dis, defvi, np, ZPixmap, 0, X+ imbuf, wid, hgt, bpp, wid * bypp); X+ X+ } else { X+ imbuf = (char*)malloc(nb); X+ setlut(dis, cmap, NPV, ctes, lut, app_res.docolor); X+ X+ for (i = 0; i < nb; i++ ) { X+ imbuf[i] = ctes[(ribuf[i] >> 2) & 0x3f]; X+ } X+ X+ img = XCreateImage(dis, defvi, 8, ZPixmap, 0, imbuf, wid, hgt, 8, wid); X+ } X+ } X+ X+ show() X+ { X+ GC gc[4]; X+ Window mw, pixw, wl, w; X+ XEvent event; X+ XButtonEvent *bev = (XButtonEvent*)&event; X+ XMotionEvent *mev = (XMotionEvent*)&event; X+ XExposeEvent *eev = (XExposeEvent*)&event; X+ XSizeHints xsh; X+ int lwid = NPV, lhgt = NPV; X+ int mwid, mhgt; X+ int pixwx, pixwy, lutwx, lutwy; X+ int dragging = 0; X+ int x1, y1, x2, y2; X+ int x, y; X+ int ox, oy; X+ int i, j; X+ char keys[2]; /* for key press interpretation */ X+ X+ if (app_res.dolut) { X+ X+ /* display image and look-up table, edit lut */ X+ X+ if (app_res.portrait) { X+ mwid = (wid > lwid * 4) ? wid + 10 : lwid * 4 + 10; X+ mhgt = hgt + lhgt * 4 + 15; X+ pixwx = 5; X+ pixwy = 5; X+ lutwx = 5; X+ lutwy = hgt + 10; X+ } else { X+ mwid = wid + lwid * 4 + 15; X+ mhgt = (hgt > lhgt * 4) ? hgt + 10 : lhgt * 4 + 10; X+ pixwx = 5; X+ pixwy = 5; X+ lutwx = wid + 10; X+ lutwy = 5; X+ } X+ mw = XCreateSimpleWindow(dis, X+ RootWindow(dis, sn), X+ 0, 0, mwid, mhgt, X+ 1, wp, bp); X+ XStoreName(dis, mw, "xpx"); X+ xsh.flags = USSize; X+ xsh.width = mwid; X+ xsh.height = mhgt; X+ XSetNormalHints(dis, mw, &xsh); X+ X+ pixw = XCreateSimpleWindow(dis, mw, pixwx, pixwy, wid, hgt, 1, wp, bp); X+ X+ gc[2] = XCreateGC(dis, mw, (u_long)0, (XGCValues*)0); X+ XSetBackground(dis, gc[2], bp); X+ XSetFunction(dis, gc[2], GXcopy); X+ X+ for (x = 0; x < lwid; x++) X+ lut[x] = x; X+ X+ wl = XCreateSimpleWindow(dis, X+ mw, lutwx, lutwy, lwid * 4, lhgt * 4, 1, wp, bp); X+ X+ gc[0] = XCreateGC(dis, mw, (u_long)0, (XGCValues*)0); X+ XSetBackground(dis, gc[0], wp); X+ XSetForeground(dis, gc[0], bp); X+ XSetFunction(dis, gc[0], GXcopy); X+ X+ gc[1] = XCreateGC(dis, mw, (u_long)0, (XGCValues*)0); X+ XSetBackground(dis, gc[1], bp); X+ XSetForeground(dis, gc[1], wp); X+ XSetFunction(dis, gc[1], GXcopy); X+ X+ gc[3] = XCreateGC(dis, mw, (u_long)0, (XGCValues*)0); X+ XSetForeground(dis, gc[3], bp ^ wp); X+ XSetFunction(dis, gc[3], GXxor); X+ X+ XSelectInput(dis, mw, MYEVENTS); X+ XMapWindow(dis, mw); X+ XMapSubwindows(dis, mw); X+ X+ while (1) { X+ XWindowEvent (dis, mw, MYEVENTS, &event); X+ X+ switch (event.type) { X+ X+ case Expose: X+ if (eev->count == 0) { X+ XClearWindow(dis, wl); X+ for (x = 0; x < lwid; x++) { X+ XFillRectangle(dis, wl, gc[1], X+ x * 4, lhgt * 4 - 1 - lut[x] * 4, X+ 4, lut[x] * 4); X+ } X+ XPutImage(dis, pixw, gc[2], img, 0, 0, 0, 0, wid, hgt); X+ } X+ break; X+ X+ case ButtonPress: X+ if (bev->subwindow != wl X+ || bev->button != Button1) X+ break; X+ XTranslateCoordinates(dis, mw, wl, X+ (int)mev->x, (int)mev->y, &x, &y, &w); X+ dragging = 1; X+ ox = x1 = x; X+ oy = y1 = y; X+ XDrawLine(dis, wl, gc[3], x1, y1, ox, oy); X+ break; X+ X+ case MotionNotify: X+ if (mev->subwindow != wl) X+ break; X+ if (dragging) { X+ XTranslateCoordinates(dis, mw, wl, X+ (int)mev->x, (int)mev->y, &x, &y, &w); X+ XDrawLine(dis, wl, gc[3], x1, y1, ox, oy); X+ ox = x; X+ oy = y; X+ XDrawLine(dis, wl, gc[3], x1, y1, ox, oy); X+ } X+ break; X+ X+ case ButtonRelease: X+ if (bev->subwindow != wl) X+ break; X+ XTranslateCoordinates(dis, mw, wl, X+ (int)mev->x, (int)mev->y, &x, &y, &w); X+ switch (bev->button) { X+ case Button1: X+ if (dragging) { X+ dragging = 0; X+ XDrawLine(dis, wl, gc[3], x1, y1, ox, oy); X+ x1 /= 4; X+ y1 /= 4; X+ x2 = x / 4; X+ y2 = y / 4; X+ if (x2 < 0) x2 = 0; X+ if (x2 >= lwid * 4) x2 = lwid * 4 - 1; X+ if (y2 < 0) y2 = 0; X+ if (y2 >= lhgt * 4) y2 = lhgt * 4 - 1; X+ { X+ int big, small; /* dimensions of rectangle */ X+ int dx, dy; /* delta x, y */ X+ int xdir, ydir; /* x, y direction */ X+ int x, y; /* position accumulator */ X+ int a = 0; /* accum for interpolating */ X+ int i; X+ X+ if ((dx = x2 - x1) < 0) { X+ dx = -dx; xdir = -1; X+ } else X+ xdir = 1; X+ if ((dy = y2 - y1) < 0) { X+ dy = -dy; ydir = -1; X+ } else X+ ydir = 1; X+ big = max(dx, dy); X+ small = min(dx, dy); X+ X+ x = x1; X+ y = y1; X+ X+ for (i = 0; i <= big; i++) { X+ lut[x] = lhgt - 1 - y; X+ XFillRectangle(dis, wl, gc[0], x * 4, 0, 4, y * 4); X+ XFillRectangle(dis, wl, gc[1], x * 4, y * 4, 4, (lhgt - y) * 4); X+ if ((a += small) > big) { X+ a -= big; X+ if (dx < dy) x += xdir; else y += ydir; X+ } X+ if (dy > dx) y += ydir; else x += xdir; X+ } X+ X+ if (nomap) { X+ colbuf(ribuf, imbuf, nb, NPV, lut, app_res.docolor, ibo); X+ XPutImage(dis, pixw, gc[2], img, 0, 0, 0, 0, wid, hgt); X+ } else X+ setlut(dis, cmap, NPV, ctes, lut, app_res.docolor); X+ XFlush(dis); X+ } X+ } X+ break; X+ X+ case Button2: X+ printf("lut values:\n"); X+ for (i = 0; i < lwid; i++) { X+ printf("%2d [%2d]%s", i, lut[i], (i & 7) == 7 ? "\n" : " "); X+ } X+ break; X+ X+ /* X+ case Button3: X+ exit(0); X+ break; X+ */ X+ X+ default: X+ break; X+ } X+ break; X+ X+ case KeyPress: X+ if (XLookupString((XKeyEvent*)&event, keys, sizeof(keys), 0, 0) X+ == 1 && (keys[0] == 'q' || keys[0] == 'Q')) X+ exit(0); X+ break; X+ X+ default: X+ break; X+ } X+ } X+ X+ } else { X+ X+ /* no look-up table, just display */ X+ X+ pixw = XCreateSimpleWindow(dis, X+ RootWindow(dis, sn), X+ 0, 0, wid, hgt, X+ 1, 1, 1); X+ XStoreName(dis, pixw, "xpx"); X+ X+ xsh.flags = USSize; X+ xsh.width = wid; X+ xsh.height = hgt; X+ XSetNormalHints(dis, pixw, &xsh); X+ X+ XSelectInput(dis, pixw, MYEVENTS); X+ X+ XMapWindow(dis, pixw); X+ X+ gc[2] = XCreateGC(dis, pixw, (u_long)0, (XGCValues*)0); X+ XSetBackground(dis, gc[2], 0); X+ XSetFunction(dis, gc[2], GXcopy); X+ X+ while (1) { X+ XWindowEvent (dis, pixw, MYEVENTS, &event); X+ switch (event.type) { X+ case Expose: X+ if (eev->count == 0) X+ XPutImage(dis, pixw, gc[2], img, 0, 0, 0, 0, wid, hgt); X+ break; X+ /* X+ case ButtonRelease: X+ exit(0); X+ */ X+ case KeyPress: X+ if (XLookupString((XKeyEvent*)&event, keys, sizeof(keys), 0, 0) X+ == 1 && (keys[0] == 'q' || keys[0] == 'Q')) X+ exit(0); X+ break; X+ X+ default: X+ break; X+ } X+ } X+ } X+ } X+ X+ /* setlut() X+ * X+ * Set colormap according to lut and whether we are in color. X+ */ X+ X+ setlut(dis, cmap, n, ctes, lut, cbw) X+ Display *dis; /* display connection */ X+ Colormap cmap; /* colormap to write */ X+ int n; /* number of colormap entries */ X+ int *ctes; /* colormap indices */ X+ int *lut; /* lookup table values */ X+ int cbw; /* color/b&w */ X+ { X+ XColor colr; X+ int i, j; X+ X+ colr.flags = DoRed|DoGreen|DoBlue; X+ X+ if (cbw) { X+ colr.pixel = ctes[n - 1]; X+ colr.red = colr.green = colr.blue = 0; X+ XStoreColor(dis, cmap, &colr); X+ for (i = 0; i < n; i++) { X+ colr.pixel = ctes[i]; X+ colr.blue = (blues[lut[i]]) << 10; X+ colr.green = (greens[lut[i]]) << 10; X+ colr.red = (reds[lut[i]]) << 10; X+ XStoreColor(dis, cmap, &colr); X+ } X+ X+ } else { X+ for (i = 0; i < n; i++) { X+ colr.pixel = ctes[i]; X+ colr.red = colr.green = colr.blue = (lut[i] << 10); X+ XStoreColor(dis, cmap, &colr); X+ } X+ } X+ } X+ X+ u_long X+ sw4(lp) X+ u_long lp; X+ { X+ u_char *cp = (u_char*)&lp; X+ u_char c; X+ X+ c = cp[0]; X+ cp[0] = cp[3]; X+ cp[3] = c; X+ c = cp[1]; X+ cp[1] = cp[2]; X+ cp[2] = c; X+ return lp; X+ } X+ X+ /* colbuf() X+ * X+ * Recolor memory-image according to lut and whether we are in color. X+ */ X+ X+ colbuf(ribuf, imbuf, len, n, lut, cbw, ibo) X+ unsigned char *ribuf; X+ unsigned char *imbuf; X+ int len; X+ int n; /* number of colormap entries */ X+ int *lut; /* lookup table values */ X+ int cbw; /* color/b&w */ X+ int ibo; /* image byte order, either LSBFirst or MSBFirst */ X+ { X+ int i, j; X+ u_long pixv, r, g, b; X+ int lbs; X+ int lbm; X+ u_long mbo = 0x04030201; /* machine byte order */ X+ int bs = 0; X+ X+ if ((*(char*)&mbo == 1 && ibo == MSBFirst) X+ || (*(char*)&mbo == 4 && ibo == LSBFirst)) X+ bs = 1; X+ X+ lbm = n - 1; X+ lbs = 8 - (ffs(n) - 1); X+ X+ if (cbw) { X+ for (i = 0; i < len; i++) { X+ r = reds[lut[lbm & (ribuf[i] >> lbs)]] << lbs; X+ g = greens[lut[lbm & (ribuf[i] >> lbs)]] << lbs; X+ b = blues[lut[lbm & (ribuf[i] >> lbs)]] << lbs; X+ pixv = (rmsk & (r << rshf)) X+ | (gmsk & (g << gshf)) X+ | (bmsk & (b << bshf)); X+ if (bs) X+ ((u_long*)imbuf)[i] = sw4(pixv); X+ else X+ ((u_long*)imbuf)[i] = pixv; X+ } X+ X+ } else { X+ for (i = 0; i < len; i++) { X+ pixv = lut[lbm & (ribuf[i] >> lbs)] << lbs; X+ pixv = (rmsk & (pixv << rshf)) X+ | (gmsk & (pixv << gshf)) X+ | (bmsk & (pixv << bshf)); X+ if (bs) X+ ((u_long*)imbuf)[i] = sw4(pixv); X+ else X+ ((u_long*)imbuf)[i] = pixv; X+ } X+ } X+ } X+ X+ /* mkrbow() X+ * X+ * Generate a rainbow lut. 0 is black, n-1 is white, and entries X+ * between those two go through the spectrum from red to violet. X+ */ X+ X+ mkrbow(n, r, g, b) X+ int n; /* number of entries */ X+ u_long *r, *g, *b; /* red, grn, blu lut return */ X+ { X+ int i, j; X+ double d, e; X+ X+ for (i = 1; i < n - 1; i++) { X+ j = n - 1 - i; X+ d = (d = cos((double)((j - n * 0.16) * (3.1415926535 / n)))) < 0.0 X+ ? 0.0 : d; X+ b[i] = d * n; X+ d = (d = cos((double)((j - n * 0.52) * (3.1415926535 / n)))) < 0.0 X+ ? 0.0 : d; X+ g[i] = d * n; X+ d = (d = cos((double)((j - n * .83) * (3.1415926535 / n)))) < 0.0 X+ ? 0.0 : d; X+ e = (e = cos((double)(j * (3.1415926535 / n)))) < 0.0 X+ ? 0.0 : e; X+ r[i] = d * n + e * (n / 2); X+ } X+ r[i] = g[i] = b[i] = i; X+ r[0] = g[0] = b[0] = 0; X+ } X+ X+ /* tread() X+ * X+ * Tenacious read. Just like read(2) except that it will keep trying X+ * to get those n bytes until there really aren't any more. X+ * Returns the number it got or -1 if error. X+ */ X+ X+ int X+ tread(d, b, n) X+ int d; X+ char *b; X+ int n; X+ { X+ int e; X+ int x = n; X+ X+ while (x > 0) { X+ if ((e = read(d, b, x)) == -1) X+ return e; X+ if (!e) X+ return n - x; X+ b += e; X+ x -= e; X+ } X+ return n - x; X+ } X+ X X X X*** /dev/null Tue Jul 21 16:41:22 1992 X--- src/I386/Makefile Mon Jun 29 13:54:24 1992 X*************** X*** 0 **** X--- 1,184 ---- X+ # X+ # PVM 2.2 X+ # University of Tennesee, Knoxville, TN. X+ # Oak Ridge National Laboratory, Oak Ridge, TN. X+ # X+ # Makefile for PVM/386 BSDI X+ # X+ ARCH = I386 X+ ARCHCFLAGS = -DSOCKADHASLEN X+ ARCHDLIBS = X+ ARCHDOBJS = X+ HASRANLIB = t X+ # END of custom section - leave this line here X+ # X+ # PVM 2.2 X+ # University of Tennesee, Knoxville, TN. X+ # Oak Ridge National Laboratory, Oak Ridge, TN. X+ # 21 Mar 1991 X+ # X+ # Makefile for PVM/Generic X+ # X+ # $Log: Makefile.generic,v $ X+ # Revision 1.9 1992/01/01 00:10:02 manchek X+ # added micomm and uliberr to libpvm objects X+ # X+ # Revision 1.8 1991/11/27 21:08:22 manchek X+ # added NOGETDTABLESIZE comment X+ # X+ # Revision 1.7 1991/11/26 21:40:58 manchek X+ # moved start.c to startup.c because crays hate that name X+ # X+ # Revision 1.6 1991/11/26 21:22:04 manchek X+ # forced SHELL to /bin/sh X+ # X+ # Revision 1.5 1991/11/26 19:52:43 manchek X+ # set up so customizing stuff can be added to head of file X+ # X+ # Revision 1.4 1991/11/26 19:08:24 manchek X+ # added pvmd files start.c and host.c X+ # X+ # Revision 1.3 1991/07/24 17:27:36 manchek X+ # remade deps due to new files. X+ # X+ # Revision 1.2 1991/05/09 15:24:16 manchek X+ # added tidy target X+ # X+ # Revision 1.1 1991/05/06 14:45:09 manchek X+ # Initial revision X+ # X+ # X+ # This generic template imports: X+ # X+ # ARCH = the official pvm-name of your processor X+ # ARCHCFLAGS = special cc flags X+ # ARCHDLIBS = special libs needed for daemon X+ # ARCHDOBJS = special objects needed for daemon X+ # HASRANLIB = 't' or 'f' X+ # X+ # Define: X+ # DEBUG to get useful information X+ # FDSETPATCH if your machine doesn't have fd_set stuff X+ # SUNOS3PATCH if you're running sun os < 4.0 X+ # NOUNIXSOC if your machine doesn't have unix-domain sockets X+ # NOSTRCASE if your libc doesn't have strcasecmp, strncasecmp X+ # SYSVSIGNAL for system5-like signal handling X+ # SYSVSTRING for strchr() instead of index() X+ # NOGETDTABLESIZE if your system doesn't have it X+ # X+ SHELL = /bin/sh X+ CC = cc X+ SDIR = .. X+ CFLAGS = -g -DARCHCLASS=\"$(ARCH)\" -DIMA_$(ARCH) $(ARCHCFLAGS) X+ DOBJS = archequiv.o cmd.o host.o loclcomm.o micomm.o netside.o proc.o \ X+ pvmd.o startup.o uside.o util.o wait.o $(ARCHDOBJS) X+ LOBJS = ulib.o crunch.o util.o loclcomm.o micomm.o uliberr.o X+ # X+ all: pvmd libpvm.a X+ X+ pvmd: $(DOBJS) X+ $(CC) $(CFLAGS) -o pvmd $(DOBJS) $(ARCHDLIBS) X+ X+ libpvm.a: $(LOBJS) X+ rm -f libpvm.a X+ ar rv libpvm.a $(LOBJS) X+ case x$(HASRANLIB) in xt ) echo ranlib; ranlib libpvm.a ;; esac X+ X+ clean: X+ rm -f $(DOBJS) $(LOBJS) pvmd libpvm.a X+ X+ tidy: X+ rm -f $(DOBJS) $(LOBJS) X+ X+ archequiv.o: $(SDIR)/archequiv.c X+ $(CC) $(CFLAGS) -c $(SDIR)/archequiv.c X+ cmd.o: $(SDIR)/cmd.c X+ $(CC) $(CFLAGS) -c $(SDIR)/cmd.c X+ crunch.o: $(SDIR)/crunch.c X+ $(CC) $(CFLAGS) -c $(SDIR)/crunch.c X+ host.o: $(SDIR)/host.c X+ $(CC) $(CFLAGS) -c $(SDIR)/host.c X+ loclcomm.o: $(SDIR)/loclcomm.c X+ $(CC) $(CFLAGS) -c $(SDIR)/loclcomm.c X+ micomm.o: $(SDIR)/micomm.c X+ $(CC) $(CFLAGS) -c $(SDIR)/micomm.c X+ netside.o: $(SDIR)/netside.c X+ $(CC) $(CFLAGS) -c $(SDIR)/netside.c X+ proc.o: $(SDIR)/proc.c X+ $(CC) $(CFLAGS) -c $(SDIR)/proc.c X+ pvmd.o: $(SDIR)/pvmd.c X+ $(CC) $(CFLAGS) -c $(SDIR)/pvmd.c X+ ruserpass.o: $(SDIR)/ruserpass.c X+ $(CC) $(CFLAGS) -c $(SDIR)/ruserpass.c X+ startup.o: $(SDIR)/startup.c X+ $(CC) $(CFLAGS) -c $(SDIR)/startup.c X+ ulib.o: $(SDIR)/ulib.c X+ $(CC) $(CFLAGS) -c $(SDIR)/ulib.c X+ uliberr.o: $(SDIR)/uliberr.c X+ $(CC) $(CFLAGS) -c $(SDIR)/uliberr.c X+ uside.o: $(SDIR)/uside.c X+ $(CC) $(CFLAGS) -c $(SDIR)/uside.c X+ util.o: $(SDIR)/util.c X+ $(CC) $(CFLAGS) -c $(SDIR)/util.c X+ wait.o: $(SDIR)/wait.c X+ $(CC) $(CFLAGS) -c $(SDIR)/wait.c X+ X+ # X+ #include deps - generated by 'grep \#include.\*\" *.c' X+ # X+ archequiv.o: $(SDIR)/global.h X+ archequiv.o: $(SDIR)/pvmd.h X+ crunch.o: $(SDIR)/global.h X+ crunch.o: $(SDIR)/loclcomm.h X+ crunch.o: $(SDIR)/pvmuser.h X+ host.o: $(SDIR)/craypatch.h X+ host.o: $(SDIR)/xenixpatch.h X+ host.o: $(SDIR)/titanpatch.h X+ host.o: $(SDIR)/global.h X+ host.o: $(SDIR)/pvmd.h X+ host.o: $(SDIR)/sunos3patch.h X+ loclcomm.o: $(SDIR)/loclcomm.h X+ micomm.o: $(SDIR)/micomm.h X+ netside.o: $(SDIR)/global.h X+ netside.o: $(SDIR)/pvmd.h X+ netside.o: $(SDIR)/micomm.h X+ netside.o: $(SDIR)/rem.h X+ netside.o: $(SDIR)/proc.h X+ netside.o: $(SDIR)/wait.h X+ netside.o: $(SDIR)/loclcomm.h X+ proc.o: $(SDIR)/global.h X+ proc.o: $(SDIR)/proc.h X+ proc.o: $(SDIR)/loclcomm.h X+ pvmd.o: $(SDIR)/fdsetpatch.h X+ pvmd.o: $(SDIR)/craypatch.h X+ pvmd.o: $(SDIR)/xenixpatch.h X+ pvmd.o: $(SDIR)/titanpatch.h X+ pvmd.o: $(SDIR)/global.h X+ pvmd.o: $(SDIR)/pvmd.h X+ pvmd.o: $(SDIR)/micomm.h X+ pvmd.o: $(SDIR)/rem.h X+ pvmd.o: $(SDIR)/proc.h X+ pvmd.o: $(SDIR)/wait.h X+ pvmd.o: $(SDIR)/loclcomm.h X+ pvmd.o: $(SDIR)/sunos3patch.h X+ startup.o: $(SDIR)/fdsetpatch.h X+ startup.o: $(SDIR)/craypatch.h X+ startup.o: $(SDIR)/xenixpatch.h X+ startup.o: $(SDIR)/titanpatch.h X+ startup.o: $(SDIR)/global.h X+ startup.o: $(SDIR)/pvmd.h X+ startup.o: $(SDIR)/sunos3patch.h X+ ulib.o: $(SDIR)/global.h X+ ulib.o: $(SDIR)/loclcomm.h X+ ulib.o: $(SDIR)/micomm.h X+ ulib.o: $(SDIR)/pvmuser.h X+ uside.o: $(SDIR)/global.h X+ uside.o: $(SDIR)/pvmd.h X+ uside.o: $(SDIR)/micomm.h X+ uside.o: $(SDIR)/rem.h X+ uside.o: $(SDIR)/proc.h X+ uside.o: $(SDIR)/wait.h X+ uside.o: $(SDIR)/loclcomm.h X+ util.o: $(SDIR)/global.h X+ wait.o: $(SDIR)/global.h X+ wait.o: $(SDIR)/wait.h X X X X*** /dev/null Tue Jul 21 16:41:22 1992 X--- src/KSR1/Makefile Thu May 28 16:12:58 1992 X*************** X*** 0 **** X--- 1,184 ---- X+ # X+ # PVM 2.2 X+ # University of Tennesee, Knoxville, TN. X+ # Oak Ridge National Laboratory, Oak Ridge, TN. X+ # X+ # Makefile for PVM/KSR1 X+ # X+ ARCH = KSR1 X+ ARCHCFLAGS = X+ ARCHDLIBS = X+ ARCHDOBJS = X+ HASRANLIB = f X+ # END of custom section - leave this line here X+ # X+ # PVM 2.2 X+ # University of Tennesee, Knoxville, TN. X+ # Oak Ridge National Laboratory, Oak Ridge, TN. X+ # 21 Mar 1991 X+ # X+ # Makefile for PVM/Generic X+ # X+ # $Log: Makefile.generic,v $ X+ # Revision 1.9 1992/01/01 00:10:02 manchek X+ # added micomm and uliberr to libpvm objects X+ # X+ # Revision 1.8 1991/11/27 21:08:22 manchek X+ # added NOGETDTABLESIZE comment X+ # X+ # Revision 1.7 1991/11/26 21:40:58 manchek X+ # moved start.c to startup.c because crays hate that name X+ # X+ # Revision 1.6 1991/11/26 21:22:04 manchek X+ # forced SHELL to /bin/sh X+ # X+ # Revision 1.5 1991/11/26 19:52:43 manchek X+ # set up so customizing stuff can be added to head of file X+ # X+ # Revision 1.4 1991/11/26 19:08:24 manchek X+ # added pvmd files start.c and host.c X+ # X+ # Revision 1.3 1991/07/24 17:27:36 manchek X+ # remade deps due to new files. X+ # X+ # Revision 1.2 1991/05/09 15:24:16 manchek X+ # added tidy target X+ # X+ # Revision 1.1 1991/05/06 14:45:09 manchek X+ # Initial revision X+ # X+ # X+ # This generic template imports: X+ # X+ # ARCH = the official pvm-name of your processor X+ # ARCHCFLAGS = special cc flags X+ # ARCHDLIBS = special libs needed for daemon X+ # ARCHDOBJS = special objects needed for daemon X+ # HASRANLIB = 't' or 'f' X+ # X+ # Define: X+ # DEBUG to get useful information X+ # FDSETPATCH if your machine doesn't have fd_set stuff X+ # SUNOS3PATCH if you're running sun os < 4.0 X+ # NOUNIXSOC if your machine doesn't have unix-domain sockets X+ # NOSTRCASE if your libc doesn't have strcasecmp, strncasecmp X+ # SYSVSIGNAL for system5-like signal handling X+ # SYSVSTRING for strchr() instead of index() X+ # NOGETDTABLESIZE if your system doesn't have it X+ # X+ SHELL = /bin/sh X+ CC = cc X+ SDIR = .. X+ CFLAGS = -g -DARCHCLASS=\"$(ARCH)\" -DIMA_$(ARCH) $(ARCHCFLAGS) X+ DOBJS = archequiv.o cmd.o host.o loclcomm.o micomm.o netside.o proc.o \ X+ pvmd.o startup.o uside.o util.o wait.o $(ARCHDOBJS) X+ LOBJS = ulib.o crunch.o util.o loclcomm.o micomm.o uliberr.o X+ # X+ all: pvmd libpvm.a X+ X+ pvmd: $(DOBJS) X+ $(CC) $(CFLAGS) -o pvmd $(DOBJS) $(ARCHDLIBS) X+ X+ libpvm.a: $(LOBJS) X+ rm -f libpvm.a X+ ar rv libpvm.a $(LOBJS) X+ case x$(HASRANLIB) in xt ) echo ranlib; ranlib libpvm.a ;; esac X+ X+ clean: X+ rm -f $(DOBJS) $(LOBJS) pvmd libpvm.a X+ X+ tidy: X+ rm -f $(DOBJS) $(LOBJS) X+ X+ archequiv.o: $(SDIR)/archequiv.c X+ $(CC) $(CFLAGS) -c $(SDIR)/archequiv.c X+ cmd.o: $(SDIR)/cmd.c X+ $(CC) $(CFLAGS) -c $(SDIR)/cmd.c X+ crunch.o: $(SDIR)/crunch.c X+ $(CC) $(CFLAGS) -c $(SDIR)/crunch.c X+ host.o: $(SDIR)/host.c X+ $(CC) $(CFLAGS) -c $(SDIR)/host.c X+ loclcomm.o: $(SDIR)/loclcomm.c X+ $(CC) $(CFLAGS) -c $(SDIR)/loclcomm.c X+ micomm.o: $(SDIR)/micomm.c X+ $(CC) $(CFLAGS) -c $(SDIR)/micomm.c X+ netside.o: $(SDIR)/netside.c X+ $(CC) $(CFLAGS) -c $(SDIR)/netside.c X+ proc.o: $(SDIR)/proc.c X+ $(CC) $(CFLAGS) -c $(SDIR)/proc.c X+ pvmd.o: $(SDIR)/pvmd.c X+ $(CC) $(CFLAGS) -c $(SDIR)/pvmd.c X+ ruserpass.o: $(SDIR)/ruserpass.c X+ $(CC) $(CFLAGS) -c $(SDIR)/ruserpass.c X+ startup.o: $(SDIR)/startup.c X+ $(CC) $(CFLAGS) -c $(SDIR)/startup.c X+ ulib.o: $(SDIR)/ulib.c X+ $(CC) $(CFLAGS) -c $(SDIR)/ulib.c X+ uliberr.o: $(SDIR)/uliberr.c X+ $(CC) $(CFLAGS) -c $(SDIR)/uliberr.c X+ uside.o: $(SDIR)/uside.c X+ $(CC) $(CFLAGS) -c $(SDIR)/uside.c X+ util.o: $(SDIR)/util.c X+ $(CC) $(CFLAGS) -c $(SDIR)/util.c X+ wait.o: $(SDIR)/wait.c X+ $(CC) $(CFLAGS) -c $(SDIR)/wait.c X+ X+ # X+ #include deps - generated by 'grep \#include.\*\" *.c' X+ # X+ archequiv.o: $(SDIR)/global.h X+ archequiv.o: $(SDIR)/pvmd.h X+ crunch.o: $(SDIR)/global.h X+ crunch.o: $(SDIR)/loclcomm.h X+ crunch.o: $(SDIR)/pvmuser.h X+ host.o: $(SDIR)/craypatch.h X+ host.o: $(SDIR)/xenixpatch.h X+ host.o: $(SDIR)/titanpatch.h X+ host.o: $(SDIR)/global.h X+ host.o: $(SDIR)/pvmd.h X+ host.o: $(SDIR)/sunos3patch.h X+ loclcomm.o: $(SDIR)/loclcomm.h X+ micomm.o: $(SDIR)/micomm.h X+ netside.o: $(SDIR)/global.h X+ netside.o: $(SDIR)/pvmd.h X+ netside.o: $(SDIR)/micomm.h X+ netside.o: $(SDIR)/rem.h X+ netside.o: $(SDIR)/proc.h X+ netside.o: $(SDIR)/wait.h X+ netside.o: $(SDIR)/loclcomm.h X+ proc.o: $(SDIR)/global.h X+ proc.o: $(SDIR)/proc.h X+ proc.o: $(SDIR)/loclcomm.h X+ pvmd.o: $(SDIR)/fdsetpatch.h X+ pvmd.o: $(SDIR)/craypatch.h X+ pvmd.o: $(SDIR)/xenixpatch.h X+ pvmd.o: $(SDIR)/titanpatch.h X+ pvmd.o: $(SDIR)/global.h X+ pvmd.o: $(SDIR)/pvmd.h X+ pvmd.o: $(SDIR)/micomm.h X+ pvmd.o: $(SDIR)/rem.h X+ pvmd.o: $(SDIR)/proc.h X+ pvmd.o: $(SDIR)/wait.h X+ pvmd.o: $(SDIR)/loclcomm.h X+ pvmd.o: $(SDIR)/sunos3patch.h X+ startup.o: $(SDIR)/fdsetpatch.h X+ startup.o: $(SDIR)/craypatch.h X+ startup.o: $(SDIR)/xenixpatch.h X+ startup.o: $(SDIR)/titanpatch.h X+ startup.o: $(SDIR)/global.h X+ startup.o: $(SDIR)/pvmd.h X+ startup.o: $(SDIR)/sunos3patch.h X+ ulib.o: $(SDIR)/global.h X+ ulib.o: $(SDIR)/loclcomm.h X+ ulib.o: $(SDIR)/micomm.h X+ ulib.o: $(SDIR)/pvmuser.h X+ uside.o: $(SDIR)/global.h X+ uside.o: $(SDIR)/pvmd.h X+ uside.o: $(SDIR)/micomm.h X+ uside.o: $(SDIR)/rem.h X+ uside.o: $(SDIR)/proc.h X+ uside.o: $(SDIR)/wait.h X+ uside.o: $(SDIR)/loclcomm.h X+ util.o: $(SDIR)/global.h X+ wait.o: $(SDIR)/global.h X+ wait.o: $(SDIR)/wait.h X X X X*** src/Makefile.generic.old Wed Mar 18 18:08:07 1992 X--- src/Makefile.generic Tue Jun 30 12:44:31 1992 X*************** X*** 7,12 **** X--- 7,15 ---- X # Makefile for PVM/Generic X # X # $Log: Makefile.generic,v $ X+ # Revision 1.11 1992/06/30 16:44:23 manchek X+ # added comments about defines X+ # X # Revision 1.10 1992/03/18 23:07:51 manchek X # added archequiv.c target, remade deps X # X*************** X*** 48,60 **** X # X # Define: X # DEBUG to get useful information X! # FDSETPATCH if your machine doesn't have fd_set stuff X! # SUNOS3PATCH if you're running sun os < 4.0 X! # NOUNIXSOC if your machine doesn't have unix-domain sockets X! # NOSTRCASE if your libc doesn't have strcasecmp, strncasecmp X # SYSVSIGNAL for system5-like signal handling X # SYSVSTRING for strchr() instead of index() X! # NOGETDTABLESIZE if your system doesn't have it X # X SHELL = /bin/sh X CC = cc X--- 51,64 ---- X # X # Define: X # DEBUG to get useful information X! # FDSETPATCH if machine doesn't have fd_set stuff X! # SUNOS3PATCH if running SunOS < 4.0 X! # NOUNIXSOC if machine doesn't have unix-domain sockets X! # NOSTRCASE if libc doesn't have strcasecmp, strncasecmp X # SYSVSIGNAL for system5-like signal handling X # SYSVSTRING for strchr() instead of index() X! # NOGETDTABLESIZE if libc doesn't have getdtablesize() X! # SOCKADHASLEN if struct sockaddr has an sa_len field X # X SHELL = /bin/sh X CC = cc X X X X*** src/PMAX/Makefile.old Wed Mar 18 13:12:45 1992 X--- src/PMAX/Makefile Wed Jun 10 13:25:27 1992 X*************** X*** 8,14 **** X ARCH = PMAX X ARCHCFLAGS = X ARCHDLIBS = X! ARCHDOBJS = ruserpass.o X HASRANLIB = t X # END of custom section - leave this line here X # X--- 8,15 ---- X ARCH = PMAX X ARCHCFLAGS = X ARCHDLIBS = X! #ARCHDOBJS = ruserpass.o X! ARCHDOBJS = X HASRANLIB = t X # END of custom section - leave this line here X # X X X X*** src/archequiv.c.old Sun May 31 18:19:09 1992 X--- src/archequiv.c Mon Jun 29 14:32:47 1992 X*************** X*** 10,15 **** X--- 10,18 ---- X * This file was archequiv.h, but needed a better interface. X * X $Log: archequiv.c,v $ X+ * Revision 1.5 1992/06/29 18:32:22 manchek X+ * added I386 X+ * X * Revision 1.4 1992/05/31 22:19:05 manchek X * added KSR1 X * X*************** X*** 85,91 **** X {"IPSC", 2}, X {"I860", 3}, X {"PMAX", 4}, X! {"SYMM", 5}, X {"TITN", 6}, X {"UVAX", 7}, X {"CRAY", 8}, X--- 88,94 ---- X {"IPSC", 2}, X {"I860", 3}, X {"PMAX", 4}, X! {"I386", 5}, {"SYMM", 5}, X {"TITN", 6}, X {"UVAX", 7}, X {"CRAY", 8}, X X X X*** src/crunch.c.old Thu May 21 14:48:33 1992 X--- src/crunch.c Wed Jul 1 15:14:35 1992 X*************** X*** 9,14 **** X--- 9,18 ---- X * Crunching of machine-independant primitive objects. X * X $Log: crunch.c,v $ X+ * Revision 1.11 1992/07/01 19:13:50 manchek X+ * moved sys/param.h include above xdr includes. X+ * added fake xdr_float and xdr_double routines for I386 X+ * X * Revision 1.10 1992/03/18 19:11:38 manchek X * added globals icdataconv and ogdataconv, set by new function X * pvm_inithow() that determine how put and get functions pack data. X*************** X*** 46,54 **** X * X */ X X #include X #include X- #include X #include X #include X #include "global.h" X--- 50,58 ---- X * X */ X X+ #include X #include X #include X #include X #include X #include "global.h" X*************** X*** 464,469 **** X--- 468,494 ---- X } X return 0; X } X+ X+ #ifdef IMA_I386 X+ X+ int X+ xdr_float(xdrp, fp) X+ XDR *xdrp; X+ float *fp; X+ { X+ return xdr_long(xdrp, (long*)fp); X+ } X+ X+ int X+ xdr_double(xdrp, dp) X+ XDR *xdrp; X+ double *dp; X+ { X+ return xdr_long(xdrp, (long*)dp + 1) X+ && xdr_long(xdrp, (long*)dp); X+ } X+ X+ #endif/*IMA_I386*/ X X int X putnfloat(fp, cnt) X X X X*** src/host.c.old Thu May 28 14:00:17 1992 X--- src/host.c Mon Jun 29 14:32:28 1992 X*************** X*** 9,14 **** X--- 9,21 ---- X * Host-file and host-table stuff. X * X $Log: host.c,v $ X+ * Revision 1.11 1992/06/29 18:30:13 manchek X+ * fixed iflist() to work with variable size struct ifreq and non-AF_INET X+ * entries X+ * X+ * Revision 1.10 1992/06/03 18:57:38 manchek X+ * need to include sys/time.h X+ * X * Revision 1.9 1992/05/28 18:00:04 manchek X * Added TITN ifdefs X * X*************** X*** 52,57 **** X--- 59,65 ---- X #include X #include X #endif X+ #include X #include X #include X #include X*************** X*** 81,86 **** X--- 89,100 ---- X #include "sunos3patch.h" X #endif X X+ #ifdef SOCKADHASLEN X+ #define SIZ(p) max(sizeof(p), (p).sa_len) X+ #else X+ #define SIZ(p) sizeof(p) X+ #endif X+ X extern char *sstring(); X X extern int errno; X*************** X*** 104,112 **** X int nip = 0; /* length of iplist */ X char buf[4096]; /* return space for SIOCGIOCONF */ X struct ifconf sif; X- int nif; /* num of interfaces */ X struct ifreq *reqp; X struct ifreq req; X X if (iplist) X free(iplist); X--- 118,126 ---- X int nip = 0; /* length of iplist */ X char buf[4096]; /* return space for SIOCGIOCONF */ X struct ifconf sif; X struct ifreq *reqp; X struct ifreq req; X+ char *cp; X X if (iplist) X free(iplist); X*************** X*** 123,131 **** X perror("ioctl"); X goto bail; X } X- nif = sif.ifc_len / sizeof(*reqp); X X! for (reqp = sif.ifc_ifcu.ifcu_req; nif-- > 0; reqp++) { X bcopy(reqp->ifr_name, req.ifr_name, sizeof(req.ifr_name)); X if (ioctl(soc, SIOCGIFFLAGS, &req) == -1) { X perror("ioctl"); X--- 137,150 ---- X perror("ioctl"); X goto bail; X } X X! for (cp = sif.ifc_ifcu.ifcu_buf; X! cp - sif.ifc_ifcu.ifcu_buf < sif.ifc_len; X! cp += sizeof(*reqp) - sizeof(struct sockaddr) + SIZ(reqp->ifr_addr)) X! { X! reqp = (struct ifreq*)cp; X! if (reqp->ifr_addr.sa_family != AF_INET) X! continue; X bcopy(reqp->ifr_name, req.ifr_name, sizeof(req.ifr_name)); X if (ioctl(soc, SIOCGIFFLAGS, &req) == -1) { X perror("ioctl"); X X X X*** src/pvmd.c.old Thu May 28 14:00:50 1992 X--- src/pvmd.c Mon Jun 29 14:33:12 1992 X*************** X*** 9,14 **** X--- 9,17 ---- X * PVM Daemon. X * X $Log: pvmd.c,v $ X+ * Revision 1.33 1992/06/29 18:32:42 manchek X+ * cleaned up lint glarp with casts X+ * X * Revision 1.32 1992/05/28 18:00:40 manchek X * Added TITN ifdefs X * X*************** X*** 305,311 **** X--- 308,317 ---- X lproc *lpp; X X #ifndef SYSVSIGNAL X+ /* X while ((pid = wait3((union wait *)0, WNOHANG, (struct rusage *)0)) > 0) X+ */ X+ while ((pid = wait3(0, WNOHANG, (struct rusage *)0)) > 0) X if (lpp = get_lpp(pid)) { X lpp->lp_flg |= PS_FRESHLYDEAD; X undead++; X*************** X*** 845,851 **** X if (FD_ISSET(usock, &rfds)) { X addrlen = sizeof(other); X if ((msglen = recvfrom(usock, msg, maxxmlen, 0, X! &other, &addrlen)) == -1) X perror("recvfrom"); X else X if (msglen >= sizeof(userm)) X--- 851,857 ---- X if (FD_ISSET(usock, &rfds)) { X addrlen = sizeof(other); X if ((msglen = recvfrom(usock, msg, maxxmlen, 0, X! (struct sockaddr*)&other, &addrlen)) == -1) X perror("recvfrom"); X else X if (msglen >= sizeof(userm)) X X X X*** src/startup.c.old Thu May 28 14:08:21 1992 X--- src/startup.c Mon Jun 29 14:34:00 1992 X*************** X*** 9,14 **** X--- 9,18 ---- X * Remote pvmd exec stuff. X * X $Log: startup.c,v $ X+ * Revision 1.9 1992/06/29 18:33:08 manchek X+ * ifdefd out rexec() for I386. X+ * cleaned up lint glarp with casts X+ * X * Revision 1.8 1992/05/28 18:08:17 manchek X * Added TITN ifdefs X * X*************** X*** 337,345 **** X X /* shift to new socket and yak the rsh */ X X! (void)wait((int*)0); X i = sizeof(sin); X! if ((spsocks[h] = accept(s, &sin, &i)) == -1) { X perror("accept"); X exit(1); X } X--- 341,349 ---- X X /* shift to new socket and yak the rsh */ X X! (void)wait(0); X i = sizeof(sin); X! if ((spsocks[h] = accept(s, (struct sockaddr*)&sin, &i)) == -1) { X perror("accept"); X exit(1); X } X*************** X*** 349,355 **** X (void)close(s); X X } else { /* use rexec to start if want to supply passwd */ X! #ifndef IMA_TITN X if ((spsocks[h] = rexec(&honame, execport, X (hosts[h].h_login ? hosts[h].h_login : lognam), X (char*)0, X--- 353,362 ---- X (void)close(s); X X } else { /* use rexec to start if want to supply passwd */ X! #if defined(IMA_TITN) || defined(IMA_I386) X! fprintf(stderr, "slconfg: sorry, no rexec()\n"); X! exit(1); X! #else X if ((spsocks[h] = rexec(&honame, execport, X (hosts[h].h_login ? hosts[h].h_login : lognam), X (char*)0, X*************** X*** 359,367 **** X hosts[h].h_name); X exit(1); X } X- #else X- fprintf(stderr, "slconfg: sorry, no rexec()\n"); X- exit(1); X #endif X } X X--- 366,371 ---- X*************** X*** 533,539 **** X perror("socket"); X exit(1); X } X! if (connect(s, &other, sizeof(other)) == -1) { X perror("connect"); X exit(1); X } X--- 537,543 ---- X perror("socket"); X exit(1); X } X! if (connect(s, (struct sockaddr*)&other, sizeof(other)) == -1) { X perror("connect"); X exit(1); X } X X X X*** src/ulib.c.old Thu May 28 14:03:51 1992 X--- src/ulib.c Wed Jul 1 15:13:43 1992 X*************** X*** 9,14 **** X--- 9,17 ---- X * User Library for PVM. X * X $Log: ulib.c,v $ X+ * Revision 1.30 1992/07/01 19:13:21 manchek X+ * cleaned up lint glarp with casts X+ * X * Revision 1.29 1992/05/28 18:03:48 manchek X * Added TITN ifdefs X * X*************** X*** 116,121 **** X--- 119,127 ---- X * X */ X X+ #ifdef IMA_I386 X+ #include X+ #endif X #include X #include X #include X*************** X*** 281,287 **** X uu.um_seq = ++seqlast; X bcopy((char*)&uu, cmd, sizeof(uu)); X do { X! e = sendto(ogsock, cmd, cmdlen, 0, &ogsad, ogsal); X if (e == -1) { X perror("sendto"); X sleep(1); X--- 287,293 ---- X uu.um_seq = ++seqlast; X bcopy((char*)&uu, cmd, sizeof(uu)); X do { X! e = sendto(ogsock, cmd, cmdlen, 0, (struct sockaddr*)&ogsad, ogsal); X if (e == -1) { X perror("sendto"); X sleep(1); X*************** X*** 756,762 **** X } X setsockopt(s, IPPROTO_TCP, TCP_NODELAY, (char*)&mi, sizeof(int)); X setsockopt(s, SOL_SOCKET, SO_LINGER, (char*)linger, sizeof(linger)); X! if (connect(s, &sin, sizeof(sin)) == -1) { X perror("getvc: connect"); X return vcp; X } X--- 762,768 ---- X } X setsockopt(s, IPPROTO_TCP, TCP_NODELAY, (char*)&mi, sizeof(int)); X setsockopt(s, SOL_SOCKET, SO_LINGER, (char*)linger, sizeof(linger)); X! if (connect(s, (struct sockaddr*)&sin, sizeof(sin)) == -1) { X perror("getvc: connect"); X return vcp; X } X*************** X*** 887,893 **** X /* accept and setup new socket */ X X retry = 1; X! while (i = sizeof(sin), (s = accept(vsock, &sin, &i)) == -1) { X perror("vc_answer: accept"); X vc_clslu(); X if (retry-- < 1) X--- 893,900 ---- X /* accept and setup new socket */ X X retry = 1; X! while (i = sizeof(sin), X! (s = accept(vsock, (struct sockaddr*)&sin, &i)) == -1) { X perror("vc_answer: accept"); X vc_clslu(); X if (retry-- < 1) X X X X*** tsts/Makefile.old Mon Mar 23 15:45:29 1992 X--- tsts/Makefile Sat Jun 27 20:36:42 1992 X*************** X*** 15,125 **** X clean: X rm -f *.o X X barrtest: $(SDIR)/barrtest.c $(PLIB) $(XDIR) X $(CC) $(CFLAGS) -o barrtest $(SDIR)/barrtest.c $(PLIB) $(LIBS) X mv barrtest $(XDIR) X X conf: $(SDIR)/conf.c $(PLIB) $(XDIR) X $(CC) $(CFLAGS) -o conf $(SDIR)/conf.c $(PLIB) $(LIBS) X mv conf $(XDIR) X X! iassign: $(SDIR)/iassign.c $(PLIB) $(XDIR) X! $(CC) $(CFLAGS) -o iassign $(SDIR)/iassign.c $(PLIB) $(LIBS) X! mv iassign $(XDIR) X X! msgthrash: $(SDIR)/msgthrash.c $(PLIB) $(XDIR) X! $(CC) $(CFLAGS) -o msgthrash $(SDIR)/msgthrash.c $(PLIB) $(LIBS) X! mv msgthrash $(XDIR) X X- cross: $(SDIR)/cross.c $(PLIB) $(XDIR) X- $(CC) $(CFLAGS) -o cross $(SDIR)/cross.c $(PLIB) $(LIBS) X- mv cross $(XDIR) X- X- zlensnd: $(SDIR)/zlensnd.c $(PLIB) $(XDIR) X- $(CC) $(CFLAGS) -o zlensnd $(SDIR)/zlensnd.c $(PLIB) $(LIBS) X- mv zlensnd $(XDIR) X- X timing_slave: $(SDIR)/timing_slave.c $(PLIB) $(XDIR) X $(CC) $(CFLAGS) -o timing_slave $(SDIR)/timing_slave.c $(PLIB) $(LIBS) X mv timing_slave $(XDIR) X X- timing: $(SDIR)/timing.c $(PLIB) $(XDIR) X- $(CC) $(CFLAGS) -o timing $(SDIR)/timing.c $(PLIB) $(LIBS) X- mv timing $(XDIR) X- X- check_slave: $(SDIR)/check_slave.c $(PLIB) $(XDIR) X- $(CC) $(CFLAGS) -o check_slave $(SDIR)/check_slave.c $(PLIB) $(LIBS) X- mv check_slave $(XDIR) X- X- check: $(SDIR)/check.c $(PLIB) $(XDIR) X- $(CC) $(CFLAGS) -o check $(SDIR)/check.c $(PLIB) $(LIBS) X- mv check $(XDIR) X- X- askinit: $(SDIR)/askinit.c $(PLIB) $(XDIR) X- $(CC) $(CFLAGS) -o askinit $(SDIR)/askinit.c $(PLIB) $(LIBS) X- mv askinit $(XDIR) X- X whome: $(SDIR)/whome.c $(PLIB) $(XDIR) X $(CC) $(CFLAGS) -o whome $(SDIR)/whome.c $(PLIB) $(LIBS) X mv whome $(XDIR) X- X- bigmsg: $(SDIR)/bigmsg.c $(PLIB) $(XDIR) X- $(CC) $(CFLAGS) -o bigmsg $(SDIR)/bigmsg.c $(PLIB) $(LIBS) X- mv bigmsg $(XDIR) X- X- loopback: $(SDIR)/loopback.c $(PLIB) $(XDIR) X- $(CC) $(CFLAGS) -o loopback $(SDIR)/loopback.c $(PLIB) $(LIBS) X- mv loopback $(XDIR) X- X- ckbcast: $(SDIR)/ckbcast.c $(PLIB) $(XDIR) X- $(CC) $(CFLAGS) -o ckbcast $(SDIR)/ckbcast.c $(PLIB) $(LIBS) X- mv ckbcast $(XDIR) X- X- ckstat: $(SDIR)/ckstat.c $(PLIB) $(XDIR) X- $(CC) $(CFLAGS) -o ckstat $(SDIR)/ckstat.c $(PLIB) $(LIBS) X- mv ckstat $(XDIR) X- X- enrolltest: $(SDIR)/enrolltest.c $(PLIB) $(XDIR) X- $(CC) $(CFLAGS) -o enrolltest $(SDIR)/enrolltest.c $(PLIB) $(LIBS) X- mv enrolltest $(XDIR) X- X- fail: $(SDIR)/fail.c $(PLIB) $(XDIR) X- $(CC) $(CFLAGS) -o fail $(SDIR)/fail.c $(PLIB) $(LIBS) X- mv fail $(XDIR) X- X- filercv: $(SDIR)/filercv.c $(PLIB) $(XDIR) X- $(CC) $(CFLAGS) -o filercv $(SDIR)/filercv.c $(PLIB) $(LIBS) X- mv filercv $(XDIR) X- X- filesend: $(SDIR)/filesend.c $(PLIB) $(XDIR) X- $(CC) $(CFLAGS) -o filesend $(SDIR)/filesend.c $(PLIB) $(LIBS) X- mv filesend $(XDIR) X- X- probtst: $(SDIR)/probtst.c $(PLIB) $(XDIR) X- $(CC) $(CFLAGS) -o probtst $(SDIR)/probtst.c $(PLIB) $(LIBS) X- mv probtst $(XDIR) X- X- rxbcast: $(SDIR)/rxbcast.c $(PLIB) $(XDIR) X- $(CC) $(CFLAGS) -o rxbcast $(SDIR)/rxbcast.c $(PLIB) $(LIBS) X- mv rxbcast $(XDIR) X- X- strrcv: $(SDIR)/strrcv.c $(PLIB) $(XDIR) X- $(CC) $(CFLAGS) -o strrcv $(SDIR)/strrcv.c $(PLIB) $(LIBS) X- mv strrcv $(XDIR) X- X- strsend: $(SDIR)/strsend.c $(PLIB) $(XDIR) X- $(CC) $(CFLAGS) -o strsend $(SDIR)/strsend.c $(PLIB) $(LIBS) X- mv strsend $(XDIR) X- X- termtest: $(SDIR)/termtest.c $(PLIB) $(XDIR) X- $(CC) $(CFLAGS) -o termtest $(SDIR)/termtest.c $(PLIB) $(LIBS) X- mv termtest $(XDIR) X- X- tstready: $(SDIR)/tstready.c $(PLIB) $(XDIR) X- $(CC) $(CFLAGS) -o tstready $(SDIR)/tstready.c $(PLIB) $(LIBS) X- mv tstready $(XDIR) X- X- waitforme: $(SDIR)/waitforme.c $(PLIB) $(XDIR) X- $(CC) $(CFLAGS) -o waitforme $(SDIR)/waitforme.c $(PLIB) $(LIBS) X- mv waitforme $(XDIR) X X--- 15,53 ---- X clean: X rm -f *.o X X+ askinit: $(SDIR)/askinit.c $(PLIB) $(XDIR) X+ $(CC) $(CFLAGS) -o askinit $(SDIR)/askinit.c $(PLIB) $(LIBS) X+ mv askinit $(XDIR) X+ X barrtest: $(SDIR)/barrtest.c $(PLIB) $(XDIR) X $(CC) $(CFLAGS) -o barrtest $(SDIR)/barrtest.c $(PLIB) $(LIBS) X mv barrtest $(XDIR) X X+ check: $(SDIR)/check.c $(PLIB) $(XDIR) X+ $(CC) $(CFLAGS) -o check $(SDIR)/check.c $(PLIB) $(LIBS) X+ mv check $(XDIR) X+ X+ check_slave: $(SDIR)/check_slave.c $(PLIB) $(XDIR) X+ $(CC) $(CFLAGS) -o check_slave $(SDIR)/check_slave.c $(PLIB) $(LIBS) X+ mv check_slave $(XDIR) X+ X conf: $(SDIR)/conf.c $(PLIB) $(XDIR) X $(CC) $(CFLAGS) -o conf $(SDIR)/conf.c $(PLIB) $(LIBS) X mv conf $(XDIR) X X! enrolltest: $(SDIR)/enrolltest.c $(PLIB) $(XDIR) X! $(CC) $(CFLAGS) -o enrolltest $(SDIR)/enrolltest.c $(PLIB) $(LIBS) X! mv enrolltest $(XDIR) X X! timing: $(SDIR)/timing.c $(PLIB) $(XDIR) X! $(CC) $(CFLAGS) -o timing $(SDIR)/timing.c $(PLIB) $(LIBS) X! mv timing $(XDIR) X X timing_slave: $(SDIR)/timing_slave.c $(PLIB) $(XDIR) X $(CC) $(CFLAGS) -o timing_slave $(SDIR)/timing_slave.c $(PLIB) $(LIBS) X mv timing_slave $(XDIR) X X whome: $(SDIR)/whome.c $(PLIB) $(XDIR) X $(CC) $(CFLAGS) -o whome $(SDIR)/whome.c $(PLIB) $(LIBS) X mv whome $(XDIR) X X X X X*** tsts/timing.c.old Wed Dec 11 15:00:26 1991 X--- tsts/timing.c Sat Jul 11 19:09:29 1992 X*************** X*** 52,58 **** X putnint(&si, 1); X puts(" N uSec"); X for (n = 1; n <= reps; n++) { X! gettimeofday(&tv1, (struct timeval*)0); X if (snd(SLAVENAME, si, 1)) { X fprintf(stderr, "can't send to \"%s\"\n", SLAVENAME); X goto kbail; X--- 52,58 ---- X putnint(&si, 1); X puts(" N uSec"); X for (n = 1; n <= reps; n++) { X! gettimeofday(&tv1, (struct timezone*)0); X if (snd(SLAVENAME, si, 1)) { X fprintf(stderr, "can't send to \"%s\"\n", SLAVENAME); X goto kbail; X*************** X*** 61,73 **** X fprintf(stderr, "rcv returned %d\n", i); X goto kbail; X } X! gettimeofday(&tv2, (struct timeval*)0); X X dt1 = (tv2.tv_sec - tv1.tv_sec) * 1000000 + tv2.tv_usec - tv1.tv_usec; X printf("%2d %8d\n", n, dt1); X! at1 += dt1; X } X! printf("RTT Avg uSec %d\n", at1 / reps); X X /* X * bandwidth test for different message lengths X--- 61,74 ---- X fprintf(stderr, "rcv returned %d\n", i); X goto kbail; X } X! gettimeofday(&tv2, (struct timezone*)0); X X dt1 = (tv2.tv_sec - tv1.tv_sec) * 1000000 + tv2.tv_usec - tv1.tv_usec; X printf("%2d %8d\n", n, dt1); X! if (!at1 || dt1 < at1) X! at1 = dt1; X } X! printf("RTT min uSec %d\n", at1); X X /* X * bandwidth test for different message lengths X*************** X*** 81,93 **** X iarray = (int*)malloc(numint * sizeof(int)); X puts(" N Pack uSec Send uSec"); X for (n = 1; n <= reps; n++) { X! gettimeofday(&tv1, (struct timeval*)0); X initsend(); X putnint(iarray, numint); X! gettimeofday(&tv2, (struct timeval*)0); X dt1 = (tv2.tv_sec - tv1.tv_sec) * 1000000 + tv2.tv_usec - tv1.tv_usec; X X! gettimeofday(&tv1, (struct timeval*)0); X if (snd(SLAVENAME, si, 1)) { X fprintf(stderr, "can't send to \"%s\"\n", SLAVENAME); X goto kbail; X--- 82,94 ---- X iarray = (int*)malloc(numint * sizeof(int)); X puts(" N Pack uSec Send uSec"); X for (n = 1; n <= reps; n++) { X! gettimeofday(&tv1, (struct timezone*)0); X initsend(); X putnint(iarray, numint); X! gettimeofday(&tv2, (struct timezone*)0); X dt1 = (tv2.tv_sec - tv1.tv_sec) * 1000000 + tv2.tv_usec - tv1.tv_usec; X X! gettimeofday(&tv1, (struct timezone*)0); X if (snd(SLAVENAME, si, 1)) { X fprintf(stderr, "can't send to \"%s\"\n", SLAVENAME); X goto kbail; X*************** X*** 96,113 **** X fprintf(stderr, "rcv returned %d\n", i); X goto kbail; X } X! gettimeofday(&tv2, (struct timeval*)0); X dt2 = (tv2.tv_sec - tv1.tv_sec) * 1000000 + tv2.tv_usec - tv1.tv_usec; X X printf("%2d %8d %8d\n", n, dt1, dt2); X! at1 += dt1; X! at2 += dt2; X } X! at1 /= reps; X! at2 /= reps; X! puts("Avg uSec"); X printf(" %8d %8d\n", at1, at2); X! puts("Avg Byte/uSec"); X printf(" %8f %8f\n", X (numint * 4) / (double)at1, X (numint * 4) / (double)at2); X--- 97,114 ---- X fprintf(stderr, "rcv returned %d\n", i); X goto kbail; X } X! gettimeofday(&tv2, (struct timezone*)0); X dt2 = (tv2.tv_sec - tv1.tv_sec) * 1000000 + tv2.tv_usec - tv1.tv_usec; X X printf("%2d %8d %8d\n", n, dt1, dt2); X! if (!at1 || dt1 < at1) X! at1 = dt1; X! if (!at2 || dt2 < at2) X! at2 = dt2; X } X! puts("Min uSec"); X printf(" %8d %8d\n", at1, at2); X! puts("Max Byte/uSec"); X printf(" %8f %8f\n", X (numint * 4) / (double)at1, X (numint * 4) / (double)at2); X X X END_OF_FILE echo shar: 243 control characters may be missing from \"'patch_diffs'\" if test 114911 -ne `wc -c <'patch_diffs'`; then echo shar: \"'patch_diffs'\" unpacked with wrong size! fi # end of 'patch_diffs' fi echo shar: End of shell archive. exit 0