;ELC   
;;; Compiled
;;; in Emacs version 28.2
;;; with all optimizations.



(byte-code "\300\301\302\303\304\305%\210\306\307\310\311\312DD\313\314\315%\207" [custom-declare-group forms nil "Edit a file as a form to fill in." :group data custom-declare-variable forms-mode-hook funcall function #[0 "\300\207" [nil] 1 ""] "Hook run upon entering Forms mode." :type hook] 6)
#@36 Name of the file holding the data.
(defvar forms-file nil (#$ . 382))
#@36 List of formatting specifications.
(defvar forms-format-list nil (#$ . 458))
#@30 Number of fields per record.
(defvar forms-number-of-fields nil (#$ . 541))
(byte-code "\300\301\302\303\304DD\305\306\307%\207" [custom-declare-variable forms-check-number-of-fields funcall function #[0 "\300\207" [t] 1 ""] "If non-nil, warn about records with wrong number of fields." :type boolean] 6)
#@42 Field separator character (default TAB).
(defvar forms-field-sep "	" (#$ . 852))
#@131 Non-nil means: visit the file in view (read-only) mode.
This is set automatically if the file permissions don't let you write it.
(defvar forms-read-only nil (#$ . 940))
#@77 If not nil: use this character to separate multi-line fields (default C-k).
(defvar forms-multi-line "" (#$ . 1116))
(byte-code "\300\301\302\303\304DD\305\306\307%\210\300\310\302\303\311DD\312\306\307%\207" [custom-declare-variable forms-forms-scroll funcall function #[0 "\300\207" [nil] 1 #1=""] "Non-nil means replace scroll-up/down commands in Forms mode.\nThe replacement commands performs forms-next/prev-record." :type boolean forms-forms-jump #[0 "\300\207" [nil] 1 #1#] "Non-nil means redefine beginning/end-of-buffer in Forms mode.\nThe replacement commands performs forms-first/last-record."] 6)
#@169 The name of a function that is called after reading the data file.
This can be used to change the contents of the file to something more
suitable for forms processing.
(defvar forms-read-file-filter nil (#$ . 1733))
#@132 The name of a function that is called before writing the data file.
This can be used to undo the effects of `form-read-file-hook'.
(defvar forms-write-file-filter nil (#$ . 1956))
#@69 The name of a function that is called when a new record is created.
(defvar forms-new-record-filter nil (#$ . 2142))
#@72 The name of a function that is called when a record has been modified.
(defvar forms-modified-record-filter nil (#$ . 2265))
#@155 List with fields of the current forms.  First field has number 1.
This variable is for use by the filter routines only.
The contents may NOT be modified.
(defvar forms-fields nil (#$ . 2397))
(byte-code "\300\301\302\303\304DD\305\306\307%\210\300\310\302\303\311DD\312\306\307%\210\300\313\302\303\314DD\315\306\316%\210\300\317\302\303\320DD\321\306\316%\207" [custom-declare-variable forms-use-text-properties funcall function #[0 "\300\207" [t] 1 #1=""] "Non-nil means to use text properties." :type boolean forms-insert-after #[0 "\300\207" [nil] 1 #1#] "Non-nil means: inserts of new records go after current record.\nAlso, initial position is at last record." forms-ro-face #[0 "\300\207" [default] 1 #1#] "The face (a symbol) that is used to display read-only text on the screen." face forms-rw-face #[0 "\300\207" [region] 1 #1#] "The face (a symbol) that is used to display read-write text on the screen."] 6)
#@35 Buffer which holds the file data.
(defvar forms--file-buffer nil (#$ . 3323))
#@43 Total number of records in the data file.
(defvar forms--total-records 0 (#$ . 3407))
#@47 Number of the record currently on the screen.
(defvar forms--current-record 0 (#$ . 3499))
#@25 Keymap for form buffer.
(defvar forms-mode-map nil (#$ . 3596))
#@38 Keymap for form buffer in view mode.
(defvar forms-mode-ro-map nil (#$ . 3666))
#@38 Keymap for form buffer in edit mode.
(defvar forms-mode-edit-map nil (#$ . 3752))
#@30 Field markers in the screen.
(defvar forms--markers nil (#$ . 3840))
#@62 Dynamic texts (resulting from function calls) on the screen.
(defvar forms--dyntexts nil (#$ . 3915))
#@65 List of strings of the current record, as parsed from the file.
(defvar forms--the-record-list nil (#$ . 4023))
#@45 Last regexp used by forms-search functions.
(defvar forms--search-regexp nil (#$ . 4141))
#@21 Formatting routine.
(defvar forms--format nil (#$ . 4237))
#@23 Forms parser routine.
(defvar forms--parser nil (#$ . 4302))
#@45 To keep track of `forms-mode' being set-up.
(defvar forms--mode-setup nil (#$ . 4369))
(make-variable-buffer-local 'forms--mode-setup)
#@58 Array that holds dynamic texts to insert between fields.
(defvar forms--dynamic-text nil (#$ . 4510))
#@57 Array with the order in which the fields are displayed.
(defvar forms--elements nil (#$ . 4618))
#@54 Face used to represent read-only data on the screen.
(defvar forms--ro-face nil (#$ . 4721))
#@55 Face used to represent read-write data on the screen.
(defvar forms--rw-face nil (#$ . 4820))
#@18 

(fn FUNCTIONS)
(defalias 'forms--run-functions #[257 "\300!\203	 \211 \207\301\302\"\207" [functionp mapc funcall] 4 (#$ . 4920)])
#@764 Major mode to visit files in a field-structured manner using a form.

Commands:                        Equivalent keys in read-only mode:
 TAB            forms-next-field          TAB
 C-c TAB        forms-next-field
 C-c <          forms-first-record         <
 C-c >          forms-last-record          >
 C-c ?          describe-mode              ?
 C-c C-k        forms-delete-record
 C-c C-q        forms-toggle-read-only     q
 C-c C-o        forms-insert-record
 C-c C-l        forms-jump-record          l
 C-c C-n        forms-next-record          n
 C-c C-p        forms-prev-record          p
 C-c C-r        forms-search-reverse       r
 C-c C-s        forms-search-forward       s
 C-c C-x        forms-exit                 x

(fn &optional PRIMARY)
(defalias 'forms-mode #[256 "\211\204 \204\306 \210\307\310!\210\307\311!\210\307\312!\210\307\313!\210\307\314!\210\307\315!\210\307\316!\210\307\317!\210\307\320!\210\307\321!\210\307\301!\210\307\302!\210\307\303!\210\307\304!\210\322\211\322\211\307\323!\210\307\324!\210\325=\204c \326\327\330 \331Q!\203i \332 \210\202m \333\334!\210\204v \333\335!\210;\204\200 \333\336!\210	\203\231 	\247\203\222 	\337V\204\242 \333\340!\210\202\242 \n\203\242 \333\341!\210\n\204\252 \342 \210\203\320 ;\203\314 G\343=\203\314 \230\203\320 \333\344!\210\202\320 \333\345!\210\307\346!\210\347 \210\307\350!\210\307\351!\210\307\352!\210\353 \210\307\354!\210\355 \210\203\373 \356!\204\373 \333\357!\210\f\203	\356\f!\204	\333\360!\210\307\361!\210\307\362!\210\322@\363\322!\210)\322A\364 \210\325\307\365!\210\307\366!\210\f\203956\202A56\307\367!\210\307\370!\210\307\371!\210\307\372!\210\307\373!\210B\204]\374 \210\375C\376D\377\343!\210\201H !7	\n\211E\203\254r7q\210\325\201I  F\201J E!\210\211\204\226\201K \322!\210)\266\211\203\250\201L \201M \322\325$\210)\202\301\211\203\301r7q\210\201L \201M \322\325$\210))\266\322r7q\210\201N p!\210A\262\201O ed\")8\211\203\344\325\f\210\307\201G !\210\314\201P DCG\201Q  \210\201R  \210\201K \322!\2108\337U\203[\201S \201T !\203\"\201U \201V \"\202<\201U \201W 	\211\343U\2038\201X \202;\201Y $\201Z \201[ \201\\ !\201] \261\210\3439\325A\201K \322!\210\202~9\343W\203e\3439\201^ 9!\210\203y\201_  \210\202~\201`  \210\201a \201b \201c \"\210\201d  \207" [forms--mode-setup forms-read-file-filter forms-write-file-filter forms-new-record-filter forms-modified-record-filter enable-local-eval 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 forms-insert-after forms-use-text-properties nil forms-ro-face forms-rw-face t yes-or-no-p "Evaluate lisp code in buffer " buffer-name " to display forms? " eval-buffer error "`enable-local-eval' inhibits buffer evaluation" "Forms control file error: `forms-file' has not been set" "Forms control file error: `forms-field-sep' is not a string" 0 "Forms control file error: `forms-number-of-fields' must be a number > 0" "Forms control file error: `forms-number-of-fields' has not been set" forms--intuit-from-file 1 "Forms control file error: `forms-multi-line' is equal to `forms-field-sep'" "Forms control file error: `forms-multi-line' must be nil or a one-character string" forms--elements forms--process-format-list forms--format forms--markers forms--dyntexts forms--make-format forms--parser forms--make-parser functionp "Forms control file error: `forms-new-record-filter' is not a function" "Forms control file error: `forms-modified-record-filter' is not a function" forms-fields forms--dynamic-text set-visited-file-name erase-buffer forms--ro-face forms--rw-face forms--file-buffer forms--total-records forms--current-record forms--the-record-list forms--search-regexp forms--mode-commands forms-mode "Forms" cursor-intangible-mode change-major-mode-with-file-name buffer-read-only forms-mode-map major-mode mode-name read-file-filter inhibit-read-only minor-mode-alist find-file-noselect buffer-modified-p forms--run-functions set-buffer-modified-p add-hook write-file-functions bury-buffer count-lines " View" forms--set-keymaps forms--change-commands "GNU Emacs Forms Mode\n\n" file-exists-p format-message "No records available in file `%s'\n\n" "Creating new file `%s'\nwith %d field%s per record\n\n" "" "s" "Use " substitute-command-keys "\\[forms-insert-record]" " to create new records.\n" forms-jump-record forms-last-record forms-first-record run-mode-hooks forms-mode-hook forms-mode-hooks forms--help] 9 (#$ . 5062) nil])
(defalias 'forms--process-format-list #[0 "\204 \303\304!\210<\204 \303\305!\210\306	\307\"\307\310\307\203\305 \242\2439\2032 \311!\2032 J\262;\203U ;\203D P\262\202\277 \203O \312C\307#\262\202\277 \247\203\227 \310X\204f 	V\203l \303\313	#\210\nGY\203| \314\nS\"\202\202 \nSI\210T\262\203\221 \312C\307#\262\202\277 <\203\272 \315\242!\204\251 \303\316\242\"\210\203\264 \312C\307#\262\202\277 \303\317\"\210\262\210\202 \203\334 \312C\307#\247\203\334 \312\320C\307#\266\321\300\302\"\207" [forms-format-list forms-number-of-fields forms--elements error "Forms control file error: `forms-format-list' has not been set" "Forms control file error: `forms-format-list' is not a list" make-vector nil 0 boundp append "Forms format error: field number %d out of range 1..%d" vconcat fboundp "Forms format error: %S is not a function" "Forms format error: invalid element %S" "\n" forms--debug] 9])
#@39 Record start of modification command.
(defvar forms--iif-start nil (#$ . 10662))
#@56 Original properties of the character being overridden.
(defvar forms--iif-properties nil (#$ . 10749))
#@74 `insert-in-front-hooks' function for read-only segments.

(fn BEGIN END)
(defalias 'forms--iif-hook #[514 "\204	 \304`T!\305X\204 \306\305Z\307\"\2030 \310S!\311\312S\313\314\315F#\210)\316\317\320\"\207\321\211\207" [forms--iif-start forms--iif-properties inhibit-read-only forms--rw-face copy-marker 2 get-text-property read-only text-properties-at t set-text-properties face front-sticky (face) add-hook post-command-hook forms--iif-post-command-hook nil] 9 (#$ . 10858)])
#@54 `post-command-hook' function for read-only segments.
(defalias 'forms--iif-post-command-hook #[0 "\303\304\305\"\210\203 \306\307S\n#\210)\310\211\207" [forms--iif-start inhibit-read-only forms--iif-properties remove-hook post-command-hook forms--iif-post-command-hook t set-text-properties nil] 4 (#$ . 11352)])
#@72 Generate `forms--format' using the information in `forms-format-list'.
(defalias 'forms--make-format #[0 "\306\211\n\203' \307\310\311\312\313\314\313\315\316\"\"@\247?\205 \317\320#BB\321BBB\2022 \307\322\314\313\315\323\"\"BB\324	\325\"\324\325\"*\326\304!\207" [forms--dyntext forms--marker forms-use-text-properties forms-format-list forms--format forms--markers 0 lambda (arg) let ((inhibit-read-only t)) append apply mapcar forms--make-format-elt-using-text-properties ((add-text-properties (point-min) (1+ (point-min)) '(front-sticky (read-only cursor-intangible)))) ((remove-text-properties (1- (point)) (point) '(rear-nonsticky nil))) ((setq forms--iif-start nil)) (arg) forms--make-format-elt make-vector nil forms--debug forms--dyntexts] 10 (#$ . 11677)])
#@54 Helper routine to generate format function.

(fn EL)
(defalias 'forms--make-format-elt-using-text-properties #[257 "\211;\203# \302\303\304\305D\306BB\307\310\311\312\313TC\314TC\315$BBBBFC\207\211\247\203C \316\317\320\321\211T\322BBB\305\323\324SED\325BBBBC\207\211<\205m \302\326\304\305\320\327	\211TFD\330BB\307\331\311\332\313TC\333TC\334$BBBBFC\207" [forms--marker forms--dyntext set-text-properties (point) progn insert ((point)) list 'face forms--ro-face 'read-only append ('cursor-intangible) ('insert-in-front-hooks '(forms--iif-hook) 'rear-nonsticky '(face read-only insert-in-front-hooks cursor-intangible)) let ((here (point))) aset forms--markers ((point-marker)) elt arg ((or (= (point) here) (set-text-properties here (point) (list 'face forms--rw-face 'front-sticky '(face))))) (point) forms--dyntexts ((point)) 'face 'read-only ('cursor-intangible) ('insert-in-front-hooks '(forms--iif-hook) 'rear-nonsticky '(read-only face insert-in-front-hooks cursor-intangible))] 13 (#$ . 12461)])
#@54 Helper routine to generate format function.

(fn EL)
(defalias 'forms--make-format-elt #[257 "\211;\203\n \302DC\207\211\247\203\" \303\304\305BBB\302\306\307SEDDT\207\211<\2052 \302\303\310	FDC	T\207" [forms--marker forms--dyntext insert aset forms--markers ((point-marker)) elt arg forms--dyntexts] 6 (#$ . 13484)])
#@71 Generate `forms--parser' from the information in `forms-format-list'.
(defalias 'forms--make-parser #[0 "\203 \306\202# \307\211\310\311\307\312\313\314\315\316\317\320\316\f\307C\"\"\"BBBE+\321\305!\207" [forms-use-text-properties forms--dyntext forms--seen-text forms--field forms-format-list forms--parser forms--parser-using-text-properties nil 0 lambda let (here) (goto-char (point-min)) apply append mapcar forms--make-parser-elt forms--debug] 12 (#$ . 13815)])
#@59 Extract field info from forms when using text properties.
(defalias 'forms--parser-using-text-properties #[0 "\303\304\211GW\205K H\211\262b\210\305\306\"\203# 	\nH\304I\210\202D \307\306\"\211\262\203: 	\nH\310\"I\210\202D 	\nH\310d\"I\210T\262\202 \207" [forms--markers forms--recordv forms--elements 0 nil get-text-property read-only next-single-property-change buffer-substring-no-properties] 8 (#$ . 14295)])
#@60 Helper routine to generate forms parser function.

(fn EL)
(defalias 'forms--make-parser-elt #[257 "\211;\203@ \203) \303\304\305\306\307BBD\310\311EE\312\313S\314\315\316\317	GEEFE\202; \304\305\320\321!DD\310\322EE\323GDD\324\325\207\211\247\203S \203O \310\326#\207\211\325\207\211\204e \205\230 \312\313S\327BBBC\207\211<\205\230 \203\205 \330\331\302\332\333\nEDD\334\312\313S\335BBBFC\202\221 \330\302\332\333\nEDC\336BBC\nT\324\325\207" [forms--field forms--seen-text forms--dyntext (setq here (point)) if not search-forward (nil t nil) error "Parse error: cannot find `%s'" aset forms--recordv buffer-substring-no-properties here - (point) looking-at regexp-quote "Parse error: not looking at `%s'" forward-char t nil "Cannot parse adjacent fields %d and %d" ((buffer-substring-no-properties (point) (point-max))) let (here (point)) aref forms--dyntexts (if (not (search-forward forms--dyntext nil t nil)) (error "Parse error: cannot find `%s'" forms--dyntext)) ((buffer-substring-no-properties here (- (point) (length forms--dyntext)))) ((if (not (looking-at (regexp-quote forms--dyntext))) (error "Parse error: not looking at `%s'" forms--dyntext)) (forward-char (length forms--dyntext)))] 11 (#$ . 14732)])
#@62 Get number of fields and a default form using the data file.
(defalias 'forms--intuit-from-file #[0 "\204S \306	!\204 \307\310!\210\202S \311	!\312r\nq\210\313\314\f!\210)eb\210\315 )\262\316\n!\210\317\312G\320\321#\211\262\203N T\211\\\262\2027 \266)\266\322	\323E\317\211T\211\262X\205t \324\325\326\"\327E\"\202Z \207" [forms-number-of-fields forms-file forms--file-buffer forms-read-file-filter read-file-filter inhibit-read-only file-exists-p error "Need existing file or explicit `forms-number-of-fields'" find-file-noselect nil t forms--run-functions forms--get-record kill-buffer 0 1 string-match "Forms file \"" "\".\n\n" append format "%4d: " "\n" forms-field-sep forms-format-list] 9 (#$ . 15977)])
#@36 Set the keymaps used in this mode.
(defalias 'forms--set-keymaps #[0 "\303\203	 	\202\n \n!\207" [forms-read-only forms-mode-ro-map forms-mode-edit-map use-local-map] 2 (#$ . 16726)])
#@30 Fill the Forms mode keymaps.
(defalias 'forms--mode-commands #[0 "\303 \304\305\306#\210\304\307\310#\210\304\311\312#\210\304\313\314#\210\304\315\316#\210\304\317\320#\210\304\321\322#\210\304\323\324#\210\304\325\326#\210\304\327\330#\210\304\331\332#\210\304\333\334#\210\304\335\322#\210\303 \336	!\210\304	\337#\210\304	\340\312#\210\304	\341\316#\210\304	\342\320#\210\304	\343\322#\210\304	\344\324#\210\304	\345\326#\210\304	\346\330#\210\304	\331\332#\210\304	\333\334#\210\304	\347\350#\210\304	\351\320#\210\352	!\210\353	!\210\303 \304\n\337#\210\352\n!\210\354\n!\207" [forms-mode-map forms-mode-ro-map forms-mode-edit-map make-keymap define-key "	" forms-next-field "" forms-delete-record "" forms-toggle-read-only "" forms-insert-record "\f" forms-jump-record "" forms-next-record "" forms-prev-record "" forms-search-backward "" forms-search-forward "" forms-exit "<" forms-first-record ">" forms-last-record "" suppress-keymap "" "q" "l" "n" "p" "r" "s" "x" "?" describe-mode " " forms--mode-commands1 forms--mode-menu-ro forms--mode-menu-edit] 4 (#$ . 16917)])
#@12 

(fn MAP)
(defalias 'forms--mode-menu-ro #[257 "\300\301\302\303\302!B#\210\300\304\305#\210\300\306\307#\210\300\310\311#\210\300\312\313#\210\300\314\315#\210\300\316\317#\210\300\320\321#\210\300\322\323#\210\300\324\325#\210\300\326\327#\210\300\330\331#\210\300\332\333#\210\300\334\335#\210\300\336\337#\210\300\340\341#\210\300\342\343#\210\300\344\345#\210\300\346\347#\210\300\350\351#\210\352\353\354\355#\210\352\356\354\357#\207" [define-key [menu-bar forms] "Forms" make-sparse-keymap [menu-bar forms menu-forms-exit] ("Exit Forms Mode" . forms-exit) [menu-bar forms menu-forms-sep1] ("----") [menu-bar forms menu-forms-save] ("Save Data" . forms-save-buffer) [menu-bar forms menu-forms-print] ("Print Data" . forms-print) [menu-bar forms menu-forms-describe] ("Describe Mode" . describe-mode) [menu-bar forms menu-forms-toggle-ro] ("Toggle View/Edit" . forms-toggle-read-only) [menu-bar forms menu-forms-jump-record] ("Jump" . forms-jump-record) [menu-bar forms menu-forms-search-backward] ("Search Backward" . forms-search-backward) [menu-bar forms menu-forms-search-forward] ("Search Forward" . forms-search-forward) [menu-bar forms menu-forms-delete-record] ("Delete" . forms-delete-record) [menu-bar forms menu-forms-insert-record] ("Insert" . forms-insert-record) [menu-bar forms menu-forms-sep2] ("----") [menu-bar forms menu-forms-last-record] ("Last Record" . forms-last-record) [menu-bar forms menu-forms-first-record] ("First Record" . forms-first-record) [menu-bar forms menu-forms-prev-record] ("Previous Record" . forms-prev-record) [menu-bar forms menu-forms-next-record] ("Next Record" . forms-next-record) [menu-bar forms menu-forms-sep3] ("----") [menu-bar forms menu-forms-prev-field] ("Previous Field" . forms-prev-field) [menu-bar forms menu-forms-next-field] ("Next Field" . forms-next-field) put forms-insert-record menu-enable (not forms-read-only) forms-delete-record (not forms-read-only)] 7 (#$ . 18031)])
#@12 

(fn MAP)
(defalias 'forms--mode-menu-edit #[257 "\300\301\302\303\302!B#\210\300\304\305#\210\300\306\307#\210\300\310\311#\210\300\312\313#\210\300\314\315#\210\300\316\317#\210\300\320\321#\210\300\322\323#\210\300\324\325#\210\300\326\327#\210\300\330\331#\210\300\332\333#\210\300\334\335#\210\300\336\337#\210\300\340\341#\210\300\342\343#\210\300\344\345#\210\300\346\347#\210\300\350\351#\210\352\353\354\355#\210\352\356\354\357#\207" [define-key [menu-bar forms] "Forms" make-sparse-keymap [menu-bar forms menu-forms-edit--exit] ("Exit" . forms-exit) [menu-bar forms menu-forms-edit-sep1] ("----") [menu-bar forms menu-forms-edit-save] ("Save Data" . forms-save-buffer) [menu-bar forms menu-forms-edit-print] ("Print Data" . forms-print) [menu-bar forms menu-forms-edit-describe] ("Describe Mode" . describe-mode) [menu-bar forms menu-forms-edit-toggle-ro] ("Toggle View/Edit" . forms-toggle-read-only) [menu-bar forms menu-forms-edit-jump-record] ("Jump" . forms-jump-record) [menu-bar forms menu-forms-edit-search-backward] ("Search Backward" . forms-search-backward) [menu-bar forms menu-forms-edit-search-forward] ("Search Forward" . forms-search-forward) [menu-bar forms menu-forms-edit-delete-record] ("Delete" . forms-delete-record) [menu-bar forms menu-forms-edit-insert-record] ("Insert" . forms-insert-record) [menu-bar forms menu-forms-edit-sep2] ("----") [menu-bar forms menu-forms-edit-last-record] ("Last Record" . forms-last-record) [menu-bar forms menu-forms-edit-first-record] ("First Record" . forms-first-record) [menu-bar forms menu-forms-edit-prev-record] ("Previous Record" . forms-prev-record) [menu-bar forms menu-forms-edit-next-record] ("Next Record" . forms-next-record) [menu-bar forms menu-forms-edit-sep3] ("----") [menu-bar forms menu-forms-edit-prev-field] ("Previous Field" . forms-prev-field) [menu-bar forms menu-forms-edit-next-field] ("Next Field" . forms-next-field) put forms-insert-record menu-enable (not forms-read-only) forms-delete-record (not forms-read-only)] 7 (#$ . 20004)])
#@42 Helper routine to define keys.

(fn MAP)
(defalias 'forms--mode-commands1 #[257 "\300\301\302#\210\300\303\304#\210\300\305\306#\210\300\307\310#\210\300\311\312#\210\300\313\314#\210\300\315\304#\207" [define-key "	" forms-next-field [S-tab] forms-prev-field [next] forms-next-record [prior] forms-prev-record [begin] forms-first-record [last] forms-last-record [backtab]] 5 (#$ . 22064)])
#@40 Localize some commands for Forms mode.
(defalias 'forms--change-commands #[0 "\203 \303\304\305\"\210\303\306\307\"\210\303\310\305\"\210\303\311\307\"\210	\203& \303\312\313\"\210\303\314\315\"\210\303\316\317\"\210\320\302!\210\321\322\207" [forms-forms-scroll forms-forms-jump revert-buffer-function local-set-key [remap scroll-up] forms-next-record [remap scroll-down] forms-prev-record [remap scroll-up-command] [remap scroll-down-command] [remap beginning-of-buffer] forms-first-record [remap end-of-buffer] forms-last-record "" forms-save-buffer make-local-variable forms--revert-buffer t] 3 (#$ . 22468)])
#@30 Initial help for Forms mode.
(defalias 'forms--help #[0 "\300\301\302\303!\"\207" [message "%s" substitute-command-keys "\\[forms-next-record]:next   \\[forms-prev-record]:prev   \\[forms-first-record]:first   \\[forms-last-record]:last   \\[describe-mode]:help"] 4 (#$ . 23093)])
#@110 Translate in SUBJ all chars ARG into char REP.
ARG and REP should be single-char strings.

(fn SUBJ ARG REP)
(defalias 'forms--trans #[771 "\300\301!\302!\303#\211\262\205 I\210T\262\202 \207" [0 regexp-quote string-to-char string-match] 10 (#$ . 23381)])
#@62 Internal exit from forms mode function.

(fn &optional SAVE)
(defalias 'forms--exit #[256 "\301!\302 \210\203 \303!\203 \304 \210rq\210\305 \210\306p!\210)\307!\2030 \2056 \310\311\301!\"\207\305 \210\306p!\207" [forms--file-buffer buffer-name forms--checkmod buffer-modified-p forms-save-buffer delete-auto-save-file-if-necessary kill-buffer get-buffer error "Problem saving buffer %s"] 6 (#$ . 23657)])
#@48 Fetch the current record from the file buffer.
(defalias 'forms--get-record #[0 "n\204 \300\301!\210`\301\210\302`\"b\210\207" [beginning-of-line nil buffer-substring-no-properties] 4 (#$ . 24077)])
#@74 Format THE-RECORD and display it in the current buffer.

(fn THE-RECORD)
(defalias 'forms--show-record #[257 "\306\307\306G	\203 \310	\311#\210P\262\312#\211\262\2034 O\313C\"\262\\\262\210\202 \266\306\f\203G \314\315ed\306#\210)\316 \210\nGU\204s \203_ \317\320\nG#\210\nGW\203s \313\n\321\nGZ\322\"\"\313\306C\n\306#\n!\210eb\210\323\306!\210\324\325!\326\325!R\211\207" [forms-field-sep forms-multi-line forms--the-record-list buffer-read-only forms-use-text-properties inhibit-read-only nil 0 forms--trans "\n" string-match append t set-text-properties erase-buffer message "Warning: this record has %d fields instead of %d" make-list "" set-buffer-modified-p " " int-to-string "/" forms-number-of-fields forms-check-number-of-fields forms-fields forms--format forms-read-only forms--current-record forms--total-records mode-line-process] 9 (#$ . 24286)])
#@46 Parse contents of form into list of strings.
(defalias 'forms--parse-form #[0 "\305\306	!\n \210)\f\203# \306\307\"\f!\262\310\305\"A\262\202' \310\305\")\207" [forms--recordv forms--the-record-list forms--dynamic-text forms--parser forms-modified-record-filter nil vconcat [nil] append] 4 (#$ . 25203)])
#@95 Update current record with contents of form.
As a side effect: sets `forms--the-record-list'.
(defalias 'forms--update #[0 "\203 \306\307!\210\310\311 \312\313	\n#\262\314\n!\312\313	\315#\310\316\317#)\266\203\203- \306\320!\210\f\2037 \321\322\f#\210\323\322\"\203B \306\324!\210rq\210\325 \326 |\210\211c\210\327 )\207" [forms-read-only forms--the-record-list forms-field-sep inhibit-changing-match-data forms-multi-line forms--file-buffer error "Buffer is read-only" nil forms--parse-form mapconcat identity regexp-quote "" t string-match "Field separator occurs in record - update refused" forms--trans "\n" string-search "Multi-line fields in this record - update refused" line-beginning-position line-end-position beginning-of-line] 8 (#$ . 25524)])
#@69 Check if this form has been modified, and call forms--update if so.
(defalias 'forms--checkmod #[0 "\300\301!\205 `\302 \210\303\301!\210\211b\262\207" [buffer-modified-p nil forms--update set-buffer-modified-p] 3 (#$ . 26298)])
#@38 Visit a file in Forms mode.

(fn FN)
(defalias 'forms-find-file #[257 "\303\211\304!\210\n\206 \305\303!*\207" [enable-local-variables enable-local-eval forms--mode-setup t find-file-read-only forms-mode] 3 (#$ . 26535) "fForms file: "])
#@54 Visit a file in Forms mode in other window.

(fn FN)
(defalias 'forms-find-file-other-window #[257 "\303\211\304!\210\n\206 \305\303!*\207" [enable-local-variables enable-local-eval forms--mode-setup t find-file-other-window forms-mode] 3 (#$ . 26783) "fFbrowse file in other window: "])
#@59 Normal exit from Forms mode.  Modified buffers are saved.
(defalias 'forms-exit #[0 "\300\301!\207" [forms--exit t] 2 (#$ . 27081) nil])
#@46 Exit from Forms mode without saving buffers.
(defalias 'forms-exit-no-save #[0 "\300\301!\207" [forms--exit nil] 2 (#$ . 27224) nil])
#@50 Advance to the ARGth following record.

(fn ARG)
(defalias 'forms-next-record #[257 "\301\302!\\\303\"\207" [forms--current-record forms-jump-record prefix-numeric-value t] 5 (#$ . 27364) "P"])
#@49 Advance to the ARGth previous record.

(fn ARG)
(defalias 'forms-prev-record #[257 "\301\302!Z\303\"\207" [forms--current-record forms-jump-record prefix-numeric-value t] 5 (#$ . 27566) "P"])
#@197 Goto record number RN.
If CURRENT is provided, it specifies the current record and can be used
to speed up access to RN.  Returns the number of records missing, if any.

(fn RN &optional CURRENT)
(defalias 'forms--goto-record #[513 "\211\203	 Zy\207eb\210Sy\207" [] 4 (#$ . 27767)])
#@55 Jump to a random record.

(fn ARG &optional RELATIVE)
(defalias 'forms-jump-record #[513 "V\204\f \303X\203 \304\204 \305\306#\202 \307!\210\310 \210	\311r\nq\210\312 \210\313\2052 \"Z\262\314 )!\210	U?\205H \211\304\315\"\207" [forms--total-records forms--current-record forms--file-buffer 0 error message "Record number %d out of range 1..%d" "" forms--checkmod forms--show-record beginning-of-line forms--goto-record forms--get-record "Stuck at record %d"] 8 (#$ . 28059) "NRecord number: "])
#@23 Jump to first record.
(defalias 'forms-first-record #[0 "\300\301!\207" [forms-jump-record 1] 2 (#$ . 28580) nil])
#@94 Jump to last record.
As a side effect: re-calculates the number of records in the data file.
(defalias 'forms-last-record #[0 "rq\210\302ed\")\211	U\204 \211\303\304	\"\210\210\305	!\207" [forms--file-buffer forms--total-records count-lines message "Warning: number of records changed to %d" forms-jump-record] 4 (#$ . 28701) nil])
#@188 Toggle read-only mode of a forms mode buffer.
With an argument, enables read-only mode if the argument is positive.
Otherwise enables edit mode if the visited file is writable.

(fn ARG)
(defalias 'forms-toggle-read-only #[257 "\211\203\f \304!\305X\202 \2030 r	q\210\n)\203$ \306\307\310\"\210\202& \311\211\232?\205/ \312 \207?\205< \313 \210\306\312 \207" [forms-read-only forms--file-buffer buffer-read-only forms-file prefix-numeric-value 0 t message "No write access to `%s'" nil forms-mode forms--checkmod] 5 (#$ . 29043) "P"])
#@326 Create a new record before the current one.
With ARG: store the record after the current one.
If `forms-new-record-filter' contains the name of a function,
it is called to fill (some of) the fields with default values.
If `forms-insert-after' is non-nil, the default behavior is to insert
after the current record.

(fn ARG)
(defalias 'forms-insert-record #[257 "\203 \306\307!\210\310\211\211\203 	\204 \204! 	\204! \n\262\202% \nT\262\311 \210\203A \312\fT\307\"!\262\313\310\"A\262\210\202G \314\f\307\"\262\315\316#\262rq\210\317!\210\320\321!\210\211c\210\322 \210)\266T\323\n!\207" [forms-read-only forms-insert-after forms--current-record forms-new-record-filter forms-number-of-fields forms-field-sep error "" nil forms--checkmod make-vector append make-list mapconcat identity forms--goto-record open-line 1 beginning-of-line forms-jump-record forms--file-buffer forms--total-records] 8 (#$ . 29595) "P"])
#@65 Deletes a record.  With a prefix argument: don't ask.

(fn ARG)
(defalias 'forms-delete-record #[257 "\203 \304\305!\210\306 \210\211\204 \307\310!\203: 	r\nq\210\311!\210\312 \210`\312\313!\210`|\210)S	V\2035 \314	!\266\315\305!\207" [forms-read-only forms--current-record forms--file-buffer forms--total-records error "" forms--checkmod y-or-n-p "Really delete this record? " forms--goto-record beginning-of-line 2 forms-jump-record message] 5 (#$ . 30544) "P"])
#@59 Search forward for record containing REGEXP.

(fn REGEXP)
(defalias 'forms-search-forward #[257 "\211\303\232\203	 \262\304 \210\305\211\211r	q\210\305\210`\262\306\305\307#\2042 \211eV\203J eb\210\306\307#\203J \310 \262\311e`\"T\262`W\203R \312\313!\210\202R \211b\210\314\315\"\210)\316!\266\306\305\307#\210\211\211\207" [forms--search-regexp forms--file-buffer forms--current-record "" forms--checkmod nil re-search-forward t forms--get-record count-lines message "Wrapped" error "Search failed: %s" forms--show-record] 8 (#$ . 31025) (byte-code "\301\302\205\n \303\304Q\305Q!C\207" [forms--search-regexp read-string "Search forward for" " (" ")" ": "] 5)])
#@60 Search backward for record containing REGEXP.

(fn REGEXP)
(defalias 'forms-search-backward #[257 "\211\303\232\203	 \262\304 \210\305\211\211r	q\210\306 \210`\262\307\305\310#\2042 `dW\203J db\210\307\310#\203J \311 \262\312e`\"T\262`V\203R \313\314!\210\202R \211b\210\315\316\"\210)\317!\266\320\305\310#\210\211\211\207" [forms--search-regexp forms--file-buffer forms--current-record "" forms--checkmod nil beginning-of-line re-search-backward t forms--get-record count-lines message "Wrapped" error "Search failed: %s" forms--show-record re-search-forward] 8 (#$ . 31714) (byte-code "\301\302\205\n \303\304Q\305Q!C\207" [forms--search-regexp read-string "Search backward for" " (" ")" ": "] 5)])
#@215 Forms mode replacement for `save-buffer'.
It saves the data buffer instead of the forms buffer.
Calls `forms-write-file-filter' before, and `forms-read-file-filter'
after writing out the data.

(fn &optional ARGS)
(defalias 'forms-save-buffer #[256 "\306 \210	\nr\fq\210\307\203 \310\307!\210\311!\210\203$ \212\312!\210)\310\313!\210*\314!\210)\266\307\207" [forms-write-file-filter forms-read-file-filter forms--current-record read-file-filter forms--file-buffer inhibit-read-only forms--checkmod t set-buffer-modified-p save-buffer forms--run-functions nil forms-jump-record] 6 (#$ . 32441) "p"])
#@68 Reverts current form to un-modified.

(fn &optional ARG NOCONFIRM)
(defalias 'forms--revert-buffer #[512 "\211\204\n \301\302!\205 \303\304!\210\305!\207" [forms--current-record yes-or-no-p "Revert form to unmodified? " set-buffer-modified-p nil forms-jump-record] 4 (#$ . 33058) "P"])
#@38 Jump to ARG-th next field.

(fn ARG)
(defalias 'forms-next-field #[257 "\302`\303\302\304\302U\203 \305\262\202 \211\\\262\3062K 	GW\205J 	H\211\262\203C X\204C \211S\211\262\302X\203C b\210\307\306\304\"\210T\262\202 0?\205S 	\302Hb)\207" [inhibit-point-motion-hooks forms--markers 0 nil t 1 done throw] 8 (#$ . 33352) "p"])
#@42 Jump to ARG-th previous field.

(fn ARG)
(defalias 'forms-prev-field #[257 "G`\302\303\304\303U\203 \305\262\202 \211\\\262\3062K \303V\205J S\262H\211\262\203 Y\204 \211S\211\262\303X\203 b\210\307\306\304\"\210\202 0?\205U \211GSHb)\207" [forms--markers inhibit-point-motion-hooks nil 0 t 1 done throw] 8 (#$ . 33701) "p"])
#@75 Send the records to the printer with `print-buffer', one record per page.
(defalias 'forms-print #[0 "\304	\305\306	X\2036 \307!\210\310 \262r\311\312!q\210\313\305!b\210\211c\210\306W\203. \314c\210)T\262\202 r\312q\210\315 \210\316\306!\210\317p!\210)\307!)\207" [forms--current-record forms--total-records inhibit-read-only buffer-read-only t 1 nil forms-jump-record buffer-string get-buffer-create "*forms-print*" buffer-end "\n\f\n" print-buffer set-buffer-modified-p kill-buffer] 7 (#$ . 34056) nil])
#@291 Take a quoted list of symbols, and set their values to sequential numbers.
The first symbol gets number 1, the second 2 and so on.
It returns the highest number.

Usage: (setq forms-number-of-fields
             (forms-enumerate
              '(field1 field2 field2 ...)))

(fn THE-FIELDS)
(defalias 'forms-enumerate #[257 "\300\203 \211T\262\242\243\262\211L\266\202 \207" [0] 5 (#$ . 34583)])
(byte-code "\300\301\302\303\304DD\305\306\307%\207" [custom-declare-variable forms--debug funcall function #[0 "\300\207" [nil] 1 ""] "If non-nil, enable Forms mode debugging." :type boolean] 6)
#@46 Internal debugging routine.

(fn &rest ARGS)
(defalias 'forms--debug #[128 "\205! \301\302\303#r\304\305!q\210\306 \307U\203 \310 \210db\210\211c)\262\207" [forms--debug mapconcat #[257 "\211;\203 \207\300!\301\302!\203 \300J!\202 \303\304\305!\205% \300K!\304P\260\207" [prin1-to-string " = " boundp "<unbound>" "\n" fboundp] 7 "\n\n(fn EL)"] "" get-buffer-create "*forms-mode debug*" buffer-size 0 emacs-lisp-mode] 5 (#$ . 35189)])
(byte-code "\300\301!\210\300\302!\207" [provide forms-mode forms] 2)
