<?xml version="1.0" ?>
<notes>
<!-- Remember to add extensions to the ext.xml file as well -->
<dl>
	<dt>Version 3.1 (under development)</dt><dd></dd>
<dt>Version 3.0 (2016-01-17)</dt><dd>
	<ul>
		<li>Source code, repository, build process, and installation procedures were polished for distribution and released through GitHub licensed under GPL.</li>
		<li>Changes and features are from now on tracked through the publicly available Git commit log.</li>
	</ul>
</dd>

<dt>Version 2.8 (2011-10-23)</dt><dd>
<ul>
<li> New <code>-C</code> option will create a <em>ctags</em> compatible
tags file, which many editors can use to navigate through the code.</li>
<li> New <code>-d D</code> option will dump on the standard output
the <code>#define</code> directives that get processed.</li>
<li> New <code>-d H</code> option will dump on the standard output
the (mostly header) files getting included.</li>
<li> Correct appearance of page labels whene these span more than one line.</li>
<li> Functions defined through macro calls get a more precise location of
the point where they are defined.</li>
</ul>
</dd>

<dt>Version 2.7 (2009-07-08)</dt><dd>
<ul>
<li>New call graph for functions showing a function in context:
with all the paths from its callers and all called functions.</li>
<li> When saving refactored code CScout will verify that the
renamed identifiers do not clash with other existing identifiers.
This requires a complete re-processing of the code.
A corresponding option can disable this feature.
</li>
<li> Added function argument refactorings page through which
function argument refactorings can be reviewed, changed, and
deactivated.
</li>
<li> Optimize file handling during the post-processing phase.
In a typical use case this results in a 37% reduction in
processing time.
<!--
==> post-opt.time <==
1.03user 0.02system 0:01.10elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
216inputs+0outputs (0major+3053minor)pagefaults 0swaps
==> preopt.time <==
1.06user 0.42system 0:01.51elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+3057minor)pagefaults 0swaps
-->
</li>
<li>Correct handling of function names appearing as function pointers,
when refactoring function arguments.</li>
<li>Corrected dot syntax error when generating  graphs with no global options set.</li>
<li>Better error handling when refactored files cannot be renamed or unlinked.</li>
<li>Preprocessor expressions are evaluated as if the have the same
representation intmax_t/uintmax_t, rather than long.</li>
<li>Fix a crash that occurred when processing Apache httpd 1.3.27.</li>
<li>Fix to avoid <em>csmake</em> getting confused by <em>ccache</em>.</li>
</ul>
</dd>

<dt>Version 2.6 (2008-12-05)</dt><dd>
<ul>
<li>Add support for the display of graph files in PDF and PNG format.</li>
<li>Add options for passing graph, node, and edge properties to <em>dot</em>.</li>
<li> <em>cswc</em> now deals correctly with scoped definitions for files.</li>
<li>Correct the generation of obfuscated identifiers in platforms
where they were invalid.</li>
<li>Support the unification of <em>yacc</em> terminal symbols with the
corresponding <code>y.tab.h</code> macros.</li>
<li>Correct extraneous line spacing in source code listings of files
containing carriage returns.</li>
<li>Fix the display of graphs with empty nodes.</li>
<li>Correct the handling of identifiers declaring a function at
an inner scope with no storage-class specifier (ISO C 6.2.2-5.)</li>
</ul>
</dd>

