home *** CD-ROM | disk | FTP | other *** search
/ Network PC / Network PC.iso / amiga utilities / communication / internet / amitcp3.0b / export / gnuemacs / lisp / forms.elc < prev    next >
Encoding:
Text File  |  1997-11-21  |  17.7 KB  |  156 lines

  1. ;;; compiled by jraja@lk-hp-11 on Fri Nov 12 08:40:32 1993
  2. ;;; from file /u/opi/86/jraja/ohtatcp/amitcp/src/appl/EmacsTcp/src/forms.el
  3. ;;; emacs version 18.58.6.
  4. ;;; bytecomp version 2.07; 15-jul-92.
  5. ;;; optimization is on; compiled with emacs18 compatibility.
  6.  
  7. (byte-code "ÀÁ!ˆÀÂ!‡" [provide forms forms-mode] 2)
  8. (defconst forms-version "1.2.9" "\
  9. Version of forms-mode implementation")
  10. (defvar forms-forms-scrolls t "\
  11. If non-null: redefine scroll-up/down to be used with forms-mode.")
  12. (defvar forms-forms-jumps t "\
  13. If non-null: redefine beginning/end-of-buffer to be used with forms-mode.")
  14. (defvar forms-mode-hooks nil "\
  15. Hook functions to be run upon entering forms mode.")
  16. (defvar forms-file nil "\
  17. Name of the file holding the data.")
  18. (defvar forms-format-list nil "\
  19. List of formatting specifications.")
  20. (defvar forms-number-of-fields nil "\
  21. Number of fields per record.")
  22. (defvar forms-field-sep "    " "\
  23. Field separator character (default TAB)")
  24. (defvar forms-read-only nil "\
  25. Read-only mode (defaults to the write access on the data file).")
  26. (defvar forms-multi-line " " "\
  27. Character to separate multi-line fields (default ^K)")
  28. (defvar forms-forms-scroll t "\
  29. Redefine scroll-up/down to perform forms-next/prev-record when in
  30.  forms mode.")
  31. (defvar forms-forms-jump t "\
  32. Redefine beginning/end-of-buffer to perform forms-first/last-record
  33.  when in forms mode.")
  34. (defvar forms--file-buffer nil "\
  35. Buffer which holds the file data")
  36. (defvar forms--total-records 0 "\
  37. Total number of records in the data file.")
  38. (defvar forms--current-record 0 "\
  39. Number of the record currently on the screen.")
  40. (defvar forms-mode-map nil "\
  41. Keymap for form buffer.")
  42. (defvar forms--markers nil "\
  43. Field markers in the screen.")
  44. (defvar forms--number-of-markers 0 "\
  45. Number of fields on screen.")
  46. (defvar forms--the-record-list nil "\
  47. List of strings of the current record, as parsed from the file.")
  48. (defvar forms--search-regexp nil "\
  49. Last regexp used by forms-search.")
  50. (defvar forms--format nil "\
  51. Formatting routine.")
  52. (defvar forms--parser nil "\
  53. Forms parser routine.")
  54. (defvar forms--mode-setup nil "\
  55. Internal - keeps track of forms-mode being set-up.")
  56. (make-variable-buffer-local (quote forms--mode-setup))
  57. (defvar forms--new-record-filter nil "\
  58. Internal - set if a new record filter has been defined.")
  59. (defvar forms--modified-record-filter nil "\
  60. Internal - set if a modified record filter has been defined.")
  61. (defvar forms--dynamic-text nil "\
  62. Internal - holds dynamic text to insert between fields.")
  63. (defvar forms-fields nil "\
  64. List with fields of the current forms. First field has number 1.")
  65. (defun forms-mode (&optional primary) "\
  66. Major mode to visit files in a field-structured manner using a form.
  67.  
  68.  Commands (prefix with C-c if not in read-only mode):
  69.  \\{forms-mode-map}" (interactive) (byte-code "„    „õ ˆÃÄ!ˆÃÅ!ˆÃÆ!ˆÃÇ!ˆÃÈ!ˆÃÉ!ˆÃÊ!ˆÃË!ˆÌÍ!ˆÎ ˆ „:ÏÐ!ˆ„BÏÑ!ˆÒV„XÏÓ!„X;„XÏÔ!ˆ    ƒ    ;ƒ{    GÕ=ƒ{Ö    \"ƒÏ×!ˆ‚ÏØ!ˆÃÙ!ˆÃÚ!ˆÛ ˆÃÜ!ˆÝ ˆÃÞ!ˆß ˆÃà!ˆáÍ!ƒ§ÍK‚¶âÍ!…¶á!…¶ ÌÍ!ˆÃã!ˆáä!ƒËäK‚Úâä!…Úá$!…Ú$#Ìä!ˆÃå!ˆÃæ!ˆç(ç)êç!ˆë ˆÃì!ˆÃí!ˆÃî!ˆÃï!ˆÃð!ˆ1„ò 1ó1!ˆô ˆõ !,ç6Š,qˆ÷p!ˆ(6øed\")-6ƒ>ù)ú;ü=Ãþ!ˆÿ ˆ@ ˆAç!ˆÃB!ˆCB.ÕWƒlÕ.D.!ˆEF!ˆG ˆù‰‡" [primary forms--mode-setup kill-all-local-variables make-local-variable forms-file forms-number-of-fields forms-format-list forms-field-sep forms-read-only forms-multi-line forms-forms-scroll forms-forms-jump fmakunbound forms-new-record-filter eval-current-buffer error "'forms-file' has not been set" "'forms-number-of-fields' has not been set" 0 "'forms-number-of-fields' must be > 0" "'forms-field-sep' is not a string" 1 string= "'forms-multi-line' is equal to 'forms-field-sep'" "'forms-multi-line' must be nil or a one-character string" forms--number-of-markers forms--markers forms--process-format-list forms--format forms--make-format forms--parser forms--make-parser forms--new-record-filter fboundp boundp forms--modified-record-filter forms-modified-record-filter forms--dynamic-text forms-fields nil buffer-read-only buffer-file-name auto-save-mode erase-buffer forms--file-buffer forms--total-records forms--current-record forms--the-record-list forms--search-rexexp forms-mode-map make-keymap forms--mode-commands forms--change-commands find-file-noselect ro bury-buffer count-lines t forms-mode major-mode "Forms" mode-name minor-mode-alist forms--set-minor-mode forms--set-keymaps set-buffer-modified-p revert-buffer-function forms-revert-buffer forms-jump-record run-hooks forms-mode-hooks forms--help] 3))
  70. (defun forms--process-format-list nil "\
  71. Validate forms-format-list and set some global variables." (byte-code "ÀÁÂ\"ˆ\n„ÃÄ!ˆ\n<„ÃÅ!ˆÆ\nƉ    \nË\nƒ³Ì\n!Í\n!‰9ƒGÐ!ƒGÑ!;„£Ò!ƒÆX„cVƒkÃÔ#ˆTVƒ£‚£<ƒ›ÕÌ!!„£ÃÖ×Ì!!\"ˆ‚£ÃØ×!\"ˆ\nÙ\nCË#*‚$+ÀÚÂ\"ˆÛ\n!ÀÜÂÇ#ˆÝË\"‰‡" [forms--debug "forms-forms-list before 1st pass:\n" forms-format-list error "'forms-format-list' has not been set" "'forms-format-list' is not a list" 0 forms--number-of-markers field-num this-item the-list nil car-safe cdr-safe rem el boundp eval numberp forms-number-of-fields "Forms error: field number %d out of range 1..%d" fboundp "Forms error: not a function: %s" prin1-to-string "Invalid element in 'forms-format-list': %s" append "forms-forms-list after 1st pass:\n" forms--concat-adjacent "forms-forms-list after 2nd pass:\n" make-vector forms--markers] 6))
  72. (defun forms--make-format nil "\
  73. Generate format function for forms" (byte-code "À    !ÃÂ!‡" [forms--format-maker forms-format-list forms--format forms--debug] 2))
  74. (defun forms--format-maker (the-format-list) "\
  75. Returns the parser function for forms" (byte-code "ÀÂÃÄÂÅÆ\"\"\")‡" [0 the-marker append (lambda (arg) (setq forms--dynamic-text nil)) apply mapcar forms--make-format-elt the-format-list] 7))
  76. (fset (quote forms--make-format-elt) (quote (lambda (el) (byte-code ";ƒ\nÁDC‡Â!ƒ!ÃÄÆFÁÇÈSEDDT‡<…/ÉÊDCËÌFC‡" [el insert numberp aset forms--markers the-marker (point-marker) elt arg let the-dyntext (insert the-dyntext) (setq forms--dynamic-text (append forms--dynamic-text (list the-dyntext)))] 5))))
  77. (defun forms--concat-adjacent (the-list) "\
  78. Concatenate adjacent strings in the-list and return the resulting list" (byte-code ":ƒ'ÁA!@;ƒ!\n@;ƒ!@\n@P\nAB‚%@\nB)‡‡" [the-list forms--concat-adjacent the-rest] 2))
  79. (defun forms--make-parser nil "\
  80. Generate parser function for forms" (byte-code "À    !ÃÂ!‡" [forms--parser-maker forms-format-list forms--parser forms--debug] 2))
  81. (defun forms--parser-maker (the-format-list) "\
  82. Returns the parser function for forms" (byte-code "À‰‰ÄÀC\"ÆÀÄÇÈÄÉÊ    \"\"\"E+‡" [nil the--format-list seen-text the-field append the-format-list lambda (let (here) (goto-char (point-min))) apply mapcar forms--make-parser-elt] 9))
  83. (byte-code "ÀÁMˆÂÃM‡" [forms--make-parser-elt (lambda (el) (byte-code ";ƒA    ƒ)ÂÃÄÅÆCÇ#DÈÉEEÊË    SÌÍÎÏGEEFE‚;ÃÄÐÑ!DDÈÒEEÓGDDÔÖ‡×!ƒU    ƒQÈØ    #‡և„e    …„ÊË    SÙFC‡<…„    ƒ~ÚÛÜÝÊË    SÞFß%C‚àÔÖ‡" [el the-field (setq here (point)) if not append (search-forward) (nil t nil) error "Parse error: cannot find \"%s\"" aset the-recordv buffer-substring here - (point) looking-at regexp-quote "Parse error: not looking at \"%s\"" forward-char t seen-text nil numberp "Cannot parse adjacent fields %d and %d" (buffer-substring (point) (point-max)) list let ((here (point)) (the-dyntext (car-safe forms--dynamic-text))) (if (not (search-forward the-dyntext nil t nil)) (error "Parse error: cannot find \"%s\"" the-dyntext)) (buffer-substring here (- (point) (length the-dyntext))) (setq forms--dynamic-text (cdr-safe forms--dynamic-text)) ((let ((the-dyntext (car-safe forms--dynamic-text))) (if (not (looking-at (regexp-quote the-dyntext))) (error "Parse error: not looking at \"%s\"" the-dyntext)) (forward-char (length the-dyntext)) (setq forms--dynamic-text (cdr-safe forms--dynamic-text))))] 10)) forms--set-minor-mode (lambda nil (byte-code "…Á‰‡" [forms-read-only " View" minor-mode-alist] 2))] 2)
  84. (defun forms--set-keymaps nil "\
  85. Set the keymaps used in this mode." (byte-code "ƒÁ\n!‡Áà!ˆÄÅ Æ\n#ˆÄÅ ÇÈ#‡" [forms-read-only use-local-map forms-mode-map make-sparse-keymap define-key current-local-map "" "    " forms-next-field] 4))
  86. (defun forms--mode-commands (map) "\
  87. Fill map with all commands." (byte-code "À    ÂÃ#ˆÀ    ÄÅ#ˆÀ    ÆÇ#ˆÀ    ÈÉ#ˆÀ    ÊË#ˆÀ    ÌÍ#ˆÀ    ÎÅ#ˆÀ    ÏÐ#ˆÀ    ÑÒ#ˆÀ    ÓÔ#ˆÀ    ÕÖ#ˆÀ    ×Ø#ˆÀ    ÙÚ#ˆÀ    ÛÜ#ˆÀ    ÝÞ#ˆÀ    ßÐ#ˆÀ    àá#ˆÀ    â##ˆÀ    äå#ˆÀ    æ'#‡" [define-key map "    " forms-next-field " " forms-next-record "d" forms-delete-record "e" forms-edit-mode "i" forms-insert-record "j" forms-jump-record "n" "p" forms-prev-record "q" forms-exit "s" forms-search "v" forms-view-mode "x" forms-exit-no-save "<" forms-first-record ">" forms-last-record "?" describe-mode "" "" ESC-prefix "" ctl-x-map "" universal-argument "" help-map] 4))
  88. (defun forms--change-commands nil "\
  89. Localize some commands." (byte-code "ÀÁ!„ÁÂKMˆÂÃMˆÀÄ!„ÄÅKMˆÅÆMˆÀÇ!„-ÇÈKMˆÈÉMˆÀÊ!„<ÊËKMˆËÌMˆÀÍ!?…KÍÎKMˆÎÏM‡" [fboundp forms--scroll-down scroll-down (lambda (&optional arg) (interactive "P") (byte-code "ƒ     ƒ  !‡Ä !‡" [forms--mode-setup forms-forms-scroll forms-prev-record arg forms--scroll-down] 2)) forms--scroll-up scroll-up (lambda (&optional arg) (interactive "P") (byte-code "ƒ     ƒ  !‡Ä !‡" [forms--mode-setup forms-forms-scroll forms-next-record arg forms--scroll-up] 2)) forms--beginning-of-buffer beginning-of-buffer (lambda nil (interactive) (byte-code "ƒ     ƒ  ‡Ã ‡" [forms--mode-setup forms-forms-jump forms-first-record forms--beginning-of-buffer] 1)) forms--end-of-buffer end-of-buffer (lambda nil (interactive) (byte-code "ƒ     ƒ  ‡Ã ‡" [forms--mode-setup forms-forms-jump forms-last-record forms--end-of-buffer] 1)) forms--save-buffer save-buffer (lambda (&optional arg) (interactive "p") (byte-code "ƒÁ ˆŠ\nqˆÃ !)‡Ã !‡" [forms--mode-setup forms--checkmod forms--file-buffer forms--save-buffer arg] 2))] 2))
  90. (defun forms--help nil "\
  91. Initial help." (byte-code "ƒÁÂ!‡ÁÃ!‡" [forms-read-only message "SPC:next   DEL:prev   <:first   >:last   ?:help   q:exit" "C-c n:next   C-c p:prev   C-c <:first   C-c >:last   C-c ?:help   C-c q:exit"] 2))
  92. (defun forms--trans (subj arg rep) "\
  93. Translate in SUBJ all chars ARG into char REP. ARG and REP should
  94.  be single-char strings." (byte-code "À    G !Ä!    Ê        #‰    …-        Iˆ    T    ‚,‡" [0 subj regexp-quote arg string-to-char rep k re x i string-match] 5))
  95. (fset (quote forms--exit) (quote (lambda (query &optional save) (byte-code "À    !àˆ ƒÅ    !ƒŠ    qˆÆ ˆ)Š    qˆÇ ˆÈp!ˆ)É\n!ƒ8 …>Ê ˆËÌ!‚>Ç ˆÈp!)‡" [buffer-name forms--file-buffer buf forms--checkmod save buffer-modified-p save-buffer delete-auto-save-file-if-necessary kill-buffer get-buffer beep message "Problem saving buffers?"] 2))))
  96. (defun forms--get-record nil "\
  97. Fetch the current record from the file buffer." (byte-code "n„ÀÁ!ˆ`àˆÄ\n`\"\nbˆ)‡" [forward-line 0 here end-of-line buffer-substring] 3))
  98. (defun forms--show-record (the-record) "\
  99. Format THE-RECORD according to forms-format-list,
  100.  and display it in the current buffer." (byte-code "ÀÁÀ\nGƒÈ    Ê#ˆ    \nP    Ë\n    #‰ƒ@     O Í C\" \\)‚,ÀРˆGU„xÒ ˆÓÔG#ˆGWƒxÍÕGZÖ\"\"ÍÀCÀ#!ˆebˆÙÀ!ˆÛÝR‰‡" [nil 0 forms-field-sep field-sep-length found-pos start-pos the-result forms-multi-line forms--trans the-record "\n" string-match ent append forms--the-record-list buffer-read-only erase-buffer forms-number-of-fields beep message "Record has %d fields instead of %d." make-list "" forms-fields forms--format set-buffer-modified-p forms-read-only " " forms--current-record "/" forms--total-records mode-line-process] 5))
  101. (defun forms--parse-form nil "\
  102. Parse contents of form into list of strings." (byte-code "À !  ˆ)ƒ(ÂÇ    \"!ÉÀ\"A)‚,É    À\")‡" [nil the-recordv vconcat forms--the-record-list forms--dynamic-text forms--parser forms--modified-record-filter [nil] the-fields append] 3))
  103. (defun forms--update nil "\
  104. Update current record with contents of form. As a side effect: sets
  105. forms--the-record-list ." (byte-code "ƒ ÁÂ!ˆÃ ‡ÄÆ ÈÉ\n# ƒ%ÌÍ #ˆÎÍ\"ƒ5ÁÏ!ˆÃ ‚NŠqˆÑcˆÒÓ!ˆÔÄ!ˆcˆÒÓ!ˆ)Ä)‡" [forms-read-only message "Read-only buffer!" beep nil the-record forms--parse-form forms--the-record-list mapconcat identity forms-field-sep forms-multi-line forms--trans "\n" string-match "Multi-line fields in this record - update refused!" forms--file-buffer "*" forward-line 0 kill-line] 4))
  106. (defun forms--checkmod nil "\
  107. Check if this form has been modified, and call forms--update if so." (byte-code "ÀÁ!…`àˆÄÁ!ˆ\nb)‡" [buffer-modified-p nil here forms--update set-buffer-modified-p] 2))
  108. (defun forms-find-file (fn) "\
  109. Visit file FN in forms mode" (interactive "fForms file: ") (byte-code "À    !ˆ\n† ÃÄ!‡" [find-file-read-only fn forms--mode-setup forms-mode t] 2))
  110. (defun forms-find-file-other-window (fn) "\
  111. Visit file FN in form mode in other window" (interactive "fFbrowse file in other window: ") (byte-code "À    !ˆÂ ˆ †ÄÅ!‡" [find-file-other-window fn eval-current-buffer forms--mode-setup forms-mode t] 2))
  112. (defun forms-exit (query) "\
  113. Normal exit. Modified buffers are saved." (interactive "P") (byte-code "À    Â\"‡" [forms--exit query t] 3))
  114. (defun forms-exit-no-save (query) "\
  115. Exit without saving buffers." (interactive "P") (byte-code "À    Â\"‡" [forms--exit query nil] 3))
  116. (defun forms-next-record (arg) "\
  117. Advance to the ARGth following record." (interactive "P") (byte-code "À    Â !\\Ä\"‡" [forms-jump-record forms--current-record prefix-numeric-value arg t] 4))
  118. (defun forms-prev-record (arg) "\
  119. Advance to the ARGth previous record." (interactive "P") (byte-code "À    Â !ZÄ\"‡" [forms-jump-record forms--current-record prefix-numeric-value arg t] 4))
  120. (defun forms-jump-record (arg &optional relative) "\
  121. Jump to a random record." (interactive "NRecord number: ") (byte-code "    V„ ÂXƒàˆ ?…vÅÆ    #‡Ç ˆZ    \nˊ qˆÍÂ!ˆ ƒO\nÂU„[    \nÍ\n![\\\\    ‚[    \nÎ![\\\\    Ï )!ˆ    U?…u    àˆÅР   \"*‡" [arg forms--total-records 0 beep relative message "Record number %d out of range 1..%d" forms--checkmod forms--current-record cur disp forms--show-record forms--file-buffer forward-line goto-line forms--get-record "Stuck at record %d."] 5))
  122. (defun forms-first-record nil "\
  123. Jump to first record." (interactive) (byte-code "ÀÁ!‡" [forms-jump-record 1] 2))
  124. (defun forms-last-record nil "\
  125. Jump to last record. As a side effect: re-calculates the number
  126.  of records in the data file." (interactive) (byte-code "ŠqˆÁed\")‰ U„Ä ˆ\nÅÆ \"ˆ)Ç !‡" [forms--file-buffer count-lines numrec forms--total-records beep message "Number of records reset to %d." forms-jump-record] 4))
  127. (defun forms-view-mode nil "\
  128. Visit buffer read-only." (interactive) (byte-code "?… Á ˆÂà‡" [forms-read-only forms--checkmod t forms-mode] 1))
  129. (defun forms-edit-mode nil "\
  130. Make form suitable for editing, if possible." (interactive) (byte-code "Š\nqˆ )ƒÄÅÆ\"ˆÈ ˆ‚ÉÊ    \"?…%Ë )‡" [forms-read-only ro forms--file-buffer buffer-read-only t message "No write access to \"%s\"" forms-file beep nil equal forms-mode] 3))
  131. (defun forms-insert-record (arg) "\
  132. Create a new record before the current one. With ARG: store the
  133.  record after the current one.
  134.  If a function forms-new-record-filter is defined, or forms-new-record-filter
  135.  contains the name of a function, it is called to
  136.  fill (some of) the fields with default values." (interactive "P") (byte-code "ƒ        T‚\n    Â‰Æ ˆƒ1È    TÊ\"  ! Ì Â\"A)‚7Í    Ê\"ÎÏ #ŠqˆÒ!ˆÓÔ!ˆ cˆÕÖ!ˆ)+TØ    !‡" [arg forms--current-record nil the-record the-list ln forms--checkmod forms--new-record-filter make-vector forms-number-of-fields "" the-fields append make-list mapconcat identity forms-field-sep forms--file-buffer goto-line open-line 1 forward-line 0 forms--total-records forms-jump-record] 4))
  137. (defun forms-delete-record (arg) "\
  138. Deletes a record. With ARG: don't ask." (interactive "P") (byte-code "À ˆ    „ÂÃ!ƒ1 ŠqˆÇ!ˆÈÉ!ˆ)\nS\n \nVƒ,\nË !ˆ)ÌÍ!‡" [forms--checkmod arg y-or-n-p "Really delete this record? " forms--current-record ln forms--file-buffer goto-line kill-line 1 forms--total-records forms-jump-record message ""] 2))
  139. (defun forms-search (regexp) "\
  140. Search REGEXP in file buffer." (interactive (byte-code "ÀÁ\n…\nÃ\nÄQÅQ!C‡" [read-string "Search for" forms--search-regexp " (" ")" ": "] 5)) (byte-code "À    Â\"ƒ     Ä ˆÅ‰‰    \nŠ qˆ`Ì ˆÍ    ÅÎ#„;bˆÏР   ÑQ!ˆÅ‚GÒ     Óe`\"T‰\n)ƒZ\nÕ    !ˆÍ    ÅÎ#ˆ,    ‰‡" [equal regexp "" forms--search-regexp forms--checkmod nil forms-field-sep fld-sep here the-record the-line forms--file-buffer end-of-line re-search-forward t message "\"" "\" not found." forms--get-record count-lines forms--current-record forms--show-record] 4))
  141. (defun forms-revert-buffer (&optional arg noconfirm) "\
  142. Reverts current form to un-modified." (interactive "P") (byte-code "„\nÁÂ!…ÃÄ!ˆÅ!‡" [noconfirm yes-or-no-p "Revert form to unmodified? " set-buffer-modified-p nil forms-jump-record forms--current-record] 2))
  143. (defun forms-next-field (arg) "\
  144. Jump to ARG-th next field." (interactive "p") (byte-code "À`ÁÀÀUƒÇ‚\n\\Èɍ?…%\nÀHb,‡" [0 nil cnt there here i arg 1 done (byte-code "    W…,\nH‰ƒ% X„%S‰ÆXƒ% bˆÇÈÉ\"ˆT‰‚‡" [i forms--number-of-markers forms--markers there here cnt 0 throw done t] 4) forms--markers] 4))
  145. (defun forms-enumerate (the-fields) "\
  146. Take a quoted list of symbols, and set their values to the numbers
  147. 1, 2 and so on. Returns the higest number.
  148.  
  149. Usage: (setq forms-number-of-fields
  150.              (forms-enumerate
  151.               '(field1 field2 field2 ...)))" (byte-code "À\nƒ    TÃ\n!Å\n!     Lˆ)‚    )‡" [0 the-index the-fields car-safe el cdr-safe] 2))
  152. (defvar forms--debug nil "\
  153. *Enables forms-mode debugging if not nil.")
  154. (defun forms--debug (&rest args) "\
  155. Internal - debugging routine" (byte-code "…_Á ƒSÄ !Æ !;ƒ\nP‚O\nÇ!ÈQÉ!ƒ<Ê! \nÇ !ÌQ)‚A\nÍÌQÎ!ƒO\nÇK!ÌQ)‚ŠÏÐ!qˆdbˆ\nc*‡" [forms--debug nil ret args car-safe el cdr-safe prin1-to-string " = " boundp eval vel "\n" "<unbound>" fboundp get-buffer-create "*forms-mode debug*"] 3))
  156.