blob: 4c62ce62f17f8f854ed9a6db72b70680599cad15 (
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
40
41
42
43
44
45
46
47
48
49
50
|
include defs
# dsget --- get pointer to block of at least w available words
pointer function dsget (w)
integer w
DS_DECL(Mem, 1)
pointer p, q, l
integer n, k, junk
integer getlin
character c (10)
n = w + DS_OHEAD
q = DS_AVAIL
repeat {
p = Mem (q + DS_LINK)
if (p == LAMBDA) {
call remark ("in dsget: out of storage space.")
call remark ("type 'c' or 'i' for char or integer dump.")
junk = getlin (c, STDIN)
if (c (1) == LETC | c (1) == BIGC)
call dsdump (LETTER)
else if (c (1) == LETI | c (1) == BIGI)
call dsdump (DIGIT)
call error ("program terminated.")
}
if (Mem (p + DS_SIZE) >= n)
break
q = p
}
k = Mem (p + DS_SIZE) - n
if (k >= DS_CLOSE) {
Mem (p + DS_SIZE) = k
l = p + k
Mem (l + DS_SIZE) = n
}
else {
Mem (q + DS_LINK) = Mem (p + DS_LINK)
l = p
}
return (l + DS_OHEAD)
end
|