4 subroutine reclam (index, nwords)
16 implicit double precision (a-h,o-z)
24 if (lfree(i,1) .gt. index) go to 30
28 902
format(
' no insertion pointer into freelist. error stop')
34 if (lfree(iprev,1)+lfree(iprev,2) .lt. index) go to 40
35 lfree(iprev,2) = lfree(iprev,2) + nwords
40 40 nexti = index + nwords
41 if (lfree(iplace,1).ne. nexti) go to 70
42 lfree(iplace,1) = index
43 lfree(iplace,2) = lfree(iplace,2) + nwords
48 50 nexti = index + nwords
49 if (lfree(iplace,1) .ne. nexti) go to 99
53 lfree(iprev,2) = lfree(iprev,2)+lfree(iplace,2)
56 lfree(i-1,1) = lfree(i,1)
57 60 lfree(i-1,2) = lfree(i,2)
63 70
if (lenf .eq. lfdim) go to 900
64 do 80 ii = iplace, lenf
65 i = lenf + 1 - ii + iplace
66 lfree(i,1) = lfree(i-1,1)
67 80 lfree(i,2) = lfree(i-1,2)
69 lfree(iplace,1) = index
70 lfree(iplace,2) = nwords
73 900
write(outunit,901) lfdim
75 901
format(
' free list full with ',i5,
' items')
78 99 lentot = lentot - nwords
79 if (sprint)
write(outunit,100) nwords, index, lentot
80 100
format(
' reclaiming ',i8,
' words at loc. ',i8,
' lentot ',i10)
subroutine reclam(index, nwords)