1<?xml version="1.0" ?>
2<notes>
3<em>CScout</em> is a source code analyzer and refactoring browser for
4collections of C programs.
5It can process workspaces of multiple projects (we define a project
6as a collection of C source files that are linked together)
7mapping the complexity introduced
8by the C preprocessor back into the original C source code files.
9<em>CScout</em> takes advantage of modern hardware advances (fast processors
10and large memory capacities) to analyze C source code beyond the level
11of detail and accuracy provided by  current compilers, linkers, and
12other source code analyzers.
13The analysis CScout performs takes into account the identifier scopes
14introduced by the C preprocessor and the C language proper scopes and
15namespaces.
16<p>
17<em>CScout</em> has already been applied on
18<ul>
19<li> Projects of tens of thousands of lines,
20like the apache web server.
21<li> Projects above a million lines of code,
22like the Linux (4.3MLOC), the FreeBSD (4.7MLOC) and the Windows Research
23(0.9MLOC) kernels
24<li> The complete
25<a href="http://cm.bell-labs.com/who/bwk/index.html">one true awk</a>
26source code (6600 lines - including a yacc grammar),
27without modifying a single byte of the source code.
28</ul>
29<p>
30CScout as a source code analyzer can:
31<ul>
32<li> annotate source code with hyperlinks to each identifier
33<li> list files that would be affected by changing a specific identifier
34<li> determine whether a given identifier belongs to the application
35or to an external library based on the accessibility and location of the
36header files that declare or define it
37<li> locate unused identifiers taking into account inter-project
38dependencies
39<li> create static call graphs that include the use of function-like macros
40<li> perform queries for identifiers based on their namespace,
41scope, reachability, and regular expressions of their name and the
42filename(s) they are found in,
43<li> perform queries for files, based on their metrics, or properties
44of the identifiers they contain
45<li> perform queries for functions and function like-macros,
46based on their metrics, their type and scope, the names of callers and callees,
47and the files they are declared in
48<li> monitor and report superfluously included header files
49<li> visually identify parts of files that were skipped during
50preprocessing
51<li> provide accurate metrics on functions, identifiers, and files
52</ul>
53
54<p>
55More importantly,
56<em>CScout</em> helps you in refactoring code by
57identifying dead objects to remove, and
58automatically performing accurate global <em>rename identifier</em>
59refactorings,
60and various function argument refactorings.
61<em>CScout</em> will automatically rename identifiers
62<ul>
63<li> taking into account the namespace of each identifier: a renaming of
64a structure tag, member, or a statement label will not affect variables
65with the same name
66<li> respecting the scope of the renamed identifier: a rename can affect
67multiple files, or variables within a single block, exactly matching
68the semantics the C compiler would enforce
69<li> across multiple projects when the same identifier is defined in
70common shared include files
71<li> occuring in macro bodies and <em>parts</em> of other identifiers,
72when these are created through the C preprocessor's token concatenation
73feature
74</ul>
75Furthermore, <em>CScout</em> allows you to refactor the arguments
76of functions and macros, introducing new arguments, deleting existing ones,
77or changing their order.
78</notes>
79