begin ; !INSTALL externals
!modded JHB 21/1/86 to avoid messy event 3 if file is inaccessible
include "inc:dict.imp"
include "inc:util.imp"
externalroutinespec install module(string (255)module); !FE02
routine oinstall(string (255)fname); !FE00
integer i,j,k,kk,hold,fref,idref
string (31)id
{}printstring("File dict full") and -> end if fildict_lim-fildict_pos<=32
fref = defname(fname,fildict,8)
hold = fref
fref = fref&16_7fffffff
printstring("File dict full") and ->end if fref = 0
cycle ; !For each entry
id = ""
read symbol(j); !string length
for i = 1,1,11 cycle
read symbol(k); id = id.tostring(k) if i<=j
repeat
{} printstring("External dict full") and ->end if extdict_lim-extdict_pos<=32
idref = defname(id,extdict,8)
printstring("External dict full") and ->end if idref = 0
if idref < 0 start
idref = idref&16_7fffffff
if integer(idref) # fref start
printline("Replacing entry for ".id)
else if hold>=0
printline("Duplicate entry for ".id)
finish
finish
skip symbol; skip symbol
skip symbol; skip symbol; !type
skip symbol; skip symbol
skip symbol; skip symbol; !displacement
integer(idref) = fref
repeat until next symbol > 11; !FE
return
end: printstring(" - cannot install ".fname); newline
end
routine install(string (255)module)
string (255)file
integer i,j=0
bytename k
on 3 start
printline("Install fails: ".file." not found")
return
finish
file = module
k == charno(module,1)
for i = 1,1,length(module) cycle
k = k&95 if 'a'<=k<='z'
j = j<<8+k
k == k[1]
repeat
file = file.".MOB" unless j='.MOB'
openinput(1,file); selectinput(1)
readsymbol(i); ->no unless i=16_fe
readsymbol(i)
if i=2 start
closeinput
install module(module)
elseif i=0
oinstall(file)
closeinput
else
no: closeinput
printline("Install fails: ".file." is not an object file")
finish
end
string (255)parm,module
parm = cliparam.","
install(module) while parm -> module.(",").parm
endofprogram