~ubuntu-branches/ubuntu/saucy/argyll/saucy

« back to all changes in this revision

Viewing changes to jpg/coderules.txt

  • Committer: Package Import Robot
  • Author(s): Christian Marillat
  • Date: 2012-04-25 07:46:07 UTC
  • mfrom: (1.2.2) (13.1.15 sid)
  • Revision ID: package-import@ubuntu.com-20120425074607-yjqadetw8kum9skc
Tags: 1.4.0-4
Should Build-Depends on libusb-dev (Closes: #670329).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
IJG JPEG LIBRARY:  CODING RULES
 
2
 
 
3
Copyright (C) 1991-1996, Thomas G. Lane.
 
4
This file is part of the Independent JPEG Group's software.
 
5
For conditions of distribution and use, see the accompanying README file.
 
6
 
 
7
 
 
8
Since numerous people will be contributing code and bug fixes, it's important
 
9
to establish a common coding style.  The goal of using similar coding styles
 
10
is much more important than the details of just what that style is.
 
11
 
 
12
In general we follow the recommendations of "Recommended C Style and Coding
 
13
Standards" revision 6.1 (Cannon et al. as modified by Spencer, Keppel and
 
14
Brader).  This document is available in the IJG FTP archive (see
 
15
jpeg/doc/cstyle.ms.tbl.Z, or cstyle.txt.Z for those without nroff/tbl).
 
16
 
 
17
Block comments should be laid out thusly:
 
18
 
 
19
/*
 
20
 *  Block comments in this style.
 
21
 */
 
22
 
 
23
We indent statements in K&R style, e.g.,
 
24
        if (test) {
 
25
          then-part;
 
26
        } else {
 
27
          else-part;
 
28
        }
 
29
with two spaces per indentation level.  (This indentation convention is
 
30
handled automatically by GNU Emacs and many other text editors.)
 
31
 
 
32
Multi-word names should be written in lower case with underscores, e.g.,
 
33
multi_word_name (not multiWordName).  Preprocessor symbols and enum constants
 
34
are similar but upper case (MULTI_WORD_NAME).  Names should be unique within
 
35
the first fifteen characters.  (On some older systems, global names must be
 
36
unique within six characters.  We accommodate this without cluttering the
 
37
source code by using macros to substitute shorter names.)
 
38
 
 
39
We use function prototypes everywhere; we rely on automatic source code
 
40
transformation to feed prototype-less C compilers.  Transformation is done
 
41
by the simple and portable tool 'ansi2knr.c' (courtesy of Ghostscript).
 
42
ansi2knr is not very bright, so it imposes a format requirement on function
 
43
declarations: the function name MUST BEGIN IN COLUMN 1.  Thus all functions
 
44
should be written in the following style:
 
45
 
 
46
LOCAL(int *)
 
47
function_name (int a, char *b)
 
48
{
 
49
    code...
 
50
}
 
51
 
 
52
Note that each function definition must begin with GLOBAL(type), LOCAL(type),
 
53
or METHODDEF(type).  These macros expand to "static type" or just "type" as
 
54
appropriate.  They provide a readable indication of the routine's usage and
 
55
can readily be changed for special needs.  (For instance, special linkage
 
56
keywords can be inserted for use in Windows DLLs.)
 
57
 
 
58
ansi2knr does not transform method declarations (function pointers in
 
59
structs).  We handle these with a macro JMETHOD, defined as
 
60
        #ifdef HAVE_PROTOTYPES
 
61
        #define JMETHOD(type,methodname,arglist)  type (*methodname) arglist
 
62
        #else
 
63
        #define JMETHOD(type,methodname,arglist)  type (*methodname) ()
 
64
        #endif
 
65
which is used like this:
 
66
        struct function_pointers {
 
67
          JMETHOD(void, init_entropy_encoder, (int somearg, jparms *jp));
 
68
          JMETHOD(void, term_entropy_encoder, (void));
 
69
        };
 
70
Note the set of parentheses surrounding the parameter list.
 
71
 
 
72
A similar solution is used for forward and external function declarations
 
73
(see the EXTERN and JPP macros).
 
74
 
 
75
If the code is to work on non-ANSI compilers, we cannot rely on a prototype
 
76
declaration to coerce actual parameters into the right types.  Therefore, use
 
77
explicit casts on actual parameters whenever the actual parameter type is not
 
78
identical to the formal parameter.  Beware of implicit conversions to "int".
 
79
 
 
80
It seems there are some non-ANSI compilers in which the sizeof() operator
 
81
is defined to return int, yet size_t is defined as long.  Needless to say,
 
82
this is brain-damaged.  Always use the SIZEOF() macro in place of sizeof(),
 
83
so that the result is guaranteed to be of type size_t.
 
84
 
 
85
 
 
86
The JPEG library is intended to be used within larger programs.  Furthermore,
 
87
we want it to be reentrant so that it can be used by applications that process
 
88
multiple images concurrently.  The following rules support these requirements:
 
89
 
 
90
1. Avoid direct use of file I/O, "malloc", error report printouts, etc;
 
91
pass these through the common routines provided.
 
92
 
 
93
2. Minimize global namespace pollution.  Functions should be declared static
 
94
wherever possible.  (Note that our method-based calling conventions help this
 
95
a lot: in many modules only the initialization function will ever need to be
 
96
called directly, so only that function need be externally visible.)  All
 
97
global function names should begin with "jpeg_", and should have an
 
98
abbreviated name (unique in the first six characters) substituted by macro
 
99
when NEED_SHORT_EXTERNAL_NAMES is set.
 
100
 
 
101
3. Don't use global variables; anything that must be used in another module
 
102
should be in the common data structures.
 
103
 
 
104
4. Don't use static variables except for read-only constant tables.  Variables
 
105
that should be private to a module can be placed into private structures (see
 
106
the system architecture document, structure.txt).
 
107
 
 
108
5. Source file names should begin with "j" for files that are part of the
 
109
library proper; source files that are not part of the library, such as cjpeg.c
 
110
and djpeg.c, do not begin with "j".  Keep source file names to eight
 
111
characters (plus ".c" or ".h", etc) to make life easy for MS-DOSers.  Keep
 
112
compression and decompression code in separate source files --- some
 
113
applications may want only one half of the library.
 
114
 
 
115
Note: these rules (particularly #4) are not followed religiously in the
 
116
modules that are used in cjpeg/djpeg but are not part of the JPEG library
 
117
proper.  Those modules are not really intended to be used in other
 
118
applications.