<dt>Version 2.5 (2008/11/17)</dt><dd>
<ul>
<li>Each file's web page now provides links for generating
compile-time, control, and data dependency graphs.</li>
<li>Identifier queries can now provide the functions where an identifier
appears.
</li>
<li>Bring in line the semantics of the <code>include_next</code>
preprocessor directive with those of <em>gcc</em>.</li>
<li><em>Yacc</em> identifiers now live in a separate namespace.
Terminal symbols are still visible in C code as ordinary identifiers,
but the potential for clashes between non-terminal names and C identifiers
has been eliminated.
This change also fixes the handling of rules for <em>yacc</em> untyped non-terminals,
and the calculation of file-local identifier metric in <em>yacc</em> files.</li>
<li> The provided definition files match closer the <em>gcc</em> builtins.</li>
<li> The file details page now provides links for listing functions defined
in the file and their call graph.</li>
<li> The main page and the individual file details pages now provide options
for generating include graphs. </li>
<li>
In file, function, and identifier queries one can now specify to
exclude results from filenames matching a particular regular expression.
</li>
<li> Take into account the appropriate order of CScout configuration
directories when saving options.
</li>
<li> CScout's web interface received a facelift, and many pages should now
be clearer and easier to navigate.</li>
<li>The second tab appearing in a source code's line is now correctly expanded.
</li>
<li>An option allows the addition of URLs in <em>dot</em> output.</li>
<li>Remove redundancy from the saved options file.</li>
</ul>
</dd>

<dt>Version 2.4 (2008/07/15)</dt><dd>
<ul>
<li>The web front-end now includes support for a multiuser read-only
browsing mode, and a log file.</li>
<li>The web front end now includes support for directory browsing.
</li>
<li>
The <code>include_next</code> <em>gcc</em>-specific directive now
works correctly, even when preceded in its file by other include
directives.
</li>
<li>
Allow macro directives inside a macro-function call.
According to the C standard the behavior of this is undefined,
but <em>gcc</em> preprocessor does the right thing.
</li>
<li> The web front-end now provides functionality for refactoring
the arguments of function calls.
A template mechanism allows changing the order of function arguments,
removing arguments, and introducing new ones.</li>
<li> The web front-end now provides functionality for hand-editing files.</li>
<li>Under Windows the specified read-only prefix is case and path separator
insensitive.</li>
<li> Elements defined through the CScout definition file are now considered
read-only.
</li>
<li> Workspace compiler: Correctly handle scoping in nested units.</li>
<li> Workspace compiler: New readonly command for units other than files.</li>
<li> A new option controls the depth of call graphs.</li>
<li> Added functionality to interactively explore the tree of
a function's calling and called functions.</li>
<li> The MIME type of SVG call graphs is now compatible Firefox's builtin
SVG viewer.</li>
</ul>
</dd>

