OSDN Git Service

a3adc652ecda9bba9ab6a2500a867db70305a03b
[pf3gnuchains/gcc-fork.git] / gcc / ada / gnat-style.texi
1 \input texinfo   @c -*-texinfo-*-
2 @c %**start of header
3
4 @c oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
5 @c                                                                            o
6 @c                           GNAT DOCUMENTATION                               o
7 @c                                                                            o
8 @c                      G N A T   C O D I N G   S T Y L E                     o
9 @c                                                                            o
10 @c          Copyright (C) 1992-2004 Ada Core Technologies, Inc.               o
11 @c                                                                            o
12 @c  GNAT is free software;  you can  redistribute it  and/or modify it under  o
13 @c  terms of the  GNU General Public License as published  by the Free Soft-  o
14 @c  ware  Foundation;  either version 2,  or (at your option) any later ver-  o
15 @c  sion.  GNAT is distributed in the hope that it will be useful, but WITH-  o
16 @c  OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY  o
17 @c  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License  o
18 @c  for  more details.  You should have  received  a copy of the GNU General  o
19 @c  Public License  distributed with GNAT;  see file COPYING.  If not, write  o
20 @c  to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston,  o
21 @c  MA 02111-1307, USA.                                                       o
22 @c                                                                            o
23 @c oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
24
25 @setfilename gnat-style.info
26
27 @settitle GNAT Coding Style
28 @setchapternewpage odd
29
30
31 @dircategory Programming
32 @direntry
33 * gnat-style: (gnat-style).      GNAT Coding Style
34 @end direntry
35
36 @macro syntax{element}
37 @t{\element\}
38 @end macro
39 @c %**end of header
40
41 @titlepage
42 @sp 10
43 @title GNAT Coding Style
44 @flushright
45 @titlefont{A Guide for GNAT Developers}
46 @end flushright
47 @sp 2
48 @subtitle GNAT, The GNU Ada 95 Compiler
49
50 @author Ada Core Technologies, Inc.
51
52 @page
53 @vskip 0pt plus 1filll
54
55 Copyright @copyright{} 1995-2003, Free Software Foundation
56
57 Permission is granted to copy, distribute and/or modify this document
58 under the terms of the GNU Free Documentation License, Version 1.1
59 or any later version published by the Free Software Foundation;
60 with the Invariant Sections being ``GNU Free Documentation License'', with the
61 Front-Cover Texts being
62 ``GNAT Coding Style'' and ``A Guide for GNAT Developers'',
63 and with no Back-Cover Texts.
64 A copy of the license is included in the section entitled
65 ``GNU Free Documentation License''.
66 @end titlepage
67
68 @raisesections
69
70 @node    Top,       General,         , (dir)
71 @comment node-name, next,    previous, up
72
73 @ifnottex
74 @noindent
75 GNAT Coding Style@*
76 A Guide for GNAT Developers
77 @sp 2
78 @noindent
79 GNAT, The GNU Ada 95 Compiler@*
80
81 @noindent
82 Permission is granted to copy, distribute and/or modify this document
83 under the terms of the GNU Free Documentation License, Version 1.1
84 or any later version published by the Free Software Foundation;
85 with the Invariant Sections being ``GNU Free Documentation License'', with the
86 Front-Cover Texts being
87 ``GNAT Coding Style'' and ``A Guide for GNAT Developers''
88 and with no Back-Cover Texts.
89 A copy of the license is included in the section entitled
90 ``GNU Free Documentation License''.
91 @end ifnottex
92
93
94 @menu
95 * General::
96 * Lexical Elements::
97 * Declarations and Types::
98 * Expressions and Names::
99 * Statements::
100 * Subprograms::
101 * Packages::
102 * Program Structure::
103 * GNU Free Documentation License::
104 * Index::
105 @end menu
106
107 @c  -------------------------------------------------------------------------
108 @node    General, Lexical Elements, Top, Top
109 @section General
110 @c  -------------------------------------------------------------------------
111
112 @noindent
113 Most of GNAT is written in Ada using a consistent style to ensure
114 readability of the code.  This document has been written to help
115 maintain this consistent style, while having a large group of developers
116 work on the compiler.
117
118 For the coding style in the C parts of the compiler and run time,
119 see the GNU Coding Guidelines.
120
121 This document is structured after the @cite{Ada Reference Manual}.
122 Those familiar with that document should be able to quickly
123 lookup style rules for particular constructs.
124
125
126 @c  -------------------------------------------------------------------------
127 @node    Lexical Elements, Declarations and Types, General, Top
128 @section Lexical Elements
129 @c  -------------------------------------------------------------------------
130 @cindex Lexical elements
131
132 @subsection Character Set and Separators
133 @c  -------------------------------------------------------------------------
134 @cindex Character set
135 @cindex ASCII
136 @cindex Separators
137 @cindex End-of-line
138 @cindex Line length
139 @cindex Indentation
140
141 @itemize @bullet
142 @item
143 The character set used should be plain 7-bit ASCII@.
144 The only separators allowed are space and the end-of-line sequence.
145 No other control character or format effector (such as @code{HT},
146 @code{VT}, @code{FF})
147 should be used.
148 The normal end-of-line sequence is used, which may be
149 @code{LF}, @code{CR/LF} or @code{CR},
150 depending on the host system.  An optional @code{SUB}
151 (@code{16#1A#}) may be present as the
152 last character in the file on hosts using that character as file terminator.
153
154 @item
155 Files that are checked in or distributed should be in host format.
156
157 @item
158 A line should never be longer than 79 characters, not counting the line
159 separator.
160
161 @item
162 Lines must not have trailing blanks.
163
164 @item
165 Indentation is 3 characters per level for @code{if} statements, loops, and
166 @code{case} statements.
167 For exact information on required spacing between lexical
168 elements, see file @file{style.adb}.
169 @cindex @file{style.adb} file
170 @end itemize
171
172
173 @subsection Identifiers
174 @c  -------------------------------------------------------------------------
175 @itemize @bullet
176 @cindex Identifiers
177
178 @item
179 Identifiers will start with an upper case letter, and each letter following
180 an underscore will be upper case.
181 @cindex Casing (for identifiers)
182 Short acronyms may be all upper case.
183 All other letters are lower case.
184 An exception is for identifiers matching a foreign language.  In particular,
185 we use all lower case where appropriate for C@.
186
187 @item
188 Use underscores to separate words in an identifier.
189 @cindex Underscores
190
191 @item Try to limit your use of abbreviations in identifiers.
192 It is ok to make a few abbreviations, explain what they mean, and then
193 use them frequently, but don't use lots of obscure abbreviations.  An
194 example is the @code{ALI} word which stands for Ada Library
195 Information and is by convention always written in upper-case when
196 used in entity names.
197
198 @smallexample @c adanocomment
199        procedure Find_ALI_Files;
200 @end smallexample
201
202 @item
203 Don't use the variable name @code{I}, use @code{J} instead; @code{I} is too
204 easily confused with @code{1} in some fonts.  Similarly don't use the
205 variable @code{O}, which is too easily mistaken for the number @code{0}.
206 @end itemize
207
208 @subsection Numeric Literals
209 @c  -------------------------------------------------------------------------
210 @cindex Numeric literals
211
212 @itemize @bullet
213 @item
214 Numeric literals should include underscores where helpful for
215 readability.
216 @cindex Underscores
217
218 @smallexample
219       1_000_000
220       16#8000_000#
221       3.14159_26535_89793_23846
222 @end smallexample
223 @end itemize
224
225 @subsection Reserved Words
226 @c  -------------------------------------------------------------------------
227 @cindex Reserved words
228
229 @itemize @bullet
230 @item
231 Reserved words use all lower case.
232 @cindex Casing (for reserved words)
233
234 @smallexample @c adanocomment
235        return else
236 @end smallexample
237
238 @item
239 The words @code{Access}, @code{Delta} and @code{Digits} are
240 capitalized when used as @syntax{attribute_designator}.
241 @end itemize
242
243 @subsection Comments
244 @c  -------------------------------------------------------------------------
245 @cindex Comments
246
247 @itemize @bullet
248 @item
249 A comment starts with @code{--} followed by two spaces).
250 The only exception to this rule (i.e.@: one space is tolerated) is when the
251 comment ends with a single space followed by @code{--}.
252 It is also acceptable to have only one space between @code{--} and the start
253 of the comment when the comment is at the end of a line,
254 after some Ada code.
255
256 @item
257 Every sentence in a comment should start with an upper-case letter (including
258 the first letter of the comment).
259 @cindex Casing (in comments)
260
261 @item
262 When declarations are commented with ``hanging'' comments, i.e.@:
263 comments after the declaration, there is no blank line before the
264 comment, and if it is absolutely necessary to have blank lines within
265 the comments these blank lines @emph{do} have a @code{--} (unlike the
266 normal rule, which is to use entirely blank lines for separating
267 comment paragraphs).  The comment starts at same level of indentation
268 as code it is commenting.
269 @cindex Blank lines (in comments)
270 @cindex Indentation
271
272 @smallexample @c adanocomment
273        z : Integer;
274        --  Integer value for storing value of z
275        --
276        --  The previous line was a blank line.
277 @end smallexample
278
279 @item
280 Comments that are dubious or incomplete, or that comment on possibly
281 wrong or incomplete code, should be preceded or followed by @code{???}@.
282
283 @item
284 Comments in a subprogram body must generally be surrounded by blank lines.
285 An exception is a comment that follows a line containing a single keyword
286 (@code{begin}, @code{else}, @code{loop}):
287
288 @smallexample @c adanocomment
289 @group
290        begin
291           --  Comment for the next statement
292
293           A := 5;
294
295           --  Comment for the B statement
296
297           B := 6;
298        end;
299 @end group
300 @end smallexample
301
302 @item
303 In sequences of statements, comments at the end of the lines should be
304 aligned.
305 @cindex Alignment (in comments)
306
307 @smallexample @c adanocomment
308         My_Identifier := 5;      --  First comment
309         Other_Id := 6;           --  Second comment
310 @end smallexample
311
312 @item
313 Short comments that fit on a single line are @emph{not} ended with a
314 period.  Comments taking more than a line are punctuated in the normal
315 manner.
316
317 @item
318 Comments should focus on @emph{why} instead of @emph{what}.
319 Descriptions of what subprograms do go with the specification.
320
321 @item
322 Comments describing a subprogram spec should specifically mention the
323 formal argument names.  General rule: write a comment that does not
324 depend on the names of things.  The names are supplementary, not
325 sufficient, as comments.
326
327 @item
328 @emph{Do not} put two spaces after periods in comments.
329 @end itemize
330
331 @c  -------------------------------------------------------------------------
332 @node    Declarations and Types, Expressions and Names, Lexical Elements,Top
333 @section Declarations and Types
334 @c  -------------------------------------------------------------------------
335 @cindex Declarationa and Types
336
337 @itemize @bullet
338 @item
339 In entity declarations, colons must be surrounded by spaces.  Colons
340 should be aligned.
341 @cindex Alignment (in declarations)
342
343 @smallexample @c adanocomment
344         Entity1   : Integer;
345         My_Entity : Integer;
346 @end smallexample
347
348 @item
349 Declarations should be grouped in a logical order.
350 Related groups of declarations may be preceded by a header comment.
351
352 @item
353 All local subprograms in a subprogram or package body should be declared
354 before the first local subprogram body.
355
356 @item
357 Do not declare local entities that hide global entities.
358 @cindex Hiding of outer entities
359
360 @item
361 Do not declare multiple variables in one declaration that spans lines.
362 Start a new declaration on each line, instead.
363
364 @item
365 The @syntax{defining_identifier}s of global declarations serve as
366 comments of a sort.  So don't choose terse names, but look for names
367 that give useful information instead.
368
369 @item
370 Local names can be shorter, because they are used only within
371 one context, where comments explain their purpose.
372
373 @end itemize
374
375
376 @c  -------------------------------------------------------------------------
377 @node    Expressions and Names, Statements, Declarations and Types, Top
378 @section Expressions and Names
379 @c  -------------------------------------------------------------------------
380 @cindex Expressions and names
381
382 @itemize @bullet
383
384 @item
385 Every operator must be surrounded by spaces. An exception is that
386 this rule does not apply to the exponentiation operator, for which
387 there are no specific layout rules. The reason for this exception
388 is that sometimes it makes clearer reading to leave out the spaces
389 around exponentiation.
390 @cindex Operators
391
392 @smallexample @c adanocomment
393        E := A * B**2 + 3 * (C - D);
394 @end smallexample
395
396 @item
397 Use parentheses where they clarify the intended association of operands
398 with operators:
399 @cindex Parenthesization of expressions
400 @smallexample @c adanocomment
401        (A / B) * C
402 @end smallexample
403 @end itemize
404
405 @c  -------------------------------------------------------------------------
406 @node    Statements, Subprograms, Expressions and Names, Top
407 @section Statements
408 @c  -------------------------------------------------------------------------
409 @cindex Statements
410
411 @subsection Simple and Compound Statements
412 @c  -------------------------------------------------------------------------
413 @cindex Simple and compound statements
414
415 @itemize @bullet
416 @item
417 Use only one statement or label per line.
418 @item
419 A longer @syntax{sequence_of_statements} may be divided in logical
420 groups or separated from surrounding code using a blank line.
421 @end itemize
422
423 @subsection If Statements
424 @c  -------------------------------------------------------------------------
425 @cindex @code{if} statement
426
427 @itemize @bullet
428 @item
429 When the @code{if}, @code{elsif} or @code{else} keywords fit on the
430 same line with the condition and the @code{then} keyword, then the
431 statement is formatted as follows:
432 @cindex Alignment (in an @code{if} statement)
433
434 @smallexample @c adanocomment
435 @group
436         if @var{condition} then
437            ...
438         elsif @var{condition} then
439            ...
440         else
441            ...
442         end if;
443 @end group
444 @end smallexample
445
446 @noindent
447 When the above layout is not possible, @code{then} should be aligned
448 with @code{if}, and conditions should preferably be split before an
449 @code{and} or @code{or} keyword a follows:
450
451 @smallexample @c adanocomment
452 @group
453         if @var{long_condition_that_has_to_be_split}
454           and then @var{continued_on_the_next_line}
455         then
456            ...
457         end if;
458 @end group
459 @end smallexample
460
461 @noindent
462 The @code{elsif}, @code{else} and @code{end if} always line up with
463 the @code{if} keyword.  The preferred location for splitting the line
464 is before @code{and} or @code{or}.  The continuation of a condition is
465 indented with two spaces or as many as needed to make nesting clear.
466 As an exception, if conditions are closely related either of the
467 following is allowed:
468
469 @smallexample
470 @group
471      if x = lakdsjfhlkashfdlkflkdsalkhfsalkdhflkjdsahf
472           or else
473         x = asldkjhalkdsjfhhfd
474           or else
475         x = asdfadsfadsf
476      then
477        ...
478      end if;
479 @end group
480
481 @group
482      if x = lakdsjfhlkashfdlkflkdsalkhfsalkdhflkjdsahf or else
483         x = asldkjhalkdsjfhhfd                         or else
484         x = asdfadsfadsf
485      then
486        ...
487      end if;
488 @end group
489 @end smallexample
490
491 @item
492 Conditions should use short-circuit forms (@code{and then},
493 @code{or else}), except when the operands are boolean variables
494 or boolean constants.
495 @cindex Short-circuit forms
496
497 @item
498 Complex conditions in @code{if} statements are indented two characters:
499 @cindex Indentation (in @code{if} statements)
500
501 @smallexample @c adanocomment
502 @group
503       if @var{this_complex_condition}
504         and then @var{that_other_one}
505         and then @var{one_last_one}
506       then
507          ...
508       end if;
509 @end group
510 @end smallexample
511
512 @noindent
513 There are some cases where complex conditionals can be laid out
514 in manners that do not follow these rules to preserve better
515 parallelism between branches, e.g.
516
517 @smallexample @c adanocomment
518 @group
519       if xyz.abc (gef) = 'c'
520            or else
521          xyz.abc (gef) = 'x'
522       then
523          ...
524       end if;
525 @end group
526 @end smallexample
527
528
529 @item
530 Every @code{if} block is preceded and followed by a blank line, except
531 where it begins or ends a @syntax{sequence_of_statements}.
532 @cindex Blank lines (in an @code{if} statement)
533
534 @smallexample @c adanocomment
535 @group
536         A := 5;
537
538         if A = 5 then
539            null;
540         end if;
541
542         A := 6;
543 @end group
544 @end smallexample
545 @end itemize
546
547 @subsection Case Statements
548 @cindex @code{case} statements
549
550 @itemize @bullet
551 @item
552 Layout is as below.  For long @code{case} statements, the extra indentation
553 can be saved by aligning the @code{when} clauses with the opening @code{case}.
554
555 @smallexample @c adanocomment
556 @group
557        case @var{expression} is
558           when @var{condition} =>
559              ...
560           when @var{condition} =>
561              ...
562        end case;
563 @end group
564 @end smallexample
565 @end itemize
566
567 @subsection Loop Statements
568 @cindex Loop statements
569
570 @itemize @bullet
571 @noindent
572 When possible, have @code{for} or @code{while} on one line with the
573 condition and the @code{loop} keyword.
574
575 @smallexample @c adanocomment
576 @group
577        for J in S'Range loop
578           ...
579        end loop;
580 @end group
581 @end smallexample
582
583 @noindent
584 If the condition is too long, split the condition (see ``If
585 statements'' above) and align @code{loop} with the @code{for} or
586 @code{while} keyword.
587 @cindex Alignment (in a loop statement)
588
589 @smallexample @c adanocomment
590 @group
591       while @var{long_condition_that_has_to_be_split}
592         and then @var{continued_on_the_next_line}
593       loop
594          ...
595       end loop;
596 @end group
597 @end smallexample
598
599 @noindent
600 If the @syntax{loop_statement} has an identifier, it is laid out as follows:
601
602 @smallexample @c adanocomment
603 @group
604       Outer : while not @var{condition} loop
605          ...
606       end Outer;
607 @end group
608 @end smallexample
609 @end itemize
610
611 @subsection Block Statements
612 @cindex Block statement
613
614 @itemize @bullet
615 @item
616 The @code{declare} (optional), @code{begin} and @code{end} words
617 are aligned, except when the @syntax{block_statement} is named.  There
618 is a blank line before the @code{begin} keyword:
619 @cindex Alignment (in a block statement)
620
621 @smallexample @c adanocomment
622 @group
623       Some_Block : declare
624          ...
625
626       begin
627          ...
628       end Some_Block;
629 @end group
630 @end smallexample
631
632 @end itemize
633
634 @c  -------------------------------------------------------------------------
635 @node    Subprograms, Packages, Statements, Top
636 @section Subprograms
637 @c  -------------------------------------------------------------------------
638 @cindex Subprograms
639
640 @subsection Subprogram Declarations
641 @c  -------------------------------------------------------------------------
642 @itemize @bullet
643
644 @item
645 Do not write the @code{in} for parameters, especially in functions:
646
647 @smallexample @c adanocomment
648       function Length (S : String) return Integer;
649 @end smallexample
650
651 @item
652 When the declaration line for a procedure or a function is too long to fit
653 the entire declaration (including the keyword procedure or function) on a
654 single line, then fold it, putting a single parameter on a line, aligning
655 the colons, as in:
656
657 @smallexample @c adanocomment
658 @group
659      procedure Set_Heading
660         (Source : String;
661          Count  : Natural;
662          Pad    : Character := Space;
663          Fill   : Boolean   := True);
664 @end group
665 @end smallexample
666
667 @noindent
668 In the case of a function, if the entire spec does not fit on one line, then
669 the return may appear after the last parameter, as in:
670
671 @smallexample @c adanocomment
672 @group
673       function Head
674         (Source : String;
675          Count  : Natural;
676          Pad    : Character := Space) return String;
677 @end group
678 @end smallexample
679
680 @noindent
681 Or it may appear on its own as a separate line. This form is preferred when
682 putting the return on the same line as the last parameter would result in
683 an overlong line. The return type may optionally be aligned with the types
684 of the parameters (usually we do this aligning if it results only in a small
685 number of extra spaces, and otherwise we don't attempt to align). So two
686 alternative forms for the above spec are:
687
688 @smallexample @c adanocomment
689 @group
690       function Head
691         (Source : String;
692          Count  : Natural;
693          Pad    : Character := Space)
694          return   String;
695
696       function Head
697         (Source : String;
698          Count  : Natural;
699          Pad    : Character := Space)
700          return String;
701 @end group
702 @end smallexample
703
704 @end itemize
705
706 @subsection Subprogram Bodies
707 @c  -------------------------------------------------------------------------
708 @cindex Subprogram bodies
709
710 @itemize @bullet
711 @item
712 Function and procedure bodies should usually be sorted alphabetically. Do
713 not attempt to sort them in some logical order by functionality. For a
714 sequence of subrpgroams specs, a general alphabetical sorting is also
715 usually appropriate, but occasionally it makes sense to group by major
716 function, with appropriate headers.
717
718 @item
719 All subprograms have a header giving the function name, with the following
720 format:
721
722 @smallexample @c adanocomment
723 @group
724       -----------------
725       -- My_Function --
726       -----------------
727
728       procedure My_Function is
729       begin
730         ...
731       end My_Function;
732 @end group
733 @end smallexample
734
735 @noindent
736 Note that the name in the header is preceded by a single space,
737 not two spaces as for other comments. These headers are used on
738 nested subprograms as well as outer level subprograms. They may
739 also be used as headers for sections of comments, or collections
740 of declarations that are related.
741
742 @item
743 Every subprogram body must have a preceding @syntax{subprogram_declaration}.
744
745 @item
746 @cindex Blank lines (in subprogram bodies)
747 A sequence of declarations may optionally be separated from the following
748 begin by a blank line.  Just as we optionally allow blank lines in general
749 between declarations, this blank line should be present only if it improves
750 readability. Generally we avoid this blank line if the declarative part is
751 small (one or two lines) and we include it if the declarative part is long.
752
753 @item
754 If the declarations in a subprogram contain at least one nested
755 subprogram body, then just before the @code{begin} of the enclosing
756 subprogram, there is a comment line and a blank line:
757
758 @smallexample @c adanocomment
759 @group
760     --  Start of processing for @var{Enclosing_Subprogram}
761
762     begin
763       ...
764     end @var{Enclosing_Subprogram};
765 @end group
766 @end smallexample
767
768 @end itemize
769
770 @c  -------------------------------------------------------------------------
771 @node    Packages, Program Structure, Subprograms, Top
772 @section Packages and Visibility Rules
773 @c  -------------------------------------------------------------------------
774 @cindex Packages
775
776 @itemize @bullet
777 @item
778 All program units and subprograms have their name at the end:
779
780 @smallexample @c adanocomment
781 @group
782       package P is
783          ...
784       end P;
785 @end group
786 @end smallexample
787
788 @item
789 We will use the style of @code{use}-ing @code{with}-ed packages, with
790 the context clauses looking like:
791 @cindex @code{use} clauses
792
793 @smallexample @c adanocomment
794 @group
795       with A; use A;
796       with B; use B;
797 @end group
798 @end smallexample
799
800 @item
801 Names declared in the visible part of packages should be
802 unique, to prevent name clashes when the packages are @code{use}d.
803 @cindex Name clash avoidance
804
805 @smallexample @c adanocomment
806 @group
807       package Entity is
808          type Entity_Kind is ...;
809          ...
810       end Entity;
811 @end group
812 @end smallexample
813
814 @item
815 After the file header comment, the context clause and unit specification
816 should be the first thing in a @syntax{program_unit}.
817 @end itemize
818
819 @c  -------------------------------------------------------------------------
820 @node    Program Structure, GNU Free Documentation License, Packages, Top
821 @section Program Structure and Compilation Issues
822 @c  -------------------------------------------------------------------------
823 @cindex Program structure
824
825 @itemize @bullet
826 @item
827 Every GNAT source file must be compiled with the @option{-gnatg}
828 switch to check the coding style.
829 (Note that you should look at
830 @file{style.adb} to see the lexical rules enforced by
831 @option{-gnatg}).
832 @cindex @option{-gnatg} option (to gcc)
833 @cindex @file{style.adb} file
834
835 @item
836 Each source file should contain only one compilation unit.
837
838 @item
839 Filenames should be 8 or fewer characters, followed by the @code{.adb}
840 extension for a body or @code{.ads} for a spec.
841 @cindex File name length
842
843 @item
844 Unit names should be distinct when ``krunch''ed to 8 characters
845 (see @file{krunch.ads}) and the filenames should match the unit name,
846 except that they are all lower case.
847 @cindex @file{krunch.ads} file
848 @end itemize
849
850
851 @c **********************************
852 @c * GNU Free Documentation License *
853 @c **********************************
854 @include fdl.texi
855 @c GNU Free Documentation License
856 @cindex GNU Free Documentation License
857
858 @node Index,,GNU Free Documentation License, Top
859 @unnumberedsec Index
860
861 @printindex cp
862
863 @contents
864
865 @bye