Annotation of GNUtools/emacs/lisp/dbx.el, revision 1.1

1.1     ! root        1: ;; Run dbx under Emacs
        !             2: ;; Copyright (C) 1988 Free Software Foundation, Inc.
        !             3: ;; Main author Masanobu UMEDA ([email protected])
        !             4: 
        !             5: ;; This file is part of GNU Emacs.
        !             6: 
        !             7: ;; GNU Emacs is free software; you can redistribute it and/or modify
        !             8: ;; it under the terms of the GNU General Public License as published by
        !             9: ;; the Free Software Foundation; either version 1, or (at your option)
        !            10: ;; any later version.
        !            11: 
        !            12: ;; GNU Emacs is distributed in the hope that it will be useful,
        !            13: ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            14: ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        !            15: ;; GNU General Public License for more details.
        !            16: 
        !            17: ;; You should have received a copy of the GNU General Public License
        !            18: ;; along with GNU Emacs; see the file COPYING.  If not, write to
        !            19: ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
        !            20: 
        !            21: (require 'shell)
        !            22: 
        !            23: (defvar dbx-trace-flag nil
        !            24:   "Dbx trace switch.")
        !            25: 
        !            26: (defvar dbx-process nil
        !            27:   "The process in which dbx is running.")
        !            28: 
        !            29: (defvar dbx-break-point
        !            30:   "stopped in .* at line \\([0-9]*\\) in file \"\\([^\"]*\\)\""
        !            31:   "Regexp of pattern that dbx writes at break point.")
        !            32: 
        !            33: (defvar inferior-dbx-mode-map nil)
        !            34: (if inferior-dbx-mode-map
        !            35:     nil
        !            36:   (setq inferior-dbx-mode-map (copy-keymap shell-mode-map))
        !            37:   (define-key inferior-dbx-mode-map "\C-cw" 'dbx-where)
        !            38:   (define-key inferior-dbx-mode-map "\C-c\C-t" 'dbx-trace-mode)
        !            39:   (define-key ctl-x-map " " 'dbx-stop-at))
        !            40: 
        !            41: (defun inferior-dbx-mode ()
        !            42:   "Major mode for interacting with an inferior Dbx process.
        !            43: 
        !            44: The following commands are available:
        !            45: \\{inferior-dbx-mode-map}
        !            46: 
        !            47: Entry to this mode calls the value of dbx-mode-hook with no arguments,
        !            48: if that value is non-nil.  Likewise with the value of shell-mode-hook.
        !            49: dbx-mode-hook is called after shell-mode-hook.
        !            50: 
        !            51: You can display the debugging program in other window and point out
        !            52: where you are looking at using the command \\[dbx-where].
        !            53: 
        !            54: \\[dbx-trace-mode] toggles dbx-trace mode. In dbx-trace mode,
        !            55: debugging program is automatically traced using output from dbx.
        !            56: 
        !            57: The command \\[dbx-stop-at] sets break point at current line of the
        !            58: program in the buffer. Major mode name of the buffer must be in
        !            59: dbx-language-mode-list.
        !            60: 
        !            61: Commands:
        !            62: 
        !            63: Return at end of buffer sends line as input.
        !            64: Return not at end copies rest of line to end and sends it.
        !            65: \\[shell-send-eof] sends end-of-file as input.
        !            66: \\[kill-shell-input] and \\[backward-kill-word] are kill commands, imitating normal Unix input editing.
        !            67: \\[interrupt-shell-subjob] interrupts the shell or its current subjob if any.
        !            68: \\[stop-shell-subjob] stops, likewise. \\[quit-shell-subjob] sends quit signal, likewise.
        !            69: \\[dbx-where] displays debugging program in other window and
        !            70:  points out where you are looking at.
        !            71: \\[dbx-trace-mode] toggles dbx-trace mode.
        !            72: \\[dbx-stop-at] sets break point at current line."
        !            73:   (interactive)
        !            74:   (kill-all-local-variables)
        !            75:   (setq major-mode 'inferior-dbx-mode)
        !            76:   (setq mode-name "Inferior Dbx")
        !            77:   (setq mode-line-process '(": %s"))
        !            78:   (use-local-map inferior-dbx-mode-map)
        !            79:   (make-local-variable 'last-input-start)
        !            80:   (setq last-input-start (make-marker))
        !            81:   (make-local-variable 'last-input-end)
        !            82:   (setq last-input-end (make-marker))
        !            83:   (make-local-variable 'dbx-trace-flag)
        !            84:   (setq dbx-trace-flag nil)
        !            85:   (make-variable-buffer-local 'shell-prompt-pattern)
        !            86:   (setq shell-prompt-pattern "^[^)]*dbx) *") ;Set dbx prompt pattern
        !            87:   (or (assq 'dbx-trace-flag minor-mode-alist)
        !            88:       (setq minor-mode-alist
        !            89:            (cons '(dbx-trace-flag " Trace") minor-mode-alist)))
        !            90:   (run-hooks 'shell-mode-hook 'dbx-mode-hook))
        !            91: 
        !            92: (defun run-dbx (path)
        !            93:   "Run an inferior Dbx process, input and output via buffer *dbx*."
        !            94:   (interactive "fProgram to debug: ")
        !            95:   (setq path (expand-file-name path))
        !            96:   (let ((file (file-name-nondirectory path)))
        !            97:     (switch-to-buffer (concat "*dbx-" file "*"))
        !            98:     (setq default-directory (file-name-directory path))
        !            99:     (switch-to-buffer (make-shell (concat "dbx-" file) "dbx" nil file)))
        !           100:   (setq dbx-process (get-buffer-process (current-buffer)))
        !           101:   (set-process-filter dbx-process 'dbx-filter)
        !           102:   (inferior-dbx-mode))
        !           103: 
        !           104: (defun dbx-trace-mode (arg)
        !           105:   "Toggle dbx-trace mode.
        !           106: With arg, turn dbx-trace mode on iff arg is positive.
        !           107: In dbx-trace mode, user program is automatically traced."
        !           108:   (interactive "P")
        !           109:   (if (not (eql major-mode 'inferior-dbx-mode))
        !           110:       (error "Dbx-trace mode is effective in inferior-dbx mode only."))
        !           111:   (setq dbx-trace-flag
        !           112:        (if (null arg)
        !           113:            (not dbx-trace-flag)
        !           114:          (> (prefix-numeric-value arg) 0)))
        !           115:   ;; Force mode line redisplay
        !           116:   (set-buffer-modified-p (buffer-modified-p)))
        !           117: 
        !           118: (defun dbx-filter (process string)
        !           119:   "Trace debugging program automatically if dbx-trace-flag is not nil."
        !           120:   (save-excursion
        !           121:     (set-buffer (process-buffer process))
        !           122:     (goto-char (point-max))
        !           123:     (let ((beg (point)))
        !           124:       (insert string)
        !           125:       (if dbx-trace-flag               ;Trace mode is on?
        !           126:          (dbx-where beg t)))
        !           127:     (if (process-mark process)
        !           128:        (set-marker (process-mark process) (point-max))))
        !           129:   (if (eq (process-buffer process)
        !           130:          (current-buffer))
        !           131:       (goto-char (point-max)))
        !           132:   )
        !           133: 
        !           134: (defun dbx-where (&optional begin quiet)
        !           135:   "Display dbx'ed program in other window and point out where you are looking at.
        !           136: BEGIN bounds the search. If QUIET, just return nil (no error) if fail."
        !           137:   (interactive)
        !           138:   (let (file line)
        !           139:     (save-excursion
        !           140:       (if (re-search-backward dbx-break-point begin quiet)
        !           141:          (progn
        !           142:            (setq line (buffer-substring (match-beginning 1) (match-end 1)))
        !           143:            (setq file (buffer-substring (match-beginning 2) (match-end 2)))
        !           144:            )))
        !           145:     (if (and file line)                        ;Find break point?
        !           146:        (progn
        !           147:          (find-file-other-window (expand-file-name file nil))
        !           148:          (goto-line (string-to-int line)) ;Jump to the line
        !           149:          (beginning-of-line)
        !           150:          (setq overlay-arrow-string "=>")
        !           151:          (or overlay-arrow-position 
        !           152:              (setq overlay-arrow-position (make-marker)))
        !           153:          (set-marker overlay-arrow-position (point) (current-buffer))
        !           154:          (other-window 1))             ;Return to dbx
        !           155:       )))
        !           156: 
        !           157: (defun dbx-stop-at ()
        !           158:   "Set break point at current line."
        !           159:   (interactive)
        !           160:   (let ((file-name (file-name-nondirectory buffer-file-name))
        !           161:        (line (save-restriction
        !           162:                (widen)
        !           163:                (1+ (count-lines 1 (point))))))
        !           164:     (send-string dbx-process
        !           165:                 (concat "stop at \"" file-name "\":" line "\n"))))

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.