
Along with the source code for the 'Fortify' program, this directory
also contains the source code for 'md5', a program that calculates
md5 checksums on an input file.  The source is partially derived from
the code of the same name in the SSLeay distribution (version 0.6.3
was used as the reference).

Differences against the SSLeay version include fixes for two minor
problems in the Win32 environment, plus code to accept and process
a range specification, so that an md5 value can optionally be
calculated on a sub-part of the input file.

As a normal matter of course, the Fortify source code is (and always has
been) distributed in every release.

This is primarily done to allow you - if you wish - to audit the code and
verify that Fortify does nothing secret or devious or while it is running.
Naturally, you are also free to bend, twist and prod it to your heart's
content (within the constraints of the Copyright).  If you wish to make
some improvements or additions to the code, such as adding your favourite
GUI interface, then you are also encouraged to submit your contributions
for possible inclusion in future Fortify releases.

The Fortify source code has now been split into subparts, as follows:

  * 'common'
	The largest subpart.  This is the core cross-platform code,
	written entirely in ANSI-C.  It contains no human interface code.
	It can be thought of as an aggregate that exposes a set of high
	level entry points and user-interface callbacks.

  * 'cmdline'
	A command line interface to the 'common' routines, also written
	in ANSI-C.  This is currently the primary interface on OS/2 and
	all Unix platforms.  The command line code is deprecated on
	Windows 95/98/NT and MacOS.

  * 'mfc'
	A native Microsoft Windows GUI interface to the 'common' routines.
	This is written in C++ and built upon the MFC class library.
	It is a dialog based application, with interfaces to the registry,
	and the operating system, so it is platform specific.  The code
	to interface with the Windows process table, and the code to
	draw the splash panel graphics have been based upon contributions
	from the CodeGuru web site (www.codeguru.com).

  * 'os2'
	A build area for the OS/2 port.

  * 'cw'
  	A Metrowerks CodeWarrior GUI interface to the 'common' routines.
	This is written in C++ and based upon the PowerPlant class library.
	It is a dialog based application, with interfaces to the standard
	MacOS APIs, so it is platform specific.


Some brief build notes:

  * Unix
  	Gcc is used on all Unix platforms to build the 'common' and
	'cmdline' code.  Both of these subdirectories contain Makefiles
	which you will need to check and configure before you attempt a
	make.  Making in 'common' yields a library, libffy.a.  Running a
	make in 'cmdline' compiles the two executables 'fortify' and 'md5',
	and links these programs against ../common/libffy.a.

  * Windows 95/98/NT
	Microsoft Visual C++ (v5) is used to compile the 'common' and
	'mfc' code.  The Fortify workspace and project control files are
	included to assist you with this.  Note that you will also need
	a Windows port of the Unix Yacc and Lex tools in order to compile
	common/gram.y and common/lex.l.  The Cygnus GnuWin32 distribution
	contains a complete suite of Unix development tools, including
	Yacc and Lex.

  * MacOS
	Metrowerks Code Warrior v4 is used to compile the 'common' and
	'cw' code (in the past it has also been used to compile the 'cmdline'
	code).  The 'cw' program is compiled without debugging and with no
	global optimizations.  Global optimization has been observed to
	cause run-time errors in the compiled program.

	A note concerning gram.y and lex.l:  You will need a MacOS port of
	the Unix Yacc and Lex tools if you wish to compile common/gram.y and
	common/lex.l.  Pre-compiled versions - gram.tab.c and lex.c - are
	included in the 'common' directory to avoid this need.  A suitable
	Yacc compiler (Bison) plug-in can be downloaded from the Metrowerks
	web site.  When compiling gram.y, Yacc will report that the file
	contains "Shift-reduce" errors.  This message can be safely ignored.

  * OS/2
	Under OS/2, the Watcom v10 C compiler is used to build Fortify,
	in combination with the Emx ports of Yacc and Lex.  If necessary,
	gram.c and lex.c can be created from gram.y and lex.l as follows:
		yacc gram.y
		yacc -d gram.y
		move y_tab.c gram.c
		flex -l lex.l
		move lexyy.c lex.c
	The full build is performed from within the 'os2' subdirectory.
	For some mysterious reason, the Watcom compiler can successfully
	complete the build only if a copy of ..\common\misc.h is placed in
	in the 'os2' subdirectory.  The Watcom compiler also does not handle
	long file names.

