annotate etc/CODING-STANDARDS @ 938:0391335b65dc

[xemacs-hg @ 2002-07-31 07:14:49 by michaels] 2002-07-17 Marcus Crestani <crestani@informatik.uni-tuebingen.de> Markus Kaltenbach <makalten@informatik.uni-tuebingen.de> Mike Sperber <mike@xemacs.org> configure flag to turn these changes on: --use-kkcc First we added a dumpable flag to lrecord_implementation. It shows, if the object is dumpable and should be processed by the dumper. * lrecord.h (struct lrecord_implementation): added dumpable flag (MAKE_LRECORD_IMPLEMENTATION): fitted the different makro definitions to the new lrecord_implementation and their calls. Then we changed mark_object, that it no longer needs a mark method for those types that have pdump descritions. * alloc.c: (mark_object): If the object has a description, the new mark algorithm is called, and the object is marked according to its description. Otherwise it uses the mark method like before. These procedures mark objects according to their descriptions. They are modeled on the corresponding pdumper procedures. (mark_with_description): (get_indirect_count): (structure_size): (mark_struct_contents): These procedures still call mark_object, this is needed while there are Lisp_Objects without descriptions left. We added pdump descriptions for many Lisp_Objects: * extents.c: extent_auxiliary_description * database.c: database_description * gui.c: gui_item_description * scrollbar.c: scrollbar_instance_description * toolbar.c: toolbar_button_description * event-stream.c: command_builder_description * mule-charset.c: charset_description * device-msw.c: devmode_description * dialog-msw.c: mswindows_dialog_id_description * eldap.c: ldap_description * postgresql.c: pgconn_description pgresult_description * tooltalk.c: tooltalk_message_description tooltalk_pattern_description * ui-gtk.c: emacs_ffi_description emacs_gtk_object_description * events.c: * events.h: * event-stream.c: * event-Xt.c: * event-gtk.c: * event-tty.c: To write a pdump description for Lisp_Event, we converted every struct in the union event to a Lisp_Object. So we created nine new Lisp_Objects: Lisp_Key_Data, Lisp_Button_Data, Lisp_Motion_Data, Lisp_Process_Data, Lisp_Timeout_Data, Lisp_Eval_Data, Lisp_Misc_User_Data, Lisp_Magic_Data, Lisp_Magic_Eval_Data. We also wrote makro selectors and mutators for the fields of the new designed Lisp_Event and added everywhere these new abstractions. We implemented XD_UNION support in (mark_with_description), so we can describe exspecially console/device specific data with XD_UNION. To describe with XD_UNION, we added a field to these objects, which holds the variant type of the object. This field is initialized in the appendant constructor. The variant is an integer, it has also to be described in an description, if XD_UNION is used. XD_UNION is used in following descriptions: * console.c: console_description (get_console_variant): returns the variant (create_console): added variant initialization * console.h (console_variant): the different console types * console-impl.h (struct console): added enum console_variant contype * device.c: device_description (Fmake_device): added variant initialization * device-impl.h (struct device): added enum console_variant devtype * objects.c: image_instance_description font_instance_description (Fmake_color_instance): added variant initialization (Fmake_font_instance): added variant initialization * objects-impl.h (struct Lisp_Color_Instance): added color_instance_type * objects-impl.h (struct Lisp_Font_Instance): added font_instance_type * process.c: process_description (make_process_internal): added variant initialization * process.h (process_variant): the different process types
author michaels
date Wed, 31 Jul 2002 07:14:49 +0000
parents 376386a54a3c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1 XEMACS CODING STANDARDS
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3 by
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5 Ben Wing
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
6
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
7
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
8 Copyright (c) 1996 Ben Wing.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
9
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
10
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
11 This file documents the coding standards used in the XEmacs source
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
12 code. Note that XEmacs follows the GNU coding standards, which are
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
13 documented separately in ../man/standards.texi. This file only
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
14 documents standards that are not included in that document; typically
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
15 this consists of standards that are specifically relevant to the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
16 XEmacs code itself.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
17
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
18 First, a recap of the GNU standards:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
19
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
20 -- Put a space after every comma.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
21 -- Put a space before the parenthesis that begins a function call,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
22 macro call, function declaration or definition, or control
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
23 statement (if, while, switch, for). (DO NOT do this for macro
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
24 definitions; this is invalid preprocessor syntax.)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
25 -- The brace that begins a control statement (if, while, for, switch,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
26 do) or a function definition should go on a line by itself.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
27 -- In function definitions, put the return type and all other
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
28 qualifiers on a line before the function name. Thus, the function
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
29 name is always at the beginning of a line.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
30 -- Indentation level is two spaces. (However, the first and following
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
31 statements of a while/for/if/etc. block are indented four spaces
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
32 from the while/for/if keyword. The opening and closing braces are
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
33 indented two spaces.)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
34 -- Variable and function names should be all lowercase, with underscores
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
35 separating words, except for a prefixing tag, which may be in
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
36 uppercase. Do not use the mixed-case convention (e.g.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
37 SetVariableToValue ()) and *especially* do not use Microsoft
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
38 Hungarian notation (char **rgszRedundantTag).
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
39 -- preprocessor and enum constants should be all uppercase, and should
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
40 be prefixed with a tag that groups related constants together.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
41
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
42
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
43 Now, the XEmacs coding standards:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
44
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
45 **** Specially-prefixed functions/variables:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
46
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
47 -- All global C variables whose value is constant and is a symbol begin
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
48 with a capital Q, e.g. Qkey_press_event. (The type will always be
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
49 Lisp_Object.)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
50 -- All other global C variables whose value is a Lisp_Object (this
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
51 includes variables that forward into Lisp variables plus others like
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
52 Vselected_console) begin with a capital V.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
53 -- No C variables whose value is other than a Lisp_Object should begin
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
54 with a capital V. (This includes C variables that forward into
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
55 integer or boolean Lisp variables.)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
56 -- All global C variables whose value is a struct Lisp_Subr begin with a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
57 capital S. (This only occurs in connection with DEFUN ()).
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
58 -- All C functions that are Lisp primitives begin with a capital F,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
59 and no others should begin this way.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
60
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
61 **** Functions for manipulating Lisp types:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
62
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
63 -- Any function that creates an empty or mostly empty Lisp object
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
64 should begin allocate_(). (*Not* make_().) (Except, of course,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
65 for Lisp primitives, which usually begin Fmake_()).
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
66 -- Any function that converts a pointer into an equivalent Lisp_Object
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
67 should begin make_().
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
68 -- Any function that converts a Lisp_Object into its equivalent pointer
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
69 and checks the type and validity of the object (e.g. making sure
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
70 it's not dead) should begin decode_().
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
71 -- Any function that looks up a Lisp object (e.g. buffer, face) given
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
72 a symbol or string should begin get_(). (Except, of course, for
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
73 Lisp primitives, which usually begin Fget_()).
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
74
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
75 **** Other:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
76
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
77 -- Any header-file declarations of the sort
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
78
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
79 struct foobar;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
80
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
81 go into the "types" section of lisp.h.