(defvar simula-label "^[A-Za-z_{|}]+:") (defvar simula-CE "else\\b\\|when\\b\\|otherwise\\b") (defvar simula-CB "end\\b\\|!\\|comment\\b") (defvar simula-BE "end\\b") (defvar simula-BB "begin\\b") (defvar simula-FB "if\\b\\|while\\b\\|inspect\\b\\|for\\b") (defvar simula-eol " ") (defvar simula-eof "@") (defvar simula-extended-form nil "\ non-nil if want non-standard slowly (extended) form checking") (defvar simula-mode-syntax-table nil "\ Syntax table in simula-mode buffers.") (defvar simula-mode-abbrev-table nil "\ abbrev table in simula-mode buffers") (defvar simula-indent-mode (quote simula-Nice-indent-mode)) (defvar Read-Simula-Keywords nil "\ non-nil if read keywords already") (define-abbrev-table (quote simula-mode-abbrev-table) nil) (defvar Simula-Keyword-Abbrev-File "simula.defns" "\ nil if not to load the Capitalize Keywords feature") (defvar simula-mode-ignore-directives t "\ Set to non nil if doesn't use % comment type lines.") (if simula-mode-syntax-table nil (let ((table (make-syntax-table))) (modify-syntax-entry 10 "." table) (modify-syntax-entry 12 "." table) (modify-syntax-entry 34 "\"" table) (modify-syntax-entry 39 "\"" table) (modify-syntax-entry 40 "()" table) (modify-syntax-entry 41 ")(" table) (modify-syntax-entry 42 "." table) (modify-syntax-entry 43 "." table) (modify-syntax-entry 44 "." table) (modify-syntax-entry 45 "." table) (modify-syntax-entry 46 "_" table) (modify-syntax-entry 95 "w" table) (modify-syntax-entry 47 "." table) (modify-syntax-entry 58 "." table) (modify-syntax-entry 59 ">" table) (modify-syntax-entry 60 "." table) (modify-syntax-entry 61 "." table) (modify-syntax-entry 62 "." table) (modify-syntax-entry 91 "(]" table) (modify-syntax-entry 92 "." table) (modify-syntax-entry 93 ")[" table) (modify-syntax-entry 94 "." table) (modify-syntax-entry 124 "w" table) (modify-syntax-entry 123 "w" table) (modify-syntax-entry 125 "w" table) (modify-syntax-entry 33 "<" table) (setq simula-mode-syntax-table table ))) (defvar simula-mode-map nil "\ Keymap used in simula mode.") (if simula-mode-map nil (setq simula-mode-map (make-sparse-keymap)) (define-key simula-mode-map " " (quote simula-indent)) (define-key simula-mode-map " (defun simula-mode nil "\ This is a mode intended to support program development in Simula.." (interactive) (byte-code "?* ^O!^?^?^UA!^?^UA!^?^T !^UA!^?^UC!^%^UE!^?^UE!^? ^UE!^? ^UI!^? ^UI!^? ^UA!^? rd abbrev file " "Please do one of the following: " "1. Include this line in your .emacs file: " " (setq Simula-Keyword-Abbrev-File nil) " "2. Make a decent abbrev file by your self " "3. Mail obh@ifi.uio.no requesting the abbrev file "] 9))) funcall run-hooks simula-mode-hook] 18)) (defun simula-null-indent nil (interactive) (byte-code "?" [nil] 1)) (setq simula-seen-FE nil) (setq simula-form-starter nil) (setq simula-form nil) (setq simula-FB-hpos nil) (setq simula-BB-hpos nil) (setq simula-hpos nil) (setq simula-lf-count nil) (setq simula-stack nil) (setq simula-assemble nil) (setq simula-debug nil) (defun simula-push (v) (byte-code ". B%+" [simula-assemble simula-stack v] 2)) (defun simula-pop nil (byte-code "@A%^+" [simula-stack] 3)) (defun simula-inside-simple-string nil (byte-code "SAA!^nf '" 1 forward-char -1 % 2 0] 6)) (defun ignore-simula-directives (pedohejform &optional pedohejway) (interactive) (byte-code "?f *+" [simula-mode-ignore-directives pedohejform pedohejval pedohejhere nil t pedohejway funcall beginning-of-line 37 forward-line forward-char -1] 9)) (defun maybe-skip-simula-comment nil (byte-code "`AAAAC!^EEE#^h%EU+ IU.D IUf. IU.| IUf- (defun save-simula-BB-BE nil (byte-code "`AA!^C ^ ?. (defun simula-back-level nil (interactive) (byte-code "?Ao?.K (defun simula-find-indent (&optional predict-next) (interactive) (byte-code "?A*EEEO ^UU!^U .! E E E T%^aa!^ofY S\".? SUf?^o ,E ?f?%TB!^o !^?E BUf5? ,E*V.Ee`T!^?,aU!f,? ^BVfbo %,?.t`oPD?^?.i%,aU!.?U %fsTB!^o !,aU!f|/ ,a ^u %?.DE ? "] 2)) 34 save-simula-string 39 search-backward "'" error "Unbalanced Character Quote" 58 59 "!\\|comment" simula-parsed-over simula-stack-trick "/n o " save-simula-BB-BE buffer-substring match-end Simula-Form-Handler beginning-of-line current-simula-indentation setcdr Simula-Default-Handler] 48)) (defun simula-parsed-over (from) (byte-code "AA!^A!^SA ^`W. T%)^A`!+" [from simula-eol simula-lf-count skip-chars-backward " " simula-push end-of-line] 6)) (defun simula-stack-trick nil (byte-code "AA!^ACA\"^  .- " 33 search-forward ";" 0] 6)) numberp] 6)) (defun save-simula-string nil (byte-code "A`!^AAe\"^hAUf " 34 error "UnBalanced String Quote \". " forward-char -1] 6)) (defun Simula-Form-Handler nil (byte-code "AAA !AQ!f (defun Simula-Default-Handler nil (byte-code ". + (defun Simula-Default-Form-Handler (form) (byte-code "A ^A !?f (defun simula-collapse-stack nil (byte-code " f .J @;f A%,F E @\"\"^A A%,F @%^C A@\"^E AA\"^, (defun get-indent-amount (indent-form-list) (byte-code "f* . (defun current-simula-indentation nil (byte-code "A!. (defun simula-indent-calc (amount) (byte-code "f6 ,1 \\),7 +" [amount from simula-hpos simula-FB-hpos simula-BB-hpos 0 1 2] 3)) (defun simula-indent-line (to) (byte-code "A ^gCUf \"E \"E Vf/ V.= iZ%^E \"E \"%^II \"^IN \"^O`OOd\"^`\"*+" [nil space to tab-width tabs simula-label beginning-of-line 37 % / looking-at re-search-forward 0 1 insert-char 9 backward-delete-char 32 delete-region skip-chars-forward " "] 16)) (defun simula-abbrev-expand-and-lf (arg) (interactive "p") (byte-code "^A ^AAA\"^CE!^SEA!)E ^EI!^IgI\".& (defun simula-indent nil (interactive) (byte-code "??A )@!+" [nil simula-indent-line simula-find-indent] 3)) (defun Simula-While-Handler nil (byte-code "A!+" [Simula-While-Form Simula-Default-Form-Handler] 2)) (defun Simula-If-Handler nil (byte-code "A!+" [Simula-If-Form Simula-Default-Form-Handler] 2)) (defun Simula-Inspect-Handler nil (byte-code "A!+" [Simula-Inspect-Form Simula-Default-Form-Handler] 2)) (defun Simula-For-Handler nil (byte-code "A!+" [Simula-For-Form Simula-Default-Form-Handler] 2)) (defun simula-Nice-indent-mode nil (interactive) (byte-code "??^?^?^?^?+" [Simula-While-Form Simula-Default-Form Simula-If-Form Simula-For-Form Simula-Inspect-Form nil (("while.*begin.*end;@" (0 0) (1 0)) ("while .*do.*begin .* .*end;@" (1 0) (0 0)) ("while .*do.*begin .*@" (1 3) (1 3)) ("while .*do.*begin.*@" (0 0) (1 3)) ("while .*do .*begin .* .*end;@" (2 0) (0 0)) ("while .*do .*begin .*@" (2 3) (2 3)) ("while .*do .*begin@" (1 3) (2 3)) ("while .*do .*;@" (1 3) (0 0)) ("while .*do .*@" (1 3) (1 3)) ("while .*do@" (0 0) (1 3))) (("begin.*end;@" (0 0) (0 0)) ("while .*do.*begin .* .*end;@" (0 0) (0 0)) ("begin.*@" (0 0) (2 3)) ("begin .* .*end.*@" (0 0) (0 0)) ("begin .*end;@" (2 3) (0 0)) ("begin .* .*end;@" (2 0) (0 0)) ("begin .*@" (2 3) (2 3)) ("begin .* @" (2 3) (2 3)) ("begin *.* *.*@" (2 3) (2 3)) (".*;@" (0 0) (0 0)) (" .*;@" (0 0) (0 0)) (" .*@" (0 0) (0 0)) ("." (0 0) (0 3))) (("if.*begin.*end;@" (0 0) (1 0)) ("if .*begin.*@" (0 0) (2 3)) ("if .*else@" (0 0) (0 0)) ("if .*;@" (0 0) (0 0)) ("if .*@" (0 0) (0 3)) ("if .*begin.* .*@" (2 3) (2 3)) ("if .* .*;@" (0 3) (0 0)) ("if .* .*begin.*end.*@" (0 3) (0 0)) ("if .* .*begin.*@" (0 3) (2 3)) ("if .*else .*@" (0 3) (0 0)) ("if .* .*begin.* .*@" (2 3) (2 3)) ("if .* .*begin.* .* .*end.*@" (2 0) (0 0)) ("if .*begin.* .* .*end;.*@" (0 0) (0 0)) ("if .*begin.* .* .*end@" (2 0) (0 0)) ("else if.*@" (0 0) (0 3)) ("else@" (0 0) (0 3)) ("else.*begin.*@" (0 0) (2 3)) ("else.*begin.* .*@" (2 3) (2 3)) ("else.*begin.* .* .*end;@" (2 0) (0 0)) ("else .*;@" (0 0) (0 0)) ("else .*begin@" (0 3) (2 3)) ("else .*begin .*@" (2 3) (2 3)) ("else .*begin .* .*end.*@" (2 0) (0 0))) (("for .*begin.*end;@" (0 0) (1 0)) ("for .*do.*;@" (0 0) (0 0)) ("for .*do@" (0 0) (1 3)) ("for .*do .*begin@" (1 3) (2 3)) ("for .*do .*begin .*@" (2 3) (2 3)) ("for .*do .*begin .* .*end.*@" (1 3) (0 0)) ("for .*do .*;@" (1 3) (0 0)) ("for .*do .*begin.* .*end.*@" (1 3) (0 0)) ("for .*do.*begin@" (0 0) (1 3)) ("for .*do.*begin .*end.*@" (1 3) (0 0)) ("for .*do.*begin .*@" (1 3) (1 3)) ("for .*do.*begin .* .*end.*@" (1 0) (0 0))) (("inspect .*do.*;@" (0 0) (0 0)) ("inspect .*do@" (0 0) (1 3)) ("inspect .*do .*begin.*end.*@" (1 3) (0 0)) ("inspect .*do .*begin.*@" (1 3) (2 3)) ("inspect .*do .*begin .*end.*@" (2 3) (0 0)) ("inspect .*do .*begin .* .*end.*@" (2 0) (0 0)) ("inspect .*do.*begin@" (0 0) (2 3)) ("inspect .*do.*begin .*end.*@" (2 3) (0 0)) ("inspect .*do.*begin .*@" (2 3) (2 3)) ("inspect .*do.*begin .* .*end.*;@" (2 0) (0 0)) ("inspect .*;@" (0 0) (0 0)) ("inspect .*@" (0 0) (0 3)) ("otherwise@" (0 0) (0 3)) ("otherwise .*begin@" (0 3) (2 3)) ("otherwise .*begin .*end.*@" (2 3) (0 0)) ("otherwise .*begin .*@" (2 3) (2 3)) ("otherwise .*begin .* .*end.*@" (2 0) (0 0)) ("otherwise .*begin .*end.*@" (0 0) (0 0)) ("otherwise .*begin.*@" (0 0) (2 3)) ("otherwise .*begin .*end.*@" (2 3) (0 0)) ("otherwise .*begin .*@" (2 3) (2 3)) ("otherwise .*begin .* .*end.*@" (2 0) (0 0)) ("when .*do@" (0 3) (0 6)) ("when .*do.*;@" (0 3) (0 0)) ("when .*do.*@" (0 3) (0 3)) ("when .*do .*begin@" (0 6) (2 3)) ("when .*do .*begin .*end;@" (2 3) (0 0)) ("when .*do .*begin .*@" (2 3) (2 3)) ("when .*do .*begin .* .*end;@" (2 0) (0 0)) ("when .*do .*begin .* .*end@" (2 0) (0 3)) ("when .*do .*begin .*end;@" (0 6) (0 0)) ("when .*do .*begin .*end@" (0 6) (0 3)))] 2)) (defun simula-Simed-indent-mode nil (interactive) (byte-code "??^?^?^?^?+" [Simula-While-Form Simula-Default-Form Simula-If-Form Simula-For-Form Simula-Inspect-Form nil (("while .*do.*begin .* end;@" (1 0) (0 0)) ("while .*do.*begin .*@" (1 3) (1 3)) ("while .*do.*begin.*@" (0 0) (1 3)) ("while .*do .*begin .* .*end;@" (1 0) (0 0)) ("while .*do .*begin .*@" (2 3) (2 3)) ("while .*do .*begin@" (1 0) (1 3)) ("while .*do .*;@" (1 3) (0 0)) ("while .*do .*@" (1 3) (1 3)) ("while .*do@" (0 0) (1 0))) (("begin.*end;@" (0 0) (0 0)) ("begin.*@" (0 0) (2 3)) ("begin .* end" (0 0) (0 0)) ("begin .*end;@" (2 3) (0 0)) ("begin .*@" (2 3) (2 3)) ("begin *.* *.*@" (2 3) (2 3)) (".*;@" (0 0) (0 0)) (" .*;@" (0 0) (0 0)) (" .*@" (0 0) (0 0)) ("." (0 0) (0 3))) (("if .*begin.*@" (0 0) (0 3)) ("if .*else@" (0 0) (0 0)) ("if .*;@" (0 0) (0 0)) ("if .*@" (0 0) (0 0)) ("if .*begin.* .*@" (0 3) (0 3)) ("if .* .*;@" (0 3) (0 0)) ("if .* .*begin.*end.*@" (0 0) (0 0)) ("if .* .*begin.*@" (0 0) (0 3)) ("if .*else .*@" (0 0) (0 0)) ("if .* .*begin.* .*@" (0 3) (0 3)) ("if .* .*begin.* .* .*end.*@" (0 0) (0 0)) ("if .*begin.* .* .*end;.*@" (0 0) (0 0)) ("if .*begin.* .* .*end@" (0 0) (0 0)) ("else if.*@" (0 0) (0 0)) ("else@" (0 0) (0 0)) ("else.*begin.*@" (0 0) (0 3)) ("else.*begin.* .*@" (0 3) (0 3)) ("else.*begin.* .* .*end;@" (0 0) (0 0)) ("else .*;@" (0 0) (0 0)) ("else .*begin@" (0 0) (0 3)) ("else .*begin .*@" (0 3) (0 3)) ("else .*begin .* .*end.*@" (0 0) (0 0))) (("for .*do.*;@" (0 0) (0 0)) ("for .*do@" (0 0) (0 0)) ("for .*do .*begin@" (0 0) (0 3)) ("for .*do .*begin .*@" (0 3) (0 3)) ("for .*do .*begin .* .*end.*@" (0 0) (0 0)) ("for .*do .*;@" (0 3) (0 0)) ("for .*do .*begin.* .*end.*@" (0 0) (0 0)) ("for .*do.*begin@" (0 0) (0 3)) ("for .*do.*begin .*end.*@" (0 3) (0 0)) ("for .*do.*begin .*@" (0 3) (0 3)) ("for .*do.*begin .* .*end.*@" (0 0) (0 0))) (("inspect .*do.*;@" (0 0) (0 0)) ("inspect .*do@" (0 0) (0 0)) ("inspect .*do .*begin.*end.*@" (0 3) (0 0)) ("inspect .*do .*begin.*@" (0 0) (0 3)) ("inspect .*do .*begin .*end.*@" (0 0) (0 0)) ("inspect .*do .*begin .* .*end.*@" (0 0) (0 0)) ("inspect .*do.*begin@" (0 0) (0 3)) ("inspect .*do.*begin .*end.*@" (0 3) (0 0)) ("inspect .*do.*begin .*@" (0 3) (0 3)) ("inspect .*do.*begin .* .*end.*;@" (0 0) (0 0)) ("inspect .*;@" (0 0) (0 0)) ("inspect .*@" (0 0) (0 0)) ("otherwise@" (0 0) (0 0)) ("otherwise .*begin@" (0 0) (0 3)) ("otherwise .*begin .*end.*@" (0 3) (0 0)) ("otherwise .*begin .*@" (0 3) (0 3)) ("otherwise .*begin .* .*end.*@" (0 0) (0 0)) ("otherwise .*begin .*end.*@" (0 0) (0 0)) ("otherwise .*begin.*@" (0 0) (0 3)) ("otherwise .*begin .*end.*@" (0 3) (0 0)) ("otherwise .*begin .*@" (0 3) (0 3)) ("otherwise .*begin .* .*end.*@" (0 0) (0 0)) ("when .*do@" (0 0) (0 0)) ("when .*do.*;@" (0 0) (0 0)) ("when .*do.*@" (0 0) (0 0)) ("when .*do .*begin@" (0 0) (0 3)) ("when .*do .*begin .*end;@" (0 3) (0 0)) ("when .*do .*begin .*@" (0 3) (0 3)) ("when .*do .*begin .* .*end;@" (0 0) (0 0)) ("when .*do .*begin .* .*end@" (0 0) (0 0)) ("when .*do .*begin .*end;@" (0 3) (0 0)) ("when .*do .*begin .*end@" (0 3) (0 0)))] 2)) .