/* SETSEG.PLP, SEGSRC, KJC, 01/25/79 /* Routine to change segments for the SEG /* Copyright (c) 1981, Prime Computer, Inc., Natick, MA 01760 /********************************************************************/ /* */ /* Call : bit(1) = setseg(segno) where segno is bin(15) */ /* setseg = '0'B when segno is undefined */ /* setseg = '1'B when segno is defined */ /* */ /********************************************************************/ setseg: procedure(segno) returns(bit(1)); declare segno fixed binary(15); declare map pointer external; declare addrel entry(pointer, fixed binary(31)) returns(pointer); declare ss$err entry; declare initne entry(1, 2 bin, 2 bin, 2 bin, 2 bin, 2 ptr, 2 bin(31), bin, bin); declare next entry(1, 2 bin, 2 bin, 2 bin, 2 bin, 2 ptr, 2 bin(31)) returns(bin); declare tooct entry(bin); declare errpr$ entry(bin, bin, char(*), bin, char(*), bin); declare bits bit(16) based; declare 1 filler_bits based, 2 bit1 bit(1) unaligned, 2 bit2 bit(1) unaligned, 2 bit3 bit(1) unaligned, 2 bit4 bit(1) unaligned, 2 bit5 bit(1) unaligned, 2 bit6 bit(1) unaligned, 2 bit7 bit(1) unaligned, 2 bit8 bit(1) unaligned, 2 bit9 bit(1) unaligned, 2 bit10 bit(1) unaligned, 2 bit11 bit(1) unaligned, 2 bit12 bit(1) unaligned, 2 bit13 bit(1) unaligned, 2 bit14 bit(1) unaligned, 2 bit15 bit(1) unaligned, 2 bit16 bit(1) unaligned; declare errsev fixed bin static external; $Insert point4.ins.plp $Insert symbol_table.ins.plp $Insert loatmp.ins.plp $Insert itime.ins.plp $Insert lodcmp.ins.plp $Insert syscom>errd.ins.pl1 $Insert syscom>keys.ins.pl1 if p4$cur = 0 | p4$cur = -32768 then do; call initne(point4,segment$,0); if next(point4) = 0 then go to error; else; end; else do; p4$ptr->a$low = low1; p4$ptr->a$high = high1; if p4$ptr->a$segm > segno then do; call initne(point4,segment$,0); if next(point4) = 0 then go to error; else; end; else do; p4$for = p4$ptr->a$for; /* just in case it has changed */ if (addr(p4$ptr->a$flags)->a$split) & (p4$ptr->a$segm = segno) then if p4$for = -32768 then do; call initne(point4,segment$,0); if next(point4) = 0 then go to error; else; end; else if p4$ptr->a$segm ^= addrel(addr(map),-symsiz*p4$for)->a$segm then do; call initne(point4,segment$,0); if next(point4) = 0 then go to error; else; end; else; end; end; do while ('1'B); if p4$ptr->a$segm = segno then do; if (addr(p4$ptr->a$flags)->a$split) & (addr(p4$ptr->a$rang)->bits < addr(loadpt)->bits) then if next(point4) = 0 then go to error; else; else; segpnt = segno; low1 = p4$ptr->a$low; high1 = p4$ptr->a$high; return('1'B); end; else do; if next(point4) = 0 then go to error; else if p4$ptr->a$segm > segno then go to error; else; end; end; error: call tooct(segno); call errpr$(k$irtn,e$null,': UNDEFINED SEGMENT',19,'SETSEG',6); call ss$err; errsev =-1; return('0'B); end /* setseg */;