-;;;--------------------------------------------------------------------------
-;;; ARM assembler programming configuration.
-
-;; There doesn't appear to be an Emacs mode for this yet.
-;;
-;; Better do something about that, I suppose.
-
-(defvar arm-assembler-mode-map nil)
-(defvar arm-assembler-abbrev-table nil)
-(defvar arm-assembler-mode-syntax-table (make-syntax-table))
-
-(or arm-assembler-mode-map
- (progn
- (setq arm-assembler-mode-map (make-sparse-keymap))
- (define-key arm-assembler-mode-map "\C-m" 'arm-assembler-newline)
- (define-key arm-assembler-mode-map [C-return] 'newline)
- (define-key arm-assembler-mode-map "\t" 'tab-to-tab-stop)))
-
-(defun arm-assembler-mode ()
- "Major mode for ARM assembler programs"
- (interactive)
-
- ;; Do standard major mode things.
- (kill-all-local-variables)
- (use-local-map arm-assembler-mode-map)
- (setq local-abbrev-table arm-assembler-abbrev-table)
- (setq major-mode 'arm-assembler-mode)
- (setq mode-name "ARM assembler")
-
- ;; Set up syntax table.
- (set-syntax-table arm-assembler-mode-syntax-table)
- (modify-syntax-entry ?; ; Nasty hack
- "<" arm-assembler-mode-syntax-table)
- (modify-syntax-entry ?\n ">" arm-assembler-mode-syntax-table)
- (modify-syntax-entry ?_ "_" arm-assembler-mode-syntax-table)
- (modify-syntax-entry ?' "\"'" arm-assembler-mode-syntax-table)
-
- (make-local-variable 'comment-start)
- (setq comment-start ";")
- (make-local-variable 'comment-end)
- (setq comment-end "")
- (make-local-variable 'comment-column)
- (setq comment-column 48)
- (make-local-variable 'comment-start-skip)
- (setq comment-start-skip ";+[ \t]*")
-
- ;; Play with indentation.
- (make-local-variable 'indent-line-function)
- (setq indent-line-function 'indent-relative-maybe)
-
- ;; Set fill prefix.
- (mdw-standard-fill-prefix "\\([ \t]*;+[ \t]*\\)")
-
- ;; Fiddle with fontification.
- (make-local-variable 'font-lock-keywords)
- (setq font-lock-keywords
- (list
-
- ;; Handle numbers too.
- ;;
- ;; The following isn't quite right, but it's close enough.
- (list (concat "\\("
- "&[0-9a-fA-F]+\\|"
- "\\<[0-9]+\\(\\.[0-9]*\\|_[0-9a-zA-Z]+\\|\\)"
- "\\)")
- '(0 mdw-number-face))
-
- ;; Do something about operators.
- (list "^[^ \t]*[ \t]+\\(GET\\|LNK\\)[ \t]+\\([^;\n]*\\)"
- '(1 font-lock-keyword-face)
- '(2 font-lock-string-face))
- (list ":[a-zA-Z]+:"
- '(0 font-lock-keyword-face))
-
- ;; Do menemonics and directives.
- (list "^[^ \t]*[ \t]+\\([a-zA-Z]+\\)"
- '(1 font-lock-keyword-face))
-
- ;; And anything else is punctuation.
- (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
- '(0 mdw-punct-face))))
-
- (mdw-post-config-mode-hack)
- (run-hooks 'arm-assembler-mode-hook))
-