
- Use modern C++11
http://herbsutter.com/elements-of-modern-c-style/
Perhaps include compiler as part of the build environment.

- Use lcc for C++ parsing?

- Check http://blog.regehr.org/archives/696
  57 Small Programs that Crash Compilers

- Add HTTP logging.

- Add a timeout on expensive queries.

- Add URL links to file dependency edges

- Move first page and bottom links into a menu.  See
file:///C:/dds/src/Research/cscout/refactor/menu/1.4/example1.html

- Fix HTML soup to be XHTML
  Use div for screen dumps, by modifying fixdump.pl into
@#!sh %0.bat %* 2>nul
winclip -p |
perl -n -e '
BEGIN { print qq{<div class="screendump">\n}; }
s/logo\.png/smlogo.png/g;
s/href="[^"]+"/href="simul.html"/g;
s/ACTION="[^"]+"/ACTION="simul.html"/;
s/CScout \d+\.\d+.*/CScout<\/font>/;
$part .= $_ if (/h2>/../font>/);
$all .= $_;
END {
	print length($part) ? $part : $all;
	print qq{</div> <!-- screendump -->\n";
}
' | winclip -c
and by fixing existing pages using the following Perl script:
if (/^<table border=1><tr><td>/../^<\/td><\/tr><\/table>/) {
	s/^<table border=1><tr><td>/<div class="screendump">/;
	s/^\<\/td><\/tr><\/table>/<\/div> <!-- screendump -->/;
	s/h2>/h1>/g;
	s/h3>/h2>/g;
}


- Use portable URLs instead of pointers, and automate screen dumps.

- Add option "prune call graphs: [ ] No,  [ ] after writable functions,
  [ ] at writable functions.
- Add option "prune file graphs: [ ] No,  [ ] after writable files,
  [ ] at writable files.

- Add support for configurable source views, including syntax coloring

- Allow arbitrary queries by allowing the user to specify queries in Lua.
  Only the variables specified in the query are parameters to the defined
  function, and only these are added to the defined function and pushed
  onto the Lua stack for each call.
  One could even have Javascript compose a Lua query in a
  text box.  Users can then edit the query string.

- Use "writable" for a variable other than a const variable.
  Use "editable" for a variable, macro, function, or whatever
  that is in a file that can be edited. (From O'Keefe)

- In the source code browser include directives, add hyperlinks to the
  corresponding (potentially multiple) header files.

- Standardize and improve the display of web error messages.

- Add csassert(ps.empty) in static void set_context(const FcharContext &c);
  and run all tests, plus some kernels

- Provide web service front end (also useful for testing).

- Provide web-based input interface for trying it out: upload file and redirect
  to CScout main page for that file

- Automatically select web port

- Add more foreign key specifications in the database definition
  by turning off referential integrity checks.
  Verify database in postgres and mysql.

- Start script with drop table if exists foo; for each table
  Must first delete dependent tables.

- Provide quartile information for metrics

- Make metric URLs more robust against CScout code changes.

- Provide embedded SQL interface through SQLite.
  See http://www.sqlite.org/cvstrac/wiki?p=VirtualTableMethods

- Eclipse integration

- Don't report identifiers in function prototypes as unused
  (r mark them as a new attribute function arguments).

- Include MD5 checksums in the download section
- Optimize file_hypertext by not calling check_ec for !isalnum or _
  and in comments.  While at it, mark comments with a different
  color.
- option to color highlighted elements
- option to color comments, put keywords in bold, comments in italics

- In file_process skip over the characters of non-identifier ECs

- Ability to edit queries

- Handle the fact that y.tab.h is not in sync with the %token identifiers
  used in the .y file:
  #pragma process file.y tabfile.h
  tabfile.h is #included, and its id is marked.
  When processing yacc tokens these get macro-expanded with the
  macros of that file ONLY
  Test by obfuscating awk

- Add support for preprocessor predicates (see predicate.h and the
  20060625 blog entry.

- Report unused include files only if the number a given include site
  has been processed equals the number of include files that are unused
  from that site. (maybe this is already the case)

- Include fixincludes.awk and make-spy.pl in the distribution

- Change \n into eol in all DP() to ensure flushed output

- csmake should support yacc

- Best effort identifier substitution for DSL files

- Create web-based console during initial processing

Upgrade communication to HTTP/1.1?
See example at http://www.ragestorm.net/tutorial?id=15

Interface to show identifiers shared between two files.

Collect maintainability index and oo metrics (see SSAO04.)

System complexity metrics
Provide an expression-oriented function metric query interface
Lua?

Locate similar / same lines (irrelevant, but useful for refactoring)
See http://en.wikipedia.org/wiki/Karp-Rabin

Pointer analysis
MRR04
Precise Call Graphs for C Programs with Function Pointers
Milanova A., Rountev A., Ryder B.   Automated Software Engineering 11(1): 7-26, 2004.

See perforce terms:
http://www.perforce.com/perforce/price.html

Eliminate the dybamic cast by storing Call* pointers
Remove virtual method qualifiers from leaf classes

Remember to update SWILL/Source/SWILL/mime.o in the Unix distributions.

Handle conditional compilation!!!!
	Each conditional compilation statement can be trivially handled
	by creating and processing a parallel universe (we know how
	to do this, cf. 4 BSD kernel processing).  Find ways to do it
	automatically, and efficiently by maintaining merged virtual
	copies of the environment.

Add generalized query language, based on the C preprocessor syntax.

Option to specify leading file path to hide

Refactorings
	- Inline macro
	- Globally replace text in code/strings/comments (select where)
	- Add / replace first block comment

Tag functions appearing on the RHS of expressions (these are likely to
  get called via pointers and thus can't safely have their arguments
  refactored).

Add support for type specifiers:
	_Bool (done)
	_Complex
	_Imaginary
function specifier:
	inline (done)
type qualifier:
	restrict (done)

Find duplicated code
	(See CloSpan and CP-Miner)

Borland configuration file
Solaris compilation
experiment with hashmap performance

ceescape (swill) front end:

Allow interruptions in id queries

lex preprocessor / hooks
	(Partly implemented)
	#pragma sync "filename" offset
	#pragma nosync (default. Input is parsed, but unify is a null op)

C99 extensions

errno monitoring

Convert color to cgi/command-line

Convert the _asm handling into generic handlers for excluding line and
block-based compiler extensions via compiler-specific preprocess-specific preprocessor defs.

Create JS-based front end
Make color conform with the other programs

Add isfunction identifier property
Add ispointer identifier property

Create separate database table with the newlines

Optimize (hash for map)
Create editor


I will take the opportunity to comment on the product. You may scrap
those comments or use them to improve CScout if you like:
1) An installer will make CScout more acceptable to Windows users;
4) I think it would be an an improvement to allow cswc project | cscout
and would like a control to cause a browser to open automatically in
Windows.
7) My comments on the generated html are obviously first impressions:
a) I would like to see context information such as date and command in
"CScout Main Page".
c) I think you should define many of the terms used in the html.
Examples: "Comment characters" - characters in comments; "line
comments"; "block comments"; "lines" - before or after processing \
"Number of" seems redundant.
8) I find the (grammatical) future tense jibs (deliberate nautical pun)
with me in technical documents because it mixes badly with the present
tense. Example: I suggest you use "lists" rather than "will list" in
'The "All files" link will list all the project's files, including
source files, and directly and indirectly included files. You can
use...'
9) I think the html can be optimised so that links which produce no
results are not made or are rendered in a different way. Example: I have
no "Writable .c Files Without Any Statments". (sic in result!)

include command in cswc
