Each of the following C routines packs an array of the given data type
into the active send buffer.
They can be called multiple times to pack data into a single message.
Thus, a message can contain several arrays each with a different data type.
C structures must be passed by packing their individual elements.
There is no limit to the complexity of the packed messages, but
an application should unpack the messages exactly as they were packed.
Although this is not strictly required, it is a safe programming practice.

The arguments for each of the routines are a pointer to the first item to
be packed, nitem which is the total number of items to pack from
this array, and stride which is the stride to use when packing.
A stride of 1 means a contiguous vector is packed,
a stride of 2 means every other item is packed, and so on.
An exception is pvm_pkstr() which by definition packs a NULL terminated
character string and thus does not need nitem or stride arguments.

PVM also supplies a packing routine that uses a printf-like format expression
to specify what data to pack and how to pack it into the send buffer.
All variables are passed as addresses if count and stride are specified;
otherwise, variables are assumed to be values.
A description of the format syntax is given in Appendix B.

A single Fortran subroutine handles all the packing functions
of the above C routines.

call pvmfpack( what, xp, nitem, stride, info )

The argument xp is the first item of the array to be packed.
Note that in Fortran the number of characters in a string
to be packed must be specified in nitem.
The integer what specifies the type of data to be packed.
The supported options are as follows:

These names have been predefined in parameter statements in
the include file
pvm3/include/fpvm3.h.
Some vendors may extend this list to include 64-bit architectures
in their PVM implementations. We will be adding INTEGER8, REAL16, etc.,
as soon as XDR support for these data types is available.