General Purpose Utilities       

Included with CSIM distributions are a set of general-purpose utilities that often help with project logistics and maintenance in large simulation projects. The general-purpose utilities are located in the general_utilities directory under the tools directory for each platform. ($CSIM_ROOT/tools/$CSIM_MTYPE/general_utilities)
 c2html - Auto-documentation tool for models and general C-code.
	Use as:	  c2html  file.c
	Or,	  c2html  file1.c file2.c 
	Or even,  c2html  *.c
	etc..   It will produce HTML files that can be viewed from
	any web-browser.  They document C-programs by creating
	a hyper-text-linked alphabetic subroutine index, 
	calling-tree, and code listing.
 diff_dir - The utility compares whole directory branches looking for 
	differing files.  It helps find modified files in otherwise
	similar directories.  (Companion to Compare_dir which finds common 
	files between two specific directories; not branches.)
	This program compares the listings of two directory branches, 
	starting with two directories specified on the command line.  
	Use as:
		diff_dir  dir_A  dir_B
	It must be used with two directories on the command-line.
	It lists files that differ under them, by looking primarily at the
	file:  names, dates and sizes.
	   -full    - Compares actual contents of files that otherwise
		      appear identical by name, size, and date.
	   -check   - Compare file contents only when dates differ but sizes match.
	   -date    - Makes diff_dir insensitive to file dates.  
		      Different dates alone will not be sufficient to
		      declare a file different with this option.
	   -size    - Makes diff_dir insensitive to differences in the
		      file sizes.  This is useful to merely check that
		      files of the same name exist in the two branches.
	   -ignore xx  - Causes diff_dir to ignore any files containing
		      the string xx.
		      Example:   -ignore .bak
	   -ignore_dir xx  - Causes diff_dir to ignore any directory 
		      branches whose directory name contains string xx.
		      Example:   -ignore_dir CVS
	   -ignore_case - Ignore differences in case of file names.
	   -ignore_gz   - Ignores size if only one of file pair is compressed.
	   -tkdiff  - Calls tkdiff on files that have differences.
		      Enables automatic examination of differing files.
	   -tkdiff-ask - For each file that differs, asks whether
		      to call tkdiff.  Useful to avoid looking at
		      differences in binary files, such as images or 
		      executable files.  At any time at the y/n prompt,
		      you may type "q" to quit.
	   -diff    - Asks to run diff on files with differences.
	   -copyover - For each differing file, asks whether to copy one
		      file over to the other to resolve differences.
		      Answering "y" copies the first file over to the
		      second directory.  Answering "r", does the reverse,
		      copying the second file to the first directory.
		      And answering "n" does nothing.  In each case, it
		      shows the command to be applied, if any.
		      At any time in an "ask" mode during a y/r/n prompt,
		      you may type "q" to quit.
	   -copyover_newer - Copies only newer mismatching files without asking.
	   -copyover_all - Copies all mismatching files without asking, from
			first to second directory.
	   -single  - Forces non-recursive operation.  It compares
		      only the files within each of the two directories
		      given, and will not descend into subdirectories
		      with this option.
	   -filter xx - Looks only at files having 'xx' in their name.
	   -only xx   - Same as '-filter' above.
	   -asym         - Shows only files newer in the first directory.
	   -existingonly - Compares only files existing in both directories.
	   -subset1      - Compares files existing in first directory only.
	   -subset2      - Compares files existing in second directory only.
	   -showmatch_only - Causes diff_dir to display only files that
		      appear identical in the two directory branches.
		      Does not display differing files.  In other words,
		      it inverts the operation of diff_dir.
	   -help    - Shows these and more options.
	Options can be combined in any order.  For example, by combining 
	-tkdiff-ask with -copyover, you may visually examine differences with
	tkdiff, before deciding to copy a file from one directory to the other.

 compare_dir - The utility compares two directories file-by-file.
	It is analogous to the standard "diff" and "cmp" utilities,
	which compare the contents of individual files, but compare_dir
	operates on the contents of file-directories.  It provides
	several summaries listing the files which are in common between
	the two directories, files contained in one but not the other,
	files of the same name but newer version dates, etc..
	(It is similar to the "dircmp" function, but less cryptic and 
	 more useful.)  By default, compare_dir operates by comparing 
	directory listing information only, which consists of the file 
	names, sizes, and dates.  It does not look at the actual file 
	contents, unless the -full option is invoked.
	Compare_dir is especially useful for consolidating or updating
	directories which have been copied and perhaps deviated over time.

 disk_usage - Shows disk-space used for major directory branches.
	Lets you limit the depth of branches to display down to (-levels).
	Accounts for all space below truncation level, and shows space
	exactly once.  Lets you screen-out branches smaller than a given 
	KB amount (-screen).  Displays in clear convenient KB units.
	By default, disk_usage shows down-to 3 levels.
	Use as:	
		disk_usage -levels 2 directory_xx
		disk_usage -screen 1000 -levels 3 directory_xx

 draw_tree - This utility draws the directory tree, or branches,
	under a specified starting directory.  It draws it to the
	screen at the same time it saves the tree to a file called,
	"tree.".  It draws the tree in ascii-text in an 80-column
	format that can be conveniently printed to any printer, or
	viewed from any screen.  To use it, type for example:
		draw_tree  your_directory
	It will show the tree of directories below "your_directory",
	with each directory's file-space.  Use dot (.) to specify your
        current directory.   This tool is especially useful when it is
	time to clean-up your file system, for finding what directories
	are consuming the majority of space.  -- Options enable showing 
	the owner and date (most recent file) for each directory, by
	the command-line options:  -owner and -date.  The most
	important option is for limiting the number of levels expanded:
	-levels xx.  Use as:
		draw_tree  -levels 3  your_directory
	This will show down-to only n (three) levels, but will sum
	the space used below those levels to the lowest level shown.
	Draw_tree provides a total roll-up of all space under the
	specified directory branch.
 filter - A general purpose file-filtering utility.  It does global 
	search and replaces on files of any size.
	It expects the source file to be the first file on the 
	command-line.  If no files are specified, on the command-line, 
	it will prompt you.  By default, if no destination file name 
	is specified, it will write the filtered output to a file of
	the same root-name as the source, but with ".new" suffix.
	If you wish to write the file to a specific name, then specify 
	that name as the second command-line argument.
	Filter correctly handles replacing a file by itself.
	(It automatically uses a temporary file.)
	You may specify the search and/or replacement string(s) on
	the command line also by prefacing them with the "-s" or
	"-r" command-line options respectively.  If you do not supply
	them, filter will prompt you for them.
	        filter file1 -s was -r is
	This would create "".
	        filter file1 file1 -s was -r is 
	This replaces "file1" with it's filtered version.
	Using the "-v" verbose option will show the replacement 
	lines as they occur (after replacement).  Filter always
	provides a summary of the number of replacements made.
	To search and/or substitute arbitrary ASCII characters, use
	the %xxx special escape, where xxx is the decimal value.
	For example, you must specify % character as %037.
	Carriage-return is %010.

 line_diff - This utility produces a line-by-line difference between
	two files.  It is similar to the standard "diff" utility,
	except that instead of presenting file-differences as large
	blocks of differences, it displays the differences line-by-line
	for easy visual comparison.  It is most useful when two data
	files stay in line-sync, but you want to see the comparative
	differences between the individual lines which differ.
	Use as:
		line_diff  file1  file2   |  more 

 nesting_list - This utility produces an annotated listing of C-code
	programs.  The listing is annotated on the left side by the
	nesting level of each line of code, as defined by the bracket
	"{" and "}" block structure.  
	Use as:
		nesting_list  your_program.c
	By default, nesting_list always produces the annotated listing
	to a file called "your_program.lis".  It does not affect your
	source files in any way.  This utility is often helpful for
	finding missing or extra brackets in code.  (The bracket-level
	between subroutines should always be zero, if all brackets are

 simdiff - SimDiff compares two CSIM xml-diagram files, and shows any logical
	differences between them.  Ignores diagram positioning (geometry vertices).
	Logical differences include:
		- Box names, types, or attributes differ,
		- Port names or link-attributes differ differ,
		- Connections differ (topology differs).
		- Global attributes (macros/variables) differ.
	Examples of the topology differences include:  Boxes having differing
	number of connections, or that connect to different boxes than they
	do in the other diagram-set.

	SimDiff is meant to be used to compare two versions of a given diagram
	file that are expected to correspond closely, but perhaps not exactly.
	This situation occurs frequently in projects in which experimental variants
	are sometimes created or evolve.  SimDiff is helpful in determining what
	the relevant differences are.  Being a logical-compare, it is insensitive
	to differences in order, sequence, formatting, geometry, or positioning.

	SimDiff contains extra checks of consistency for each input file. 
	The regular CSIM tools, like the GUI and preprocessor have some integrity
	checks, but expect input files that are reasonably well-formed, assuming
	they are generated by the CSIM tool-set.  However, SimDiff contains extra
	checks that are useful when debugging diagram-files translated from foreign
	sources.  Some of these checks are more time-consuming and would not
	normally be necessary for files generated by the CSIM-GUI, but can be
	useful in catching errors from other sources or translators.  These extra
	checks are not detrimental in any case.  Checks are made for duplicate
	modules, boxes, links, and attributes.  Simdiff can be use to validate
	the contents of a single diagram file by using the -checkonly option.

	        simdiff  diagram1.sim  diagram2.sim

	        simdiff  -checkonly diagram1.sim

	Note that the input file(s) are expected to be the top-level file, which
	may %include other files.  SimDiff will expand and compare all included
	files in a given diagram-set.  Included files will often be in separate
	directory branches but otherwise have the same names.  SimDiff reports
	differences relative to the top-level file and module name.

	        -v               - Increase diagnostic messages.
	        -suppress_links  - Do not report link differences.
		-checkonly	 - Single-file validation check for redundant 
				   objects, etc., ...

	On files with differing boxes, there will also be many reports of their
	connecting links which do not match.  It is often useful to suppress the
	link-mismatch reports until the box-differences are resolved.  Therefore, 
	the -suppress_links option helps de-clutter the output.

	If there are any differences between diagram-sets, SimDiff will report on
	each one.  It will then report on any inconsistencies within the individual
	files.  Finally, it will always produce a summary of the number of
	differences, and objects examined.  If there are no logical differences,
	SimDiff will report: "0 Differences".  It always shows the number of modules, 
	boxes, links, and attributes examined.

calc - Command-line calculator.  How many times have you
	needed to perform some calculations on numbers displayed on your
	screen, and either did not have a calculator handy, or found re-typing
	all the numbers into a hand-held or  calc-app too tedious ?

	The Command-line calculator utility within CSIM lets you interactively
	perform calculations on numbers you copy&paste from simulation
	outputs, other documents and presentations, or simply type in.  Since
	it is a command-line tool, you get the full power of command-line
	editing/deleting, etc..   You also get to see a  running log of your
	calculations, and you can re-edit or cut&paste parts of previous
	expressions into new expressions, other tools, or into reports or

	Calc can perform complicated expressions with multiple levels of
	parenthesis. You can use variables and macros.  Normal operation
	precedence is honored.  For example, 3 + 2 * 8 = 3 + 16 = 19; not 5 * 8
	= 40, as on some simple calculators. Calc is based on the same
	recursive descent parser used within CSIM's attribute value evaluator.
	So Calc can also be used to test model attribute expression evaluation.

	Calc enables you to use meaningful variable names, unlike spread-sheets
	which force you to use awkward cell coordinates.  All the functions
	documented under CSIM's  attribute evaluator are

	Usage: 	(User input is in black. Program output is in blue.)
		  Calc v2.0:    (Enter expressions.  Quit with 'q'.)

		  34.8 * SIN( 0.22 ) + (85 * SQRT( 29 - 7.3 ))

		  Answer = 403.552091

		  A = B * 39.0
		  B = 22

		  A + 6 * B

		  Answer = 990.0


		  Answer = 858.0

		  B = 100


		  Answer = 3900.0

		  A + 6 * B

		  Answer = 4500.0


 findall - Findall is a utility in CSIM's general_utilities directory 
	for quickly finding files in directory branches, based on a large variety
	of rules, such as date-ranges, file-types, name substrings, content
	search-words, and to see rankings based on date or file sizes.  For
	example, it can quickly find the newest or largest files in deep
	directory branches.  Findall is operating-system independent, so it
	provides the same capability to every computer.

	   Below is the list of findall command-line options:

		FindAll version 1.0 - 
		   -since       - Supply month day year  
				   (month day year, or month/day/yr, or month-day-year).
		   -before      - Supply month day year.
		   -log         - Save results to 'findall.log' file too.
		   -case        - Be case-sensitive.  Default is case insensitive.
		   -recent      - Finds the 10 most recent files, and ranks them by age.
		   -newest x    - Find the x most recent files, and rank them by age.
		   -biggest x   - Find the x largest files, and rank them by size.
		   -nlevels x   - Restricts search down to only x directory levels.
		   -single      - Look at single level, do not descend.
		   -search xx   - Look for occurance of words {xx} in files, 
					like grep, but shows file name; not lines.
		   -search_nocase xx - Like 'search', but case insensitive matching.
		   -cleanse     - Removes files matching search.
		   -cleanse-ask - Asks first, before removing each file matching search.
		   -ignore xx   - Ignore any files or directories containing the 
					string(s) { xx }.
		   -dirsonly    - Find directories, not files.
		   -dirs2       - Find files and directories too.
		   -ni          - Not interactive.  Does not prompt for questions.
		   -orword xx   - Accepts { xx } as "or" word(s), and does not prompt.
		   -andword xx  - Accepts { xx } as "and" word(s), and does not prompt.
		   -notword xx  - Accepts { xx } as "not" word(s), and does not prompt.
		   -nodotfiles  - Ignores files or directories beginning with (.) dot.
		   -apply xx    - Apply command xx to each file found. 
					Example: -apply dos2unix 
		   -quiet       - Do not print 'could not open' messages.
					(Usually occurs on broken sym-links.)
		   -v           - Verbose
		   -h           - Print this list of options and version.

	    Example usages:
		findall -ni -recent

		findall -ni -since Jul 20 2018 -after Mar 3 2018  dir1  dir2  dir3

		findall -or .doc  

		findall -or { .doc .ppt .odp }  dir1 dir2

		findall -and .txt -apply more

		findall -biggest 40 dir1 dir2 dir3

		findall -or { .txt .doc } -not { project_y project_x }

LS-Solver, Curve-Fitter - Automatic modeler tool, and general purpose curve-fitter. Finds best expression to fit a set of data, or desired output.