5/20/03 jeffc
	This is a preliminary checkin for the project of including WU
	analysis parameters in the WU header.  It also includes a routine
	to read binary data WUs. 

	In the end, all analysis parameters will have a default compile 
	time value which can be supersede by values contained in the WU header.  
	There will be no command line analysis parameters.

	For this checkin, I added the following variables 
	to the SETI_WORKUNIT_INFO (swi) structure.

			spike_sigma_thresh;
					gaussian_chi_sq_thresh;
					gaussian_power_thresh;
					gaussian_peak_power_thresh;
					beam_width;
					num_fft_lengths;
					analysis_fft_lengths[MAX_NUM_FFTS]; 
					chirp_resolution;
					num_chirp_ranges;
					ChirpFftTable_t chirp_fft_table[MAX_CFFT_PARAMS];

	These replaced various standalone global variables and constants.  
	Values for all of these variables are to be included in the WU header.

	Because of all the moving of cfft parameters to swi, chirpfft_tab was removed from
	the makefile.  This prompted to removal of the params assignment in  common_init()
	and the necessity of passing the chirp resolution down to where it was needed -
	InitChirpStep().

	I added the following array sizers:
		#define MAX_NUM_FFTS            64
			#define MAX_CFFT_PARAMS         2

	I added code to seti_parse_wu_header() to parse the new header values.

	I added the following fields to PoTInfo_t.
		GaussChiSqThresh;         
			GaussPowerThresh;        
			GaussPeakPowerThresh;  

	In the output routines for each signal type, I added the temporary line:
		outfile.flush();
	until a outfile flushing is added to the boinc code.

	The following existing members of swi were changed from float to double and associated
	scanf()'s were changed to reflect this:
			start_ra
			start_dec
			end_ra
			end_dec
			angle_range

	There were some places where we were using strlen where sizeof should have
	been used in seti_parse_wu_header().  I fixed these.

	Added new routine read_bin_data() to read binary data.

	Testing.  I dumped the generated chirpfft table and it matches the one 
	generated by the current client.  I let the boinc app complete a WU
	and the reported signals were correct within tolerances.  The reading
	of binary data WUs has *not* been tested.

	Still to do (among other things):
		- make swi a global structure with compile time initialization.
		- swi will include substructures for:
			receiver parameters
			recorder parameters
			splitter parameters
			analysis parameters
		- create a new source file, seti_parse.C that will contain
		  routines for parsing complex seti variables like the 
		  above parameter lists.
		- there are still a number of single precision floats
		  in the code.  These should all be changed to doubles.
		- XML-ize the signal lines in outfile.
		- do away with command line options that are redundant with
		  WU header items.
		- add bounding tags to coordinate list in the WU header.
		- add bounding tags for the different parameter groups (splitter,
		  analysis, etc) in the WU header.
		- it might be a good idea to not have the limits imposed by 
		  MAX_NUM_FFTS and MAX_CFFT_PARAMS.  Instead, we could 
		  have analysis_fft_lengths and chirp_fft_table be pointers
		  to areas that we realloc as we parse the WU header.
		- remove outfile.flush() from the signal outut routines.

	changed sources:
			analyzeFuncs.C
			analyzeReport.C,h
			worker.C
			chirpfft.C,h
			seti_header.C,h
			analyzePoT.C,h
			gaussfit.C
			unix_main.C
		analyze.h
		s_util.C,h

5/21/03 jeffc
	Removed the include of hosts.make from Makefile and hardcoded:

	BOINCDIR = /disks/milkyway/a/users/anderson/boinc_cvs/boinc

7/16/03 korpela
	Basic workunit parsing now functioning.  Maybe

	Makefile.in
	Makefile
	seti_header.C
	unix_main.C
	workunit.sah
	db/Makefile.server
	db/db_table.h
	db/schema_master.sql
	db/schema_to_class.awk

7/21/03 jeffc
	CFFT table generation now uses the new header classes.  Note that while
	the CFFT table still follows the same order in regard to chirp rates,
	the order of FFT lengths at a given chirp rate is reversed from that
	of the current release client.  This should not matter.

	Also pulled out some debug printf()'s.

	chirpfft.C,h
	worker.C
	analyzeFuncs.C
	analyzePoT.C
	seti.C

7/22/03 korpela
	schema_master.[Ch] now compile in server mode.
	Also make mods to schema, and started a new database (sah2@master_tcp) for
	test purposes.

	db/Makefile.server
	db/schema_master.sql
	db/db_table.h
	db/schema_to_class.awk

7/24/03 korpela
	Made changes to fix printing and allow real database access.

	db/Makefile.server
	db/schema_to_class.awk
	db/sqlinf.ec
	db/sqlinf.h
	db/db_table.h

7/24/03 korpela
	Moved the SQLROW class to a separate file so it could be used in the client.
	Added indentation to the database XML printing to give a more structured feel.
	deleted db_sah.* and db_informix.*

	db/Makefile.client
	db/Makefile.server
	db/db_table.h
	db/schema_to_class.awk
	db/sqlinf.ec
	db/sqlinf.h
	db/sqlrow.cpp       [New]
	db/sqlrow.h         [New]
	db/db_informix.cpp  [Removed]
	db/db_informix.ec   [Removed]
	db/db_informix.h    [Removed]
	db/db_sah.cpp       [Removed]
	db/db_sah.h         [Removed]

