
(provide (quote debug))

(setq debug-buffer (make-buffer "*debugger*") debug-keymap (make-keylist))

(set-buffer-special debug-buffer t)

(add-buffer debug-buffer)

(bind-keys debug-keymap "z" (quote debug-step-into) "s" (quote (debug-set-result nil)) "t" (quote debug-step-over) "r" (quote debug-full-speed) "b" (quote (debug-backtrace 2)) "esc" (quote (debug-set-result (eval (read (prompt "Eval: "))))) "c" (quote (debug-continue nil)) "d" (quote (debug-continue t)))

(with-buffer debug-buffer (setq ctrl-c-keymap debug-keymap) (split-line) (insert "::Lisp Debugger::\n\nctrl-c z   : step into form\nctrl-c s   : skip form\nctrl-c t   : step over form\nctrl-c r   : run full speed\nctrl-c b   : print backtrace\nctrl-c esc : set value of form\nctrl-c c   : continue after error\nctrl-c d   : break after error\n\n"))

(defun debug-entry (debug-obj debug-depth) (lisp-code "±\t\tH†‡ˆY\t‰HŠ‹Œ\t\n\tHŽsG±H" [debug-buffer goto line-start file-end format "%s%S\n" make-string 2 debug-depth debug-obj next-line 1 indent-pos prev-line (lisp-code "" [recursive-edit] 1) (quote debug-entry)] 7))

(defun debug-exit (debug-val debug-depth) (lisp-code "±\t\tH†‡ˆY\t‰G±H" [debug-buffer goto line-start file-end format "%s=> %S\n" make-string 2 debug-depth debug-val] 7))

(defun debug-error-entry (error-list) (lisp-code "±\t\tH†L‡zÿ€˜†L†MHˆ‰sG±H" [debug-buffer goto line-start file-end format "*** Error: %s: %S\n" error-list error-message (lisp-code "HI" [recursive-edit] 1) (quote debug-error-entry)] 6))

(defun debug-step-into nil (lisp-code "xü€Ktû€" [debug-obj debug-entry 1 beep] 3))

(defun debug-set-result (value) (lisp-code "xü€Ktû€" [debug-obj debug-entry 4 value beep] 3))

(defun debug-step-over nil (lisp-code "xü€Ktû€" [debug-obj debug-entry 2 beep] 3))

(defun debug-full-speed nil (lisp-code "xü€Ktû€" [debug-obj debug-entry 3 beep] 3))

(defun debug-continue (&optional break-p) (lisp-code "xü€‹tû€" [error-list debug-error-entry break-p beep] 2))

(defun debug-backtrace (depth) (lisp-code "\t\tHD4†\tH‡ˆ‰hŠ\t\n\nH‹E" [goto line-start file-end cursor-pos old-pos backtrace debug-buffer delete-area next-line depth dup-pos split-line] 6))
