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 ++++++++++