annotate man/standards.texi @ 5353:38e24b8be4ea

Improve the lexical scoping in #'block, #'return-from. lisp/ChangeLog addition: 2011-02-07 Aidan Kehoe <kehoea@parhasard.net> * bytecomp.el: * bytecomp.el (byte-compile-initial-macro-environment): Shadow `block', `return-from' here, we implement them differently when byte-compiling. * bytecomp.el (byte-compile-active-blocks): New. * bytecomp.el (byte-compile-block-1): New. * bytecomp.el (byte-compile-return-from-1): New. * bytecomp.el (return-from-1): New. * bytecomp.el (block-1): New. These are two aliases that exist to have their own associated byte-compile functions, which functions implement `block' and `return-from'. * cl-extra.el (cl-macroexpand-all): Fix a bug here when macros in the environment have been compiled. * cl-macs.el (block): * cl-macs.el (return): * cl-macs.el (return-from): Be more careful about lexical scope in these macros. * cl.el: * cl.el ('cl-block-wrapper): Removed. * cl.el ('cl-block-throw): Removed. These aren't needed in code generated by this XEmacs. They shouldn't be needed in code generated by XEmacs 21.4, but if it turns out the packages do need them, we can put them back. 2011-01-30 Mike Sperber <mike@xemacs.org> * font-lock.el (font-lock-fontify-pending-extents): Don't fail if `font-lock-mode' is unset, which can happen in the middle of `revert-buffer'. 2011-01-23 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (delete): * cl-macs.el (delq): * cl-macs.el (remove): * cl-macs.el (remq): Don't use the compiler macro if these functions were given the wrong number of arguments, as happens in lisp-tests.el. * cl-seq.el (remove, remq): Removed. I added these to subr.el, and forgot to remove them from here. 2011-01-22 Aidan Kehoe <kehoea@parhasard.net> * bytecomp.el (byte-compile-setq, byte-compile-set): Remove kludge allowing keywords' values to be set, all the code that does that is gone. * cl-compat.el (elt-satisfies-test-p): * faces.el (set-face-parent): * faces.el (face-doc-string): * gtk-font-menu.el: * gtk-font-menu.el (gtk-reset-device-font-menus): * msw-font-menu.el: * msw-font-menu.el (mswindows-reset-device-font-menus): * package-get.el (package-get-installedp): * select.el (select-convert-from-image-data): * sound.el: * sound.el (load-sound-file): * x-font-menu.el (x-reset-device-font-menus-core): Don't quote keywords, they're self-quoting, and the win from backward-compatibility is sufficiently small now that the style problem overrides it. 2011-01-22 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (block, return-from): Require that NAME be a symbol in these macros, as always documented in the #'block docstring and as required by Common Lisp. * descr-text.el (unidata-initialize-unihan-database): Correct the use of non-symbols in #'block and #'return-from in this function. 2011-01-15 Aidan Kehoe <kehoea@parhasard.net> * cl-extra.el (concatenate): Accept more complicated TYPEs in this function, handing the sequences over to #'coerce if we don't understand them here. * cl-macs.el (inline): Don't proclaim #'concatenate as inline, its compiler macro is more useful than doing that. 2011-01-11 Aidan Kehoe <kehoea@parhasard.net> * subr.el (delete, delq, remove, remq): Move #'remove, #'remq here, they don't belong in cl-seq.el; move #'delete, #'delq here from fns.c, implement them in terms of #'delete*, allowing support for sequences generally. * update-elc.el (do-autoload-commands): Use #'delete*, not #'delq here, now the latter's no longer dumped. * cl-macs.el (delete, delq): Add compiler macros transforming #'delete and #'delq to #'delete* calls. 2011-01-10 Aidan Kehoe <kehoea@parhasard.net> * dialog.el (make-dialog-box): Correct a misplaced parenthesis here, thank you Mats Lidell in 87zkr9gqrh.fsf@mail.contactor.se ! 2011-01-02 Aidan Kehoe <kehoea@parhasard.net> * dialog.el (make-dialog-box): * list-mode.el (display-completion-list): These functions used to use cl-parsing-keywords; change them to use defun* instead, fixing the build. (Not sure what led to me not including this change in d1b17a33450b!) 2011-01-02 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (define-star-compiler-macros): Make sure the form has ITEM and LIST specified before attempting to change to calls with explicit tests; necessary for some tests in lisp-tests.el to compile correctly. (stable-union, stable-intersection): Add compiler macros for these functions, in the same way we do for most of the other functions in cl-seq.el. 2011-01-01 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (dolist, dotimes, do-symbols, macrolet) (symbol-macrolet): Define these macros with defmacro* instead of parsing the argument list by hand, for the sake of style and readability; use backquote where appropriate, instead of calling #'list and and friends, for the same reason. 2010-12-30 Aidan Kehoe <kehoea@parhasard.net> * x-misc.el (device-x-display): Provide this function, documented in the Lispref for years, but not existing previously. Thank you Julian Bradfield, thank you Jeff Mincy. 2010-12-30 Aidan Kehoe <kehoea@parhasard.net> * cl-seq.el: Move the heavy lifting from this file to C. Dump the cl-parsing-keywords macro, but don't use defun* for the functions we define that do take keywords, dynamic scope lossage makes that not practical. * subr.el (sort, fillarray): Move these aliases here. (map-plist): #'nsublis is now built-in, but at this point #'eql isn't necessarily available as a test; use #'eq. * obsolete.el (cl-delete-duplicates): Make this available for old compiler macros and old code. (memql): Document that this is equivalent to #'member*, and worse. * cl.el (adjoin, subst): Removed. These are in C. 2010-12-30 Aidan Kehoe <kehoea@parhasard.net> * simple.el (assoc-ignore-case): Remove a duplicate definition of this function (it's already in subr.el). * iso8859-1.el (char-width): On non-Mule, make this function equivalent to that produced by (constantly 1), but preserve its docstring. * subr.el (subst-char-in-string): Define this in terms of #'substitute, #'nsubstitute. (string-width): Define this using #'reduce and #'char-width. (char-width): Give this a simpler definition, it makes far more sense to check for mule at load time and redefine, as we do in iso8859-1.el. (store-substring): Implement this in terms of #'replace, now #'replace is cheap. 2010-12-30 Aidan Kehoe <kehoea@parhasard.net> * update-elc.el (lisp-files-needed-for-byte-compilation) (lisp-files-needing-early-byte-compilation): cl-macs belongs in the former, not the latter, it is as fundamental as bytecomp.el. 2010-12-30 Aidan Kehoe <kehoea@parhasard.net> * cl.el: Provde the Common Lisp program-error, type-error as error symbols. This doesn't nearly go far enough for anyone using the Common Lisp errors. 2010-12-29 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (delete-duplicates): If the form has an incorrect number of arguments, don't attempt a compiler macroexpansion. 2010-12-29 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (cl-safe-expr-p): Forms that start with the symbol lambda are also safe. 2010-12-29 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (= < > <= >=): For these functions' compiler macros, the optimisation is safe even if the first and the last arguments have side effects, since they're only used the once. 2010-12-29 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (inline-side-effect-free-compiler-macros): Unroll a loop here at macro-expansion time, so these compiler macros are compiled. Use #'eql instead of #'eq in a couple of places for better style. 2010-12-29 Aidan Kehoe <kehoea@parhasard.net> * cl-extra.el (notany, notevery): Avoid some dynamic scope stupidity with local variable names in these functions, when they weren't prefixed with cl-; go into some more detail in the doc strings. 2010-12-29 Aidan Kehoe <kehoea@parhasard.net> * byte-optimize.el (side-effect-free-fns): #'remove, #'remq are free of side-effects. (side-effect-and-error-free-fns): Drop dot, dot-marker from the list. 2010-11-17 Aidan Kehoe <kehoea@parhasard.net> * cl-extra.el (coerce): In the argument list, name the first argument OBJECT, not X; the former name was always used in the doc string and is clearer. Handle vector type specifications which include the length of the target sequence, error if there's a mismatch. * cl-macs.el (cl-make-type-test): Handle type specifications starting with the symbol 'eql. 2010-11-14 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (eql): Don't remove the byte-compile property of this symbol. That was necessary to override a bug in bytecomp.el where #'eql was confused with #'eq, which bug we no longer have. If neither expression is constant, don't attempt to handle the expression in this compiler macro, leave it to byte-compile-eql, which produces better code anyway. * bytecomp.el (eq): #'eql is not the function associated with the byte-eq byte code. (byte-compile-eql): Add an explicit compile method for this function, for cases where the cl-macs compiler macro hasn't reduced it to #'eq or #'equal. 2010-10-25 Aidan Kehoe <kehoea@parhasard.net> Add compiler macros and compilation sanity-checking for various functions that take keywords. * byte-optimize.el (side-effect-free-fns): #'symbol-value is side-effect free and not error free. * bytecomp.el (byte-compile-normal-call): Check keyword argument lists for sanity; store information about the positions where keyword arguments start using the new byte-compile-keyword-start property. * cl-macs.el (cl-const-expr-val): Take a new optional argument, cl-not-constant, defaulting to nil, in this function; return it if the expression is not constant. (cl-non-fixnum-number-p): Make this into a separate function, we want to pass it to #'every. (eql): Use it. (define-star-compiler-macros): Use the same code to generate the member*, assoc* and rassoc* compiler macros; special-case some code in #'add-to-list in subr.el. (remove, remq): Add compiler macros for these two functions, in preparation for #'remove being in C. (define-foo-if-compiler-macros): Transform (remove-if-not ...) calls to (remove ... :if-not) at compile time, which will be a real win once the latter is in C. (define-substitute-if-compiler-macros) (define-subst-if-compiler-macros): Similarly for these functions. (delete-duplicates): Change this compiler macro to use #'plists-equal; if we don't have information about the type of SEQUENCE at compile time, don't bother attempting to inline the call, the function will be in C soon enough. (equalp): Remove an old commented-out compiler macro for this, if we want to see it it's in version control. (subst-char-in-string): Transform this to a call to nsubstitute or nsubstitute, if that is appropriate. * cl.el (ldiff): Don't call setf here, this makes for a load-time dependency problem in cl-macs.el 2010-06-14 Stephen J. Turnbull <stephen@xemacs.org> * term/vt100.el: Refer to XEmacs, not GNU Emacs, in permissions. * term/bg-mouse.el: * term/sup-mouse.el: Put copyright notice in canonical "Copyright DATE AUTHOR" form. Refer to XEmacs, not GNU Emacs, in permissions. * site-load.el: Add permission boilerplate. * mule/canna-leim.el: * alist.el: Refer to XEmacs, not APEL/this program, in permissions. * mule/canna-leim.el: Remove my copyright, I've assigned it to the FSF. 2010-06-14 Stephen J. Turnbull <stephen@xemacs.org> * gtk.el: * gtk-widget-accessors.el: * gtk-package.el: * gtk-marshal.el: * gtk-compose.el: * gnome.el: Add copyright notice based on internal evidence. 2010-06-14 Stephen J. Turnbull <stephen@xemacs.org> * easymenu.el: Add reference to COPYING to permission notice. * gutter.el: * gutter-items.el: * menubar-items.el: Fix typo "Xmacs" in permissions notice. 2010-06-14 Stephen J. Turnbull <stephen@xemacs.org> * auto-save.el: * font.el: * fontconfig.el: * mule/kinsoku.el: Add "part of XEmacs" text to permission notice. 2010-10-14 Aidan Kehoe <kehoea@parhasard.net> * byte-optimize.el (side-effect-free-fns): * cl-macs.el (remf, getf): * cl-extra.el (tailp, cl-set-getf, cl-do-remf): * cl.el (ldiff, endp): Tighten up Common Lisp compatibility for #'ldiff, #'endp, #'tailp; add circularity checking for the first two. #'cl-set-getf and #'cl-do-remf were Lisp implementations of #'plist-put and #'plist-remprop; change the names to aliases, changes the macros that use them to using #'plist-put and #'plist-remprop directly. 2010-10-12 Aidan Kehoe <kehoea@parhasard.net> * abbrev.el (fundamental-mode-abbrev-table, global-abbrev-table): Create both these abbrev tables using the usual #'define-abbrev-table calls, rather than attempting to special-case them. * cl-extra.el: Force cl-macs to be loaded here, if cl-extra.el is being loaded interpreted. Previously other, later files would redundantly call (load "cl-macs") when interpreted, it's more reasonable to do it here, once. * cmdloop.el (read-quoted-char-radix): Use defcustom here, we don't have any dump-order dependencies that would prevent that. * custom.el (eval-when-compile): Don't load cl-macs when interpreted or when byte-compiling, rely on cl-extra.el in the former case and the appropriate entry in bytecomp-load-hook in the latter. Get rid of custom-declare-variable-list, we have no dump-time dependencies that would require it. * faces.el (eval-when-compile): Don't load cl-macs when interpreted or when byte-compiling. * packages.el: Remove some inaccurate comments. * post-gc.el (cleanup-simple-finalizers): Use #'delete-if-not here, now the order of preloaded-file-list has been changed to make it available. * subr.el (custom-declare-variable-list): Remove. No need for it. Also remove a stub define-abbrev-table from this file, given the current order of preloaded-file-list there's no need for it. 2010-10-10 Aidan Kehoe <kehoea@parhasard.net> * bytecomp.el (byte-compile-constp) Forms quoted with FUNCTION are also constant. (byte-compile-initial-macro-environment): In #'the, if FORM is constant and does not match TYPE, warn at byte-compile time. 2010-10-10 Aidan Kehoe <kehoea@parhasard.net> * backquote.el (bq-vector-contents, bq-list*): Remove; the former is equivalent to (append VECTOR nil), the latter to (list* ...). (bq-process-2): Use (append VECTOR nil) instead of using #'bq-vector-contents to convert to a list. (bq-process-1): Now we use list* instead of bq-list * subr.el (list*): Moved from cl.el, since it is now required to be available the first time a backquoted form is encountered. * cl.el (list*): Move to subr.el. 2010-09-16 Aidan Kehoe <kehoea@parhasard.net> * test-harness.el (Check-Message): Add an omitted comma here, thank you the buildbot. 2010-09-16 Aidan Kehoe <kehoea@parhasard.net> * hash-table.el (hash-table-key-list, hash-table-value-list) (hash-table-key-value-alist, hash-table-key-value-plist): Remove some useless #'nreverse calls in these files; our hash tables have no order, it's not helpful to pretend they do. * behavior.el (read-behavior): Do the same in this file, in some code evidently copied from hash-table.el. 2010-09-16 Aidan Kehoe <kehoea@parhasard.net> * info.el (Info-insert-dir): * format.el (format-deannotate-region): * files.el (cd, save-buffers-kill-emacs): Use #'some, #'every and related functions for applying boolean operations to lists, instead of rolling our own ones that cons and don't short-circuit. 2010-09-16 Aidan Kehoe <kehoea@parhasard.net> * bytecomp.el (byte-compile-initial-macro-environment): * cl-macs.el (the): Rephrase the docstring, make its implementation when compiling files a little nicer. 2010-09-16 Aidan Kehoe <kehoea@parhasard.net> * descr-text.el (unidata-initialize-unicodedata-database) (unidata-initialize-unihan-database, describe-char-unicode-data) (describe-char-unicode-data): Wrap calls to the database functions with (with-fboundp ...), avoiding byte compile warnings on builds without support for the database functions. (describe-char): (reduce #'max ...), not (apply #'max ...), no need to cons needlessly. (describe-char): Remove a redundant lambda wrapping #'extent-properties. (describe-char-unicode-data): Call #'nsubst when replacing "" with nil in the result of #'split-string, instead of consing inside mapcar. 2010-09-16 Aidan Kehoe <kehoea@parhasard.net> * x-faces.el (x-available-font-sizes): * specifier.el (let-specifier): * package-ui.el (pui-add-required-packages): * msw-faces.el (mswindows-available-font-sizes): * modeline.el (modeline-minor-mode-menu): * minibuf.el (minibuf-directory-files): Replace the O2N (delq nil (mapcar (lambda (W) (and X Y)) Z)) with the ON (mapcan (lambda (W) (and X (list Y))) Z) in these files. 2010-09-16 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (= < > <= >=): When these functions are handed more than two arguments, and those arguments have no side effects, transform to a series of two argument calls, avoiding funcall in the byte-compiled code. * mule/mule-cmds.el (finish-set-language-environment): Take advantage of this change in a function called 256 times at startup. 2010-09-16 Aidan Kehoe <kehoea@parhasard.net> * bytecomp.el (byte-compile-function-form, byte-compile-quote) (byte-compile-quote-form): Warn at compile time, and error at runtime, if a (quote ...) or a (function ...) form attempts to quote more than one object. 2010-09-16 Aidan Kehoe <kehoea@parhasard.net> * byte-optimize.el (byte-optimize-apply): Transform (apply 'nconc (mapcar ...)) to (mapcan ...); warn about use of the first idiom. * update-elc.el (do-autoload-commands): * packages.el (packages-find-package-library-path): * frame.el (frame-list): * extents.el (extent-descendants): * etags.el (buffer-tag-table-files): * dumped-lisp.el (preloaded-file-list): * device.el (device-list): * bytecomp-runtime.el (proclaim-inline, proclaim-notinline) Use #'mapcan, not (apply #'nconc (mapcar ...) in all these files. * bytecomp-runtime.el (eval-when-compile, eval-and-compile): In passing, mention that these macros also evaluate the body when interpreted. tests/ChangeLog addition: 2011-02-07 Aidan Kehoe <kehoea@parhasard.net> * automated/lisp-tests.el: Test lexical scope for `block', `return-from'; add a Known-Bug-Expect-Failure for a contorted example that fails when byte-compiled.
author Aidan Kehoe <kehoea@parhasard.net>
date Mon, 07 Feb 2011 12:01:24 +0000
parents bac3173b2665
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 \input texinfo @c -*-texinfo-*-
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 @c %**start of header
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 @setfilename ../info/standards.info
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 @settitle GNU Coding Standards
2665
bac3173b2665 [xemacs-hg @ 2005-03-15 06:15:35 by stephent]
stephent
parents: 462
diff changeset
5 @c In GNU Emacs, this date is automagically updated when this file is
bac3173b2665 [xemacs-hg @ 2005-03-15 06:15:35 by stephent]
stephent
parents: 462
diff changeset
6 @c saved, but in XEmacs you must set it when synching:
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
7 @set lastupdate February 21, 2001
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 @c %**end of header
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 @ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 @format
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 START-INFO-DIR-ENTRY
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 * Standards: (standards). GNU coding standards.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 END-INFO-DIR-ENTRY
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 @end format
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 @end ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 @c @setchapternewpage odd
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 @setchapternewpage off
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
21 @c Put everything in one index (arbitrarily chosen to be the concept index).
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
22 @syncodeindex fn cp
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
23 @syncodeindex ky cp
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
24 @syncodeindex pg cp
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
25 @syncodeindex vr cp
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
26
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 @c This is used by a cross ref in make-stds.texi
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 @set CODESTD 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 @iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 @set CHAPTER chapter
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 @end iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 @ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 @set CHAPTER node
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 @end ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 @ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 GNU Coding Standards
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
38 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 Permission is granted to make and distribute verbatim copies of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 this manual provided the copyright notice and this permission notice
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 are preserved on all copies.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 @ignore
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 Permission is granted to process this file through TeX and print the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 results, provided the printed document carries copying permission
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 notice identical to this one except for the removal of this paragraph
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 (this paragraph not being relevant to the printed manual).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 @end ignore
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 Permission is granted to copy and distribute modified versions of this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 manual under the conditions for verbatim copying, provided that the entire
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 resulting derived work is distributed under the terms of a permission
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 notice identical to this one.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 Permission is granted to copy and distribute translations of this manual
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 into another language, under the above conditions for modified versions,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 except that this permission notice may be stated in a translation approved
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 by the Free Software Foundation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 @end ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 @titlepage
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 @title GNU Coding Standards
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 @author Richard Stallman
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 @author last updated @value{lastupdate}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 @page
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 @vskip 0pt plus 1filll
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
69 Copyright @copyright{} 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 Permission is granted to make and distribute verbatim copies of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 this manual provided the copyright notice and this permission notice
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 are preserved on all copies.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 Permission is granted to copy and distribute modified versions of this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 manual under the conditions for verbatim copying, provided that the entire
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 resulting derived work is distributed under the terms of a permission
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 notice identical to this one.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 Permission is granted to copy and distribute translations of this manual
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 into another language, under the above conditions for modified versions,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 except that this permission notice may be stated in a translation approved
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 by the Free Software Foundation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 @end titlepage
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 @ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 @node Top, Preface, (dir), (dir)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 @top Version
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 Last updated @value{lastupdate}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 @end ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 * Preface:: About the GNU Coding Standards
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 * Legal Issues:: Keeping Free Software Free
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 * Design Advice:: General Program Design
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 * Program Behavior:: Program Behavior for All Programs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 * Writing C:: Making The Best Use of C
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 * Documentation:: Documenting Programs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 * Managing Releases:: The Release Process
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 * References:: References to Non-Free Software or Documentation
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
102 * Index::
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 @node Preface
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 @chapter About the GNU Coding Standards
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 The GNU Coding Standards were written by Richard Stallman and other GNU
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 Project volunteers. Their purpose is to make the GNU system clean,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 consistent, and easy to install. This document can also be read as a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 guide to writing portable, robust and reliable programs. It focuses on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 programs written in C, but many of the rules and principles are useful
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 even if you write in another programming language. The rules often
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 state reasons for writing in a certain way.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 Corrections or suggestions for this document should be sent to
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
117 @email{bug-standards@@gnu.org}. If you make a suggestion, please include a
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 suggested new wording for it; our time is limited. We prefer a context
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 diff to the @file{standards.texi} or @file{make-stds.texi} files, but if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 you don't have those files, please mail your suggestion anyway.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 This release of the GNU Coding Standards was last updated
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 @value{lastupdate}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
125 @cindex where to obtain @code{standards.texi}
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
126 @cindex downloading this manual
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
127 If you did not obtain this file directly from the GNU project and
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
128 recently, please check for a newer version. You can ftp the GNU Coding
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
129 Standards from any GNU FTP host in the directory
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
130 @file{/pub/gnu/standards/}. The GNU Coding Standards are available
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
131 there in several different formats: @file{standards.text},
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
132 @file{standards.texi}, @file{standards.info}, and @file{standards.dvi}.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
133 The GNU Coding Standards are also available on the GNU World Wide Web
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
134 server: @uref{http://www.gnu.org/prep/standards_toc.html}.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
135
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 @node Legal Issues
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 @chapter Keeping Free Software Free
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
138 @cindex legal aspects
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 This @value{CHAPTER} discusses how you can make sure that GNU software
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
141 avoids legal difficulties, and other related issues.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 * Reading Non-Free Code:: Referring to Proprietary Programs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 * Contributions:: Accepting Contributions
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
146 * Trademarks:: How We Deal with Trademark Issues
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 @node Reading Non-Free Code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 @section Referring to Proprietary Programs
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
151 @cindex proprietary programs
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
152 @cindex avoiding proprietary code
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 Don't in any circumstances refer to Unix source code for or during
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 your work on GNU! (Or to any other proprietary programs.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 If you have a vague recollection of the internals of a Unix program,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 this does not absolutely mean you can't write an imitation of it, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 do try to organize the imitation internally along different lines,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 because this is likely to make the details of the Unix version
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 irrelevant and dissimilar to your results.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 For example, Unix utilities were generally optimized to minimize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 memory use; if you go for speed instead, your program will be very
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 different. You could keep the entire input file in core and scan it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 there instead of using stdio. Use a smarter algorithm discovered more
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 recently than the Unix program. Eliminate use of temporary files. Do
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 it in one pass instead of two (we did this in the assembler).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 Or, on the contrary, emphasize simplicity instead of speed. For some
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 applications, the speed of today's computers makes simpler algorithms
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 adequate.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 Or go for generality. For example, Unix programs often have static
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 tables or fixed-size strings, which make for arbitrary limits; use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 dynamic allocation instead. Make sure your program handles NULs and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 other funny characters in the input files. Add a programming language
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 for extensibility and write part of the program in that language.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 Or turn some parts of the program into independently usable libraries.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 Or use a simple garbage collector instead of tracking precisely when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 to free memory, or use a new GNU facility such as obstacks.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 @node Contributions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 @section Accepting Contributions
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
186 @cindex legal papers
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
187 @cindex accepting contributions
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 If the program you are working on is copyrighted by the Free Software
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 Foundation, then when someone else sends you a piece of code to add to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 the program, we need legal papers to use it---just as we asked you to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 sign papers initially. @emph{Each} person who makes a nontrivial
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 contribution to a program must sign some sort of legal papers in order
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 for us to have clear title to the program; the main author alone is not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 enough.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 So, before adding in any contributions from other people, please tell
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 us, so we can arrange to get the papers. Then wait until we tell you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 that we have received the signed papers, before you actually use the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 contribution.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 This applies both before you release the program and afterward. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 you receive diffs to fix a bug, and they make significant changes, we
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 need legal papers for that change.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 This also applies to comments and documentation files. For copyright
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 law, comments and code are just text. Copyright applies to all kinds of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 text, so we need legal papers for all kinds.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 We know it is frustrating to ask for legal papers; it's frustrating for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 us as well. But if you don't wait, you are going out on a limb---for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 example, what if the contributor's employer won't sign a disclaimer?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 You might have to take that code out again!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 You don't need papers for changes of a few lines here or there, since
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 they are not significant for copyright purposes. Also, you don't need
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 papers if all you get from the suggestion is some ideas, not actual code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 which you use. For example, if someone send you one implementation, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 you write a different implementation of the same idea, you don't need to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 get papers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 The very worst thing is if you forget to tell us about the other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 contributor. We could be very embarrassed in court some day as a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 result.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 We have more detailed advice for maintainers of programs; if you have
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 reached the stage of actually maintaining a program for GNU (whether
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 released or not), please ask us for a copy.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
230 @node Trademarks
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
231 @section Trademarks
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
232 @cindex trademarks
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
233
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
234 Please do not include any trademark acknowledgements in GNU software
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
235 packages or documentation.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
236
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
237 Trademark acknowledgements are the statements that such-and-such is a
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
238 trademark of so-and-so. The GNU Project has no objection to the basic
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
239 idea of trademarks, but these acknowledgements feel like kowtowing, so
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
240 we don't use them. There is no legal requirement for them.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
241
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
242 What is legally required, as regards other people's trademarks, is to
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
243 avoid using them in ways which a reader might read as naming or labeling
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
244 our own programs or activities. For example, since ``Objective C'' is
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
245 (or at least was) a trademark, we made sure to say that we provide a
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
246 ``compiler for the Objective C language'' rather than an ``Objective C
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
247 compiler''. The latter is meant to be short for the former, but it does
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
248 not explicitly state the relationship, so it could be misinterpreted as
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
249 using ``Objective C'' as a label for the compiler rather than for the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
250 language.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
251
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 @node Design Advice
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 @chapter General Program Design
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
254 @cindex program design
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 This @value{CHAPTER} discusses some of the issues you should take into
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 account when designing your program.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
259 @c Standard or ANSI C
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
260 @c
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
261 @c In 1989 the American National Standards Institute (ANSI) standardized
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
262 @c C as standard X3.159-1989. In December of that year the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
263 @c International Standards Organization ISO adopted the ANSI C standard
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
264 @c making minor changes. In 1990 ANSI then re-adopted ISO standard
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
265 @c C. This version of C is known as either ANSI C or Standard C.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
266
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
267 @c A major revision of the C Standard appeared in 1999.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
268
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 @menu
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
270 * Source Language:: Which languges to use.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 * Compatibility:: Compatibility with other implementations
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 * Using Extensions:: Using non-standard features
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
273 * Standard C:: Using Standard C features
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
276 @node Source Language
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
277 @section Which Languages to Use
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
278 @cindex programming languges
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
279
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
280 When you want to use a language that gets compiled and runs at high
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
281 speed, the best language to use is C. Using another language is like
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
282 using a non-standard feature: it will cause trouble for users. Even if
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
283 GCC supports the other language, users may find it inconvenient to have
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
284 to install the compiler for that other language in order to build your
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
285 program. For example, if you write your program in C++, people will
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
286 have to install the GNU C++ compiler in order to compile your program.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
287
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
288 C has one other advantage over C++ and other compiled languages: more
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
289 people know C, so more people will find it easy to read and modify the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
290 program if it is written in C.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
291
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
292 So in general it is much better to use C, rather than the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
293 comparable alternatives.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
294
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
295 But there are two exceptions to that conclusion:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
296
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
297 @itemize @bullet
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
298 @item
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
299 It is no problem to use another language to write a tool specifically
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
300 intended for use with that language. That is because the only people
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
301 who want to build the tool will be those who have installed the other
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
302 language anyway.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
303
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
304 @item
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
305 If an application is of interest only to a narrow part of the community,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
306 then the question of which language it is written in has less effect on
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
307 other people, so you may as well please yourself.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
308 @end itemize
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
309
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
310 Many programs are designed to be extensible: they include an interpreter
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
311 for a language that is higher level than C. Often much of the program
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
312 is written in that language, too. The Emacs editor pioneered this
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
313 technique.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
314
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
315 @cindex GUILE
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
316 The standard extensibility interpreter for GNU software is GUILE, which
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
317 implements the language Scheme (an especially clean and simple dialect
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
318 of Lisp). @uref{http://www.gnu.org/software/guile/}. We don't reject
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
319 programs written in other ``scripting languages'' such as Perl and
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
320 Python, but using GUILE is very important for the overall consistency of
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
321 the GNU system.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
322
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 @node Compatibility
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 @section Compatibility with Other Implementations
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
325 @cindex compatibility with C and @sc{posix} standards
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
326 @cindex @sc{posix} compatibility
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 With occasional exceptions, utility programs and libraries for GNU
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 should be upward compatible with those in Berkeley Unix, and upward
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
330 compatible with Standard C if Standard C specifies their
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
331 behavior, and upward compatible with @sc{posix} if @sc{posix} specifies
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
332 their behavior.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 When these standards conflict, it is useful to offer compatibility
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 modes for each of them.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
337 @cindex options for compatibility
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
338 Standard C and @sc{posix} prohibit many kinds of extensions. Feel
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
339 free to make the extensions anyway, and include a @samp{--ansi},
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 @samp{--posix}, or @samp{--compatible} option to turn them off.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 However, if the extension has a significant chance of breaking any real
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
342 programs or scripts, then it is not really upward compatible. So you
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
343 should try to redesign its interface to make it upward compatible.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
344
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
345 @cindex @code{POSIXLY_CORRECT}, environment variable
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 Many GNU programs suppress extensions that conflict with @sc{posix} if the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347 environment variable @code{POSIXLY_CORRECT} is defined (even if it is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 defined with a null value). Please make your program recognize this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 variable if appropriate.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 When a feature is used only by users (not by programs or command
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 files), and it is done poorly in Unix, feel free to replace it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 completely with something totally different and better. (For example,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 @code{vi} is replaced with Emacs.) But it is nice to offer a compatible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 feature as well. (There is a free @code{vi} clone, so we offer it.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
357 Additional useful features are welcome regardless of whether
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
358 there is any precedent for them.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 @node Using Extensions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 @section Using Non-standard Features
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
362 @cindex non-standard extensions
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 Many GNU facilities that already exist support a number of convenient
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 extensions over the comparable Unix facilities. Whether to use these
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 extensions in implementing your program is a difficult question.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 On the one hand, using the extensions can make a cleaner program.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 On the other hand, people will not be able to build the program
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 unless the other GNU tools are available. This might cause the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 program to work on fewer kinds of machines.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373 With some extensions, it might be easy to provide both alternatives.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 For example, you can define functions with a ``keyword'' @code{INLINE}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 and define that as a macro to expand into either @code{inline} or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 nothing, depending on the compiler.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 In general, perhaps it is best not to use the extensions if you can
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 straightforwardly do without them, but to use the extensions if they
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 are a big improvement.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 An exception to this rule are the large, established programs (such as
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
383 Emacs) which run on a great variety of systems. Using GNU extensions in
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
384 such programs would make many users unhappy, so we don't do that.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
385
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
386 Another exception is for programs that are used as part of compilation:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
387 anything that must be compiled with other compilers in order to
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
388 bootstrap the GNU compilation facilities. If these require the GNU
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
389 compiler, then no one can compile them without having them installed
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
390 already. That would be extremely troublesome in certain cases.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
391
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
392 @node Standard C
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
393 @section Standard C and Pre-Standard C
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
394 @cindex @sc{ansi} C standard
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
395
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
396 1989 Standard C is widespread enough now that it is ok to use its
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
397 features in new programs. There is one exception: do not ever use the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
398 ``trigraph'' feature of Standard C.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
399
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
400 1999 Standard C is not widespread yet, so please do not require its
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
401 features in programs. It is ok to use its features if they are present.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
402
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
403 However, it is easy to support pre-standard compilers in most programs,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
404 so if you know how to do that, feel free. If a program you are
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
405 maintaining has such support, you should try to keep it working.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
406
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
407 @cindex function prototypes
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
408 To support pre-standard C, instead of writing function definitions in
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
409 standard prototype form,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 foo (int x, int y)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 @noindent
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
418 write the definition in pre-standard style like this,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 foo (x, y)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423 int x, y;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428 and use a separate declaration to specify the argument prototype:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 int foo (int, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 You need such a declaration anyway, in a header file, to get the benefit
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
435 of prototypes in all the files where the function is called. And once
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
436 you have the declaration, you normally lose nothing by writing the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
437 function definition in the pre-standard style.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439 This technique does not work for integer types narrower than @code{int}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440 If you think of an argument as being of a type narrower than @code{int},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441 declare it as @code{int} instead.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443 There are a few special cases where this technique is hard to use. For
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 example, if a function argument needs to hold the system type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 @code{dev_t}, you run into trouble, because @code{dev_t} is shorter than
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 @code{int} on some machines; but you cannot use @code{int} instead,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447 because @code{dev_t} is wider than @code{int} on some machines. There
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
448 is no type you can safely use on all machines in a non-standard
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
449 definition. The only way to support non-standard C and pass such an
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 argument is to check the width of @code{dev_t} using Autoconf and choose
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451 the argument type accordingly. This may not be worth the trouble.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
453 In order to support pre-standard compilers that do not recognize
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
454 prototypes, you may want to use a preprocessor macro like this:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
455
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
456 @example
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
457 /* Declare the prototype for a general external function. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
458 #if defined (__STDC__) || defined (WINDOWSNT)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
459 #define P_(proto) proto
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
460 #else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
461 #define P_(proto) ()
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
462 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
463 @end example
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465 @node Program Behavior
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466 @chapter Program Behavior for All Programs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
468 This @value{CHAPTER} describes conventions for writing robust
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
469 software. It also describes general standards for error messages, the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
470 command line interface, and how libraries should behave.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473 * Semantics:: Writing robust programs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 * Libraries:: Library behavior
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 * Errors:: Formatting error messages
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
476 * User Interfaces:: Standards about interfaces generally
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
477 * Graphical Interfaces:: Standards for graphical interfaces
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
478 * Command-Line Interfaces:: Standards for command line interfaces
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
479 * Option Table:: Table of long options
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480 * Memory Usage:: When and how to care about memory needs
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
481 * File Usage:: Which files to use, and where
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484 @node Semantics
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 @section Writing Robust Programs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
487 @cindex arbitrary limits on data
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 Avoid arbitrary limits on the length or number of @emph{any} data
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 structure, including file names, lines, files, and symbols, by allocating
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 all data structures dynamically. In most Unix utilities, ``long lines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491 are silently truncated''. This is not acceptable in a GNU utility.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
492
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
493 @cindex @code{NUL} characters
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 Utilities reading files should not drop NUL characters, or any other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495 nonprinting characters @emph{including those with codes above 0177}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496 The only sensible exceptions would be utilities specifically intended
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497 for interface to certain types of terminals or printers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 that can't handle those characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 Whenever possible, try to make programs work properly with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500 sequences of bytes that represent multibyte characters, using encodings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 such as UTF-8 and others.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
503 @cindex error messages
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
504 Check every system call for an error return, unless you know you wish to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505 ignore errors. Include the system error text (from @code{perror} or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506 equivalent) in @emph{every} error message resulting from a failing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507 system call, as well as the name of the file if any and the name of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508 utility. Just ``cannot open foo.c'' or ``stat failed'' is not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 sufficient.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
511 @cindex @code{malloc} return value
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
512 @cindex memory allocation failure
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 Check every call to @code{malloc} or @code{realloc} to see if it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514 returned zero. Check @code{realloc} even if you are making the block
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515 smaller; in a system that rounds block sizes to a power of 2,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516 @code{realloc} may get a different block if you ask for less space.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
518 In Unix, @code{realloc} can destroy the storage block if it returns
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519 zero. GNU @code{realloc} does not have this bug: if it fails, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520 original block is unchanged. Feel free to assume the bug is fixed. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
521 you wish to run your program on Unix, and wish to avoid lossage in this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
522 case, you can use the GNU @code{malloc}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
523
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
524 You must expect @code{free} to alter the contents of the block that was
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
525 freed. Anything you want to fetch from the block, you must fetch before
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526 calling @code{free}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528 If @code{malloc} fails in a noninteractive program, make that a fatal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529 error. In an interactive program (one that reads commands from the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
530 user), it is better to abort the command and return to the command
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
531 reader loop. This allows the user to kill other processes to free up
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
532 virtual memory, and then try the command again.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
533
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
534 @cindex command-line arguments, decoding
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
535 Use @code{getopt_long} to decode arguments, unless the argument syntax
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
536 makes this unreasonable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
537
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
538 When static storage is to be written in during program execution, use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
539 explicit C code to initialize it. Reserve C initialized declarations
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
540 for data that will not be changed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541 @c ADR: why?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
543 Try to avoid low-level interfaces to obscure Unix data structures (such
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544 as file directories, utmp, or the layout of kernel memory), since these
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545 are less likely to work compatibly. If you need to find all the files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
546 in a directory, use @code{readdir} or some other high-level interface.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
547 These are supported compatibly by GNU.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
548
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
549 @cindex signal handling
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
550 The preferred signal handling facilities are the BSD variant of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
551 @code{signal}, and the @sc{posix} @code{sigaction} function; the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
552 alternative USG @code{signal} interface is an inferior design.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
553
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
554 Nowadays, using the @sc{posix} signal functions may be the easiest way
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
555 to make a program portable. If you use @code{signal}, then on GNU/Linux
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
556 systems running GNU libc version 1, you should include
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
557 @file{bsd/signal.h} instead of @file{signal.h}, so as to get BSD
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558 behavior. It is up to you whether to support systems where
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559 @code{signal} has only the USG behavior, or give up on them.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
561 @cindex impossible conditions
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
562 In error checks that detect ``impossible'' conditions, just abort.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
563 There is usually no point in printing any message. These checks
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
564 indicate the existence of bugs. Whoever wants to fix the bugs will have
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
565 to read the source code and run a debugger. So explain the problem with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
566 comments in the source. The relevant data will be in variables, which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
567 are easy to examine with the debugger, so there is no point moving them
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
568 elsewhere.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
569
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
570 Do not use a count of errors as the exit status for a program.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
571 @emph{That does not work}, because exit status values are limited to 8
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
572 bits (0 through 255). A single run of the program might have 256
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
573 errors; if you try to return 256 as the exit status, the parent process
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
574 will see 0 as the status, and it will appear that the program succeeded.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
575
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
576 @cindex temporary files
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
577 @cindex @code{TMPDIR} environment variable
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
578 If you make temporary files, check the @code{TMPDIR} environment
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
579 variable; if that variable is defined, use the specified directory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
580 instead of @file{/tmp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
581
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
582 In addition, be aware that there is a possible security problem when
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
583 creating temporary files in world-writable directories. In C, you can
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
584 avoid this problem by creating temporary files in this manner:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
585
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
586 @example
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
587 fd = open(filename, O_WRONLY | O_CREAT | O_EXCL, 0600);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
588 @end example
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
589
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
590 @noindent
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
591 or by using the @code{mkstemps} function from libiberty.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
592
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
593 In bash, use @code{set -C} to avoid this problem.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
594
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
595 @node Libraries
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
596 @section Library Behavior
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
597 @cindex libraries
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
598
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
599 Try to make library functions reentrant. If they need to do dynamic
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
600 storage allocation, at least try to avoid any nonreentrancy aside from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
601 that of @code{malloc} itself.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
602
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
603 Here are certain name conventions for libraries, to avoid name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
604 conflicts.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
605
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
606 Choose a name prefix for the library, more than two characters long.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
607 All external function and variable names should start with this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
608 prefix. In addition, there should only be one of these in any given
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609 library member. This usually means putting each one in a separate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
610 source file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
611
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
612 An exception can be made when two external symbols are always used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
613 together, so that no reasonable program could use one without the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
614 other; then they can both go in the same file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
615
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
616 External symbols that are not documented entry points for the user
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
617 should have names beginning with @samp{_}. The @samp{_} should be
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
618 followed by the chosen name prefix for the library, to prevent
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
619 collisions with other libraries. These can go in the same files with
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
620 user entry points if you like.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
621
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
622 Static functions and variables can be used as you like and need not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
623 fit any naming convention.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
624
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
625 @node Errors
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
626 @section Formatting Error Messages
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
627 @cindex formatting error messages
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
628 @cindex error messages, formatting
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
629
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
630 Error messages from compilers should look like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
631
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
632 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
633 @var{source-file-name}:@var{lineno}: @var{message}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637 If you want to mention the column number, use this format:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
639 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640 @var{source-file-name}:@var{lineno}:@var{column}: @var{message}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
641 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
642
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
643 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
644 Line numbers should start from 1 at the beginning of the file, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
645 column numbers should start from 1 at the beginning of the line. (Both
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
646 of these conventions are chosen for compatibility.) Calculate column
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
647 numbers assuming that space and all ASCII printing characters have
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
648 equal width, and assuming tab stops every 8 columns.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
649
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650 Error messages from other noninteractive programs should look like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
651
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
652 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653 @var{program}:@var{source-file-name}:@var{lineno}: @var{message}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
656 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657 when there is an appropriate source file, or like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
660 @var{program}: @var{message}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
661 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
662
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
664 when there is no relevant source file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
666 If you want to mention the column number, use this format:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
667
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
668 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
669 @var{program}:@var{source-file-name}:@var{lineno}:@var{column}: @var{message}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
670 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
671
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
672 In an interactive program (one that is reading commands from a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
673 terminal), it is better not to include the program name in an error
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
674 message. The place to indicate which program is running is in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
675 prompt or with the screen layout. (When the same program runs with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
676 input from a source other than a terminal, it is not interactive and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
677 would do best to print error messages using the noninteractive style.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
678
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
679 The string @var{message} should not begin with a capital letter when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
680 it follows a program name and/or file name. Also, it should not end
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
681 with a period.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
682
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
683 Error messages from interactive programs, and other messages such as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
684 usage messages, should start with a capital letter. But they should not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
685 end with a period.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
686
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
687 @node User Interfaces
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
688 @section Standards for Interfaces Generally
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
689
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
690 @cindex program name and its behavior
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
691 @cindex behavior, dependent on program's name
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
692 Please don't make the behavior of a utility depend on the name used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
693 to invoke it. It is useful sometimes to make a link to a utility
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
694 with a different name, and that should not change what it does.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
695
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
696 Instead, use a run time option or a compilation switch or both
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
697 to select among the alternate behaviors.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
698
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
699 @cindex output device and program's behavior
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
700 Likewise, please don't make the behavior of the program depend on the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
701 type of output device it is used with. Device independence is an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
702 important principle of the system's design; do not compromise it merely
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
703 to save someone from typing an option now and then. (Variation in error
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
704 message syntax when using a terminal is ok, because that is a side issue
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
705 that people do not depend on.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
706
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
707 If you think one behavior is most useful when the output is to a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
708 terminal, and another is most useful when the output is a file or a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
709 pipe, then it is usually best to make the default behavior the one that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
710 is useful with output to a terminal, and have an option for the other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
711 behavior.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
712
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
713 Compatibility requires certain programs to depend on the type of output
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
714 device. It would be disastrous if @code{ls} or @code{sh} did not do so
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
715 in the way all users expect. In some of these cases, we supplement the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
716 program with a preferred alternate version that does not depend on the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
717 output device type. For example, we provide a @code{dir} program much
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
718 like @code{ls} except that its default output format is always
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
719 multi-column format.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
720
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
721 @node Graphical Interfaces
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
722 @section Standards for Graphical Interfaces
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
723 @cindex graphical user interface
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
724
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
725 @cindex gtk
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
726 When you write a program that provides a graphical user interface,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
727 please make it work with X Windows and the GTK toolkit unless the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
728 functionality specifically requires some alternative (for example,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
729 ``displaying jpeg images while in console mode'').
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
730
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
731 In addition, please provide a command-line interface to control the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
732 functionality. (In many cases, the graphical user interface can be a
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
733 separate program which invokes the command-line program.) This is
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
734 so that the same jobs can be done from scripts.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
735
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
736 @cindex corba
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
737 @cindex gnome
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
738 Please also consider providing a CORBA interface (for use from GNOME), a
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
739 library interface (for use from C), and perhaps a keyboard-driven
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
740 console interface (for use by users from console mode). Once you are
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
741 doing the work to provide the functionality and the graphical interface,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
742 these won't be much extra work.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
743
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
744 @node Command-Line Interfaces
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
745 @section Standards for Command Line Interfaces
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
746 @cindex command-line interface
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
747
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
748 @findex getopt
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
749 It is a good idea to follow the @sc{posix} guidelines for the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
750 command-line options of a program. The easiest way to do this is to use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
751 @code{getopt} to parse them. Note that the GNU version of @code{getopt}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
752 will normally permit options anywhere among the arguments unless the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
753 special argument @samp{--} is used. This is not what @sc{posix}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
754 specifies; it is a GNU extension.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
755
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
756 @cindex long-named options
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
757 Please define long-named options that are equivalent to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
758 single-letter Unix-style options. We hope to make GNU more user
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
759 friendly this way. This is easy to do with the GNU function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
760 @code{getopt_long}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
761
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
762 One of the advantages of long-named options is that they can be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
763 consistent from program to program. For example, users should be able
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
764 to expect the ``verbose'' option of any GNU program which has one, to be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
765 spelled precisely @samp{--verbose}. To achieve this uniformity, look at
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
766 the table of common long-option names when you choose the option names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
767 for your program (@pxref{Option Table}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
768
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
769 It is usually a good idea for file names given as ordinary arguments to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
770 be input files only; any output files would be specified using options
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
771 (preferably @samp{-o} or @samp{--output}). Even if you allow an output
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
772 file name as an ordinary argument for compatibility, try to provide an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
773 option as another way to specify it. This will lead to more consistency
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
774 among GNU utilities, and fewer idiosyncracies for users to remember.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
775
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
776 @cindex standard command-line options
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
777 All programs should support two standard options: @samp{--version}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
778 and @samp{--help}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
779
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
780 @table @code
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
781 @cindex @samp{--version} option
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
782 @item --version
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
783 This option should direct the program to print information about its name,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
784 version, origin and legal status, all on standard output, and then exit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
785 successfully. Other options and arguments should be ignored once this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
786 is seen, and the program should not perform its normal function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
787
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
788 @cindex canonical name of a program
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
789 @cindex program's canonical name
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
790 The first line is meant to be easy for a program to parse; the version
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
791 number proper starts after the last space. In addition, it contains
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
792 the canonical name for this program, in this format:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
793
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
794 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
795 GNU Emacs 19.30
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
796 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
797
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
798 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
799 The program's name should be a constant string; @emph{don't} compute it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
800 from @code{argv[0]}. The idea is to state the standard or canonical
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
801 name for the program, not its file name. There are other ways to find
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
802 out the precise file name where a command is found in @code{PATH}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
803
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
804 If the program is a subsidiary part of a larger package, mention the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
805 package name in parentheses, like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
806
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
807 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
808 emacsserver (GNU Emacs) 19.30
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
809 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
810
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
811 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
812 If the package has a version number which is different from this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
813 program's version number, you can mention the package version number
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
814 just before the close-parenthesis.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
815
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
816 If you @strong{need} to mention the version numbers of libraries which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
817 are distributed separately from the package which contains this program,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
818 you can do so by printing an additional line of version info for each
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
819 library you want to mention. Use the same format for these lines as for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
820 the first line.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
821
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
822 Please do not mention all of the libraries that the program uses ``just
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
823 for completeness''---that would produce a lot of unhelpful clutter.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
824 Please mention library version numbers only if you find in practice that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
825 they are very important to you in debugging.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
826
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
827 The following line, after the version number line or lines, should be a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
828 copyright notice. If more than one copyright notice is called for, put
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
829 each on a separate line.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
830
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
831 Next should follow a brief statement that the program is free software,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
832 and that users are free to copy and change it on certain conditions. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
833 the program is covered by the GNU GPL, say so here. Also mention that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
834 there is no warranty, to the extent permitted by law.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
835
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
836 It is ok to finish the output with a list of the major authors of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
837 program, as a way of giving credit.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
838
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
839 Here's an example of output that follows these rules:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
840
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
841 @smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
842 GNU Emacs 19.34.5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
843 Copyright (C) 1996 Free Software Foundation, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
844 GNU Emacs comes with NO WARRANTY,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
845 to the extent permitted by law.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
846 You may redistribute copies of GNU Emacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
847 under the terms of the GNU General Public License.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
848 For more information about these matters,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
849 see the files named COPYING.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
850 @end smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
851
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
852 You should adapt this to your program, of course, filling in the proper
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
853 year, copyright holder, name of program, and the references to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
854 distribution terms, and changing the rest of the wording as necessary.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
855
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
856 This copyright notice only needs to mention the most recent year in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
857 which changes were made---there's no need to list the years for previous
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
858 versions' changes. You don't have to mention the name of the program in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
859 these notices, if that is inconvenient, since it appeared in the first
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
860 line.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
861
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
862 @cindex @samp{--help} option
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
863 @item --help
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
864 This option should output brief documentation for how to invoke the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
865 program, on standard output, then exit successfully. Other options and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
866 arguments should be ignored once this is seen, and the program should
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
867 not perform its normal function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
868
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
869 @cindex address for bug reports
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
870 @cindex bug reports
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
871 Near the end of the @samp{--help} option's output there should be a line
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
872 that says where to mail bug reports. It should have this format:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
873
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
874 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
875 Report bugs to @var{mailing-address}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
876 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
877 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
878
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
879 @node Option Table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
880 @section Table of Long Options
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
881 @cindex long option names
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
882 @cindex table of long options
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
883
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
884 Here is a table of long options used by GNU programs. It is surely
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
885 incomplete, but we aim to list all the options that a new program might
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
886 want to be compatible with. If you use names not already in the table,
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
887 please send @email{bug-standards@@gnu.org} a list of them, with their
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
888 meanings, so we can update the table.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
889
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
890 @c Please leave newlines between items in this table; it's much easier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
891 @c to update when it isn't completely squashed together and unreadable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
892 @c When there is more than one short option for a long option name, put
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
893 @c a semicolon between the lists of the programs that use them, not a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
894 @c period. --friedman
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
895
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
896 @table @samp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
897 @item after-date
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
898 @samp{-N} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
899
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
900 @item all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
901 @samp{-a} in @code{du}, @code{ls}, @code{nm}, @code{stty}, @code{uname},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
902 and @code{unexpand}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
903
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
904 @item all-text
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
905 @samp{-a} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
906
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
907 @item almost-all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
908 @samp{-A} in @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
909
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
910 @item append
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
911 @samp{-a} in @code{etags}, @code{tee}, @code{time};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
912 @samp{-r} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
913
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
914 @item archive
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
915 @samp{-a} in @code{cp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
916
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
917 @item archive-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
918 @samp{-n} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
919
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
920 @item arglength
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
921 @samp{-l} in @code{m4}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
922
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
923 @item ascii
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
924 @samp{-a} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
925
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
926 @item assign
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
927 @samp{-v} in @code{gawk}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
928
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
929 @item assume-new
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
930 @samp{-W} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
931
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
932 @item assume-old
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
933 @samp{-o} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
934
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
935 @item auto-check
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
936 @samp{-a} in @code{recode}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
937
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
938 @item auto-pager
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
939 @samp{-a} in @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
940
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
941 @item auto-reference
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
942 @samp{-A} in @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
943
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
944 @item avoid-wraps
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
945 @samp{-n} in @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
946
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
947 @item background
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
948 For server programs, run in the background.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
949
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
950 @item backward-search
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
951 @samp{-B} in @code{ctags}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
952
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
953 @item basename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
954 @samp{-f} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
955
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
956 @item batch
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
957 Used in GDB.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
958
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
959 @item baud
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
960 Used in GDB.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
961
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
962 @item before
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
963 @samp{-b} in @code{tac}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
964
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
965 @item binary
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
966 @samp{-b} in @code{cpio} and @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
967
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
968 @item bits-per-code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
969 @samp{-b} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
970
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
971 @item block-size
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
972 Used in @code{cpio} and @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
973
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
974 @item blocks
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
975 @samp{-b} in @code{head} and @code{tail}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
976
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
977 @item break-file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
978 @samp{-b} in @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
979
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
980 @item brief
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
981 Used in various programs to make output shorter.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
982
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
983 @item bytes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
984 @samp{-c} in @code{head}, @code{split}, and @code{tail}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
985
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
986 @item c@t{++}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
987 @samp{-C} in @code{etags}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
988
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
989 @item catenate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
990 @samp{-A} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
991
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
992 @item cd
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
993 Used in various programs to specify the directory to use.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
994
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
995 @item changes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
996 @samp{-c} in @code{chgrp} and @code{chown}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
997
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
998 @item classify
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
999 @samp{-F} in @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1000
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1001 @item colons
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1002 @samp{-c} in @code{recode}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1003
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1004 @item command
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1005 @samp{-c} in @code{su};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1006 @samp{-x} in GDB.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1007
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1008 @item compare
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1009 @samp{-d} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1010
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1011 @item compat
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1012 Used in @code{gawk}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1013
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1014 @item compress
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1015 @samp{-Z} in @code{tar} and @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1016
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1017 @item concatenate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1018 @samp{-A} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1019
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1020 @item confirmation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1021 @samp{-w} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1022
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1023 @item context
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1024 Used in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1025
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1026 @item copyleft
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1027 @samp{-W copyleft} in @code{gawk}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1028
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1029 @item copyright
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1030 @samp{-C} in @code{ptx}, @code{recode}, and @code{wdiff};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1031 @samp{-W copyright} in @code{gawk}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1032
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1033 @item core
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1034 Used in GDB.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1035
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1036 @item count
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1037 @samp{-q} in @code{who}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1038
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1039 @item count-links
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1040 @samp{-l} in @code{du}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1041
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1042 @item create
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1043 Used in @code{tar} and @code{cpio}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1044
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1045 @item cut-mark
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1046 @samp{-c} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1047
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1048 @item cxref
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1049 @samp{-x} in @code{ctags}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1050
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1051 @item date
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1052 @samp{-d} in @code{touch}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1053
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1054 @item debug
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1055 @samp{-d} in Make and @code{m4};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1056 @samp{-t} in Bison.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1057
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1058 @item define
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1059 @samp{-D} in @code{m4}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1060
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1061 @item defines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1062 @samp{-d} in Bison and @code{ctags}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1063
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1064 @item delete
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1065 @samp{-D} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1066
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1067 @item dereference
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1068 @samp{-L} in @code{chgrp}, @code{chown}, @code{cpio}, @code{du},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1069 @code{ls}, and @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1070
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1071 @item dereference-args
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1072 @samp{-D} in @code{du}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1073
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1074 @item device
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1075 Specify an I/O device (special file name).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1076
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1077 @item diacritics
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1078 @samp{-d} in @code{recode}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1079
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1080 @item dictionary-order
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1081 @samp{-d} in @code{look}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1082
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1083 @item diff
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1084 @samp{-d} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1085
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1086 @item digits
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1087 @samp{-n} in @code{csplit}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1088
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1089 @item directory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1090 Specify the directory to use, in various programs. In @code{ls}, it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1091 means to show directories themselves rather than their contents. In
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1092 @code{rm} and @code{ln}, it means to not treat links to directories
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1093 specially.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1094
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1095 @item discard-all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1096 @samp{-x} in @code{strip}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1097
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1098 @item discard-locals
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1099 @samp{-X} in @code{strip}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1100
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1101 @item dry-run
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1102 @samp{-n} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1103
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1104 @item ed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1105 @samp{-e} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1106
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1107 @item elide-empty-files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1108 @samp{-z} in @code{csplit}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1109
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1110 @item end-delete
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1111 @samp{-x} in @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1112
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1113 @item end-insert
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1114 @samp{-z} in @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1115
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1116 @item entire-new-file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1117 @samp{-N} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1118
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1119 @item environment-overrides
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1120 @samp{-e} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1121
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1122 @item eof
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1123 @samp{-e} in @code{xargs}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1124
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1125 @item epoch
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1126 Used in GDB.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1127
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1128 @item error-limit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1129 Used in @code{makeinfo}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1130
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1131 @item error-output
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1132 @samp{-o} in @code{m4}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1133
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1134 @item escape
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1135 @samp{-b} in @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1136
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1137 @item exclude-from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1138 @samp{-X} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1139
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1140 @item exec
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1141 Used in GDB.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1142
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1143 @item exit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1144 @samp{-x} in @code{xargs}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1145
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1146 @item exit-0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1147 @samp{-e} in @code{unshar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1148
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1149 @item expand-tabs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1150 @samp{-t} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1151
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1152 @item expression
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1153 @samp{-e} in @code{sed}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1154
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1155 @item extern-only
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1156 @samp{-g} in @code{nm}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1157
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1158 @item extract
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1159 @samp{-i} in @code{cpio};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1160 @samp{-x} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1161
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1162 @item faces
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1163 @samp{-f} in @code{finger}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1164
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1165 @item fast
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1166 @samp{-f} in @code{su}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1167
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1168 @item fatal-warnings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1169 @samp{-E} in @code{m4}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1170
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1171 @item file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1172 @samp{-f} in @code{info}, @code{gawk}, Make, @code{mt}, and @code{tar};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1173 @samp{-n} in @code{sed};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1174 @samp{-r} in @code{touch}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1175
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1176 @item field-separator
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1177 @samp{-F} in @code{gawk}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1178
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1179 @item file-prefix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1180 @samp{-b} in Bison.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1181
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1182 @item file-type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1183 @samp{-F} in @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1184
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1185 @item files-from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1186 @samp{-T} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1187
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1188 @item fill-column
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1189 Used in @code{makeinfo}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1190
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1191 @item flag-truncation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1192 @samp{-F} in @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1193
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1194 @item fixed-output-files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1195 @samp{-y} in Bison.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1196
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1197 @item follow
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1198 @samp{-f} in @code{tail}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1199
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1200 @item footnote-style
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1201 Used in @code{makeinfo}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1202
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1203 @item force
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1204 @samp{-f} in @code{cp}, @code{ln}, @code{mv}, and @code{rm}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1205
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1206 @item force-prefix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1207 @samp{-F} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1208
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1209 @item foreground
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1210 For server programs, run in the foreground;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1211 in other words, don't do anything special to run the server
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1212 in the background.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1213
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1214 @item format
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1215 Used in @code{ls}, @code{time}, and @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1216
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1217 @item freeze-state
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1218 @samp{-F} in @code{m4}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1219
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1220 @item fullname
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1221 Used in GDB.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1222
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1223 @item gap-size
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1224 @samp{-g} in @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1225
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1226 @item get
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1227 @samp{-x} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1228
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1229 @item graphic
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1230 @samp{-i} in @code{ul}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1231
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1232 @item graphics
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1233 @samp{-g} in @code{recode}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1234
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1235 @item group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1236 @samp{-g} in @code{install}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1237
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1238 @item gzip
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1239 @samp{-z} in @code{tar} and @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1240
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1241 @item hashsize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1242 @samp{-H} in @code{m4}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1243
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1244 @item header
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1245 @samp{-h} in @code{objdump} and @code{recode}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1246
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1247 @item heading
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1248 @samp{-H} in @code{who}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1249
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1250 @item help
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1251 Used to ask for brief usage information.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1252
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1253 @item here-delimiter
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1254 @samp{-d} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1255
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1256 @item hide-control-chars
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1257 @samp{-q} in @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1258
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
1259 @item html
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
1260 In @code{makeinfo}, output HTML.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
1261
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1262 @item idle
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1263 @samp{-u} in @code{who}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1264
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1265 @item ifdef
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1266 @samp{-D} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1267
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1268 @item ignore
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1269 @samp{-I} in @code{ls};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1270 @samp{-x} in @code{recode}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1271
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1272 @item ignore-all-space
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1273 @samp{-w} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1274
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1275 @item ignore-backups
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1276 @samp{-B} in @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1277
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1278 @item ignore-blank-lines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1279 @samp{-B} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1280
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1281 @item ignore-case
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1282 @samp{-f} in @code{look} and @code{ptx};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1283 @samp{-i} in @code{diff} and @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1284
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1285 @item ignore-errors
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1286 @samp{-i} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1287
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1288 @item ignore-file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1289 @samp{-i} in @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1290
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1291 @item ignore-indentation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1292 @samp{-I} in @code{etags}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1293
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1294 @item ignore-init-file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1295 @samp{-f} in Oleo.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1296
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1297 @item ignore-interrupts
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1298 @samp{-i} in @code{tee}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1299
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1300 @item ignore-matching-lines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1301 @samp{-I} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1302
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1303 @item ignore-space-change
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1304 @samp{-b} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1305
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1306 @item ignore-zeros
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1307 @samp{-i} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1308
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1309 @item include
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1310 @samp{-i} in @code{etags};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1311 @samp{-I} in @code{m4}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1312
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1313 @item include-dir
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1314 @samp{-I} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1315
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1316 @item incremental
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1317 @samp{-G} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1318
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1319 @item info
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1320 @samp{-i}, @samp{-l}, and @samp{-m} in Finger.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1321
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
1322 @item init-file
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
1323 In some programs, specify the name of the file to read as the user's
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
1324 init file.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
1325
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1326 @item initial
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1327 @samp{-i} in @code{expand}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1328
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1329 @item initial-tab
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1330 @samp{-T} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1331
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1332 @item inode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1333 @samp{-i} in @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1334
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1335 @item interactive
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1336 @samp{-i} in @code{cp}, @code{ln}, @code{mv}, @code{rm};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1337 @samp{-e} in @code{m4};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1338 @samp{-p} in @code{xargs};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1339 @samp{-w} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1340
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1341 @item intermix-type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1342 @samp{-p} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1343
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
1344 @item iso-8601
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
1345 Used in @code{date}
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
1346
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1347 @item jobs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1348 @samp{-j} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1349
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1350 @item just-print
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1351 @samp{-n} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1352
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1353 @item keep-going
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1354 @samp{-k} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1355
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1356 @item keep-files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1357 @samp{-k} in @code{csplit}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1358
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1359 @item kilobytes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1360 @samp{-k} in @code{du} and @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1361
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1362 @item language
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1363 @samp{-l} in @code{etags}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1364
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1365 @item less-mode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1366 @samp{-l} in @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1367
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1368 @item level-for-gzip
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1369 @samp{-g} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1370
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1371 @item line-bytes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1372 @samp{-C} in @code{split}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1373
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1374 @item lines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1375 Used in @code{split}, @code{head}, and @code{tail}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1376
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1377 @item link
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1378 @samp{-l} in @code{cpio}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1379
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1380 @item lint
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1381 @itemx lint-old
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1382 Used in @code{gawk}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1383
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1384 @item list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1385 @samp{-t} in @code{cpio};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1386 @samp{-l} in @code{recode}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1387
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1388 @item list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1389 @samp{-t} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1390
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1391 @item literal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1392 @samp{-N} in @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1393
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1394 @item load-average
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1395 @samp{-l} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1396
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1397 @item login
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1398 Used in @code{su}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1399
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1400 @item machine
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1401 No listing of which programs already use this;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1402 someone should check to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1403 see if any actually do, and tell @email{gnu@@gnu.org}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1404
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1405 @item macro-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1406 @samp{-M} in @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1407
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1408 @item mail
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1409 @samp{-m} in @code{hello} and @code{uname}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1410
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1411 @item make-directories
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1412 @samp{-d} in @code{cpio}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1413
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1414 @item makefile
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1415 @samp{-f} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1416
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1417 @item mapped
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1418 Used in GDB.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1419
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1420 @item max-args
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1421 @samp{-n} in @code{xargs}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1422
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1423 @item max-chars
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1424 @samp{-n} in @code{xargs}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1425
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1426 @item max-lines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1427 @samp{-l} in @code{xargs}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1429 @item max-load
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1430 @samp{-l} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1431
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1432 @item max-procs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1433 @samp{-P} in @code{xargs}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1434
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1435 @item mesg
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1436 @samp{-T} in @code{who}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1437
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1438 @item message
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1439 @samp{-T} in @code{who}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1440
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1441 @item minimal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1442 @samp{-d} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1443
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1444 @item mixed-uuencode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1445 @samp{-M} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1446
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1447 @item mode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1448 @samp{-m} in @code{install}, @code{mkdir}, and @code{mkfifo}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1449
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1450 @item modification-time
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1451 @samp{-m} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1452
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1453 @item multi-volume
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1454 @samp{-M} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1455
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1456 @item name-prefix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1457 @samp{-a} in Bison.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1458
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1459 @item nesting-limit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1460 @samp{-L} in @code{m4}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1461
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1462 @item net-headers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1463 @samp{-a} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1464
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1465 @item new-file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1466 @samp{-W} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1467
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1468 @item no-builtin-rules
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1469 @samp{-r} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1470
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1471 @item no-character-count
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1472 @samp{-w} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1473
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1474 @item no-check-existing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1475 @samp{-x} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1476
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1477 @item no-common
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1478 @samp{-3} in @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1479
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1480 @item no-create
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1481 @samp{-c} in @code{touch}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1482
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1483 @item no-defines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1484 @samp{-D} in @code{etags}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1485
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1486 @item no-deleted
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1487 @samp{-1} in @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1488
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1489 @item no-dereference
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1490 @samp{-d} in @code{cp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1491
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1492 @item no-inserted
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1493 @samp{-2} in @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1494
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1495 @item no-keep-going
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1496 @samp{-S} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1497
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1498 @item no-lines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1499 @samp{-l} in Bison.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1500
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1501 @item no-piping
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1502 @samp{-P} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1503
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1504 @item no-prof
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1505 @samp{-e} in @code{gprof}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1506
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1507 @item no-regex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1508 @samp{-R} in @code{etags}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1509
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1510 @item no-sort
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1511 @samp{-p} in @code{nm}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1512
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1513 @item no-split
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1514 Used in @code{makeinfo}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1515
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1516 @item no-static
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1517 @samp{-a} in @code{gprof}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1518
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1519 @item no-time
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1520 @samp{-E} in @code{gprof}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1521
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1522 @item no-timestamp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1523 @samp{-m} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1524
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1525 @item no-validate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1526 Used in @code{makeinfo}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1527
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1528 @item no-wait
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1529 Used in @code{emacsclient}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1530
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1531 @item no-warn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1532 Used in various programs to inhibit warnings.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1533
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1534 @item node
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1535 @samp{-n} in @code{info}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1536
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1537 @item nodename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1538 @samp{-n} in @code{uname}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1539
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1540 @item nonmatching
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1541 @samp{-f} in @code{cpio}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1542
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1543 @item nstuff
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1544 @samp{-n} in @code{objdump}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1545
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1546 @item null
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1547 @samp{-0} in @code{xargs}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1548
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1549 @item number
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1550 @samp{-n} in @code{cat}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1551
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1552 @item number-nonblank
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1553 @samp{-b} in @code{cat}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1554
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1555 @item numeric-sort
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1556 @samp{-n} in @code{nm}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1557
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1558 @item numeric-uid-gid
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1559 @samp{-n} in @code{cpio} and @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1560
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1561 @item nx
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1562 Used in GDB.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1563
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1564 @item old-archive
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1565 @samp{-o} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1566
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1567 @item old-file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1568 @samp{-o} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1569
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1570 @item one-file-system
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1571 @samp{-l} in @code{tar}, @code{cp}, and @code{du}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1572
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1573 @item only-file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1574 @samp{-o} in @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1575
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1576 @item only-prof
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1577 @samp{-f} in @code{gprof}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1578
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1579 @item only-time
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1580 @samp{-F} in @code{gprof}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1581
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1582 @item options
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1583 @samp{-o} in @code{getopt}, @code{fdlist}, @code{fdmount},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1584 @code{fdmountd}, and @code{fdumount}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1585
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1586 @item output
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1587 In various programs, specify the output file name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1588
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1589 @item output-prefix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1590 @samp{-o} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1591
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1592 @item override
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1593 @samp{-o} in @code{rm}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1594
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1595 @item overwrite
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1596 @samp{-c} in @code{unshar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1597
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1598 @item owner
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1599 @samp{-o} in @code{install}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1600
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1601 @item paginate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1602 @samp{-l} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1603
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1604 @item paragraph-indent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1605 Used in @code{makeinfo}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1606
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1607 @item parents
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1608 @samp{-p} in @code{mkdir} and @code{rmdir}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1609
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1610 @item pass-all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1611 @samp{-p} in @code{ul}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1612
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1613 @item pass-through
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1614 @samp{-p} in @code{cpio}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1615
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1616 @item port
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1617 @samp{-P} in @code{finger}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1618
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1619 @item portability
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1620 @samp{-c} in @code{cpio} and @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1621
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1622 @item posix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1623 Used in @code{gawk}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1624
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1625 @item prefix-builtins
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1626 @samp{-P} in @code{m4}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1627
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1628 @item prefix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1629 @samp{-f} in @code{csplit}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1630
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1631 @item preserve
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1632 Used in @code{tar} and @code{cp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1633
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1634 @item preserve-environment
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1635 @samp{-p} in @code{su}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1636
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1637 @item preserve-modification-time
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1638 @samp{-m} in @code{cpio}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1639
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1640 @item preserve-order
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1641 @samp{-s} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1642
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1643 @item preserve-permissions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1644 @samp{-p} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1645
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1646 @item print
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1647 @samp{-l} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1648
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1649 @item print-chars
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1650 @samp{-L} in @code{cmp}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1651
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1652 @item print-data-base
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1653 @samp{-p} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1654
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1655 @item print-directory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1656 @samp{-w} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1657
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1658 @item print-file-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1659 @samp{-o} in @code{nm}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1660
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1661 @item print-symdefs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1662 @samp{-s} in @code{nm}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1663
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1664 @item printer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1665 @samp{-p} in @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1666
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1667 @item prompt
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1668 @samp{-p} in @code{ed}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1669
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1670 @item proxy
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1671 Specify an HTTP proxy.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1672
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1673 @item query-user
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1674 @samp{-X} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1675
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1676 @item question
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1677 @samp{-q} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1678
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1679 @item quiet
2665
bac3173b2665 [xemacs-hg @ 2005-03-15 06:15:35 by stephent]
stephent
parents: 462
diff changeset
1680 Used in many programs to inhibit the usual output. @strong{Every
bac3173b2665 [xemacs-hg @ 2005-03-15 06:15:35 by stephent]
stephent
parents: 462
diff changeset
1681 program accepting @samp{--quiet}} should accept @samp{--silent} as a
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1682 synonym.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1683
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1684 @item quiet-unshar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1685 @samp{-Q} in @code{shar}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1686
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1687 @item quote-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1688 @samp{-Q} in @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1689
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1690 @item rcs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1691 @samp{-n} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1692
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1693 @item re-interval
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1694 Used in @code{gawk}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1695
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1696 @item read-full-blocks
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1697 @samp{-B} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1698
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1699 @item readnow
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1700 Used in GDB.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1701
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1702 @item recon
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1703 @samp{-n} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1704
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1705 @item record-number
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1706 @samp{-R} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1707
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1708 @item recursive
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1709 Used in @code{chgrp}, @code{chown}, @code{cp}, @code{ls}, @code{diff},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1710 and @code{rm}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1711
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1712 @item reference-limit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1713 Used in @code{makeinfo}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1714
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1715 @item references
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1716 @samp{-r} in @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1717
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1718 @item regex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1719 @samp{-r} in @code{tac} and @code{etags}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1720
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1721 @item release
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1722 @samp{-r} in @code{uname}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1723
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1724 @item reload-state
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1725 @samp{-R} in @code{m4}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1726
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1727 @item relocation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1728 @samp{-r} in @code{objdump}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1729
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1730 @item rename
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1731 @samp{-r} in @code{cpio}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1732
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1733 @item replace
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1734 @samp{-i} in @code{xargs}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1735
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1736 @item report-identical-files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1737 @samp{-s} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1738
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1739 @item reset-access-time
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1740 @samp{-a} in @code{cpio}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1741
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1742 @item reverse
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1743 @samp{-r} in @code{ls} and @code{nm}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1744
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1745 @item reversed-ed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1746 @samp{-f} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1747
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1748 @item right-side-defs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1749 @samp{-R} in @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1750
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1751 @item same-order
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1752 @samp{-s} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1753
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1754 @item same-permissions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1755 @samp{-p} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1756
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1757 @item save
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1758 @samp{-g} in @code{stty}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1759
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1760 @item se
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1761 Used in GDB.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1762
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1763 @item sentence-regexp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1764 @samp{-S} in @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1765
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1766 @item separate-dirs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1767 @samp{-S} in @code{du}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1768
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1769 @item separator
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1770 @samp{-s} in @code{tac}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1771
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1772 @item sequence
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1773 Used by @code{recode} to chose files or pipes for sequencing passes.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1774
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1775 @item shell
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1776 @samp{-s} in @code{su}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1777
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1778 @item show-all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1779 @samp{-A} in @code{cat}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1780
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1781 @item show-c-function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1782 @samp{-p} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1783
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1784 @item show-ends
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1785 @samp{-E} in @code{cat}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1786
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1787 @item show-function-line
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1788 @samp{-F} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1789
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1790 @item show-tabs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1791 @samp{-T} in @code{cat}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1792
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1793 @item silent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1794 Used in many programs to inhibit the usual output.
2665
bac3173b2665 [xemacs-hg @ 2005-03-15 06:15:35 by stephent]
stephent
parents: 462
diff changeset
1795 @strong{Every program accepting
bac3173b2665 [xemacs-hg @ 2005-03-15 06:15:35 by stephent]
stephent
parents: 462
diff changeset
1796 @samp{--silent}} should accept @samp{--quiet} as a synonym.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1797
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1798 @item size
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1799 @samp{-s} in @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1800
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1801 @item socket
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1802 Specify a file descriptor for a network server to use for its socket,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1803 instead of opening and binding a new socket. This provides a way to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1804 run, in a nonpriveledged process, a server that normally needs a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1805 reserved port number.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1806
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1807 @item sort
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1808 Used in @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1809
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1810 @item source
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1811 @samp{-W source} in @code{gawk}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1812
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1813 @item sparse
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1814 @samp{-S} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1815
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1816 @item speed-large-files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1817 @samp{-H} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1818
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1819 @item split-at
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1820 @samp{-E} in @code{unshar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1821
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1822 @item split-size-limit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1823 @samp{-L} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1824
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1825 @item squeeze-blank
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1826 @samp{-s} in @code{cat}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1827
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1828 @item start-delete
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1829 @samp{-w} in @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1830
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1831 @item start-insert
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1832 @samp{-y} in @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1833
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1834 @item starting-file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1835 Used in @code{tar} and @code{diff} to specify which file within
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1836 a directory to start processing with.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1837
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1838 @item statistics
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1839 @samp{-s} in @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1840
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1841 @item stdin-file-list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1842 @samp{-S} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1843
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1844 @item stop
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1845 @samp{-S} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1846
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1847 @item strict
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1848 @samp{-s} in @code{recode}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1849
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1850 @item strip
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1851 @samp{-s} in @code{install}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1852
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1853 @item strip-all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1854 @samp{-s} in @code{strip}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1855
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1856 @item strip-debug
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1857 @samp{-S} in @code{strip}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1858
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1859 @item submitter
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1860 @samp{-s} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1861
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1862 @item suffix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1863 @samp{-S} in @code{cp}, @code{ln}, @code{mv}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1864
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1865 @item suffix-format
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1866 @samp{-b} in @code{csplit}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1867
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1868 @item sum
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1869 @samp{-s} in @code{gprof}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1870
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1871 @item summarize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1872 @samp{-s} in @code{du}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1873
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1874 @item symbolic
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1875 @samp{-s} in @code{ln}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1876
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1877 @item symbols
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1878 Used in GDB and @code{objdump}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1879
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1880 @item synclines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1881 @samp{-s} in @code{m4}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1882
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1883 @item sysname
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1884 @samp{-s} in @code{uname}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1885
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1886 @item tabs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1887 @samp{-t} in @code{expand} and @code{unexpand}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1888
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1889 @item tabsize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1890 @samp{-T} in @code{ls}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1891
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1892 @item terminal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1893 @samp{-T} in @code{tput} and @code{ul}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1894 @samp{-t} in @code{wdiff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1895
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1896 @item text
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1897 @samp{-a} in @code{diff}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1898
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1899 @item text-files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1900 @samp{-T} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1901
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1902 @item time
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1903 Used in @code{ls} and @code{touch}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1904
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1905 @item timeout
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1906 Specify how long to wait before giving up on some operation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1907
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1908 @item to-stdout
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1909 @samp{-O} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1910
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1911 @item total
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1912 @samp{-c} in @code{du}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1913
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1914 @item touch
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1915 @samp{-t} in Make, @code{ranlib}, and @code{recode}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1916
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1917 @item trace
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1918 @samp{-t} in @code{m4}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1919
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1920 @item traditional
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1921 @samp{-t} in @code{hello};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1922 @samp{-W traditional} in @code{gawk};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1923 @samp{-G} in @code{ed}, @code{m4}, and @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1924
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1925 @item tty
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1926 Used in GDB.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1927
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1928 @item typedefs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1929 @samp{-t} in @code{ctags}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1930
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1931 @item typedefs-and-c++
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1932 @samp{-T} in @code{ctags}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1933
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1934 @item typeset-mode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1935 @samp{-t} in @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1936
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1937 @item uncompress
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1938 @samp{-z} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1939
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1940 @item unconditional
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1941 @samp{-u} in @code{cpio}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1942
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1943 @item undefine
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1944 @samp{-U} in @code{m4}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1945
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1946 @item undefined-only
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1947 @samp{-u} in @code{nm}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1948
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1949 @item update
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1950 @samp{-u} in @code{cp}, @code{ctags}, @code{mv}, @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1951
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1952 @item usage
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1953 Used in @code{gawk}; same as @samp{--help}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1954
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1955 @item uuencode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1956 @samp{-B} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1957
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1958 @item vanilla-operation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1959 @samp{-V} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1960
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1961 @item verbose
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1962 Print more information about progress. Many programs support this.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1963
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1964 @item verify
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1965 @samp{-W} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1966
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1967 @item version
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1968 Print the version number.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1969
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1970 @item version-control
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1971 @samp{-V} in @code{cp}, @code{ln}, @code{mv}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1972
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1973 @item vgrind
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1974 @samp{-v} in @code{ctags}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1975
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1976 @item volume
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1977 @samp{-V} in @code{tar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1978
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1979 @item what-if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1980 @samp{-W} in Make.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1981
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1982 @item whole-size-limit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1983 @samp{-l} in @code{shar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1984
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1985 @item width
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1986 @samp{-w} in @code{ls} and @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1987
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1988 @item word-regexp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1989 @samp{-W} in @code{ptx}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1990
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1991 @item writable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1992 @samp{-T} in @code{who}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1993
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1994 @item zeros
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1995 @samp{-z} in @code{gprof}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1996 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1997
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1998 @node Memory Usage
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1999 @section Memory Usage
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2000 @cindex memory usage
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2001
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2002 If a program typically uses just a few meg of memory, don't bother making any
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2003 effort to reduce memory usage. For example, if it is impractical for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2004 other reasons to operate on files more than a few meg long, it is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2005 reasonable to read entire input files into core to operate on them.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2006
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2007 However, for programs such as @code{cat} or @code{tail}, that can
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2008 usefully operate on very large files, it is important to avoid using a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2009 technique that would artificially limit the size of files it can handle.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2010 If a program works by lines and could be applied to arbitrary
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2011 user-supplied input files, it should keep only a line in memory, because
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2012 this is not very hard and users will want to be able to operate on input
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2013 files that are bigger than will fit in core all at once.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2014
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2015 If your program creates complicated data structures, just make them in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2016 core and give a fatal error if @code{malloc} returns zero.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2017
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2018 @node File Usage
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2019 @section File Usage
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2020 @cindex file usage
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2021
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2022 Programs should be prepared to operate when @file{/usr} and @file{/etc}
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2023 are read-only file systems. Thus, if the program manages log files,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2024 lock files, backup files, score files, or any other files which are
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2025 modified for internal purposes, these files should not be stored in
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2026 @file{/usr} or @file{/etc}.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2027
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2028 There are two exceptions. @file{/etc} is used to store system
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2029 configuration information; it is reasonable for a program to modify
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2030 files in @file{/etc} when its job is to update the system configuration.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2031 Also, if the user explicitly asks to modify one file in a directory, it
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2032 is reasonable for the program to store other files in the same
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2033 directory.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2034
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2035 @node Writing C
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2036 @chapter Making The Best Use of C
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2037
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2038 This @value{CHAPTER} provides advice on how best to use the C language
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2039 when writing GNU software.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2040
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2041 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2042 * Formatting:: Formatting Your Source Code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2043 * Comments:: Commenting Your Work
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2044 * Syntactic Conventions:: Clean Use of C Constructs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2045 * Names:: Naming Variables and Functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2046 * System Portability:: Portability between different operating systems
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2047 * CPU Portability:: Supporting the range of CPU types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2048 * System Functions:: Portability and ``standard'' library functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2049 * Internationalization:: Techniques for internationalization
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2050 * Mmap:: How you can safely use @code{mmap}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2051 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2052
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2053 @node Formatting
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2054 @section Formatting Your Source Code
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2055 @cindex formatting source code
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2056
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2057 @cindex open brace
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2058 @cindex braces, in C source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2059 It is important to put the open-brace that starts the body of a C
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2060 function in column zero, and avoid putting any other open-brace or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2061 open-parenthesis or open-bracket in column zero. Several tools look
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2062 for open-braces in column zero to find the beginnings of C functions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2063 These tools will not work on code not formatted that way.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2064
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2065 It is also important for function definitions to start the name of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2066 function in column zero. This helps people to search for function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2067 definitions, and may also help certain tools recognize them. Thus,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2068 the proper format is this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2069
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2070 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2071 static char *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2072 concat (s1, s2) /* Name starts in column zero here */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2073 char *s1, *s2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2074 @{ /* Open brace in column zero here */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2075 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2076 @}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2077 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2078
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2079 @noindent
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2080 or, if you want to use Standard C syntax, format the definition like
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2081 this:
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2082
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2083 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2084 static char *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2085 concat (char *s1, char *s2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2086 @{
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2087 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2088 @}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2089 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2090
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2091 In Standard C, if the arguments don't fit nicely on one line,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2092 split it like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2093
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2094 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2095 int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2096 lots_of_args (int an_integer, long a_long, short a_short,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2097 double a_double, float a_float)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2098 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2099 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2100
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2101 The rest of this section gives our recommendations for other aspects of
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2102 C formatting style, which is also the default style of the @code{indent}
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2103 program in version 1.2 and newer. It corresponds to the options
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2104
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2105 @smallexample
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2106 -nbad -bap -nbc -bbo -bl -bli2 -bls -ncdb -nce -cp1 -cs -di2
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2107 -ndj -nfc1 -nfca -hnl -i2 -ip5 -lp -pcs -psl -nsc -nsob
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2108 @end smallexample
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2109
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2110 We don't think of these recommendations as requirements, because it
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2111 causes no problems for users if two different programs have different
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2112 formatting styles.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2113
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2114 But whatever style you use, please use it consistently, since a mixture
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2115 of styles within one program tends to look ugly. If you are
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2116 contributing changes to an existing program, please follow the style of
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2117 that program.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2118
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2119 For the body of the function, our recommended style looks like this:
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2120
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2121 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2122 if (x < foo (y, z))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2123 haha = bar[4] + 5;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2124 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2125 @{
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2126 while (z)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2127 @{
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2128 haha += foo (z, z);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2129 z--;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2130 @}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2131 return ++x + bar ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2132 @}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2133 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2134
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2135 @cindex spaces before open-paren
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2136 We find it easier to read a program when it has spaces before the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2137 open-parentheses and after the commas. Especially after the commas.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2138
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2139 When you split an expression into multiple lines, split it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2140 before an operator, not after one. Here is the right way:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2141
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2142 @cindex expressions, splitting
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2143 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2144 if (foo_this_is_long && bar > win (x, y, z)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2145 && remaining_condition)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2146 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2147
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2148 Try to avoid having two operators of different precedence at the same
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2149 level of indentation. For example, don't write this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2150
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2151 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2152 mode = (inmode[j] == VOIDmode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2153 || GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2154 ? outmode[j] : inmode[j]);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2155 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2156
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2157 Instead, use extra parentheses so that the indentation shows the nesting:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2158
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2159 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2160 mode = ((inmode[j] == VOIDmode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2161 || (GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j])))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2162 ? outmode[j] : inmode[j]);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2163 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2164
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2165 Insert extra parentheses so that Emacs will indent the code properly.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2166 For example, the following indentation looks nice if you do it by hand,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2167
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2168 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2169 v = rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2170 + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2171 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2172
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2173 @noindent
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2174 but Emacs would alter it. Adding a set of parentheses produces
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2175 something that looks equally nice, and which Emacs will preserve:
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2176
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2177 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2178 v = (rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2179 + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2180 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2181
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2182 Format do-while statements like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2183
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2184 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2185 do
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2186 @{
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2187 a = foo (a);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2188 @}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2189 while (a > 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2190 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2191
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2192 @cindex formfeed
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2193 @cindex control-L
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2194 Please use formfeed characters (control-L) to divide the program into
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2195 pages at logical places (but not within a function). It does not matter
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2196 just how long the pages are, since they do not have to fit on a printed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2197 page. The formfeeds should appear alone on lines by themselves.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2198
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2199 @node Comments
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2200 @section Commenting Your Work
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2201 @cindex commenting
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2202
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2203 Every program should start with a comment saying briefly what it is for.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2204 Example: @samp{fmt - filter for simple filling of text}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2205
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2206 Please write the comments in a GNU program in English, because English
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2207 is the one language that nearly all programmers in all countries can
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2208 read. If you do not write English well, please write comments in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2209 English as well as you can, then ask other people to help rewrite them.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2210 If you can't write comments in English, please find someone to work with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2211 you and translate your comments into English.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2212
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2213 Please put a comment on each function saying what the function does,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2214 what sorts of arguments it gets, and what the possible values of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2215 arguments mean and are used for. It is not necessary to duplicate in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2216 words the meaning of the C argument declarations, if a C type is being
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2217 used in its customary fashion. If there is anything nonstandard about
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2218 its use (such as an argument of type @code{char *} which is really the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2219 address of the second character of a string, not the first), or any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2220 possible values that would not work the way one would expect (such as,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2221 that strings containing newlines are not guaranteed to work), be sure
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2222 to say so.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2223
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2224 Also explain the significance of the return value, if there is one.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2225
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2226 Please put two spaces after the end of a sentence in your comments, so
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2227 that the Emacs sentence commands will work. Also, please write
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2228 complete sentences and capitalize the first word. If a lower-case
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2229 identifier comes at the beginning of a sentence, don't capitalize it!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2230 Changing the spelling makes it a different identifier. If you don't
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2231 like starting a sentence with a lower case letter, write the sentence
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2232 differently (e.g., ``The identifier lower-case is @dots{}'').
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2233
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2234 The comment on a function is much clearer if you use the argument
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2235 names to speak about the argument values. The variable name itself
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2236 should be lower case, but write it in upper case when you are speaking
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2237 about the value rather than the variable itself. Thus, ``the inode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2238 number NODE_NUM'' rather than ``an inode''.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2239
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2240 There is usually no purpose in restating the name of the function in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2241 the comment before it, because the reader can see that for himself.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2242 There might be an exception when the comment is so long that the function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2243 itself would be off the bottom of the screen.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2244
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2245 There should be a comment on each static variable as well, like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2246
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2247 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2248 /* Nonzero means truncate lines in the display;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2249 zero means continue them. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2250 int truncate_lines;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2251 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2252
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2253 @cindex conditionals, comments for
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2254 @cindex @code{#endif}, commenting
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2255 Every @samp{#endif} should have a comment, except in the case of short
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2256 conditionals (just a few lines) that are not nested. The comment should
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2257 state the condition of the conditional that is ending, @emph{including
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2258 its sense}. @samp{#else} should have a comment describing the condition
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2259 @emph{and sense} of the code that follows. For example:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2260
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2261 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2262 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2263 #ifdef foo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2264 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2265 #else /* not foo */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2266 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2267 #endif /* not foo */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2268 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2269 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2270 #ifdef foo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2271 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2272 #endif /* foo */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2273 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2274 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2275
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2276 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2277 but, by contrast, write the comments this way for a @samp{#ifndef}:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2278
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2279 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2280 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2281 #ifndef foo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2282 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2283 #else /* foo */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2284 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2285 #endif /* foo */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2286 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2287 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2288 #ifndef foo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2289 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2290 #endif /* not foo */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2291 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2292 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2293
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2294 @node Syntactic Conventions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2295 @section Clean Use of C Constructs
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2296 @cindex syntactic conventions
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2297
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2298 @cindex implicit @code{int}
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2299 @cindex function argument, declaring
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2300 Please explicitly declare the types of all objects. For example, you
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2301 should explicitly declare all arguments to functions, and you should
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2302 declare functions to return @code{int} rather than omitting the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2303 @code{int}.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2304
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2305 @cindex compiler warnings
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2306 @cindex @samp{-Wall} compiler option
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2307 Some programmers like to use the GCC @samp{-Wall} option, and change the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2308 code whenever it issues a warning. If you want to do this, then do.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2309 Other programmers prefer not to use @samp{-Wall}, because it gives
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2310 warnings for valid and legitimate code which they do not want to change.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2311 If you want to do this, then do. The compiler should be your servant,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2312 not your master.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2313
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2314 Declarations of external functions and functions to appear later in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2315 source file should all go in one place near the beginning of the file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2316 (somewhere before the first function definition in the file), or else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2317 should go in a header file. Don't put @code{extern} declarations inside
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2318 functions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2319
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2320 @cindex temporary variables
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2321 It used to be common practice to use the same local variables (with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2322 names like @code{tem}) over and over for different values within one
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2323 function. Instead of doing this, it is better declare a separate local
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2324 variable for each distinct purpose, and give it a name which is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2325 meaningful. This not only makes programs easier to understand, it also
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2326 facilitates optimization by good compilers. You can also move the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2327 declaration of each local variable into the smallest scope that includes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2328 all its uses. This makes the program even cleaner.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2329
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2330 Don't use local variables or parameters that shadow global identifiers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2331
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2332 @cindex multiple variables in a line
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2333 Don't declare multiple variables in one declaration that spans lines.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2334 Start a new declaration on each line, instead. For example, instead
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2335 of this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2336
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2337 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2338 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2339 int foo,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2340 bar;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2341 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2342 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2343
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2344 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2345 write either this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2346
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2347 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2348 int foo, bar;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2349 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2350
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2351 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2352 or this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2353
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2354 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2355 int foo;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2356 int bar;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2357 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2358
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2359 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2360 (If they are global variables, each should have a comment preceding it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2361 anyway.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2362
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2363 When you have an @code{if}-@code{else} statement nested in another
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2364 @code{if} statement, always put braces around the @code{if}-@code{else}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2365 Thus, never write like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2366
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2367 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2368 if (foo)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2369 if (bar)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2370 win ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2371 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2372 lose ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2373 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2374
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2375 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2376 always like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2377
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2378 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2379 if (foo)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2380 @{
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2381 if (bar)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2382 win ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2383 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2384 lose ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2385 @}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2386 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2387
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2388 If you have an @code{if} statement nested inside of an @code{else}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2389 statement, either write @code{else if} on one line, like this,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2390
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2391 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2392 if (foo)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2393 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2394 else if (bar)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2395 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2396 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2397
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2398 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2399 with its @code{then}-part indented like the preceding @code{then}-part,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2400 or write the nested @code{if} within braces like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2401
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2402 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2403 if (foo)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2404 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2405 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2406 @{
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2407 if (bar)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2408 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2409 @}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2410 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2411
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2412 Don't declare both a structure tag and variables or typedefs in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2413 same declaration. Instead, declare the structure tag separately
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2414 and then use it to declare the variables or typedefs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2415
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2416 Try to avoid assignments inside @code{if}-conditions. For example,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2417 don't write this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2418
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2419 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2420 if ((foo = (char *) malloc (sizeof *foo)) == 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2421 fatal ("virtual memory exhausted");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2422 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2423
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2424 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2425 instead, write this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2426
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2427 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2428 foo = (char *) malloc (sizeof *foo);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2429 if (foo == 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2430 fatal ("virtual memory exhausted");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2431 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2432
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2433 @pindex lint
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2434 Don't make the program ugly to placate @code{lint}. Please don't insert any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2435 casts to @code{void}. Zero without a cast is perfectly fine as a null
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2436 pointer constant, except when calling a varargs function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2437
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2438 @node Names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2439 @section Naming Variables and Functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2440
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2441 @cindex names of variables and functions
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2442 The names of global variables and functions in a program serve as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2443 comments of a sort. So don't choose terse names---instead, look for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2444 names that give useful information about the meaning of the variable or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2445 function. In a GNU program, names should be English, like other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2446 comments.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2447
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2448 Local variable names can be shorter, because they are used only within
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2449 one context, where (presumably) comments explain their purpose.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2450
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2451 Try to limit your use of abbreviations in symbol names. It is ok to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2452 make a few abbreviations, explain what they mean, and then use them
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2453 frequently, but don't use lots of obscure abbreviations.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2454
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2455 Please use underscores to separate words in a name, so that the Emacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2456 word commands can be useful within them. Stick to lower case; reserve
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2457 upper case for macros and @code{enum} constants, and for name-prefixes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2458 that follow a uniform convention.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2459
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2460 For example, you should use names like @code{ignore_space_change_flag};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2461 don't use names like @code{iCantReadThis}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2462
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2463 Variables that indicate whether command-line options have been
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2464 specified should be named after the meaning of the option, not after
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2465 the option-letter. A comment should state both the exact meaning of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2466 the option and its letter. For example,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2467
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2468 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2469 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2470 /* Ignore changes in horizontal whitespace (-b). */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2471 int ignore_space_change_flag;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2472 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2473 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2474
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2475 When you want to define names with constant integer values, use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2476 @code{enum} rather than @samp{#define}. GDB knows about enumeration
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2477 constants.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2478
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2479 @cindex file-name limitations
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2480 @pindex doschk
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2481 You might want to make sure that none of the file names would conflict
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2482 the files were loaded onto an MS-DOS file system which shortens the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2483 names. You can use the program @code{doschk} to test for this.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2484
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2485 Some GNU programs were designed to limit themselves to file names of 14
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2486 characters or less, to avoid file name conflicts if they are read into
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2487 older System V systems. Please preserve this feature in the existing
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2488 GNU programs that have it, but there is no need to do this in new GNU
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2489 programs. @code{doschk} also reports file names longer than 14
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2490 characters.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2491
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2492 @node System Portability
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2493 @section Portability between System Types
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2494 @cindex portability, between system types
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2495
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2496 In the Unix world, ``portability'' refers to porting to different Unix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2497 versions. For a GNU program, this kind of portability is desirable, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2498 not paramount.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2499
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2500 The primary purpose of GNU software is to run on top of the GNU kernel,
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2501 compiled with the GNU C compiler, on various types of @sc{cpu}. So the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2502 kinds of portability that are absolutely necessary are quite limited.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2503 But it is important to support Linux-based GNU systems, since they
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2504 are the form of GNU that is popular.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2505
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2506 Beyond that, it is good to support the other free operating systems
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2507 (*BSD), and it is nice to support other Unix-like systems if you want
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2508 to. Supporting a variety of Unix-like systems is desirable, although
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2509 not paramount. It is usually not too hard, so you may as well do it.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2510 But you don't have to consider it an obligation, if it does turn out to
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2511 be hard.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2512
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2513 @pindex autoconf
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2514 The easiest way to achieve portability to most Unix-like systems is to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2515 use Autoconf. It's unlikely that your program needs to know more
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2516 information about the host platform than Autoconf can provide, simply
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2517 because most of the programs that need such knowledge have already been
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2518 written.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2519
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2520 Avoid using the format of semi-internal data bases (e.g., directories)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2521 when there is a higher-level alternative (@code{readdir}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2522
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2523 @cindex non-@sc{posix} systems, and portability
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2524 As for systems that are not like Unix, such as MSDOS, Windows, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2525 Macintosh, VMS, and MVS, supporting them is often a lot of work. When
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2526 that is the case, it is better to spend your time adding features that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2527 will be useful on GNU and GNU/Linux, rather than on supporting other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2528 incompatible systems.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2529
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2530 It is a good idea to define the ``feature test macro''
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2531 @code{_GNU_SOURCE} when compiling your C files. When you compile on GNU
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2532 or GNU/Linux, this will enable the declarations of GNU library extension
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2533 functions, and that will usually give you a compiler error message if
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2534 you define the same function names in some other way in your program.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2535 (You don't have to actually @emph{use} these functions, if you prefer
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2536 to make the program more portable to other systems.)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2537
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2538 But whether or not you use these GNU extensions, you should avoid
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2539 using their names for any other meanings. Doing so would make it hard
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2540 to move your code into other GNU programs.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2541
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2542 @node CPU Portability
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2543 @section Portability between @sc{cpu}s
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2544
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2545 @cindex data types, and portability
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2546 @cindex portability, and data types
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2547 Even GNU systems will differ because of differences among @sc{cpu}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2548 types---for example, difference in byte ordering and alignment
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2549 requirements. It is absolutely essential to handle these differences.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2550 However, don't make any effort to cater to the possibility that an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2551 @code{int} will be less than 32 bits. We don't support 16-bit machines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2552 in GNU.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2553
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2554 Similarly, don't make any effort to cater to the possibility that
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2555 @code{long} will be smaller than predefined types like @code{size_t}.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2556 For example, the following code is ok:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2557
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2558 @example
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2559 printf ("size = %lu\n", (unsigned long) sizeof array);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2560 printf ("diff = %ld\n", (long) (pointer2 - pointer1));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2561 @end example
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2562
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2563 1989 Standard C requires this to work, and we know of only one
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2564 counterexample: 64-bit programs on Microsoft Windows IA-64. We will
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2565 leave it to those who want to port GNU programs to that environment
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2566 to figure out how to do it.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2567
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2568 Predefined file-size types like @code{off_t} are an exception: they are
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2569 longer than @code{long} on many platforms, so code like the above won't
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2570 work with them. One way to print an @code{off_t} value portably is to
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2571 print its digits yourself, one by one.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2572
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2573 Don't assume that the address of an @code{int} object is also the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2574 address of its least-significant byte. This is false on big-endian
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2575 machines. Thus, don't make the following mistake:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2576
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2577 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2578 int c;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2579 @dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2580 while ((c = getchar()) != EOF)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2581 write(file_descriptor, &c, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2582 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2583
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2584 When calling functions, you need not worry about the difference between
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2585 pointers of various types, or between pointers and integers. On most
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2586 machines, there's no difference anyway. As for the few machines where
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2587 there is a difference, all of them support Standard C prototypes, so you can
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2588 use prototypes (perhaps conditionalized to be active only in Standard C)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2589 to make the code work on those systems.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2590
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2591 In certain cases, it is ok to pass integer and pointer arguments
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2592 indiscriminately to the same function, and use no prototype on any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2593 system. For example, many GNU programs have error-reporting functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2594 that pass their arguments along to @code{printf} and friends:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2595
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2596 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2597 error (s, a1, a2, a3)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2598 char *s;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2599 char *a1, *a2, *a3;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2600 @{
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2601 fprintf (stderr, "error: ");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2602 fprintf (stderr, s, a1, a2, a3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2603 @}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2604 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2605
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2606 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2607 In practice, this works on all machines, since a pointer is generally
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2608 the widest possible kind of argument; it is much simpler than any
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2609 ``correct'' alternative. Be sure @emph{not} to use a prototype for such
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2610 functions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2611
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2612 If you have decided to use Standard C, then you can instead define
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2613 @code{error} using @file{stdarg.h}, and pass the arguments along to
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2614 @code{vfprintf}.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2615
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2616 @cindex casting pointers to integers
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2617 Avoid casting pointers to integers if you can. Such casts greatly
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2618 reduce portability, and in most programs they are easy to avoid. In the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2619 cases where casting pointers to integers is essential---such as, a Lisp
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2620 interpreter which stores type information as well as an address in one
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2621 word---you'll have to make explicit provisions to handle different word
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2622 sizes. You will also need to make provision for systems in which the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2623 normal range of addresses you can get from @code{malloc} starts far away
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2624 from zero.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2625
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2626 @node System Functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2627 @section Calling System Functions
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2628 @cindex library functions, and portability
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2629 @cindex portability, and library functions
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2630
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2631 C implementations differ substantially. Standard C reduces but does
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2632 not eliminate the incompatibilities; meanwhile, many GNU packages still
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2633 support pre-standard compilers because this is not hard to do. This
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2634 chapter gives recommendations for how to use the more-or-less standard C
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2635 library functions to avoid unnecessary loss of portability.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2636
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2637 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2638 @item
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2639 Don't use the return value of @code{sprintf}. It returns the number of
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2640 characters written on some systems, but not on all systems.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2641
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2642 @item
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2643 Be aware that @code{vfprintf} is not always available.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2644
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2645 @item
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2646 @code{main} should be declared to return type @code{int}. It should
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2647 terminate either by calling @code{exit} or by returning the integer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2648 status code; make sure it cannot ever return an undefined value.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2649
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2650 @cindex declaration for system functions
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2651 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2652 Don't declare system functions explicitly.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2653
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2654 Almost any declaration for a system function is wrong on some system.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2655 To minimize conflicts, leave it to the system header files to declare
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2656 system functions. If the headers don't declare a function, let it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2657 remain undeclared.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2658
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2659 While it may seem unclean to use a function without declaring it, in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2660 practice this works fine for most system library functions on the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2661 systems where this really happens; thus, the disadvantage is only
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2662 theoretical. By contrast, actual declarations have frequently caused
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2663 actual conflicts.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2664
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2665 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2666 If you must declare a system function, don't specify the argument types.
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2667 Use an old-style declaration, not a Standard C prototype. The more you
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2668 specify about the function, the more likely a conflict.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2669
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2670 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2671 In particular, don't unconditionally declare @code{malloc} or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2672 @code{realloc}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2673
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2674 Most GNU programs use those functions just once, in functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2675 conventionally named @code{xmalloc} and @code{xrealloc}. These
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2676 functions call @code{malloc} and @code{realloc}, respectively, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2677 check the results.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2678
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2679 Because @code{xmalloc} and @code{xrealloc} are defined in your program,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2680 you can declare them in other files without any risk of type conflict.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2681
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2682 On most systems, @code{int} is the same length as a pointer; thus, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2683 calls to @code{malloc} and @code{realloc} work fine. For the few
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2684 exceptional systems (mostly 64-bit machines), you can use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2685 @strong{conditionalized} declarations of @code{malloc} and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2686 @code{realloc}---or put these declarations in configuration files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2687 specific to those systems.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2688
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2689 @cindex string library functions
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2690 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2691 The string functions require special treatment. Some Unix systems have
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2692 a header file @file{string.h}; others have @file{strings.h}. Neither
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2693 file name is portable. There are two things you can do: use Autoconf to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2694 figure out which file to include, or don't include either file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2695
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2696 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2697 If you don't include either strings file, you can't get declarations for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2698 the string functions from the header file in the usual way.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2699
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2700 That causes less of a problem than you might think. The newer standard
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2701 string functions should be avoided anyway because many systems still
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2702 don't support them. The string functions you can use are these:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2703
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2704 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2705 strcpy strncpy strcat strncat
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2706 strlen strcmp strncmp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2707 strchr strrchr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2708 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2709
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2710 The copy and concatenate functions work fine without a declaration as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2711 long as you don't use their values. Using their values without a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2712 declaration fails on systems where the width of a pointer differs from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2713 the width of @code{int}, and perhaps in other cases. It is trivial to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2714 avoid using their values, so do that.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2715
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2716 The compare functions and @code{strlen} work fine without a declaration
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2717 on most systems, possibly all the ones that GNU software runs on.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2718 You may find it necessary to declare them @strong{conditionally} on a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2719 few systems.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2720
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2721 The search functions must be declared to return @code{char *}. Luckily,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2722 there is no variation in the data type they return. But there is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2723 variation in their names. Some systems give these functions the names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2724 @code{index} and @code{rindex}; other systems use the names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2725 @code{strchr} and @code{strrchr}. Some systems support both pairs of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2726 names, but neither pair works on all systems.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2727
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2728 You should pick a single pair of names and use it throughout your
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2729 program. (Nowadays, it is better to choose @code{strchr} and
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2730 @code{strrchr} for new programs, since those are the standard
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2731 names.) Declare both of those names as functions returning @code{char
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2732 *}. On systems which don't support those names, define them as macros
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2733 in terms of the other pair. For example, here is what to put at the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2734 beginning of your file (or in a header) if you want to use the names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2735 @code{strchr} and @code{strrchr} throughout:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2736
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2737 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2738 #ifndef HAVE_STRCHR
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2739 #define strchr index
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2740 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2741 #ifndef HAVE_STRRCHR
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2742 #define strrchr rindex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2743 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2744
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2745 char *strchr ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2746 char *strrchr ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2747 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2748 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2749
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2750 Here we assume that @code{HAVE_STRCHR} and @code{HAVE_STRRCHR} are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2751 macros defined in systems where the corresponding functions exist.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2752 One way to get them properly defined is to use Autoconf.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2753
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2754 @node Internationalization
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2755 @section Internationalization
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2756 @cindex internationalization
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2757
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2758 @pindex gettext
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2759 GNU has a library called GNU gettext that makes it easy to translate the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2760 messages in a program into various languages. You should use this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2761 library in every program. Use English for the messages as they appear
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2762 in the program, and let gettext provide the way to translate them into
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2763 other languages.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2764
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2765 Using GNU gettext involves putting a call to the @code{gettext} macro
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2766 around each string that might need translation---like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2767
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2768 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2769 printf (gettext ("Processing file `%s'..."));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2770 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2771
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2772 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2773 This permits GNU gettext to replace the string @code{"Processing file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2774 `%s'..."} with a translated version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2775
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2776 Once a program uses gettext, please make a point of writing calls to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2777 @code{gettext} when you add new strings that call for translation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2778
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2779 Using GNU gettext in a package involves specifying a @dfn{text domain
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2780 name} for the package. The text domain name is used to separate the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2781 translations for this package from the translations for other packages.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2782 Normally, the text domain name should be the same as the name of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2783 package---for example, @samp{fileutils} for the GNU file utilities.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2784
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2785 @cindex message text, and internationalization
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2786 To enable gettext to work well, avoid writing code that makes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2787 assumptions about the structure of words or sentences. When you want
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2788 the precise text of a sentence to vary depending on the data, use two or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2789 more alternative string constants each containing a complete sentences,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2790 rather than inserting conditionalized words or phrases into a single
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2791 sentence framework.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2792
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2793 Here is an example of what not to do:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2794
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2795 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2796 printf ("%d file%s processed", nfiles,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2797 nfiles != 1 ? "s" : "");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2798 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2799
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2800 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2801 The problem with that example is that it assumes that plurals are made
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2802 by adding `s'. If you apply gettext to the format string, like this,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2803
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2804 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2805 printf (gettext ("%d file%s processed"), nfiles,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2806 nfiles != 1 ? "s" : "");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2807 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2808
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2809 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2810 the message can use different words, but it will still be forced to use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2811 `s' for the plural. Here is a better way:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2812
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2813 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2814 printf ((nfiles != 1 ? "%d files processed"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2815 : "%d file processed"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2816 nfiles);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2817 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2818
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2819 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2820 This way, you can apply gettext to each of the two strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2821 independently:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2822
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2823 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2824 printf ((nfiles != 1 ? gettext ("%d files processed")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2825 : gettext ("%d file processed")),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2826 nfiles);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2827 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2828
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2829 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2830 This can be any method of forming the plural of the word for ``file'', and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2831 also handles languages that require agreement in the word for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2832 ``processed''.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2833
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2834 A similar problem appears at the level of sentence structure with this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2835 code:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2836
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2837 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2838 printf ("# Implicit rule search has%s been done.\n",
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2839 f->tried_implicit ? "" : " not");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2840 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2841
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2842 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2843 Adding @code{gettext} calls to this code cannot give correct results for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2844 all languages, because negation in some languages requires adding words
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2845 at more than one place in the sentence. By contrast, adding
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2846 @code{gettext} calls does the job straightfowardly if the code starts
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2847 out like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2848
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2849 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2850 printf (f->tried_implicit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2851 ? "# Implicit rule search has been done.\n",
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2852 : "# Implicit rule search has not been done.\n");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2853 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2854
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2855 @node Mmap
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2856 @section Mmap
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2857 @findex mmap
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2858
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2859 Don't assume that @code{mmap} either works on all files or fails
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2860 for all files. It may work on some files and fail on others.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2861
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2862 The proper way to use @code{mmap} is to try it on the specific file for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2863 which you want to use it---and if @code{mmap} doesn't work, fall back on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2864 doing the job in another way using @code{read} and @code{write}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2865
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2866 The reason this precaution is needed is that the GNU kernel (the HURD)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2867 provides a user-extensible file system, in which there can be many
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2868 different kinds of ``ordinary files.'' Many of them support
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2869 @code{mmap}, but some do not. It is important to make programs handle
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2870 all these kinds of files.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2871
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2872 @node Documentation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2873 @chapter Documenting Programs
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2874 @cindex documentation
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2875
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2876 A GNU program should ideally come with full free documentation, adequate
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2877 for both reference and tutorial purposes. If the package can be
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2878 programmed or extended, the documentation should cover programming or
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2879 extending it, as well as just using it.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2880
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2881 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2882 * GNU Manuals:: Writing proper manuals.
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2883 * Doc Strings and Manuals:: Compiling doc strings doesn't make a manual.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2884 * Manual Structure Details:: Specific structure conventions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2885 * License for Manuals:: Writing the distribution terms for a manual.
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2886 * Manual Credits:: Giving credit to documentation contributors.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2887 * Printed Manuals:: Mentioning the printed manual.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2888 * NEWS File:: NEWS files supplement manuals.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2889 * Change Logs:: Recording Changes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2890 * Man Pages:: Man pages are secondary.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2891 * Reading other Manuals:: How far you can go in learning
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2892 from other manuals.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2893 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2894
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2895 @node GNU Manuals
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2896 @section GNU Manuals
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2897
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2898 The preferred document format for the GNU system is the Texinfo
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2899 formatting language. Every GNU package should (ideally) have
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2900 documentation in Texinfo both for reference and for learners. Texinfo
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2901 makes it possible to produce a good quality formatted book, using
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2902 @TeX{}, and to generate an Info file. It is also possible to generate
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2903 HTML output from Texinfo source. See the Texinfo manual, either the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2904 hardcopy, or the on-line version available through @code{info} or the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2905 Emacs Info subsystem (@kbd{C-h i}).
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2906
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2907 Nowadays some other formats such as Docbook and Sgmltexi can be
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2908 converted automatically into Texinfo. It is ok to produce the Texinfo
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2909 documentation by conversion this way, as long as it gives good results.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2910
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2911 Programmers often find it most natural to structure the documentation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2912 following the structure of the implementation, which they know. But
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2913 this structure is not necessarily good for explaining how to use the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2914 program; it may be irrelevant and confusing for a user.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2915
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2916 At every level, from the sentences in a paragraph to the grouping of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2917 topics into separate manuals, the right way to structure documentation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2918 is according to the concepts and questions that a user will have in mind
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2919 when reading it. Sometimes this structure of ideas matches the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2920 structure of the implementation of the software being documented---but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2921 often they are different. Often the most important part of learning to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2922 write good documentation is learning to notice when you are structuring
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2923 the documentation like the implementation, and think about better
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2924 alternatives.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2925
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2926 For example, each program in the GNU system probably ought to be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2927 documented in one manual; but this does not mean each program should
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2928 have its own manual. That would be following the structure of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2929 implementation, rather than the structure that helps the user
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2930 understand.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2931
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2932 Instead, each manual should cover a coherent @emph{topic}. For example,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2933 instead of a manual for @code{diff} and a manual for @code{diff3}, we
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2934 have one manual for ``comparison of files'' which covers both of those
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2935 programs, as well as @code{cmp}. By documenting these programs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2936 together, we can make the whole subject clearer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2937
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2938 The manual which discusses a program should certainly document all of
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2939 the program's command-line options and all of its commands. It should
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2940 give examples of their use. But don't organize the manual as a list of
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2941 features. Instead, organize it logically, by subtopics. Address the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2942 questions that a user will ask when thinking about the job that the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2943 program does.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2944
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2945 In general, a GNU manual should serve both as tutorial and reference.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2946 It should be set up for convenient access to each topic through Info,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2947 and for reading straight through (appendixes aside). A GNU manual
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2948 should give a good introduction to a beginner reading through from the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2949 start, and should also provide all the details that hackers want.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2950 The Bison manual is a good example of this---please take a look at it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2951 to see what we mean.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2952
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2953 That is not as hard as it first sounds. Arrange each chapter as a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2954 logical breakdown of its topic, but order the sections, and write their
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2955 text, so that reading the chapter straight through makes sense. Do
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2956 likewise when structuring the book into chapters, and when structuring a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2957 section into paragraphs. The watchword is, @emph{at each point, address
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2958 the most fundamental and important issue raised by the preceding text.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2959
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2960 If necessary, add extra chapters at the beginning of the manual which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2961 are purely tutorial and cover the basics of the subject. These provide
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2962 the framework for a beginner to understand the rest of the manual. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2963 Bison manual provides a good example of how to do this.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2964
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2965 To serve as a reference, a manual should have an Index that list all the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2966 functions, variables, options, and important concepts that are part of
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2967 the program. One combined Index should do for a short manual, but
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2968 sometimes for a complex package it is better to use multiple indices.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2969 The Texinfo manual includes advice on preparing good index entries, see
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2970 @ref{Index Entries, , Making Index Entries, texinfo, The GNU Texinfo
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2971 Manual}, and see @ref{Indexing Commands, , Defining the Entries of an
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2972 Index, texinfo, The GNU Texinfo manual}.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2973
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2974 Don't use Unix man pages as a model for how to write GNU documentation;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2975 most of them are terse, badly structured, and give inadequate
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2976 explanation of the underlying concepts. (There are, of course, some
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2977 exceptions.) Also, Unix man pages use a particular format which is
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2978 different from what we use in GNU manuals.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2979
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2980 Please include an email address in the manual for where to report
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2981 bugs @emph{in the manual}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2982
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2983 Please do not use the term ``pathname'' that is used in Unix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2984 documentation; use ``file name'' (two words) instead. We use the term
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2985 ``path'' only for search paths, which are lists of directory names.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2986
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2987 Please do not use the term ``illegal'' to refer to erroneous input to a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2988 computer program. Please use ``invalid'' for this, and reserve the term
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2989 ``illegal'' for activities punishable by law.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2990
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2991 @node Doc Strings and Manuals
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2992 @section Doc Strings and Manuals
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2993
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2994 Some programming systems, such as Emacs, provide a documentation string
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2995 for each function, command or variable. You may be tempted to write a
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2996 reference manual by compiling the documentation strings and writing a
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2997 little additional text to go around them---but you must not do it. That
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2998 approach is a fundamental mistake. The text of well-written
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
2999 documentation strings will be entirely wrong for a manual.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3000
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3001 A documentation string needs to stand alone---when it appears on the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3002 screen, there will be no other text to introduce or explain it.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3003 Meanwhile, it can be rather informal in style.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3004
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3005 The text describing a function or variable in a manual must not stand
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3006 alone; it appears in the context of a section or subsection. Other text
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3007 at the beginning of the section should explain some of the concepts, and
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3008 should often make some general points that apply to several functions or
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3009 variables. The previous descriptions of functions and variables in the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3010 section will also have given information about the topic. A description
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3011 written to stand alone would repeat some of that information; this
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3012 redundance looks bad. Meanwhile, the informality that is acceptable in
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3013 a documentation string is totally unacceptable in a manual.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3014
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3015 The only good way to use documentation strings in writing a good manual
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3016 is to use them as a source of information for writing good text.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3017
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3018 @node Manual Structure Details
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3019 @section Manual Structure Details
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3020 @cindex manual structure
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3021
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3022 The title page of the manual should state the version of the programs or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3023 packages documented in the manual. The Top node of the manual should
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3024 also contain this information. If the manual is changing more
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3025 frequently than or independent of the program, also state a version
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3026 number for the manual in both of these places.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3027
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3028 Each program documented in the manual should have a node named
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3029 @samp{@var{program} Invocation} or @samp{Invoking @var{program}}. This
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3030 node (together with its subnodes, if any) should describe the program's
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3031 command line arguments and how to run it (the sort of information people
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3032 would look in a man page for). Start with an @samp{@@example}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3033 containing a template for all the options and arguments that the program
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3034 uses.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3035
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3036 Alternatively, put a menu item in some menu whose item name fits one of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3037 the above patterns. This identifies the node which that item points to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3038 as the node for this purpose, regardless of the node's actual name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3039
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3040 The @samp{--usage} feature of the Info reader looks for such a node
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3041 or menu item in order to find the relevant text, so it is essential
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3042 for every Texinfo file to have one.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3043
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3044 If one manual describes several programs, it should have such a node for
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3045 each program described in the manual.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3046
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3047 @node License for Manuals
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3048 @section License for Manuals
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3049 @cindex license for manuals
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3050
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3051 Please use the GNU Free Documentation License for all GNU manuals that
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3052 are more than a few pages long. Likewise for a collection of short
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3053 documents---you only need one copy of the GNU FDL for the whole
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3054 collection. For a single short document, you can use a very permissive
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3055 non-copyleft license, to avoid taking up space with a long license.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3056
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3057 See @uref{http://www.gnu.org/copyleft/fdl-howto.html} for more explanation
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3058 of how to employ the GFDL.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3059
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3060 Note that it is not obligatory to include a copy of the GNU GPL or GNU
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3061 LGPL in a manual whose license is neither the GPL nor the LGPL. It can
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3062 be a good idea to include the program's license in a large manual; in a
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3063 short manual, whose size would be increased considerably by including
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3064 the program's license, it is probably better not to include it.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3065
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3066 @node Manual Credits
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3067 @section Manual Credits
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3068 @cindex credits for manuals
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3069
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3070 Please credit the principal human writers of the manual as the authors,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3071 on the title page of the manual. If a company sponsored the work, thank
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3072 the company in a suitable place in the manual, but do not cite the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3073 company as an author.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3074
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3075 @node Printed Manuals
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3076 @section Printed Manuals
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3077
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3078 The FSF publishes some GNU manuals in printed form. To encourage sales
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3079 of these manuals, the on-line versions of the manual should mention at
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3080 the very start that the printed manual is available and should point at
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3081 information for getting it---for instance, with a link to the page
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3082 @url{http://www.gnu.org/order/order.html}. This should not be included
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3083 in the printed manual, though, because there it is redundant.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3084
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3085 It is also useful to explain in the on-line forms of the manual how the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3086 user can print out the manual from the sources.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3087
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3088 @node NEWS File
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3089 @section The NEWS File
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3090 @cindex @file{NEWS} file
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3091
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3092 In addition to its manual, the package should have a file named
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3093 @file{NEWS} which contains a list of user-visible changes worth
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3094 mentioning. In each new release, add items to the front of the file and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3095 identify the version they pertain to. Don't discard old items; leave
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3096 them in the file after the newer items. This way, a user upgrading from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3097 any previous version can see what is new.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3098
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3099 If the @file{NEWS} file gets very long, move some of the older items
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3100 into a file named @file{ONEWS} and put a note at the end referring the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3101 user to that file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3102
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3103 @node Change Logs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3104 @section Change Logs
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3105 @cindex change logs
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3106
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3107 Keep a change log to describe all the changes made to program source
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3108 files. The purpose of this is so that people investigating bugs in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3109 future will know about the changes that might have introduced the bug.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3110 Often a new bug can be found by looking at what was recently changed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3111 More importantly, change logs can help you eliminate conceptual
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3112 inconsistencies between different parts of a program, by giving you a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3113 history of how the conflicting concepts arose and who they came from.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3114
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3115 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3116 * Change Log Concepts::
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3117 * Style of Change Logs::
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3118 * Simple Changes::
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3119 * Conditional Changes::
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3120 * Indicating the Part Changed::
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3121 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3122
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3123 @node Change Log Concepts
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3124 @subsection Change Log Concepts
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3125
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3126 You can think of the change log as a conceptual ``undo list'' which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3127 explains how earlier versions were different from the current version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3128 People can see the current version; they don't need the change log
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3129 to tell them what is in it. What they want from a change log is a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3130 clear explanation of how the earlier version differed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3131
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3132 The change log file is normally called @file{ChangeLog} and covers an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3133 entire directory. Each directory can have its own change log, or a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3134 directory can use the change log of its parent directory--it's up to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3135 you.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3136
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3137 Another alternative is to record change log information with a version
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3138 control system such as RCS or CVS. This can be converted automatically
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3139 to a @file{ChangeLog} file using @code{rcs2log}; in Emacs, the command
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3140 @kbd{C-x v a} (@code{vc-update-change-log}) does the job.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3141
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3142 There's no need to describe the full purpose of the changes or how they
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3143 work together. If you think that a change calls for explanation, you're
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3144 probably right. Please do explain it---but please put the explanation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3145 in comments in the code, where people will see it whenever they see the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3146 code. For example, ``New function'' is enough for the change log when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3147 you add a function, because there should be a comment before the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3148 function definition to explain what it does.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3149
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3150 However, sometimes it is useful to write one line to describe the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3151 overall purpose of a batch of changes.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3152
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3153 The easiest way to add an entry to @file{ChangeLog} is with the Emacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3154 command @kbd{M-x add-change-log-entry}. An entry should have an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3155 asterisk, the name of the changed file, and then in parentheses the name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3156 of the changed functions, variables or whatever, followed by a colon.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3157 Then describe the changes you made to that function or variable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3158
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3159 @node Style of Change Logs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3160 @subsection Style of Change Logs
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3161 @cindex change logs, style
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3162
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3163 Here are some simple examples of change log entries, starting with the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3164 header line that says who made the change and when, followed by
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3165 descriptions of specific changes. (These examples are drawn from Emacs
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3166 and GCC.)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3167
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3168 @example
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3169 1998-08-17 Richard Stallman <rms@@gnu.org>
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3170
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3171 * register.el (insert-register): Return nil.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3172 (jump-to-register): Likewise.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3173
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3174 * sort.el (sort-subr): Return nil.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3175
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3176 * tex-mode.el (tex-bibtex-file, tex-file, tex-region):
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3177 Restart the tex shell if process is gone or stopped.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3178 (tex-shell-running): New function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3179
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3180 * expr.c (store_one_arg): Round size up for move_block_to_reg.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3181 (expand_call): Round up when emitting USE insns.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3182 * stmt.c (assign_parms): Round size up for move_block_from_reg.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3183 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3184
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3185 It's important to name the changed function or variable in full. Don't
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3186 abbreviate function or variable names, and don't combine them.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3187 Subsequent maintainers will often search for a function name to find all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3188 the change log entries that pertain to it; if you abbreviate the name,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3189 they won't find it when they search.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3190
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3191 For example, some people are tempted to abbreviate groups of function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3192 names by writing @samp{* register.el (@{insert,jump-to@}-register)};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3193 this is not a good idea, since searching for @code{jump-to-register} or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3194 @code{insert-register} would not find that entry.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3195
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3196 Separate unrelated change log entries with blank lines. When two
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3197 entries represent parts of the same change, so that they work together,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3198 then don't put blank lines between them. Then you can omit the file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3199 name and the asterisk when successive entries are in the same file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3200
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3201 Break long lists of function names by closing continued lines with
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3202 @samp{)}, rather than @samp{,}, and opening the continuation with
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3203 @samp{(} as in this example:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3204
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3205 @example
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3206 * keyboard.c (menu_bar_items, tool_bar_items)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3207 (Fexecute_extended_command): Deal with `keymap' property.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3208 @end example
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3209
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3210 @node Simple Changes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3211 @subsection Simple Changes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3212
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3213 Certain simple kinds of changes don't need much detail in the change
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3214 log.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3215
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3216 When you change the calling sequence of a function in a simple fashion,
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3217 and you change all the callers of the function to use the new calling
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3218 sequence, there is no need to make individual entries for all the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3219 callers that you changed. Just write in the entry for the function
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3220 being called, ``All callers changed''---like this:
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3221
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3222 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3223 * keyboard.c (Fcommand_execute): New arg SPECIAL.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3224 All callers changed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3225 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3226
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3227 When you change just comments or doc strings, it is enough to write an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3228 entry for the file, without mentioning the functions. Just ``Doc
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3229 fixes'' is enough for the change log.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3230
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3231 There's no need to make change log entries for documentation files.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3232 This is because documentation is not susceptible to bugs that are hard
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3233 to fix. Documentation does not consist of parts that must interact in a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3234 precisely engineered fashion. To correct an error, you need not know
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3235 the history of the erroneous passage; it is enough to compare what the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3236 documentation says with the way the program actually works.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3237
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3238 @node Conditional Changes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3239 @subsection Conditional Changes
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3240 @cindex conditional changes, and change logs
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3241 @cindex change logs, conditional changes
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3242
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3243 C programs often contain compile-time @code{#if} conditionals. Many
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3244 changes are conditional; sometimes you add a new definition which is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3245 entirely contained in a conditional. It is very useful to indicate in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3246 the change log the conditions for which the change applies.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3247
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3248 Our convention for indicating conditional changes is to use square
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3249 brackets around the name of the condition.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3250
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3251 Here is a simple example, describing a change which is conditional but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3252 does not have a function or entity name associated with it:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3253
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3254 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3255 * xterm.c [SOLARIS2]: Include string.h.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3256 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3257
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3258 Here is an entry describing a new definition which is entirely
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3259 conditional. This new definition for the macro @code{FRAME_WINDOW_P} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3260 used only when @code{HAVE_X_WINDOWS} is defined:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3261
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3262 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3263 * frame.h [HAVE_X_WINDOWS] (FRAME_WINDOW_P): Macro defined.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3264 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3265
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3266 Here is an entry for a change within the function @code{init_display},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3267 whose definition as a whole is unconditional, but the changes themselves
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3268 are contained in a @samp{#ifdef HAVE_LIBNCURSES} conditional:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3269
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3270 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3271 * dispnew.c (init_display) [HAVE_LIBNCURSES]: If X, call tgetent.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3272 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3273
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3274 Here is an entry for a change that takes affect only when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3275 a certain macro is @emph{not} defined:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3276
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3277 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3278 (gethostname) [!HAVE_SOCKETS]: Replace with winsock version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3279 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3280
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3281 @node Indicating the Part Changed
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3282 @subsection Indicating the Part Changed
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3283
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3284 Indicate the part of a function which changed by using angle brackets
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3285 enclosing an indication of what the changed part does. Here is an entry
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3286 for a change in the part of the function @code{sh-while-getopts} that
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3287 deals with @code{sh} commands:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3288
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3289 @example
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3290 * progmodes/sh-script.el (sh-while-getopts) <sh>: Handle case that
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3291 user-specified option string is empty.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3292 @end example
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3293
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3294
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3295 @node Man Pages
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3296 @section Man Pages
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3297 @cindex man pages
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3298
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3299 In the GNU project, man pages are secondary. It is not necessary or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3300 expected for every GNU program to have a man page, but some of them do.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3301 It's your choice whether to include a man page in your program.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3302
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3303 When you make this decision, consider that supporting a man page
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3304 requires continual effort each time the program is changed. The time
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3305 you spend on the man page is time taken away from more useful work.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3306
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3307 For a simple program which changes little, updating the man page may be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3308 a small job. Then there is little reason not to include a man page, if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3309 you have one.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3310
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3311 For a large program that changes a great deal, updating a man page may
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3312 be a substantial burden. If a user offers to donate a man page, you may
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3313 find this gift costly to accept. It may be better to refuse the man
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3314 page unless the same person agrees to take full responsibility for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3315 maintaining it---so that you can wash your hands of it entirely. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3316 this volunteer later ceases to do the job, then don't feel obliged to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3317 pick it up yourself; it may be better to withdraw the man page from the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3318 distribution until someone else agrees to update it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3319
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3320 When a program changes only a little, you may feel that the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3321 discrepancies are small enough that the man page remains useful without
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3322 updating. If so, put a prominent note near the beginning of the man
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3323 page explaining that you don't maintain it and that the Texinfo manual
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3324 is more authoritative. The note should say how to access the Texinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3325 documentation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3326
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3327 @node Reading other Manuals
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3328 @section Reading other Manuals
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3329
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3330 There may be non-free books or documentation files that describe the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3331 program you are documenting.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3332
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3333 It is ok to use these documents for reference, just as the author of a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3334 new algebra textbook can read other books on algebra. A large portion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3335 of any non-fiction book consists of facts, in this case facts about how
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3336 a certain program works, and these facts are necessarily the same for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3337 everyone who writes about the subject. But be careful not to copy your
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3338 outline structure, wording, tables or examples from preexisting non-free
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3339 documentation. Copying from free documentation may be ok; please check
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3340 with the FSF about the individual case.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3341
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3342 @node Managing Releases
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3343 @chapter The Release Process
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3344 @cindex releasing
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3345
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3346 Making a release is more than just bundling up your source files in a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3347 tar file and putting it up for FTP. You should set up your software so
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3348 that it can be configured to run on a variety of systems. Your Makefile
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3349 should conform to the GNU standards described below, and your directory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3350 layout should also conform to the standards discussed below. Doing so
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3351 makes it easy to include your package into the larger framework of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3352 all GNU software.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3353
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3354 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3355 * Configuration:: How Configuration Should Work
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3356 * Makefile Conventions:: Makefile Conventions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3357 * Releases:: Making Releases
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3358 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3359
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3360 @node Configuration
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3361 @section How Configuration Should Work
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3362 @cindex program configuration
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3363
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3364 @pindex configure
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3365 Each GNU distribution should come with a shell script named
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3366 @code{configure}. This script is given arguments which describe the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3367 kind of machine and system you want to compile the program for.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3368
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3369 The @code{configure} script must record the configuration options so
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3370 that they affect compilation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3371
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3372 One way to do this is to make a link from a standard name such as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3373 @file{config.h} to the proper configuration file for the chosen system.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3374 If you use this technique, the distribution should @emph{not} contain a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3375 file named @file{config.h}. This is so that people won't be able to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3376 build the program without configuring it first.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3377
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3378 Another thing that @code{configure} can do is to edit the Makefile. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3379 you do this, the distribution should @emph{not} contain a file named
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3380 @file{Makefile}. Instead, it should include a file @file{Makefile.in} which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3381 contains the input used for editing. Once again, this is so that people
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3382 won't be able to build the program without configuring it first.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3383
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3384 If @code{configure} does write the @file{Makefile}, then @file{Makefile}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3385 should have a target named @file{Makefile} which causes @code{configure}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3386 to be rerun, setting up the same configuration that was set up last
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3387 time. The files that @code{configure} reads should be listed as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3388 dependencies of @file{Makefile}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3389
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3390 All the files which are output from the @code{configure} script should
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3391 have comments at the beginning explaining that they were generated
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3392 automatically using @code{configure}. This is so that users won't think
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3393 of trying to edit them by hand.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3394
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3395 The @code{configure} script should write a file named @file{config.status}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3396 which describes which configuration options were specified when the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3397 program was last configured. This file should be a shell script which,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3398 if run, will recreate the same configuration.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3399
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3400 The @code{configure} script should accept an option of the form
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3401 @samp{--srcdir=@var{dirname}} to specify the directory where sources are found
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3402 (if it is not the current directory). This makes it possible to build
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3403 the program in a separate directory, so that the actual source directory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3404 is not modified.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3405
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3406 If the user does not specify @samp{--srcdir}, then @code{configure} should
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3407 check both @file{.} and @file{..} to see if it can find the sources. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3408 it finds the sources in one of these places, it should use them from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3409 there. Otherwise, it should report that it cannot find the sources, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3410 should exit with nonzero status.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3411
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3412 Usually the easy way to support @samp{--srcdir} is by editing a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3413 definition of @code{VPATH} into the Makefile. Some rules may need to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3414 refer explicitly to the specified source directory. To make this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3415 possible, @code{configure} can add to the Makefile a variable named
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3416 @code{srcdir} whose value is precisely the specified directory.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3417
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3418 The @code{configure} script should also take an argument which specifies the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3419 type of system to build the program for. This argument should look like
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3420 this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3421
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3422 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3423 @var{cpu}-@var{company}-@var{system}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3424 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3425
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3426 For example, a Sun 3 might be @samp{m68k-sun-sunos4.1}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3427
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3428 The @code{configure} script needs to be able to decode all plausible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3429 alternatives for how to describe a machine. Thus, @samp{sun3-sunos4.1}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3430 would be a valid alias. For many programs, @samp{vax-dec-ultrix} would
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3431 be an alias for @samp{vax-dec-bsd}, simply because the differences
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3432 between Ultrix and @sc{bsd} are rarely noticeable, but a few programs
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3433 might need to distinguish them.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3434 @c Real 4.4BSD now runs on some Suns.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3435
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3436 There is a shell script called @file{config.sub} that you can use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3437 as a subroutine to validate system types and canonicalize aliases.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3438
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3439 @cindex optional features, configure-time
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3440 Other options are permitted to specify in more detail the software
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3441 or hardware present on the machine, and include or exclude optional
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3442 parts of the package:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3443
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3444 @table @samp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3445 @item --enable-@var{feature}@r{[}=@var{parameter}@r{]}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3446 Configure the package to build and install an optional user-level
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3447 facility called @var{feature}. This allows users to choose which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3448 optional features to include. Giving an optional @var{parameter} of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3449 @samp{no} should omit @var{feature}, if it is built by default.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3450
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3451 No @samp{--enable} option should @strong{ever} cause one feature to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3452 replace another. No @samp{--enable} option should ever substitute one
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3453 useful behavior for another useful behavior. The only proper use for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3454 @samp{--enable} is for questions of whether to build part of the program
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3455 or exclude it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3456
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3457 @item --with-@var{package}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3458 @c @r{[}=@var{parameter}@r{]}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3459 The package @var{package} will be installed, so configure this package
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3460 to work with @var{package}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3461
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3462 @c Giving an optional @var{parameter} of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3463 @c @samp{no} should omit @var{package}, if it is used by default.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3464
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3465 Possible values of @var{package} include
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3466 @samp{gnu-as} (or @samp{gas}), @samp{gnu-ld}, @samp{gnu-libc},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3467 @samp{gdb},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3468 @samp{x},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3469 and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3470 @samp{x-toolkit}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3471
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3472 Do not use a @samp{--with} option to specify the file name to use to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3473 find certain files. That is outside the scope of what @samp{--with}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3474 options are for.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3475 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3476
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3477 All @code{configure} scripts should accept all of these ``detail''
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3478 options, whether or not they make any difference to the particular
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3479 package at hand. In particular, they should accept any option that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3480 starts with @samp{--with-} or @samp{--enable-}. This is so users will
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3481 be able to configure an entire GNU source tree at once with a single set
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3482 of options.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3483
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3484 You will note that the categories @samp{--with-} and @samp{--enable-}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3485 are narrow: they @strong{do not} provide a place for any sort of option
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3486 you might think of. That is deliberate. We want to limit the possible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3487 configuration options in GNU software. We do not want GNU programs to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3488 have idiosyncratic configuration options.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3489
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3490 Packages that perform part of the compilation process may support
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3491 cross-compilation. In such a case, the host and target machines for the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3492 program may be different.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3493
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3494 The @code{configure} script should normally treat the specified type of
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3495 system as both the host and the target, thus producing a program which
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3496 works for the same type of machine that it runs on.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3497
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3498 To configure a cross-compiler, cross-assembler, or what have you, you
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3499 should specify a target different from the host, using the configure
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3500 option @samp{--target=@var{targettype}}. The syntax for
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3501 @var{targettype} is the same as for the host type. So the command would
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3502 look like this:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3503
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3504 @example
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3505 ./configure @var{hosttype} --target=@var{targettype}
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3506 @end example
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3507
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3508 Programs for which cross-operation is not meaningful need not accept the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3509 @samp{--target} option, because configuring an entire operating system for
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3510 cross-operation is not a meaningful operation.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3511
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3512 Bootstrapping a cross-compiler requires compiling it on a machine other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3513 than the host it will run on. Compilation packages accept a
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3514 configuration option @samp{--build=@var{buildtype}} for specifying the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3515 configuration on which you will compile them, but the configure script
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3516 should normally guess the build machine type (using
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3517 @file{config.guess}), so this option is probably not necessary. The
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3518 host and target types normally default from the build type, so in
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3519 bootstrapping a cross-compiler you must specify them both explicitly.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3520
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3521 Some programs have ways of configuring themselves automatically. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3522 your program is set up to do this, your @code{configure} script can simply
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3523 ignore most of its arguments.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3524
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3525 @comment The makefile standards are in a separate file that is also
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3526 @comment included by make.texinfo. Done by roland@gnu.ai.mit.edu on 1/6/93.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3527 @comment For this document, turn chapters into sections, etc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3528 @lowersections
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3529 @include make-stds.texi
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3530 @raisesections
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3531
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3532 @node Releases
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3533 @section Making Releases
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3534 @cindex packaging
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3535
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3536 Package the distribution of @code{Foo version 69.96} up in a gzipped tar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3537 file with the name @file{foo-69.96.tar.gz}. It should unpack into a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3538 subdirectory named @file{foo-69.96}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3539
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3540 Building and installing the program should never modify any of the files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3541 contained in the distribution. This means that all the files that form
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3542 part of the program in any way must be classified into @dfn{source
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3543 files} and @dfn{non-source files}. Source files are written by humans
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3544 and never changed automatically; non-source files are produced from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3545 source files by programs under the control of the Makefile.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3546
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3547 @cindex @file{README} file
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3548 The distribution should contain a file named @file{README} which gives
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3549 the name of the package, and a general description of what it does. It
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3550 is also good to explain the purpose of each of the first-level
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3551 subdirectories in the package, if there are any. The @file{README} file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3552 should either state the version number of the package, or refer to where
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3553 in the package it can be found.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3554
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3555 The @file{README} file should refer to the file @file{INSTALL}, which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3556 should contain an explanation of the installation procedure.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3557
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3558 The @file{README} file should also refer to the file which contains the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3559 copying conditions. The GNU GPL, if used, should be in a file called
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3560 @file{COPYING}. If the GNU LGPL is used, it should be in a file called
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3561 @file{COPYING.LIB}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3562
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3563 Naturally, all the source files must be in the distribution. It is okay
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3564 to include non-source files in the distribution, provided they are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3565 up-to-date and machine-independent, so that building the distribution
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3566 normally will never modify them. We commonly include non-source files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3567 produced by Bison, @code{lex}, @TeX{}, and @code{makeinfo}; this helps avoid
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3568 unnecessary dependencies between our distributions, so that users can
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3569 install whichever packages they want to install.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3570
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3571 Non-source files that might actually be modified by building and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3572 installing the program should @strong{never} be included in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3573 distribution. So if you do distribute non-source files, always make
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3574 sure they are up to date when you make a new distribution.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3575
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3576 Make sure that the directory into which the distribution unpacks (as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3577 well as any subdirectories) are all world-writable (octal mode 777).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3578 This is so that old versions of @code{tar} which preserve the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3579 ownership and permissions of the files from the tar archive will be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3580 able to extract all the files even if the user is unprivileged.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3581
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3582 Make sure that all the files in the distribution are world-readable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3583
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3584 Make sure that no file name in the distribution is more than 14
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3585 characters long. Likewise, no file created by building the program
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3586 should have a name longer than 14 characters. The reason for this is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3587 that some systems adhere to a foolish interpretation of the @sc{posix}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3588 standard, and refuse to open a longer name, rather than truncating as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3589 they did in the past.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3590
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3591 Don't include any symbolic links in the distribution itself. If the tar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3592 file contains symbolic links, then people cannot even unpack it on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3593 systems that don't support symbolic links. Also, don't use multiple
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3594 names for one file in different directories, because certain file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3595 systems cannot handle this and that prevents unpacking the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3596 distribution.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3597
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3598 Try to make sure that all the file names will be unique on MS-DOS. A
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3599 name on MS-DOS consists of up to 8 characters, optionally followed by a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3600 period and up to three characters. MS-DOS will truncate extra
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3601 characters both before and after the period. Thus,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3602 @file{foobarhacker.c} and @file{foobarhacker.o} are not ambiguous; they
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3603 are truncated to @file{foobarha.c} and @file{foobarha.o}, which are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3604 distinct.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3605
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3606 @cindex @file{texinfo.tex}, in a distribution
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3607 Include in your distribution a copy of the @file{texinfo.tex} you used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3608 to test print any @file{*.texinfo} or @file{*.texi} files.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3609
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3610 Likewise, if your program uses small GNU software packages like regex,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3611 getopt, obstack, or termcap, include them in the distribution file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3612 Leaving them out would make the distribution file a little smaller at
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3613 the expense of possible inconvenience to a user who doesn't know what
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3614 other files to get.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3615
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3616 @node References
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3617 @chapter References to Non-Free Software and Documentation
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3618 @cindex references to non-free material
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3619
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3620 A GNU program should not recommend use of any non-free program. We
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3621 can't stop some people from writing proprietary programs, or stop other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3622 people from using them. But we can and should avoid helping to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3623 advertise them to new customers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3624
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3625 Sometimes it is important to mention how to build your package on top of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3626 some non-free operating system or other non-free base package. In such
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3627 cases, please mention the name of the non-free package or system in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3628 briefest possible way. Don't include any references for where to find
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3629 more information about the proprietary program. The goal should be that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3630 people already using the proprietary program will get the advice they
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3631 need about how to use your free program, while people who don't already
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3632 use the proprietary program will not see anything to encourage them to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3633 take an interest in it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3634
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3635 Likewise, a GNU package should not refer the user to any non-free
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3636 documentation for free software. The need for free documentation to go
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3637 with free software is now a major focus of the GNU project; to show that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3638 we are serious about the need for free documentation, we must not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3639 undermine our position by recommending use of documentation that isn't
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3640 free.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3641
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3642 @node Index
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3643 @unnumbered Index
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3644 @printindex cp
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 428
diff changeset
3645
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3646 @contents
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3647
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3648 @bye