aboutsummaryrefslogtreecommitdiff
path: root/sys/plio/plalloc.x
blob: 1fecf486f0bcd1ed2f5675568fdf2ed01f5f3352 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.

include	<plio.h>

# PL_ALLOC -- Allocate space in the line list buffer, returning the llbuf
# offset of the allocated area as the function value.  If overflow occurs
# the buffer is resized.

int procedure pl_alloc (pl, nwords)

pointer	pl			#I mask descriptor
int	nwords			#I number of words of storage to allocate

int	newbuf
int	len, o_len, inc, op
errchk	realloc

begin
	len = PL_LLLEN(pl)		# current buffer length
	inc = PL_LLINC(pl)		# length increment
	op  = PL_LLOP(pl)		# next available location

	newbuf = op
	op = newbuf + nwords

	for (o_len = len;  op >= len;  ) {
	    inc = min (PL_MAXINC, inc * 2)
	    len = len + inc
	}

	if (len != o_len)
	    call realloc (PL_LLBP(pl), len, TY_SHORT)

	PL_LLLEN(pl) = len
	PL_LLINC(pl) = inc
	PL_LLOP(pl)  = op

	return (newbuf)
end