MA_PUSH_GET


     NAME
	  MA_push_get -	allocate a stack block and get the
	  corresponding	base index

     C SYNOPSIS
	  #include "macdecls.h"

	  Boolean MA_push_get(datatype,	nelem, name, memhandle,	index)
	      Integer	  datatype;	  /* read-only */
	      Integer	  nelem;	  /* read-only */
	      char	  *name;	  /* read-only */
	      Integer	  *memhandle;	  /* write-only	*/
	      Integer	  *index;	  /* write-only	*/

     FORTRAN SYNOPSIS
	  #include "mafdecls.h"

	  logical function MA_push_get(datatype, nelem,	name,
	  memhandle, index)
	      integer	  datatype
	      integer	  nelem
	      character*(*) name
	      integer	  memhandle
	      integer	  index

     DESCRIPTION
	  MA_push_get()	is a convenience function that combines
	  MA_push_stack() and MA_get_index(). MA_push_get() allocates
	  a stack block	large enough to	hold nelem elements of type
	  datatype and associates name with the block for debugging
	  purposes. A handle for the block is returned in memhandle
	  and the base index for the type-specific data	array that is
	  appropriate for the block is returned	in index.

     USAGE
	  The following	FORTRAN	code illustrates the use of
	  MA_push_get()	by allocating a	block of 5 integers on the
	  stack	and then storing values	into the integers.

	  #include "mafdecls.h"

	      logical ok
	      integer mhandle
	      integer index
	      integer i
	      ok = MA_push_get(MT_INT, 5, 'stack int block', mhandle, index)
	      if (ok) then
		  do 10	i = 0, 4
		      int_mb(index + i)	= 0
	  10	  continue
	      endif

     DIAGNOSTICS
	  block	'%s', MA not yet initialized
	       MA_init() must be called	before this routine is called.
	  block	'%s', invalid datatype:	%d
	       datatype	must be	one of those listed in macdecls.h or
	       mafdecls.h.
	  block	'%s', invalid nelem: %d
	       nelem must be greater than zero.
	  block	'%s', not enough space to allocate %d bytes
	       Recovery	may be attempted by deallocating unneeded
	       blocks and resubmitting the request, or the application
	       may be rewritten	to request more	memory initially in
	       the call	to MA_init().

	  Other	diagnostics are	possible. If seen, they	indicate
	  corruption of	the internal state of MA, caused by bugs in
	  either MA or the application.

     RETURN VALUE
	  C: MA_TRUE upon success, MA_FALSE upon failure.
	  FORTRAN: .true. upon success,	.false.	upon failure.

     NOTES
	  Type-specific	data arrays are	not yet	available in C,	so
	  employ pointers instead of indices by	using MA_push_stack()
	  and MA_get_pointer() instead of MA_push_get().

     SEE ALSO
	  MA(3), MA_chop_stack(3), MA_get_index(3), MA_get_pointer(3),
	  MA_inquire_avail(3), MA_inquire_stack(3), MA_pop_stack(3),
	  MA_push_stack(3)

     AUTHOR
	  Gregory S. Thomas, Pacific Northwest Laboratory