<dt>Version 2.3 (2008/04/07)</dt><dd>
<ul>
<li> Each defined function is now associated with a comprehensive
set of metrics. These appear in the function's page, can be queried
against all functions, and are also summarized.
This is a list of maintained function metrics.
<ul>
<li>Number of characters</li>
<li>Number of comment characters</li>
<li>Number of space characters</li>
<li>Number of line comments</li>
<li>Number of block comments</li>
<li>Number of lines</li>
<li>Maximum number of characters in a line</li>
<li>Number of character strings</li>
<li>Number of unprocessed lines</li>
<li>Number of C preprocessor directives</li>
<li>Number of processed C preprocessor conditionals (ifdef, if, elif)</li>
<li>Number of defined C preprocessor function-like macros</li>
<li>Number of defined C preprocessor object-like macros</li>
<li>Number of preprocessed tokens</li>
<li>Number of compiled tokens</li>
<li>Number of statements or declarations</li>
<li>Number of operators</li>
<li>Number of unique operators</li>
<li>Number of numeric constants</li>
<li>Number of character literals</li>
<li>Number of if statements</li>
<li>Number of else clauses</li>
<li>Number of switch statements</li>
<li>Number of case labels</li>
<li>Number of default labels</li>
<li>Number of break statements</li>
<li>Number of for statements</li>
<li>Number of while statements</li>
<li>Number of do statements</li>
<li>Number of continue statements</li>
<li>Number of goto statements</li>
<li>Number of return statements</li>
<li>Number of project-scope identifiers</li>
<li>Number of file-scope (static) identifiers</li>
<li>Number of macro identifiers</li>
<li>Total number of object and object-like identifiers</li>
<li>Number of unique project-scope identifiers</li>
<li>Number of unique file-scope (static) identifiers</li>
<li>Number of unique macro identifiers</li>
<li>Number of unique object and object-like identifiers</li>
<li>Number of global namespace occupants at function's top</li>
<li>Number of parameters</li>
<li>Maximum level of statement nesting</li>
<li>Number of goto labels</li>
<li>Fan-in (number of calling functions)</li>
<li>Fan-out (number of called functions)</li>
<li>Cyclomatic complexity (control statements)</li>
<li>Extended cyclomatic complexity (includes branching operators)</li>
<li>Maximum cyclomatic complexity (includes branching operators and all switch branches)</li>
<li>Structure complexity (Henry and Kafura)</li>
<li>Halstead volume</li>
<li>Information flow metric (Henry and Selig)</li>
</ul>
</li>
<li> A number of file-related metrics have been added:
<ul>
<li> Number of defined project-scope functions </li>
<li> Number of defined file-scope (static) functions </li>
<li> Number of defined project-scope variables </li>
<li> Number of defined file-scope (static) variables </li>
<li> Number of declared aggregate (struct/union) members </li>
<li> Number of declared aggregate (struct/union) members </li>
<li> Number of complete enumeration declarations </li>
<li> Number of declared enumeration elements </li>
<li> Number of processed C preprocessor conditionals (ifdef, if, elif) </li>
<li> Number of defined C preprocessor function-like macros </li>
<li> Number of defined C preprocessor object-like macros </li>
</ul>
</li>
<li>A new identifier query in the web interface lists function identifiers that should be made static.</li>
<li>Newlines in string literals are now reported as errors.</li>
<li>
Trigraph support now disabled by default.  It can be explicitly enabled
through the new -3 switch.
</li>
<li> The contents of the columns BASEFILEID and DEFINERID of the SQL table
INCTRIGGERS were reversed.
Their contents now correspond to their definitions.
</li>
<li>
Correct support for initializer designators in conjunction with serial
initialization of aggregate elements.
</li>
<li> Correctly unify identifiers in function declarations that are
declared as static, and are subsequently defined without a storage
class specifier.</li>
<li>Fixed a relatively rare error in the ordinal numbering of function name
elements in the FUNCTIONID table.</li>
<li> The <code>__alignof__</code> <em>gcc</em> extension now also supports expressions,
in addition to types.</li>
<li> On 64-bit architectures fields containing pointers are stored in a
BIGINT database field.</li>
<li> MySQL dumps now start with SET SESSION sql_mode=NO_BACKSLASH_ESCAPES.
This prevents problems with the interpretation of backslashes stored in
strings and comments.
</li>
<li> Fixed syntax error when a <code>typedef</code> followed a structure
initializer.</li>
<li> Put number of unprocessed lines in the database and print it as a warning. </li>
<li> Added support for Microsoft's __try __except __finally __leave extensions. </li>
<li>Correctly parse a labeled statement appearing in the then
clause of an if statement.
This change tightens-up the use of the (deprecated) <em>gcc</em> extension
of allowing a label at the end of compound statement.
Following the change, only a single label is allowed.</li>
<li> Type definitions in an <code>else</code> block are now correctly
handled.</li>
<li> An enumeration list can be empty (Microsoft extension). </li>
<li> Correct processing of assembly line comments (starting with a ;)
inside Microsoft inline assembly blocks. </li>
<li> Fix a potential crash when processing a project
under the <code>-r</code> option. </li>
</ul></dd>

