include "inc:util.imp"
include "inc:dict.imp"
include "inc:fs.imp"
include "inc:fsutil.imp"
begin ; ! Show System dictionaries etc
integer bool=16_40000000
string (255)p, outfile="",object="**"
record (dictf)map ofildict
result == fildict
end
record (dictf)map oextdict
result == extdict
end
record (dictf)map xxx(integer parm)
integer p
p = integer(16_3f9c)+parm
result == record(integer(p))
end
record (dictf)map fildict
result == xxx(740)
end
record (dictf)map extdict
result == xxx(736)
end
predicate in(integer x)
predicate in(record (dictf)name d)
cycle
trueif d_beg<x<d_pos
falseif d_alt=0
d == record(d_alt)
repeat
end
trueif in(sysdict)
trueif in(extdict)
trueif in(fildict)
trueif in(comdict)
trueif in(oextdict)
trueif in(ofildict)
false
end
routine show(string (31)n,record (dictf)name d,integer magic)
string (255)s
integer tag,w1,w2,phase
cycle
spaces(31-length(n)); printstring(n)
w1 = (d_pos-d_beg)>>2
w2 = (d_lim-d_beg)>>2
write(w1,10); write(w2,8)
if w2=0 then printstring(" 100") c
else write((w1*100)//w2,8)
printsymbol('%'); newline
tag = d_beg+8
while tag<d_pos cycle
tag = tag+4 until byteinteger(tag)=0
tag = tag+4; transname(tag,s)
w1 = integer(tag); w2 = integer(tag+4)
if matches(s, object) start
spaces(31-length(s))
printstring(s." = ")
phex(w1); space; phex(w2)
if in(w1) start
space; transname(w1,s); printstring(s)
finishelsestart
w1 = w2-w1; space and phex(w1) if w1>0
finish
newline
finish
tag = tag+magic
repeat
n = "...and..."
returnif d_alt=0
d == record(d_alt)
repeat
end
predicate selected
integer old
old = bool
bool = old<<1
trueif old<0
false
end
p = cliparam
define param("Object",object,0)
define boolean params("System,External,File,Command,OExternal,OFile,Memory",bool,0)
define param("Output",outfile,pam newgroup)
process parameters(p)
open output(1, outfile) and selectoutput(1) if outfile # ""
show("System dictionary",sysdict,8) if selected
show("External dictionary",extdict,4) if selected
show("File dictionary",fildict,4) if selected
show("Command symbol dictionary",comdict,8) if selected
show("Old External dictionary",oextdict,8) if selected
show("Old File dictionary",ofildict,8) if selected
if selected start
printstring("Main store limits "); phex(membot); space; phex(memtop)
write((memtop-membot)>>10,1); printsymbol('k'); newline
printstring("Free store limits "); phex(freebot); space; phex(freetop)
write((freetop-freebot)>>10,1); printsymbol('k'); newline
finish
endofprogram