shithub: choc

ref: 49474b14d45c37b05e0ab3594c5cc905bcdb14e3
dir: /HACKING/

View raw version
Coding style guidelines
=======================

You should set tabs to display as eight spaces, not four.  However, 
_indentation_ should be four spaces.  If possible, do not use tab
characters at all.  There is a utility called "expand" which will
remove tab characters.

Please write code to an 80 column limit so that it fits within a 
standard 80 column terminal.

Functions should be named like this: 'AB_FunctionName'.  The 'AB' prefix 
denotes the subsystem (AM_ for automap, G_ for game, etc).  If a 
function is static, you can omit the prefix and just name it like
'FunctionName'.  Functions and global variables should always be
made static if possible.

Put '_t' on the end of types created with typedef.  Type names like this
should be all lowercase and have the subsystem name at the start. An
example of this is 'txt_window_t'.  When creating structures, always
typedef them.

Do not use the goto statement.

Use C++-style comments, ie. '//' comments, not '/* ... */' comments.
I don't care that this isn't standard C.

Variables should be named like this: 'my_variable_name', not like
this: 'MyVariableName'.  In pointer variable declarations, place
the '*' next to the variable name, not the type.

When using an if, do, while, or for statement, always use the { }
braces even when they are not necessary.  For example, do this:

    if (condition)
    {
        body;
    }

Not this:

    if (condition)   // NO
        body;

Write code like this:

typedef struct
{
    int member1;
    char *member2;
} my_structure_t;

void FunctionName(int argument, int arg2, int arg3, int arg4, int arg5, 
                  int arg6, int arg7)
{
    if (condition)
    {
        body;
    }
    else if (condition)
    {
        body;
    }
    else 
    {
        body;
    }

    if (very_long_condition_like_this_one_that_forces_a_line_break
     && other_condition)
    {
        body;
    }

    switch (argument)
    {
        case FIRST:
            code;
            break;
            
        case SECOND:
            code;
            break;
            
        default:
            break;
    }

    for (a=0; a<10; ++a)
    {
        loop_body;
    }

    while (a < 10)
    {
        loop_body;
    }

    do 
    {

    } while (condition);
}

GNU GPL and licensing
=====================

All code submitted to the project must be licensed under the GNU GPL or
a compatible license.  If you use code that you haven't 100% written 
yourself, say so. Add a copyright header to the start of every file.  
Use this template:

// Emacs style mode select   -*- C++ -*-
//-----------------------------------------------------------------------------
//
// Copyright(C) YEAR Author's name
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
// 02111-1307, USA.