8/13/03 jeffc
	Integrated Eric K's signal classes into the signal INFO structures (SPIKE_INFO
	etc).  These structures (now classes) contain a signal proper (Eric's class)
	plus ancillary data needed for "best of" tracking and graphics.  The handling
	of the INFO objects required some code reoriganization to not be confusing.  

	Signal INFO objects are print_xml()'ed to the state file at checkpoint time.

	Best of signal objects are print_xml()'ed to the outfile upon exit from the 
	main analysis loop.

	This is a preliminary checkin.  More testing needs to be done.  There is a known
	seg fault with an overloaded assignment operator (for class gaussian at least).
	Some debug code and comments need to be pulled out.

	gaussfit.C
	unix_main.C
	spike.C,h	[New]
	seti.C
	worker.C
	analyzeReport.C,h
	analyzeFuncs.C
	gdata.h


8/14/03 jeffc
	Removed the hard coded path to the boinc api includes.

		unix_main.C
		worker.C

	Removed or commented out various unused variables.

		analyzeReport.C
		gaussfit.C
		spike.C
		seti.C
		seti_header.C

8/15/03 korpela
	Added "std_fixes.h", "win_config.h" and "config.h" to db directory
	"std_fixes.h" should contain any routines missing from the std:: namespace on
	various platforms, ifdefed by defines found in "config.h" and "win_config.h"
	Renamed "sqlinf.h" to "sqlapi.h", "sqlinf.cpp" to "sqlifx.cpp"
	Misc changes for compiling under windows.

2003/08/21 quarl
	Added standalone-mode run-time option (-standalone, available only in
	TEST_VERSION)

        unix_main.C


8/28/2003 jeffc
	Some (not very clean) mods to fix unix compilation.  There was 
	a dependency of ~/bin/astyle which I removed by removing the indent  
	logic from schema_to_class.in.  db/schema_to_class was not being made 
	executable, even though this was specified in configure.ac.  I specified 
	it in db/Makefile.in (twice, ugly) instead and this works.        				

	db/schema_to_class.in
        db/Makefile.in

9/3/03 jeffc
	The ANALYSIS_STATE struct was being intialized *after* the parsing
	of the state file.  We now initialize, then parse.

	worker.cpp

9/4/03 jeffc  testing notes
	I ran the client on the reference WU.  The results matched well with 
	the reference result on triplets ans spikes.  The reference result contains
	1 pulse and the new result contains no pulses.  The reference result contains
	2 gaussians and the new result contains 1 gaussian that did not match well
	with either of the reference gaussians.  The 2 reference gaussians are
	really one gaussian detected twice over a shot time period.

	I realized that the WU specified the new (correct) BW - 0.083 degrees.
	I reran the client with the old 0.1 degree BW and the gaussian 
	matched much better and I got a pulse but it did not match well. 

			new gaussian	new gaussian	reference gaussian
			bw = 0.083	bw = 0.1	bw = 0.1
	peak power	2.1929943561554	2.271505355835	2.476470e+00
	mean power	0.6764104962348	0.635128259658	6.407137e-01
	ra		14.868992642608	14.87093261104	14.871
	dec		28.5		28.56		28.56
	time		2451606.8586998	2451606.858738	2451606.85874
	freq		1418917595.1423	1418922359.339	1418922359.34
	chirp rate	6.3884830474854	-21.7681655883	-2.176817e+01
	sigma		3.5038092136383	5.086092948913	4.129033e+00
	chisq		8.4692783355713	8.749799728393	8.323806e+00
	max power	5.0800476074219	5.173916816711	5.173924e+00


			new pulse	new pulse	reference pulse
			bw = 0.083	bw = 0.1	bw = 0.1
	power		NO PULSE	0.3064200878	1.605851e+00
	mean				0.0019431554	1.964450e-03
	period				0.042048022	1.078955e-01
	ra				14.9086410	14.892
	dec				28.58		28.57
	time				2451606.859504	2451606.85916
	freq				1418919677.7275	1418922119.13
	fft len				32		32
	chirp rate			0		0
	snr				6.004581928253	6.854417e+00
	thresh				5.9453372955	6.675629e+00
	len_prof			12		32
	
	I added the reference result and the reference result to CVS.

	checkin_notes
	reference_work_unit.sah
	old_format_reference_result.sah

	I added a final outfile.flush() and that fixed the problem whereby we
	were getting a truncated result.

	analyzeFuncs.cpp

David  Sept 12 2003
	- Moved SPIKE_INFO etc. from gdata.h to seti.h
		Principle: everything relating to graphics should be surrounded by
		#ifdef BOINC_APP_GRAPHICS
	- Changed gdata from pointer to struct
	- Defined new structs G_SPIKE_INFO etc. for graphics-related
		signal info, to avoid template/constructor problems in graphics code
	- Changed BOOLEAN to bool everywhere

	Graphics now work in a rudimentary way.

	Changes most files.  New file: gdata.cpp

Eric K  13 Sep 03
	-Moved client into client directory and modified makefiles
	 accordingly.

Eric K  15 Sep 03
	-Moved win_build into client directory and modified seti_boinc.dsp
	 accordingly.

Jeff 17 Sep 03
    No code changes.  This is the branch point for the beta.  The tag is:

        setiathome-4.xx_all_platforms_beta

    for both seti_boinc and boinc.  They both make on solaris without serious 
    error and the resulting seti client links without error with the resulting 
    boinc libs.  I ran the seti solaris 2.7 client on the reference WU and 
    it produces a reasonable looking result file.  The science content has 
    not yet been fully validated but that is OK.  "Best of" signals in the 
    result looks good.  Checkpoint and restart work.
	
Eric K. 22 Sep 03

    Checked in several mods to the setiathome-4 beta branch and the main branch
    required to get the splitter working properly under boinc.

	config.h.in
	configure
	configure.ac
	db/db_table.h
	db/sqlrow.cpp
	db/tools/Makefile
	db/tools/Makefile.in
	db/tools/analysis_configs.xml
	db/tools/insert_analysis_config.cpp
	db/tools/insert_s4_receivers.cpp
	db/tools/insert_splitter_config.cpp
	db/tools/print_s4_receivers.cpp
	db/tools/recorder_configs.sql
	db/tools/splitter_configs.xml
	splitter/Makefile.in
	splitter/splitparms.h
	splitter/splitter.cpp
	splitter/splitter.h
	splitter/wufiles.cpp
	win_build/seti_boinc.dsp

Jeff 24 Sep 03
    We now pass a <best_signal> tag to the XML print routine for the printing
    of the best signals.  

	client/
		analyzeFuncs.cpp

Eric K 09/25/03
	Binary types in db tables are now of class sqlblob

	 Makefile.in
	 client/Makefile.in
	 client/analyzeReport.cpp
	 client/seti.h
	 db/db_table.h
	 db/schema_master.cpp
	 db/schema_master.h
	 db/schema_master.sql
	 db/schema_to_class.awk
	 db/sqlblob.cpp
	 db/sqlblob.h
	 db/tools/Makefile
	 db/tools/Makefile.in

Eric K 09/28/03
	Added operator =() to all db_table<> children.
	Changed db_*::operator =() to call the child = operators.

        db/db_table.h
	db/schema_to_class.awk
	db/schema_master.h
	db/schema_master.cpp

Jeff 9/29/03
    Boolean standalone now initialized to false. 

    If we have no WU to read (fopen() failed) in read_wu_state(), we set retval
    to FOPEN_FAILED and return.  This is certainly good to do and prevents  
    seg faults due to empty SWI's.  But we need to also check SWI data before
    using it.

	client/main.cpp
	client/worker.cpp

David  Sept 30 2003
    - include graphics-related stuff only if BOINC_APP_GRAPHICS is defined

    main.cpp

David  Oct 2 2003
    - read_wu_state(): if there's no input file, return an error
    - got rid of windows .exe

    client/
        worker.cpp
    client/win_build/Debug
        seti_boinc.exe (removed)

Eric K.  Oct 2 2003
    - moved xml_indent() from sqlrow.cpp, sqlrow.h to boinc/lib/xml_util.[Ch]

    db/sqlrow.cpp
    db/sqlrow.h

David  Oct 4 2003
	- Reorganized graphics code to facilitate graphical variation
		Factored user prefs into GRAPHICS_PREFS
		Combined all graphics-related stuff into SAH_GRAPHICS
		This inherits from GDATA, GRAPHICS_PREFS etc.
		so that its member functions (all render-related code)
		can access data without qualification.

		There are three top-level graphics "styles":
			Classic: 3D version of original graphics
			Panels: text is on rotating panels
			Headsup: text is 2D in corners of screen
		Each of these styles has numerous user-configurable settings.

		Not everything is working yet but the code is in better shape.

	client/
		analyzeFuncs.cpp
		gdata.cpp,h
		main.cpp
		sah_gfx.cpp,h
		win_build/
			seti_boinc.dsp

David  Oct 6 2003
	- Implement rotating-panels display for SETI@home
	- Factor out generation of text in display

	client/
		analyzeFuncs.cpp
		sah_gfx.cpp,h
		win_build/
			seti_boinc.dsp
			p004_640.jpg (new, just a sample background image)

David  Oct 7 2003
	NOTE: there are three different structs for each signal type.  E.g.:
		class gaussian (in schema_master.h)
			has PoT array in unsigned chars
		struct GAUSS_INFO (in seti.h)
			contains "gaussian" as an element.
			Also has score, bin, and the PoT array in floats
		G_GAUSS_INFO (in gdata.h)
			Has the minimal set of info needed to display a Gaussian.
			A few fields from GAUSS_INFO, plus an "is_best" flag,
			and a "dirty" flag (has this been displayed yet?)
			Has a "copy" member function for copying from a GAUSS_INFO

		The variable best_gauss (of type GAUSS_INFO) etc. (in analyzeReport.cpp)
			stores the best Gaussian found so far (zero power if none)
			Stored and read from the state file.
		The variable SAH_GRAPHICS::gi (of type G_GAUSS_INFO)
			stores the Gaussian currently being displayed (zero power if none)

		Normally SAH_GRAPHICS::gi is copied from best_gauss,
			and its is_best flag is true.
		However, during analyze_pot(), SAH_GRAPHICS::gi is just the
			most recent Gaussian computed, and is_best is false.

	- Set the "dirty" flag of SAH_GRAPHIC's signals whenever copy to them
		(i.e. don't need to do this separately)
	- Remove "is_best" field of GAUSS_INFO etc.
	- Copy PoT arrays using a for loop, not a memcpy()
	- In graphics code: factor out the decision about which signal to display
		into a separate function (choose_signal_to_display()).
		Display a dirty signal if there is one,
		otherwise rotate among those that are actually there.

	client/
		analyzeReport.cpp
		gaussfit.cpp
		gdata.cpp,h
		sah_gfx.cpp,h
		seti.h
David  Oct 7 2003
    - show CPU time in Classic-style graphics
    - improve code factoring in Classic-style graphics
    - add "present" flag to TEXTURE_DESC
    - fix function names
        
    client/
        gdata.h
        sah_gfx.cpp
        win_build/seti_boinc.dsp

Oliver Oct 8 2003
    - draws logos and user icons
    - fixed headsup display

    client/
       sah_gfx.cpp
       win_build/seti_boinc.dsp

David  Oct 8 2003
	- Use new texture-drawing interface

	sah_gfx.cpp,h

Jeff  Oct 9 2003
        Fixed bug in calls to <signal>::parse_xml().  The string passed to these
        routines must include the outer signal tags (eg <gaussian></gaussian>.

        client/
                seti.cpp

Jeff  Oct 10 2003
	Checkpoint triplet PoTs.

	client/
		seti.cpp

David  Oct 10 2003
	- The functions that copy signals to the graphics structure now
		have a "best_of" flag
	- The functions that copy signals to the graphics structure now
		check whether what they're copying is the same as what's already there;
		if so they don't set the "dirty" flag
		(otherwise the copy of the best-of signals after each PoT analysis
		disrupt the 5-second cycle of signals)
	- Fixed the code that implements 5-second cycle of signals
		(it was doing integer arithmetic on a huge double, yielding negative results)
	- Alpha of pillars is one (opaque)
	- made a STARFIELD class
	- changed GRAPH_2D to RIBBON_GRAPH
	- Added support for tick marks in RIBBON_GRAPH
	- tested parsing of XML preferences.
		Preferred way of changing graphics is to edit app_init.xml

	client/
		AnalyzeFuncs.cpp
		AnalyzeReport.cpp
		gdata.cpp,h
		sah_gfx.cpp,h
		win_build/
			init_data.xml

Jeff  Oct 10 2003
	- Fixed bug that was preventing the choosing of the first best
	  spike (a legitimate spike score can be < 0).

	client/
		spike.cpp

Oliver Oct 10 2003
	- Updated panel display, moved camera to origen

	client/
		sah_gfx.c,h

David  Oct 14 2003
	- changed angle param from "rate" to "period"
	- put complete set of graphics prefs in init_data.xml
	- updated graphics prefs code to use same set of parameters and names
		as the Web code (astropulse/html/project_specific_prefs.inc)
	- removed cruft


	client/
		main.cpp
		sah_gfx.cpp,h
		seti.cpp
		win_builc/init_data.xml

Oliver Oct 14 2003
	- fixed stars, moved camera back to original location
	
	client/
		sah_gfx.cpp
		
Oliver Oct 16 2003
	- more improvements on star generation
	- fixed resize via. applying a universal glScale
	
	client/
		sah_gfx.cpp,H

Jeff  Oct 16 2003
	- tested, debugged and added documentation to the validator
	  and assimilator.
	- Built production executables and installed them in the 
	  "astropulse" beta test.
	- Added the informix lib paths to the boinc master cron
	  program.  This is needed for the assimilator.
	- Note that at this point server side executables (and all 
	  parts that make them up) have to be built on koloth (the 
	  production host).  This is because koloth has a different 
	  gcc (and libs) than our other machines.  Our standard gcc 
	  is v 3.0.4 (bundled with libstdc++.so.3) while on koloth 
	  we have gcc 3.3 (bundled with libstdc++.so.5).  Running on 
	  koloth after building elsewhere gives:
	  	fatal: libstdc++.so.3: open failed: No such file or directory
	- Note that various Makefile.in's specify the mysql library as
	  being /usr/local/mysql.  But for koloth it needs to be 
	  /usr/local/mysql_32bit.  Linking against /usr/local/mysql 
	  on koloth (a 64 bit mysql) gives  
		ld: warning: file /usr/local/mysql/lib/libmysqlclient.a(libmysql.o):
		wrong ELF class: ELFCLASS64
	  There will be a sysadmin fix for this to make /usr/local/mysql 
	  correct on all hosts.
	  	
	code:
	assimilator/
		sah_assimilate_handler.cpp,h
	validate/
		sah_boinc_db.cpp,h
		sah_result.cpp,h
		sah_validate.cpp

	systems:
	koloth:~boincadm/projects/
		AstroPulse_Beta/
			config.xml
		cron/
			cron-boinc

David  16 Oct 2003
	- Factored out the part of graphics that is common to both SETI@home and Astropulse
		(SAH_GRAPHICS_BASE, in sah_gfx_base.cpp)
		This will make it easier to maintain consistent graphics and preferences
		between the two apps

	client/
		sah_gfx.cpp,h
		sah_gfx_base.cpp,h (new!)
		win_build/seti_boinc.dsp

Jeff  17 Oct 2003
	- Best triplet PoT starting tag now has encoding type and length.
	- Flush the results file (outfile) only at checkpoint time and workunit
	  completion time. 
	- Cleared out various old comments and debug lines.

	client/
		analyzeFuncs.cpp 	
		analyzeReport.cpp 
		seti.cpp

Oliver 17 Oct 2003
	- Fixed panel size
	client/
		sah_gfx.cpp

Jeff  17 Oct 2003
	- Checkpoint the gaussian display power threshold.  This used 
	  to be set to zero at program start/restart and then get bumped
	  to a higher value with the first gaussian (but then get set 
	  back to zero on the next restart).  Thus, if the best gaussian
	  in the WU was in fact below tha higher thershold, the same
	  WU could yield different best gassians depending on restart
	  history.  This would have interfered with redundacy based
	  validation.

	client/
		analyzeReport.cpp 
		gaussfit.cpp 
		seti.cpp 
		seti.h 

Jeff  18 Oct 2003
	- Code cleanup.  Removed some long commented out code and unneeded
	  header files.

	client/
	 	analyzeReport.cpp,h 
		gaussfit.cpp 
		seti.cpp,h 
   		spike.cpp

David  20 Oct 2003
    - Don't use len_prof as pulse PoT length; use PULSE_POT_LEN

    client/
        gdata.cpp,h
        sah_gfx.cpp

Jeff  22 Oct 2003
	- Specify app version as 2.00.
	- Use new xml_util routines to output the triplet PoTs to the 
	  state file as comma separated values.  The min and max PoTs
	  are now printed to the state file as 2 separate PoTs.

	configure.ac
	client/
		seti.cpp

David  23 Oct 2003
	- fixed bug where an MFILE::printf() was overrunning its static buffer.
		(use MFILE::write() instead; also upped buffer size to 20K)
	client/
		seti.cpp


Oliver 24 Oct 2003
	- updated so that it will pass the name of the axis labels in when graph is created
	
	client/
		analyzeFuncs.cpp
		sah_gfx.cpp
		sah_gfx_base.cpp,h

David  25 Oct 2003
	- split the graphics initialization into two parts:
		1) worker thread, which sets up the data structure
			shared between worker and graphics
		2) graphics thread, which does OpenGL calls (must be in graphics thread).
		This fixes a race condition where sometimes the worker thread
		would access the shared data structure before it was initialized.
	- check for logos present before drawing.
		Fixes bug with white boxes drawn in place of logos

	client/
		main.cpp
		sah_gfx.cpp
		sah_gfx_base.cpp,h

Jeff  27 Oct 2003
	- use match_tag() rather than parse_str() to find the triplet PoT's
	  in the state file.
	- bump version to 2.01.

	configure.ac
	client/
		seti.cpp

Eric K. 27 Oct 2003
	- tried to fix the indentation problem by storing and recovering the
	  xml_indent_level at the beginning and end of write_state_file()

	client/
		seti.cpp

Jeff  27 Oct 2003
	- renamed output file to result.sah

	client/
		s_util.h

David  28 Oct 2003
    - call boinc_resolve_filename() for input, output files

    client/
        worker.cpp

Jeff  29 Oct 2003
	- bumped version to 2.03
	
	configure.ac

Oliver 29 Oct 2003
	- fixed scaled logos

	client/
		sah_gfx_base.cpp

Jeff  29 Oct 2003
	- gather up the entire triplet PoT from the state file before 
	  sending it off to the XML parser.
	- bump version to 2.04

	client/
		seti.cpp
	configure.ac
		
Jeff  30 Oct 2003
	- simplified the coding and raised the buffer size to 8K in
	  parse_state_file().

	client/
		seti.cpp

David  31 Oct 2003
	- reorganized graphics to accommodate new BOINC mechanism
		for adaptation to changing user preferences.
		SAH_GRAPHICS now includes graphics objects rather than pointers,
		since the may need to be init()ed repeatedly.
		The code organization is described in a block comment
			at the top of sah_gfx.cpp
	- in panel display, panel colors are 1/3 and 2/3 points of hue range

	client/
		analyzeFuncs.cpp
		main.cpp
		sah_gfx.cpp,h
		sah_gfx_base.cpp,h
		win_build/
			seti_boinc.dsp

David  1 Nov 2003
	- more "graphics follow prefs" changes

	client/
		sah_gfx.cpp
		sah_gfx_base.cpp

David  4 Nov 2003
    - removed old code (reduce_output() etc.) that output the
        top N signals globally
    - removed *_start() and *_end() functions from source files.
        These are relics of an old and failed code-checksum scheme
    - use string instead of char[256] a few places

    client/
        analyzePot.cpp
        analyzeReport.cpp
        gasdev.cpp
        gaussfit.cpp
        malloc_a.cpp
        pulsefind.cpp
        ran1.cpp
        seti.cpp
        seti_header.cpp
        worker.cpp

David  4 Nov 2003
    - released version 2.05 in beta test

Jeff  5 Nov 2003
    - beta released setiathome_2.06_sparc-sun-solaris2.7.  Looks like 
      setiathome_2.06_windows_intelx86 was released yesterday.

David  6 Nov 2003
	- track BOINC API changes

	client/
		sah_gfx.cpp
		win_build/
			seti_boinc.dsp

David  6 Nov 2003
    - release windows version 2.07

Jeff 17 Nov 2003

    - Added the GNU GPL to files in client/, db/ (except db/tools/), m4/, 
      and some top level files.  Removed some obsolete files.

	client/
		*		added GPL except...
		fft8g.cpp	added ooura license
		*.{cpp,h}	removed CVS/RCS log lines
		gasdev.cpp	removed
		ran1.cpp	removed
		nr.h		removed
		lcgamm_test.cpp	removed
		Makefile.in	removed references to nr stuff
	db/*			added GPL  (but not to files in tools/)
	m4/*			added GPL
	
	
    - I also created a public release distribution that includes everything
      needed to build the client side application.  We should automate this.
      For reference, the distro contains no CVS directories and does contain:
	COPYING
	config.guess
	config.h.in
	config.sub
	configure
	configure.ac
	install-sh
	Makefile.in
	aclocal.m4
	config.h
	client/*	
		*except* :
		win_build/
			Logo2.bmp
			Logo2.jpg
			p004_640.jpg
	db/*
		*except*:
		tools
	m4/*	
		


Karl 2003-11-21
    - recompiled with BOINC api bug fix.
    - 2.08 client release (non-Windows only)

David  25 Nov 2003
    - change <iostream.h> to <iostream>
    - restored missing };
	- removed deleted files from .dsp file

    client/
        analyzeFuncs.cpp
        analyzeReport.cpp
        spike.cpp
        sah_gfx_base.h,cpp
        win_build/
            seti_boinc.dsp

Jeff  27 Nov 2003
     - New release - bumbed version to 2.10

     configure.ac

Jeff  01 Dec 2003
     - Added debug code and fixed path bugs in validator and assimilator.
       The production validator should be working at this point.

     validator/
         sah_boinc_db.cpp
         sah_boinc_db.o
     assimlator/
         sah_assimilate_handler.cpp

Karl 2003-12-02
    - created script to trim sources of files we don't want to
      distribute. (it's a badass 'find' line)
    - created nightly tarball script.

    trim-sources (added)
    nightly-tarball (added)

Jeff 03 Dec 2003
    - released a statically linked version of the app for linux.  Bumped
      version to 2.11

    configure.ac

Jeff 08 Dec 2003
    - We have the same gcc version problem with solaris that we do with
      linux whereby if the  version number of libstdc++.so on the run
      machine is different than that on the build machine, the loader
      fails.  However, on solaris you cannot just say gcc -static as there
      are dynamic only versions of some needed libs, namely libdl and 
      libaio.  I tried to use the -Xlinker gcc option which theoretically
      should allow us to specify the link (collect2) line in precise
      detail.  But -lstdc++ kept showing up twice with one occurrence
      being outside my -Xlinker -B -Xlinker static directive.  So I 
      hand crafted a collect2 line and placed it in a file - collect2_line. 
      Sourcing this file produces an executable that will load and run
      across gcc versions (and solaris versions for that matter).  I
      don't like it but it works.

      client/
	collect2_line	(new file)

Jeff 09 Dec 2003
      - Released version 2.12 for solaris 7, with a statically linked 
        stdc++.

      configure.ac
      client/
	collect2_line

Eric K. 13 Dec 2003
      -  Changed from error return to exception based error handling.
      -  The seti_error class is defined in s_util.[h,cpp]
      -  Not yet tested under Windows...

      client/
        analyzeFuncs.cpp
        analyzePoT.cpp
        analyzeReport.cpp
        chirpfft.cpp
        gaussfit.cpp
        main.cpp
        pulsefind.cpp
        s_util.cpp
        s_util.h
        seti.cpp
        seti_header.cpp
        spike.cpp
        worker.cpp

12/16/03 jeffc
      - The SETI_WU_HEADER was declared gloabally as "seti_wu_header"
        but was passed around by reference, usually under the name
	"swi".  This passing around was historical and had become
	confusing and needless.  This change is the first of 2 steps
 	to have all code access the global SETI_WU_HEADER as "swi".
	I removed the passing of the entire swi from all function
	calls that had it.  Still to do is to remove the passing of 
	individual fields of swi.

      client/
	analyzeFuncs.cpp,h 
	analyzePoT.cpp,h 
	analyzeReport.cpp 
	chirpfft.cpp,h 
	gaussfit.cpp
	seti.cpp,h 
	seti_header.cpp,h 
	spike.cpp
	worker.cpp

12/16/03 jeffc
     - The assimlator to insert into the science DB.

     assimilate/
	sah_assimilate_handler.cpp

Jeff  18 Dec 2003
     - Commented out the catch "(boinc_error e) {}" in main.cpp.  Windows compiles
       were failing on it.
     - Removed the second parameter, "wu", from the cnvt_fftlen_hz() call in
       in sah_gfx.cpp.  The prototype of cnvt_fftlen_hz() has changed and 
       wu was wrong (and unused) anyway.

     client/
	main.cpp
	sah_gfx.cpp

Jeff  19 Dec 2003
     - New windows release - setiathome_2.13_windows_intelx86.
       This was built on machine "bart", winXP, VC6.
     - Note that with this release I started archiving both release
       and debug builds (with symbol table files) in apps_release_sets/ 
       in the project directory.  The contents fo this windows release
       is:
	apps_release_sets/setiathome_2.13_windows_intelx86/release/
		setiathome_2.13_windows_intelx86
		vc60.idb
	apps_release_sets/setiathome_2.13_windows_intelx86/debug/
		setiathome_2.13_windows_intelx86.exe
		setiathome_2.13_windows_intelx86.pdb
		vc60.idb
		vc60.pdb

Jeff  22 Dec 2003
     - New windows release - setiathome_2.14_windows_intelx86.
       This is the debug build associated with release 2.13.

David  23 Dec 2003
    - fixed bug in seti_parse_data():
        "catch" clause was freeing a pointer that wasn't always assigned

    client/
        seti.cpp

Jeff  26 Dec 2003
    - Made sure that we always initialize retval to 0.

    client/	
	analyzeFuncs.cpp 	
	analyzeReport.cpp 
	seti.cpp 
	worker.cpp

Jeff  26 Dec 2003
   - Added boinc/lib/filesys.C,h to windows VC++ project.
   - Bumped version to 2.17.
   - Released windows app 2.17 (debug version).

   client/
	configure.ac
   client/win_build/
	seti_boinc.dsp

Eric (via Jeff)  26 Dec 2003
   - Implement copy and assignment constructors for SPIKE_INFO.

   client/
	seti.h
	spike.cpp
	analyzePoT.cpp

Jeff 28 Dec 2003
   - Make sure that retval is checked after calls to MFILE::printf.

   client/
	analyzeFuncs.cpp
	seti.cpp 

Jeff 28 Dec 2003
   - release windows app 2.18

Jeff 29 Dec 2003
   - release solaris app 2.18 (semi-static build)

   configure.ac		(bump version)
   configure

Jeff 30 Dec 2003
   - release linux app 2.18 (static build).
     The build was done on host shaggy.  There is some malfunctioning of autoconf/configure
     such that I had to hand code -DHAVE_ATOLL and -DHAVE_DIRENT_H into client/Makefile and  
     VERSION_MAJOR VERSION_MINOR into config.h.

Jeff 5 Jan 2004
   - Commented out the generation of reconfigure code in the top level Makefile.

   Makefile.in

Jeff 5 Jan 2004
   - Removed depricated code used in processing old style (nonXML) WU headers.
   - Removed depricated code used in processing command line science params (science
     tuning is now done in the WU header).
   - Overloaded the seti_parse_wu_header() and seti_write_wu_header() functions.  One version
     of each makes use on the global SETI_WU_INFO structure and one version of each
     takes a SETI_WU_INFO reference as a parameter.
   - Moved the global SETI_WU_INFO from seti.cpp to seti_header.cpp so that the splitter
     could see it.  Linking the splitter to seti.o produced a number of unresolved
     symbols.  We should probably put all global objects in some file called global.cpp. 
   - Added a CC= line to the splitter's Makefile.in and removed some test programs.

   client/
   	main.cpp 
	seti.cpp 
	seti_header.cpp,h 
   splitter/
	Makefile.in

Jeff 9 Jan 2004
   - The splitter places the seti WU ID into the boinc WU opaque field.  Now
     the assimlator reads that ID from the boinc WU opaque field and places
     it into the seti result wuid field, providing a reference from result
     to workunit.

   assimlator/
	sah_assimilate_handler.cpp

Jeff  13 Jan 2004
   - A many line set of changes to have the code use the analysis 
     configuration parameters in the WU header rather than those in analyze.h.  
     Specifically:
	- Removed all analysis paramters from analyze.h.  For reference,
	  these were:
		#define BOX_CAR_LENGTH   8192      
		#define POINTS_IN_CHUNK 32768     
		#define SPIKES_TO_REPORT  1
		#define SIGMA_THRESH     22         
		#define THRESH_IN_MEAN       3     
		#define THRESH_IN_TRUEMEAN   3.2f   
		#define CHI_SQ_THRESH        8.8f  
		#define PULSE_MAX       40960
		#define PULSE_MIN       16
		#define PULSE_FFT_MAX   8192
		#define PULSE_THRESH    17.0
		#define PULSE_DISPLAY_THRESH 0.5f
		#define TRIPLET_MAX     131072
		#define TRIPLET_MIN     16
		#define TRIPLET_THRESH  7.75
		#define OVERLAP_FACTOR  0.5
		#define PULSE_BEAMS     1.0
		#define GAUSS_POT_LEN   64
		#define PULSE_POT_LEN   256
		#define TRIPLET_POT_LEN 256
		#define POT_LEN             64      
		#define T_OFFSET             1      
		#define MIN_SLEW            0.0021f  
		#define MAX_SLEW            0.0105f  
		#define BEAM_WIDTH 0.1    
		#define GAUSS_SIGMA          6.78
		#define GAUSS_SIGMA_SQ      45.9684
	- In all places where analyze.h paramters where used,
	  switched to the corresponding swi.analysis_cfg field.
	- Many of the PoTInfo fields had been initialized at compile
	  time with analyze.h values.  PoTInfo is now initialized at
	  compile time with zeros and and with swi.analysis_cfg values
 	  at run time in ComputePoTInfo().
	- The signal info objects (SPIKE_INFO, etc) used to be globally 
	  instantiated at compile time in analyzeReport.cpp.  These 
	  are now global pointers (in analyzeReport.cpp).  They
	  are instantiated via reset_high_scores() at run time.  reset_high_scores() 
	  first deletes the signal info objects if they exist and then 
	  (re)new's them into existance.  
	  This change was needed because PoT array sizing within these objects
	  is now a run time function.
	- All '.' notation to get to signal info fields had to be changed 
	  to "->" throughout the code.
	- Moved the signal info method code from seti.h (where it was inline)
	  to seti.cpp (where it is not).  

   client/
	analyze.h 
	analyzeFuncs.cpp,h 
	analyzePoT.cpp
    	analyzeReport.cpp,h 
	gaussfit.cpp 
	pulsefind.cpp
    	seti.cpp,h 
	seti_header.cpp 
	spike.cpp,h

Jeff  14 Jan 2004
   - added the following #defines back, in gdata.h this time.
     There are graphics only global signal info structures whose
     PoT arrays are sized at compile time.  Making these dynamic
     would probably mean instantiating them via new in main.cpp
     right before the call to sah_graphics.worker_thread_init()
     or in sah_graphics.worker_thread_init() itself.  Note that
     at this point, graphics initialing happens *before* we 
     read in the WU and the included analysis config info.  That
     would have to change.
	#define GAUSS_POT_LEN   64
	#define PULSE_POT_LEN   256
	#define TRIPLET_POT_LEN 256
   
   client/
	gdata.h


Jeff  14 Jan 2004
   - Added 2 new fields to analysis_config table:
	pulse_beams          smallfloat 
	max_signals          integer      
     These fields have been added to analysis_config table in
     the sah2@master_tcp database but have not yet been given values.

   db/
	schema_master.sql
	schema_master.h
	schema_master.cpp

Jeff  15 Jan 2004
  - Changed to pointer syntax for <SIGNAL>_INFO structs in the 
    G_<SIGNAL>_INFO copy constructors.

  client/
	gaussfit.cpp
	spike.cpp
	analyzeReport.cpp
	gdata.cpp,h

Jeff  15 Jan 2004
   - Added new row (id = 4) to table analysis_config in the backend
     DB.  Changed:
	bsmooth_chunk_size	from 32767	to 32768
	pulse_beams		from NULL	to 1.0		(new field)
	max_signals		from NULL	to 30		(new field)

     max_signals may need to be adjusted.

   db/tools/
	analysis_configs.xml

Jeff  15 jan 2004
   - Added stackwalker source to the client win_build directory.
     This code was copied over from the boinc source tree.

   client/
	win_build/
		Stackwalker.cpp,h

David  15 Jan 2004
    - validator: if can't get output file, mark the result as invalid.
        This deals with situations where (usually because of a BOINC bug)
        there is no output file, and infinite retrying won't help.

    validate/
        sah_boinc_db.cpp
        sah_validate.cpp

David  19 Jan 2004
	- call initGL() in SAH_GRAPHICS_BASE::graphics_thread_init()
		(moved from windows_opengl.C, to remove OpenGL dependency)
	- add win_util.h to project

	client/
		sah_gfx_base.cpp
		win_build/
			seti_boinc.dsp

Jeff  20 Jan 2004
   - fixed a bug in the G_PULSE_INFO copy constructor where the pulse proper
     pot was being assigned rather than pot_max. 
   - removed references to GAUSS_INFO.pot as it was not being used anywhere.
     This was the floating point pot outside of the gaussian proper.

   client/
	gdata.cpp 	
	seti.cpp,h 

Jeff  21 Jan 2004
   - removed a redundant call to reset_high_scores() in parse_state_file().  The
     call in seti_init_state() suffices.
   - removed the call to report_init() in seti_analyze and replaced its functionality
     with a call to new function reload_graphics_state() in parse_state_file().  
   - removed unneeded calls to boinc_time_to_checkpoint() in seti_analyze().

   client/
	analyzeFuncs.cpp 	
	analyzeReport.cpp,h
	seti.cpp

Jeff  22 Jan 2004
   - app release 2.19.  Cvs tagged as app_release_2_19.

   client/
	configure 
	configure.ac

Jeff  22 Jan 2004
   - removed depricated and commented out code.

   client/
	analyzeFuncs.cpp 	
	analyzePoT.cpp 
	analyzeReport.cpp 
	main.cpp
   	seti.cpp 
	seti_header.cpp 	
	spike.cpp

Jeff  26 Jan 2004
   - changed all calls to match_tag() to xml_match_tag().
   - (via Eric) implemented assignment and copy constructors for TRIPLET_INFO.
   - moved call to seti_init_state() to after the call to seti_parse_wu().
     This is was necessary because seti_init_state() needs configuration
     data contained in the WU header.  This may fix a number of access
     violations and seg faults. 

   client/
 	analyzeReport.cpp
   	seti.cpp,h
   	seti_header.cpp
   	worker.cpp

Jeff  28 Jan 2004
   - Fixed a bug in the copy constructor for PULSE_INFO
   - Got stackwalker working (Rom Walton did this).
   - got rid of the dependency on the windows debug runtime (Rom).
   - Bumped version to 2.21 for release.
   - Cvs tagged as app_release_2_21.

   client/
	main.cpp
	seti.cpp
	configure.ac
        configure
	win_build/
		seti_boinc.vcproj

Jeff  30 Jan 2004
   - Invoke stackwalker in stack trace mode only.  It was crashing with
     with an access violation during memory allocation tracing. (Rom Walton)
   - Made progress more linear by treating pulse finding as it should be - 
     an (n^2)log(n) operation.
   - Update global progress upon each return from find_pulse.  This happens
     several times for reach frequency bin, ie much more often than before.
   - CVS tagged source as app_release_2_22 and released as version 2.22 on
     the windows platform. 

   configure.ac
   configure
   client/
	main.cpp (Rom)
	analyzeFuncs.cpp
	analyzePoT.cpp
	progress.cpp,h	(new files)
	Makefile.in
	win_build/
		seti_boinc.vcproj	(added new files)

Jeff  01 Feb 2004
   - Changed the pulse finding progress scale factor from 1/1e6 to 1/.65e6.
   - Removed commented out code.

   client/
	progress.cpp
	analyzeFuncs.cpp 
	analyzePoT.cpp 

Jeff  02 Feb 2004
   - Progress clean up.

   client/
	analyzePoT.cpp 	
	progress.cpp

Rom   02 Feb 2004
    - Hooked up to diagnostics library
    - Replaced ANSI C assert with BOINCASSERT

    client/
        analyzePot.cpp
        analyzeReport.cpp
        lcgamm.cpp
        main.cpp
        spike.cpp
    client/winbuild
        seti_boinc.vcproj

Rom   03 Feb 2004
    - Modified stackwalker so it attemps to use the dbghelp.dll that is included
        with BOINC before using the search path.

    client/winbuild
        stackwalker.cpp

Jeff  03 Feb 2004
    - Moved progress related globals from analyzeFuncs.cpp,h to progress.cpp,h.
    - Changed some floats to doubles to get rid of compile warnings.

    client/
	analyzeFuncs.cpp,h 
	analyzePoT.cpp 
	progress.cpp,h
	seti.cpp 	
	worker.cpp

Jeff  04 Feb 2004
    - Windows release.  - CVS tagged source as app_release_2_23.

Rom  05 Feb 2004
    - Remove stackwalker from the project as it has been moved to the boinc project
      api folder
    - updated project files to new locations

    client/win_build/
      seti_boinc.vcproj
      stackwalker.h
      stackwalker.cpp

Rom  06 Feb 2004
    - Removed boincdiag.cpp, h from project files.

    client/win_build/
      seti_boinc.vcproj

Jeff 08 Feb 2004
    - Impelmented overflow detection.  Upon reaching a maximum signal
      count the app will throw a RESULT_OVERFLOW exception on the 
      next attempt to write a signal.  Max_signals is an anlaysis
      config parameter.  It is not yet being provided in the WU headeer
      so the app has it hard coded with the value 30.  The current 
      signal count is saved to and read from the state file.
    - PoTInfo.PulseBeams now gets its value from an analysis config
      paramter.  It is not yet being provided in the WU headeer
      so the app has it hard coded with the value 1.0.
    - Renamed write_state_file() to checkpoint() as this routine
      is doing more than writing to the state file.
    - Routine checkpoint() now has a paramter to tell it to force
      the checkpoint without a call to boinc_time_to_checkpoint().

    client/
	analyzeFuncs.cpp 
	analyzePoT.cpp 
 	analyzeReport.cpp,h
    	main.cpp 	
	s_util.cpp,h 
	seti.cpp,h
   	seti_header.cpp

Jeff 11 Feb 2004
    - kludge fix to the pulse display PoT assert failures.  If we see
      a value over 255, we set it to 255.
    - change all match_tag() calls to xml_match_tag() calls in the db/
      code. 
    - bumped version to 2.24.
    - Windows release.  - CVS tagged source as app_release_2_23.
    
    client/
	analyzeReport.cpp
	win_build/
		seti_boinc.vcproj
    db/
	schema_master.cpp 
	schema_to_class.awk
    configure 
    configure.ac
    
Jeff 12 Feb 2004
    - max_signals and PoTInfo.PulseBeams both now get their values
      from the analysis_cfg in the swi.
    - make sure that the work areas are freed before exiting GenChirpFftPairs().

    client/
	seti_header.cpp
	chirpfft.cpp

Rom  19 Feb 2004
    - Attempt to track down error 128 by specifying GLU32.DLL, GLUT32.DLL,
      OPENGL32.DLL, and OLE32.DLL (Debug Build Only) as Delay-Load DLL's.
      This causes an exception to be thrown if the DLL isn't found instead
      of the OS poping up a dialog the user has to deal with.

    client/win_build/
      seti_boinc.vcproj
	
Jeff  Feb 19 2004
    - CVS tagged as seti_boinc_app_release_2_25.

Rom  19 Feb 2004
    - When throwing exceptions, make the exception contain line and file
      information.

    client/
      analyzeFuncs.cpp
      analyzePoT.cpp
      analyzeReport.cpp
      chirpfft.cpp
      gaussfit.cpp
      main.cpp
      pulsefind.cpp
      s_util.cpp, h
      seti.cpp
      seti_header.cpp
      spike.cpp
      worker.cpp

Rom  19 Feb 2004
    - Revert one try/catch block back to the orginal int type instead of what I
      converted it to so it'll actually execute the cleanup code for DATA_SUN_BINARY
      encodings.

    client/
      seti.cpp

Rom  23 Feb 2004
    - Sample exception in main.

    client/
      main.cpp

Jeff   Feb 25 2004
    - CVS tagged as seti_boinc_app_release_2_26. This tag is a little late but
      the sources should be little if any changed.

Rom  06 Mar 2004
    - Include file overhaul on the Windows platform.  This fixes the build breaks introduced
        by the changes to the BOINC include file structure on the Windows platform

    I pretty much touched all the source and header files.  This checkin should not have any
    effect on any platform other than Windows.

Rom  08 Mar 2004
    - Fix build breaks on Solaris/Linux

    Lib/
        sah_gfx.cpp
        sah_gfx_base.cpp

Eric 08 Mar 2004
    - Fixed pulse reported POT for
      len_prof>analysis_config.pulse_pot_max.  
      pulse.len_prof is now set to zero and the pi.pot is .clear()ed.
    - changed match_tag in db_table.h to xml_match_tag to fix parsing problem

    client/
      analyzeReport.h
      analyzeReport.cpp
    db/
      db_table.h

Jeff 09 Mar 2004
    - Bumped to version 2.27.  
    - CVS tagged as seti_boinc_app_release_2_27.

    configure.ac
    configure

Rom  09 Mar 2004
    - Reduce user confusion by marking the results_overflow exception as an informational
      message instead of an error.

    client/
        main.cpp

Rom  13 Mar 2004
    - Updated time_sources script so that the image libraries could be included in the nightly drops.

Jeff  Mar 15 2004
    - CVS tagged boinc and seti_boinc as boinc_app_release_2_28.

Jeff  Mar 18 2004 
    - Validator overflow code.

    validate/
	sah_validate.cpp	

Jeff  Mar 19 2004
    - Result file now has bounding <result></result> tags.

    client/
	worker.cpp
	analyzeFuncs.cpp

    BTW, here is how to build the mac osx client/app in such a way that you
    can specify the build name:
	configure --build powerpc-apple-darwin

Jeff  Mar 22 2004
     - Improved debug logging in the validator.

     validate/
	sah_validate.cpp	

Rom   Mar 22 2004
    - Force the memory allocation functions to include file and line information for each
        allocation.
    - Turn on the memory leak detection report for Windows built binaries
    - replaced malloc_a/calloc_a/free_a with their Windows CRT equivs.  This only applies to
        Windows when being compiled as Debug.
    - Fixed a couple of bugs where the copy constructors and assignment operators were only
        coping a fraction of what they intended to copy

    client/
        analyzeFuncs.cpp
        analyzePoT.cpp
        analyzeReport.cpp
        main.cpp
        malloc_a.h
        pulsefind.cpp
        seti.cpp
        stdafx.h
    client/win_build/
        seti_boinc.vcproj

Rom   Mar 22 2004
    - Attempt to force load glut32.dll in a specific location, if it fails catch the SEH exception
        and just disable grapgics.

    client/
        sah_gfx_base.cpp
        stdafx.h

Rom  Mar 23 2004
    - client applications don't really need to dump leak detection information
        for public consumption.  So remark it out for public release.
    - Tag for a 2.29 release.

Rom  Mar 23 2004
    - Unify all diagnostics functionality under the same banner, SETI_BOINC,
        BOINC_CLI, BOINC_GUI, upper_case now all initialize the BOINC Diagnostics
        Library which sets up stdout and stderr redirection, heap corruption
        detection, stackwalker for Windows, and stackalker fo *nix can be pluged
        in and be automatically used by all applications.
    - Taskbase#1131 -- closed
    - Taskbase#1132 -- closed

    client/
        analyzeReport.cpp
        lcgamm.cpp
        main.cpp
        stdafx.h
    client/winbuild/
        seti_boinc.vcproj

Jeff  Mar 24 2004
     - Fixed nightly tarball generation so that autoconf,configure,make
       will result in a successful build.  

     trim_sources	added awk line to trim configure.ac
     configure.ac	made sure lines to be trimmed are clear
			of autoconf special characters

Rom   Mar 25 2004
     - I have made SETI_BOINC Glut Free, Basically copied font code from glut
         and put it into the glut folder.
     - Removed Glut libraries
     - Removed Delay Load technologies

    client/win_build
        seti_boinc.vcproj
    client/win_build/glut
        <Removed Many Files>
    glut/
        <Added Many Files>

Rom   Mar 25 2004
     - Fix up project file so it'll build on a clean platform.

    client/win_build
        seti_boinc.vcproj

Jeff  Mar 26 2004
     - Release tags.  Sources were tagged as seti_boinc_release_2_30 and then,
       after some build problems were fixed, were tagged as seti_boinc_release_2_30a.
       The build from this latter tag was what was released as app version 2.30.

Jeff  Mar 26 2004
     - Removed parseOutfile from the project.

Rom   Mar 26 2004
     - Fix a minor bug where after the screen saver shutdown BOINC would fire-up
         a new SAH Window
    - Tag for a 2.31 release.

    client/win_build
        seti_boinc.vcproj

Rom   Mar 30 2004
     - Include the glut folder in the nightly tarball

     /
         trim_sources

Jeff  Mar 31 2004
     - Nightly tarball generation now runs autoconf to produce a configure script
       stripped of the trimmed directories.

     trim_sources

David  Mar 31 2004
	- handle mouse events, and offer a simple interface where
		dragging rotates the 3D objects

	client/
		sah_gfx.cpp
		sah_gfx_base.cpp,h

Jeff  April 2 2004
     - Kludge fix for the access violations we see in csv encoding.  In the
       checkpoint routine I check len_prof of the best_pulse and if it is
       zero we do not write that pulse to the state file.  

     - tagged as seti_boinc_app_release_2_32 and released to alpha.

     client/
	seti.cpp

Jeff  April 8 2004
     - Have splitter give full path to result template on read error.
     - Correct configure defined PROJECTDIR

     /
	aclocal.m4
	configure
    splitter/
	splitter.cpp 

Jeff  April 12 2004
     - tagged with:
        seti_boinc_app_release_3_00

David  April 12 2004
    - when get OVERFLOW exception we need to call boinc_finish(),
        else the core client won't regard the result as done

    client/
        main.cpp

David  April 14 2004
    - include "mfile.h"

    client/
        analyzeReport.h

Rom    April 20 2004
     - Turn on tracing of CRT warnings by default since the CRT considers
       heap corruption a warning offense instead of an error.

     client/
         main.cpp

David  April 22 2004
    - change all fopen()s to boinc_fopen().
        This is necessary to avoid EINTR failures on Unix,
        and locking-related failures on Windows

    client/
        chirpfft.cpp
        seti.cpp
        worker.cpp

Jeff  April 30 2004
	- Fixed bug where a call to encode() lacked a parameter.

	db/
		sqlblob.h

Jeff  May 13 2004
	- Overflow results are now marked thusly in the SAH master science DB.
	  Boinc result.opaque is used to pass the overflow flag from the 
	  validator to the assimilator.
	- Fixed bug that resulted in the following assimilator error message:
		Too many open SQL statements (> 20) for sql operations
	  The fix (via Eric) was to do an sql_close(fd) before each return(false)
	  in sql_run().

	validate/
		sah_validate.cpp
		sah_result.h
	assimilator/
		sah_assimilate_handler.cpp
	db/
		sqlifx.ec

David  May 15 2004
	- Some changes to reflect the new STARFIELD handling
		(which is done entirely in 2D).
		Call app_init_camera() in SAH_GFX_BASE::render(),
		instead of just once at the beginning.
		Since this is where viewpoint distance is handled,
		we no longer have to do it in the mouse handler.
	- add glFlush() to SAH_GFX_BASE::render()

	client/
		sah_gfx.cpp
		sah_gfx_base.cpp,h
		win_build/init_data.xml

Jeff  May 18 2004
	- corrected printf format for logging seti WU ID as contained in the 
	  boinc:result.opaque field.

	assimilate/
		sah_assimilate_handler.cpp

Jeff  May 18 2004
	- Testing notes.  I followed WU 11se03aa.9564.4544.428382.126 through the 
	  system (seti side DB, boinc side DB, files) and found that the following
	  (at least) are working properly:
		- seti workunit_grp points to tape
		- seti wu points to workunit_grp
		- seti result points to seti wu
		- seti result points to boinc result
		- the data description in the workunit_grp (DB) looks OK and appears
		  properly in the wu file
		- the following all look good in the seti DB and appear properly
		  in the wu file:
			- receiver_config
			- recorder_config
			- splitter_config
			- analysis_config
		  *except* that the <name> xml field in the wu file receiver_config
		  section has the string "apos" improperly embedded (task 1275).
		- the workunit_header's in the wu file and result file are identical
		  *except* that the wu name in the result file is incomplete (task
		  1274).
		- the 1 reported pulse signal also appears as the best pulse in the 
		  result file and is inserted properly in the DB.
		- the 1 triplet signal also appears as the best triplet in the 
		  result file and is inserted properly in the DB.
		- the 7 spikes are inserted properly in the DB and the highest
		  power spike appears as the best spike.
		- there was no gaussian in this wu.

Jeff  May 18 2004
	- Place app version number and received time as julian day into the result
	  record in the seti master DB.

	assimilate/
                sah_assimilate_handler.cpp
	

Jeff  May 21 2004
	- Targeted heap checking.  Placed the following code:
		#ifdef _WIN32
		BOINCASSERT(_CrtCheckMemory());
		#endif
	  at the beginning and end of the following functions:
		find_pulse()
		ReportPulseEvent()
		ReportTripletEvent()
		checkpoint()
		parse_state_file()
	  and at the beginning and end of all PULSE_INFO and TRIPLET_INFO
	  contructors and destructors. 

	- use time_t_to_jd() to calculate julian day in the assimilator.


	client/
		pulsefind.cpp
		analyzeReport.cpp
		seti.cpp

	assimilate/
                sah_assimilate_handler.cpp
		Makefile.in

Jeff May 25 2004
	- Obtain analysis configuration table for result pre-proccessing
	  (eg barycentric frequency calculation).
	- Pre-processing stub routines.
	- Check the new noinsert flag (command line parameter).

	assimilate/
                sah_assimilate_handler.cpp

Rom   May 25 2004
     - tagged with:
        seti_boinc_app_release_3_07

Rom    May 26 2004
    - updated config.guess based of David's checkin in BOINC
    - Update config.guess so we don't have to add the --build command to
      each execution of ./configure for the Macs

    /
    config.guess

David  May 27 2004
	- resize(), graphics_thread_init(): do OpenGL stuff ourselves

	client/
		sah_gfx_base.cpp

David  May 27 2004
	- change logo-rendering code to use (0,1)x(0,1)
		coord system instead of bizarre 3x4 stuff

	client/
		sah_gfx.cpp
		sah_gfx_base.cpp,h

Jeff  june 2 2004
	- Upped minimum quorum from 2 to 3.

	splitter/
		wufiles.cpp

David  June 2 2004
	- changed default graphics prefs

	client/
		sah_gfx_base.cpp

David  June 8 2004
	- change boinc_resolve_filename() calls

	client/
		seti.cpp
		worker.cpp

David  June 11 2004
    - moved xml_util* here from BOINC

    db/
        xml_util.C,h (new)

David  June 11 2004
	- added xml_util.C,h to Windows project file

	Note: doesn't build on Windows.
	Indecipherable error messages involving std::XXX stuff

	client/win_build/
		init_data.xml
		seti_boinc.vcproj
	db/
		xml_util.C

Rom    June 12 2004
    - Cleanup build errors on Windows

    client/
        chirpfft.cpp
        s_util.cpp
        sah_gfx.cpp
        sah_gfx_base.cpp
        stdafx.cpp
        timecvt.cpp
    client/win_build/
        seti_boinc.vcproj
    db/
        schema_master.cpp
        schema_to_class.awk
        sqlrow.cpp
        xml_util.C, .h

Jeff  June 15 2004
    - Check for memory allocation failures in signal info constructors.
    - Cleanup build errors on *nix.

    client/
	seti.cpp
    db/
	Makefile.in

Jeff (for Eric)  June 15 2004
    - New routine, db_change().

    db/
	schema_to_class.awk
	schema_master.cpp
	schema_master.h

Rom    June 15 2004
    - Tag for 3.08 release, all platforms
      seti_boinc_app_release_3_08

Jeff  June 15 2004
    - Strip leading zero from minor version.

    configure.ac

David  15 June 2004
    - added rule for .C files

    client/Makefile.in

Jeff   16 June 2004
      - Modifications to allow the same splitter executable to run under
        different projects, say beta and public.  The mods are:

        - The backend sciece DB name was hard coded in splitter.cpp and 
          is now a required command line parameter (-scidb=).  We are using
          the new db_change() routine to attach to the desired DB.
        - The project directory was hard coded in config.h (PROJECTDIR)
          and is now a required command line parameter (-projectdir=).
        - the download directory was hard coded in splitparms.h as 
          WU_DIR.  This was changed to WU_SUBDIR which equates to
          "download" and concatenated to the projectdir to get the 
          fully qualified download directory.

        splitter/
                splitter.cpp,h
                splitparms.h
                makebufs.cpp
                wufiles.cpp

Rom    16 June 2004
    - Fix awk script so it'll coreectly deal with stdafx.h

    db/
        schema_master.cpp
        schema_to_class.awk

David 16 June 2004
	- include miofile.C in project

	client/win_build/
		seti_boinc.vcproj

Jeff  17 June 2004
	- Change xml_util.C to xml_util.cpp.

	db/
		xml_util.C  deleted
		xml_util.cpp  added
		Makefile.in

Jeff  18 June 2004
	- Splitter now reads the science DB name from an application config file.
	  This config file and the parsing of it is modeled on the boinc 
	  config file.  It is called sah_config.xml and resides in the project
	  directory.

	- Routine db_change() now dies nothing is the requested DB is already
	  open.

	db/
		app_config.cpp,h	new files
		schema_to_class.awk
		schema_master.h
		Makefile.in

	splitter/
		splitter.cpp
		wufiles.cpp

Jeff  20 June 2004
	- Assimilator now reads the science DB name from an application config file.
	- Added pre_process stubs to assimilator (will be used for reference frame 
	  correction etc).

	assimilator/
		sah_assimilate_handler.cpp,h
		Makefile.in	

Jeff   21 June 2004
	- Changed fpops numbers on the splitter (these numbers appear in the WU.
	   db_wu.rsc_fpops_est   from 3.9e+12 	to 2.79248e+13
	   db_wu.rsc_fpops_bound from 6.4e+13	to 4.46797e+14
	  Keeping the ratio of bound to estimated at 16/1.

	splitter/
		wufiles.cpp

Karl 2004-06-24

    OpenBSD compile fixes from Daniel Hartmeier <daniel@benzedrine.cx>

    client/
        worker.cpp
    db/
        xml_util.h

Eric K 30 June 2004
    - Removed "using" directives from header files.  "using"
      directives should not be used in header files for the following reasons.
      - A "using namespace" directive cannot be revoked for any source file
	including the header.  It forces the use of the namespace regardless of
	the consequences.
      - Dropping the namespace qualifier on STL templates ambiguates the
        resolution of template functions.  (How many C libraries or headers 
	have you seen that define the function min()?)
      - Reducing typing is not a good reason to drop namespace qualifiers any
	more than it would be a good idea to "#define p printf"
      - Namespaces exist for a reason.  
      - It's acceptable to have "using" directive in a source file, since it
	won't affect other files.  It's better to have "using std::string;"
	directives than "using namespace std;" for hopefully obvious reasons.

Eric K 1 July 2004
   - changed the sql type of pot in gauss in triplet from char[64] to byte
   - added a print_raw() method to the sqlblob class
   - changed the gaussian null chisqr threshold to 2.075 to increase the number
     of gaussians found.
	client/gaussfit.cpp
	db/schema_master.cpp
	db/schema_master.sql
	db/schema_to_class.awk
	db/sqlblob.h
	db/sqlifx.ec
	db/sqlrow.cpp
	db/sqlrow.h
	db/tools/analysis_configs.xml

David  7 June 2004
	- compile fixes, and use new BOINC API

	client/
		main.cpp
		sah_gfx_base.cpp

Jeff  9 July 2004
	- Splitter uses new prototype to create_work() in order to specify 
	  the fully qualified path to the result template file.
	- Because the query to count unsent results takes a long time, we
	  only perform the query every once every 100 times into 
	  wait_for_db_wus_ondisk(). All other calls to this routine return
 	  immediately, indicating a need for work.  Further, while in the 
	  wait for work loop, we perform the query only every 10 minutes.  
	- For Eric - the FOPS estimates have bben increased by a factor
	  of 6 (previous code checkin).

	splitter/
		splitter.cpp,h
		wufiles.cpp

Jeff  12 July 2004
	- db_change() will do nothing but return db_is_open if the requested
	  database is already open.

	db/
		schema_to_class.awk

Jeff  12 July 2004
	- as a matter of policy, application handlers called by  boinc programs 
	  (ie the validator and assimilator) should handle error returns from boinc
	  functions themselves rather than return the error up to boinc code.
	  This change is for the assimilator to issue a message and then exit
	  if it cannot parse the project config file or if it cannot connect
	  the the project (boinc) DB.

	ssimilator/
		sah_assimilate_handler.cpp

Jeff  15 July 2004
	- At Rom's request, backed out Eric's fops estimation changes 
  	  	(see entry of 9 July 2004).

	splitter/
		wufiles.cpp

Rom    July 15 2004
    - Tag for 4.00 release, all platforms
      seti_boinc_app_release_4_00

David  July 19 2004
	- Win build: changed output filename to 4.00

	client/win_build/
		seti_boinc.vcproj


Noaa	30 July 2004

	- changed headers for sah_gfx_base.cpp
	- different Makefile.in (ie Makefile.in.graphics) that can be 
	put in place of Makefile.in before configure to configure for
	graphics, may need to be changed slightly depending on user, 
	description in Makefile.Readme

	client/
	   sah_gfx_base.cpp
	   Makefile.in.graphics (new)
	   Makefile.Readme

David  3 Aug 2004
	- BOINC API change

	client/
		main.cpp

Noaa	5 August 2004

	- changed lglut to lboincglut in Makefile.in.graphics
	- changed Makefile.Readme to reflect that
	- added a Graphics.Readme to explain how to install w/graphics

	/
	   Graphics.Readme 
	
	client/
		Makefile.in.graphics
		Makefile.Readme

Noaa 	6 August 2004
	
	- Minor change to Makefile.Readme
	- change of sah_gfx_base.cpp headers

	client/
		Makefile.Readme
		sah_gfx_base.cpp


Jeff 	12 Aug 2004
	- use hierarchical uldl directory structures (see boinc checkin notes).
	- call perror() when splitter cannot fork().

	assimilator/
		sah_assimilate_handler.cpp
	validate/
		sah_boinc_db.cpp
	splitter/
		splitter.cpp
		wufiles.cpp

Jeff	13 Aug 2004
	- bumbed the WU ondisk threshold from 20k to 50k.
	- fixed a bad call to create_work().  The prototype had changed.

	splitter/
		splitparms.h
		wufiles.cpp

Jeff	24 Aug 2004
	- officially renamed the splitter executable to sah_splitter

	splitter/
		Makefile.in

Jeff 	25 Aug 2004
	- tell dir_hier_path() to create download subdirs as needed.

	splitter/
		wufiles.cpp

David  30 Aug 2004
    - created html/ directory

    html/ (new)
        project.inc

Jeff  09 Sep 2004
    - Change to the validator to handle the case where one or more of the result files
      for a WU's result set are missing.  Before this change this state would result
      in this WU and it's results never getting looked at again.  No science, no
      credit.

      This is coordinated seti_boinc / boinc change.  This note is repeated in
      the boinc checkin_notes. 
	
      seti_boinc changes:
	- get_result_file(), if it cannot read the result file, tries to read the 
	  directory where the result file should be.  If it can read the directory,
	  it returns ERR_FOPEN, as before.  If it cannot read the directory, it
	  resturns ERR_OPENDIR.   ERR_OPENDIR in this context signals a possibly
	  transient problem.  Upon a successful result read, it sets sah_result.have_result
	  (a new data member as of this change) to true.
	- check_set(), upon return from get_result_file() :
		- sets result.validate_state to VALIDATE_STATE_ERROR (a new state
		  as of this change) and retval to zero if there is a nonzero
		  retval from check_set() and it is not ERR_OPENDIR.  It then
		  continues.
		- otherwise just continues.
	  check_set() then determines if any IO errors brought the result count
	  below wu.min_quorum.  If not, it continues.  Otherwise it returns.
	  In all subsequent logic any results for which sah_result.have_result == false
	  are skipped.  Note that the result and the sah_result vectors are associated.

        validate/
		sah_result.h
		sah_validate.cpp
		sah_boinc_db.cpp

	boinc changes:
	  - new validate state VALIDATE_STATE_ERROR.
	  - in the enumeration for check_set(), we now include a clause to check for
	    VALIDATE_STATE_INIT in order to ignore results set to VALIDATE_STATE_ERROR.
	    This enumeration query now matches that for check_pair().
          Note that the only possible retvals from check_set() are now zero or
	  ERR_OPENDIR.
	  Note that logic to retry possibly transient errors still needs to be done.
	  Also left to be done is a transitioner change to subtract the number of
	  results in state VALIDATE_STATE_ERROR from the count of active results.
	  The latter change is needed to stimulate the production of additional results
 	  for the affected WU. 

	sched/
		validator.C
	db/
		boinc_db.h

Jeff  09 Sep 2004
    - Some changes to the validator mods of today.  Validator logic now matches the 
      updated validator documentation on the boinc website.

    validate/
                sah_validate.cpp

Jeff  19 Sep 2004
    - Some time ago a bug was fixed that reduced the amount of time it takes
      to do pulse searching but the progress unit computation remained tuned
      to the bug.  This resulted in an overestimation of the percentage of 
      total processing time spent in pulse searcing.  We do the most intensive
      pulse searching at the start of a WU so what the user sees is an early
      and false jump in percentage done.  This change is just a retuning of 
      PulseProgressUnits().  I changed:
          return(PulsePoTLen * PulsePoTLen * log(PulsePoTLen) * FftLen / 0.65e6);
      to:
          return(PulsePoTLen * PulsePoTLen * log(PulsePoTLen) * FftLen / 2.65e6);

      client/
		progress.cpp

David  29 Sept 2004
	- fixed "heads-up" graphics display

	client/
		sah_gfx.cpp

David  11 Oct 2004
	- accommodate change to BOINC graphics API
		Moved exception-catchers from main() to worker()
	- renamed SAH_GRAPHICS_BASE::worker_thread_init() to data_struct_init()
		(since this is now called by graphics thread, not worker)

	client/
		main.cpp
		sah_gfx.cpp,h
		sah_gfx_base.cpp,h
		worker.cpp,h
		win_build/
			seti_boinc.vcproj

Lana    13 Oct 2004
        - cleanup validator code to correspond to the boinc API
          requirements for handling error conditions

        validate/
            sah_validate.cpp

David  13 Oct 2004
    - compile fixes

    client/
        sah_gfx_base.cpp,h

David  26 Oct 2004
    - track change to BOINC API

    client/
        main.cpp

Rom    26 Oct 2004
    - Tag for 4.06 release, all platforms
      seti_boinc_app_release_4_06

Eric   28 Oct 2004
    - Added support for threaded clients
    - Fixed problem with retrieving insert ids related to ifx_getserial8()
    - Fixed problem in xml_util.h when compiling on LLP64 platforms

    aclocal.m4
    config.h.in
    configure.ac
    configure
    m4/
    	acx_pthread.m4
    assimilator/
    	Makefile.in
    client/
    	Makefile.in
    db/
    	sqlifx.ec
	xml_util.h
    db/tools/
    	Makefile.in
    splitter/
    	Makefile.in
    validate/
    	Makefile.in

Rom    29 Oct 2004
    - Tag for 4.07 release, all platforms
      seti_boinc_app_release_4_07

David  31 Oct 2004
    - add config line to get rt library (sched_get_priority_min) on Solaris

    configure.ac

Jeff  10 Nov 2004
    - Started using the "best_" signals in a result for validation.  We had always
      meant to do this in order to provide robust validation for results with
      no signals exceeding threshold.  Plus, the way the validator is written,
      zero signal results arriving after the initial WU validation would always
      recieve zero credit (at least one signal was expected).

    - Siganls counts now appear in the log (DEBUG level).

    validate/
	sah_result.{h,cpp} 
	sah_validate.cpp

David  12 Nov 2004
	- move code to parse BOINC init file from
		data_struct_init() to graphics_thread_init();
		fixes bug where user name and team didn't show
	- Win compile fixes

	client/
		sah_gfx_base.cpp
		win_build/
			seti_boinc.vcproj

David  17 Nov 2004
    - use regular GLUT library

    client/
        Makefile.in.graphics

Eric K.	18 Nov 2004
    - increased memory resource bound to 64M to prevent core client 
      from killing application when running with graphics enabled.
    - Fixed base64 and base85 decoders in xml_util.h
    - Altered BLOB printing so a minimum of 1 byte will always be inserted.
      This fixes a problem with the new informix SDK.

	db/
		xml_util.h
		schema_to_class.awk
		schema_master.cpp
		schema_master.h
	splitter/
		wufiles.cpp
	
     -  addendum (jeffc) : The BLOB fix here does indeed fix the problem
        whereby some 5% of pulse inserts failed.  Spike and triplet 
	inserts still fail at a rate of less than 1% in each case.  The
	cause of this is as yet unknown.  The first public project SAH
	result ID processed since today's fix was put in place was
	2969946. 

Jeff  18 Nov 2004
      - Added better error checking around inserts into the science DB.

	assimilator/
		sah_assimilate_handler.cpp 

Jeff  19 Nov 2004
      - Return from handler if result insert fails.

	assimilator/
		sah_assimilate_handler.cpp 

Jeff  19 Nov 2004
      - added the following fields to analysis_config table (all initialized
	to zero):
		max_spikes
		max_gaussians
		max_pulses
		max_triplets
	
     	db/
		schema_master.sql
		schema_master.cpp 
		schema_master.h 		
		tools/
			analysis_configs.xml	

	with a recompile of the splitter and assimilator.

Jeff  23 Nov 2004
      - bumped MAX_WUS_ONDISK back up to 500000.	

      splitter/
	splitparams.h

Rom    23 Nov 2004
    - Tag for 4.09 release, all platforms
      seti_boinc_app_release_4_09

Jeff  29 Nov 2004
      - Master science DB fetches to obtain analysis config.  This is used to
	find max allowable inserts for any given signal type.  

      assimilator/
                sah_assimilate_handler.cpp

Jeff 30 Nov 2004
      - Final step in the "limit spike insertions to 8" project.  Stopped
	splitters, made a new analysis_config row (id=4), updated settings
	to make analysis_cfg=4, and restarted splitters.  The max(id)'s 
	of the following tables prior to splitter restart were:
		seti master DB (sah2) workunit_grp :	  22423
		seti master DB (sah2) workunit :	5736259
		boinc DB (SETI_BOINC) workunit :	5279254

      db/tools/
	analysis_configs.xml

Jeff 02 Dec 2004
      - Removed 2 files.  uttolst.cpp contained a buggy routine,
        tm_UtToLst() which did not handle multiple 24 hour wraps in the 
        calculation of LMST.  This bug is what led to some RA's being >= 24.
     	Eric fixed this with an fmod() call in the new LMST routine, jd_to_lmst(),  
	contained in source file coordcvt.cpp.   The only program to use code
	from uttolst.cpp is testcoord, a program that Eric used to test
	jd_to_lmst().  jd_to_lmst() has been fully tested and in production
	for quite some time (over a year). 

      splitter/
	Makefile.in
	uttolst.cpp	removed
	testcoord.cpp	removed

Jeff 03 Dec 2004
     - Added the start of a public app build and test page.  Needs work.

     html/
	sah_source_code.php

Jeff 03 Dec 2004
     -  added code (commented out for now) for precessing and reference frame
	correcting signals.

     assimilator/
                sah_assimilate_handler.cpp

Jeff 07 Dec 2004
     - Finished source code / build instruction page for the web site.
     - Placed a reference result in the test WU directory.
     - Removed the old style reference result.

     html/
        sah_participate.php
        sah_source_code.php
     client/
        test_workunits/
                old_format_reference_result.sah  (removed)
                reference_result.sah


Rom  07 Dec 2004
    - Cleanup from header file changes

    client/
        lcgamm.cpp
        main.cpp
        sah_gfx.cpp
        sah_gfx_base.cpp
    client/win/
        seti_boinc.vcproj
    image_libs/
        bmplib.cpp

Jeff 08 Dec 2004
    - Corrected tolerances in the validator so that they match this policy:
	ra 		0.00066 hours absolute 
	dec 		0.01 degrees absolute 
	time 		.000011574 days absolute 
	frequency 	0.01 Hz absolute 
	chirp_rate 	0.01 Hz/s absolute  
	powers 		1% relative 
	chisqrs 	1% relative 
	triplet	period 	0.01 second absolute 
	pulse period 	0.1% relative 
	pulse threshold	1% relative 
	pulse snr 	1% relative    

	Diffs:
	was: if (abs_diff(ra, s.ra)  > .15) return false;  // .01 deg
	is:  if (abs_diff(ra, s.ra)  > .00066) return false;  // .01 deg

	case SIGNAL_TYPE_PULSE:
	was: if (abs_diff(period, s.period) > .01) return false;  // .01 sec  
	is:  if (rel_diff(period, s.period) > .01) return false;  // 1%   


	case SIGNAL_TYPE_TRIPLET:
	was: if (rel_diff(period, s.period) > .01) return false;  // 1% 
	is:  if (abs_diff(period, s.period) > .01) return false;  // .01 sec

	max(id) for result in the master science DB (sah2) prior to this change
	(assimilator was allowed to drain): 4345521

     validate/
	sah_result.cpp

David  10 Dec 2004
	- Fixed Windows compile.
		Added ../../../boinc/win_build to the include path
		to pick up config.h

	client/win_build/
		init_data.xml
		libboincapi.vcproj
		seti_boinc.vcproj
		setiboincdb.vcproj

Jeff  16 Dec 2004
	- Record the app exit value in the master result record. Max(id) in
	  the master DB result table before this change was 4873677.

	assimilator/
		sah_assimilate_handler.cpp	

Jeff  17 Dec 2004
	- Record the boinc WU_ERROR state in the master result record. Max(id) in
          the master DB result table before this change was 4923923.

	  This is being recorded in the result.reserved field.  This field needs
	  to be renamed.

	assimilator/
                sah_assimilate_handler.cpp

Jeff  17 Dec 2004
    - Fixed link problem in the client directory.  We now need to link to the boinc_api
      as well as the boinc lib.

    client/
        Makefile.in

Jeff  21 Dec 2004
    - Brought the assimilate handler into compliance with the new prototype.  It now returns
      a non zero retval on any error and zero on success.  All errors are potentially recoverable.

    assimilator/
                sah_assimilate_handler.cpp

Eric K	23 Dec 2004
     - First step in getting a universal graphical/non-graphical application.
     - Added a -nographics command line option to turn off graphics.
     - Graphics calls are now wrapped in "if (!nographics)"
     - Added a client_stage variable which contains the initialization state of
       the graphics (PREGRX,GRXINIT,POSTINIT).  If a fatal error occurs, this
       allows the client to guess at whether the failure was graphics related.
     - Added an atexit handler which restarts the application in nographics
       mode if exit is called in stage GRXINIT.
     - If found, seti_boinc uses the native libjpeg.
     
     aclocal.m4
     config.h.in
     configure
     configure.ac
     client/
     	Makefile.in
	analyzeFuncs.cpp
	analyzePoT.cpp
	analyzeReport.cpp
	gaussfit.cpp
	main.cpp
	s_util.[h,cpp]
	seti.[h,cpp]
	spike.[h,cpp]
	worker.[h,cpp]

Jeffc  23 Dec 2004
     - Started the add of setilib to the configuration.

     configure.ac
     aclocal.m4  
     config.h.in 
     configure
     m4/
	sah_check_setilib.m4
     assimilate/
	Makefile.in

David  25 Dec 2004
	- compile fix for windows
	- commented out sleep(10) in worker

	client/
		worker.cpp
		win_build/
			libboinc.vcproj

David  25 Dec 2004
	- more compile fixes for Windows, which mysteriously didn't
		compile the debug version correctly

	added ../../../boinc/win_build to the include search path for all projects,
	and removed boinc/api/win and boinc/client/win (these don't exist)

	Removed the forced include of ../config.h (this file doesn't exist)

	Note: on Windows, as far as I know,
	"config.h" refers to the file boinc/win_build/config.h

	client/
		worker.cpp
		win_build/
			libboinc.vcproj
			libboincapi.vcproj
			seti_boinc.sln
			seti_boinc.vcproj
			setiboincdb.vcproj

Jeff  27 Dec 2004
	- More values are now read from sah_config.xml.  Current values:
		    	<scidb_name>sah2@master_tcp</db_name>
    			<max_wus_ondisk>500000</max_wus_ondisk>
    			<min_quorum>2</min_quorum>			WAS 3
    			<target_nresults>3</target_nresults>
    			<max_error_results>5</max_error_results>
    			<max_total_results>10</max_total_results>	WAS 7
    			<max_success_results>5</max_success_results>
	- max WU IDs before this change went online:
		SETI_BOINC DB : 		7084313
		sah2 (science master) DB :	7545411

	splitter/
		splitter.cpp
		wufiles.cpp
	db/
		app_config.cpp 
		app_config.h

David  29 Dec 2004
	- Got the windows client to compile.
		Added a file win_build/win_version.h that defines
		MAJOR_VERSION and MINOR_VERSION.
		Currently these are in configure.ac,
		but I don't see how to convey these values to a file
		included in the Windows compile.
		If there's a better way feel free to undo this change

	client/
		version.cpp
		win_build/
			seti_boinc.vcproj
	win_build/
		win_version.h (new)
Jeff  4 Jan 2005
	- Rather than call dir_hier_path() directly, call boinc routine get_output_file_path() 
	  to get path to result files.  This automatically gives us the new path hash algorithm.
	  (see boinc checkin notes on 1/1/2005).

	  Max result ID in the master science DB prior to the assimilator change was 5993798.

	validate/
 		Makefile.in 
		sah_boinc_db.cpp
	assimilator/
		Makefile.in 
		sah_assimilate_handler.cpp
Jeff  4 Jan 2005
	- Added calls to setilib routines to precess RA and declination to J2000.  At this point,
	  this is only done for spikes and the results of the calculations are printed to the
	  log only - we are not actually updating the spike coords.  After making sure the precession
	  is correct, we can start updating all signals.

	  Max result ID in the master science DB prior to this change was 6005078.

	assimilator/
		sah_assimilate_handler.cpp

Jeff  11 Jan 2005
	- Calculate barycentric frequency for all signals (not updating yet).

	validate/
		sah_assimilate_handler.cpp

David  8 Feb 2005
	Various changes to get the Win version to compile,
	hopefully with graphics working:

	- removed SAH_GRAPHICS_BASE_INTERFACE class.
		The new idea is to have a SAH_GRAPHICS object,
		which in the shared-library case lives in the shared library.
		The main program has a pointer to this object,
		but calls only its data-modification functions,
		so it doesn't need to link with OpenGL or GLUT.
	- Moved render() from SAH_GRAPHICS_BASE to SAH_GRAPHICS.
		This eliminates the need for virtual functions.
	- added reduce.C, md5*.C to project files

	client/
		sah_gfx.cpp,h
		sah_gfx_base.cpp,h
		seti.h
		worker.cpp
		win_build/
			libboinc.vcproj
			libboincapi.vcproj
Eric   8 Feb 2005
	- Removed the db directory from the Makefile.am build list
	- Added SETILIBDIR and INFORMIXDIR to Makefile.incl
	- Changed references to /bin/false in configure.ac to remove path
	- Changes to make the unix client compatible with davids changes above:
		- worker thread needs access to
		  SAH_GRAPHICS_BASE::get_generate_buffer() and
		  SAH_GRAPHICS_BASE::generate_done(), so added #ifdefs to make
		  them visible to the executable during build
	- Reordered db/db_table.h to re-fix undefined symbols

	Makefile.am
	Makefile.in
	Makefile.incl
	configure.ac
	configure
	client/
		Makefile.am 
		Makefile.in
		sah_gfx.[h,cpp]
		sah_gfx_base.[h,cpp]
	db/
		db_table.h
	
Eric   10 Feb 2005
	- Removed aclocal.m4 and configure because they are generated by 
	  _autosetup.
	- Simplified the folding algorithm bases on code send by Ben Herndon.  
	  On superscalar processors this can also be a speedup.  On SPARC, 
	  it's a 0.24% slowdown, not enough that we should stick with the 
	  more complex original code.
	- Changed the automake file to remove references to "installing" 
	  seti_boinc into /usr/local/bin
        - Fixes to get the windows client running.  
	- Added check for _int32 and int32_t to configure.ac
	- Now that sah_graphics is dynamically allocated, a lot of our 
	  graphics structures weren't getting initialized properly.  I've 
	  written default constructors for: G_GAUSS_INFO, G_TRIPLET_INFO, 
	  G_PULSE_INFO, GDATA, SAH_GRAPHICS_BASE, SAH_GRAPHICS, SETI_WU_INFO, 
	  GRAPH_BUFFER, and GRAPHICS_PREFS.
	- Added ltmain.sh, depcomp and win_build/* to the nightly tarball.
	- Changed trim_sources to use _autosetup instead of autoconf.
	
	aclocal.m4 (removed)
	configure (removed)
	trim_sources
	configure.ac
	config.h.in
	client/
		pulsefind.cpp
		Makefile.am
		worker.cpp
		sah_gfx.[h,cpp]
		sah_gfx_base.[h,cpp]
		seti_header.cpp
		gdata.h
	jpeglib/
		jpeglib.h

Jeff  14 Feb 2005
	- put libboinc at the end of the lib list (functions in other
    	  libs use symbols defined in libboinc)
	- change some assimilator messages to DEBUG level.

	assimlator/
		Makefile.am
		 sah_assimilate_handler.cpp
	validate/
		Makefile.am

Eric K. 15 Feb 2005
	- fixed missing definition of dir_hier_path() in wufiles.cpp
	- reordered initializations in constructors to get rid of
	  warning messages
	- modified configure script to set CXXFLAGS to equal CFLAGS if
	  CXXFLAGS is not defined
	- The client was trying to look up the graphics library symbol
	  "x11_glut_is_initialized" rather than "xwin_glut_is_initialized"
	
	configure.ac
	client/
		gdata.h
		sah_gfx_base.cpp
		worker.cpp
	splitter/
		wufiles.cpp

Eric K. 16 Feb 2005
	- Fixed broken nightly tarball

	trim_sources

Eric K. 16 Feb 2005
	-Rather than rechirping the original data every 1000 chirp 
	 steps, we now rechirp the original data every step.  This 
	 will make results more repeatable when restarting work units.
	 It may also allow floating point rather than double precision 
	 trig functions.
	-The savedWUData in analysis_state used to be the raw data from 
	 the file.  As of now it is the baseline smoothed data floating 
	 point data (unchirpped).
	
	client/
	    seti.h
	    seti.cpp
	    analyzeFuncs.cpp



	- Fixed broken nightly tarball

Eric K. 10 Mar 2005
	-To better support systems with concurrent calculation of sin() 
	 and cos() I've added a sincos() and sincosf() function for 
	 systems without these intrinsics.  
	-Modified analyzeFuncs and fft8g to use sincosf().
	-Fixed bug that prevented baseline smoothing on chirp 0 data.
        -Modified configure to check for sinf(),cosf(),sincos() and sincosf()
	
	configure.ac
	config.h.in
	client/
	   fft8g.cpp
	   sincos.h
	   analyzeFuncs.cpp

Jeff 11 Mar 2005
	- Templated the science pre_processing function.  Max(id) for result in the
 	  master science DB before putting this change online was 9289454.

        assimilator/
                sah_assimilate_handler.cpp
	
Charlie	11 Mar 2005
    - Add support for building Mac SETI@home application using XCODE IDE on Macintosh.
    
    mac_build/
        HowToBuildBOINC_XCode.rtf
        seti_boinc.xcode.zip

Jeff 16 Mar 2005
        - We now do values checking on signals and do not pass a signal on to
          preprocessing is there is a critical value out of range (ra, decl,
          time, freq at this point).  We so however attemp to insert such a 
          signal into the master DB, with the value 1 placed in rfi_found.
          
          Max(id) for result in the master science DB before putting this
          change online was 9826217.

          It came to light during testing this change that the occasional 
          insert failures that we see are for signals with wildly bad
          values (NaNs ?).

        assimilator/
                sah_assimilate_handler.cpp

Jeff 17 Mar 2005
	- Began inserting signals with pre-processed values:
		- precession of coordinates from EOD to J2000.  This uses
		  the serendip precession code.
	          This was tested by comparing assimilator precession results
		  to those obtained by the online FUSE precession calculator:
		  http://fuse.pha.jhu.edu/cgi-bin/precess_tool
		  There was agreement to under an arcsecond.  This was also
		  tested under RA wrap conditions.  Here are 2 examples:
		  obs RA      obs decl    sah precession          obs time                precession by fuse calc         sah-fuse diff in arcsec
                     RA         decl        RA         decl     		            RA             decl		   RA      decl
		  17.018570  18.127011    17.014893  18.134086    2453368.151255          17.014886       18.13411        0.378   -0.0864
		  0.001608   28.397810    23.997351  28.37006     2453365.416415          23.997336       28.36997        0.81    0.324

		- calculation of the signal's barycentric frequency. 
		  This also uses serendip code.  Frequency shifts were within
	          the expected range (max ~= 142KHz) but no independent tests were done.

		- calculation of the cubic pixel number.  This was tested by
		  reversing the qpix calculation and comparing the resulting
		  RA/Decl with the the original.  There was agreement to a max
		  deviation of ~1.3 arcminutes which is OK because the qpix reversal
		  gives you the pixel center coordinates which is a max of ~1.3 arcmin
		  arcminutes from the pixel edge (given nside=2048).  Most diviations
		  on reversal were smaller than this.

	  Max(id) for result in the master science DB before putting this
          change online was 9927205.

	assimilator/
                sah_assimilate_handler.cpp

Jeff 21 Mar 2005
	- Better debugging output during WU file path resolution.

	assimilator/
                sah_assimilate_handler.cpp

Rom  23 Mar 2005
    - Fix the release build of the S@H app on Windows

    client/
        version.cpp
    client/win_build/
        seti_boinc.vcproj
    

Eric 12 Apr 2005
    - Fix bug in database code.  The informix interface was expecting blobs to
      be presented in hex format rather than raw binary.  So informix interface
      was attempting to translate the code to binary.  In addition there was a
      bug in the translating code such that only characters 'a'-'f' and 'A'-'F'
      were being translated.  The result was that most of the blob data were
      reassigned blob[i]=(blob[2*i]*16+blob[2*i+1])&0xff.
    - For better debugging, I changed the sqlifx.ec chk_status() macro (which
      included a RETURN!!!  Yuck!) into a boolean function.
    - Since the informix SQLCODE variable (and the identical sqlca.sqlcode)
      aren't available to the debugger, I replaced accesses to this variable
      with calls to sql_error_code().
    - Since when errors were detected, sql_close() was being called which
      cleared the error code.  We've added a function sql_last_error_code() to
      return the last non-zero error code and sql_reset_error_code() to reset
      the last non-zero error code.  There's still some work to do as far as
      returning proper error status to the calling environment
    - Changed the database name in the schema to sah2@sci_master_tcp to match
      move to new db server/
    
    db/
        schema_master.[cpp,h,sql]
	schema_to_class.awk
	sqlapi.h
	sqlblob.h
	sqlifx.ec

Jeff 27 Apr 2005
    - Many changes to the informix related code in db/ in order to get the 
      science master DB migration code to work and to fix a bug that
      was preventing the proper insertion of PoT's (both gaussian and
      pulse).  Eric L essentially rewrote sqlifx.ec.  Note that to
      allow DB insertions with ID's the symbol KEEP_ID must be defined
      at compile time.

    - also some mods to the config insert tools in order to add some
      new configs.

    db/
	db_table.h 
	schema_master.cpp 
	schema_to_class.awk 
	sqlapi.h
    	sqlblob.h 
	sqlifx.ec 
	sqlrow.cpp 
	sqlrow.h

      	tools/
		Makefile.in 
		insert_analysis_config.cpp 
		insert_s4_receivers.cpp
   		insert_splitter_config.cpp 
		settings.sql 
		splitter_configs.xml

Jeff 01 May 2005
	- recompiled the validater to pick up the credit fix referenced:
		Bruce 29 April 2005
	  and started it in the public project.  Here is the start line of sah_validate1:
		2005-05-01 13:37:32 [normal  ] Starting validator


Jeff 02 May 2005

	- Assimilator changes:
		- If there is no canonical result for a WU, return 0.  This will cause
		  the boinc assimilator to mark the WU as assimilated and it will then
		  have it's file's and it's DB record(s) deleted.   No canonical result 
		  means that  too many results were returned with no concensus.
		- use sql_last_error_code() rather than sql_error_code(), as the latter
		  always returns 0.
		- I a result insert get an informix error -239, return 0.  This will cause
                  the boinc assimilator to mark the WU as assimilated and it will then
                  have it's file's and it's DB record(s) deleted.  A -239 (uniqueness 
		  violation, in this case on sah result field boinc_result) means that 
		  we have already inserted the canonical result for this WU.  This
		  should "never" happen but maybe with aome odd stop/start combo it does.
		- If the bad value check detects a bad value in a signal, replace this
		  bad value with a recognizable marker.  This is in addition to flagging
		  the signal in the rfi_found field.  This value replacement is needed
		  because some bad values cannot be interted into the DB.  The marker
		  value is -91.0.  This is an impossible value for ra, decl, time, and freq.
		- Max(id) for result in the master science DB before this change went online
		  was 13364296.


	assimilator/
		sah_assimilate_handler.cpp

Charlie   05 May 2005
Mac: Modify projects and rebuild with OS 10.3.0 compatibility SDK.
Update build instructions.  Check in XCode project.
      mac_build/
        HowToBuildBOINC_XCode.rtf
        seti_boinc.xcode
        boinc.pbproj/
            project.pbxproj (add)

Eric K.	18 May 2005
    - Changed includes of C headers to includes of C++ headers.  (i.e. we now 
      include <cmath> rather than <math.h>)
    - Modified malloc_a() to use native aligned allocation routines if 
      available.
    - Removed explicit use of _aligned_malloc on _WIN32 platforms since 
      malloc_a() will use _aligned_malloc().
    - Defined type sah_complex which is compatible with the FFTW complex 
      data type.  Complex arrays that used to be defined a float arrays are
      now of type sah_complex.  Code accessing these arrays has been modified
      where necessary.
    - Added mods to allow the function prototypes in sincos.h to work if these
      functions are present, but not in the system <math.h> header.
    - Modified the method by which the chirp table is computed. The goal is 
      to have the drift be less than 1 bin over the duration of interest 
      to the analysis.  In the case of gaussians that duration is 2 beam 
      crossings.  In the case of pulses it's one beam crossing.  In the 
      case of spikes it's one fft length.  This should pick up 1.5 dB in
      sensitivity to gaussians, pulses and triplets.  We could pick up another
      0.25 dB with another doubling of this duration, but I think we've reached
      diminishing returns.
    - Replaced repeated allocations of WorkData in the main loop with one
      allocation prior to loop entry
    - Made main processing loop compatible with FFTW.  The configure script 
      now detects the FFTW library and header files and if both are available 
      USE_FFTW is defined in "config.h".  This define determines which FFT is
      used.
 

    config.guess
    config.sub
    ltmain.sh
    Makefile
    Makefile.incl
    configure.ac
    client/
        Makefile.am
	analyzeFuncs.[cpp,h]
	malloc_a.[cpp,h]
	fft8g.[cpp,h]
	chirpfft.cpp
	lcgamm.cpp
	analyzePoT.cpp
	s_util.[cpp,h]
	main.cpp
	progress.cpp
	pulsefind.cpp
	seti.[cpp,h]
	analyzeReport.cpp
	sincos.h
	test_workunits/
	    reference_work_unit.sah

Rom    26 June 2005
    - Update Windows project files to use the FFTW library and optimize for SSE

    client/
        win-config.h
    client/win_build/
        seti_boinc.vcproj

Jeff  26 July 2005
    - Added a sky_map table to the db schema.  This will be the primary table used
      to control the near time persistency checker.
    - Split a while() loop into 2 lines because otherwise gdb would not allow a 
      break to be set inside the loop (Eric change).

    db/
	schema_master.sql 
	schema_master.[cpp,h] 
	sqlifx.ec

Jeff  09 Sept 2005
    - added a couple of libs to the splitter makefile that the new boinc crypto
      code needs.

    splitter/
	Makefile.in 

Jeff 05 Oct 2005
    - Removed old/new hash boolean from call to  dir_hier_path().

    splitter/
	wufiles.cpp

Jeff 28 Oct 2005
    - Fixed memory leak in the validator.
    - Sync with changes in the BOINC SCHED_MSG_LOG definition.

    validate/
	sah_validate.cpp
	sah_boinc_db.cpp


Jeff 1/9/2006 Jeff
    Splitter related changes.
    - account for new command_line parm in create_work() - we just pass NULL.
    - changed all instances of safe_strncpy() to strlcpy(). 
    - change the app config file name to sah_enhanced_config.xml.
    - added settings ID WU name.

    splitter/
        readtape.cpp
        wufiles.cpp
    db/
        app_config.cpp

Jeff 1/11/2006
    - More safe_strncpy -> strlcpy().

    client/
        timecvt.cpp

Jeff 1/19/2006
    - added field sb_id to tape, workunit_grp, workunit, and result.  These
      fields were required for the DB merge.  We can drop thme after a while.

    - app config file name back to sah_config.xml.  This should be a command line item.

    db/
        app_config.cpp 
        schema_master.cpp 
        schema_master.h
        schema_master.sql

Jeff 1/23/2006
    - The assimilator now uses the settings ID that is embedded in the wu/result name
      to get to the analysis_config and receiver_config tables.  If the  settings ID
      has not changed from one result to the next (normally true until the enhanced client
      gets released) then we do no DB accessing.  This replaces the logic whereby
      we were reading the wu and wug for each result.
    - Both the enhanced and old splitter were previously modified to embed the settings ID
      into the wu/result names.

    assimilator/
        sah_assimilate_handler.cpp

Jeff 1/24/2006
    - Templated signal insertion.  There were several other small code changes secondary 
      to this.
    - if (appid == 2) signal.reserved = 1.  This is temporary for enhanced rollout plus
      DB correction.  The correction code needs to know is the signals were returned
      by an enhanced app or not.

    This sah2:result.max(id) before this change went on was 1615350419.

    assimilator/
        sah_assimilate_handler.cpp
 

Jeff 2/7/2006
    - Changed the type of q_pix in all 4 signal table schemas from integer to int8.
    - The assimilator now inserts signals with "n_pix", a 64 bit integer.  It
      contains "q_pix" in the high order 32 bits and frequency with a resoltion of 10 Hz
      in the low order 32 bits.  All floating point numbers are cast (ie floored) to
      integers in this processed.

    Note: the max IDs before this change were:
          spike     1017689548
          gaussian   116885361
          pulse      173469464
          triplet    125669326

    -------------------- Testing notes (all tests look good) ------------------

    Here is a new spike.

    id                1017690489
    result_id         1619052602
    peak_power        24.45193290000
    mean_power        1.000000000000
    time              2453342.626688
    ra                2.944765570000
    decl              26.35156250000
    q_pix             3601673817190043
    freq              1421050038.263
    detection_freq    1421049936.330
    barycentric_freq  1421103637.391
    fft_len           131072
    chirp_rate        -1.38084543000
    rfi_checked       0
    rfi_found         0
    reserved          0

        n_pix             q_pix          freq
    ----------------   -----------     -----------
    3601673817190043 = 00 0C CB B4     08 78 6E 9B

            
            00 0C CB B4 = 838580.00
            which translates to RA 2.9443359 and Decl 26.3392294
            from DB                2.9447656          26.3515625
                                   ---------          ----------
                                   37 arcsec diff     44 arcsec diff

            08 78 6E 9B =       142110363
            1421103637.391/10 = 142110363
                                ---------
                                0 Hz diff

    Here is a new gaussian:

    id                116899622
    result_id         1619068124
    peak_power        1.717239500000
    mean_power        0.458329827
    time              2452982.120403
    ra                14.84703540000
    decl              18.09752270000
    q_pix             38639321233114672
    freq              1419769999.385
    detection_freq    1419770480.211
    barycentric_freq  1419689449.058
    fft_len           16384
    chirp_rate        11.23900990000
    rfi_checked       0
    rfi_found         0
    reserved          0
    sigma             6.227958200000
    chisqr            1.342639920000
    null_chisqr       2.142316580000
    score             0.00
    max_power         4.632330890000
    pot               <BYTE value>

        n_pix             q_pix          freq
    -----------------   -----------     -----------
    38639321233114672 = 00 89 46 42     08 76 46 30 

        00 89 46 42 = 8996418 
        which translates to RA 14.8461914       18.0921908      
        from DB                14.8470354       18.0975227
                               ----------       ----------
                               73 arcsec diff   19 arcsec diff

        08 76 46 30 =                    141968944 
        1419689449.058/10 =              141968944
                                         ---------
                                         0 Hz diff                                                 


    Here is a new triplet:

    id                125678570
    result_id         1619068730
    peak_power        10.59097860000
    mean_power        0.00197354145
    time              2453358.223775
    ra                18.05746840000
    decl              20.87687870000
    q_pix             142995601912863989
    freq              1419248962.402
    detection_freq    1419248962.402
    barycentric_freq  1419256216.076
    fft_len           32
    chirp_rate        0.00
    rfi_checked       0
    rfi_found         0
    reserved          0
    period            0.919142425


        n_pix             q_pix            freq
    ------------------   -----------     -----------
    142995601912863989 = 01 fc 05 be     08 75 9c f5

        01 FC 05 BE =  33293758  
        which translates to RA 18.0571289   Decl 20.8620894
        from DB                18.0574684        20.8768787   
                               ----------        ---------- 
                               29 arcsec diff    53 arcsec diff

        08 75 9C F5 =       141925621 
        1419256216/10 =     141925621
                            ---------
                            0 Hz diff 

    Here is a new  pulse: 

    id                173470235
    result_id         1619053031
    peak_power        0.919080853
    mean_power        0.00388364005
    time              2453357.914301
    ra                10.59253220000
    decl              18.10714530000
    q_pix             121561945579447491
    freq              1420880737.305
    detection_freq    1420880737.305
    barycentric_freq  1420750751.969
    fft_len           64
    chirp_rate        0.00
    rfi_checked       0
    rfi_found         0
    reserved          0
    period            0.293273598
    snr               7.352646830000
    thresh            7.250113490000
    score             0.00
    len_prof          44
    pot               <BYTE value>
    
        n_pix              q_pix           freq
    ------------------   -----------    -----------
    121561945579447491 = 01 AF DF F2    08 77 E4 C3


        01 AF DF F2     =   28303346.00
        which translates to RA 10.5922852   Decl  18.0921908
        from DB                10.5925322   Decl  18.1071453
                               ----------         ----------
                               21 arcsec diff     54 arcsec diff 


        08 77 E4 C3 =           142075075 
        1420750751.969/10 =     142075075
                                ---------
                                0 Hz diff


2/23/2006 Jeff
    - Changed the frequency to fpix conversion from a cast-to-long to
      a round function:
           inline long round(double x) {return long(floor(x + 0.5f));}
      Casts from floating point to integers are always equivalent
      to either (int)floor() or (int)ceil(), depending on the rounding
      mode of the platform.

    This sah2:result.max(id) before this change went on was 1623225559.

    assimilator/
        sah_assimilate_handler.cpp

    I then thought there was a problem and fell back on this change.
    The old assimilator went back on after result id 1623229153.
    
    I confirmed that there was in fact no problem and the new assimilator
    went back on on 2/24/06 after result id 1623492910.

    Testing notes:

    Here is a new spike:

    id                1024551102
    result_id         1623225782
    peak_power        24.31553840000
    mean_power        1.000000000000
    time              2451858.467759
    ra                21.35094640000
    decl              18.07765010000
    q_pix             55794923851997434
    freq              1420622880.906
    detection_freq    1420621698.453
    barycentric_freq  1420741058.565
    fft_len           131072
    chirp_rate        -19.5776901000
    rfi_checked       0
    rfi_found         0
    reserved          0

        n_pix              q_pix           freq
    ------------------   -----------    ----------- 
    55794923851997434    00 C6 39 30    08 77 E0 FA

    00 C6 39 30                 = 12990768
    which translates to RA  21.3515625   Decl   18.0725708
                            21.3509464          18.0776501
                            ----------          ----------
                            53 arcsec diff      18 arcsec diff



    0877E0FA                    = 142074106
    round(1420741058.565/10)    = 142074106
                                  ---------
                                  0 Hz diff

    Here is a new pulse:

    id                176938950
    result_id         1623229140
    peak_power        0.229531646
    mean_power        0.00195498206
    time              2451802.752266
    ra                1.953974720000
    decl              19.68553160000
    q_pix             2934081280477886
    freq              1420283508.301
    detection_freq    1420283508.301
    barycentric_freq  1420192624.394
    fft_len           32
    chirp_rate        0.00
    rfi_checked       0
    rfi_found         0
    reserved          0
    period            0.0233727992
    snr               5.806743140000
    thresh            5.665772440000
    score             0.00
    len_prof          7
    pot               <BYTE value>
  

        n_pix              q_pix           freq
    ------------------   -----------    -----------
    2934081280477886     00 0A 6C 88    08 77 0A BE


    000A6C88                    = 683144
    which translates to RA  1.9541016    Decl 19.6889732
                            1.95397472   Decl 19.6855316
                            ----------        ----------
                            11 arcsec diff    12 arcsec diff



    08770ABE                    = 142019262
    round(1420192624.394/10)    = 142019262
                                  ---------
                                  0 Hz diff


    Here is a new gaussian:

    id                120516510
    result_id         1623489856
    peak_power        3.313514950000
    mean_power        0.580334067
    time              2451925.666315
    ra                7.090055470000
    decl              8.357689860000
    q_pix             98579528333729636
    freq              1418915066.719
    detection_freq    1418912570.889
    barycentric_freq  1418934757.328
    fft_len           16384
    chirp_rate        -35.8465271000
    rfi_checked       0
    rfi_found         0
    reserved          0
    sigma             3.568017480000
    chisqr            1.412076230000
    null_chisqr       2.102728610000
    score             0.00
    max_power         8.865511890000
    pot               <BYTE value>


        n_pix              q_pix           freq
    ------------------   -----------    -----------
    98579528333729636    01 5E 39 8F    08 75 1F 64

    015E398F                    = 22952335
    which translates to RA  7.0898438   Decl  8.3666866
                            7.09005547  Decl  8.35768986
                            ----------        ----------
                            18 arcsec diff    32 arcsec diff


    08751F64                    = 141893476
    round(1418934757.328/10)    = 141893476
                                  ---------
                                  0 Hz diff

3/24/06 Jeff
    Validator result overflow checking no longer uses an internal buffer.  
    stderr_out is checked in place.

    validate/
        sah_validate.cpp

3/30/06 David
	Added gutil_text.C to windows project

5/4/06 Charlie
    - Mac: Fix glut.h to be compatible with Mac's OpenGL framework.
        - Create combined config.h file for Intel and PowerPC Macs.
        - Create shell script to build fftw-3.1.1 library as universal 
            binary (PowerPC and Intel).
        - Update seti_boinc XCode project to build both PowerPC and 
            Intel versions of SETI@home Enhanced application for Macintosh.

    glut/
        glut.h
    mac_build/
        config.h
        buildfftw-3.1.1.sh
        seti_boinc.xcodeproj/
            project.pbxproj
        
5/5/06 Charlie
    - Mac: Fix fftw-3.1.1 build script to work on PowerPC as well as 
        Intel Macs.

    mac_build/
        buildfftw-3.1.1.sh

5/8/06 Charlie
    - Mac: Add icon to SETI@home enhanced.
    
    client/
        app_icon.h (added)
        main.cpp
    mac_build/
        seti_boinc.xcodeproj/
            project.pbxproj

5/9/06 Charlie
    - Mac: Fix crash bug on systems 10.3.0 through 10.3.8 due to 
        undefined sinf, cosf, atanf functions in dynamic linked 
        library usr/lib/libSystem.B.dylib.  The fix is to not #define 
        HAVE_SINF, HAVE_COSF and HAVE_ATANF in config.h file for 
        PowerPC builds.
    - Update Mac version to 5.13
        
    mac_build/
        config.h