<dt>Version 2.2 (2006/09/29)</dt><dd>
<ul>
<li> An new accompanying command, <em>csmake</em> can automatically
generate <em>CScout</em> processing scripts by monitoring a project's
build process.</li>
<li> Identical files in different locations are identified and presented in the file information page and through the file metrics. </li>
<li> Facility to display the call path from one function to another. </li>
<li> Identifiers occuring at the same place in identical files are considered to be the same.</li>
<li> All query results are presented through a page selection interface. </li>
<li> New option to display call graphs as GIF images avoiding the need for an SVG plugin for medium-sized graphs. </li>
<li> The SQL backend supports four additional tables: STRINGS, COMMENTS, FILEPOS, FILECOPIES.</li>
<li>Allow attribute declarations to follow labels (<em>gcc</em> extension).</li>
<li>Support indirect <code>goto</code> labels (<em>gcc</em> extension).</li>
<li>Support (ANSI-style) nested function definitions (<em>gcc</em> extension).</li>
<li>The macro expansion algorithm follows more closely
the C standard specification.</li>
<li>Allow braces around scalar initializers (common extension).</li>
<li>Macro calls in function arguments now get recorded as calls from the
enclosing function, rather than the function being called.</li>
<li> Significantly faster file post-processing for the web and the SQL interface in large
projects.</li>
<li> Array designators can be denoted through a range (<em>gcc</em> extension). </li>
<li> Support for symbolic operands in <em>gcc</em> asm constructs.</li>
<li> Allow <code>__typeof__</code> declarations to be preceded by type qualifiers. </li>
<li> Correctly handle <code>__typeof__</code> of objects with a storage class within typedef declarations. </li>
<li> The order of include file searching now matches more closely
that of other compilers: absolute file names are never searched in
the include file path, and non-system files are first searched relative
to the directory of the including file. </li>
<li> Allow empty initializers and compound literals.  (<em>gcc</em> extension)</li>
<li> Support for the <code>alignof</code> operator (<em>gcc</em> extension)</li>
<li> The equals sign following an initializer designator is optional
(<em>gcc</em> extension).  </li>
<li> A declaration expression can be used as the first expression of a for
statement. (C99) </li>
<li> <code>__typeof</code> can also have as its argument a type name </li>
<li> Support for designators in compound literals. (C99) </li>


<li> Correctly handle preprocessing tokens with values close to UINT_MAX.</li>
<li> Correctly evaluate preprocessor expressions involving a mixture of
signed and unsigned values.</li>
<li> Correct handling of logical OR and logical AND preprocessor expressions. </li>
<li> In query results of files sorted by a metric, groups of files with the same
 value had only one member of the group displayed.  This has now been fixed.</li>
<li> Correct handling of implicit function declarations. </li>
<li> Correct handling of character constants containg a
double-quote character when collecting metrics, database
dumping, and obfuscating. </li>
<li> Function declarations appearing in multiple identical files now appear as a
single function.</li>
<li>
Correct operation when the same project is encountered in the input
more than once.
</li>
<li> Correctly support the <code>index[array]</code> construct.</li>
<li> Correct typing of arithmetic involving arrays.</li>
<li> Will not register function typedefs as function declarations.</li>
<li> Don't issue an error message when a # appears in a skipped #error message</li>
<li> Correct handling of C99 nested initialization designators. </li>
<li> More consistent support for <em>gcc</em> keyword synonyms,
such as <code>__inline</code> and <code>__restrict__</code>.</li>
<li> Correct expansion of a macro following a token named after a
function-like macro.
</li>
<li> The supplied <em>gcc</em> definition files contain support for
the <code>__builtin_expect</code> function.  </li>
<li> Correct operation of <code>typedef</code>s involving a
<code>__typeof</code> construct.</li>
<li> Will not report unneeded included files for (the rare case of)
compilation unit source files that are also included in other compilation units.
The unused included file report for such cases could incorrectly identify
files that were required for compilation as unneeded.</li>
<li>Support for the C99 <code>_Bool</code> data type.</li>
</ul></dd>

