xref: /original-bsd/usr.bin/f77/libU77/malloc_.c (revision dd61ec61)
1 /*-
2  * Copyright (c) 1980 The Regents of the University of California.
3  * All rights reserved.
4  *
5  * %sccs.include.proprietary.c%
6  */
7 
8 #ifndef lint
9 static char sccsid[] = "@(#)malloc_.c	5.2 (Berkeley) 04/12/91";
10 #endif /* not lint */
11 
12 /*
13  *	allows f77 programs to dynamicly allocate space
14  *	three routines:
15  *		call malloc(need, addr)
16  *		integer need, addr
17  *
18  *		call free(addr)
19  *		integer addr
20  *
21  *		call falloc( nelem, elsize, clean, basevec, addr, offset )
22  *		integer nelem, elsize, clean, addr, offset
23  *		dimension basevec(1)
24  *
25  *	malloc() & falloc() alloc space and put address in 'addr', 0 if can't
26  *	do it.  free() frees a block.  malloc() gets a block of at least
27  *	'need' bytes; falloc() gets at least nelem*elsize bytes, zeros
28  *	the block if clean=1, and returns an offset so that the block
29  *	can be referenced as basevec(offset+1)...basevec(offset+nelem)
30  *	in the calling program.  falloc() gets an extra element so that
31  *	all the elements will be in the block even if address arithmetic
32  *	involves truncation.
33  */
34 
35 char *calloc(), *malloc();
36 
malloc_(need,addr)37 malloc_( need, addr )
38 int *need; char **addr;
39 {
40 	*addr = malloc( *need );
41 }
42 
free_(addr)43 free_( addr )
44 char **addr;
45 {
46 	free( *addr );
47 }
48 
falloc_(nelem,elsize,clean,basevec,addr,offset)49 falloc_( nelem, elsize, clean, basevec, addr, offset )
50 int *nelem, *elsize, *clean, *offset;
51 char **addr, *basevec;
52 {
53 	if( *clean == 1 )
54 		*addr = calloc( *nelem + 1, *elsize );
55 	else
56 		*addr = malloc( (*nelem + 1) * *elsize );
57 
58 	if( *addr != 0 )
59 		*offset = ((*addr - basevec) / *elsize) + 1;
60 	else
61 		*offset = 0;
62 
63 }
64