(DF EDIT (F) (SETQ ** (FVAL (CAR F)) **1 ** EXITFLG () BACKLST ()) (SETQ PAR () PNUM 0 COMT () CPOS 68) (STATUS PRINT 0) (LMARGIN 0) (PEL) (UNTIL EXITFLG (GETCMD) (SELECTQ (ASCII CHR) ("e" (SETQ EXITFLG T) (IFN (ZEROP ARG) (EVAL ['PRET (CAR F) T]))) (" " (SELECT) (PEL)) ("b" (BACKUP) (PEL)) ("i" (PRIN1 "INSERT") (INSRT (READ)) (PEL)) ("j" (PRIN1 "INSERT") (JNSRT (READ)) (PEL)) ("u" (INSRT (COPY *0)) (PEL)) ("v" (JNSRT (COPY *0)) (PEL)) ("t" (IF ARG0T (PEL1 ARG0 ARG) (PEL1 ARG (LENGTH **)))) ("p" (SET (IMP*) *0)) ("g" (SETQ *0 (EVAL (IMP*)))) ("r" (PEL2 (EVAL (IMP*)))) ("s" (SV*0)) ("d" (SV*0) (DELET) (PEL)) ("x" (PRIN1 "OLD") (SETQ OLDS (READ)) (PRIN1 "NEW") (RPLACB ** (SUBST (READ) OLDS **)) (PEL)) ((TYO 7))))) (DE PRIN1 (A) (PRIN A) (TERPRI -1)) (DE IMP* () (IMPLODE (CONS "*" (EXPLODE ARG)))) (DE SELECT () (IF (OR (NOT (ARGOK)) (ATOM (ARG **))) (TYO 7) (NEWL BACKLST ARG) (SETQ ** (ARG **)))) (DE BACKUP () (IF (ZEROP ARG) (SETQ BACKLST) (UNTIL (LT (DECR ARG)) (NEXTL BACKLST))) (SETQ ** **1 BK (REVERSE BACKLST)) (WHILE BK (SETQ ** ((NEXTL BK) **)))) (DE SV*0 () (IFN (ARGOK) (TYO 7) (IFN ARG0T (SETQ *0 (ARG **)) (SETQ *0 (COPY (NTH ARG0 **))) (RPLACD (NTH (ADD1 (- ARG ARG0)) *0))))) (DE DELET () (IF (ARGOK) (IF ARG0T (IF (EQ ARG0 1) (RPLACB ** (NTH (ADD1 ARG) **)) (RPLACD (NTH (SUB1 ARG0) **) (NTH (ADD1 ARG) **))) (IF (EQ ARG 1) (RPLACB ** (CDR **)) (RPLACD (NTH (SUB1 ARG) **) (NTH (ADD1 ARG) **)))))) (DE ARGOK () (AND (GT ARG) (LE ARG (LENGTH **)) (OR (NOT ARG0T) (AND (GT ARG0) (LE ARG0 ARG))))) (DE GETCMD () (SETQ ARG0T) (PRIN "CMD: ") (TERPRI -1) (ARGCHR) (IFN (EQ (ASCII CHR) ",") () (SETQ ARG0T T ARG0 ARG) (ARGCHR)) (IF (AND (GE CHR 65) (LE CHR 90)) (SETQ CHR (+ CHR 32))) (TERPRI)) (DE ARGCHR () (SETQ ARG 1) (SETQ CHR (TYI)) (IFN (ISDIGIT CHR) () (SETQ ARG 0) (WHILE (ISDIGIT CHR) (SETQ ARG (+ CHR ("*" ARG 10) -48) CHR (TYI))))) (DE ISDIGIT (CHR) (AND (GE CHR 48) (LE CHR 57))) (DE PEL () (PEL1 1 (LENGTH **))) (DE PEL1 (EL1 EL2) (SETQ EL (SUB1 EL1)) (WHILE (AND (LE (INCR EL) EL2) (NEQ (TYS) 32)) (PRIN EL " -->") (OUTPOS 8) (LMARGIN 8) (PEL2 (EL **)))) (DE PEL2 (X) (STATUS PRINT 7) (PT X 0 T) (STATUS PRINT 0) (LMARGIN 0) (TERPRI)) (DE INSRT (INSR) (COND ((EQ ARG 1) (RPLACB ** (MCONS INSR (CAR **) (CDR **)))) ((ARGOK) (RPLACD (NTH (SUB1 ARG) **) (CONS INSR (NTH ARG **)))) (T (NCONC1 ** INSR)))) (DE JNSRT (INSR) (IF (ATOM INSR) (SETQ INSR [INSR])) (COND ((EQ ARG 1) (SETQ ** (NCONC INSR **))) ((ARGOK) (RPLACD (NTH (SUB1 ARG) **) (NCONC INSR (NTH ARG **)))) (T (NCONC ** INSR)))) (DE SVEDIT () (SAVE EDIT PRIN1 IMP* SELECT BACKUP SV*0 DELET ARGOK GETCMD ARGCHR ISDIGIT PEL PEL1 PEL2 INSRT JNSRT SVEDIT))