diff etc/CODING-STANDARDS @ 0:376386a54a3c r19-14

Import from CVS: tag r19-14
author cvs
date Mon, 13 Aug 2007 08:45:50 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/CODING-STANDARDS	Mon Aug 13 08:45:50 2007 +0200
@@ -0,0 +1,81 @@
+			XEMACS CODING STANDARDS
+				   
+				  by
+
+			       Ben Wing
+
+
+Copyright (c) 1996 Ben Wing.
+
+
+This file documents the coding standards used in the XEmacs source
+code.  Note that XEmacs follows the GNU coding standards, which are
+documented separately in ../man/standards.texi.  This file only
+documents standards that are not included in that document; typically
+this consists of standards that are specifically relevant to the
+XEmacs code itself.
+
+First, a recap of the GNU standards:
+
+-- Put a space after every comma.
+-- Put a space before the parenthesis that begins a function call,
+   macro call, function declaration or definition, or control
+   statement (if, while, switch, for). (DO NOT do this for macro
+   definitions; this is invalid preprocessor syntax.)
+-- The brace that begins a control statement (if, while, for, switch,
+   do) or a function definition should go on a line by itself.
+-- In function definitions, put the return type and all other
+   qualifiers on a line before the function name.  Thus, the function
+   name is always at the beginning of a line.
+-- Indentation level is two spaces.  (However, the first and following
+   statements of a while/for/if/etc. block are indented four spaces
+   from the while/for/if keyword.  The opening and closing braces are
+   indented two spaces.)
+-- Variable and function names should be all lowercase, with underscores
+   separating words, except for a prefixing tag, which may be in
+   uppercase.  Do not use the mixed-case convention (e.g.
+   SetVariableToValue ()) and *especially* do not use Microsoft
+   Hungarian notation (char **rgszRedundantTag).
+-- preprocessor and enum constants should be all uppercase, and should
+   be prefixed with a tag that groups related constants together.
+
+
+Now, the XEmacs coding standards:
+
+**** Specially-prefixed functions/variables:
+
+-- All global C variables whose value is constant and is a symbol begin
+   with a capital Q, e.g. Qkey_press_event. (The type will always be
+   Lisp_Object.)
+-- All other global C variables whose value is a Lisp_Object (this
+   includes variables that forward into Lisp variables plus others like
+   Vselected_console) begin with a capital V.
+-- No C variables whose value is other than a Lisp_Object should begin
+   with a capital V. (This includes C variables that forward into
+   integer or boolean Lisp variables.)
+-- All global C variables whose value is a struct Lisp_Subr begin with a
+   capital S. (This only occurs in connection with DEFUN ()).
+-- All C functions that are Lisp primitives begin with a capital F,
+   and no others should begin this way.
+
+**** Functions for manipulating Lisp types:
+
+-- Any function that creates an empty or mostly empty Lisp object
+   should begin allocate_(). (*Not* make_().) (Except, of course,
+   for Lisp primitives, which usually begin Fmake_()).
+-- Any function that converts a pointer into an equivalent Lisp_Object
+   should begin make_().
+-- Any function that converts a Lisp_Object into its equivalent pointer
+   and checks the type and validity of the object (e.g. making sure
+   it's not dead) should begin decode_().
+-- Any function that looks up a Lisp object (e.g. buffer, face) given
+   a symbol or string should begin get_(). (Except, of course, for
+   Lisp primitives, which usually begin Fget_()).
+
+**** Other:
+
+-- Any header-file declarations of the sort
+
+   struct foobar;
+
+   go into the "types" section of lisp.h.