date and time created 85/03/28 11:04:38 by ralph
[unix-history] / usr / src / usr.bin / f77 / libU77 / malloc_.c
/*
char id_malloc[] = "@(#)malloc_.c 1.1";
*
* allows f77 programs to dynamicly allocate space
* three routines:
* call malloc(need, addr)
* integer need, addr
*
* call free(addr)
* integer addr
*
* call falloc( nelem, elsize, clean, basevec, addr, offset )
* integer nelem, elsize, clean, addr, offset
* dimension basevec(1)
*
* malloc() & falloc() alloc space and put address in 'addr', 0 if can't
* do it. free() frees a block. malloc() gets a block of at least
* 'need' bytes; falloc() gets at least nelem*elsize bytes, zeros
* the block if clean=1, and returns an offset so that the block
* can be referenced as basevec(offset+1)...basevec(offset+nelem)
* in the calling program. falloc() gets an extra element so that
* all the elements will be in the block even if address arithmetic
* involves truncation.
*/
char *calloc(), *malloc();
malloc_( need, addr )
int *need; char **addr;
{
*addr = malloc( *need );
}
free_( addr )
char **addr;
{
free( *addr );
}
falloc_( nelem, elsize, clean, basevec, addr, offset )
int *nelem, *elsize, *clean, *offset;
char **addr, *basevec;
{
if( *clean == 1 )
*addr = calloc( *nelem + 1, *elsize );
else
*addr = malloc( (*nelem + 1) * *elsize );
if( *addr != 0 )
*offset = ((*addr - basevec) / *elsize) + 1;
else
*offset = 0;
}