xref: /386bsd/usr/local/info/forms (revision a2142627)
1This is Info file ../info/forms, produced by Makeinfo-1.54 from the
2input file forms.texi.
3
4   This file documents Forms mode, a form-editing major mode for GNU
5Emacs.
6
7   Permission is granted to make and distribute verbatim copies of this
8manual provided the copyright notice and this permission notice are
9preserved on all copies.
10
11
12File: forms,  Node: Top,  Next: Forms Example,  Prev: (DIR),  Up: (DIR)
13
14Forms Mode
15**********
16
17   Forms mode is an Emacs major mode for working with simple textual
18data bases in a forms-oriented manner.  In Forms mode, the information
19in these files is presented in an Emacs window in a user-defined format,
20one record at a time.  The user can view records or modify their
21contents.
22
23   Forms mode is not a simple major mode, but requires two files to do
24its job: a control file and a data file.  The data file holds the
25actual data to be presented.  The control file describes how to present
26it.
27
28* Menu:
29
30* Forms Example::               An example: editing the password data base.
31* Entering and Exiting Forms Mode::
32                                How to visit a file in Forms mode.
33* Forms Commands::              Special commands to use while in Forms mode.
34* Data File Format::            How to format the data file.
35* Control File Format::         How to control forms mode.
36* Format Description::          How to define the forms layout.
37* Modifying Forms Contents::    How to modify.
38* Miscellaneous::               Forms mode messages and other remarks.
39* Error Messages::              List of error messages forms mode can produce.
40* Long Example::                A more complex control file example.
41* Credits::                     Thanks everyone.
42* Index::                       Index to this manual.
43
44
45File: forms,  Node: Forms Example,  Next: Entering and Exiting Forms Mode,  Prev: Top,  Up: Top
46
47Forms Example
48*************
49
50   Let's illustrate Forms mode with an example.  Suppose you are
51looking at the `/etc/passwd' file, and the screen looks like this:
52
53     ====== /etc/passwd ======
54
55     User : root   Uid: 0   Gid: 1
56
57     Name : Super User
58
59     Home : /
60
61     Shell: /bin/sh
62
63   As you can see, the familiar fields from the entry for the super user
64are all there, but instead of being colon-separated on one single line,
65they make up a forms.
66
67   The contents of the forms consists of the contents of the fields of
68the record (e.g. `root', `0', `1', `Super User') interspersed with
69normal text (e.g `User : ', `Uid: ').
70
71   If you modify the contents of the fields, Forms mode will analyze
72your changes and update the file appropriately.  You cannot modify the
73interspersed explanatory text (unless you go to some trouble about it),
74because that is marked read-only (*note Text Properties: (elisp)Text
75Properties.).
76
77   The Forms mode control file specifies the relationship between the
78format of `/etc/passwd' and what appears on the screen in Forms mode.
79*Note Control File Format::.
80
81
82File: forms,  Node: Entering and Exiting Forms Mode,  Next: Forms Commands,  Prev: Forms Example,  Up: Top
83
84Entering and Exiting Forms Mode
85*******************************
86
87`M-x forms-find-file RET CONTROL-FILE RET'
88     Visit a database using Forms mode.  Specify the name of the
89     *control file*, not the data file!
90
91`M-x forms-find-file-other-window RET CONTROL-FILE RET'
92     Similar, but displays the file in another window.
93
94   The command `forms-find-file' evaluates the file CONTROL-FILE, and
95also visits it in Forms mode.  What you see in its buffer is not the
96contents of this file, but rather a single record of the corresponding
97data file that is visited in its own buffer.  So there are two buffers
98involved in Forms mode: the "forms buffer" that is initially used to
99visit the control file and that shows the records being browsed, and
100the "data buffer" that holds the data file being visited.  The latter
101buffer is normally not visible.
102
103   Initially, the first record is displayed in the forms buffer.  The
104mode line displays the major mode name `Forms', followed by the minor
105mode `View' if the data base is read-only.  The number of the current
106record (N) and the total number of records in the file(T) are shown in
107the mode line as `N/T'.  For example:
108
109     --%%-Emacs: passwd-demo          (Forms View 1/54)----All-------
110
111   If the buffer is not read-only, you may change the buffer to modify
112the fields in the record.  When you move to a different record, the
113contents of the buffer are parsed using the specifications in
114`forms-format-list', and the data file is updated.  If the record has
115fields that aren't included in the display, they are not changed.
116
117   Entering Forms mode runs the normal hook `forms-mode-hooks' to
118perform user-defined customization.
119
120   To save any modified data, you can use `C-x C-s' (`save-buffer').
121This does not save the forms buffer (which would be rather useless),
122but instead saves the buffer visiting the data file.
123
124   To terminate Forms mode, you can use `C-x C-s' (`save-buffer') and
125then kill the forms buffer.  However, the data buffer will still
126remain.  If this is not desired, you have to kill this buffer too.
127
128
129File: forms,  Node: Forms Commands,  Next: Data File Format,  Prev: Entering and Exiting Forms Mode,  Up: Top
130
131Forms Commands
132**************
133
134   The commands of Forms mode belong to the `C-c' prefix, with one
135exception: TAB, which moves to the next field.  Forms mode uses
136different key maps for normal mode and read-only mode.  In read-only
137Forms mode, you can access most of the commands without the `C-c'
138prefix, but you must type ordinary letters instead of control
139characters; for example, type `n' instead of `C-c C-n'.
140
141`C-c C-n'
142     Show the next record (`forms-next-record').  With a prefix
143     argument N, show the Nth next record.
144
145`C-c C-p'
146     Show the previous record (`forms-prev-record').  With a prefix
147     argument N, show the Nth previous record.
148
149`C-c C-l'
150     Jump to a record by number (`forms-jump-record').   Specify the
151     record number with a prefix argument.
152
153`C-c <'
154     Jump to the first record (`forms-first-record').
155
156`C-c >'
157     Jump to the last record (`forms-last-record').  This command also
158     recalculates the number of records in the data file.
159
160`TAB'
161`C-c TAB'
162     Jump to the next field in the current record (`forms-next-field').
163     With a numeric argument N, jump forward N fields.  If this command
164     would move past the last field, it wraps around to the first field.
165
166`C-c C-q'
167     Toggles read-only mode (`forms-toggle-read-only').  In read-only
168     Forms mode, you cannot edit the fields; most Forms mode commands
169     can be accessed without the prefix `C-c' if you use the normal
170     letter instead (for example, type `n' instead of `C-c C-n').  In
171     edit mode, you can edit the fields and thus change the contents of
172     the data base; you must begin Forms mode commands with `C-c'.
173     Switching to edit mode is allowed only if you have write access to
174     the data file.
175
176`C-c C-o'
177     Create a new record and insert it before the current record
178     (`forms-insert-record').  It starts out with empty (or default)
179     contents for its fields; you can then edit the fields.  With a
180     prefix argument, the new record is created *after* the current one.
181     See also `forms-modified-record-filter' in *Note Modifying Forms
182     Contents::.
183
184`C-c C-k'
185     Delete the current record (`forms-delete-record').  You are
186     prompted for confirmation before the record is deleted unless a
187     prefix argument has been provided.
188
189`C-c C-s REGEXP RET'
190     Search for REGEXP in all records following this one
191     (`forms-search').  If found, this record is shown.  If you give an
192     empty argument, the previous regexp is used again.
193
194`M-x forms-prev-field'
195     Similar to `forms-next-field' but moves backwards.
196
197   In addition, commands such as `C-x C-s' (`save-buffer') and `M-x
198revert-buffer' are useful in Forms mode just as in other modes.
199
200   The following function key definitions are set up in Forms mode
201(whether read-only or not):
202
203`next'
204     forms-next-record
205
206`prior'
207     forms-prev-record
208
209`begin'
210     forms-first-record
211
212`end'
213     forms-last-record
214
215`S-Tab'
216     forms-prev-field
217
218
219File: forms,  Node: Data File Format,  Next: Control File Format,  Prev: Forms Commands,  Up: Top
220
221Data File Format
222****************
223
224   Files for use with Forms mode are very simple--each "record"
225(usually one line) forms the contents of one form.  Each record consists
226of a number of "fields", which are separated by the value of the string
227`forms-field-sep', which is `"\t"' (a tab) by default.
228
229   Fields may contain text which shows up in the forms in multiple
230lines.  These lines are separated in the field using a "pseudo-newline"
231character which is defined by the value of the string
232`forms-multi-line'.  Its default value is `"\^k"'.  If it is set to
233`nil', multiple line fields are prohibited.
234
235
236File: forms,  Node: Control File Format,  Next: Format Description,  Prev: Data File Format,  Up: Top
237
238Control File Format
239*******************
240
241   The Forms mode "control file" serves two purposes.  First, it names
242the data file to use, and defines its format and properties.  Second,
243the Emacs buffer it occupies is used by Forms mode to display the forms.
244
245   The contents of the control file are evaluated as a Lisp program.  It
246should set the following Lisp variables to suitable values:
247
248`forms-file'
249     This variable specifies the name of the data file.  Example:
250
251          (setq forms-file "my/data-file")
252
253`forms-format-list'
254     This variable describes the way the fields of the record are
255     formatted on the screen.  For details, see *Note Format
256     Description::.
257
258`forms-number-of-fields'
259     This variable holds the number of fields in each record of the data
260     file.  Example:
261
262          (setq forms-number-of-fields 10)
263
264   If the control file doesn't set all of these variables, Forms mode
265reports an error.
266
267   The control file can optionally set the following additional Forms
268mode variables.  Most of them have default values that are good for most
269applications.
270
271`forms-field-sep'
272     This variable may be used to designate the string which separates
273     the fields in the records of the data file.  If not set, it
274     defaults to the string `"\t"' (a tab character).  Example:
275
276          (setq forms-field-sep "\t")
277
278`forms-read-only'
279     If the value is non-`nil', the data file is treated read-only.
280     (Forms mode also treats the data file as read-only if you don't
281     have access to write it.)  Example:
282
283          (set forms-read-only t)
284
285`forms-multi-line'
286     This variable specifies the "pseudo newline" separator that allows
287     multi-line fields.  This separator goes between the "lines" within
288     a field--thus, the field doesn't really contain multiple lines,
289     but it appears that way when displayed in Forms mode.  If the
290     value is `nil', multi-line text fields are prohibited.  The pseudo
291     newline must not be a character contained in `forms-field-sep'.
292
293     The default value is `"\^k"', so the default pseudo newline is the
294     character control-k.  Example:
295
296          (setq forms-multi-line "\^k")
297
298`forms-new-record-filter'
299     This variable holds a function to be called whenever a new record
300     is created to supply default values for fields.  If it is `nil',
301     no function is called.  *Note Modifying Forms Contents::, for
302     details.
303
304`forms-modified-record-filter'
305     This variable holds a function to be called whenever a record is
306     modified, just before updating the Forms data file.  If it is
307     `nil', no function is called.  *Note Modifying Forms Contents::,
308     for details.
309
310
311File: forms,  Node: Format Description,  Next: Modifying Forms Contents,  Prev: Control File Format,  Up: Top
312
313The Format Description
314**********************
315
316   The variable `forms-format-list' specifies the format of the data in
317the data file, and how to convert the data for display in Forms mode.
318Its value must be a list of Forms mode "formatting elements", each of
319which can be a string, a number, a Lisp list, or a Lisp symbol that
320evaluates to one of those.  The formatting elements are processed in the
321order they appear in the list.
322
323STRING
324     A string formatting element is inserted in the forms "as is," as
325     text that the user cannot alter.
326
327NUMBER
328     A number element selects a field of the record.  The contents of
329     this field are inserted in the display at this point.  Field
330     numbers count starting from 1 (one).
331
332LIST
333     A formatting element that is a list specifies a function call.
334     This function is called every time a record is displayed, and its
335     result, which must be a string, is inserted in the display text.
336     The function should do nothing but returning a string.
337
338     The function you call can access the fields of the record as a
339     list in the variable `forms-fields'.
340
341SYMBOL
342     A symbol used as a formatting element should evaluate to a string,
343     number, or list; the value is interpreted as a formatting element,
344     as described above.
345
346   If a record does not contain the number of fields as specified in
347`forms-number-of-fields', a warning message will be printed.  Excess
348fields are ignored, missing fields are set to empty.
349
350   The control file which displays `/etc/passwd' file as demonstrated
351in the beginning of this manual might look as follows:
352
353     ;; This demo visits `/etc/passwd'.
354
355     (setq forms-file "/etc/passwd")
356     (setq forms-number-of-fields 7)
357     (setq forms-read-only t)                 ; to make sure
358     (setq forms-field-sep ":")
359     ;; Don't allow multi-line fields.
360     (setq forms-multi-line nil)
361
362     (setq forms-format-list
363           (list
364            "====== /etc/passwd ======\n\n"
365            "User : "    1
366            "   Uid: "   3
367            "   Gid: "   4
368            "\n\n"
369            "Name : "    5
370            "\n\n"
371            "Home : "    6
372            "\n\n"
373            "Shell: "    7
374            "\n"))
375
376   When you construct the value of  `forms-format-list', you should
377usually either quote the whole value, like this,
378
379     (setq forms-format-list
380          '(
381            "====== " forms-file " ======\n\n"
382            "User : "    1
383            (make-string 20 ?-)
384            ...
385           ))
386
387or quote the elements which are lists, like this:
388
389     (setq forms-format-list
390           (list
391            "====== " forms-file " ======\n\n"
392            "User : "    1
393            '(make-string 20 ?-)
394            ...
395           ))
396
397   Forms mode validates the contents of `forms-format-list' when you
398visit a database.  If there are errors, processing is aborted with an
399error message which includes a descriptive text.  *Note Error
400Messages::, for a detailed list of error messages.
401
402
403File: forms,  Node: Modifying Forms Contents,  Next: Miscellaneous,  Prev: Format Description,  Up: Top
404
405Modifying The Forms Contents
406****************************
407
408   If `forms-read-only' is `nil', the user can modify the fields and
409records of the database.
410
411   All normal editing commands are available for editing the contents
412of the displayed record.  You cannot delete or modify the fixed,
413explanatory text that comes from string formatting elements, but you
414can modify the actual field contents.
415
416   If the variable `forms-modified-record-filter' is non-`nil', it is
417called as a function before the new data is written to the data file.
418The function receives one argument, a vector that contains the contents
419of the fields of the record.
420
421   The function can refer to fields with `aref' and modify them with
422`aset'.  The first field has number 1 (one); thus, element 0 of the
423vector is not used.  The function should return the same vector it was
424passed; the (possibly modified) contents of the vector determine what is
425actually written in the file.  Here is an example:
426
427     (defun my-modified-record-filter (record)
428       ;; Modify second field.
429       (aset record 2 (current-time-string))
430       ;; Return the field vector.
431       record)
432
433     (setq forms-modified-record-filter 'my-modified-record-filter)
434
435   If the variable `forms-new-record-filter' is non-`nil', its value is
436a function to be called to fill in default values for the fields of a
437new record.  The function is passed a vector of empty strings, one for
438each field; it should return the same vector, with the desired field
439values stored in it.  Fields are numbered starting from 1 (one).
440Example:
441
442     (defun my-new-record-filter (fields)
443       (aset fields 5 (login-name))
444       (aset fields 1 (current-time-string))
445       fields)
446
447     (setq forms-new-record-filter 'my-new-record-filter)
448
449
450File: forms,  Node: Miscellaneous,  Next: Error Messages,  Prev: Modifying Forms Contents,  Up: Top
451
452Miscellaneous
453*************
454
455   The global variable `forms-version' holds the version information of
456the Forms mode software.
457
458   It is very convenient to use symbolic names for the fields in a
459record.  The function `forms-enumerate' provides an elegant means to
460define a series of variables whose values are consecutive integers.  The
461function returns the highest number used, so it can be used to set
462`forms-number-of-fields' also.  For example:
463
464     (setq forms-number-of-fields
465           (forms-enumerate
466            '(field1 field2 field3 ...)))
467
468   This sets `field1' to 1, `field2' to 2, and so on.
469
470   Care has been taken to keep the Forms mode variables buffer-local,
471so it is possible to visit multiple files in Forms mode simultaneously,
472even if they have different properties.
473
474   If you have visited the control file in normal fashion with
475`find-file' or a like command, you can switch to Forms mode with the
476command `M-x forms-mode'.  If you put `-*- forms -*-' in the first line
477of the control file, then visiting it enables Forms mode automatically.
478But this makes it hard to edit the control file itself, so you'd
479better think twice before using this.
480
481   The default format for the data file, using `"\t"' to separate
482fields and `"\^k"' to separate lines within a field, matches the file
483format of some popular database programss, e.g. FileMaker.  So
484`forms-mode' can decrease the need to use proprietary software.
485
486
487File: forms,  Node: Error Messages,  Next: Long Example,  Prev: Miscellaneous,  Up: Top
488
489Error Messages
490**************
491
492   This section describes all error messages which can be generated by
493forms mode.  Error messages that result from parsing the control file
494all start with the text `Forms control file error'.  Messages generated
495while analyzing the definition of `forms-format-list' start with `Forms
496format error'.
497
498`Forms control file error: 'forms-file' has not been set'
499     The variable `forms-file' was not set by the control file.
500
501`Forms control file error: 'forms-number-of-fields' has not been set'
502     The variable `forms-number-of-fields' was not set by the control
503     file.
504
505`Forms control file error: 'forms-number-of-fields' must be a number > 0'
506     The variable `forms-number-of-fields' did not contain a positive
507     number.
508
509`Forms control file error: 'forms-field-sep' is not a string'
510`Forms control file error: 'forms-multi-line' must be nil or a one-character string'
511     The variable `forms-multi-line' was set to something other than
512     `nil' or a single-character string.
513
514`Forms control file error: 'forms-multi-line' is equal to 'forms-field-sep''
515     The variable `forms-multi-line' may not be equal to
516     `forms-field-sep' for this would make it impossible to distinguish
517     fields and the lines in the fields.
518
519`Forms control file error: 'forms-new-record-filter' is not a function'
520`Forms control file error: 'forms-modified-record-filter' is not a function'
521     The variable has been set to something else than a function.
522
523`Forms control file error: 'forms-format-list' has not been set'
524`Forms control file error: 'forms-format-list' is not a list'
525     The variable `forms-format-list' was not set to a Lisp list by the
526     control file.
527
528`Forms format error: field number XX out of range 1..NN'
529     A field number was supplied in `forms-format-list' with a value of
530     XX, which was not greater than zero and smaller than or equal to
531     the number of fields in the forms, NN.
532
533`Forms format error:  not a function FUN'
534     The first element of a list which is an element of
535     `forms-format-list' was not a valid Lisp function.
536
537`Forms format error:  invalid element XX'
538     A list element was supplied in `forms-format-list' which was not a
539     string, number or list.
540
541`Warning: this record has XX fields instead of YY'
542     The number of fields in this record in the data file did not match
543     `forms-number-of-fields'.  Missing fields will be made empty.
544
545`Multi-line fields in this record - update refused!'
546     The current record contains newline characters, hence can not be
547     written back to the data file, for it would corrupt it.  Probably
548     you inserted a newline in a field, while `forms-multi-line' was
549     `nil'.
550
551`Record number XX out of range 1..YY'
552     A jump was made to non-existing record XX.  YY denotes the number
553     of records in the file.
554
555`Stuck at record XX'
556     An internal error prevented a specific record from being retrieved.
557
558`No write access to `"'FILE`"''
559     An attempt was made to enable edit mode on a file that has been
560     write protected.
561
562``"'REGEXP`"' not found'
563     The REGEXP could not be found in the data file, starting at the
564     current record location.
565
566`Warning: number of records changed to NN'
567     Forms mode's idea of the number of records has been adjusted to the
568     number of records actually present in the data file.
569
570`Problem saving buffers?'
571     An error occurred while saving the data file buffer. Most likely,
572     Emacs did ask to confirm deleting the buffer because it had been
573     modified, and you said `no'.
574
575
576File: forms,  Node: Long Example,  Next: Credits,  Prev: Error Messages,  Up: Top
577
578Long Example
579************
580
581   The following example exploits most of the features of Forms mode.
582This example is included in the distribution as file `forms-d2.el'.
583
584     ;; demo2 -- demo forms-mode	-*- emacs-lisp -*-
585
586     ;; SCCS Status     : demo2	1.1.2
587     ;; Author          : Johan Vromans
588     ;; Created On      : 1989
589     ;; Last Modified By: Johan Vromans
590     ;; Last Modified On: Mon Jul  1 13:56:31 1991
591     ;; Update Count    : 2
592     ;; Status          : OK
593     ;;
594     ;; This sample forms exploit most of the features of forms mode.
595
596     ;; Set the name of the data file.
597     (setq forms-file "forms-d2.dat")
598
599     ;; Use `forms-enumerate' to set field names and number thereof.
600     (setq forms-number-of-fields
601           (forms-enumerate
602            '(arch-newsgroup			; 1
603     	 arch-volume			; 2
604     	 arch-issue			; and ...
605     	 arch-article			; ... so
606     	 arch-shortname			; ... ... on
607     	 arch-parts
608     	 arch-from
609     	 arch-longname
610     	 arch-keywords
611     	 arch-date
612     	 arch-remarks)))
613
614     ;; The following functions are used by this form for layout purposes.
615     ;;
616     (defun arch-tocol (target &optional fill)
617       "Produces a string to skip to column TARGET.
618     Prepends newline if needed.
619     The optional FILL should be a character, used to fill to the column."
620       (if (null fill)
621           (setq fill ? ))
622       (if (< target (current-column))
623           (concat "\n" (make-string target fill))
624         (make-string (- target (current-column)) fill)))
625     ;;
626     (defun arch-rj (target field &optional fill)
627       "Produces a string to skip to column TARGET\
628      minus the width of field FIELD.
629     Prepends newline if needed.
630     The optional FILL should be a character,
631     used to fill to the column."
632       (arch-tocol (- target (length (nth field forms-fields))) fill))
633
634     ;; Record filters.
635     ;;
636     (defun new-record-filter (the-record)
637       "Form a new record with some defaults."
638       (aset the-record arch-from (user-full-name))
639       (aset the-record arch-date (current-time-string))
640       the-record)				; return it
641     (setq forms-new-record-filter 'new-record-filter)
642
643     ;; The format list.
644     (setq forms-format-list
645          (list
646            "====== Public Domain Software Archive ======\n\n"
647            arch-shortname
648            " - "			arch-longname
649            "\n\n"
650            "Article: "		arch-newsgroup
651            "/"			arch-article
652            " "
653            '(arch-tocol 40)
654            "Issue: "		arch-issue
655            " "
656            '(arch-rj 73 10)
657            "Date: "			arch-date
658            "\n\n"
659            "Submitted by: "		arch-from
660            "\n"
661            '(arch-tocol 79 ?-)
662            "\n"
663            "Keywords: "		arch-keywords
664            "\n\n"
665            "Parts: "		arch-parts
666            "\n\n====== Remarks ======\n\n"
667            arch-remarks
668          ))
669
670     ;; That's all, folks!
671
672
673File: forms,  Node: Credits,  Next: Index,  Prev: Long Example,  Up: Top
674
675Credits
676*******
677
678   Forms mode was developed by Johan Vromans while working at Multihouse
679Research in the Netherlands.
680
681   Bug fixes and other useful suggestions were supplied by Richard
682Stallman (`rms@gnu.ai.mit.edu'), Harald Hanche-Olsen
683(`hanche@imf.unit.no'), `cwitty@portia.stanford.edu', Jonathan I.
684Kamens, Per Cederqvist  (`ceder@signum.se'), and Ignatios Souvatzis.
685
686   This documentation was slightly inspired by the documentation of
687"rolo mode" by Paul Davis at Schlumberger Cambridge Research
688(`davis%scrsu1%sdr.slb.com@relay.cs.net').
689
690   None of this would have been possible without GNU Emacs of the Free
691Software Foundation.  Thanks, Richard!
692
693
694File: forms,  Node: Index,  Prev: Credits,  Up: Top
695
696Index
697*****
698
699* Menu:
700
701* TAB:                                  Forms Commands.
702* begin:                                Forms Commands.
703* C-c <:                                Forms Commands.
704* C-c >:                                Forms Commands.
705* C-c TAB:                              Forms Commands.
706* C-c C-k:                              Forms Commands.
707* C-c C-l:                              Forms Commands.
708* C-c C-n:                              Forms Commands.
709* C-c C-o:                              Forms Commands.
710* C-c C-p:                              Forms Commands.
711* C-c C-q:                              Forms Commands.
712* C-c C-s REGEXP RET:                   Forms Commands.
713* control file:                         Control File Format.
714* end:                                  Forms Commands.
715* field:                                Data File Format.
716* forms-delete-record:                  Forms Commands.
717* forms-enumerate:                      Miscellaneous.
718* forms-field-sep:                      Control File Format.
719* forms-field-sep:                      Data File Format.
720* forms-fields:                         Format Description.
721* forms-file:                           Control File Format.
722* forms-find-file:                      Entering and Exiting Forms Mode.
723* forms-find-file-other-window:         Entering and Exiting Forms Mode.
724* forms-first-record:                   Forms Commands.
725* forms-format-list:                    Control File Format.
726* forms-format-list:                    Format Description.
727* forms-insert-record:                  Forms Commands.
728* forms-jump-record:                    Forms Commands.
729* forms-last-record:                    Forms Commands.
730* forms-mode:                           Miscellaneous.
731* forms-mode-hooks:                     Entering and Exiting Forms Mode.
732* forms-modified-record-filter:         Control File Format.
733* forms-multi-line:                     Data File Format.
734* forms-multi-line:                     Control File Format.
735* forms-new-record-filter:              Control File Format.
736* forms-next-field:                     Forms Commands.
737* forms-next-record:                    Forms Commands.
738* forms-number-of-fields:               Control File Format.
739* forms-prev-field:                     Forms Commands.
740* forms-prev-field:                     Forms Commands.
741* forms-prev-record:                    Forms Commands.
742* forms-read-only:                      Control File Format.
743* forms-search:                         Forms Commands.
744* forms-toggle-read-only:               Forms Commands.
745* forms-version:                        Miscellaneous.
746* next:                                 Forms Commands.
747* prior:                                Forms Commands.
748* pseudo-newline:                       Data File Format.
749* record:                               Data File Format.
750* S-Tab:                                Forms Commands.
751
752
753
754Tag Table:
755Node: Top335
756Node: Forms Example1755
757Node: Entering and Exiting Forms Mode2975
758Node: Forms Commands5160
759Node: Data File Format8242
760Node: Control File Format8949
761Node: Format Description11734
762Node: Modifying Forms Contents14867
763Node: Miscellaneous16754
764Node: Error Messages18293
765Node: Long Example21960
766Node: Credits25032
767Node: Index25768
768
769End Tag Table
770