/ f24 -- allocate storage for non-common variables
/ called after common and equivalence have been done
clr r3 / loop over symbol table
add $8.,r3 / next variable
jsr r5,perror / flush errors
jsr r5,declimpl / just in case
tst eqvtab(r3) / test for already allocated
cmp r0,$10 / test class=simple
bne 1b / no, not a variable
bit $200,symtab(r3) / test parameter
tst eqvtab+2(r3) / test for equivalence
bit $100,symtab(r3) / test common
bne 1b / yes, nothing to do
mov nxtaloc,symtab+6(r3) / offset
jsr r5,size / get byte count
inc eqvtab(r3) / mark allocated
clr r4 / common variable of group
mov $77777,r1 / infinity to smallest offset
mov eqvtab+4(r3),r1 / replace smallest offset
bit $100,symtab(r3) / test common
mov eqvtab+2(r3),r3 / next group member
bne 2f / *there was a common in group
/ equivalence group w/o common
sub nxtaloc,r1 / get -(group offset)
inc eqvtab(r3) / mark allocated
sub r1,r2 / compute offset
mov r2,symtab+6(r3) / enter offset
add r0,r2 / highest loc of variable
mov r2,r4 / extends storage
mov eqvtab+2(r3),r3 / next of group
mov r4,nxtaloc / account for space
2: / equivalence group w/ common
mov symtab+6(r4),r1 / actual common offset
sub eqvtab+4(r4),r1 / virtual common offset
inc eqvtab(r3) / mark allocated
bit $100,symtab(r3) / is variable already in common
cmp symtab+4(r4),symtab+4(r3)
jsr r5,error; 25. / different blocks equiv.
jsr r5,error; 27. / same variable, different offsets
bis $100,symtab(r3) / mark common now
mov symtab+4(r4),symtab+4(r3)/ get right common block
jsr r5,error; 26. / block extended leftward
mov r0,symtab+6(r3) / get proper offset
jsr r5,size / see if size is extended
mov symtab+4(r3),r2 / common block
mov r0,symtab+6(r2) / extend size