0
+ − 1 XEMACS CODING STANDARDS
+ − 2
+ − 3 by
+ − 4
+ − 5 Ben Wing
+ − 6
+ − 7
+ − 8 Copyright (c) 1996 Ben Wing.
+ − 9
+ − 10
+ − 11 This file documents the coding standards used in the XEmacs source
+ − 12 code. Note that XEmacs follows the GNU coding standards, which are
+ − 13 documented separately in ../man/standards.texi. This file only
+ − 14 documents standards that are not included in that document; typically
+ − 15 this consists of standards that are specifically relevant to the
+ − 16 XEmacs code itself.
+ − 17
+ − 18 First, a recap of the GNU standards:
+ − 19
+ − 20 -- Put a space after every comma.
+ − 21 -- Put a space before the parenthesis that begins a function call,
+ − 22 macro call, function declaration or definition, or control
+ − 23 statement (if, while, switch, for). (DO NOT do this for macro
+ − 24 definitions; this is invalid preprocessor syntax.)
+ − 25 -- The brace that begins a control statement (if, while, for, switch,
+ − 26 do) or a function definition should go on a line by itself.
+ − 27 -- In function definitions, put the return type and all other
+ − 28 qualifiers on a line before the function name. Thus, the function
+ − 29 name is always at the beginning of a line.
+ − 30 -- Indentation level is two spaces. (However, the first and following
+ − 31 statements of a while/for/if/etc. block are indented four spaces
+ − 32 from the while/for/if keyword. The opening and closing braces are
+ − 33 indented two spaces.)
+ − 34 -- Variable and function names should be all lowercase, with underscores
+ − 35 separating words, except for a prefixing tag, which may be in
+ − 36 uppercase. Do not use the mixed-case convention (e.g.
+ − 37 SetVariableToValue ()) and *especially* do not use Microsoft
+ − 38 Hungarian notation (char **rgszRedundantTag).
+ − 39 -- preprocessor and enum constants should be all uppercase, and should
+ − 40 be prefixed with a tag that groups related constants together.
+ − 41
+ − 42
+ − 43 Now, the XEmacs coding standards:
+ − 44
+ − 45 **** Specially-prefixed functions/variables:
+ − 46
+ − 47 -- All global C variables whose value is constant and is a symbol begin
+ − 48 with a capital Q, e.g. Qkey_press_event. (The type will always be
+ − 49 Lisp_Object.)
+ − 50 -- All other global C variables whose value is a Lisp_Object (this
+ − 51 includes variables that forward into Lisp variables plus others like
+ − 52 Vselected_console) begin with a capital V.
+ − 53 -- No C variables whose value is other than a Lisp_Object should begin
+ − 54 with a capital V. (This includes C variables that forward into
+ − 55 integer or boolean Lisp variables.)
+ − 56 -- All global C variables whose value is a struct Lisp_Subr begin with a
+ − 57 capital S. (This only occurs in connection with DEFUN ()).
+ − 58 -- All C functions that are Lisp primitives begin with a capital F,
+ − 59 and no others should begin this way.
+ − 60
+ − 61 **** Functions for manipulating Lisp types:
+ − 62
+ − 63 -- Any function that creates an empty or mostly empty Lisp object
+ − 64 should begin allocate_(). (*Not* make_().) (Except, of course,
+ − 65 for Lisp primitives, which usually begin Fmake_()).
+ − 66 -- Any function that converts a pointer into an equivalent Lisp_Object
+ − 67 should begin make_().
+ − 68 -- Any function that converts a Lisp_Object into its equivalent pointer
+ − 69 and checks the type and validity of the object (e.g. making sure
+ − 70 it's not dead) should begin decode_().
+ − 71 -- Any function that looks up a Lisp object (e.g. buffer, face) given
+ − 72 a symbol or string should begin get_(). (Except, of course, for
+ − 73 Lisp primitives, which usually begin Fget_()).
+ − 74
+ − 75 **** Other:
+ − 76
+ − 77 -- Any header-file declarations of the sort
+ − 78
+ − 79 struct foobar;
+ − 80
+ − 81 go into the "types" section of lisp.h.