+++ /dev/null
-;; ---------------------------------------------------------------------------
-;; Time-stamp: <Tue Jun 11 1996 18:01:28 Stardate: [-31]7643.54 hwloidl>
-;;
-;; Mode for GrAnSim profiles
-;; ---------------------------------------------------------------------------
-
-(defvar gransim-auto-hilit t
- "Automagically invoke hilit19.")
-
-(defvar grandir (getenv "GRANDIR")
- "Root of the GrAnSim installation. Executables should be in grandir/bin")
-
-(defvar hwl-hi-node-face 'highlight
- "Face to be used for specific highlighting of a node")
-
-(defvar hwl-hi-thread-face 'holiday-face
- "Face to be used for specific highlighting of a thread")
-
-;; ---------------------------------------------------------------------------
-
-(setq exec-path (cons (concat grandir "/bin") exec-path))
-
-;; Requires hilit19 for highlighting parts of a GrAnSim profile
-(cond (window-system
- (setq hilit-mode-enable-list '(not text-mode)
- hilit-background-mode 'light
- hilit-inhibit-hooks nil
- hilit-inhibit-rebinding nil);
-
- (require 'hilit19)
-))
-
-
-(setq auto-mode-alist
- (append '(("\\.gr" . gr-mode))
- auto-mode-alist))
-
-(defvar gr-mode-map (make-keymap "GrAnSim Profile Mode SetUp")
- "Keymap for GrAnSim profiles.")
-
-; (fset 'GrAnSim-mode-fiddly gr-mode-map)
-
-;(define-key gr-mode-map [wrap]
-; '("Wrap lines" . hwl-wrap))
-
-;(define-key gr-mode-map [truncate]
-; '("Truncate lines" . hwl-truncate))
-
-;(define-key global-map [C-S-down-mouse-1] 'GrAnSim-mode-fiddly)
-
-;(modify-frame-parameters (selected-frame)
-; '((menu-bar-lines . 2)))
-
-;(define-key-after gr-mode-map [menu-bar GrAnSim]
-; '("GrAnSim" . (make-sparse-keymap "GrAnSim")) 'edit)
-
-;(defvar GrAnSim-menu-map (make-sparse-keymap "GrAnSim"))
-
-(define-key gr-mode-map [menu-bar GrAnSim]
- (cons "GrAnSim" (make-sparse-keymap "GrAnSim"))) ; 'edit)
-
-(define-key gr-mode-map [menu-bar GrAnSim wrap]
- '("Wrap lines" . hwl-wrap))
-
-(define-key gr-mode-map [menu-bar GrAnSim truncate]
- '("Truncate lines" . hwl-truncate))
-
-(define-key gr-mode-map [menu-bar GrAnSim toggle-truncate]
- '("Toggle truncate/wrap" . hwl-toggle-truncate-wrap) )
-
-(define-key gr-mode-map [menu-bar GrAnSim hi-clear]
- '("Clear highlights" . hwl-hi-clear))
-
-(define-key gr-mode-map [menu-bar GrAnSim hi-thread]
- '("Highlight specific Thread" . hwl-hi-thread))
-
-(define-key gr-mode-map [menu-bar GrAnSim hi-node]
- '("Highlight specific Node" . hwl-hi-node))
-
-(define-key gr-mode-map [menu-bar GrAnSim highlight]
- '("Highlight buffer" . hilit-rehighlight-buffer))
-
-(define-key gr-mode-map [menu-bar GrAnSim narrow-event]
- '("Narrow to Event" . hwl-narrow-to-event))
-
-(define-key gr-mode-map [menu-bar GrAnSim narrow-thread]
- '("Narrow to Thread" . hwl-narrow-to-thread))
-
-(define-key gr-mode-map [menu-bar GrAnSim narrow-pe]
- '("Narrow to PE" . hwl-narrow-to-pe))
-
-
-
-; (define-key global-map [C-S-down-mouse-1] 'GrAnSim-mode-fiddly)
-
-
-(defvar gr-mode-hook nil
- "Invoked in gr mode.")
-
-
-;;; Ensure new buffers won't get this mode if default-major-mode is nil.
-;(put 'gr-mode 'mode-class 'special)
-
-(defun gr-mode ()
- "Major mode for GrAnSim profiles."
- (interactive)
- (kill-all-local-variables)
- ;(use-local-map gr-mode-map)
- (use-local-map gr-mode-map) ; This provides the local keymap.
- (setq major-mode 'gr-mode)
- (setq mode-name "GrAnSim Profile Mode")
- (setq local-abbrev-table text-mode-abbrev-table)
- (set-syntax-table text-mode-syntax-table)
- (setq truncate-lines t) ; do not wrap lines (truncates END lines!)
- (auto-save-mode -1)
- ;(setq buffer-offer-save t)
- (run-hooks 'gr-mode-hook))
-
-;; same as mh-make-local-vars
-(defun gr-make-local-vars (&rest pairs)
- ;; Take VARIABLE-VALUE pairs and make local variables initialized to the
- ;; value.
- (while pairs
- (make-variable-buffer-local (car pairs))
- (set (car pairs) (car (cdr pairs)))
- (setq pairs (cdr (cdr pairs)))))
-
-;; ----------------------------------------------------------------------
-;; Highlighting stuff (currently either hilit19 or fontlock is used)
-;; ----------------------------------------------------------------------
-
-(hilit-set-mode-patterns
- 'gr-mode
- '(;; comments
- ("--.*$" nil comment)
- ("\\+\\+.*$" nil comment)
- ;; hilight important bits in the header
- ("^Granularity Simulation for \\(.*\\)$" 1 glob-struct)
- ("^PEs[ \t]+\\([0-9]+\\)" 1 decl)
- ("^Latency[ \t]+\\([0-9]+\\)" 1 decl)
- ("Arith[ \t]+\\([0-9]+\\)" 1 decl)
- ("Branch[ \t]+\\([0-9]+\\)" 1 decl)
- ("Load[ \t]+\\([0-9]+\\)" 1 decl)
- ("Store[ \t]+\\([0-9]+\\)" 1 decl)
- ("Float[ \t]+\\([0-9]+\\)" 1 decl)
- ("Alloc[ \t]+\\([0-9]+\\)" 1 decl)
- ;; hilight PE number and time in each line
- ("^PE[ \t]+\\([0-9]+\\)" 1 glob-struct)
- (" \\[\\([0-9]+\\)\\]:" 1 define)
- ;; in this case the events are the keyword
- ; ("\\(FETCH\\|REPLY\\|RESUME\\|RESUME(Q)\\|SCHEDULE\\|SCHEDULE(Q)\\|BLOCK\\|STEALING\\|STOLEN\\|STOLEN(Q)\\)[ \t]" 1 keyword)
- ("\\(FETCH\\|BLOCK\\)[ \t]" 1 label)
- ("\\(REPLY\\|RESUME(Q)\\|SCHEDULE(Q)\\|STOLEN(Q)\\)[ \t]" 1 named-param)
- ("\\(RESUME\\|SCHEDULE\\|STOLEN\\)[ \t]" 1 msg-quote)
- ("\\(STEALING\\)[ \t]" 1 keyword)
- ("\\(START\\|END\\)[ \t]" 1 defun)
- ("\\(SPARK\\|SPARKAT\\|USED\\|PRUNED\\)[ \t]" 1 crossref)
- ("\\(EXPORTED\\|ACQUIRED\\)[ \t]" 1 string)
- ;; especially interesting are END events; hightlight runtime etc
- (",[ \t]+RT[ \t]+\\([0-9]+\\)" 1 define)
- ;; currently unused but why not?
- ("\"" ".*\"" string))
-)
-
-;; --------------------------------------------------------------------------
-;; Own fcts for selective highlighting
-;; --------------------------------------------------------------------------
-
-(defun hwl-hi-node (node)
- "Highlight node in GrAnSim profile."
- (interactive "sNode (hex): ")
- (save-excursion
- (let* ( (here (point))
- (len (length node)) )
- (goto-char (point-min))
- (while (search-forward node nil t)
- (let* ( (end (point))
- (start (- end len)) )
- (add-text-properties start end `(face ,hwl-hi-node-face))
- )
- ) )
- )
-)
-
-(defun hwl-hi-thread (task)
- "Highlight task in GrAnSim profile."
- (interactive "sTask: ")
- (save-excursion
- (let* ( (here (point))
- (len (length task))
- (se-str (format "[A-Z)]\\s-+%s\\(\\s-\\|,\\)" task))
- )
- (goto-char (point-min))
- (while (re-search-forward se-str nil t)
- (let ( (c (current-column)) )
- (if (and (> c 10) (< c 70))
- (let* ( (end (1- (point)))
- (start (- end len)) )
- (add-text-properties start end `(face ,hwl-hi-thread-face))
- ) ) )
- ) )
- )
-)
-
-(defun hwl-hi-line ()
- "Highlight the current line."
- (interactive)
- (save-excursion
- (beginning-of-line)
- (let ( (beg (point)) )
- (end-of-line)
- (add-text-properties beg (point) '(face highlight))
- )
- )
-)
-
-(defun hwl-unhi-line ()
- "Unhighlight the current line."
- (interactive)
- (save-excursion
- (beginning-of-line)
- (let ( (beg (point)) )
- (end-of-line)
- (add-text-properties beg (point) '(face nil))
- )
- )
-)
-
-; Doesn't work yet
-(defun hwl-hi-from-to (from to)
- "Highlight region between two timestamps."
- (interactive "nFrom: \nnTo:")
- (save-excursion
- (let* ( (here (point))
- (now 0)
- start end
- (separator '"+++++")
- )
- (goto-char (point-min))
- ; (re-search-forward REGEXP)
- (search-forward separator nil t)
- (forward-line)
- (while (< now from)
- (beginning-of-line)
- (forward-line)
- (forward-char 7)
- (setq beg (point))
- (search-forward "]")
- (setq time-str (buffer-substring beg (- (point) 2)))
- (setq now (string-to-number time-str))
- )
- (if (< now from)
- nil
- (setq start (point))
- (while (< now to)
- (beginning-of-line)
- (forward-line)
- (forward-char 7)
- (setq beg (point))
- (search-forward "]")
- (setq time-str (buffer-substring beg (- (point) 2)))
- (setq now (string-to-number time-str))
- )
- (if (< now to)
- nil
- (setq end (point))
- (add-text-properties start end '(face paren-match-face))
- )
- )
- ) ; let
- ) ; excursion
-)
-
-(defun hwl-hi-clear ()
- (interactive)
- (let ( (start (point-min) )
- (end (point-max)) )
- (remove-text-properties start end '(face nil))
- )
-)
-
-;; --------------------------------------------------------------------------
-;; Misc Elisp functions
-;; --------------------------------------------------------------------------
-
-(defun hwl-wrap ()
- (interactive)
- (setq truncate-lines nil)
- (hilit-recenter nil)
-)
-
-(defun hwl-truncate ()
- (interactive)
- (setq truncate-lines t)
- (hilit-recenter nil)
-)
-
-(defun hwl-toggle-truncate-wrap ()
- (interactive)
- (if truncate-lines (setq truncate-lines nil)
- (setq truncate-lines t))
- (hilit-recenter nil)
-)
-
-(defun hwl-narrow-to-pe (pe)
- (interactive "nPE: ")
- (hwl-narrow 1 pe "")
-)
-
-(defun hwl-narrow-to-thread (thread)
- (interactive "sThread: ")
- (hwl-narrow 2 thread "")
-)
-
-(defun hwl-narrow-to-event (event)
- (interactive "sEvent: ")
- (hwl-narrow 3 0 event)
-)
-
-(defun hwl-narrow (mode id str)
- ( let* ((outbuffer (get-buffer-create "*GrAnSim Narrowed*"))
- ;(from (beginning-of-buffer))
- ;(to (end-of-buffer))
- ;(to (point)) ; (region-end))
- ;(text (buffer-substring from to)) ; contains text in region
- (w (selected-window))
- ;(nh 5) ; height of new window
- ;(h (window-height w)) ; height of selcted window
- ;(h1 (if (<= h nh) (- h 1) (- h nh))) ; height of old window
- (w1 (get-buffer-window outbuffer 'visible))
-
- (infile (buffer-file-name)) ; or
- (inbuffer (current-buffer))
- (command "tf")
- ;(mode_opt (cond ((eq mode 1) "-p")
- ; ((eq mode 2) "-t")
- ; ((eq mode 3) "-e")
- ; (t "-v")))
- )
- (if w1 (message "Window *GrAnSim Narrowed* already visible")
- (split-window w nil nil))
- (switch-to-buffer-other-window outbuffer)
- (erase-buffer)
- (setq truncate-lines t)
- (gr-mode)
- ;(beginning-of-buffer)
- ;(set-mark)
- ;(end-of-buffer)
- ;(delete-region region-beginning region-end)
- (cond ((eq mode 1)
- ;(message (format "Narrowing to Processor %d" id))
- (call-process command nil outbuffer t "-p" (format "%d" id) infile ))
- ((eq mode 2)
- ;(message (format "Narrowing to Thread %d" id))
- (call-process command nil outbuffer t "-t" (format "%s" id) infile ))
- ((eq mode 3)
- ;(message (format "Narrowing to Event %s" str))
- (call-process command nil outbuffer t "-e" str infile ))
- )
- )
-)
-
-(defun hwl-command-on-buffer (prg opts file)
- (interactice "CProgram:\nsOptions:\nfFile:")
- ( let* ((outbuffer (get-buffer-create "*GrAnSim Command*"))
- (from (beginning-of-buffer))
- (to (end-of-buffer))
- ;(to (point)) ; (region-end))
- ;(text (buffer-substring from to)) ; contains text in region
- (w (selected-window))
- ;(nh 5) ; height of new window
- ;(h (window-height w)) ; height of selcted window
- ;(h1 (if (<= h nh) (- h 1) (- h nh))) ; height of old window
- (w1 (get-buffer-window outbuffer 'visible))
-
- (infile (buffer-file-name)) ; or
- (inbuffer (current-buffer))
- ;(command "tf")
- ;(mode_opt (cond ((eq mode 1) "-p")
- ; ((eq mode 2) "-t")
- ; ((eq mode 3) "-e")
- ; (t "-v")))
- )
- (if w1 (message "Window *GrAnSim Command* already visible")
- (split-window w nil nil))
- (switch-to-buffer-other-window outbuffer)
- (erase-buffer)
- (setq truncate-lines t)
- (gr-mode)
- (call-process prg nil outbuffer opts file)
- )
-)
-
-;; ToDo: Elisp Fcts for calling scripts like gr3ps etc
-
-(define-key gr-mode-map "\C-ct" 'hwl-truncate)
-(define-key gr-mode-map "\C-cw" 'hwl-wrap)
-(define-key gr-mode-map "\C-ch" 'hilit-rehighlight-buffer)
-(define-key gr-mode-map "\C-cp" 'hwl-narrow-to-pe)
-(define-key gr-mode-map "\C-ct" 'hwl-narrow-to-thread)
-(define-key gr-mode-map "\C-ce" 'hwl-narrow-to-event)
-(define-key gr-mode-map "\C-c\C-e" '(lambda () (hwl-narrow-to-event "END")))
-(define-key gr-mode-map "\C-c " 'hwl-toggle-truncate-wrap)
-(define-key gr-mode-map "\C-cN" 'hwl-hi-node)
-(define-key gr-mode-map "\C-cT" 'hwl-hi-thread)
-(define-key gr-mode-map "\C-c\C-c" 'hwl-hi-clear)
-
-;; ---------------------------------------------------------------------------
-;; Mode for threaded C files
-;; ---------------------------------------------------------------------------
-
-(setq auto-mode-alist
- (append '(("\\.hc" . hc-mode))
- auto-mode-alist))
-
-(define-derived-mode hc-mode c-mode "hc Mode"
- "Derived mode for Haskell C files."
-)
-
-(hilit-set-mode-patterns
- 'hc-mode
- '(
- ("\\(GRAN_FETCH\\|GRAN_RESCHEDULE\\|GRAN_FETCH_AND_RESCHEDULE\\|GRAN_EXEC\\|GRAN_YIELD\\)" 1 keyword)
- ("FB_" nil defun)
- ("FE_" nil define)
- ("__STG_SPLIT_MARKER" nil msg-note)
- ("^.*_ITBL.*$" nil defun)
- ("^\\(I\\|E\\|\\)FN.*$" nil define)
- )
-)
-
-; (define-key global-map [S-pause] 'hc-mode)