{begin comment Section on TESTMODE deleted, per instructions from lmm}

, or go into {index TESTMODE}{fn TESTMODE} as described next.


{Begin SubSec TESTMODE}
{Title TESTMODE}
{Text

Because of efficiency considerations, the user may not want certain functions undoable after his program becomes operational.
However, while debugging he may find it desirable to protect himself against a program running wild, by making primitive destructive operations undoable.
The function {index TESTMODE}{fn TESTMODE} provides this capability by temporarily making everything undoable.



{FnDef {FnName TESTMODE} {FnArgs FLG}
{Text
{lisp (TESTMODE T)} redefines all primitive destructive functions{foot 
i.e., the "slash" functions; see footnote on {PageRef L!46}.
}{comment endfootnote}
with their corresponding undoable versions and sets {index TESTMODEFLG  PAV}{var TESTMODEFLG} to {lisp T}.
{lisp (TESTMODE)} restores the original definitions, and sets {var TESTMODEFLG} to {lisp NIL}.{foot 
{index TESTMODE}{fn TESTMODE} will have no effect on compiled {fn MAPCONC}'s, since they compile open with {fn FRPLACD}'s.
}{comment endfootnote}
}}


Note that {fn SETQ}'s are {it not} undoable, even in {fn TESTMODE}.
To make the corresponding operation undoable in {fn TESTMODE}, {fn SET} or {fn RPLACA} should be used.

}{End SubSec TESTMODE}

{End Comment Section on TESTMODE deleted, per instructions from lmm}