<dt>Version 2.1 (2005/05/14)</dt><dd>
<ul>
<li>
The mixing of NULL with object pointers in conditional expressions
is now closer to the ANSI C rules.
</li>
<li>Support for the C99 <code>restrict</code> and <code>inline</code> keywords.</li>
<li>An identifier declared with an extern storage-class specifier in
a scope in which a static declaration of that identifier is visible
will inherit that static declaration without an error.</li>
<li>Allow struct/union declarations with only an empty declaration list (<em>gcc</em> extension).</li>
<li>Correct preprocessing of floating-point numbers starting with a decimal point.</li>
<li>Correctly handle the remainder operator in C preprocessor expressions.</li>
<li>Allow absolute filename specifications in all #include directives.</li>
<li>Report writable files that a given file must include.</li>
<li>Facility to review and selectively deactivate identifier substitutions.</li>
<li>A new option allows a regular expression to control the location where
modified files will be written.</li>
<li> File, identifier, and function queries, display the number of elements
matched.</li>
<li> Correct handling of the read-only pragma under Win32 platforms.</li>
<li> Will not report (erroneous) file metrics for empty file sets.</li>
<li>Accept <em>gcc</em> synonyms __typeof__, __label, and __attribute.</li>
<li> Correctly handle structure initializations through typedefs that were
initially declared with an incomplete structure tag.</li>
<li>Correctly calculate metrics in files with *-decorated block comments.</li>
<li>Correctly deduce writable Unix files.</li>
<li>Correctly identify as the same a function whose name is composed
through token concatenation, and occurs in two projects.</li>
</ul></dd>

<dt>Version 2.0 (2004/07/31)</dt><dd>
<ul>
<li>Monitor calls across functions and macros,
generating call graphs in various formats,
including hyperlinked SVGs.
A new category provides canned and customized queries on functions
and macros.</li>
<li>Monitor parts of files not processed due to conditional
compilation.
The results are available as a new file metric category.
In addition, unprocessed parts can be identified in
source listings in a different color.</li>
<li> Global options can be saved to a file, and loaded from it
on startup.</li>
<li> File queries can now specify a sorting order for the file results.</li>
<li> A new file query lists files with unprocessed lines, ordered
by the number of unprocessed lines.</li>
<li> The presentation of file lists has been improved</li>
<li> Will not report unused included files that are included with the
same directive that also includes used files.
This can happen when the same file is compiled multiple times with different
include paths or when a file is included by expanding a macro.
Problem spotted by Alexios Zavras in the FreeBSD kernel report.</li>
<li> Allow <code>typedef</code>ed pointers and arrays to be further
qualified with e.g. <code>const</code> or <code>volatile</code>.
Problem reported by Walter Briscoe.</li>
<li> The second argument of a conditional expression can be
omitted (<em>gcc</em> extension).</li>
<li> Fix assertion generated when processing a <em>yacc</em> file without having
defined a yyparse function.</li>
</ul></dd>

<dt>Version 1.16 (2003/08/27)</dt><dd>
<ul>
<li> Declarations can be intermixed with statements (C99).</li>
<li> <code>__typeof</code> can have as its argument an expression
and not only an identifier.</li>
<li> Support for C99 variable number of arguments preprocessor macros.</li>
<li> Allow <code>case</code> expression ranges (<em>gcc</em> extension).</li>
<li> Recognise <code>__atribute__(__unused__)</code> for determining which
identifiers should not be reported as unused (<em>gcc</em> extension).</li>
<li> Command-line option to generate a wrongly scoped identifier and unused 
include file and identifier warning report.</li>
<li> Separate identifier attribute for enumeration constants.
This allows us stop incorrectly categorizing them as having global
(compilation unit) visibility.</li>
<li> Error reporting format is now compatible with <em>gcc</em>.</li>
<li> Dereferencing a function yields a function (common extension).</li>
<li> Command-line option to process the file and exit.</li>
<li> Document processing of the FreeBSD kernel.</li>
<li> Correct typing of assembly-annotated declarators.</li>
<li> Fixed assertion failure that could be caused when parts of concatenated
identifiers were no longer available (e.g. when processing files
with the <code>-m T</code> option.)</li>
<li> Correct handling of macro parameters that match other macros and
are followed by a concatenation operator (they were erroneously replaced).</li>
<li> Add workaround for <em>gcc</em> <code>__builtin_va_copy</code> in the provided
definition files.</li>
<li> Corrected the handling of <code>main()</code> in the example definition
files.</li>
</ul></dd>

<dt>Version 1.15 (2003/08/06)</dt><dd>
<ul>
<li> Plugged another memory leak.
All remaining memory leaks are caused by STL caching and should be of a
constant overhead.</li>
</ul></dd>


