(FILECREATED " 8-Feb-86 16:06:34" {DSK}<LISPFILES2>IMPROVEDDCOMS>NUKE.;1 4449 previous date: " 4-Feb-86 16:50:22" {GOEDEL}<usr2/pds/updating/lisp>NUKE) (* Copyright (c) 1986 by Quintus Computer Systems, Inc. All rights reserved.) (PRETTYCOMPRINT NUKECOMS) (RPAQQ NUKECOMS ((SCCS) (* Code to smash atoms. QP.SMASH.ATOMS will smash all the function and variable names on all the lisp files except those on the list QP.ATOMS.NOT.TO.SMASH. If given a file name as argument, will write into the file enough information that all atom names can be retrieved by LOADing that file.) (VARS QP.ATOMS.NOT.TO.SMASH) (GLOBALVARS QP.ATOMS.NOT.TO.SMASH \AtomSmashSysout) ( FNS QP.NUKE QP.NUKE.IF.ATOM QP.SMASH.ATOMS QP.VERIFY.ATOM.SMASH.SYSOUT))) (* %%G% %%W% ) (* Code to smash atoms. QP.SMASH.ATOMS will smash all the function and variable names on all the lisp files except those on the list QP.ATOMS.NOT.TO.SMASH. If given a file name as argument, will write into the file enough information that all atom names can be retrieved by LOADing that file.) (RPAQQ QP.ATOMS.NOT.TO.SMASH (APROPOS ARITH AROUNDEXITFNS BIND CALL CELL CODE COUNT DEFVAR ENV ERROR FAIL FIRST FLAGS FORMAT GC GLOBALVARS INDEX INTERRUPTS JUMP LAST LINK LISP LIST LOAD MASK META NAME NEXT NEXTCHAR OPCODES PROCS PROLOG PROLOGHELPDIRECTORY PROLOGLIBRARYDIRECTORIES PROLOGROOTDIRECTORY QB QL QP.PROLOG.TEXEC QP.VERIFY.ATOM.SMASH.SYSOUT SELECT TABLE TAGS TEDITCARET VALUES VALUES \AtomSmashSysout \DOGC1 \POPDISP.UFN \UnSmashAtom add apply arg before call compare either fail fix float functor multiply or unless until when while zero)) (DECLARE: DOEVAL@COMPILE DONTCOPY (GLOBALVARS QP.ATOMS.NOT.TO.SMASH \AtomSmashSysout) ) (DEFINEQ (QP.NUKE (LAMBDA (ATM FL) (* pds: "24-Nov-85 18:19") (if (AND (NOT (FMEMB ATM QP.ATOMS.NOT.TO.SMASH)) (for I from 1 to (NCHARS ATM) thereis (NEQ (NTHCHARCODE ATM I) (CHARCODE X)))) then (if FL then (LET (( ATOMSALVATION (\SmashAtom ATM))) (PRINTOUT FL "(\UnSmashAtom " (CAR ATOMSALVATION) , "%"" (CADR ATOMSALVATION) "%")" T)) else (\SmashAtom ATM))))) (QP.NUKE.IF.ATOM (LAMBDA (POSSATOM) (DECLARE (SPECVARS FL)) (* pds: "24-Nov-85 17:10") (if (LITATOM (CAR POSSATOM)) then (QP.NUKE (CAR POSSATOM) FL)))) (QP.SMASH.ATOMS (LAMBDA (FILE.TO.SAVE.ATOMNAMES.IN FILES.TO.NUKE EXTRA.ATOMS.TO.NUKE) (* pds: "28-Nov-85 22:28") (* * smash all the Prolog atoms in the system. If FILE.TO.SAVE.ATOMNAMES.IN is provided, it becomes a file with the antidote to the smashing. It can then be loaded back into the image to reinstate the smashed atoms. Woe to the poor sod who loads such an antidote file into a SYSOUT other than the one that created it. The first expr written into the file is designed to prevent that.) (LET ((FL (if FILE.TO.SAVE.ATOMNAMES.IN then (OPENFILE FILE.TO.SAVE.ATOMNAMES.IN (QUOTE OUTPUT) (QUOTE NEW))))) (if FL then (PRINTOUT FL (LIST (FUNCTION QP.VERIFY.ATOM.SMASH.SYSOUT) (KWOTE (SETQ \AtomSmashSysout (LIST (IDATE) \MY.NSHOSTNUMBER)))) T)) (for F in FILES.TO.NUKE do (for FN in (FILECOMSLST F (QUOTE FNS)) do (QP.NUKE FN FL)) (for MAC in (FILECOMSLST F (QUOTE MACROS)) do (QP.NUKE MAC FL)) (for GVR in ( FILECOMSLST F (QUOTE GLOBALVARS)) do (QP.NUKE GVR FL)) (for REC in (FILECOMSLST F (QUOTE RECORDS)) do (QP.NUKE REC FL)) (for FLD in (FILECOMSLST F (QUOTE FIELDS)) do (QP.NUKE FLD FL)) (for CNST in ( FILECOMSLST F (QUOTE CONSTANTS)) do (QP.NUKE CNST FL)) (* * NB: the VARS on a file must be nuked LAST for each file, since the fileCOMS is a variable considered to be on the file, and once it's nuked, you can't get at anything else on the file.) (for VR in (FILECOMSLST F (QUOTE VARS)) do (QP.NUKE VR FL)) (QP.NUKE F FL)) (for A in EXTRA.ATOMS.TO.NUKE do (QP.NUKE A FL)) (* * I know this is ugly, but QP.NUKE.IF.ATOM needs to pass FL to QP.NUKE, and since it's called from within a MAPHASH, there is no clean way to get FL to it. Arrrrggggggg!) (DECLARE (SPECVARS FL)) (MAPHASH QP.INSTRUCTION.HARRAY ( FUNCTION QP.NUKE.IF.ATOM)) (MAPHASH QP.EXTENSION.HARRAY (FUNCTION QP.NUKE.IF.ATOM)) (if FL then ( PRINTOUT FL (QUOTE STOP) T) (CLOSEF FL))))) (QP.VERIFY.ATOM.SMASH.SYSOUT (LAMBDA (X) (* pds: "24-Nov-85 19:35") (if (NOT (EQUAL X \AtomSmashSysout)) then (ERROR "Can't use this UNSMASH file on this image." "If you procede you will fall into a pit and be killed.") ))) ) (PUTPROPS NUKE COPYRIGHT ("Quintus Computer Systems, Inc" 1986)) (DECLARE: DONTCOPY (FILEMAP (NIL (1729 4362 (QP.NUKE 1739 . 2097) (QP.NUKE.IF.ATOM 2099 . 2255) (QP.SMASH.ATOMS 2257 . 4130) (QP.VERIFY.ATOM.SMASH.SYSOUT 4132 . 4360))))) STOP