dc18033
--- etc/standards.texi.jj	2002-02-27 11:32:17.000000000 +0100
dc18033
+++ etc/standards.texi	2005-08-18 19:05:42.000000000 +0200
dc18033
@@ -3,16 +3,13 @@
dc18033
 @setfilename standards.info
dc18033
 @settitle GNU Coding Standards
dc18033
 @c This date is automagically updated when you save this file:
dc18033
-@set lastupdate February 14, 2002
dc18033
+@set lastupdate June 8, 2005
dc18033
 @c %**end of header
dc18033
 
dc18033
-@ifnottex
dc18033
-@format
dc18033
-START-INFO-DIR-ENTRY
dc18033
+@dircategory GNU organization
dc18033
+@direntry
dc18033
 * Standards: (standards).        GNU coding standards.
dc18033
-END-INFO-DIR-ENTRY
dc18033
-@end format
dc18033
-@end ifnottex
dc18033
+@end direntry
dc18033
 
dc18033
 @c @setchapternewpage odd
dc18033
 @setchapternewpage off
dc18033
@@ -32,9 +29,11 @@ END-INFO-DIR-ENTRY
dc18033
 @set CHAPTER node
dc18033
 @end ifnottex
dc18033
 
dc18033
-@ifnottex
dc18033
-GNU Coding Standards
dc18033
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
dc18033
+@copying
dc18033
+The GNU coding standards, last updated @value{lastupdate}.
dc18033
+
dc18033
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
dc18033
+2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
dc18033
 
dc18033
 Permission is granted to copy, distribute and/or modify this document
dc18033
 under the terms of the GNU Free Documentation License, Version 1.1
dc18033
@@ -43,32 +42,25 @@ with no Invariant Sections, with no
dc18033
 Front-Cover Texts, and with no Back-Cover Texts.
dc18033
 A copy of the license is included in the section entitled ``GNU
dc18033
 Free Documentation License''.
dc18033
-@end ifnottex
dc18033
+@end copying
dc18033
 
dc18033
 @titlepage
dc18033
 @title GNU Coding Standards
dc18033
 @author Richard Stallman, et al.
dc18033
 @author last updated @value{lastupdate}
dc18033
 @page
dc18033
-
dc18033
 @vskip 0pt plus 1filll
dc18033
-Copyright @copyright{} 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
dc18033
-
dc18033
-Permission is granted to copy, distribute and/or modify this document
dc18033
-under the terms of the GNU Free Documentation License, Version 1.1
dc18033
-or any later version published by the Free Software Foundation;
dc18033
-with no Invariant Sections, with no
dc18033
-Front-Cover Texts, and with no Back-Cover Texts.
dc18033
-A copy of the license is included in the section entitled ``GNU
dc18033
-Free Documentation License''.
dc18033
+@insertcopying
dc18033
 @end titlepage
dc18033
 
dc18033
-@ifnottex
dc18033
+@contents
dc18033
+
dc18033
+@ifnottex
dc18033
 @node Top, Preface, (dir), (dir)
dc18033
 @top Version
dc18033
 
dc18033
-Last updated @value{lastupdate}.
dc18033
-@end ifnottex
dc18033
+@insertcopying
dc18033
+@end ifnottex
dc18033
 
dc18033
 @menu
dc18033
 * Preface::                     About the GNU Coding Standards
dc18033
@@ -101,15 +93,10 @@ This release of the GNU Coding Standards
dc18033
 @cindex where to obtain @code{standards.texi}
dc18033
 @cindex downloading this manual
dc18033
 If you did not obtain this file directly from the GNU project and
