PUBLIC phys_clicks alloc_mem(clicks) phys_clicks clicks; { register struct hole *hp, *prev_ptr, *best_hole, *best_prev_ptr; unsigned long best_length; phys_clicks old_base do { best_length = 0xFFFFFFFF; prev_ptr = NIL_HOLE; best_prev_ptr = NIL_HOLE; hp = hole_head; best_hole = hole_head; while (hp != NIL_HOLE && hp->h_base < swap_base) { if ((hp->h_len >= clicks) && (hp->h_len <= best_length)) { best_length = hp->h_len; best_hole = hp; best_prev_ptr = prev_ptr; } prev_ptr = hp; hp = hp->h_next; } if(best_length != 0xFFFFFFFF) { old_base = best_hole->h_base; best_hole->h_base += clicks; if(best_hole->h_base > high_watermark) { high_watermark = best_hole->h_base; } if(best_hole->h_len == 0) del_slot(best_prev_ptr, best_hole); return(old_base); } } while( swap_out() ); return(NO_MEM); }