|
|
1.1 ! root 1: ; Ada editing support package in GNUlisp. v1.0 ! 2: ; Author: Vincent Broman <[email protected]> May 1987. ! 3: ; (borrows heavily from Mick Jordan's Modula-2 package for GNU, ! 4: ; as modified by Peter Robinson, Michael Schmidt, and Tom Perrine.) ! 5: ! 6: ! 7: (setq auto-mode-alist (cons (cons "\\.ada$" 'ada-mode) auto-mode-alist)) ! 8: ! 9: (defvar ada-mode-syntax-table nil ! 10: "Syntax table in use in Ada-mode buffers.") ! 11: ! 12: (let ((table (make-syntax-table))) ! 13: (modify-syntax-entry ?_ "_" table) ! 14: (modify-syntax-entry ?\# "_" table) ! 15: (modify-syntax-entry ?\( "()" table) ! 16: (modify-syntax-entry ?\) ")(" table) ! 17: (modify-syntax-entry ?$ "." table) ! 18: (modify-syntax-entry ?* "." table) ! 19: (modify-syntax-entry ?/ "." table) ! 20: (modify-syntax-entry ?+ "." table) ! 21: (modify-syntax-entry ?- "." table) ! 22: (modify-syntax-entry ?= "." table) ! 23: (modify-syntax-entry ?\& "." table) ! 24: (modify-syntax-entry ?\| "." table) ! 25: (modify-syntax-entry ?< "." table) ! 26: (modify-syntax-entry ?> "." table) ! 27: (modify-syntax-entry ?\[ "." table) ! 28: (modify-syntax-entry ?\] "." table) ! 29: (modify-syntax-entry ?\{ "." table) ! 30: (modify-syntax-entry ?\} "." table) ! 31: (modify-syntax-entry ?. "." table) ! 32: (modify-syntax-entry ?\\ "." table) ! 33: (modify-syntax-entry ?: "." table) ! 34: (modify-syntax-entry ?\; "." table) ! 35: (modify-syntax-entry ?\' "." table) ! 36: (modify-syntax-entry ?\" "\"" table) ! 37: (setq ada-mode-syntax-table table)) ! 38: ! 39: (defvar ada-mode-map nil ! 40: "Keymap used in Ada mode.") ! 41: ! 42: (let ((map (make-sparse-keymap))) ! 43: (define-key map "\C-m" 'ada-newline) ! 44: (define-key map "\C-?" 'backward-delete-char-untabify) ! 45: (define-key map "\C-i" 'ada-tab) ! 46: (define-key map "\C-c\C-i" 'ada-untab) ! 47: (define-key map "\C-c<" 'ada-backward-to-same-indent) ! 48: (define-key map "\C-c>" 'ada-forward-to-same-indent) ! 49: (define-key map "\C-ch" 'ada-header) ! 50: (define-key map "\C-c(" 'ada-paired-parens) ! 51: (define-key map "\C-c-" 'ada-inline-comment) ! 52: (define-key map "\C-c\C-a" 'ada-array) ! 53: (define-key map "\C-cb" 'ada-exception-block) ! 54: (define-key map "\C-cd" 'ada-declare-block) ! 55: (define-key map "\C-c\C-e" 'ada-exception) ! 56: (define-key map "\C-cc" 'ada-case) ! 57: (define-key map "\C-c\C-k" 'ada-package-spec) ! 58: (define-key map "\C-ck" 'ada-package-body) ! 59: (define-key map "\C-c\C-p" 'ada-procedure-spec) ! 60: (define-key map "\C-cp" 'ada-subprogram-body) ! 61: (define-key map "\C-c\C-f" 'ada-function-spec) ! 62: (define-key map "\C-cf" 'ada-for-loop) ! 63: (define-key map "\C-cl" 'ada-loop) ! 64: (define-key map "\C-ci" 'ada-if) ! 65: (define-key map "\C-cI" 'ada-elsif) ! 66: (define-key map "\C-ce" 'ada-else) ! 67: (define-key map "\C-c\C-v" 'ada-private) ! 68: (define-key map "\C-c\C-r" 'ada-record) ! 69: (define-key map "\C-c\C-s" 'ada-subtype) ! 70: (define-key map "\C-cs" 'ada-separate) ! 71: (define-key map "\C-c\C-t" 'ada-type) ! 72: (define-key map "\C-ct" 'ada-tabsize) ! 73: ;; (define-key map "\C-c\C-u" 'ada-use) ! 74: ;; (define-key map "\C-c\C-w" 'ada-with) ! 75: (define-key map "\C-cw" 'ada-while-loop) ! 76: (define-key map "\C-c\C-w" 'ada-when) ! 77: (define-key map "\C-cx" 'ada-exit) ! 78: (define-key map "\C-cC" 'ada-compile) ! 79: (define-key map "\C-cB" 'ada-bind) ! 80: (define-key map "\C-cE" 'ada-find-listing) ! 81: (define-key map "\C-cL" 'ada-library-name) ! 82: (define-key map "\C-cO" 'ada-options-for-bind) ! 83: (setq ada-mode-map map)) ! 84: ! 85: (defvar ada-indent 4 "*Value is the number of columns to indent in Ada-Mode.") ! 86: ! 87: (defun ada-mode () ! 88: "This is a mode intended to support program development in Ada. ! 89: Most control constructs and declarations of Ada can be inserted in the buffer ! 90: by typing Control-C followed by a character mnemonic for the construct. ! 91: ! 92: C-c C-a array C-c b exception block ! 93: C-c C-e exception C-c d declare block ! 94: C-c C-k package spec C-c k package body ! 95: C-c C-p procedure spec C-c p proc/func body ! 96: C-c C-f func spec C-c f for loop ! 97: C-c i if ! 98: C-c I elsif ! 99: C-c e else ! 100: C-c C-v private C-c l loop ! 101: C-c C-r record C-c c case ! 102: C-c C-s subtype C-c s separate ! 103: C-c C-t type C-c t tab spacing for indents ! 104: C-c C-w when C-c w while ! 105: C-c x exit ! 106: C-c ( paired parens C-c - inline comment ! 107: C-c h header sec ! 108: C-c C compile C-c B bind ! 109: C-c E find error list ! 110: C-c L name library C-c O options for bind ! 111: ! 112: C-c < and C-c > move backward and forward respectively to the next line ! 113: having the same (or lesser) level of indentation. ! 114: ! 115: Variable ada-indent controls the number of spaces for indent/undent. ! 116: ! 117: \\{ada-mode-map} ! 118: " ! 119: (interactive) ! 120: (kill-all-local-variables) ! 121: (use-local-map ada-mode-map) ! 122: (setq major-mode 'ada-mode) ! 123: (setq mode-name "Ada") ! 124: (make-local-variable 'comment-column) ! 125: (setq comment-column 41) ! 126: (make-local-variable 'end-comment-column) ! 127: (setq end-comment-column 72) ! 128: (set-syntax-table ada-mode-syntax-table) ! 129: (make-local-variable 'paragraph-start) ! 130: (setq paragraph-start (concat "^$\\|" page-delimiter)) ! 131: (make-local-variable 'paragraph-separate) ! 132: (setq paragraph-separate paragraph-start) ! 133: (make-local-variable 'paragraph-ignore-fill-prefix) ! 134: (setq paragraph-ignore-fill-prefix t) ! 135: ; (make-local-variable 'indent-line-function) ! 136: ; (setq indent-line-function 'c-indent-line) ! 137: (make-local-variable 'require-final-newline) ! 138: (setq require-final-newline t) ! 139: (make-local-variable 'comment-start) ! 140: (setq comment-start "--") ! 141: (make-local-variable 'comment-end) ! 142: (setq comment-end "\n") ! 143: (make-local-variable 'comment-column) ! 144: (setq comment-column 41) ! 145: (make-local-variable 'comment-start-skip) ! 146: (setq comment-start-skip "--+ *") ! 147: (make-local-variable 'comment-indent-hook) ! 148: (setq comment-indent-hook 'c-comment-indent) ! 149: (make-local-variable 'parse-sexp-ignore-comments) ! 150: (setq parse-sexp-ignore-comments t) ! 151: (run-hooks 'ada-mode-hook)) ! 152: ! 153: (defun ada-tabsize (s) ! 154: "changes spacing used for indentation. Reads spacing from minibuffer." ! 155: (interactive "nnew indentation spacing: ") ! 156: (setq ada-indent s)) ! 157: ! 158: (defun ada-newline () ! 159: "Start new line and indent to current tab stop." ! 160: (interactive) ! 161: (let ((ada-cc (current-indentation))) ! 162: (newline) ! 163: (indent-to ada-cc))) ! 164: ! 165: (defun ada-tab () ! 166: "Indent to next tab stop." ! 167: (interactive) ! 168: (indent-to (* (1+ (/ (current-indentation) ada-indent)) ada-indent))) ! 169: ! 170: (defun ada-untab () ! 171: "Delete backwards to previous tab stop." ! 172: (interactive) ! 173: (backward-delete-char-untabify ada-indent nil)) ! 174: ! 175: (defun ada-go-to-this-indent (step indent-level) ! 176: "Move point repeatedly by <step> lines till the current line ! 177: has given indent-level or less, or the start/end of the buffer is hit. ! 178: Ignore blank lines, statement labels, block/loop names." ! 179: (while (and ! 180: (zerop (forward-line step)) ! 181: (or (looking-at "^[ ]*$") ! 182: (looking-at "^[ ]*--") ! 183: (looking-at "^<<[A-Za-z0-9_]+>>") ! 184: (looking-at "^[A-Za-z0-9_]+:") ! 185: (> (current-indentation) indent-level))) ! 186: nil)) ! 187: ! 188: (defun ada-backward-to-same-indent () ! 189: "Move point backwards to nearest line with same indentation or less. ! 190: If not found, point is left at top of buffer." ! 191: (interactive) ! 192: (ada-go-to-this-indent -1 (current-indentation)) ! 193: (back-to-indentation)) ! 194: ! 195: (defun ada-forward-to-same-indent () ! 196: "Move point forwards to nearest line with same indentation or less. ! 197: If not found, point is left at start of last line in buffer." ! 198: (interactive) ! 199: (ada-go-to-this-indent 1 (current-indentation)) ! 200: (back-to-indentation)) ! 201: ! 202: (defun ada-array () ! 203: "Insert array type definition, prompting for component type, ! 204: leaving the user to type in the index subtypes." ! 205: (interactive) ! 206: (insert "array ()") ! 207: (backward-char) ! 208: (insert (read-string "index subtype[s]: ")) ! 209: (end-of-line) ! 210: (insert " of ;") ! 211: (backward-char) ! 212: (insert (read-string "component-type: ")) ! 213: (end-of-line)) ! 214: ! 215: (defun ada-case () ! 216: "Build skeleton case statment, prompting for the selector expression. ! 217: starts up the first when clause, too." ! 218: (interactive) ! 219: (insert "case ") ! 220: (insert (read-string "selector expression: ") " is") ! 221: (ada-newline) ! 222: (ada-newline) ! 223: (insert "end case;") ! 224: (end-of-line 0) ! 225: (ada-tab) ! 226: (ada-tab) ! 227: (ada-when)) ! 228: ! 229: (defun ada-declare-block () ! 230: "Insert a block with a declare part and indent for the 1st declaration." ! 231: (interactive) ! 232: (let ((ada-block-name (read-string "[block name]: "))) ! 233: (insert "declare") ! 234: (cond ! 235: ( (not (string-equal ada-block-name "")) ! 236: (beginning-of-line) ! 237: (open-line 1) ! 238: (insert ada-block-name ":") ! 239: (next-line 1) ! 240: (end-of-line))) ! 241: (ada-newline) ! 242: (ada-newline) ! 243: (insert "begin") ! 244: (ada-newline) ! 245: (ada-newline) ! 246: (if (string-equal ada-block-name "") ! 247: (insert "end;") ! 248: (insert "end " ada-block-name ";")) ! 249: ) ! 250: (end-of-line -2) ! 251: (ada-tab)) ! 252: ! 253: (defun ada-exception-block () ! 254: "Insert a block with an exception part and indent for the 1st line of code." ! 255: (interactive) ! 256: (let ((block-name (read-string "[block name]: "))) ! 257: (insert "begin") ! 258: (cond ! 259: ( (not (string-equal block-name "")) ! 260: (beginning-of-line) ! 261: (open-line 1) ! 262: (insert block-name ":") ! 263: (next-line 1) ! 264: (end-of-line))) ! 265: (ada-newline) ! 266: (ada-newline) ! 267: (insert "exception") ! 268: (ada-newline) ! 269: (ada-newline) ! 270: (cond ! 271: ( (string-equal block-name "") ! 272: (insert "end;")) ! 273: ( t ! 274: (insert "end " block-name ";"))) ! 275: ) ! 276: (end-of-line -2) ! 277: (ada-tab)) ! 278: ! 279: (defun ada-exception () ! 280: "Undent and insert an exception part into a block. Reindent." ! 281: (interactive) ! 282: (ada-untab) ! 283: (insert "exception") ! 284: (ada-newline) ! 285: (ada-tab)) ! 286: ! 287: (defun ada-else () ! 288: "Add an else clause inside an if-then-end-if clause." ! 289: (interactive) ! 290: (ada-untab) ! 291: (insert "else") ! 292: (ada-newline) ! 293: (ada-tab)) ! 294: ! 295: (defun ada-exit () ! 296: "Insert an exit statement, prompting for loop name and condition." ! 297: (interactive) ! 298: (insert "exit") ! 299: (let ((ada-loop-name (read-string "[name of loop to exit]: "))) ! 300: (if (not (string-equal ada-loop-name "")) (insert " " ada-loop-name))) ! 301: (let ((ada-exit-condition (read-string "[exit condition]: "))) ! 302: (if (not (string-equal ada-exit-condition "")) ! 303: (if (string-match "^ *[Ww][Hh][Ee][Nn] +" ada-exit-condition) ! 304: (insert " " ada-exit-condition) ! 305: (insert " when " ada-exit-condition)))) ! 306: (insert ";")) ! 307: ! 308: (defun ada-when () ! 309: "Start a case statement alternative with a when clause." ! 310: (interactive) ! 311: (ada-untab) ; we were indented in code for the last alternative. ! 312: (insert "when ") ! 313: (insert (read-string "'|'-delimited choice list: ") " =>") ! 314: (ada-newline) ! 315: (ada-tab)) ! 316: ! 317: (defun ada-for-loop () ! 318: "Build a skeleton for-loop statement, prompting for the loop parameters." ! 319: (interactive) ! 320: (insert "for ") ! 321: (let* ((ada-loop-name (read-string "[loop name]: ")) ! 322: (ada-loop-is-named (not (string-equal ada-loop-name "")))) ! 323: (if ada-loop-is-named ! 324: (progn ! 325: (beginning-of-line) ! 326: (open-line 1) ! 327: (insert ada-loop-name ":") ! 328: (next-line 1) ! 329: (end-of-line 1))) ! 330: (insert (read-string "loop variable: ") " in ") ! 331: (insert (read-string "range: ") " loop") ! 332: (ada-newline) ! 333: (ada-newline) ! 334: (insert "end loop") ! 335: (if ada-loop-is-named (insert " " ada-loop-name)) ! 336: (insert ";")) ! 337: (end-of-line 0) ! 338: (ada-tab)) ! 339: ! 340: (defun ada-header () ! 341: "Insert a comment block containing the module title, author, etc." ! 342: (interactive) ! 343: (insert "--\n-- Title: \t") ! 344: (insert (read-string "Title: ")) ! 345: (insert "\n-- Created:\t" (current-time-string)) ! 346: (insert "\n-- Author: \t" (user-full-name)) ! 347: (insert "\n--\t\t<" (user-login-name) "@" (system-name) ">\n--\n")) ! 348: ! 349: (defun ada-if () ! 350: "Insert skeleton if statment, prompting for a boolean-expression." ! 351: (interactive) ! 352: (insert "if ") ! 353: (insert (read-string "condition: ") " then") ! 354: (ada-newline) ! 355: (ada-newline) ! 356: (insert "end if;") ! 357: (end-of-line 0) ! 358: (ada-tab)) ! 359: ! 360: (defun ada-elsif () ! 361: "Add an elsif clause to an if statement, prompting for the boolean-expression." ! 362: (interactive) ! 363: (ada-untab) ! 364: (insert "elsif ") ! 365: (insert (read-string "condition: ") " then") ! 366: (ada-newline) ! 367: (ada-tab)) ! 368: ! 369: (defun ada-loop () ! 370: "insert a skeleton loop statement. exit statement added by hand." ! 371: (interactive) ! 372: (insert "loop ") ! 373: (let* ((ada-loop-name (read-string "[loop name]: ")) ! 374: (ada-loop-is-named (not (string-equal ada-loop-name "")))) ! 375: (if ada-loop-is-named ! 376: (progn ! 377: (beginning-of-line) ! 378: (open-line 1) ! 379: (insert ada-loop-name ":") ! 380: (forward-line 1) ! 381: (end-of-line 1))) ! 382: (ada-newline) ! 383: (ada-newline) ! 384: (insert "end loop") ! 385: (if ada-loop-is-named (insert " " ada-loop-name)) ! 386: (insert ";")) ! 387: (end-of-line 0) ! 388: (ada-tab)) ! 389: ! 390: (defun ada-package-spec () ! 391: "Insert a skeleton package specification." ! 392: (interactive) ! 393: (insert "package ") ! 394: (let ((ada-package-name (read-string "package name: " ))) ! 395: (insert ada-package-name " is") ! 396: (ada-newline) ! 397: (ada-newline) ! 398: (insert "end " ada-package-name ";") ! 399: (end-of-line 0) ! 400: (ada-tab))) ! 401: ! 402: (defun ada-package-body () ! 403: "Insert a skeleton package body -- includes a begin statement." ! 404: (interactive) ! 405: (insert "package body ") ! 406: (let ((ada-package-name (read-string "package name: " ))) ! 407: (insert ada-package-name " is") ! 408: (ada-newline) ! 409: (ada-newline) ! 410: (insert "begin") ! 411: (ada-newline) ! 412: (insert "end " ada-package-name ";") ! 413: (end-of-line -1) ! 414: (ada-tab))) ! 415: ! 416: (defun ada-private () ! 417: "Undent and start a private section of a package spec. Reindent." ! 418: (interactive) ! 419: (ada-untab) ! 420: (insert "private") ! 421: (ada-newline) ! 422: (ada-tab)) ! 423: ! 424: (defun ada-get-arg-list () ! 425: "Read from user a procedure or function argument list. ! 426: Add parens unless arguments absent, and insert into buffer. ! 427: Individual arguments are arranged vertically if entered one-at-a-time. ! 428: Arguments ending with ';' are presumed single and stacked." ! 429: (insert " (") ! 430: (let ((ada-arg-indent (current-column)) ! 431: (ada-args (read-string "[arguments]: "))) ! 432: (if (string-equal ada-args "") ! 433: (backward-delete-char 2) ! 434: (progn ! 435: (while (string-match ";$" ada-args) ! 436: (insert ada-args) ! 437: (newline) ! 438: (indent-to ada-arg-indent) ! 439: (setq ada-args (read-string "next argument: "))) ! 440: (insert ada-args ")"))))) ! 441: ! 442: (defun ada-function-spec () ! 443: "Insert a function specification. Prompts for name and arguments." ! 444: (interactive) ! 445: (insert "function ") ! 446: (insert (read-string "function name: ")) ! 447: (ada-get-arg-list) ! 448: (insert " return ") ! 449: (insert (read-string "result type: "))) ! 450: ! 451: (defun ada-procedure-spec () ! 452: "Insert a procedure specification, prompting for its name and arguments." ! 453: (interactive) ! 454: (insert "procedure ") ! 455: (insert (read-string "procedure name: " )) ! 456: (ada-get-arg-list)) ! 457: ! 458: (defun get-ada-subprogram-name () ! 459: "Return (without moving point or mark) a pair whose CAR is ! 460: the name of the function or procedure whose spec immediately precedes point, ! 461: and whose CDR is the column nbr the procedure/function keyword was found at." ! 462: (save-excursion ! 463: (let ((ada-proc-indent 0)) ! 464: (if (re-search-backward ! 465: ;;;; Unfortunately, comments are not ignored in this string search. ! 466: "[PpFf][RrUu][OoNn][Cc][EeTt][DdIi][UuOo][RrNn]" nil t) ! 467: (if (or (looking-at "\\<[Pp][Rr][Oo][Cc][Ee][Dd][Uu][Rr][Ee]\\>") ! 468: (looking-at "\\<[Ff][Uu][Nn][Cc][Tt][Ii][Oo][Nn]\\>")) ! 469: (progn ! 470: (setq ada-proc-indent (current-column)) ! 471: (forward-word 2) ! 472: (let ((p2 (point))) ! 473: (forward-word -1) ! 474: (cons (buffer-substring (point) p2) ada-proc-indent))) ! 475: (get-ada-subprogram-name)) ! 476: (cons "NAME?" ada-proc-indent))))) ! 477: ! 478: (defun ada-subprogram-body () ! 479: "Insert frame for subprogram body. ! 480: Invoke right after ada-function-spec or ada-procedure-spec." ! 481: (interactive) ! 482: (insert " is") ! 483: (let ((ada-subprogram-name-col (get-ada-subprogram-name))) ! 484: (newline) ! 485: (indent-to (cdr ada-subprogram-name-col)) ! 486: (ada-newline) ! 487: (insert "begin") ! 488: (ada-newline) ! 489: (ada-newline) ! 490: (insert "end " (car ada-subprogram-name-col) ";")) ! 491: (end-of-line -2) ! 492: (ada-tab)) ! 493: ! 494: (defun ada-separate () ! 495: "Finish a body stub with 'is separate'." ! 496: (interactive) ! 497: (insert " is") ! 498: (ada-newline) ! 499: (ada-tab) ! 500: (insert "separate;") ! 501: (ada-newline) ! 502: (ada-untab)) ! 503: ! 504: ;(defun ada-with () ! 505: ; "Inserts a with clause, prompting for the list of units depended upon." ! 506: ; (interactive) ! 507: ; (insert "with ") ! 508: ; (insert (read-string "list of units depended upon: ") ";")) ! 509: ; ! 510: ;(defun ada-use () ! 511: ; "Inserts a use clause, prompting for the list of packages used." ! 512: ; (interactive) ! 513: ; (insert "use ") ! 514: ; (insert (read-string "list of packages to use: ") ";")) ! 515: ! 516: (defun ada-record () ! 517: "Insert a skeleton record type declaration." ! 518: (interactive) ! 519: (insert "record") ! 520: (ada-newline) ! 521: (ada-newline) ! 522: (insert "end record;") ! 523: (end-of-line 0) ! 524: (ada-tab)) ! 525: ! 526: (defun ada-subtype () ! 527: "Start insertion of a subtype declaration, prompting for the subtype name." ! 528: (interactive) ! 529: (insert "subtype " (read-string "subtype name: ") " is ;") ! 530: (backward-char) ! 531: (message "insert subtype indication.")) ! 532: ! 533: (defun ada-type () ! 534: "Start insertion of a type declaration, prompting for the type name." ! 535: (interactive) ! 536: (insert "type " (read-string "type name: ")) ! 537: (let ((disc-part (read-string "discriminant specs: "))) ! 538: (if (not (string-equal disc-part "")) ! 539: (insert "(" disc-part ")"))) ! 540: (insert " is ") ! 541: (message "insert type definition.")) ! 542: ! 543: (defun ada-while-loop () ! 544: (interactive) ! 545: (insert "while ") ! 546: (let* ((ada-loop-name (read-string "loop name: ")) ! 547: (ada-loop-is-named (not (string-equal ada-loop-name "")))) ! 548: (if ada-loop-is-named ! 549: (progn ! 550: (beginning-of-line) ! 551: (open-line 1) ! 552: (insert ada-loop-name ":") ! 553: (next-line 1) ! 554: (end-of-line 1))) ! 555: (insert (read-string "entry condition: ") " loop") ! 556: (ada-newline) ! 557: (ada-newline) ! 558: (insert "end loop") ! 559: (if ada-loop-is-named (insert " " ada-loop-name)) ! 560: (insert ";")) ! 561: (end-of-line 0) ! 562: (ada-tab)) ! 563: ! 564: (defun ada-paired-parens () ! 565: "Insert a pair of round parentheses, placing point between them." ! 566: (interactive) ! 567: (insert "()") ! 568: (backward-char)) ! 569: ! 570: (defun ada-inline-comment () ! 571: "Start a comment after the end of the line, indented at least COMMENT-COLUMN. ! 572: If starting after END-COMMENT-COLUMN, start a new line." ! 573: (interactive) ! 574: (end-of-line) ! 575: (if (> (current-column) end-comment-column) (newline)) ! 576: (if (< (current-column) comment-column) (indent-to comment-column)) ! 577: (insert " -- ")) ! 578: ! 579: (defun ada-display-comment () ! 580: "Inserts 3 comment lines, making a display comment." ! 581: (interactive) ! 582: (insert "--\n-- \n--") ! 583: (end-of-line 0)) ! 584: ! 585: ;; Much of this is specific to Ada-Ed ! 586: ! 587: (defvar ada-lib-dir-name "lib" "*Current ada program library directory.") ! 588: (defvar ada-bind-opts "" "*Options to supply for binding.") ! 589: ! 590: (defun ada-library-name (ada-lib-name) ! 591: "Specify name of ada library directory for later compilations." ! 592: (interactive "Dname of ada library directory: ") ! 593: (setq ada-lib-dir-name ada-lib-name)) ! 594: ! 595: (defun ada-options-for-bind () ! 596: "Specify options, such as -m and -i, needed for adabind." ! 597: (setq ada-bind-opts (read-string "-m and -i options for adabind: "))) ! 598: ! 599: (defun ada-compile (ada-prefix-arg) ! 600: "Save the current buffer and compile it into the current program library. ! 601: Initialize the library if a prefix arg is given." ! 602: (interactive "P") ! 603: (let* ((ada-init (if (null ada-prefix-arg) "" "-n ")) ! 604: (ada-source-file (buffer-name))) ! 605: (compile ! 606: (concat "adacomp " ada-init "-l " ada-lib-dir-name " " ada-source-file)))) ! 607: ! 608: (defun ada-find-listing () ! 609: "Find listing file for ada source in current buffer, using other window." ! 610: (interactive) ! 611: (find-file-other-window (concat (substring (buffer-name) 0 -4) ".lis")) ! 612: (search-forward "*** ERROR")) ! 613: ! 614: (defun ada-bind () ! 615: "Bind the current program library, using the current binding options." ! 616: (interactive) ! 617: (compile (concat "adabind " ada-bind-opts " " ada-lib-dir-name)))
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.