1 /* 2 char id_malloc[] = "@(#)malloc_.c 1.1"; 3 * 4 * allows f77 programs to dynamicly allocate space 5 * three routines: 6 * call malloc(need, addr) 7 * integer need, addr 8 * 9 * call free(addr) 10 * integer addr 11 * 12 * call falloc( nelem, elsize, clean, basevec, addr, offset ) 13 * integer nelem, elsize, clean, addr, offset 14 * dimension basevec(1) 15 * 16 * malloc() & falloc() alloc space and put address in 'addr', 0 if can't 17 * do it. free() frees a block. malloc() gets a block of at least 18 * 'need' bytes; falloc() gets at least nelem*elsize bytes, zeros 19 * the block if clean=1, and returns an offset so that the block 20 * can be referenced as basevec(offset+1)...basevec(offset+nelem) 21 * in the calling program. falloc() gets an extra element so that 22 * all the elements will be in the block even if address arithmetic 23 * involves truncation. 24 */ 25 26 char *calloc(), *malloc(); 27 28 malloc_( need, addr ) 29 int *need; char **addr; 30 { 31 *addr = malloc( *need ); 32 } 33 34 free_( addr ) 35 char **addr; 36 { 37 free( *addr ); 38 } 39 40 falloc_( nelem, elsize, clean, basevec, addr, offset ) 41 int *nelem, *elsize, *clean, *offset; 42 char **addr, *basevec; 43 { 44 if( *clean == 1 ) 45 *addr = calloc( *nelem + 1, *elsize ); 46 else 47 *addr = malloc( (*nelem + 1) * *elsize ); 48 49 if( *addr != 0 ) 50 *offset = ((*addr - basevec) / *elsize) + 1; 51 else 52 *offset = 0; 53 54 } 55