Argument descriptors for library routines consist of three
      fields separated by periods.  The first field consists of
      a descriptive name for the argument.  The second field
      contains a data type descriptor, and the third field indicates
      the argument passing mechanism.

      example --> arg_name.data_type.passing_mechanism

      The possible values for the data type field are:

      	ch	-->	character string (char *, char[], CHARACTER*(*))
			(CLIB routines will accept either string descriptors
			 or simple character pointers unless it is stated
			 otherwise in the routine's help.)
      	i1	-->	one byte integer (char, BYTE)
      	i2	-->	two byte integer (short, INTEGER*2)
      	i4	-->	four byte integer (int, long, INTEGER*4)
      	u1	-->	one byte unsigned integer (unsigned char)
      	u2	-->	two byte unsigned integer (unsigned short)
      	u4	-->	four byte unsigned integer
			(unsigned int, unsigned long)
      	l1	-->	one byte logical (char, LOGICAL*1)
      	l2	-->	two byte logical (short, LOGICAL*2)
      	l4	-->	four byte logical (int, long, LOGICAL*4)
      	r4	-->	single precision real (float, REAL*4)
      	r8	-->	double precision real (double, REAL*8)
      	s	-->	data structure
      	f	-->	function pointer
      	g	-->	generic (void) pointer

      Any of the above can have a suffix of 'a' indicating that it is
      actually an array of that data type.  Also, any array data type
      can have a suffix of 'p' indicating that it is an array of

         	The possible values for the passing mechanism are:

	r	-->	by reference
			(FORTRAN default except for characters)
	v	-->	by value (C default except for arrays)
	d	-->	by descriptor (must always accompany a 'ch' data type)
			(FORTRAN default for character strings)

      An argument descriptor surrounded by square brackets, [ ],
      indicates that the argument is optional.