[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]


There is a flag HPRINTALLFLG: if on, HPRINT checks for EQ strings
and large numbers (as well as lists, arrays, etc). 

initial value NIL (i.e. don't put strings in hash table).


initialization function HPINITRDTBL[chars] init's the read table.
chars is the list
(forwardchar forwardcdrchar bakchar fillchar finalchar).
  ^ used before an item which will have a back reference
	     ^ used before an item, the tail of the list starting
bakchar is used to denote both a back reference, and a hash array,
(when followed by H), a regular array (when followed by A[), a
datatype (when followed by [).

fillchar is used to pad around back reference numbers (since
it just leaves spaces a priori and goes back at the end to
remark the places).

finalchar is used to terminate the backref numbers (as well as
after arrays, datatypes, etc).

initially, these are set up:
forwardchar = ^ (up arrow)
forwrdcdrchar = ` (accent grave)
bakchar = { (left brace)
fillchar = (ASCII 0)  {usually non-printing)
finalchar = } (right brace)

This means that circular lists print in a similar format
to CIRCLPRINT's output.
Arrays print as {A[n1 n2 e1 e2 e3 ...]}    (the ei's are the elements)
Hash arrays print {H[n1 e1 e2 e3 ...]}
User datatypes as {[name e1 e2 e3 ...]}  except that the first
time a datatype is printed, the name is followed by NWORDS and 

forwardchar, forwrdcdrchar, and bakchar are macros; 
fillchar and finalchar are just seprs (but there are redundancy
checks that (EQ (READC ..) finalchar) in various places).

READVARS, if the last arg is a list, will initialize the readtable
to those codes. HORRIBLEVARS prettydefmacro will put out the
codes in the READVARS expression if they are different from