{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}