<dt>Version 1.14 (2003/08/03)</dt><dd>
<ul>
<li> Support locally declared labels (<code>__label__</code>) (<em>gcc</em> extension).</li>
<li> Allow statement labels without a following statement (<em>gcc</em> extension).</li>
<li> Allow assignment to case expressions (common extension)</li>
<li> Support C99 initialization designators.</li>
<li> Support aggregate member initialization using the member: value syntax (<em>gcc</em> extension)</li>
<li> Major memory leak plugged (a missing virtual destructor).
<em>Cscout</em> will now consume about 7 times less memory.</li>
<li> In <code>#if</code> and <code>#elif</code> directives expand macros
before processing the <code>defined</code> operator.</li>
<li> Support the vararg preprocessor macro syntax (<em>gcc</em> extension).</li>
<li> Allow empty member declarations in aggregates (<em>gcc</em> extension).</li>
<li> Allow the declaration of empty structures or unions (<em>gcc</em> extension).</li>
<li> An <code>__asm__</code> declaration can be used instead of a function's body (<em>gcc</em>).</li>
<li> Correct typing of the conditional operator's return type
when one argument is a pointer and the other NULL.</li>
<li> New <em>-m</em> option to specify identifiers to track.
Enormous memory savings at the expense of unsound operation.</li>
<li> Display an error when a file does not end with a newline</li>
<li> Allow <em>yacc</em> %union declaration to end with a ;</li>
<li> Accept the #ident preprocessor directive (<em>gcc</em> extension)</li>
<li> Fixed preprocessor bug:
multiple expansions of the same function-like macro inside another macro would
fail.</li>
<li> Correctly handle concatenation of empty macro arguments.</li>
<li> Correctly handle function prototypes inside old-style argument declarations.</li>
<li>  Do not replace strings or characters matching the name of a macro formal argument.</li>
<li> Accept an empty translation unit (common extension).</li>
<li> Adding a pointer to an integer now correctly yields a pointer
(adding an integer to a pointer already worked correctly)</li>
<li> Support C99 compound literals.</li>
<li> Correct typing of compound statements as expressions (<em>gcc</em> extension)</li>
<li> Improved configuration definition files for the GNU C compiler</li>
</ul></dd>

<dt>Version 1.13 (2003/07/07)</dt><dd>
<ul>
<li> Handle GNU <code>__asm__</code> extension with a single operand</li>
<li> -d options to <em>cswc</em> for specifying configuration directory</li>
<li> <code>-p</code> command-line option to specify the web server port</li>
<li> Small corrections in the FreeBSD definition files.</li>
<li> Intel IA-64 and AMD-64 support</li>
</ul></dd>
<dt>Version 1.12 (2003/06/23)</dt><dd>
<ul>
<li> New query: writable identifiers that should be made static</li>
<li> URLs now work on 64-bit architectures</li>
<li> Improved distribution format</li>
<li> Sun SPARC-64 support</li>
</ul></dd>
<dt>Version 1.10 (2003/06/22)</dt><dd>
<ul>
<li> Allow GNU __asm__ statements with a single operand.</li>
<li> GNU __asm__ statements can also appear at file scope.</li>
<li> Accept older "name = {action statements}" <em>yacc</em> syntax.</li>
<li> Can handle untyped <em>yacc</em> specifications.</li>
<li> Correctly handle struct/union type specifier followed by a type qualifier.</li>
<li> Small corrections in the supplied definition files.</li>
</ul></dd>

<dt>Version 1.9 (2003/06/19)</dt><dd>
<ul>
<li> Now distributed with ready-to-run example;
     the <em>awk</em> source code.
     No setup required, just unpack the distribution and run.</li>
<li> Can now also process <em>yacc</em> files</li>
<li> Fixed syntax error in workspace compiler source code</li>
<li> Correctly documented -P switch as -E</li>
<li> Added stdlib.h generic header</li>
</ul></dd>

<dt>Version 1.8 (2003/06/16)</dt><dd>First public release</dd>
</dl>
</notes>
