14 editing-list '() / edit-insert-at 1 / accept-child (method (inchild) (search inchild (#0:list-connected))) / edit-parse (method (inline) (if (write-ok? player) (if (not (and (or (= 1 (search ":" inline)) (= 1 (search "\"" inline)) (= 1 (search "." inline)) (= 1 (search ";" inline))) (foreach (c (matchcmd inline)) (if ((car c) (index 2 c)) (return 1))))) (begin (set editing-list (insert inline editing-list edit-insert-at)) (set edit-insert-at (+ edit-insert-at 1)))))) / edit-insert-cmd (method (inline) (if (write-ok? caller) (if (index 4 inline) (tell ">> Syntax: .insert <line-number>\n") (var linenum (if (or (< (set linenum (tonum (index 3 inline))) 1) (> linenum (+ 1 (length editing-list)))) (tell (+ ">> line " (tostr inline) " is out of range\n")) (tell-line (+ ">> Inserting at line " (tostr (set edit-insert-at linenum))))))))) / edit-list-cmd (method (inline) (if (read-ok? caller) (if (index 5 inline) (tell-line ">> Syntax: .list [<line-number>] [<line-number>]") (var start-at (var end-at (if (index 3 inline) (set start-at (tonum (index 3 inline))) (set start-at 1)) (if (index 4 inline) (set end-at (tonum (index 4 inline))) (if (index 3 inline) (set end-at start-at) (set end-at (length editing-list)))) (list-range start-at end-at)))))) / list-range (method (starting ending) (handle E_RANGE (method (n s) (tell ">> Line(s) out of range\n")) (begin (tell ">> Listing...\n") (foreach (line (range starting ending editing-list)) (tell (+ line "\n"))) (tell ">> Listing completed\n")))) / edit-delete-cmd (method (inline) (if (write-ok? caller) (if (index 5 inline) (tell ">> Syntax: .delete [<line-number>] [<line-number>]\n") (var start-at (var end-at (if (index 3 inline) (set start-at (tonum (index 3 inline))) (set start-at 1)) (if (index 4 inline) (set end-at (tonum (index 4 inline))) (if (index 3 inline) (set end-at start-at) (set end-at (length editing-list)))) (delete-range start-at end-at)))))) / delete-range (method (start-at end-at) (handle E_RANGE (method (n s) (tell ">> Line(s) out of range\n")) (if (or (< start-at 1) (> end-at (length editing-list)) (> start-at end-at)) (tell ">> Invalid lines to delete\n") (begin (tell (+ ">> Deleting lines " (tostr start-at) " through " (tostr end-at) "\n")) (set editing-list (+ (before start-at editing-list) (after end-at editing-list))) (if (> edit-insert-at end-at) (set edit-insert-at (- edit-insert-at (- (+ end-at 1) start-at))) (if (> edit-insert-at (- start-at 1)) (set edit-insert-at start-at) start-at)))))) / edit-quit-cmd (method (ignored) (begin (set (eval 'edit-save-prop) (implode "\n" editing-list)) (edit-after-call edit-save-prop) (leave-edit))) / edit-exit-cmd (method (ignored) (begin (tell ">> Leaving editor without saving\n") (leave-edit))) / edit-help-cmd (method (ignored) (help-command '("help" "editor"))) / handler (method (errnum errstring) (tell-line (+ ">> editor error: " errstring ">> still in editor: .x to exit without compiling"))) / / '(".d" (or "elete" "") (or NUMBER "") (or NUMBER "") REST) edit-delete-cmd '(".i" (or "nsert" "") (or NUMBER "") (or "" REST)) edit-insert-cmd '(".l" (or "ist" "") (or NUMBER "") (or NUMBER "") REST) edit-list-cmd '(".q" (or "uit" "")) edit-quit-cmd '(".x" (or "it" "")) edit-exit-cmd '(".exit") edit-exit-cmd '(".h" (or "elp" "")) edit-help-cmd '(".") edit-help-cmd /+++++++++ end of object #16 ... no lines after this ++++++++++