dc18033
-recently, please check for a newer version.  You can ftp the GNU
dc18033
-Coding Standards from any GNU FTP host in the directory
dc18033
-@file{/pub/gnu/standards/}.  The GNU Coding Standards are available
dc18033
-there in several different formats: @file{standards.text},
dc18033
-@file{standards.info}, and @file{standards.dvi}, as well as the
dc18033
-Texinfo ``source'' which is divided in two files:
dc18033
-@file{standards.texi} and @file{make-stds.texi}.  The GNU Coding
dc18033
-Standards are also available on the GNU World Wide Web server:
dc18033
-@uref{http://www.gnu.org/prep/standards_toc.html}.
dc18033
+recently, please check for a newer version.  You can get the GNU
dc18033
+Coding Standards from the GNU web server in many
dc18033
+different formats, including the Texinfo source, PDF, HTML, DVI, plain
dc18033
+text, and more, at: @uref{http://www.gnu.org/prep/standards/}.
dc18033
 
dc18033
 Corrections or suggestions for this document should be sent to
dc18033
 @email{bug-standards@@gnu.org}.  If you make a suggestion, please include a
dc18033
@@ -129,11 +116,15 @@ be self-consistent---try to stick to the
dc18033
 to document them as much as possible.  That way, your program will be
dc18033
 more maintainable by others.
dc18033
 
dc18033
+The GNU Hello program serves as an example of how to follow the GNU
dc18033
+coding standards for a trivial program which prints @samp{Hello,
dc18033
+world!}.  @uref{http://www.gnu.org/software/hello/hello.html}.
dc18033
+
dc18033
 @node Legal Issues
dc18033
 @chapter Keeping Free Software Free
dc18033
 @cindex legal aspects
dc18033
 
dc18033
-This @value{CHAPTER} discusses how you can make sure that GNU software
dc18033
+This chapter discusses how you can make sure that GNU software
dc18033
 avoids legal difficulties, and other related issues.
dc18033
 
dc18033
 @menu
dc18033
@@ -211,7 +202,7 @@ You might have to take that code out aga
dc18033
 You don't need papers for changes of a few lines here or there, since
dc18033
 they are not significant for copyright purposes.  Also, you don't need
dc18033
 papers if all you get from the suggestion is some ideas, not actual code
dc18033
-which you use.  For example, if someone send you one implementation, but
dc18033
+which you use.  For example, if someone sent you one implementation, but
dc18033
 you write a different implementation of the same idea, you don't need to
dc18033
 get papers.
dc18033
 
dc18033
@@ -221,7 +212,8 @@ result.
dc18033
 
dc18033
 We have more detailed advice for maintainers of programs; if you have
dc18033
 reached the stage of actually maintaining a program for GNU (whether
dc18033
-released or not), please ask us for a copy.
dc18033
+released or not), please ask us for a copy.  It is also available
dc18033
+online for your perusal: @uref{http://www.gnu.org/prep/maintain/}.
dc18033
 
dc18033
 @node Trademarks
dc18033
 @section Trademarks
dc18033
@@ -232,24 +224,33 @@ packages or documentation.
dc18033
 
dc18033
 Trademark acknowledgements are the statements that such-and-such is a
dc18033
 trademark of so-and-so.  The GNU Project has no objection to the basic
dc18033
-idea of trademarks, but these acknowledgements feel like kowtowing, so
dc18033
-we don't use them.  There is no legal requirement for them.
dc18033
+idea of trademarks, but these acknowledgements feel like kowtowing, 
dc18033
+and there is no legal requirement for them, so we don't use them.
dc18033
 
dc18033
 What is legally required, as regards other people's trademarks, is to
dc18033
-avoid using them in ways which a reader might read as naming or labeling
dc18033
-our own programs or activities.  For example, since ``Objective C'' is
dc18033
-(or at least was) a trademark, we made sure to say that we provide a
dc18033
-``compiler for the Objective C language'' rather than an ``Objective C
dc18033
-compiler''.  The latter is meant to be short for the former, but it does
dc18033
-not explicitly state the relationship, so it could be misinterpreted as
dc18033
-using ``Objective C'' as a label for the compiler rather than for the
dc18033
-language.
dc18033
+avoid using them in ways which a reader might reasonably understand as
dc18033
+naming or labeling our own programs or activities.  For example, since
dc18033
+``Objective C'' is (or at least was) a trademark, we made sure to say
dc18033
+that we provide a ``compiler for the Objective C language'' rather
dc18033
+than an ``Objective C compiler''.  The latter would have been meant as
dc18033
+a shorter way of saying the former, but it does not explicitly state
dc18033
+the relationship, so it could be misinterpreted as using ``Objective
dc18033
+C'' as a label for the compiler rather than for the language.
dc18033
+
dc18033
+Please don't use ``win'' as an abbreviation for Microsoft Windows in
dc18033
+GNU software or documentation.  In hacker terminology, calling
dc18033
+something a ``win'' is a form of praise.  If you wish to praise
dc18033
+Microsoft Windows when speaking on your own, by all means do so, but
dc18033
+not in GNU software.  Usually we write the name ``Windows'' in full,
dc18033
+but when brevity is very important (as in file names and sometimes
dc18033
+symbol names), we abbreviate it to ``w''.  For instance, the files and
dc18033
+functions in Emacs that deal with Windows start with @samp{w32}.
dc18033
 
dc18033
 @node Design Advice
dc18033
 @chapter General Program Design
dc18033
 @cindex program design
dc18033
 
dc18033
-This @value{CHAPTER} discusses some of the issues you should take into
dc18033
+This chapter discusses some of the issues you should take into
dc18033
 account when designing your program.
dc18033
 
dc18033
 @c                         Standard or ANSI C
dc18033
@@ -263,7 +264,7 @@ account when designing your program.
dc18033
 @c A major revision of the C Standard appeared in 1999.
dc18033
 
dc18033
 @menu
dc18033
-* Source Language::             Which languges to use.
dc18033
+* Source Language::             Which languages to use.
dc18033
 * Compatibility::               Compatibility with other implementations
dc18033
 * Using Extensions::            Using non-standard features
dc18033
 * Standard C::                  Using Standard C features
dc18033
@@ -272,7 +273,7 @@ account when designing your program.
dc18033
 
dc18033
 @node Source Language
dc18033
 @section Which Languages to Use
dc18033
-@cindex programming languges
dc18033
+@cindex programming languages
dc18033
 
dc18033
 When you want to use a language that gets compiled and runs at high
dc18033
 speed, the best language to use is C.  Using another language is like
dc18033
@@ -476,6 +477,7 @@ For example, please write
dc18033
     ...
dc18033
 @end smallexample
dc18033
 
dc18033
+@noindent
dc18033
 instead of:
dc18033
 
dc18033
 @smallexample
dc18033
@@ -488,11 +490,12 @@ instead of:
dc18033
 
dc18033
 A modern compiler such as GCC will generate exactly the same code in
dc18033
 both cases, and we have been using similar techniques with good success
dc18033
-in several projects.
dc18033
+in several projects.  Of course, the former method assumes that
dc18033
+@code{HAS_FOO} is defined as either 0 or 1.
dc18033
 
dc18033
 While this is not a silver bullet solving all portability problems,
dc18033
-following this policy would have saved the GCC project alone many person
dc18033
-hours if not days per year.
dc18033
+and is not always appropriate, following this policy would have saved
dc18033
+GCC developers many hours, or even days, per year.
dc18033
 
dc18033
 In the case of function-like macros like @code{REVERSIBLE_CC_MODE} in
dc18033
 GCC which cannot be simply used in @code{if( ...)} statements, there is
dc18033
@@ -510,7 +513,7 @@ an easy workaround.  Simply introduce an
dc18033
 @node Program Behavior
dc18033
 @chapter Program Behavior for All Programs
dc18033
 
dc18033
-This @value{CHAPTER} describes conventions for writing robust
dc18033
+This chapter describes conventions for writing robust
dc18033
 software.  It also describes general standards for error messages, the
dc18033
 command line interface, and how libraries should behave.
dc18033
 
dc18033
@@ -679,10 +682,12 @@ Error messages from compilers should loo
dc18033
 @end example
dc18033
 
dc18033
 @noindent
dc18033
-If you want to mention the column number, use this format:
dc18033
+If you want to mention the column number, use one of these formats:
dc18033
 
dc18033
 @example
dc18033
 @var{source-file-name}:@var{lineno}:@var{column}: @var{message}
dc18033
+@var{source-file-name}:@var{lineno}.@var{column}: @var{message}   
dc18033
+
dc18033
 @end example
dc18033
 
dc18033
 @noindent
dc18033
@@ -692,6 +697,24 @@ of these conventions are chosen for comp
dc18033
 numbers assuming that space and all ASCII printing characters have
dc18033
 equal width, and assuming tab stops every 8 columns.
dc18033
 
dc18033
+The error message can also give both the starting and ending positions
dc18033
+of the erroneous text.  There are several formats so that you can
dc18033
+avoid redundant information such as a duplicate line number.
dc18033
+Here are the possible formats:
dc18033
+
dc18033
+@example
dc18033
+@var{source-file-name}:@var{lineno-1}.@var{column-1}-@var{lineno-2}.@var{column-2}: @var{message}
dc18033
+@var{source-file-name}:@var{lineno-1}.@var{column-1}-@var{column-2}: @var{message}
dc18033
+@var{source-file-name}:@var{lineno-1}-@var{lineno-2}: @var{message}
dc18033
+@end example
dc18033
+
dc18033
+@noindent
dc18033
+When an error is spread over several files, you can use this format:
dc18033
+
dc18033
+@example
dc18033
+@var{file-1}:@var{lineno-1}.@var{column-1}-@var{file-2}:@var{lineno-2}.@var{column-2}: @var{message}
dc18033
+@end example
dc18033
+
dc18033
 Error messages from other noninteractive programs should look like this:
dc18033
 
dc18033
 @example
dc18033
@@ -722,8 +745,9 @@ input from a source other than a termina
dc18033
 would do best to print error messages using the noninteractive style.)
dc18033
 
dc18033
 The string @var{message} should not begin with a capital letter when
dc18033
-it follows a program name and/or file name.  Also, it should not end
dc18033
-with a period.
dc18033
+it follows a program name and/or file name, because that isn't the
dc18033
+beginning of a sentence.  (The sentence conceptually starts at the
dc18033
+beginning of the line.)  Also, it should not end with a period.
dc18033
 
dc18033
 Error messages from interactive programs, and other messages such as
dc18033
 usage messages, should start with a capital letter.  But they should not
dc18033
@@ -767,9 +791,9 @@ multi-column format.
dc18033
 @section Standards for Graphical Interfaces
dc18033
 @cindex graphical user interface
dc18033
 
dc18033
-@cindex gtk
dc18033
+@cindex gtk+
dc18033
 When you write a program that provides a graphical user interface,
dc18033
-please make it work with X Windows and the GTK toolkit unless the
dc18033
+please make it work with X Windows and the GTK+ toolkit unless the
dc18033
 functionality specifically requires some alternative (for example,
dc18033
 ``displaying jpeg images while in console mode'').
dc18033
 
dc18033
@@ -819,8 +843,15 @@ option as another way to specify it.  Th
dc18033
 among GNU utilities, and fewer idiosyncracies for users to remember.
dc18033
 
dc18033
 @cindex standard command-line options
dc18033
+@cindex options, standard command-line
dc18033
+@cindex CGI programs, standard options for
dc18033
+@cindex PATH_INFO, specifying standard options as
dc18033
 All programs should support two standard options: @samp{--version}
dc18033
-and @samp{--help}.
dc18033
+and @samp{--help}.  CGI programs should accept these as command-line
dc18033
+options, and also if given as the @env{PATH_INFO}; for instance,
dc18033
+visiting @url{http://example.org/p.cgi/--help} in a browser should
dc18033
+output the same information as invoking @samp{p.cgi --help} from the
dc18033
+command line.
dc18033
 
dc18033
 @table @code
dc18033
 @cindex @samp{--version} option
dc18033
@@ -1461,9 +1492,7 @@ Used in @code{gawk}.
dc18033
 Used in @code{su}.
dc18033
 
dc18033
 @item machine
dc18033
-No listing of which programs already use this;
dc18033
-someone should check to
dc18033
-see if any actually do, and tell @email{gnu@@gnu.org}.
dc18033
+Used in @code{uname}.
dc18033
 
dc18033
 @item macro-name
dc18033
 @samp{-M} in @code{ptx}.
dc18033
@@ -1573,6 +1602,9 @@ Used in GDB.
dc18033
 @item no-sort
dc18033
 @samp{-p} in @code{nm}.
dc18033
 
dc18033
+@item no-splash
dc18033
+Don't print a startup splash screen.
dc18033
+
dc18033
 @item no-split
dc18033
 Used in @code{makeinfo}.
dc18033
 
dc18033
@@ -1740,7 +1772,7 @@ Specify an HTTP proxy.
dc18033
 @samp{-q} in Make.
dc18033
 
dc18033
 @item quiet
dc18033
-Used in many programs to inhibit the usual output.  @strong{Note:} every
dc18033
+Used in many programs to inhibit the usual output.  Every
dc18033
 program accepting @samp{--quiet} should accept @samp{--silent} as a
dc18033
 synonym.
dc18033
 
dc18033
@@ -1855,7 +1887,7 @@ Used by @code{recode} to chose files or 
dc18033
 
dc18033
 @item silent
dc18033
 Used in many programs to inhibit the usual output.
dc18033
-@strong{Note:} every program accepting
dc18033
+Every program accepting
dc18033
 @samp{--silent} should accept @samp{--quiet} as a synonym.
dc18033
 
dc18033
 @item size
dc18033
@@ -2098,7 +2130,7 @@ directory.
dc18033
 @node Writing C
dc18033
 @chapter Making The Best Use of C
dc18033
 
dc18033
-This @value{CHAPTER} provides advice on how best to use the C language
dc18033
+This chapter provides advice on how best to use the C language
dc18033
 when writing GNU software.
dc18033
 
dc18033
 @menu
dc18033
@@ -2128,13 +2160,12 @@ These tools will not work on code not fo
dc18033
 It is also important for function definitions to start the name of the
dc18033
 function in column zero.  This helps people to search for function
dc18033
 definitions, and may also help certain tools recognize them.  Thus,
dc18033
-the proper format is this:
dc18033
+using Standard C syntax, the format is this:
dc18033
 
dc18033
 @example
dc18033
 static char *
dc18033
-concat (s1, s2)        /* Name starts in column zero here */
dc18033
-     char *s1, *s2;
dc18033
-@{                     /* Open brace in column zero here */
dc18033
+concat (char *s1, char *s2)
dc18033
+@{
dc18033
   @dots{}
dc18033
 @}
dc18033
 @end example
dc18033
@@ -2145,8 +2176,9 @@ this:
dc18033
 
dc18033
 @example
dc18033
 static char *
dc18033
-concat (char *s1, char *s2)
dc18033
-@{
dc18033
+concat (s1, s2)        /* Name starts in column zero here */
dc18033
+     char *s1, *s2;
dc18033
+@{                     /* Open brace in column zero here */
dc18033
   @dots{}
dc18033
 @}
dc18033
 @end example
dc18033
@@ -2383,7 +2415,7 @@ functions.
dc18033
 @cindex temporary variables
dc18033
 It used to be common practice to use the same local variables (with
dc18033
 names like @code{tem}) over and over for different values within one
dc18033
-function.  Instead of doing this, it is better declare a separate local
dc18033
+function.  Instead of doing this, it is better to declare a separate local
dc18033
 variable for each distinct purpose, and give it a name which is
dc18033
 meaningful.  This not only makes programs easier to understand, it also
dc18033
 facilitates optimization by good compilers.  You can also move the
dc18033
@@ -2584,11 +2616,20 @@ Avoid using the format of semi-internal 
dc18033
 when there is a higher-level alternative (@code{readdir}).
dc18033
 
dc18033
 @cindex non-@sc{posix} systems, and portability
dc18033
-As for systems that are not like Unix, such as MSDOS, Windows, the
dc18033
-Macintosh, VMS, and MVS, supporting them is often a lot of work.  When
dc18033
-that is the case, it is better to spend your time adding features that
dc18033
-will be useful on GNU and GNU/Linux, rather than on supporting other
dc18033
-incompatible systems.
dc18033
+As for systems that are not like Unix, such as MSDOS, Windows, VMS,
dc18033
+MVS, and older Macintosh systems, supporting them is often a lot of
dc18033
+work.  When that is the case, it is better to spend your time adding
dc18033
+features that will be useful on GNU and GNU/Linux, rather than on
dc18033
+supporting other incompatible systems.
dc18033
+
dc18033
+If you do support Windows, please do not abbreviate it as ``win''.  In
dc18033
+hacker terminology, calling something a ``win'' is a form of praise.
dc18033
+You're free to praise Microsoft Windows on your own if you want, but
dc18033
+please don't do this in GNU packages.  Instead of abbreviating
dc18033
+``Windows'' to ``un'', you can write it in full or abbreviate it to
dc18033
+``woe'' or ``w''.  In GNU Emacs, for instance, we use @samp{w32} in
dc18033
+file names of Windows-specific files, but the macro for Windows
dc18033
+conditionals is called @code{WINDOWSNT}.
dc18033
 
dc18033
 It is a good idea to define the ``feature test macro''
dc18033
 @code{_GNU_SOURCE} when compiling your C files.  When you compile on GNU
dc18033
@@ -2644,37 +2685,50 @@ while ((c = getchar()) != EOF)
dc18033
   write(file_descriptor, &c, 1);
dc18033
 @end example
dc18033
 
dc18033
-When calling functions, you need not worry about the difference between
dc18033
-pointers of various types, or between pointers and integers.  On most
dc18033
-machines, there's no difference anyway.  As for the few machines where
dc18033
-there is a difference, all of them support Standard C prototypes, so you can
dc18033
-use prototypes (perhaps conditionalized to be active only in Standard C)
dc18033
-to make the code work on those systems.
dc18033
-
dc18033
-In certain cases, it is ok to pass integer and pointer arguments
dc18033
-indiscriminately to the same function, and use no prototype on any
dc18033
-system.  For example, many GNU programs have error-reporting functions
dc18033
-that pass their arguments along to @code{printf} and friends:
dc18033
-
dc18033
-@example
dc18033
-error (s, a1, a2, a3)
dc18033
-     char *s;
dc18033
-     char *a1, *a2, *a3;
dc18033
-@{
dc18033
-  fprintf (stderr, "error: ");
dc18033
-  fprintf (stderr, s, a1, a2, a3);
dc18033
-@}
dc18033
+It used to be ok to not worry about the difference between pointers
dc18033
+and integers when passing arguments to functions.  However, on most
dc18033
+modern 64-bit machines pointers are wider than @code{int}.
dc18033
+Conversely, integer types like @code{long long int} and @code{off_t}
dc18033
+are wider than pointers on most modern 32-bit machines.  Hence it's
dc18033
+often better nowadays to use prototypes to define functions whose
dc18033
+argument types are not trivial.
dc18033
+
dc18033
+In particular, if functions accept varying argument counts or types
dc18033
+they should be declared using prototypes containing @samp{...} and
dc18033
+defined using @file{stdarg.h}.  For an example of this, please see the
dc18033
+@uref{http://www.gnu.org/software/gnulib/, Gnulib} error module, which
dc18033
+declares and defines the following function:
dc18033
+
dc18033
+@example
dc18033
+/* Print a message with `fprintf (stderr, FORMAT, ...)';
dc18033
+   if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM).
dc18033
+   If STATUS is nonzero, terminate the program with `exit (STATUS)'.  */
dc18033
+
dc18033
+void error (int status, int errnum, const char *format, ...);
dc18033
 @end example
dc18033
 
dc18033
-@noindent
dc18033
-In practice, this works on all machines, since a pointer is generally
dc18033
-the widest possible kind of argument; it is much simpler than any
dc18033
-``correct'' alternative.  Be sure @emph{not} to use a prototype for such
dc18033
-functions.
dc18033
+A simple way to use the Gnulib error module is to obtain the two
dc18033
+source files @file{error.c} and @file{error.h} from the Gnulib library
dc18033
+source code repository at
dc18033
+@uref{http://savannah.gnu.org/cgi-bin/viewcvs/gnulib/gnulib/lib/}.
dc18033
+Here's a sample use:
dc18033
 
dc18033
-If you have decided to use Standard C, then you can instead define
dc18033
-@code{error} using @file{stdarg.h}, and pass the arguments along to
dc18033
-@code{vfprintf}.
dc18033
+@example
dc18033
+#include "error.h"
dc18033
+#include <errno.h>
dc18033
+#include <stdio.h>
dc18033
+
dc18033
+char *program_name = "myprogram";
dc18033
+
dc18033
+FILE *
dc18033
+xfopen (char const *name)
dc18033
+@{
dc18033
+  FILE *fp = fopen (name, "r");
dc18033
+  if (! fp)
dc18033
+    error (1, errno, "cannot read %s", name);
dc18033
+  return fp;
dc18033
+@}
dc18033
+@end example
dc18033
 
dc18033
 @cindex casting pointers to integers
dc18033
 Avoid casting pointers to integers if you can.  Such casts greatly
dc18033
@@ -3000,10 +3054,13 @@ together, we can make the whole subject 
dc18033
 
dc18033
 The manual which discusses a program should certainly document all of
dc18033
 the program's command-line options and all of its commands.  It should
dc18033
-give examples of their use.  But don't organize the manual as a list of
dc18033
-features.  Instead, organize it logically, by subtopics.  Address the
dc18033
-questions that a user will ask when thinking about the job that the
dc18033
-program does.
dc18033
+give examples of their use.  But don't organize the manual as a list
dc18033
+of features.  Instead, organize it logically, by subtopics.  Address
dc18033
+the questions that a user will ask when thinking about the job that
dc18033
+the program does.  Don't just tell the reader what each feature can
dc18033
+do---say what jobs it is good for, and show how to use it for those
dc18033
+jobs.  Explain what is recommended usage, and what kinds of usage
dc18033
+users should avoid.
dc18033
 
dc18033
 In general, a GNU manual should serve both as tutorial and reference.
dc18033
 It should be set up for convenient access to each topic through Info,
dc18033
@@ -3030,9 +3087,9 @@ functions, variables, options, and impor
dc18033
 the program.  One combined Index should do for a short manual, but
dc18033
 sometimes for a complex package it is better to use multiple indices.
dc18033
 The Texinfo manual includes advice on preparing good index entries, see
dc18033
-@ref{Index Entries, , Making Index Entries, texinfo, The GNU Texinfo
dc18033
-Manual}, and see @ref{Indexing Commands, , Defining the Entries of an
dc18033
-Index, texinfo, The GNU Texinfo manual}.
dc18033
+@ref{Index Entries, , Making Index Entries, texinfo, GNU Texinfo}, and
dc18033
+see @ref{Indexing Commands, , Defining the Entries of an
dc18033
+Index, texinfo, GNU Texinfo}.
dc18033
 
dc18033
 Don't use Unix man pages as a model for how to write GNU documentation;
dc18033
 most of them are terse, badly structured, and give inadequate
dc18033
@@ -3041,15 +3098,15 @@ exceptions.)  Also, Unix man pages use a
dc18033
 different from what we use in GNU manuals.
dc18033
 
dc18033
 Please include an email address in the manual for where to report
dc18033
-bugs @emph{in the manual}.
dc18033
+bugs @emph{in the text of the manual}.
dc18033
 
dc18033
 Please do not use the term ``pathname'' that is used in Unix
dc18033
 documentation; use ``file name'' (two words) instead.  We use the term
dc18033
 ``path'' only for search paths, which are lists of directory names.
dc18033
 
dc18033
-Please do not use the term ``illegal'' to refer to erroneous input to a
dc18033
-computer program.  Please use ``invalid'' for this, and reserve the term
dc18033
-``illegal'' for activities punishable by law.
dc18033
+Please do not use the term ``illegal'' to refer to erroneous input to
dc18033
+a computer program.  Please use ``invalid'' for this, and reserve the
dc18033
+term ``illegal'' for activities prohibited by law.
dc18033
 
dc18033
 @node Doc Strings and Manuals
dc18033
 @section Doc Strings and Manuals
dc18033
@@ -3092,7 +3149,7 @@ Each program documented in the manual sh
dc18033
 @samp{@var{program} Invocation} or @samp{Invoking @var{program}}.  This
dc18033
 node (together with its subnodes, if any) should describe the program's
dc18033
 command line arguments and how to run it (the sort of information people
dc18033
-would look in a man page for).  Start with an @samp{@@example}
dc18033
+would look for in a man page).  Start with an @samp{@@example}
dc18033
 containing a template for all the options and arguments that the program
dc18033
 uses.
dc18033
 
dc18033
@@ -3210,6 +3267,11 @@ code.  For example, ``New function'' is 
dc18033
 you add a function, because there should be a comment before the
dc18033
 function definition to explain what it does.
dc18033
 
dc18033
+In the past, we recommended not mentioning changes in non-software
dc18033
+files (manuals, help files, etc.) in change logs.  However, we've been
dc18033
+advised that it is a good idea to include them, for the sake of
dc18033
+copyright records.
dc18033
+
dc18033
 However, sometimes it is useful to write one line to describe the
dc18033
 overall purpose of a batch of changes.
dc18033
 
dc18033
@@ -3224,9 +3286,9 @@ Then describe the changes you made to th
dc18033
 @cindex change logs, style
dc18033
 
dc18033
 Here are some simple examples of change log entries, starting with the
dc18033
-header line that says who made the change and when, followed by
dc18033
-descriptions of specific changes.  (These examples are drawn from Emacs
dc18033
-and GCC.)
dc18033
+header line that says who made the change and when it was installed,
dc18033
+followed by descriptions of specific changes.  (These examples are
dc18033
+drawn from Emacs and GCC.)
dc18033
 
dc18033
 @example
dc18033
 1998-08-17  Richard Stallman  <rms@@gnu.org>
dc18033
@@ -3270,6 +3332,27 @@ Break long lists of function names by cl
dc18033
 (Fexecute_extended_command): Deal with `keymap' property.
dc18033
 @end example
dc18033
 
dc18033
+When you install someone else's changes, put the contributor's name in
dc18033
+the change log entry rather than in the text of the entry.  In other
dc18033
+words, write this:
dc18033
+
dc18033
+@example
dc18033
+2002-07-14  John Doe  <jdoe@@gnu.org>
dc18033
+
dc18033
+        * sewing.c: Make it sew.
dc18033
+@end example
dc18033
+
dc18033
+@noindent
dc18033
+rather than this:
dc18033
+
dc18033
+@example
dc18033
+2002-07-14  Usual Maintainer  <usual@@gnu.org>
dc18033
+
dc18033
+        * sewing.c: Make it sew.  Patch by jdoe@@gnu.org.
dc18033
+@end example
dc18033
+
dc18033
+As for the date, that should be the date you applied the change.
dc18033
+
dc18033
 @node Simple Changes
dc18033
 @subsection Simple Changes
dc18033
 
dc18033
@@ -3291,12 +3374,17 @@ When you change just comments or doc str
dc18033
 entry for the file, without mentioning the functions.  Just ``Doc
dc18033
 fixes'' is enough for the change log.
dc18033
 
dc18033
-There's no need to make change log entries for documentation files.
dc18033
-This is because documentation is not susceptible to bugs that are hard
dc18033
-to fix.  Documentation does not consist of parts that must interact in a
dc18033
-precisely engineered fashion.  To correct an error, you need not know
dc18033
-the history of the erroneous passage; it is enough to compare what the
dc18033
-documentation says with the way the program actually works.
dc18033
+There's no technical need to make change log entries for documentation
dc18033
+files.  This is because documentation is not susceptible to bugs that
dc18033
+are hard to fix.  Documentation does not consist of parts that must
dc18033
+interact in a precisely engineered fashion.  To correct an error, you
dc18033
+need not know the history of the erroneous passage; it is enough to
dc18033
+compare what the documentation says with the way the program actually
dc18033
+works.
dc18033
+
dc18033
+However, you should keep change logs for documentation files when the
dc18033
+project gets copyright assignments from its contributors, so as to
dc18033
+make the records of authorship more accurate.
dc18033
 
dc18033
 @node Conditional Changes
dc18033
 @subsection Conditional Changes
dc18033
@@ -3387,6 +3475,25 @@ page explaining that you don't maintain 
dc18033
 is more authoritative.  The note should say how to access the Texinfo
dc18033
 documentation.
dc18033
 
dc18033
+Be sure that man pages include a copyright statement and free
dc18033
+license.  The simple all-permissive license is appropriate for simple
dc18033
+man pages:
dc18033
+
dc18033
+@example
dc18033
+Copying and distribution of this file, with or without modification,
dc18033
+are permitted in any medium without royalty provided the copyright
dc18033
+notice and this notice are preserved.
dc18033
+@end example
dc18033
+
dc18033
+For long man pages, with enough explanation and documentation that
dc18033
+they can be considered true manuals, use the GFDL (@pxref{License for
dc18033
+Manuals}).
dc18033
+
dc18033
+Finally, the GNU help2man program
dc18033
+(@uref{http://www.gnu.org/software/help2man/}) is one way to automate
dc18033
+generation of a man page, in this case from @option{--help} output.
dc18033
+This is sufficient in many cases.
dc18033
+
dc18033
 @node Reading other Manuals
dc18033
 @section Reading other Manuals
dc18033
 
dc18033
@@ -3486,19 +3593,26 @@ this:
dc18033
 @var{cpu}-@var{company}-@var{system}
dc18033
 @end example
dc18033
 
dc18033
-For example, a Sun 3 might be @samp{m68k-sun-sunos4.1}.
dc18033
+For example, an Athlon-based GNU/Linux system might be
dc18033
+@samp{i686-pc-linux-gnu}.
dc18033
 
dc18033
 The @code{configure} script needs to be able to decode all plausible
dc18033
-alternatives for how to describe a machine.  Thus, @samp{sun3-sunos4.1}
dc18033
-would be a valid alias.  For many programs, @samp{vax-dec-ultrix} would
dc18033
-be an alias for @samp{vax-dec-bsd}, simply because the differences
dc18033
-between Ultrix and @sc{bsd} are rarely noticeable, but a few programs
dc18033
-might need to distinguish them.
dc18033
-@c Real 4.4BSD now runs on some Suns.
dc18033
-
dc18033
-There is a shell script called @file{config.sub} that you can use
dc18033
+alternatives for how to describe a machine.  Thus,
dc18033
+@samp{athlon-pc-gnu/linux} would be a valid alias.
dc18033
+There is a shell script called
dc18033
+@uref{ftp://ftp.gnu.org/gnu/config/config.sub, @file{config.sub}}
dc18033
+that you can use
dc18033
 as a subroutine to validate system types and canonicalize aliases.
dc18033
 
dc18033
+The @code{configure} script should also take the option
dc18033
+@option{--build=@var{buildtype}}, which should be equivalent to a
dc18033
+plain @var{buildtype} argument.  For example, @samp{configure
dc18033
+--build=i686-pc-linux-gnu} is equivalent to @samp{configure
dc18033
+i686-pc-linux-gnu}.  When the build type is not specified by an option
dc18033
+or argument, the @code{configure} script should normally guess it
dc18033
+using the shell script
dc18033
+@uref{ftp://ftp.gnu.org/gnu/config/config.guess, @file{config.guess}}.
dc18033
+
dc18033
 @cindex optional features, configure-time
dc18033
 Other options are permitted to specify in more detail the software
dc18033
 or hardware present on the machine, and include or exclude optional
dc18033
@@ -3558,6 +3672,11 @@ The @code{configure} script should norma
dc18033
 system as both the host and the target, thus producing a program which
dc18033
 works for the same type of machine that it runs on.
dc18033
 
dc18033
+To compile a program to run on a host type that differs from the build
dc18033
+type, use the configure option @option{--host=@var{hosttype}}, where
dc18033
+@var{hosttype} uses the same syntax as @var{buildtype}.  The host type
dc18033
+normally defaults to the build type.
dc18033
+
dc18033
 To configure a cross-compiler, cross-assembler, or what have you, you
dc18033
 should specify a target different from the host, using the configure
dc18033
 option @samp{--target=@var{targettype}}.  The syntax for
dc18033
@@ -3565,22 +3684,14 @@ option @samp{--target=@var{targettype}}.
dc18033
 look like this:
dc18033
 
dc18033
 @example
dc18033
-./configure @var{hosttype} --target=@var{targettype}
dc18033
+./configure --host=@var{hosttype} --target=@var{targettype}
dc18033
 @end example
dc18033
 
dc18033
+The target type normally defaults to the host type.
dc18033
 Programs for which cross-operation is not meaningful need not accept the
dc18033
 @samp{--target} option, because configuring an entire operating system for
dc18033
 cross-operation is not a meaningful operation.
dc18033
 
dc18033
-Bootstrapping a cross-compiler requires compiling it on a machine other
dc18033
-than the host it will run on.  Compilation packages accept a
dc18033
-configuration option @samp{--build=@var{buildtype}} for specifying the
dc18033
-configuration on which you will compile them, but the configure script
dc18033
-should normally guess the build machine type (using
dc18033
-@file{config.guess}), so this option is probably not necessary.  The
dc18033
-host and target types normally default from the build type, so in
dc18033
-bootstrapping a cross-compiler you must specify them both explicitly.
dc18033
-
dc18033
 Some programs have ways of configuring themselves automatically.  If
dc18033
 your program is set up to do this, your @code{configure} script can simply
dc18033
 ignore most of its arguments.
dc18033
@@ -3596,6 +3707,10 @@ ignore most of its arguments.
dc18033
 @section Making Releases
dc18033
 @cindex packaging
dc18033
 
dc18033
+You should identify each release with a pair of version numbers, a
dc18033
+major version and a minor.  We have no objection to using more than
dc18033
+two numbers, but it is very unlikely that you really need them.
dc18033
+
dc18033
 Package the distribution of @code{Foo version 69.96} up in a gzipped tar
dc18033
 file with the name @file{foo-69.96.tar.gz}.  It should unpack into a
dc18033
 subdirectory named @file{foo-69.96}.
dc18033
@@ -3644,13 +3759,6 @@ able to extract all the files even if th
dc18033
 
dc18033
 Make sure that all the files in the distribution are world-readable.
dc18033
 
dc18033
-Make sure that no file name in the distribution is more than 14
dc18033
-characters long.  Likewise, no file created by building the program
dc18033
-should have a name longer than 14 characters.  The reason for this is
dc18033
-that some systems adhere to a foolish interpretation of the @sc{posix}
dc18033
-standard, and refuse to open a longer name, rather than truncating as
dc18033
-they did in the past.
dc18033
-
dc18033
 Don't include any symbolic links in the distribution itself.  If the tar
dc18033
 file contains symbolic links, then people cannot even unpack it on
dc18033
 systems that don't support symbolic links.  Also, don't use multiple
dc18033
@@ -3682,16 +3790,27 @@ other files to get.
dc18033
 
dc18033
 A GNU program should not recommend use of any non-free program.  We
dc18033
 can't stop some people from writing proprietary programs, or stop
dc18033
-other people from using them, but we can and should avoid helping to
dc18033
+other people from using them, but we can and should refuse to
dc18033
 advertise them to new potential customers.  Proprietary software is a
dc18033
 social and ethical problem, and the point of GNU is to solve that
dc18033
 problem.
dc18033
 
dc18033
+The GNU definition of free software is found on the GNU web site at
dc18033
+@url{http://www.gnu.org/philosophy/free-sw.html}.  A list of
dc18033
+important licenses and whether they qualify as free is in
dc18033
+@url{http://www.gnu.org/licenses/license-list.html}.  The terms
dc18033
+``free'' and ``non-free'', used in this document, refer to that
dc18033
+definition.  If it is not clear whether a license qualifies as free
dc18033
+under this definition, please ask the GNU Project by writing to
dc18033
+@email{licensing@@gnu.org}.  We will answer, and if the license is an
dc18033
+important one, we will add it to the list.
dc18033
+
dc18033
 When a non-free program or system is well known, you can mention it in
dc18033
 passing---that is harmless, since users who might want to use it
dc18033
 probably already know about it.  For instance, it is fine to explain
dc18033
-how to build your package on top of some non-free operating system, or
dc18033
-how to use it together with some widely used non-free program.
dc18033
+how to build your package on top of some widely used non-free
dc18033
+operating system, or how to use it together with some widely used
dc18033
+non-free program.
dc18033
 
dc18033
 However, you should give only the necessary information to help those
dc18033
 who already use the non-free program to use your program with
dc18033
@@ -3700,8 +3819,8 @@ proprietary program, and don't imply tha
dc18033
 enhances your program, or that its existence is in any way a good
dc18033
 thing.  The goal should be that people already using the proprietary
dc18033
 program will get the advice they need about how to use your free
dc18033
-program, while people who don't already use the proprietary program
dc18033
-will not see anything to lead them to take an interest in it.
dc18033
+program with it, while people who don't already use the proprietary
dc18033
+program will not see anything to lead them to take an interest in it.
dc18033
 
dc18033
 If a non-free program or system is obscure in your program's domain,
dc18033
 your program should not mention or support it at all, since doing so
dc18033
@@ -3709,13 +3828,46 @@ would tend to popularize the non-free pr
dc18033
 your program.  (You cannot hope to find many additional users among
dc18033
 the users of Foobar if the users of Foobar are few.)
dc18033
 
dc18033
+Sometimes a program is free software in itself but depends on a
dc18033
+non-free platform in order to run.  For instance, many Java programs
dc18033
+depend on Sun's Java implementation, and won't run on the GNU Java
dc18033
+Compiler (which does not yet have all the features) or won't run with
dc18033
+the GNU Java libraries.  To recommend that program is inherently to
dc18033
+recommend the non-free platform as well; if you should not do the
dc18033
+latter, then don't do the former.
dc18033
+
dc18033
 A GNU package should not refer the user to any non-free documentation
dc18033
 for free software.  Free documentation that can be included in free
dc18033
-operating systems is essential for completing the GNU system, so it is
dc18033
-a major focus of the GNU Project; to recommend use of documentation
dc18033
-that we are not allowed to use in GNU would undermine the efforts to
dc18033
-get documentation that we can include.  So GNU packages should never
dc18033
-recommend non-free documentation.
dc18033
+operating systems is essential for completing the GNU system, or any
dc18033
+free operating system, so it is a major focus of the GNU Project; to
dc18033
+recommend use of documentation that we are not allowed to use in GNU
dc18033
+would weaken the impetus for the community to produce documentation
dc18033
+that we can include.  So GNU packages should never recommend non-free
dc18033
+documentation.
dc18033
+
dc18033
+By contrast, it is ok to refer to journal articles and textbooks in
dc18033
+the comments of a program for explanation of how it functions, even
dc18033
+though they be non-free.  This is because we don't include such things
dc18033
+in the GNU system even if we are allowed to--they are outside the
dc18033
+scope of an operating system project.
dc18033
+
dc18033
+Referring to a web site that describes or recommends a non-free
dc18033
+program is in effect promoting that software, so please do not make
dc18033
+links (or mention by name) web sites that contain such material.  This
dc18033
+policy is relevant particularly for the web pages for a GNU package.
dc18033
+
dc18033
+Following links from nearly any web site can lead to non-free
dc18033
+software; this is an inescapable aspect of the nature of the web, and
dc18033
+in itself is no objection to linking to a site.  As long as the site
dc18033
+does not itself recommend a non-free program, there is no need be
dc18033
+concerned about the sites it links to for other reasons.
dc18033
+
dc18033
+Thus, for example, you should not make a link to AT&T's web site,
dc18033
+because that recommends AT&T's non-free software packages; you should
dc18033
+not make a link to a site that links to AT&T's site saying it is a
dc18033
+place to get a non-free program; but if a site you want to link to
dc18033
+refers to AT&T's web site in some other context (such as long-distance
dc18033
+telephone service), that is not a problem.
dc18033
 
dc18033
 @node Copying This Manual
dc18033
 @appendix Copying This Manual
dc18033
@@ -3730,13 +3882,12 @@ recommend non-free documentation.
dc18033
 @unnumbered Index
dc18033
 @printindex cp
dc18033
 
dc18033
-@contents
dc18033
-
dc18033
 @bye
dc18033
-@c Local variables:
dc18033
-@c eval: (add-hook 'write-file-hooks 'time-stamp)
dc18033
-@c time-stamp-start: "@set lastupdate "
dc18033
-@c time-stamp-end: "$"
dc18033
-@c time-stamp-format: "%:b %:d, %:y"
dc18033
-@c compile-command: "make just-standards"
dc18033
-@c End:
dc18033
+
dc18033
+Local variables:
dc18033
+eval: (add-hook 'write-file-hooks 'time-stamp)
dc18033
+time-stamp-start: "@set lastupdate "
dc18033
+time-stamp-end: "$"
dc18033
+time-stamp-format: "%:b %:d, %:y"
dc18033
+compile-command: "make just-standards"
dc18033
+End: