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