file: EDITREC

purpose: See/Edit random non-list structures.

to use: (EDITX OBJECT TYPE)  ; to edit
        (SHOWX OBJECT TYPE)  ; to just generate a listified representation

 EDITX and SHOWX let you examine and modify any structure known to the
record package, file package, or defined as a data type.  Each field
associated with the object is unpacked and cons'd into a list with its
field name.

    In SHOWX, the resulting list structure is returned and (presumably)
	printed by lispx.  This is especially pleasant when SYSPRETTYFLG 
	is set to T, and especially pleasant when PRINTOPT has been loaded
	and SYSPRETTYFLG is set to PRINTCAUTIOUSLY.

    In EDITX, the result of this unpacking operation is edited and any changes
 	made to the values are undoably incorporated into the original
        object if you exit normally.

    OBJECT may be any object, thought some objects may not be meaningfully
	expanded in the process.  

    TYPE is optional.  If type is unspecified, the DATATYPE of the object is
        used as a starting point, and "reasonable" record alternatives are
        suggested.  If all else fails, a BLOCKRECORD or ACCESSFNS with the
        same name as the TYPENAME of the object is used.  If otherwise 
	reasonable, EDITX will use the same arguments as last time you
	used it on either the same object or an object of the same type.

        If there seeem to be multiple reasonable alternatives, or if TYPE is
        specified as the atom "?", ASKUSER will be called to allow you to 
	select among the alternatives.

        The algorithm for selecting appropriate records includes looking for
        similarly cons'd list records, or for appropriate size and type 
	ARRAYBLOCK records.

	The default display for arrays and hash arrays includes an exploded 
	list structure for their contents.

EXAMPLES:

NIL
85←(CREATE FOO A ← 1 B ← 2 C ← 3 D ← 4)
(1 (2 3)
   4)
86←)
NIL
86←(SHOWX IT)
((1 (2 3)
    4)
 FOO ((D 4)
  (C 3)
  (B 2)
  (A 1)))
87←(CREATE BAR A ← 1 B ← 2 C ← 3 D ← 4)
(1 2 3 (4 NIL))

89←(SHOWX IT)
((1 2 3 (4 NIL))
 BAR ((E NIL)
  (D 4)
  (C 3)
  (B 2)
  (A 1)))

90←(CREATE MUMBLE A ← 1 B ← 2 C ← 3 D ← 4)
{ARRAYP}#003f6710

91←(SHOWX IT)
({ARRAYP}#003f6710 MUMBLE ((A 1)
                    (B 2)
                    (C 3)
                    (D 4)))
92←(SHOWX 'A)
which type in (VARS FIELDS ATOM) should I use ? FIELDS 
(PROGN (ARRAYBLOCK MUMBLE (A B C D))
       (RECORD BAR (A B C (D E)))
       (RECORD FOO (A (B C)
                      D)))

94←(SHOWX 'B)
which type in (FIELDS ATOM) should I use ? ATOM 
(B ATOM
   ((TOPVAL NOBIND)
    (PLIST NIL)
    (FUNDEF NIL)
    (PNAME "B")
    (applicator {VMSPACE}#0000b89b)
    (nextatom LOC)))