/* NAMEAD.PLP, SEGSRC, KJC, 12/19/79 /* Routine to add a type 1 symbol to the symbol table and update CHAIN /* Copyright (c) 1981, Prime Computer, Inc., Natick, MA 01760 /***********************************************************************/ namead: procedure(name_block, pointer); declare 1 name_block, 2 flags bit(16), 2 segment fixed binary(15), 2 address fixed binary(15), 2 name character(8), 2 length fixed binary(15), 2 forward fixed binary(15); declare 1 pointer, 2 ptr$bak fixed binary(15), 2 ptr$cur fixed binary(15), 2 ptr$for fixed binary(15), 2 ptr$typ fixed binary(15), 2 ptr$ptr pointer, 2 ptr$sub fixed binary(31); declare hash fixed binary(15); declare j fixed binary(15); declare map pointer external; declare ptri entry(char(1)) returns(bin); declare addrel entry(ptr, bin(31)) returns(ptr); declare symadd entry(1, 2 bit(16), 2 bin, 2 bin, 2 char(8), 2 bin, 2 bin, 1, 2 bin, 2 bin, 2 bin, 2 bin, 2 ptr, 2 bin(31)); $Insert lodcmp.ins.plp $Insert symbol_table.ins.plp $Insert chain.ins.plp call symadd(name_block, pointer); hash = ptri((name)); if hash ^= 16 then do; if hash = 2 then hash = 5; else hash = hash + 1; do j = hash to 16; if chain.chain(j) ^= 0 then if name <= addrel(addr(map), -symsiz*chain.chain(j)) -> na$nam then return; else; else; chain.chain(j) = ptr$cur; end; end; else; return; end /* namead */;