
2009-02-01  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_29.8 release.

	* file.c (nwos_restore_file): Fix Bug #2427286 - Checksum error in file
	block.  If there was only one file block and it used the old encryption
	it was calculating the crc32 on the entire block (including the random
	data) instead of just the actual file data.  Changed call to calculate
	crc32 only on the actual file data.

	* file.c (dump_file_block_error): new function to dump information when
	a file block did not decrypt correctly (crc32 error).
	(nwos_restore_file): changed to call new dump_file_block_error function
	when the crc32 checksum doesn't match.  In the case of the first block
	dump the block from both the old and new encryption.


2009-01-31  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* check_files.c (main): added test to verify file object class matches
	the class definition reference list it is in.

	* check_files.c (main): change to check old (001 and 002) file class
	definitions.
	* objectify_private.h (NUM_FILE_CLASS_DEFINITIONS): added define.

	* objectify.c (get_file_references, get_file_001_reference)
	(get_file_002_reference, get_file_class_reference): moved to
	class_definition.c file.
	(nwos_read_object_from_disk): added nwos_ prefix to
	get_file_001_reference and get_file_002_reference calls.
	(nwos_get_object_class):  added nwos_ prefix to get_file_001_reference,
	get_file_002_reference calls and get_file_class_reference.
	* class_definition.c (get_file_references) moved from objectify.c file.
	(nwos_get_file_001_reference, nwos_get_file_002_reference)
	(nwos_get_file_class_reference): moved from class_definition.c file and
	added nwos_ prefix.
	* objectify_private.h (nwos_ready, nwos_get_file_001_reference)
	(nwos_get_file_002_reference, nwos_get_file_class_reference): added
	external declarations for.

	* file.c (nwos_get_disc_list_object_size, nwos_find_disc_list)
	(nwos_read_files_disc_list, nwos_find_matching_disc_list)
	(nwos_create_disc_list, nwos_find_disc_copy, nwos_create_disc_copy)
	(nwos_find_storage_location, nwos_create_storage_location): moved to
	new disc.c file.
	* disc.c (nwos_get_disc_list_object_size, nwos_find_disc_list)
	(nwos_read_files_disc_list, nwos_find_matching_disc_list)
	(nwos_create_disc_list, nwos_find_disc_copy, nwos_create_disc_copy)
	(nwos_find_storage_location, nwos_create_storage_location): moved from
	file.c file.
	* Makefile.in (OBJS): added disc.o.


2009-01-26  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* file.c (nwos_restore_file): changed to allow 'name' parameter to be
	null and still read and verify checksums of file, but not write it to a
	file.
	* export_file.c (main): removed boolean 'result' variable and added
	new 'num_failures' to count the number of files that failed, report
	them at the end, use them for the exit code.
	* check_files.c (main): changed to print file number and added call to
	nwos_restore_file (with a null for the file path) to read and verify
	the file.


2009-01-25  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Makefile.in (PROGS): added check_files.
	(check_files): new target.
	* check_files.c: new program through each file and verify it's data.
	Initial version only prints information, doesn't test file yet.
	* list_files.c: changed to use 'PATH_MAX' define to allocate buffer for
	file path instead of 256.


2009-01-24  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* reference_list.c (verify_last_block_pointer): new static function to
	verify that the calculated data for the last_block pointer is correct.
	Only used when VERIFY_LAST_BLOCK_POINTER is defined, which should only
	be defined for testing.
	(nwos_add_to_reference_list): Fix Bug #2392531 - removed loop that
	previously searched list for the last block and instead use last_block
	pointer in cache.
	(nwos_remove_from_reference_list): added test to verify that last_block
	pointer is correct after reference has been removed from a list.


2009-01-22  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* reference_list.c (Block_Cache): added last_block member to point to
	the last block of a reference list (if more than one block).
	(read_ref_list_into_cache): set new last_block member of cache to null
	if only one block in reference list or to last block if more than one.
	(write_reference_list): added asserts to verify that last_block pointer
	is null if there is only one block and non-null if more than one.  Also
	set the last_block to null when finished writing.
	(nwos_create_reference_list_with_existing_id): set last_block to null.
	(nwos_add_to_reference_list): added asserts to verify last_block is
	correct on entry and update it as necessary.
	(nwos_remove_from_reference_list): added asserts to verify last_block
	is correct on entry and update it as necessary.


2009-01-20 - End of an error! :)  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* INSTALL: updated some statments about the file manipulation programs
	that were incorrect because they way they work has changed since they
	were originally written (and I overlooked fixing them).

	* Makefile.in (PROGS): moved update_files_0028 and remove_file programs
	to new INACTIVE_PROGS.
	(INACTIVE_PROGS): new definition for programs that don't normally need
	to be used.
	(clean): added INACTIVE_PROGS so they are cleaned up too.

	* remove_file.c (main): changed text of warning message and added test
	to see if backup (.dif) files are enabled.  If they are print a message
	about how to disable them and terminate program. (Any .dif file created
	by remove_file will be erroneous because at this time .dif files cannot
	delete blocks, they can only add or change blocks.)
	

2009-01-15  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* progress_bar.c (nwos_update_progress_bar): changed assert so that it
	will allow progress_bar_percent to already be at 102 (it is displaying
	100% already).  Also added test to verify percent passed in is less
	than or equal to 1.0f.


2009-01-02  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Makefile.in (PROGS): added new sync_archive program
	* user_config.c (nwos_set_private_objects_path): added a call to
	nwos_get_private_objects_path to make sure the environment variables
	and configuration file is already read before we set the new private
	objects path.  If we didn't do that it would write over the string we
	set here.
	* sync_archive.c (print_usage): changed to have both a source and
	destination argument.
	(main): changed so that it takes both a source and destination archive
	argument instead of using the default archive as the source.


2008-12-30  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_29.7 release.

	* sync_archive.c: new program created by combining compress_sparse and
	expand_sparse that, at this time, copies one archive into another.  
	* user_config.c (nwos_set_private_objects_path): new function to allow
	sync_archive to change the private path to the destination archive.


2008-12-29  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (lower_info_index, upper_info_index, check_chunk_density)
	(find_next_chunk_with_space): removed all of the experimental changes
	made in revisions 1.109, 1.110, and 1.111, which removed these
	variables and functions.
	(nwos_set_allocation_parameters, nwos_check_blocks_available): removed
	all changes made in revisions 1.109, 1.110, and 1.111, which removed
	all the changes made to these functions.  Compare this revision (1.113)
	to revision 1.108 and the only changes are the ones made in the
	alpha_29_5_branch (revisions 1.108.2.1, 1.108.2.2, and 1.108.2.3).


2008-12-27  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* config.h.in: merged changes from alpha_29_5_branch into main trunk.
	* configure.ac: merged changes from alpha_29_5_branch into main trunk.
	* disk_io.c: merged changes from alpha_29_5_branch into main trunk.
	* disk_usage.c: merged changes from alpha_29_5_branch into main trunk.
	* export_file.c: merged changes from alpha_29_5_branch into main trunk.
	* file.c: merged changes from alpha_29_5_branch into main trunk.
	* identify_disc.c: merged changes from alpha_29_5_branch into main
	trunk.
	* import_file.c: merged changes from alpha_29_5_branch into main trunk.
	* list_files.c: merged changes from alpha_29_5_branch into main trunk.
	* log.c: merged changes from alpha_29_5_branch into main trunk.
	* objectify.h: merged changes from alpha_29_5_branch into main trunk.
	* person.c: merged changes from alpha_29_5_branch into main trunk.
	* recrypt.c: merged changes from alpha_29_5_branch into main trunk.
	* security.c: merged changes from alpha_29_5_branch into main trunk.
	* verify_file.c: merged changes from alpha_29_5_branch into main trunk.


2008-12-26  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	-- These changes were made on the CVS alpha_29_5_branch --

	* disk_io.c (nwos_read_block): Changed to initialize 'offset' variable
	to -1 when it is declared and removed code that specifically set it to
	-1 in two cases.

	* disk_io.c (nwos_read_block): Fix Bug #2354266 - Somtimes it aborts
	when entering wrong pass phrase.  Added code so that it returns false
	if the block is empty (I.E. the bit isn't set in the bit map).


2008-12-25  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	-- These changes were made on the CVS alpha_29_5_branch --

	* verify_file.c (main): Fix print statement to eliminate warning on
	systems that define sizeof to be long unsigned (like OpenBSD) instead
	of just unsigned.  This also fixed Feature Request #1952357 - Fix to
	build on Mac OS X.

	* configure.ac (AC_CHECK_FUNCS): Fix Bug #2466388 - Added test for
	fdatasync function.
	* config.h.in (HAVE_FDATASYNC): Added undef for.
	* verify_file.c (shred): Added #ifdef so that if fdatasync is not
	available on the system it will use fsync instead.


2008-12-24  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	-- These changes were made on the CVS alpha_29_5_branch --

	* person.c (nwos_list_persons): Fix Bug #2051304 - change to print a
	message that there are no persons stored in the system instead of
	asserting.


2008-12-23  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	-- These changes were made on the CVS alpha_29_5_branch --

	* file.c (nwos_find_matching_path_and_file_association)
	(nwos_create_file_without_storing_data): Fix Bug #2026708 - change to
	use strlcpy and strlcat instead of strncpy and strncat.
	* log.c (nwos_log): change to use strlcpy instead of strncpy.
	* recrypt.c (save_objects, main): changed to use strlcpy instead of
	strncpy.
	* security.c (nwos_get_key_from_password): changed to use strlcpy
	instead of strncpy.

	* disk_io.c (index_compressed_file): changed to use strlcpy instead of
	strcpy.
	* file.c (nwos_read_files_disc_list): changed to use strlcpy instead of
	strcpy.
	* identify_disc.c (main): changed to use strlcpy instead of strcpy.
	* recrypt.c (ref_to_path): changed to use strlcpy instead of strcpy.

	* objectify.h (strlcpy, strlcat): changed the name of the 'len'
	parameter to 'size' to be consistent with the documentation (OpenBSD
	man pages).
	* log.c (strlcpy, strlcat): changed the name of the 'len' parameter to
	'size' to be consistent with the documentation (OpenBSD man pages) and
	added an assert to make sure the size is not zero.  No changes to the
	functionality of the code.


2008-12-21  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	-- These changes were made on the CVS alpha_29_5_branch --

	* Version Alpha_29.6 release.

	* disk_usage.c: merged changes from CVS main trunk to get fixes for the
	graph.  NO changes were made on the branch.

	* file.c (find_file_path): changed so that the file path compare does
	not ignore case.  Now the file name main.html and Main.html are
	different names.  Part of fix for Bug #2427250. 

	* file.c (nwos_create_file): removed code that allowed a new path and
	file association to be created when both already existed but were not
	associated.  This allowed the original association to be hidden and
	then neither could be exported.

	* export_file.c (export_file): changed to return false if export failed
	or true if it succeeded, instead of void.
	(main): changed so that if export_file function returns false to set
	result to failed, so it exits with code 1.


2008-12-20  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	-- These changes were made on the CVS alpha_29_5_branch --
	
	* file.c (find_path_and_file_association): Fix Bug #2454681 - the
	verify_file program is not sensitive to the minutes or seconds.

	* file.c (nwos_find_matching_path_and_file_association): changed to
	print if the assocition and the time stamp matched in addition to the
	path and file.

	* list_files.c (main): added code to mark which arguments had matches
	and report any that didn't at the end.  Also return an exit code of 1
	if any didn't match.


2008-12-19  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	-- These changes were made on the CVS alpha_29_5_branch --
	
	* import_file.c (main): changed so that any PATH_NOT_FOUND,
	DUPLICATE_PATH, DUPLICATE_FILE, or MULTIPLE_FILES errors also cause
	it to exit with a 1 code.


2008-12-16  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	-- These changes were made on the CVS alpha_29_5_branch --
	
	* export_file.c (main): change to exit with a 1 status if any of the
	files specified on the command line were not found.

	* verify_file.c (process_file): changed to return false if the file
	wasn't found or if --remove was specified it wasn't removed because
	there was no known backup.
	(process_directory): changed to return false if any files weren't found
	or were not removed.
	(main): changed to return a 1 exit code if any files weren't found or
	were not removed.

	* import_file.c (main): change to exit with a 1 status if any of the
	files had errors or it was too full to add any files.

	* verify_file.c (process_file): when removing files, changed so that
	instead of asserting when a file doesn't match exactly, it prints a
	warning message and continues.  Part of fixing Bug #2427250.

	
2008-12-05  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_usage.c (display_graph): Fix Bug #2392474 - possible overflow in
	gigabyte calculation.  This technically was no longer a problem because
	of the previous change to have graph display 0 to 16 gigabytes instead
	of 0 to 100 percent, but it is better to have it fixed so any future
	changes won't break it again.
	

2008-11-28  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_usage.c (display_graph): Changed to display the graph in
	gigabytes instead of percent.
	
	* disk_usage.c (display_graph): Changed to also display allocated space
	in the graph with a '+' sign.
	
	* disk_usage.c (display_graph): Bug #2354269 - The graph printed by the
	disk_usage program is wrong.  Changed to divide the number of used
	blocks by the number of total blocks in that segment instead of the
	number of allocated blocks.


2008-11-15  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	-- This is from the CVS alpha_29_5_branch dated 2008-11-01 --
	
	* Version Alpha_29.5 release.


2008-11-03  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (check_chunk_density): new function to check which areas of
	a chunk meet the density requirement.


2008-11-02  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (Density_Split_Point, analyze_chunk_density): deleted, not
	going to work.


2008-11-01  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c - NOTE: this version is experimental and not usable.
	(lower_info_index, upper_info_index): new variables to pass area to
	allocate from to generate id function.
	(Density_Split_Point): new structure definition for passing back info
	on how the density of a chunk is divided up.
	(analyze_chunk_density): new function to analyze how the density of a
	chunk is divided up.
	(nwos_set_allocation_parameters): change to set skip parameters to one
	in small archives (not enough room to be completely random).
	(EXTRA_BLOCKS): define how many block to require in reserve.
	(nwos_check_blocks_available): started new algorithm - INCOMPLETE!


2008-11-01  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	-- This release is from the CVS alpha_29_5_branch on 2008-11-15 --
	
	* Version Alpha_29.5 release.


2008-10-31  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify_private.h (MAXIMUM_PUBLIC_REFERENCE): added new to define
	the upper limit of public references (0x0fffffff).
	(MINIMUM_PRIVATE_REFERENCE): added new to define the lower limit of
	private references (0x10000000).
	(MAXIMUM_VALID_PRIVATE_REFERENCE): changed to MAXIMUM_PRIVATE_REFERENCE.
	(MINIMUM_TEMPORARY_REFERENCE): added new to define the lower limit of
	temporary references (0xfff00000).
	(MAXIMUM_TEMPORARY_REFERENCE): added new to define the upper limit of
	temporary references (0xffffffff).
	* objectify.h (Reference_Type): added two new types: Unknown_Reference
	and Temporary_Reference.
	(nwos_is_public_reference): added external declaration for.
	(nwos_is_private_reference): added external declaration for.
	(nwos_is_temporary_reference): added external declaration for.
	* objectify.c (is_valid_private_reference): moved to disk_io.c and
	renamed to nwos_is_private_reference.
	(nwos_initialize_objectify, nwos_create_root): changed 
	is_valid_private_reference to nwos_is_private_reference.
	(nwos_reference_type): moved to disk_io.c.
	* disk_io.c (nwos_is_public_reference): new function to test if a
	reference is a public reference.
	(nwos_is_private_reference): moved from objectify.c and renamed from
	is_valid_private_reference.
	(nwos_is_temporary_reference): new function to test if a reference is
	a temporary reference.
	(nwos_reference_type): moved from objectify.c.
	(nwos_initialize_disk_io): changed MAXIMUM_VALID_PRIVATE_REFERENCE to
	MAXIMUM_PRIVATE_REFERENCE.
	(nwos_allocate_new_chunk, uint32_ref_to_info_index): changed
	RESERVED_PUBLIC_BLOCKS to MINIMUM_PRIVATE_REFERENCE, and
	MAXIMUM_VALID_PRIVATE_REFERENCE to MAXIMUM_PRIVATE_REFERENCE.
	(nwos_hash_uint32_ref): changed
	RESERVED_PUBLIC_BLOCKS to MAXIMUM_PUBLIC_REFERENCE,
	MAXIMUM_VALID_PRIVATE_REFERENCE to MAXIMUM_PRIVATE_REFERENCE and
	RESERVED_PUBLIC_BLOCKS to MINIMUM_PRIVATE_REFERENCE.
	(nwos_check_blocks_available): changed MAXIMUM_VALID_PRIVATE_REFERENCE
	to MAXIMUM_PRIVATE_REFERENCE.
	(nwos_read_block): changed RESERVED_PUBLIC_BLOCKS to
	MAXIMUM_PUBLIC_REFERENCE.


2008-10-28  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify_private.h (nwos_set_allocation_parameters): changed
	skip_backward and skip_forward parameters to uint32 instead of int32.
	* objectify.c (nwos_set_security_level): changed skip_backward
	parameters to positive values instead of negative values.
	* disk_io.c (chunk_skip_backward, chunk_skip_forward): changed to
	uint32 instead of int32.
	(nwos_set_allocation_parameters): changed skip_backward and 
	skip_forward parameters to uint32 instead of int32.  Changed assert for
	skip_backward to treat it as positive value instead of negative.
	(nwos_check_blocks_available): changed assert for chunk_skip_backward
	to treat it as a positive value instead of negative.


2008-10-27  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (nwos_initialize_disk_io): changed so that if the backup
	directory is an empty string (as it is if the environment variable is
	defined but empty) it doesn't create a backup (.dif) file.
	

2008-10-26  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (nwos_check_blocks_available): removed a new line character
	from the log message about allocating a new chunk.

	* disk_io.c (nwos_check_blocks_available): Added a hack so that when it
	reaches the end of the private chunk space it turns around and goes
	backwards.

	* disk_io.c (Bit_Map_Cache_Entry): changed 'index' member to
	'chunk_index'.  Before the 'index' was an index into the chunk_info
	table, now it is a direct index to the chunk.
	(write_bit_map, read_bit_map_into_cache, nwos_generate_new_1_in_N_id)
	(find_bit_map_in_cache, nwos_set_bit_in_map, nwos_clear_bit_in_map)
	(nwos_generate_new_closely_spaced_id): changed 'index' in bit map cache
	to 'chunk_index'.  Previously 'index' was the index into the chunk_info
	table.  This was necessary because if the chunk_info table is changed
	by having a new chunk inserted somewhere (as opposed to added at the
	end) the bit map cache will index into the wrong chunk.

	* disk_io.c (nwos_check_blocks_available): Bug #2184020 - Assert when
	adding files and chunk is near upper limit.  Fixed if statement that
	checks for reaching the last available chunk.

	* TSU_NOTIFICATION: this is a document describing the TSU NOTIFICATION
	process that I followed to notify the government of this project that
	performs encryption.  I did this so I could implement Feature Request
	#1985484 and it is also related to Feature Request #1994380.  See the
	document itself for more information.


2008-10-20  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify_private.h (MAX_ROOT_TRANSFORMATIONS): changed back to 128.
	* objectify.c (root_transform_primes): deleted array, multiplying by
	primes did not distribute the result evenly over the entire space.
	(is_binary_number): new function that returns true if the number passed
	in is a power of 2 (1, 2, 4, 8, 16, etc.).
	(nwos_transform_root): changed to add the transform number to the upper
	byte of the reference id instead of multiplying by a prime number.
	(nwos_create_root): changed to randomly transform the root object so
	that it doesn't always land in the same location.


2008-10-19  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_usage.c (main): Fix Bug #2117258 - Seg fault running disk_usage.
	Changed for loop to only do used_private_chunks instead of 
	total_private_chunks because only space for used_private_chunks is
	malloc'd.


2008-10-02  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify_private.h (MAX_ROOT_TRANSFORMATIONS): changed name from
	MAX_TRANSFORMATIONS and changed from 128 to 16.
	* objectify.c (is_valid_private_reference): changed name from
	is_valid_reference.
	(rotate_left, reverse_byte, reverse_bits): removed, no longer used.
	(root_transform_primes): array of 16, 32-bit prime numbers that are
	distributed from 0x10000000 to 0xffffffff.
	(nwos_transform_root): changed to multiply reference by a prime
	number instead of the rotating, inverting, and reversing.  One of the
	reasons for doing this was because there were certain values that did
	not transform well, 0x55555555 being a worst case example.
	

2008-09-30  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify_private.h (MAX_TRANSFORMATIONS): definition of how many
	possible transformations can be done by nwos_transform_root.
	(nwos_transform_root): added external declaration for.
	* objectify.c (is_valid_reference): new function that returns true if
	reference passed in is a valid private reference (0x10000000 to
	0xffeffff).
	(rotate_left): new function that rotates a reference left the number of
	bits specified.
	(reverse_byte): new array with values that reverse left to right the
	bits in a byte (I.E. 0x7a -> 0x5e).
	(reverse_bits): new function that reversed the bits in a reference from
	left to right (I.E. 0x12345678 -> 0x1e6a2c48).
	(nwos_transform_root): new function that modifies a reference in a
	certain way depending upon a modification number passed in:
	    0         = no change,
	    1 to 31   = rotate left that number of bits,
	    32        = invert,
	    33 to 63  = invert and rotate left number - 32 bits,
	    64        = reverse bits end to end,
	    65 to 95  = reverse bits and rotate left number - 64 bits
	    96        = reverse bits and invert
	    97 to 127 = reverse bits, invert, and rotate left number - 96 bits.
	(setup_from_big_key): add assert to verify an object referencs is 4
	bytes.
	(nwos_initialize_objectify): add loop to try all possible
	transformations of the root object reference.


2008-09-25  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (nwos_initialize_disk_io): Fix Bug #2126403 - Assert when
	using compressed file.  Changed so that chunk_info table is not created
	and processed when reading from a compressed file.  This also fixed the
	problem where it complained about calculated sum of used blocks not
	matching stored count when reading from a compressed file.


2008-09-19  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (nwos_initialize_disk_io): added a warning message if it
	finds any chunks greater than MAXIMUM_VALID_PRIVATE_REFERENCE, which
	means there are blocks in the space now reserved for temporary blocks.


2008-09-18  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objecitfy_private.h (RESERVED_PRIVATE_BLOCKS): changed to 0xeff00000
	instead of RESERVED_PRIVATE_CHUNKS * USABLE_BLOCKS_PER_CHUNK which
	worked out to 0xeffffc40.
	(RESERVED_TEMPORARY_BLOCKS): new define that represents 256 megabytes
	or one mega blocks: 0x00100000 for temporary usage.
	(RESERVED_PRIVATE_CHUNKS): changed to allow for temporary blocks.
	(MAXIMUM_VALID_PRIVATE_REFERENCE): put in a hack for Alpha_29.5 because
	it doesn't come out even with odd sized (65504 block) chunks.  In
	Alpha_30, which will have even (65536 block) chunks it will be even.


2008-09-17  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_usage.c (display_graph): new function to display a bar graph of
	disk usage.
	(main): added call to display_graph.


2008-09-16  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_usage.c (calculate_blocks_used): changed to print a progress bar
	instead of blocks used per gigabyte.
	* Makefile.in (disk_usage): added progress_bar.o.

	* objectify.h (nwos_erase_progress_bar): added new external declaration
	for.
	* progress_bar.c (put_char): new function to write one character to the
	standard output and add it to the count.
	(put_string): new function to write a string to the standard output
	using the put_char function, so each character is counted.
	(put_decade): new function to print 0, 10, 20, etc. to standard output
	using the put_char function, so each character is counted.
	(nwos_start_progress_bar): change to call new put_string function
	instead of printf.
	(nwos_update_progress_bar): change to call new put_decade and put_char
	functions instead of printf.
	(nwos_erase_progress_bar): new function to erase the progress bar that
	has been printed.
	(nwos_finish_progress_bar): change to call new put_decade and put_char
	functions instead of printf.


2008-09-13  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* security.c (nwos_get_key_from_password): Fix Bug #2103915 -
	"If showing Pass Phrase it isn't obfuscated after entering".  Changed
	test to check for "Show" mode instead of "Hide" mode.


2008-09-07  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_29.4 release.

	* configure.ac: updated version to Alpha_29.4.

	* security.c (nwos_get_key_from_password): fixed so num_chars is set
	when reading pass phrase from environment variable.
	
	* security.c (display_help): new function to display help information
	at the pass phrase prompt.
	(nwos_get_key_from_password): added 'show', 'hide', 'none' and 'last'
	modes for entering pass phrase.  If 'quit' or 'exit' is typed at the
	pass phrase prompt it will exit without running.  Also changed to use
	fputc instead of fprintf for writing a single character.


2008-09-06  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* security.c (nwos_get_key_from_password): change to read pass phrase
	in non-canonical mode instead of using fgets.

	* config.h.in (TEST_PASS_PHRASE): removed, no longer used.
	(TEST_ENVIRONMENT_VARIABLE): added to define name of environment
	variable.
	* prep_disk.c (main): change to read environment variable instead of
	TEST_PASS_PHRASE to skip agree_no_warranty and understand security.
	* remove_file.c (main): change to read environment variable instead of
	TEST_PASS_PHRASE to skip verification that user really wants to do it.
	* security.c (nwos_get_key_from_password): change to read environment
	variable instead of TEST_PASS_PHRASE #define for testing pass phrase.


2008-09-01  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_29.3 release.

	* configure.ac: updated version to Alpha_29.3.

	* export_c_structs.c (main): change for new nwos_initialize_objectify
	calling convention and remove call to nwos_set_root_object.
	
	* import_file (main): Fix Bug #2043130 - changed to print a warning
	message when an absolute path is given, instead of asserting.
	* verify_file (main): Fix Bug #2043130 - changed to print a warning
	message when an absolute path is given, instead of asserting.

	* objectify_private.h (nwos_create_root): changed to no take any
	parameters.
	* objectify.c (set_public_root_object): moved from prep_disk.c.
	(nwos_create_root): moved most of the code from prep_disk.c that
	prepared to create the root object.  Added a loop that reads the pass
	phrase twice and verifies they are the same before continuing.
	* prep_disk.c (main): moved almost all of the code that prepared to
	create the root object into the nwos_create_root function in
	objectify.c
	* add_password.c (main): moved almost all of the code that prepared to
	create the root object into the nwos_create_root function in
	objectify.c

	* disk_io.c (nwos_allocate_all_chunks_hack): removed, no longer used.
	
	* disk_io.c (nwos_allocate_new_chunk): fixed bug where it wasn't
	searching the chunk_info table to insert the new chunk.
	(chunk_info_reverse_index): table to translate from a chunk number to
	an index into the chunk_info table.
	(update_chunk_info_reverse_index): new function to update the
	chunk_info_reverse_index.
	(chunk_index_to_info_index): changed to just look the info index up
	in the chunk_info_reverse_index instead of doing the binary search.
	Which no longer works because the chunk index is not always in order.

	* objectify.c (setup_from_big_key): created from code extracted from
	nwos_initialize_objectify that sets up the Blowfish key, the sequence
	tables and returns the root object reference.
	(nwos_initialize_objectify): extracted code that sets up Blowfish key,
	the sequence tables, and the root object and created setup_from_big_key
	function.


2008-08-31  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (ref_to_offset): change so that if the hash returned by
	nwos_hash_ref is zero, return minus one instead of asserting.
	(nwos_read_block): change to return false if block is not found,
	ref_to_offset returned -1 or not found in compressed index.
	(nwos_write_block): assert if ref_to_offset returns a negavie value.
	(nwos_remove_object): assert if ref_to_offset returns a negavie value.
	* objectify.h (nwos_initialize_objectify): private_root_object_ref
	removed.
	(nwos_set_root_object): changed to return bool instead of void.
	* objectify.c (nwos_initialize_objectify): changed to not return the
	private_root_object_ref value, but call nwos_set_root_object instead.
	Also allows three attempts at entering correct pass phrase.
	(nwos_set_root_object): change to return boolean success or failure.
	* check_objects.c (main): change for new nwos_initialize_objectify
	calling convention and remove call to nwos_set_root_object.
	* computer.c (main): change for new nwos_initialize_objectify calling
	convention and remove call to nwos_set_root_object.
	* disc_list.c (main): change for new nwos_initialize_objectify calling
	convention and remove call to nwos_set_root_object.
	* dump_obj.c (main): change for new nwos_initialize_objectify calling
	convention and remove call to nwos_set_root_object.
	* expand_sparse.c (main): change to call nwos_initialize_disk_io
	instead of nwos_initialize_objectify because there is no need to have
	objectify up and running just to write blocks.
	* export_file.c (main): change for new nwos_initialize_objectify
	calling convention and remove call to nwos_set_root_object.
	* identify_disc.c (main): change for new nwos_initialize_objectify
	calling convention and remove call to nwos_set_root_object.
	* import_file.c (main): change for new nwos_initialize_objectify
	calling convention and remove call to nwos_set_root_object.
	* list_discs.c (main): change for new nwos_initialize_objectify calling
	convention and remove call to nwos_set_root_object.
	* list_files.c (main): change for new nwos_initialize_objectify calling
	convention and remove call to nwos_set_root_object.
	* log_disc.c (main): change for new nwos_initialize_objectify calling
	convention and remove call to nwos_set_root_object.
	* remove_file.c (main): change for new nwos_initialize_objectify
	calling convention and remove call to nwos_set_root_object.
	* rename_file.c (main): change for new nwos_initialize_objectify
	calling convention and remove call to nwos_set_root_object.
	* update_files_0028.c (main): change for new nwos_initialize_objectify
	calling convention and remove call to nwos_set_root_object.
	* verify_file.c  (main): change for new nwos_initialize_objectify
	calling convention and remove call to nwos_set_root_object.

	* objectify.h (nwos_read_variable_sized_object_from_disk)
	(nwos_read_object_from_disk): changed to return bool (success or
	failure) instead of asserting on failures.
	* objectify.c (check_object_data): changed to return bool (success or
	failure) instead of void and exiting if failure.
	(nwos_read_variable_sized_object_from_disk)
	(nwos_read_object_from_disk): changed to return bool (success or
	failure) instead of asserting on failures.
	(nwos_set_root_object): added assert around call to
	nwos_read_object_from_disk.
	* acronym.c (nwos_acronym_to_string): added an assert around calls to
	nwos_read_object_from_disk & nwos_read_variable_sized_object_from_disk.
	* add_password.c (set_public_root_object): added an assert around call
	to nwos_read_object_from_disk.
	* check_objects.c (check_spelling, check_name, check_class, main): added
	an assert around calls to nwos_read_variable_sized_object_from_disk.
	(check_month): added an assert around call to
	nwos_read_object_from_disk.
	(check_file_path): added an assert around calls to
	nwos_read_variable_sized_object_from_disk & nwos_read_object_from_disk.
	* class_definition.c (feature_size, nwos_clone_class_definition)
	(nwos_read_class_definition, nwos_read_variable_sized_object_from_disk)
	(nwos_find_private_class_definition, nwos_find_public_class_definition)
	(nwos_clone_updated_class_definition): added an assert around calls to
	nwos_read_variable_sized_object_from_disk.
	(nwos_get_object_size, nwos_find_public_feature_definition) added an
	assert around calls to nwos_read_object_from_disk and
	nwos_read_variable_sized_object_from_disk.
	* date.c (find_year_from_cardinal, nwos_find_or_create_private_year)
	(find_month, nwos_find_or_create_private_month, find_month_and_day)
	(nwos_find_or_create_private_month_and_day, nwos_year_to_string)
	(find_date, nwos_month_number_to_string, nwos_date_to_string): added an
	asssert around calls to nwos_read_object_from_disk.
	* device.c (nwos_list_public_manufacturers)
	(nwos_find_public_manufacturer): added assert around call to
	nwos_read_object_from_disk.
	* disc_list.c (check_for_previous_version_and_link): added an assert
	around calls to nwos_read_variable_sized_object_from_disk and
	nwos_read_object_from_disk.
	* dump_obj.c (main): added assert around call to
	nwos_read_object_from_disk.
	* export_c_structs.c (class_to_type, output_class, main): added an
	assert around calls to nwos_read_variable_sized_object_from_disk.
	(output_feature): added an assert around call to
	nwos_read_object_from_disk.
	* export_file.c (main): added an assert around calls to 
	nwos_read_object_from_disk & nwos_read_variable_sized_object_from_disk.
	(export_file): added assert around calls to nwos_read_object_from_disk.
	* file.c (find_file_path, nwos_find_disc_list, nwos_file_path_to_string)
	(nwos_find_matching_disc_list): added an assert around calls to
	nwos_read_variable_sized_object_from_disk.
	(nwos_number_of_files_for_path, nwos_create_file_path,nwos_create_file)
	(nwos_file_path_to_path_and_file_association, nwos_file_has_backup)
	(nwos_create_disc_list): added an assert around calls to
	nwos_read_variable_sized_object_from_disk & nwos_read_object_from_disk.
	(find_md5, nwos_create_md5, find_sha1, nwos_create_sha1, find_sha256)
	(nwos_create_sha256, nwos_find_path_and_file_association_by_index)
	(find_sha512, nwos_create_sha512, find_matching_file_from_size_md5_sha1)
	(nwos_file_is_stored, nwos_find_or_create_path_and_file_association)
	(nwos_add_info_to_existing_file, nwos_add_new_revision_of_file)
	(nwos_check_file_checksums, nwos_restore_file, nwos_file_is_identical)
	(nwos_find_disc_copy, nwos_create_disc_copy, nwos_find_storage_location)
	(find_path_and_file_association, nwos_create_storage_location): added
	an assert around calls to nwos_read_object_from_disk.
	* financial.c (nwos_find_public_credit_union, nwos_list_credit_unions)
	(nwos_list_public_credit_unions, nwos_find_private_credit_union)
	(nwos_find_or_create_private_credit_union, nwos_create_account)
	(nwos_find_account, nwos_describe_person): add an assert around calls
	to nwos_read_object_from_disk.
	(nwos_find_or_create_account_number, nwos_create_checking)
	(nwos_list_accounts): added an assert around calls to 
	nwos_read_object_from_disk & nwos_read_variable_sized_object_from_disk.
	(nwos_find_account_number, nwos_account_number_to_string): added an
	assert around calls to nwos_read_variable_sized_object_from_disk.
	* identify_disc.c (main):added an assert around calls to
	nwos_read_variable_sized_object_from_disk.
	* language.c (nwos_find_language): added assert around call to
	nwos_read_object_from_disk.
	* list_discs.c (main): added an assert around calls to 
	nwos_read_object_from_disk & nwos_read_variable_sized_object_from_disk.
	* list_files.c (print_md5, print_sha1, print_sha256, print_sha512):
	added an assert around calls to nwos_read_object_from_disk.
	(main): added an assert around calls to 
	nwos_read_object_from_disk & nwos_read_variable_sized_object_from_disk.
	* log_disc.c (main): added an assert around calls to 
	nwos_read_object_from_disk & nwos_read_variable_sized_object_from_disk.
	* name.c (nwos_find_public_name, nwos_find_private_name)
	(nwos_create_name, nwos_name_to_string) added an assert around calls to 
	nwos_read_variable_sized_object_from_disk.
	* number.c (nwos_find_cardinal_number, nwos_create_ordinal_number)
	(nwos_find_ordinal_number, nwos_ordinal_number_to_string): added an
	assert around calls to nwos_read_object_from_disk.
	(nwos_cardinal_number_to_string): added an assert around calls to 
	nwos_read_variable_sized_object_from_disk.
	(nwos_create_cardinal_number): added an assert around calls to 
	nwos_read_object_from_disk & nwos_read_variable_sized_object_from_disk.
	* person.c (nwos_find_public_gender, nwos_find_private_gender)
	(nwos_find_or_create_private_gender, nwos_create_ssn)
	(nwos_add_birthday, nwos_find_person, nwos_list_persons)
	(nwos_describe_person): added an assert around calls to
	nwos_read_object_from_disk.
	* phone.c (nwos_find_public_area_code, nwos_find_private_area_code)
	(nwos_find_or_create_private_area_code, nwos_find_phone_number)
	(nwos_phone_number_to_string, nwos_phone_number_to_string)
	(nwos_add_mobile_phone, nwos_add_mobile_phone)
	(nwos_find_phone_for_person): added an assert around calls to
	nwos_read_object_from_disk.
	* prep_disk.c (set_public_root_object): added assert around call to
	nwos_read_object_from_disk.
	* recrypt.c (save_objects): added an assert around calls to 
	nwos_read_object_from_disk & nwos_read_variable_sized_object_from_disk.
	(main): added assert around call to nwos_read_object_from_disk.
	* remove_file.c (main): added an assert around calls to 
	nwos_read_object_from_disk & nwos_read_variable_sized_object_from_disk.
	* rename_file.c (file_is_used_in_disc_list): added an assert around
	calls to nwos_read_variable_sized_object_from_disk.
	(create_new_path): added assert around call to
	nwos_read_object_from_disk.
	(main): added an assert around calls to nwos_read_object_from_disk and
	nwos_read_variable_sized_object_from_disk.
	* spelling.c (nwos_find_public_spelling, nwos_find_private_spelling):
	added an assert around calls to 
	nwos_read_variable_sized_object_from_disk.
	(nwos_create_public_spelling, nwos_create_private_spelling): added an
	assert around calls to nwos_read_object_from_disk and
	nwos_read_variable_sized_object_from_disk.
	* update_files_0028.c (main): added an assert around calls to
	nwos_read_object_from_disk & nwos_read_variable_sized_object_from_disk.
	* url.c (nwos_find_public_url, nwos_url_to_string): added an assert
	around calls to nwos_read_variable_sized_object_from_disk.
	(nwos_create_url): added an assert around calls to 
	nwos_read_object_from_disk & nwos_read_variable_sized_object_from_disk.
	* us_state.c (nwos_create_us_city, nwos_add_city, nwos_add_city)
	(nwos_describe_state, nwos_list_cities_in_state): added an assert
	around calls to nwos_read_object_from_disk.
	* word.c (nwos_find_word): added assert around call to
	nwos_read_object_from_disk.

	* objectify_private.h (nwos_read_object_from_disk): removed declaration
	because it is declared in objectify.h


2008-08-30  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify.h (nwos_initialize_objectify): removed bf_key, linear, and
	serial parameters and added private_root_obj_ref.
	* objectify.c (nwos_initialize_objectify): removed bf_key, linear, and
	serial parameters and added private_root_obj_ref to return the private
	object reference back to the caller.
	* export_c_structs.c (main): remove old nwos_initialize_objectify
	parameters that are no longer passed to it and now pass root_obj_ref.
	Removed assert that tested linear and serial parameters for zero in
	public mode.
	* expand_sparse.c (main): changed parameters to
	nwos_initialize_objectify.
	* add_password.c (main): changed to no longer deal with getting pass
	phrase and passing all of the key stuff to nwos_initialize_objectify.
	* check_objects.c (main): changed to no longer deal with getting pass
	phrase and passing all of the key stuff to nwos_initialize_objectify.
	* computer.c (main): changed to no longer deal with getting pass
	phrase and passing all of the key stuff to nwos_initialize_objectify.
	* disc_list.c (main): changed to no longer deal with getting pass
	phrase and passing all of the key stuff to nwos_initialize_objectify.
	* dump_obj.c (main): changed to no longer deal with getting pass
	phrase and passing all of the key stuff to nwos_initialize_objectify.
	* export_file.c (main): changed to no longer deal with getting pass
	phrase and passing all of the key stuff to nwos_initialize_objectify.
	* identify_disc.c (main): changed to no longer deal with getting pass
	phrase and passing all of the key stuff to nwos_initialize_objectify.
	* import_file.c (main): changed to no longer deal with getting pass
	phrase and passing all of the key stuff to nwos_initialize_objectify.
	* list_discs.c (main): changed to no longer deal with getting pass
	phrase and passing all of the key stuff to nwos_initialize_objectify.
	* list_files.c (main): changed to no longer deal with getting pass
	phrase and passing all of the key stuff to nwos_initialize_objectify.
	* log_disc.c (main): changed to no longer deal with getting pass
	phrase and passing all of the key stuff to nwos_initialize_objectify.
	* prep_disk.c (main): changed to no longer deal with getting pass
	phrase and passing all of the key stuff to nwos_initialize_objectify.
	* remove_file.c (main): changed to no longer deal with getting pass
	phrase and passing all of the key stuff to nwos_initialize_objectify.
	* rename_file.c (main): changed to no longer deal with getting pass
	phrase and passing all of the key stuff to nwos_initialize_objectify.
	* update_files_0028.c (main): changed to no longer deal with getting
	pass phrase and passing all of the key stuff to
	nwos_initialize_objectify.
	* verify_file.c (main): changed to no longer deal with getting pass
	phrase and passing all of the key stuff to nwos_initialize_objectify.

	* Makefile.in (clean_c_structs): new target that just removes
	export_c_structs and c_structs.h.
	(clean_all): removed cleaning Makefile and config.h.  Moved removal of
	export_c_structs and c_structs.h to new clean_c_structs target and
	added it as a dependency.  Also changed to call make in the
	subdirectories with "clean" instead of "clean_all".
	(distclean): added new clean_c_structs as a dependency so that
	export_c_structs and c_structs.h are deleted.  This was broken in the
	2008-07-31 change.
	* attic/Makefile.in (clean_all): removed.
	(dist_clean): removed config.log and config.status that aren't in the
	attic.
	* gnu/Makefile.in (clean_all): removed.
	(distclean): added Makefile to remove.
	* http/Makefile.in (clean_all): removed.


2008-08-24  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_29.2 release.

	* config.h.in (DEFAULT_LOG_FILE_PATH): removed, no longer used.
	* user_config.c (path_table): changed DEFAULT_LOG_FILE_PATH to NULL,
	not doing a default log file anymore.
	* log.c (nwos_log): added code to see if log_file_path is NULL or empty
	and disable logging if it is.
	* objectify.conf: changed to reflect that there is no longer a default
	log file.
	

2008-08-10  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* configure.ac: updated version to Alpha_29.2.  I accidentally checked
	in the change to Alpha_30 into the trunk instead of the 0030 branch.
	I wanted the truck to stay at 0029 for now, so I created this version.

	* check_block_maps.c (main): added printing of path in "Missing magic
	number" and "Incorrect version in header" error messages.
	* compress_sparse.c (main): added printing of path in "Missing magic
	number" and "Incorrect version in header" error messages.
	* disk_io.c (nwos_initialize_disk_io): added printing of path in
	"Missing magic number" and "Incorrect version in header" error
	messages.
	* disk_usage.c (main): added printing of path in "Missing magic number"
	and "Incorrect version in header" error messages.


2008-08-09  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_29.1 release.

	* configure.ac: updated version to Alpha_29.1.

	
2008-08-05  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* progress_bar.c (nwos_finish_progress_bar): Fix Bug #2038862 - change
	to not assert if 100% was already done by nwos_update_progress_bar.


2008-08-04  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_29 release.


2008-08-03  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disc_list.c (main): added --ignore-empty-directories and
	--ignore-empty-files options.
	* log_disc.c (main): added --ignore-empty-directories and
	--ignore-empty-files options.

	* objectify.h (DISC_LIST_NUM_FILES_MASK, DISC_LIST_EMPTY_FILE_FLAG)
	(DISC_LIST_EMPTY_DIR_FLAG, DISC_LIST_ERROR_SHIFT, DISC_LIST_ERROR_MASK)
	(DISC_LIST_INVALID_TYPE_FLAG, DISC_LIST_TOO_MANY_FILES_FLAG): added
	definitions for.
	(nwos_read_files_disc_list): changed to return 'uint32' instead of
	'int' and 'num_files' parameter to uint32.
	* file.c (nwos_read_files_disc_list): changed to return 'uint32'
	instead of 'int' and 'num_files' parameter to uint32.  Changed to use
	new DISC_LIST_*_FLAGs for errors.
	* disc_list.c (main): changed to handle new return values from
	nwos_read_files_disc_list.
	* log_disc.c (main): changed to handle new return values from
	nwos_read_files_disc_list.


2008-08-02  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* file.c (nwos_read_files_disc_list): consolodated duplicate error
	handling code.

	* file.c (nwos_read_files_disc_list): Fix Bug #2035981 - "Disc_list
	reports empty directories when they are not".  Changed to return the
	number of files in a directory even when an error has occurred
	previously.


2008-08-01  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* reference_list.c (check_ref_list_data): renamed to 
	"ref_list_checksum_matches" and changed to return true if checksum
	matches and false if it doesn't, instead of printing an error and
	exiting.
	(read_ref_list_into_cache): changed so that it can handle reference
	lists that start out with the old encryption but then later change to
	the new encryption.  This is necessary because when adding to a
	reference list only the last block is re-written and so the first
	blocks can be old encryption and later blocks new encryption.

	* dump_obj.c (main): added call to log arguments to disable logging and
	fixed typo in print statement text.

	* remove_file.c (main): added call to log arguments.

	* objectify.c (nwos_read_object_from_disk)
	(nwos_read_variable_sized_object_from_disk): added setting header to
	point to the object back in so that when reading an object larger than
	one block it gets the data checksum from the correct place.

	* dump_obj.c (main): added code to print class name and dump object
	data in hex.


2008-07-31  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify_private.c (nwos_read_object_from_disk_and_old_decrypt):
	added external declaration for.
	* objectify.c (check_object_header): renamed to 
	"object_header_checksum_matches" and changed to return true if checksum
	matches and false if it doesn't, instead of printing an error and
	exiting.
	(nwos_old_read_object_from_disk_and_decrypt): renamed to
	"nwos_read_object_from_disk_and_old_decrypt".
	(nwos_read_object_from_disk)
	(nwos_read_variable_sized_object_from_disk)
	(nwos_get_object_class_without_update)
	(nwos_read_object_headers_from_disk): changed so that if checksum does
	not match after reading with nwos_read_object_from_disk_and_decrypt it
	reads the block again with nwos_read_object_from_disk_and_old_decrypt.
	* reference_list.c (read_ref_list_into_cache): changed so that if
	class definition doesn't match nwos_reference_list_class_ref after
	reading with nwos_read_object_from_disk_and_decrypt it reads the block
	again with nwos_read_object_from_disk_and_old_decrypt.
	* file.c (nwos_file_is_identical, nwos_restore_file): changed so that
	if checksum doesn't match after reading a block with 
	nwos_read_object_from_disk_and_decrypt it reads the block again with
	nwos_read_object_from_disk_and_old_decrypt.
	* dump_obj.c (main):  changed so that if checksum doesn't match after
	reading a block with nwos_read_object_from_disk_and_decrypt it reads the
	block again with nwos_read_object_from_disk_and_old_decrypt.

	* Makefile.in (clean): moved removal of export_c_structs and
	c_structs.h to "clean_all" target.
	(clean_all): moved removal of export_c_structs and c_structs.h from
	"clean" target.

	* objectify.c (nwos_read_object_from_disk_and_old_decrypt): copied
	nwos_read_object_from_disk_and_decrypt before changing order.
	(nwos_write_object_to_disk_and_encrypt)
	(nwos_read_object_from_disk_and_decrypt): Feature Request #2006029
	"Reverse the order of the encryption" - changed the order of the
	blowfish encryption and the reordering of the bytes to make it harder
	to decrypt the data.  Originally it reordered the bytes first and then
	applied the encryption.  The problem with that was that if the
	encryption was broken it would be more trivial to reorder the data
	because the data itself would give hints as to the correct position of
	the data (zeros could be picked out for example).  Now the encryption
	is applied first and then the data is scrambled.  This way to crack it
	the descrambling has to be done first while the data is hidden, when
	there aren't any clues as to it's position.


2008-07-30  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify.c (nwos_write_object_to_disk_and_encrypt)
	(nwos_read_object_from_disk_and_decrypt): eliminated 'ptrobj' variable
	in encrypt and decrypt functions, changed to use memcpy instead of for
	loop, and eliminated copying the first 8 bytestwice.

	* objectify.c (nwos_write_object_to_disk_and_encrypt)
	(nwos_read_object_from_disk_and_decrypt): changed 'buffer1' and
	'buffer2' in the decrypt and encrypt functions to 'scrambled' and
	'encrypted' respectively, to make it easier to follow the flow of the
	data.

	* objectify.c (save_unencrypted, save_add_random, save_mixed_up)
	(save_encrypted, compare_bufs): deleted, originally used to debug
	encryption but isn't needed now and is cluttering up the place.
	(nwos_write_object_to_disk_and_encrypt)
	(nwos_read_object_from_disk_and_decrypt): removed old DEBUG_ENCRYPTION
	code, no longer needed.

	* configure.ac: updated version to Alpha_29.


2008-07-27  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_28.4 release.

	* configure.ac: updated version to Alpha_28.4.


2008-07-26  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disc_list.c (main): changed to use return value from
	nwos_read_files_disc_list for exit code if it fails.
	
	* file.c (nwos_read_files_disc_list): added  test to 
	nwos_read_files_disc_list for empty files and fixed invalid test so it
	would merge -4 instead of writing over any existing errors.

	* file.c (nwos_read_files_disc_list): changed error processing in
	nwos_read_files_disc_list to make combining errors more generic (or'ing
	them).  Fixed too many files test to include result value and changed
	to return -8 for too many files instead of exiting.

2008-07-25  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* file.c (nwos_read_files_disc_list): commented out print statement
	that I forgot and left in the check in.

	* log_disc.c (file_names, files): changed from being local variables
	in "main" function to static global variables.
	(main): changed to call nwos_read_files_disc_list to get list of file
	names which can recursively do subdirectories.


2008-07-24  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify.h (nwos_read_files_disc_list): added external declaration.
	* file.c (nwos_read_files_disc_list): moved read_file_names function
	from disc_list.c and renamed it.  Modified the parameters to pass in
	names array and number of files and return number of files read.  Also
	added code to deal with empty directories.  
	* disc_list.c (read_file_names): moved to file.c and renamed to
	nwos_read_files_disc_list.
	(main): changed to call renamed nwos_read_files_disc_list function and
	print error message if the directory was empty.

	* disc_list.c (read_file_names): changed to return boolean, true if all
	of the files were okay or false if any of the files were invalid types
	like symbolic links or devices.  Added subdirectory parameter so it can
	call itself recursively and fix to recursively read file names from
	subdirectories.
	(main): changed to call read_file_names function with a NULL parameter
	for the subdirectory to indicate that this is the root call.

	* objectify.h (MAX_FILES_PER_DISC_LIST): changed from 4096 to 1000000.

	* disc_list.c (num_files, file_names, files): changed from being local
	variables in "main" function to static global variables.
	(read_file_names): new function created from code extracted from "main"
	function.
	(main): moved variables "num_files", "file_names", and "files" out and
	made them static global variables.  Moved code that scanned all file
	names out into a new function "read_file_names" and called it instead.


2008-07-19  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_28.3 release.

	* configure.ac: updated version to Alpha_28.3.

	* prep_disk.c (main): removed #ifndef TEST_PASS_PHRASE around the code
	that asks if it is okay to overwrite the storage.  Too dangerous!!

	* objecitfy.c (nwos_create_root): added code to set the new
	'creating_root' static variable when creating the root object which has
	a public class definition.
	(nwos_write_object_to_disk): added test in assert for 'creating_root'
	variable being set if object being written doesn't have a private
	class.

	* update_files_0028.c (main): added call to set security level in
	case the FILE class definition gets updated to the latest version.
	Changed call to nwos_find_or_create_private_class_definition for the
	FILE class instead of just nwos_find_private_class_definition so that
	the updated FILE class will be cloned if it hasn't been already.

	* reference_list.c (nwos_add_to_references): changed to call
	nwos_get_object_class_without_update instead of nwos_get_object_class.
	This fixes a problem where cloning the updated file class definition
	called this function to add the new reference to the class definition
	reference list.  But when this called nwos_get_object_class it called
	get_file_00x_reference, which called get_file_references, which called
	find_private_class_defintion, which reads the class defintion reference
	list.  Unfortunately that was what was being added with this function
	so it wasn't in the list yet so it could not find the "FILE" class
	definition, then later puked because it didn't have the private FILE
	class definitions in the file_references array.

	* objecitfy.c (get_file_class_reference): added code to check to see if
	an updated private file class has been added after this was first
	called.

	* objectify_private.h (nwos_disk_io_is_read_only)
	(nwos_disk_io_is_read_write): added external declarations for.
	* disk_io.c (nwos_disk_io_is_read_only, nwos_disk_io_is_read_write):
	added to return status of storage (read_only flag).

	* class_definition.c (nwos_find_or_create_private_class_definition):
	added asserts to verify that after an updated class was cloned it was
	accessible.

	* Makefile.in (OBJS, compress_sparse): added progress_bar.o.
	* prep_disk.c (start_progress_bar, update_progress_bar)
	(finish_progress_bar): moved to new file: progress_bar.c.
	(write_chunks, main): changed names of start_progress_bar,
	update_progress_bar, and finish_progress_bar functions to
	nwos_start_progress_bar, nwos_update_progress_bar, and
	nwos_finish_progress_bar respectively.
	* objectify.h (nwos_start_progress_bar, nwos_update_progress_bar)
	(nwos_finish_progress_bar): added external declarations for.
	* progress_bar.c (nwos_start_progress_bar, nwos_update_progress_bar)
	(nwos_finish_progress_bar): moved from prep_disk.c and renamed with
	nwos_ prefix and added asserts if finish called more than once.
	* compress_sparse.c (main): #if 0'd out printing of each block
	reference ID so it doesn't spew every single ID to the screen anymore.
	Added calls to the progress bar stuff so it prints a progress bar
	instead.
	* expand_sparse.c (main): #if 0'd out printing of each block reference
	ID so it doesn't spew every single ID to the screen anymore.  Added
	calls to the progress bar stuff so it prints a progress bar instead.


2008-07-18  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* dump_obj.c (main): added printing of header and object checksums.


2008-07-17  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify.c (nwos_write_object_to_disk)
	(nwos_overwrite_object_to_disk): added assert to verify that the class
	definition for an object is of the correct type, public or private.

	* file.c (nwos_update_file_001_object_to_current)
	(nwos_update_file_002_object_to_current): changed to always update the
	class definition even if an updated private FILE class doesn't exist
	yet.  Before it would leave the class definition unchanged if an
	updated FILE class didn't exist and then if the object was overwritten
	to disk it would have the wrong class.

	* objectify.h (ObjCreateResult): moved to a place earlier in the file
	before all of the function declarations.
	(nwos_find_or_create_private_class_definition): changed to return
	ObjCreateResult instead of void so the caller can tell exactly what
	happened.
	* class_definition.c (nwos_find_or_create_private_class_definition):
	changed to return ObjCreateResult instead of void so the caller can
	tell exactly what happened.


2008-07-16  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (nwos_allocate_new_chunk): Fixed copy and paste error where
	the chunk_info .used and .index values were written over the .ref value
	instead of being copied into the next .used and .index values.


2008-07-15  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify.c (get_file_references): Fix Bug #2016420 "After expanding
	a compressed 0026 file reading a file causes a bad checksum error".
	New function that reads the public file references and any private file
	class references.
	(get_file_001_reference, get_file_002_reference)
	(get_file_class_reference): removed old code to find reference and
	replaced with a call to new get_file_references function.

	* Makefile.in (PROGS): added "dump_obj".
	* dump_obj.c (main): updated to new version (had not been used since
	version 0004? - December 2005).


2008-07-13  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* file.c (nwos_create_file): added code to add any checksum (md5, sha1
	sha256, sha512) objects, if they are missing from the file object (I.E.
	if the file object was created before the sha256 and/or sha512
	checksums were added to the file class).

	* objectify.h (ObjCreateResult): Feature Request #1856369 "Fix so if
	imported file is already in system it works" - added IMPORTED_DATA.
	* file.c (nwos_create_file): added code to import data into file that
	already existed from disc_list, but didn't have data stored in system.
	* import_file.c (process_file): Added case for IMPORTED_DATA result
	from nwos_create_file.
	(main): added printing of number of "imported_data" results.


2008-07-12  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* file.c (nwos_create_file): changed to test for both existing path and
	file and then make the decision on how to proceed based upon both.
	Also changed so that if allow_multiple_paths flag is true then create a
	new association for an existing file even if there is another file with
	that same path.


2008-07-11  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_28.2 release.

	* configure.ac: updated version to Alpha_28.2.

	* verify_file.c (display_usage): changed the name of the "--remove"
	option to "--remove-no-shred" and the name of the "--shred" option to
	"--remove-min-shred" so that it forces one to choose if they want
	shredding or not.  This way one is reminded of the choice before,
	instead of using --remove and then remembering it should have been
	shredded after it is too late.	Also expanded the warning about it
	being minimal shredding.
	(main): Fix Feature Request #1996867 "Move verify_file --shred option
	warning before doing it".  Instead of moving the warning, removed the
	warning completely and changed the "--shred" option to 
	"--remove-min-shred".  Also changed the "--remove" option to
	"--remove-no-shred".

	* verify_file.c (main): Fix Bug #2004217 "verify -r fails if file is 
	not a directory" - added test to determine if the argument is a file or
	a directory and call the appropriate function.

	* import_file.c: added include of limits.h to define PATH_MAX.
	* verify_file.c: added include of limits.h to define PATH_MAX.
	
	* Makefile.in (export_c_structs): Fix Bug #2015898 - Permission denied
	when running export_c_structs.  Change so that export_c_structs is NOT
	compiled in PUBLIC_MODE so the public objects are opened read only.


2008-06-26  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify_private.h (nwos_initialize_backup): Fix Feature Request
	#1993875 and Bug #2001629 (duplicate entries) - changed to return bool
	instead of void.
	* backup.c (nwos_initialize_backup): changed to return bool, false if
	opening backup file fails, true if successful.
	* disk_io.c (nwos_initialize_disk_io): changed so that if 
	nwos_initialize_backup fails it shuts back down and exits.


2008-06-25  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_28.1 release.


2008-06-24  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* configure.ac: updated version to Alpha_28.1.


2008-06-23  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* import_file.c (process_file): Fix Bug #1997776 (most of the changes
	since 2008-06-20 were related to this bug) - change to remove the
	leading "./" when doing "-r .".


2008-06-22  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify.h (nwos_normalize_path): changed to return void instead of
	bool.
	* file.c (nwos_normalize_path): changed to return void instead of bool,
	because now it verifies the size of dst is big enough to hold src with
	an assert.  Since the output string will never be larger than the input
	that should be good enough.  Changed to output "." if the normalized
	path is empty.  Also will allow paths that start with "..", it is now
	up to the caller to do whatever it wants with that.  Otherwise we would
	have to write a separate function to test paths for thing like:
	"abc/def/../../../ghi".
	* import_file.c (main): changed to call the new nwos_normalize_path
	function.
	* verify_file.c (process_directory): fix to not duplicate the directory
	separators (slashes).
	(main): added code to call nwos_normalize_path to fix the path so there
	are no duplicate slashes, or periods in the path.

	* import_file.c (process_file): change order of expressions in if
	statement so size is verified before indexing into string.


2008-06-21  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* file.c (nwos_normalize_path): fixed to eliminate any "/./" or "/../"
	in the path.

	* objectify.h (nwos_normalize_path): added external declaration for.
	* import_file.c (cleanup_path): moved to file.c, renamed to
	nwos_normalize_path, and added size of destination string parameter.
	(main): renamed calls to cleanup_path to nwos_normalize_path and added
	size of destination string (path).
	* file.c (nwos_normalize_path): moved cleanup_path from import_file.c
	and renamed.  Also added size parameter.

	* backup.c (nwos_initialize_backup): added code to write backup file
	name to log file.


2008-06-20  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* import_file.c (cleanup_path): new function to copy a path string and
	eliminate extra slashes in the process.
	(process_file): fixed to not add a slash to a directory path if the
	path already ends in one.
	(main): changed to call new cleanup_path function with argument to make
	sure the path doesn't have any multiple slashes ('///') in it.


2008-06-19  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify.h (nwos_create_file): added 'allow_multiple_paths'
	parameter to allow creating more than one path to a particular file.
	Also added CREATED_NEW_PATH_FOR_EXISTING_FILE to ObjCreateResult
	enumeration.
	* file.c (nwos_create_file): added 'allow_multiple_paths' parameter to
	allow creating more than one path to a particular file.  It returns
	CREATED_NEW_PATH_FOR_EXISTING_FILE if a new path is created for an
	existing file.
	* import_file.c (process_file): added 'do_recursive' paramter to allow
	multiple paths to a file when importing files recursively.
	(main): pass 'do_recursive' parameter to process_file and print
	message when a new path has been added to an existing file.


2008-06-18  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* import_file.c (process_file): added asserts so a path with double
	slashes ('dir//file') won't be accepted.  Still need to fix the code
	to not create them.


2008-06-14  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* backup.c (nwos_initialize_backup): Bug #1992924 - changed so if the
	.dif file already exists the code waits 1 second, generates a new file
	name and retries.  Also added a count so that it will only retry five
	times.


2008-06-11  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* import_file.c (check_invalid_type, check_directory_is_all_ok): moved
	to file.c and added nwos_ prefix.
	* objectify.h (nwos_check_invalid_type)
	(nwos_check_directory_is_all_ok): added external declarations for.
	* file.c (nwos_check_invalid_type, nwos_check_directory_is_all_ok):
	moved from import_file.c and added nwos_prefix.

	* disk_io.c (nwos_initialize_disk_io): moved setting of 'read_only'
	flag inside of ifdef PUBLIC_MODE else so that it doesn't get set in
	public mode.  If it is set no backup file is written.


2008-06-08  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* user_config.c (read_configuration_file): added #ifndef HTTP around
	code that tries to open a config file in the user's home directory
	because when running from Apache there is no $HOME defined.


2008-06-07  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (nwos_initialize_disk_io): Fix Bug #1987367 - move setting
	'read_only' flag outside of if private not null statement so read only
	always gets set even if there are no private objects.


2008-06-05  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_28

	* file.c (nwos_number_of_files_for_path): removed reading file object
	and changed to read next version from association object, because
	next/previous version links are now in the path and file association\
	objects.
	* export_file.c (export_file, main): added loop to find a path and file
	object where the next version is null, as long as the path is the same.
	In other words find the latest version of the file object, as long as
	it isn't a rename.


2008-06-04  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Makefile.in (clean_all, distclean): added http directory.

	* expand_sparse.c (main): added waring if version is older than 0028 to
	alert the user that they must run the 'update_files_0028' program.


2008-05-31  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* list_files.c (main): fixed so that old names for files that have been
	renamed are displayed with revision ;0.

	* configure.ac: updated version to Alpha_28.


2008-05-24  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify.c (get_file_001_reference, get_file_002_reference)
	(get_file_class_reference): moved "result" static variables out of function
	and into global "file_references" array.  This will allow a function to be
	written that will get all of the file references instead of having a
	separate function for each revision.


2008-05-23  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* update_files_0028.c (main): change to log arguments instead of
	disabling logging.


2008-05-22  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* list_files.c (main): added check to see if files are using the old
	method for file revision and if they do deal with it and then put an
	asterisk after the revision and print a warning at the end.

	* objectify_private.h (nwos_disk_header): added external declaration.
	* disk_io.c (disk_header): made global and renamed to nwos_disk_header.
	(nwos_initialize_disk_io, nwos_terminate_disk_io): renamed disk_header
	to nwos_disk_header.

	* disc_list.c (check_for_previous_version_and_link): Fix Bug #1954154 -
	changed to put previous and next version links in PATH AND FILE
	ASSOCIATION objects instead of FILE objects.


2008-05-21  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* file.c (nwos_add_new_revision_of_file): changed to put previous and
	next version links in PATH AND FILE ASSOCIATION objects instead of FILE
	objects.
	* list_files.c (main): added code to read previous and next version
	links in PATH AND FILE ASSOCIATION objects instead of FILE objects.

	* time_stamp.h (nwos_time_stamp_to_string): added external declaration
	for.
	* time_stamp.c (nwos_time_stamp_to_string): new function to convert a
	time stamp into a character string, non-reentrant.


2008-05-20  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Makefile.in (update_files_0028): added.
	* update_files_0028.c: new program to move previous, next links from
	FILE objects to PATH AND FILE ASSOCIATION objects.


2008-05-18  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_27.2

	* configure.ac: updated version to Alpha_27.2.

	* combine_backup_files (MAX_FILES): increased to 100 from 64.

	* list_discs.c (main): added code to allow disc IDs with wildcards to
	be passed on the command line.


2008-05-06  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify_private.h (nwos_read_object_from_disk_and_decrypt): changed
	return type to bool.
	* objectify.c (nwos_read_object_from_disk_and_decrypt): changed return
	type to bool and changed assert on nwos_read_block failed to an if
	statement that returns false if it fails.
	(nwos_read_object_from_disk, nwos_read_object_headers_from_disk)
	(nwos_read_variable_sized_object_from_disk)
	(nwos_get_object_class_without_update): added asserts around calls to
	nwos_read_object_from_disk_and_decrypt to verify it returned true.
	* file.c (nwos_restore_file, nwos_file_is_identical): added asserts
	around calls to nwos_read_object_from_disk_and_decrypt to verify it
	returned true.
	* reference_list.c (read_ref_list_into_cache): added asserts around
	calls to nwos_read_object_from_disk_and_decrypt to verify it returned
	true.


2008-05-05  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (index_compressed_file): Change so that if fopen of index
	file fails, that it just prints a warning and continues without storing
	the index file.

	* disk_io.c (index_compressed_file): Fix Bug #1957451 - added test to
	make sure fopen call was successful before calling fwrite.


2008-04-28  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* import_file (process_file): added initializer for result so that
	compiler won't complain about it being uninitialized.

	* compress_sparse.c (main): added code to check for a block with a
	reference ID of zero and skip over it, with a warning.


2008-04-27  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* verify_file.c (display_usage): Feature Request #1919585 - added
	--shred option and a warning that it is minimal.
	(shred): new function that just writes random data over the file.  It
	is only one pass and the files could stll be read by someone with the
	proper equipment.
	(process_file): changed do_remove parameter to remove_option which can
	be any of "Do_Not_Remove", "Just_Remove", or "Shred_Before_Remove".
	(process_directory): changed do_remove parameter to remove_option.
	(main): added the --shred option and print a warning at the end, that
	shredding is minimal and files could still be read.


2008-04-26  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* verify_file.c (display_usage): new function to print usage
	information.
	(main): added calls to display usage information if the --help option
	is given or there is an error in the parameters.

	* verify_file.c (check_invalid_type): new function, mostly copied from
	import_file.c, that checks for all the possible file types (sockets,
	pipes, character and block devices) that we can't deal with.
	(process_file): new function, mostly taken from main() that does the
	import of one regular file.
	(process_directory): new function that scans one directory and imports
	all of the regular files and subdirectories.
	(main): extracted the code that imported a file and made the new
	process_file function with it.  Added -r and --recursive option.

	* import_file.c (process_file): added code to add-revision from main()
	so that a --add-revision option can be used on a directory.
	(main): took code that added a revision to a file and put it in the
	process_file function.

	* import_file.c (process_file): new function created from code taken
	from main() and changed to deal with recursively doing directories.
	(main): took code that created files and created new process_file
	function.  Made result_counts a global variable.

	* objectify.h (nwos_log_md5sum, nwos_log_sha1sum, nwos_log_sha256sum)
	(nwos_log_sha512sum): added 'const' to char* file_name parameter.
	(nwos_find_public_name, nwos_find_private_name, nwos_create_name):
	added 'const' to char* name parameter.
	(nwos_find_file_path, nwos_create_file_path, nwos_file_is_identical)
	(nwos_create_file, nwos_check_file_checksums, nwos_restore_file)
	(nwos_estimate_blocks_for_file, nwos_add_new_revision_of_file): added
	'const' to char* path parameter.
	(nwos_find_matching_path_and_file_association): added 'const' to char*
	path and char* file parameters.
	(nwos_create_file_with_only_md5, nwos_add_info_to_existing_file): added
	'const' to char* file_name parameter.
	(nwos_create_file_without_storing_data): added 'const' to char* path
	and char* file_name parameters.
	(nwos_find_storage_location, nwos_create_storage_location): added
	'const' to char* location parameter.
	* file.c (nwos_estimate_blocks_for_file, find_file_path, checksum_file)
	(read_file, nwos_add_new_revision_of_file, nwos_find_public_file_path)
	(nwos_create_file_path, nwos_restore_file, nwos_check_file_checksums)
	(nwos_create_file, nwos_find_file_path, nwos_file_is_identical): added
	'const' to char* path parameter.
	(nwos_create_file_with_only_md5, nwos_add_info_to_existing_file): added
	'const' to char* file_name parameter.
	(nwos_create_file_without_storing_data): added 'const' to char*
	directory and char* file_name parameters.
	(nwos_find_matching_path_and_file_association): added 'const' to char*
	dir and char* file_name parameters.
	(nwos_find_storage_location, nwos_create_storage_location): added
	'const' to char* location parameter.
	* log.c (nwos_log_md5sum, nwos_log_sha1sum, nwos_log_sha256sum)
	(nwos_log_sha512sum): added 'const' to char* file_name parameter.
	* name.c (split_name): added 'const' to char* name parameter and the
	char* p variable.
	(nwos_find_public_name, nwos_find_private_name, nwos_create_name):
	added 'const' to char* name parameter.

	
2008-04-25  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* import_file.c (display_usage): Feature Request #1915401 - added
	--recursive option.
	(check_invalid_type): new function to weed out the things we don't
	handle such as symbolic links, devices, sockets, etc.
	(check_directory_is_all_ok): new function to go down through a
	directory and make sure all of the files are kosher.
	(main): added code to deal with directories.

	
2008-04-13  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* config.h.in: added #undef HAVE_CLOCK_GETTIME so we can use something
	else if it isn't supported.
	* disk_io.c (initialize_random_number_generator): added condtional code
	to use 'gettimeofday' instead of 'clock_gettime' if it isn't supported
	(as on Mac OS X).
	* time_stamp.c (nwos_get_time_stamp): added condtional code to use
	'gettimeofday' instead of 'clock_gettime' if it isn't supported (as on
	Mac OS X).


2008-04-09  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* list_discs.c (main): added call to nwos_log_arguments to disable
	logging.
	* list_files.c (main): added call to nwos_log_arguments to disable
	logging.


2008-04-05  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* configure.ac: added http/Makefile.


2008-04-04  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_27.1

	* configure.ac: updated version to Alpha_27.1.


2008-04-01  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (nwos_initialize_objectify): added file locking for private
	file and public file if in PUBLIC_MODE.
	* prep_disk.c (main): added file locking.
	* check_block_maps.c (main): added file locking.
	* disk_usage.c (main): added file locking.


2008-03-30  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disc_list.c (main): Moved code to get disc ID before code to check
	public files as well.

	* disc_list.c (main): Moved code to check public files out of the
	initial directory scan loop and into it's own loop.  This way we can
	get the pass phrase first instead of having a delay while it reads
	public files and then asking for the pass phrase.


2008-03-24  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* log_disc.c (main): added an error message if the directory (disc) is
	empty so the user doesn't get some bogus assert.

	* log_disc.c (main): fix so it can deal with more than nine storage
	locations (I.E. numbers can have 2 digits instead of just 1).


2008-03-23  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* file.c (find_matching_file_from_size_md5_sha1): change to call
	find_md5, find_sha1, find_sha256, and find_sha512 functions directly
	with the 'public' parameter so they will search the correct space,
	public or private.

	* disk_io.c (nwos_terminate_disk_io): changed to not close private
	or public file if not open.

	* file.c (nwos_find_matching_file_from_size_md5_sha1): renamed to
	'find_matching_file_from_size_md5_sha1', made static, and added
	'public' parameter to determine if it is to search in the public or
	or private objects.
	(nwos_find_public_matching_file_from_size_md5_sha1): new function that
	calls 'find_matching_file_from_size_md5_sha1' to find a public file
	object.
	(nwos_find_matching_file_from_size_md5_sha1): new function to replace
	the old one that was renamed.  It calls the old function
	with the result of nwos_in_public_mode() to search in the correct
	space, public or private.
	(nwos_create_file_without_storing_data): added check to see if there is
	a public file object for the file being created and sets the 'clone_of'
	field if there is.
	(nwos_find_path_and_file_association): renamed to
	'find_path_and_file_association', made static, and added 'public'
	parameter to determine if it is to search in the public or private
	objects.
	(nwos_find_public_path_and_file_association): new function that calls
	'nwos_find_path_and_file_association' to find a public file object.
	(nwos_find_path_and_file_association): new function to replace the old
	one that was renamed.  It calls the old function with the result of
	nwos_in_public_mode() to search in the correct space, public or
	private.
	(nwos_find_or_create_path_and_file_association): added check to see if
	there is a public file object for the file being created and sets the
	'clone_of' field if there is.


2008-03-22  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* file.c (nwos_find_md5): renamed to 'find_md5', made static, and added
	'public' parameter to determine if it is to search in the public or
	private objects.
	(nwos_find_public_md5): new function that calls 'find_md5' to find a
	public MD5 object.
	(nwos_find_md5): new function to replace the old one that was renamed,
	that calls the old function (find_md5) with the result of
	nwos_in_public_mode() to search in the correct space (public or 
	private).
	(nwos_create_md5): added check to see if there is a public MD5 object
	for the MD5 being created and sets the 'clone_of' field if there is.
	(nwos_find_sha1): renamed to 'find_sha1', made static, and added
	'public' parameter to determine if it is to search in the public or
	private objects.
	(nwos_find_public_sha1): new function that calls 'find_sha1' to find a
	public SHA1 object.
	(nwos_find_sha1): new function to replace the old one that was renamed,
	that calls the old function (find_sha1) with the result of
	nwos_in_public_mode() to search in the correct space (public or 
	private).
	(nwos_create_sha1): added check to see if there is a public SHA1 object
	for the SHA1 being created and sets the 'clone_of' field if there is.
	(nwos_find_sha256): renamed to 'find_sha256', made static, and added
	'public' parameter to determine if it is to search in the public or
	private objects.
	(nwos_find_public_sha256): new function that calls 'find_sha256' to
	find a public SHA256 object.
	(nwos_find_sha256): new function to replace the old one that was
	renamed, that calls the old function (find_sha256) with the result of
	nwos_in_public_mode() to search in the correct space (public or 
	private).
	(nwos_create_sha256): added check to see if there is a public SHA256
	object for the SHA256 being created and sets the 'clone_of' field if
	there is.
	(nwos_find_sha512): renamed to 'find_sha512', made static, and added
	'public' parameter to determine if it is to search in the public or
	private objects.
	(nwos_find_public_sha512): new function that calls 'find_sha512' to
	find a public SHA512 object.
	(nwos_find_sha512): new function to replace the old one that was
	renamed, that calls the old function (find_sha512) with the result of
	nwos_in_public_mode() to search in the correct space (public or 
	private).
	(nwos_create_sha512): added check to see if there is a public SHA512
	object for the SHA521 being created and sets the 'clone_of' field if
	there is.
	(nwos_find_file_path): renamed to 'find_file_path', made static, and
	added 'public' parameter to determine if it is to search in the public
	or private objects.
	(nwos_find_public_file_path): new function that calls 'find_file_path'
	to find a public file path object.
	(nwos_find_file_path): new function to replace the old one that was
	renamed, it calls the old function (find_file_path) with the result of
	nwos_in_public_mode() to search in the correct space (public or 
	private).
	(nwos_create_file_path): added check to see if there is a public file
	path object for the path being created and sets the 'clone_of' field
	if there is.


2008-03-21  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disc_list.c (main): added code to check for public files.


2008-03-20  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify.h (nwos_in_public_mode): added external declaration for.
	* objectify.c (nwos_in_public_mode): new function that returns true
	if in public only mode (no private objects).
	* file.c (nwos_find_file_path, nwos_find_md5, nwos_find_sha1)
	(nwos_find_sha256, nwos_find_path_and_file_association)
	(nwos_find_sha512, nwos_find_matching_file_from_size_md5_sha1) added a
	test to see if running in public mode and if so search for public class
	instead of private.
	(nwos_create_md5, nwos_create_sha1, nwos_create_sha256)
	(nwos_create_sha512) added assert to verify not in public mode.
	* verify_file.c (main): added --public option.


2008-03-15  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_27

	* Makefile.in: added cleaning attic to clean_all and distclean targets.

	* configure.ac: updated version to Alpha_27 and VERSION_STRING to 0027.

	* objectify.h (CheckFileResult): added SHA256_Sum_Mismatch and
	SHA512_Sum_Mismatch to enumeration.
	* file.c (nwos_check_file_checksums): added checking SHA256 and SHA512.

	* Makefile.in: (gnu): changed 'gnu' target to 'gnu_objs' so that make
	will rebuild it.

	* class_definition.c (nwos_find_private_class_definition): change to
	call new 'nwos_get_object_class_without_update' function to keep from
	getting into a recursive mess when compiled with -O3 or
	-finline-functions.
	* objectify.h (nwos_get_object_class_without_update): added external
	declaration for.
	* objectify.c (nwos_get_object_class_without_update): new function that
	gets an object's class without trying to update it to the latest
	revision.  Thereby avoiding any recursion problems.
	(nwos_get_object_class): modified to call the new
	nwos_get_object_class_without_update function and then check to see if
	the class needs to be updated to the latest revision.

	* gnu/sha512.c (sha512_process_bytes): fix bug where it didn't
	process odd sized buffers (244 bytes) correctly.  (Sent e-mail to 
	<bug-coreutils@gnu.org> about the problem.)


2008-03-14  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* file.c (nwos_find_md5, nwos_find_sha1, nwos_find_sha256)
	(nwos_find_sha512): fixed the bug in each of these where they were
	only comparing the first four bytes of each checksum, because the
	sizeof was returning the size of a pointer.
	(checksum_file): change 256 to 512 in a comment (NO code changes).

	* list_files.c (print_md5): changed to use MD5_DIGEST_SIZE instead of
	hardcoded 16.
	(print_sha1): changed to use SHA1_DIGEST_SIZE instead of hardcoded 20.
	(print_sha256): changed to use SHA256_DIGEST_SIZE instead of hardcoded
	32.
	(print_sha512): new function to print a SHA256 checksum.
	(main): added --sha512 option.

	* file.c (read_file) added sha512.
	(nwos_create_file, nwos_add_new_revision_of_file) added sha512 to call
	to read_file.

	* file.c (nwos_add_info_to_existing_file, nwos_create_file)
	(nwos_create_file_without_storing_data, nwos_add_new_revision_of_file):
	add sha512.
	
	* file.c (nwos_find_matching_file_from_size_md5_sha1): added sha512.
	(nwos_create_file_without_storing_data, nwos_add_new_revision_of_file)
	(nwos_create_file, nwos_find_matching_path_and_file_association): added
	sha512 to call to nwos_find_matching_file_from_size_md5_sha1.

	* file.c (nwos_find_matching_file_from_size_md5_sha1): fixed sha256
	test to make sure the sha256ref matches instead of the md5ref (this
	was a bug, it wasn't checking the sha256 matched).

	* objectify.h (SHA512_DIGEST_SIZE): added define for.
	(nwos_log_sha512sum): added external declaration for.
	* file.c (nwos_find_sha512): new function to find a sha512 checksum
	object.
	(nwos_create_sha512): new function to create a sha512 checksum object.
	(checksum_file): added code to calculate a SHA512 checksum in addition
	to the others.
	(nwos_add_info_to_existing_file, nwos_create_file_without_storing_data)
	(nwos_create_file, nwos_add_new_revision_of_file)
	(nwos_find_matching_path_and_file_association): added code for SHA512.
	* log.c (nwos_log_sha512sum): new function to log SHA512 checksum.

	* file.c (nwos_update_file_001_object_to_current): added code to void
	the new SHA512 reference.
	(nwos_update_file_002_object_to_current): new function to update a
	revision 002 FILE object to revision 003.
	* objectify_private.h (nwos_update_file_002_object_to_current): added
	external reference for.
	* objectify.c (get_file_002_reference): new function to find the
	reference for the revision 002 FILE class.
	(nwos_read_object_from_disk): added test to see if it is a FILE
	revision 002 object.
	(nwos_get_object_class): added test to see if it is a FILE revision 002
	object.


2008-03-12  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_26.6

	* log.c (nwos_log): added code to make sure all subdirectories in the
	path are created before opening the file.
	* prep_disk.c (main): added code to make sure all subdirectories in the
	path are created before opening the file.
	
	* log.c (nwos_log_arguments): added code to test if argc is 0 and argv
	is NULL and if so disable logging.
	(nwos_log): added code to return without printing anything to the log
	if logging has been disabled.
	* export_c_structs (main): added call to nwos_log_arguments(0, NULL) to
	disable logging.

	* objectify.conf: changed default paths for private.obj and log files.
	* config.h.in: changed default paths for private.obj and log files.


2008-03-11  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* configure.ac: changed md5, sha1, and sha256 directories into one
	'gnu' directory.
	* md5.h, md5.c, sha1.h, sha1.c, sha256.h, sha256.c: moved into the new
	'gnu' directory instead of having separate directories.
	* gnu/Makefile.in: created from sha256/Makefile.in, changed to compile
	md5.o, sha1.o, and sha256.o.
	* Makefile.in: changed to build md5.o, sha1.o, and sha256.o in the new
	'gnu' directory instead of separate directories.

	* compress_sparse.c (main): Feature Request #1856434 - changed from
	using the RSA MD5 context and functions to the GNU MD5 context and
	functions.
	* file.c (checksum_file, read_file, nwos_check_file_checksums)
	(nwos_restore_file): Feature Request #1856434 - changed from using the
	RSA MD5 context and functions to the GNU MD5 context and functions.
	* security.c (convert_short_pass_phrase_to_reference): Feature Request
	#1856434 - changed from using the RSA MD5 context and functions to the
	GNU MD5 context and functions.


2008-03-10  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* configure.ac: changed version to Alpha_26.6.


2008-02-29  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* export_file (export_file): added code so that if a file is in a
	sub-directory, create the directory if it doesn't exist.


2008-02-26  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify.c (nwos_initialize_objectify): changed to not attempt to
	initialize all of the security stuff when the bf_key is null and the
	linear and serial values are zero.  (As is the case when called by
	expand_sparse.

	* rename_file.c (main): changed to require either the --no-history or
	--keep-history options, no default.


2008-02-25  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (nwos_allocate_new_chunk): changed to allow creating a
	chunk anywhere in the valid range of chunks and not just following the
	existing chunks.  This will lead to chunks being out of order in the
	storage, but that will be corrected when the archive is restored.


2008-02-24  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (nwos_check_blocks_available): added code to allocate a
	new chunk if the existing chunks are more than 90% full.

	* disk_io.c (generate_new_completely_random_id): Fix Bug #1900855,
	changed loop that searches for chunk to pick any chunk with empty
	blocks, and if it doesn't find one do a linear search.


2008-02-23  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* user_config.c (get_path): extracted code that read $HOME environment
	variable and made into new 'get_users_home_dir' function.
	(get_users_home_dir): new function to read the $HOME environment
	variable and return it.  Extracted from 'get_path' function.
	(read_configuration_file): changed to substitute users home directory
	for '~' in DEFAULT_USER_CONFIG_PATH.
	
	
2008-02-22  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* config.h.in (DEFAULT_CONFIG_PATH): split into
	DEFAULT_USER_CONFIG_PATH and DEFAULT_SYSTEM_CONFIG_PATH.
	* user_config.c (read_configuration_file): changed to check for a
	configuration file in the user's home directory first and then if it
	doesn't exist attempt to read the system configuration file.


2008-02-16  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* list_files.c (print_sha1): added if statement to print a notice that
	the SHA256 checksum is not available for this file, if it is void in
	the file object, instead of crashing.
	(print_time): added if statement to print "unknown" if the time stamp
	is zero.
	* time_stamp.h (nwos_time_stamp_is_zero): new inline function that
	returns true if the entire time stamp is zero.

	* file.c (nwos_add_info_to_existing_file): new function that reads the
	file and adds the modification_time, size, sha1, and sha256 checksums
	to a file already created by the 'nwos_create_file_with_only_md5'
	function.
	* objectify.h (nwos_add_info_to_existing_file): added external
	declaration for.

	* file.c (nwos_create_file_with_only_md5): took changes made in the
	previous revision back out (this revision is the same as revision
	1.85).

	* file.c (nwos_create_file_with_only_md5): changed to read the file in
	at the same time and calculate all the checksums and size.

	* file.c (nwos_create_file_with_only_md5): new function that creates a
	file with only a MD5 checksum.
	* objectify.h (nwos_create_file_with_only_md5): added external
	declaration for.


2008-02-15  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* export_c_structs.c (main): change AccessType to PUBLIC.

	* objectify.c (nwos_initialize_objectify): Fix to compile correctly in
	PUBLIC_MODE without blowfish_key, linear_after_first, and
	serial_after_first variables.  They were wrapped in #ifndef PUBLIC_MODE
	to eliminate warnings in revision 1.141.


2008-02-10  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify.h (AccessType): added "PUBLIC" type.
	* objectify.c (nwos_initialize_objectify): rearranged to handle new
	"PUBLIC" access mode that only opens the Public Objects.
	(nwos_read_variable_sized_object_from_disk, nwos_get_object_class):
	added test so that it only tests for version 001 files if it is a
	private object, no public file objects were created with version 001 of
	the file class.
	* disk_io.c (nwos_initialize_disk_io): added code for new "PUBLIC"
	access mode.
	* list_files.c (main): added --public option to list files in the
	public objects.

	* configure.ac: added attic/Makefile to the list of files to be
	created.  Note: I did not attic/Makefile to the top level Makefile
	because the files in the attic are not used by users and therefore
	don't need to be built normally.


2008-02-09  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (nwos_initialize_disk_io): moved code that calls
	nwos_initialize_backup outside of "if (nwos_private_path != NULL)"
	block so that a backup file will be made even in PUBLIC_MODE.


2008-02-05  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_26.5 (Note: was not changed in configure.ac so this
	version still says it is Alpha_26.4).

	* user_config.c (read_configuration_file): Fix Bug #1887042 - changed
	to read all environment variables before reading the configuration
	file.  Then if a variable is already set (from environment variable)
	doesn't use value from file.  Finally, check for any values that are
	still null and fill them in with the default value.
	(get_path): changed to just call read_configuration_file if null, which
	will now check environment variables and set any defaults.

	* expand_sparse.c (main): Fix Bug #1887574 - changed to call 
	nwos_initialize_objectify with DEFAULT_FILE (NULL) instead of the
	actual storage.  Initialize disk_io now assumes that a non-null path is
	a compressed file.

	* disk_io.c (nwos_initialize_disk_io): added initialized for
	compressed_file variable so that compiler won't complain about it
	being uninitialized when compiling in PUBLIC_MODE.


2008-02-04  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_26.4

	* config.h.in: changed LOG_FILE_NAME to DEFAULT_LOG_FILE_PATH.
	* objectify.conf: added section for log file.
	* objectify.h (strlcat, strlcpy): added 'const' to src parameter.
	* objectify_private.h (nwos_get_log_file_path): added external
	declaration for.
	* user_config.c (nwos_get_log_file_path): added new function to get
	the path and file prefix for the log file.
	* log.c (nwos_log): Changed to get the log file path from the new
	nwos_get_log_file_path function.
	(strlcat, strlcpy): Added 'const' specifier to src parameter.

	* user_config.c (get_path): fix so that when it is substituting the
	home directory for the tilde it doesn't leave the tilde in the path.


2008-02-03  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* config.h.in (BACKUP_LOCATION): deleted, now defined in user_config.
	* objectify.conf: added section for backup directory path.
	* user_config.c (nwos_get_backup_directory_path): added new function
	to get the path for the backup directory.
	(nwos_initialize_backup): added 'const' to 'backup_location' parameter.
	* disk_io.c (nwos_initialize_disk_io): changed to get backup directory
	path from nwos_get_backup_directory_path() instead of BACKUP_LOCATION
	definition.
	* backup.c (nwos_initialize_backup): added a 'const' to the
	'backup_location' parameter because it comes from user_config.c now.

	* user_config.c (get_path): added code to check for a path that begins
	with a tilde ('~') and converts it to the home directory (from the
	$HOME environment variable).

	* prep_disk.c (main): changed to pass DEFAULT_FILE (NULL) to
	nwos_initialize_objectify because now it assumes that a file passed to
	it is a compressed file.

	* objectify.conf: new file that is put in /etc/objectify.conf to
	configure where the system reads the public and private objects.


2008-02-02  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Makefile.in (diff_sparse): removed program because it doesn't work in
	the current version.
	(export_c_structs): added user_config.c.
	(check_block_maps, compress_sparse, disk_usage): added user_config.o
	and log.o.
	* add_password.c (main): changed DEFAULT_TYPE_RW to READ_WRITE.
	* check_block_maps.c (main): change to get the private objects path
	from nwos_get_private_objects_path() instead of DEFAULT_FILE which is
	now simply defined as NULL.
	* check_objects.c (main): changed DEFAULT_TYPE_RO to READ_ONLY.
	* compress_sparse.c (main): change to get the private objects path
	from nwos_get_private_objects_path() instead of DEFAULT_FILE which is
	now simply defined as NULL.
	* computer.c (main): changed DEFAULT_TYPE_RW to READ_WRITE.
	* config.h.in (StorageType, DEFAULT_TYPE_RO, DEFAULT_TYPE_RW): deleted
	because the new user configuration doesn't use them.
	(DEFAULT_FILE): renamed to DEFAULT_PRIVATE_PATH to be more congruent
	with the DEFAULT_PUBLIC_PATH.
	* disc_list.c (main): changed DEFAULT_TYPE_RW to READ_WRITE.
	* disk_io.c (nwos_public_path, nwos_private_path): added 'const'
	specifier so that compiler doesn't complain about assignment discarding
	qualifiers from pointer target type.
	(nwos_initialize_disk_io): changed 'type' parameter to be 'AccessType'
	instead of 'StorageType' because now it just indicates if storage is to
	be opened 'READ_WRITE' or 'READ_ONLY'.  Changed the meaning of the 
	'path' input parameter such that now if it is NULL it calls
	nwos_get_private_objects_path to get the path and if it is not null it
	means a compressed file is to be used instead.  Added boolean variable
	'compressed_file' to indicate if we are accessing a compressed file or
	regular storage.  Changed occurrences of 'Drive_Or_Partition_RO',
	'Drive_Or_Partition_RW', 'Sparse_File_RO', 'Sparse_File_RW', and
	'Compressed_File_RO' to 'READ_WRITE' or 'READ_ONLY' as appropriate.
	* disk_usage.c (main): change to get the private objects path from
	nwos_get_private_objects_path() instead of DEFAULT_FILE which is now
	simply defined as NULL.
	* expand_sparse.c (main): change to get the private objects path from
	nwos_get_private_objects_path() instead of DEFAULT_FILE which is now
	simply defined as NULL.
	* export_file.c (main): eliminated 'type' variable, no longer needed.
	Added 'const' specifier to 'path' variable so that compiler doesn't
	complain about assignment discarding qualifiers from pointer target
	type.  Changed DEFAULT_TYPE_RO to READ_ONLY.
	* identify_disc.c (main): changed DEFAULT_TYPE_RO to READ_ONLY.
	* import_file.c (main): changed DEFAULT_TYPE_RW to READ_WRITE.
	* list_discs.c (main): changed DEFAULT_TYPE_RO to READ_ONLY.
	* list_files.c (main): eliminated 'type' variable, no longer needed.
	Changed DEFAULT_TYPE_RO to READ_ONLY.
	* log_disc.c (main): changed DEFAULT_TYPE_RW to READ_WRITE.
	* objectify.h (DEFAULT_FILE): added defintion to NULL, which is now
	used to indicate to nwos_initialize_disk_io that it should get the path
	using nwos_get_private_objects_path.
	(AccessType): this was the StorageType enumeration in config.h, renamed
	and changed so that the possible values are READ_ONLY or  READ_WRITE.
	(nwos_initialize_objectify): changed 'type' parameter to be 'AccessType'
	instead of 'StorageType'.
	* objectify_private.h (nwos_get_private_objects_path): added external
	declaration.
	(nwos_public_path, nwos_private_path): added 'const' to declaration.
	(nwos_initialize_disk_io): changed 'type' parameter to be 'AccessType'
	instead of 'StorageType'.
	* objectify.c (nwos_initialize_objectify): changed 'type' parameter to
	be 'AccessType' instead of 'StorageType'.
	* prep_disk.c (is_device, max_blocks_on_device):  added 'const'
	specifier so that compiler doesn't complain about assignment discarding
	qualifiers from pointer target type.
	(agree_no_warranty): updated Copyright dates to 2008.
	(main): change to get the private objects path from
	nwos_get_private_objects_path() instead of DEFAULT_FILE which is now
	simply defined as NULL.
	* remove_file.c (main): eliminated 'type' and 'path' variables and
	changed DEFAULT_TYPE_RW to READ_WRITE.
	* rename_file.c (main): changed DEFAULT_TYPE_RW to READ_WRITE.
	* user_config.c (nwos_get_private_objects_path): new function that
	returns the path to use to access the private objects.
	* verify_file.c (main): eliminated 'type' variable, no longer needed.
	Changed DEFAULT_TYPE_RO to READ_ONLY.
	
	* disk_io.c (nwos_public_path): put this global variable, which was
	removed in revision 1.64 (2008/01/22), back in so that it is congruent
	to the nwos_private_path.
	(nwos_initialize_disk_io): added code to initialize nwos_public_path.
	Originally (in revision 1.63 and before) it was initialized statically
	with DEFAULT_PUBLIC_PATH.  Changed all occurances where
	nwos_get_public_objects_path was called back to nwos_public_path.

	* Makefile.in (export_c_structs): added -DPUBLIC_MODE so it is compiled
	without all of the private stuff.
	* objectify.c (security_level): put #ifndef around this variable to
	eliminate warning when compiled with -DPUBLIC_MODE.
	(blowfish_key): put #ifndef around this variable to eliminate warning
	when compiled with -DPUBLIC_MODE.
	(nwos_read_object_from_disk_and_decrypt): put #ifndef around variables
	that are not used when compiled with -DPUBLIC_MODE.
	(nwos_write_object_to_disk_and_encrypt): put #ifndef around variables
	that are not used when compiled with -DPUBLIC_MODE.
	* disk_io.c (last_ref): put #ifndef around this variable to eliminate
	warning when compiled with -DPUBLIC_MODE.
	(chunk_density_target, chunk_skip_backward, chunk_skip_forward): put
	#ifndef around these variables to eliminate warning when compiled 
	with -DPUBLIC_MODE.
	(uint32_ref_to_info_index): put #ifndef around this function to
	eliminate warning when compiled with -DPUBLIC_MODE.
	
	* user_config.c (get_path): new function created from the old
	nwos_get_public_objects_path that is generic.  The name of the desired
	path is passed in and it locates it's entry in the path_table, if it
	is null, it checks for an environment variable.  If that is not found
	it reads the configuration file and if that didn't find it it sets it
	to the default value.
	(nwos_get_public_objects_path): changed to just call the new generic
	'get_path' function with the name "public".

	* user_config.c (read_configuration_file): changed path_table to store
	the path itself instead of a pointer to the path.
	(nwos_get_public_objects_path): eliminated the "public_objects_path"
	variable and changed to find the "public" entry in the path_table and 
	use it.

	* user_config.c (read_configuration_file): new function that reads the
	configuration file and stores the parameters in variables pointed to by
	the path_table.
	(nwos_get_public_objects_path): changed to check for an environment 
	variable first, then read the configuration file, and finally use the
	default.
	* config.h.in (DEFAULT_CONFIG_FILE): new define for the path to the
	configuration file.


2008-01-29  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* patch_compressed.c (main): added code to include the number of used
	blocks in the print statement when the number of used blocks doesn't
	match.


2008-01-22  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (nwos_initialize_disk_io, nwos_terminate_disk_io): changed
	to call new nwos_get_public_objects_path function to get path to public
	objects, instead of having the nwos_public_path global variable.
	* objectify_private.h (nwos_get_public_objects_path): added external
	declaration.
	* user_config.c (nwos_get_public_objects_path): new function that
	returns the path of the public objects file.
	* Makefile.in (OBJS): added user_config.o.

	* list_files.c (main): added some options that were missing from the
	usage print.  Also added explanations for what the options are for.


2008-01-17  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* backup.c (sort_file): added code to clear errno at the beginning in
	case it was non-zero from some call before entering.

	* objectify.c (nwos_create_root): rearranged code so that if it is not
	in PUBLIC_MODE it uses the bit map to determine if the block has
	already been written or not.  This is necessary now that prep_disk
	doesn't always write the entire chunk.

	* prep_disk.c (write_chunks): changed to use the progress bar instead
	occasionally writing the number of blocks written.

	* disk_io.c (nwos_allocate_all_chunks_hack): moved the progress bar
	code to prep_disk.c and replaced it with a parameter that is a pointer
	to a progress report function.
	* prep_disk.c (start_progress_bar, update_progress_bar)
	(finish_progress_bar): new functions created from code taken from
	disk_io.c that print a progress bar in text.
	(main): added code to do the progress bar when calling the
	nwos_allocate_all_chunks_hack function.

	* disk_io.c (nwos_allocate_all_chunks_hack): fixed the progress bar so
	it works correctly even on small sizes (less than 512 megabytes).

	* disk_io.c (nwos_allocate_all_chunks_hack): removed the previous
	change, it was unnecessary because for sparse files the entire file was
	already written.

	* disk_io.c (nwos_allocate_all_chunks_hack): added code to determine
	if it is writing to a "sparse" file or a partition and writes the
	entire 16 megabyte chunk to a sparse file.  If this isn't done then it
	really creates a sparse file and those have proven to be very
	inefficient with disk space.


2008-01-16  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (nwos_allocate_all_chunks_hack): added call to flush the
	data after each bit map block write and then usleep 10 mS.

	* disk_io.c (nwos_allocate_all_chunks_hack): changed to only write the
	bit map blocks into each chunk instead of the entire 16 megabyte chunk.

	* disk_io.c (nwos_allocate_all_chunks_hack): added code to print the
	percentage done in 2% increments (formated 0...10...20...30... and so
	on).
	
	* Makefile.in (distclean): added command to remove the  autom4te.cache
	directory.


2008-01-13  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* file.c (nwos_create_file_without_storing_data, nwos_create_file)
	(nwos_add_new_revision_of_file): changed to use new nwos_log_md5sum,
	nwos_log_sha1sum, and nwos_log_sha256sum function to log checksums to
	log file instead of writing them to stdout.

	* file.c (nwos_find_md5, nwos_create_md5, nwos_find_sha1)
	(nwos_create_sha1, nwos_find_sha256, nwos_create_sha256, checksum_file)
	(nwos_find_matching_file_from_size_md5_sha1, nwos_restore_file)
	(nwos_create_file_without_storing_data, nwos_create_file)
	(read_file, nwos_add_new_revision_of_file, nwos_check_file_checksums)
	(nwos_find_matching_path_and_file_association): changed to use new
	MD5_DIGEST_SIZE, SHA1_DIGEST_SIZE. SHA256_DIGEST_SIZE defines instead
	of hardcoded values.

	* objectify.h (MD5_DIGEST_SIZE, SHA1_DIGEST_SIZE. SHA256_DIGEST_SIZE):
	added to define the size of the various digests.
	(nwos_log_md5sum, nwos_log_sha1sum, nwos_log_sha256sum): new functions
	to add a log message for the various types of checksums.

	
2008-01-06  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* patch_compressed.c (main): Added --ignore-times option that allows
	the file to be patched even if the times in the header of the
	compressed file doesn't match the header in the patch file.  Also
	changed the comparing of the headers to compare individual components
	instead of just doing a memcmp of the entire header.


2008-01-04  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_26.3

	* backup.c (sort_file): Bug #1862306 - removed extra increment of the
	file 'offset' which caused it to be incremented twice when a duplicate 
	block occurred after the sort buffer was full.

	* backup.c (sort_file): added code after the file is sorted to go back
	through the whole file and verify that the blocks are all in order and
	if not emit an error message.


2007-12-31  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* diff_compressed (main): added call to close the output file.


2007-12-27  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* rename_file.c (main): added call to nwos_log_arguments.


2007-12-23  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* list_files.c (main): added --time and --revision options to print
	the modification time of the file and the revision of the file
	respectively.
	(print_time): new function that takes a time stamp and prints the time
	in YYYY-MM-DD HH:MM:SS format.

	* disc_list.c (main): added --add-revision option and call to 
	check_for_previous_version_and_link for each file if enabled.
	(check_for_previous_version_and_link): Feature Request #1856370 - new
	function to check and see if there is a previous file with the same 
	path name and if so to connect prev_version and next_version with newly
	added file.
	
	* disc_list.c (main): added call to nwos_terminate_objectify in
	case where disc list already exists.


2007-12-09  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (nwos_read_block): change assert to more descriptive print
	statements when we fail to find a block in the storage_index.


2007-12-08  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (nwos_terminate_disk_io): commented out statement that
	nulled out the public_path.  It prevented eliminate_one_block_chunks
	program from firing up objectify the second time.


2007-12-04  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_26.2

	* backup.c (nwos_initialize_backup): fixed error where BACKUP_LOCATION
	constant was used instead of 'backup_location' parameter.

	* backup.c (sort_file): commented out print statements about duplicate
	blocks.  Added code to write a log message when duplicate blocks are
	found.


2007-11-24  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* backup.c (nwos_initialize_backup): changed file extension from '.bak'
	to '.dif'.  Decided to use .bak for a different kind of file.


2007-11-23  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify.c (nwos_set_security_level): wrapped in #ifndef PUBLIC_MODE
	so it isn't compiled in when PUBLIC_MODE is defined.
	(nwos_read_object_from_disk_and_decrypt): added conditionally compiled
	code that when PUBLIC_MODE is defined it just copies the object from
	the buffer with no encryption.
	(nwos_write_object_to_disk_and_encrypt): added conditionally compiled
	code that when PUBLIC_MODE is defined it just copies the objecti into
	the buffer with no encryption.


2007-11-18  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* expand_sparse.c (main): add call to close backup file because we
	don't want to write a backup file when restoring.

	* backup.c (nwos_backup_write_block): add test so it won't write to the
	backup file unless it is open.  Also fix so it closes the file after an
	error occurs.

	* patch_compressed.c (main): fix comparison of reference ids.


2007-11-18  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* combine_backup_files.c (read_next_file_chunk): changed to set
	num_blocks to zero if already at end of file.
	(main): change to call read_next_file_chunk before deciding if it is
	the end of the file so that if the file size is exactly the buffer size
	it works correctly.

	* combine_backup_files.c (MAX_FILES): increased to 64.
	(read_next_file_chunk): new function to read more of the file in, when
	the file is larger than MAX_BUFFER_SIZE.
	(main): added code to deal with files larger than MAX_BUFFER_SIZE.

	* Makefile.in (combine_backup_files): added new program.


2007-11-17  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* combine_backup_files.c: new program that combines multiple backup
	files into one diff file.

	* patch_compressed.c (version_string_to_int): new function that
	converts a version string, like "0027" to an integer.
	(main): added code to test to see if the files being diff'd are older
	than 0023 and if so insert the next reference into bytes 0 to 3 of the
	block, which was needed when the reference id's wrapped around storage.
	If they are newer then don't bother with the next_reference.


2007-11-14  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>


	* backup.c (nwos_initialize_backup): change to use "objectify" for the
	backup file name instead of the username.


2007-11-13  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* backup.c (sort_file): initialize read_offset to zero so the compiler
	doesn't complain about it being used uninitialized.

	* backup.c (nwos_terminate_backup): added test to make sure it was
	modified before complaining about no backup.

	* disk_io.c (nwos_initialize_disk_io, nwos_terminate_disk_io)
	(nwos_write_block): added #ifndef NO_BACKUP around call to
	backup functions.  This way we don't need to include backup.c when
	compiling export_c_structs.
	* Makefile.in (export_c_structs): add -DNO_BACKUP so disk_io.c doesn't
	make any calls to backup.c.


2007-11-12  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* backup.c (sort_file): added code to deal with duplicate blocks.


2007-11-10  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* backup.c (sort_file): added the code to handle the case where the
	file to be sorted is larger than the sort buffer.

	* backup.c (sort_file): moved test for error after read in sort loop
	outside of the loop.  This way we can skip the writing if there was a
	read error.

	* backup.c (sort_file): added malloc call for buffer which was
	accidentally lost in moving code from one file to another.  Removed
	line that set backup_file_desc to -1 since file hasn't been closed yet.
	(nwos_terminate_backup): added printing of how long sort_file() took.
	Set backup_file_desc to -1 after file is closed.  Added call to free
	nwos_backup_path which was malloc'd in nwos_initialize_backup.


2007-11-09  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* backup.c (compare_id): added new to compare two reference IDs and
	return the difference.
	(sort_file): added new to sort the blocks in the backup file into the
	proper order (incomplete, cannot deal with a file larger than 1 MB).
	(nwos_terminate_backup): changed to call the sort_file function.

	* Makefile.in: added backup.o to OBJS.
	* objectify_private.h (nwos_initialize_backup, nwos_terminate_backup)
	(nwos_backup_write_block): added new externs for backup.c.
	* backup.c (nwos_initialize_backup, nwos_terminate_backup)
	(nwos_backup_write_block): new functions created from code taken from
	disk_io.c.
	* disk_io.c (nwos_backup_path, backup_file_desc): moved to backup.c.
	(initialize_backup_file, terminate_backup_file): moved functions to new
	file: backup.c.
	(nwos_initialize_disk_io): changed name of function call to initialize
	backup.
	(nwos_terminate_disk_io): moved code to deal with backup file to
	disk_io.c changed name of function call to terminate backup.
	(nwos_write_block): moved code to write backup file to new function in
	backup.c.

	
2007-11-08  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (terminate_backup_file): created from code taken from
	nwos_terminate_disk_io to finish writing and close backup file.
	(nwos_terminate_disk_io): move code to finish writing and close backup
	file into new terminate_backup_file function.


2007-11-07  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (nwos_backup_path, backup_file_desc): added new for
	backup file.
	(initialize_backup_file): new function to setup and open backup file.
	(nwos_initialize_disk_io): added call to initialize_backup_file if
	opening is not read_only.
	(nwos_terminate_disk_io): added code to finish writing to backup file
	and close it.
	(nwos_write_block): added code to write block to backup file if it is
	open.

	* config.h.in (BACKUP_LOCATION): add new to define the location for
	backing up changes (directory or host).


2007-11-04  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_26.1

	* config.h.in (DEFAULT_FILE): changed preconfigured default file to
	/var/db/objectify/private.obj so that if someone wants to use the
	config.h.in as is they just have to create that file.

	* import_file.c (display_usage): new function to display usage info.
	(main): added calls to display_usage when needed.


2007-11-03  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (nwos_generate_new_closely_spaced_id): fix to handle the
	case where the block estimate will fit in one chunk.

	* disk_io.c (nwos_generate_new_closely_spaced_id): renamed 'max_usable'
	variable to 'max_used' because that better represents the value that is
	stored in it.

	* disk_io.c (nwos_allocate_all_chunks_hack): added new to allocate all
	available chunks.
	* prep_disk.c (main): added --allocate-all option that calls the new
	nwos_allocate_all_chunks_hack function in disk_io.c to allocate ALL of
	the blocks that we just preped.  This is a temporary hack until I can
	fix all of the allocation the right way.

	* disk_usage.c (main): rearranged block/chunk usage output format yet
	again.

	* disk_usage.c (calculate_blocks_used): changed parameters so
	chunk_info and number of used chunks is passed in.  Changed to use
	chunk_info.index to read bit maps from disk.  Finally compare used
	block count in chunk_info table with block count calculated from bit
	map.
	(main): changed call to calculate_blocks_used to pass chunk_info table
	and number of chunks used instead of total number of blocks.	

	* disk_usage.c (chunk_counts): removed no longer used.
	(calculate_blocks_used): removed old unused (commented out) code.
	(main): removed old #ifdef'd and commented out code.

	* disk_usage.c (calculate_blocks_used): changed variable 'ref'
	to 'block' to be consistent with usage in disk_io.c.

	* disk_usage.c (main): added code to read in chunk_info table.


2007-11-02  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_usage.c (main): changed output of chunks and blocks into a
	table.

	* disk_usage.c (main): added printing of chunks (total, system,
	allocated, free) and blocks used by system.


2007-11-01  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_usage.c (main): changed printout of results to also print
	amounts in megabytes or gigabytes, in addition to number of blocks.


2007-10-27  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* configure.ac (strlcat, strlcpy): added to AC_CHECK_FUNCS.
	* config.h.in (HAVE_STRLCAT, HAVE_STRLCPY): added undefs for.
	* objectify.h (strlcat, strlcpy): instead of #ifdef linux,
	changed to use autoconf generated HAVE_STRLCAT and HAVE_STRLCPY.
	* log.c (strlcat, strlcpy): instead of #ifdef "linux", test for
	not HAVE_STRLCAT and HAVE_STRLCPY.


2007-10-26  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* configure.ac (stat struct stat.st_mtimespec) added test for.
	* config.h.in (HAVE_STRUCT_STAT_ST_MTIMESPEC) added undef for.
	* file.c: changed from testing for "linux" to testing for not
	HAVE_STRUCT_STAT_ST_MTIMESPEC.


2007-10-25  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (nwos_set_allocation_parameters)
	(nwos_check_blocks_available): moved from beginning of file to a
	location by the ID generation functions.  NO code changes.


2007-10-24  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify_private.h (nwos_generate_new_closely_spaced_id)
	(nwos_generate_new_1_in_N_id): removed 'last_ref' parameter.
	* objectify.c (last_ref, nwos_restart_id_generation): moved to
	disk_io.c.
	(nwos_generate_new_id): removed last_ref parameter in calls to
	nwos_generate_new_closely_spaced_id and nwos_generate_new_1_in_N_id.
	* disk_io.c (last_ref, nwos_restart_id_generation): moved from
	objectify.c.
	(nwos_generate_new_closely_spaced_id, nwos_generate_new_1_in_N_id):
	removed 'last_ref' parameter (now a global variable in disk_io.c)
	and added copy from 'new_ref' to 'last_ref' at the end.

	* objectify.h (nwos_push_security_level, nwos_pop_security_level):
	removed no longer used.
	* objectify.c (nwos_push_security_level, nwos_pop_security_level):
	removed no longer used.  This simplifies moving last_ref to the
	disk_io module.

	
2007-10-21  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* time_stamp.h: added include of sys/time.h because some platforms
	need it to define struct timeval.

	* disk_io.c (nwos_check_blocks_available): added code to allocate
	more chunks if they are available following all of the already
	allocated chunks.  This version CANNOT allocate chunks before or
	in the middle of already allocated chunks.


2007-10-18  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify.c (SECURITY_VERY_LOW_N, SECURITY_LOW_N)
	(SECURITY_MEDIUM_N, SECURITY_HIGH_N): changed the values so they
	are spread out more.  Probably doesn't make any difference but all
	are prime numbers.  Also halved the chunk skipped range for medium
	and high security levels because they are plus and minus, so now
	the range is quadrupled each step up in security.

	* objectify_private.h (nwos_set_allocation_parameters): added
	external declaration.
	* disk_io.c (chunk_density_target, chunk_skip_backward)
	(chunk_skip_forward): added new file global variables.
	(nwos_set_allocation_parameters): added new function to store chunk
	density and number of chunks that can be skipped forward and back.
	(nwos_check_blocks_available): added asserts to verify the chunk
	density and skip values are set and within limits.  Also added
	check to verify there are enough chunks allocated.
	* objectify.c (SECURITY_VERY_LOW_N, SECURITY_LOW_N)
	(SECURITY_MEDIUM_N, SECURITY_HIGH_N): new defines to configure how
	dense blocks are for a particular security level.
	(set_security_level): new function that is called by the higher
	level nwos_set_security_level functions to set a security level,
	that calls the new nwos_set_allocation_parameters in disk_io.c.
	(nwos_set_security_level, nwos_push_security_level)
	(nwos_pop_security_level): changed to call the 
	new set_security_level function to set the level so it can call
	the new nwos_set_allocation_parameters in disk_io.c.
	(nwos_generate_new_id): changed to use new SECURITY_XXX_N defines
	instead of hard coded numbers.


2007-10-13  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (calculate_chunk_density): changed to just search back
	from the end and renamed to 'find_first_low_density_in_chunk'.

	* disk_io.c (CHUNK_FACTOR): changed to BYTES_PER_SLICE.


2007-10-11  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* configure.ac: changed version to Alpha_26.1 and added define for
	OLDEST_COMPATIBLE_COMPRESSED_VERSION.
	* configure: regenerated because of Alpha_26.1 and other changes to
	configure.ac.
	* config.h.in: added #undef OLDEST_COMPATIBLE_COMPRESSED_VERSION.
	* disk_io.c (nwos_initialize_disk_io): added code to allow an older
	compressed file to be read in when it is compatible.

	* Makefile.in (distclean): changed to depend upon 'clean' instead
	of 'clean_all' because 'clean_all' removes the Makefiles before
	they can be used to do the dist clean.


2007-10-08  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (calculate_chunk_density): new function to determine if
	a chunk is imbalanced (more used blocks in one part than another.
	(find_starting_chunk): new function to find a chunk that the blocks
	needed will fit into.


2007-10-07  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* import_file.c (main): added call to 'nwos_restart_id_generation'
	function so each file starts with a fresh ID.
	* objectify.c (last_ref): move from static variable from inside the
	'nwos_generate_new_id' to global at file level.
	(nwos_restart_id_generation): added new to clear the 'last_ref'
	variable.
	(previous_ref): added new to keep value of 'last_ref' when security
	level is pushed.
	(nwos_set_security_level): added a call to void 'previous_ref' and
	a call to 'nwos_restart_id_generation' to start ID generation fresh
	for the new security level.
	(nwos_push_security_level): added a call to save 'last_ref' into
	'previous_ref' so it can be restored when the security level is 
	popped and a call to 'nwos_restart_id_generation' to start ID 
	generation fresh for the new security level.
	(nwos_pop_security_level): added a call to restore 'last_ref' from
	'previous_ref' and a call to void 'previous_ref' since it is no
	longer required.
	* objectify.h: added external declaration for new
	'nwos_restart_id_generation' function.

	* Makefile.in (distclean): added calls to Makefile in the three
	sub-directories: md5, sha1, and sha256.
	* md5/Makefile.in (distclean): added new target that does everything
	clean_all does plus removes the backup files ending in '~'.
	* sha1/Makefile.in (distclean): added new target that does everything
	clean_all does plus removes the backup files ending in '~'.


2007-10-06  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* import_file.c (main): renamed 'nwos_set_block_estimate' to
	'nwos_check_blocks_available' and if it returns false skip that file.
	* prep_disk.c (main):  renamed 'nwos_set_block_estimate' to
	'nwos_check_blocks_available' and assert if it returns false.
	* computer.c (space_available); new function to call newly renamed
	'nwos_check_blocks_available' function and print message about not 
	completing command.
	(execute_command): changed to call new 'space_available' function
	instead of previously named 'nwos_set_block_estimate' and not execute
	command if it returns false.
	* rename_file.c (main): renamed 'nwos_set_block_estimate' to
	'nwos_check_blocks_available' and if it returns false exit gracefully.
	* log_disc.c (main): renamed 'nwos_set_block_estimate' to
	'nwos_check_blocks_available' and if it returns false exit gracefully.
	* disc_list.c (main): renamed 'nwos_set_block_estimate' to
	'nwos_check_blocks_available' and if it returns false exit gracefully.
	* add_password.c (main): renamed 'nwos_set_block_estimate' to
	'nwos_check_blocks_available' and if it returns false exit gracefully.
	* objectify.h (nwos_set_block_estimate): renamed function to
	'nwos_check_blocks_available' and to return a boolean value.
	* disk_io.c (nwos_set_block_estimate): changed function name to
	'nwos_check_blocks_available' and to return a boolean value, true if
	there was space for the blocks and false if not.  Also added code to
	print various values if it fails to stderr.

	* Makefile.in (distclean): new target that does everything clean_all
	does plus config.status, config.log and backup files ending in '~'.


2007-10-04  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_26

	* rename.c (main): fix compiler warning, "no_history" could be used
	uninitialized.


2007-10-03  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* log.c (append_date_from_time_string): Bug #1806945 - fixed least
	significant digit of month in log file name, when month number is 
	greater than 9.


2007-09-23  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* rename_file.c (main): added option to do the rename the was it was
	done in revision 1.5 and before, by overwriting the string in the path
	object.

	* rename_file.c (main): added variables for old and new names and
	changed code to use them to access arguments instead of using argv[1]
	and argv[2] explicitly.

	* rename_file.c (main): removed code that did the creation of the new
	name into a separate function called 'create_new_path'.
	(create_new_path): new function created with code moved from 'main.


2007-09-17  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* export_file.c (main): change the order of testing for file name
	match and old (renamed) file names.  Before it would read the
	association object for every single file, test for an old file name,
	and then see if the file name matched the argument.  Now it tests
	for an argument match with the name and if it doesn't match it
	doesn't read the association object at all.  The time for reading a
	single file (with 4441 files in the system) went from 5 minutes and
	28 seconds (328 seconds) to 17.5 seconds, 18 times faster.


2007-09-16  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* remove_file.c (main): added warning about making a backup and
	require verification before removing file.

	* remove_file.c: removed warning comment about not being fully
	functional, should work in most cases now.
	(print_md5, print_sha1): removed, were not used.
	(main): removed do_md5 and do_sha1 variables that weren't used.

	* reference_list.c (nwos_remove_from_reference_list): fixed the case
	where the entry that needs to be removed is in the first block but
	there are extra blocks that have to be fixed.

	* reference_list.c (nwos_remove_from_reference_list): added function
	header comment with explanation about different cases that occur when
	removing an entry.  Also added and changed some comments in the code.
	NO code changes were made.


2007-09-15  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* reference_list.c (nwos_remove_from_reference_list): added code to
	deal with moving entries down through extra blocks and writing them
	to disk.

	* remove_file.c (main): the previous change was a mistake, put the SHA1
	code back the way it was (there is always a SHA1 sum) and added code to
	deal with a SHA256 sum if it exists (as on all newer files).

	* remove_file.c (main): added test to make sure a file has a SHA1 sum
	before removing it, to handle the case of an old file that was created
	without a SHA1 checksum.

	* reference_list.c (nwos_remove_from_reference_list): changed code to
	deal with removing a block that only had one entry, when the previous
	block had the entry.

	* reference_list.c (nwos_remove_from_reference_list): added code to
	deal with removing a block that only had one entry, when that block is
	beyond the second block.

	* objectify_private.h (Ref_List_First_Block, Ref_List_Extra_Block):
	added ivec variable to save ivec data before block was read or written.
	* reference_list.c (Block_Cache): removed ivec variable because it is
	now part of the first block and extra block structures.
	(read_ref_list_into_cache): modified asserts that verify that the size
	of the first and extra block structures is what we expect.  Change to
	access the next ivec storage in the first and extra block structures,
	instead of cache->ivec.
	(write_reference_list): change to point to block->ivec instead of
	cache->ivec.
	(nwos_create_reference_list_with_existing_id): change to set ivec in
	first block to zero instead of setting cache->ivec to zero.
	(nwos_add_to_reference_list): change to use local variable for ivec
	and copy it in and out of ivec in block structures.
	(nwos_remove_from_reference_list): removed two calls to set cache->ivec
	to zero because ivec in first block should always be zero.

	* reference_list.c (nwos_remove_from_reference_list): added code to
	deal with the special case where there are two blocks in the reference
	list and the second one only has one entry and that entry is the one
	that needs to be removed.

	* config.h.in (TEST_PASS_PHRASE): added for testing purposes, to keep
	from having to type it in everytime.
	* prep_disk.c (main): added #ifndef TEST_PASS_PHRASE around code asking
	for input from user, so it will just blindly plow ahead.
	* security.c (nwos_get_key_from_password): added conditional code based
	upon TEST_PASS_PHRASE to automatically fill in pass phrase from it, if
	it is defined.

	* reference_list.c (nwos_remove_from_reference_list): added code to
	deal with the case where the entry to be removed is in the first block
	and there is only one entry in the second block (so the second block
	can be eliminated).  Also added assert to check for only one entry in
	the last block, since the mulitple block code cannot deal with
	eliminating the last block yet.


2007-09-14  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* reference_list.c (nwos_remove_from_reference_list): removed unused
	ivec local variable.

	* reference_list.c (nwos_remove_from_reference_list): changed so that
	when an entry is removed from a reference list that fits in one block
	it moves all of the ones above it down instead of copying the last one
	over the top of it (thereby changing the order).


2007-09-13  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* reference_list.c (nwos_remove_from_reference_list): added code to
	remove an entry from the list as long as it is in the last block.


2007-09-02  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify.h (nwos_set_block_estimate, nwos_estimate_blocks_for_file):
	added external declarations.
	* disk_io.c (block_estimate, last_used_blocks): new static variables
	for the block estimate stuff.
	(log_estimate_results): new static function that prints the results of
	the block estimate (estimated and actual).
	(nwos_set_block_estimate): new function to save the block estimate.
	* file.c (nwos_estimate_blocks_for_file): added new function to
	estimate the number of blocks that will be needed to store a file.
	* add_password.c (main): added call to set block estimate.
	* computer.c (execute_command): added calls to set block estimates.
	* disc_list.c (main): added call to set block estimate.
	* import_file.c (main): added calls to set block estimate for each
	file.
	* log_disc.c (main): added call to set block estimate.
	* prep_disk.c (main): added call to set block estimate.
	* rename_file.c (main): added call to set block estimate.

	* phone.c (nwos_find_private_area_code): Bug #1786616 - changed to call
	'find_or_create_private_class' to get Area Code class, instead of just
	'find_private_class' so it will create the private Area Code class if
	it doesn't already exist.
	(nwos_find_or_create_private_area_code): changed return value to bool,
	and return true if it was found or if it was created.
	(nwos_create_phone_number): Bug #1786619 - changed to call
	'nwos_find_or_create_private_area_code' instead of
	'nwos_find_private_area_code' because if the private area code doesn't
	exist it must be created.


2007-09-01  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* import_file.c (encryption_options): changed to security_options
	to match up with previous changes made on 2007-08-12  (missed this).
	(main): changed 'encryption_options' to 'security_options' and changed
	print statement to say "setting security level to:" instead of
	"setting encryption level to:".


2007-08-29  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (write_bit_map, read_bit_map_into_cache): added #ifdef
	LOG_BIT_MAP around log messages so they are not logged in a normal
	build.


2007-08-28  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* reference_list.c (nwos_add_to_reference_list): added #ifdef
	LOG_REFERENCE_LIST around two more log messages so they are not
	logged in a normal build.


2007-08-26  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* export_file.c (main): added code to test for old (renamed) file names
	and not match wild cards if it is an old name.  If the old name is
	explicitly given (exact match, no wild card) it will export it.


2007-08-25  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* doc/Document_Storage.txt: added this brief explanation of how I
	use the system to store my documents.

	* list_files.c (main): added --list-old-files option to print the
	old names of files that have been renamed, if the option isn't given
	the old names are not listed in the output.

	* file.c (nwos_number_of_files_for_path): corrected an incorrect
	comment about the return value.  NO code changes!

	* rename_file.c (file_is_used_in_disc_list): changed to pass pointer
	to Path and File Association object instead of disc_list reference,
	because 'main' now reads it.  Moved code to read the association
	object to 'main'.
	(main): changed to do rename a completely different way.  Instead of
	just changing the name string in the Path object, it creates a new
	Path object and a new Path and File Association object and leaves the
	old ones intact.  It sets the 'next_version' and 'prev_version' in
	the old and new association objects to point to each other.
	* objectify.h (nwos_create_file_path): added external declaration for.


2007-08-24  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* rename_file.c (main): added test to print error and exit if the new
	path (file name) already exists in the system.

	* rename_file.c (main): changed to only call file_is_used_in_disc_list
	if a private disc_list class exists, otherwise there are no disc_lists 
	in the system.
	(file_is_used_in_disc_list): changed to pass disc_list class reference
	into the function because main has already read it to determine if any
	disc_lists exist in the system.

	* rename_file.c (main): moved code that checked to see if a certain
	file name (path) was used in a disc_list into a separate function.
	(file_is_used_in_disc_list): new function created from code taken from
	main.

	* rename_file.c (main): added code to print the disc list ID number
	instead of it's reference when file is listed in a disc list.

	* rename_file.c: new program to changing a file name (with certain
	restrictions).
	* Makefile.in: (rename_file): added.


2007-08-23  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* list_files.c (main): removed reading File Path class reference
	because it isn't used.  Changed to emit error message when there isn't
	a private File and Path class defined (no files exist) instead of
	asserting.

	* export_file.c (list_all): removed function, no longer needed.
	(export_list): renamed to "export_file" and removed loop so it only
	processes one file.
	(main): added loop to pass all arguments through the file name match
	function to do name globbing and if there is a match call the 
	export_file function.


2007-08-17  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* list_files.c (print_sha256): fixed to deal with the case where the
	sha256sum is void (no SHA256 sum was calculated for this file).

	* list_files.c (print_sha256): new function to print SHA256 checksum.
	(main): added code to add option for printing the SHA256 checksum.
	* export_c_structs.c (output_class): changed code that checked for
	"Sha1" to check for "Sha" and any number, so it will match Sha1,
	Sha256, or Sha512.
	* file.c: add include of sha256/sha256.h.
	(nwos_find_sha256, nwos_create_sha256): new functions to find and
	create SHA256 checksum objects, created from SHA1 functions.
	(checksum_file, read_file): added code to calculate SHA256 checksum in
	addition to MD5 and SHA1.
	(nwos_create_file_without_storing_data, nwos_add_new_revision_of_file)
	(nwos_create_file): added code to create a SHA256 checksum object in 
	addition to the MD5 and SHA1 objects and store it in the File object.
	(nwos_find_matching_file_from_size_md5_sha1): added code to also
	verify SHA256 checksum if the file object contains one.
	(nwos_find_matching_path_and_file_association): added code for SHA256
	checksum in addition to MD5 and SHA1.
	* configure.ac (AC_CONFIG_FILES): added sha256/Makefile.
	* Makefile.in (sha256): added new target.
	(libobjectify.a): added sha256.o.
	(clean_all): added clean sha256 directory.
	* sha1/sha1.h: upgraded to GNU coretutils-6.9.
	* sha1/sha1.c: upgraded to GNU coretutils-6.9.
	* sha1/Makfile.in (sha1.o): removed dependency on md5.h which is no
	longer required in coreutils-6.9.
	* sha256/sha256.h: copied from GNU coretutils-6.9.
	* sha256/sha256.c: copied from GNU coretutils-6.9.
	* sha256/Makfile.in: created fromm sha1/Makefile.in.


2007-08-16  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* file.c (nwos_find_file_path, nwos_create_file_path)
	(nwos_find_md5, nwos_find_matching_file_from_size_md5_sha1)
	(nwos_create_md5, nwos_create_file_without_storing_data)
	(nwos_find_sha1, nwos_find_path_and_file_association)
	(nwos_create_sha1,nwos_find_or_create_path_and_file_association):
	added conditional code for PUBLIC_MODE so it can be used to create
	public file objects.
	* attic/log_public_file: new file to create files in the public
	objects.


2007-08-13  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (nwos_generate_new_closely_spaced_id): corrected value
	passed to find_bit_map_in_cache to include offset_to_chunks.

	* disk_io.c (nwos_generate_new_closely_spaced_id): replaced
	BIT_MAP_BYTES with BIT_MAP_BLOCKS in two places where calculation
	was based on blocks and not bytes.


2007-08-12  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* add_password.c (main): add call to allocate the chunk for the new
	password root object.

	* disk_io.c (generate_new_completely_random_id): fix bug that occurred
	when only one chunk had been allocated, but it wasn't the first chunk.
	The problem was that the chunk index was not used when there was only
	one chunk, so if that one chunk was not the first chunk (0) it failed.

	* objectify.h (Encryption_Level): renamed to 'Security_Level'.
	(nwos_set_encryption_level): renamed to 'nwos_set_security_level'.
	(nwos_push_encryption_level): renamed to 'nwos_push_security_level'.
	(nwos_pop_encryption_level): renamed to 'nwos_pop_security_level'.
	* objectify.c (encryption_level): renamed to 'security_level'.
	(previous_encryption_level): renamed to 'previous_security_level'.
	(nwos_set_encryption_level): renamed to 'nwos_set_security_level' and
	renamed enumerated 'Encryption_xxx' values to 'Security_xxx'.
	(nwos_push_encryption_level): renamed to 'nwos_push_security_level' and
	renamed enumerated 'Encryption_xxx' values to 'Security_xxx'.
	(nwos_pop_encryption_level): renamed to 'nwos_pop_security_level' and
	renamed enumerated 'Encryption_xxx' values to 'Security_xxx'.
	(nwos_generate_new_id): renamed enumerated 'Encryption_xxx' values to 
	'Security_xxx'.
	* import_file.c (encryption_options): changed 'level' from
	'Encryption_Level' to 'Security_Level' because the type was renamed and
	renamed enumerated 'Encryption_xxx' values to 'Security_xxx'.
	(main): renamed 'nwos_set_encryption_level' calls to
	'nwos_set_security_level'.
	* log_disc.c (main): renamed call to 'nwos_set_encryption_level' to 
	'nwos_set_security_level' and enumerated value 'Encryption_Very_Low' to
	'Security_Very_Low'.
	* disc_list.c (main): renamed call to 'nwos_set_encryption_level' to 
	'nwos_set_security_level' and enumerated value 'Encryption_Very_Low' to
	'Security_Very_Low'.
	* computer.c (main): renamed call to 'nwos_set_encryption_level' to 
	'nwos_set_security_level' and enumerated value 'Encryption_Extreme' to
	'Security_Extreme'.
	* add_password.c (main): renamed call to 'nwos_set_encryption_level' to 
	'nwos_set_security_level' and enumerated value 'Encryption_Extreme' to
	'Security_Extreme'.
	* prep_disk.c (main): renamed call to 'nwos_set_encryption_level' to 
	'nwos_set_security_level' and enumerated value 'Encryption_Extreme' to
	'Security_Extreme'.
	* verify_file.c: removed call to 'nwos_set_encryption_level' because it
	doesn't create any objects, it doesn't need to set the security level.


2007-08-11  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* file.c (nwos_create_file): removed code that set security level to
	Extreme before calling nwos_create_file_path so that the path is
	created in the desired security level.

	* disk_io.c (nwos_generate_new_closely_spaced_id): completely rewritten
	to work with the new chunk stuff.


2007-08-09  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* config.h.in: added #undef HAVE_STDINT_H so it could be removed from
	Makefile.in files.
	* Makefile.in: removed -DHAVE_STDINT_H, now defined in config.h.
	* sha1/Makefile.in: removed -DHAVE_STDINT_H, now defined in config.h.
	
	* types.h (off_t, lseek, O_LARGEFILE): removed conditional definitions
	for these that were to cope with 64 bit file system junk.  Now using
	_FILE_OFFSET_BITS = 64 to do the 64 bit file stuff on Linux.
	* Makefile.in (CFLAGS): added -D_FILE_OFFSET_BITS=64.
	* check_block_maps.c (_LARGEFILE64_SOURCE, O_LARGEFILE): removed.
	* compress_sparse.c (_LARGEFILE64_SOURCE, O_LARGEFILE): removed.
	* diff_sparse.c (_LARGEFILE64_SOURCE, O_LARGEFILE): removed.
	* disk_io.c (_LARGEFILE64_SOURCE, O_LARGEFILE): removed.
	* disk_usage.c (_LARGEFILE64_SOURCE, O_LARGEFILE): removed.
	* expand_sparse.c (_LARGEFILE64_SOURCE): removed.
	* prep_disk.c (_LARGEFILE64_SOURCE, O_LARGEFILE): removed.
	* file.c (_LARGEFILE64_SOURCE): removed.  Also added LL to long long
	constants.
	

2007-08-06  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (Bit_Map_Cache_Entry): changed 'chunk' element to 'index.
	(write_bit_map, read_bit_map_into_cache, find_bit_map_in_cache)
	(generate_new_completely_random_id, nwos_generate_new_1_in_N_id):
	changed to use index into chunk_info from bit map cache instead of
	chunk.
	(chunk_index_to_info_index): new function to find the chunk_info index
	from the chunk_index.
	(nwos_set_bit_in_map, nwos_clear_bit_in_map): change to use the new 
	'index' into the chunk_info to increment or decrement the used block 
	count instead of trying to calculate the index into chunk_info.
	(nwos_generate_new_closely_spaced_id): this function is broken, cannot
	be used yet.
	
	* disk_io.c (nwos_generate_new_1_in_N_id): changed name of 'block'
	variable to 'ref' because it is more descriptive (it is not a block
	number).

	* types.h (bool8, bool16): added.
	* disk_io.c (Bit_Map_Cache_Entry): changed 'dirty' from bool to
	bool8 and added bool8 'in_use' variable.
	(nwos_terminate_disk_io, nwos_flush_bit_maps): changed to use new 
	'in_use' element to determine if bit map cache entry is used instead of
	'chunk' non zero.
	(read_bit_map_into_cache): added code to set 'in_use' element to
	true when entry is read in.
	(find_bit_map_in_cache): changed to test 'in_use' before testing
	'chunk' and check for not 'in_use' to find empty instead of 'chunk'
	being zero.


2007-08-05  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (nwos_hash_uint32_ref): removed code that does binary
	search of chunk_info table.
	(uint32_ref_to_info_index): new function created with code taken
	from nwos_hash_uint32_ref that does the binary search and returns
	the index into the chunk_info table.


2007-08-03  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (nwos_generate_new_1_in_N_id): changed so that instead of
	picking 1 block out of every N blocks, it just picks a random number
	between 1 and N and adds it to the previous block number.
	* objectify.c (nwos_generate_new_id): change values used to call 
	nwos_generate_new_1_in_N_id to 7 (very-low), 19 (low), 43 (medium),
	and 113 (high).
	* import_file.c (encryption_options): added "high" security option.


2007-08-02  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify.c (nwos_generate_new_id): change default encryption level
	to None instead of High (which wasn't used before).  Changed low and
	medium levels from skip 64 and 512 to 32 and 128 respectively.  Made 
	high level skip 512 (what medium was before). 

	* compress_sparse.c (main): change to use the new index in the
	chunk_info table to compute the address of the chunk on disk.
	* disk_io.c (nwos_allocate_new_chunk, nwos_hash_uint32_ref): change to
	use the new index in the chunk_info table to compute the address of the
	chunk on disk.


2007-08-01  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_25.2

	* file.c (nwos_add_new_revision_of_file): Bug #1765315 - added code 
	to find or create the File class before reading any old file objects.
	That way it will be updated to an updated File object when it is read,
	and it will all be happy when it is re-written to disk.
	* (nwos_update_file_001_object_to_current): Bug #1765315 - added code
	to recalculate the data checksum after the object is updated.  This
	way if the object is rewritten to disk it is all kosher.

	NOTE: changes from 2007-07-31 were NOT included in Alpha_25.2.


2007-07-31  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (nwos_initialize_disk_io): add line in byte swap loop
	to swap index element along with the others.
	(nwos_terminate_disk_io): add line in byte swap loop to swap index
	element along with the others.
	(nwos_allocate_new_chunk): added code to compute the chunk index
	into actual disk storage and store it in the chunk_info table.
	* expand_sparse.c (main): changed to allow 0023, 0024 or 0025
	compressed to be read in.
	* objectify_private.h (Chunk_Info): changed 'reserved' to 'index',
	because now it is the mapping into the chunk on the disk.


2007-07-30  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_25.1

	* file.c (nwos_update_file_001_object_to_current): changed to NOT
	attempt to create the updated file private class definition when
	updating an old file object.  This causes a problem in the case
	that the object storage is opened read only.
	
	* objectify.c (get_file_001_reference): fixed to handle the case,
	again, where an updated file private class definition hasn't been
	created yet.

	* expand_sparse.c (main): changed to allow 0023 or 0024 compressed
	to be read in.


2007-07-29  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_25

	* objectify.c (nwos_write_object_to_disk): Bug #1754741 - fixed by
	ifdef out assert.  It was used before the bit map to verify we weren't
	writing to a block that was already used.  Now we assume the bit map
	is correct and the block can be written over even if it is non-zero.

	* file.c (nwos_find_matching_path_and_file_association): Bug #1763165
	fixed to return false when an error occurs, return value is boolean and
	it was returning ERROR_OCCURRED which is non-zero.

	* objectify.h (VERSION_STRING): moved to configure.ac so it is in
	the same place as the PACKAGE_VERSION.
	* configure.ac (VERSION_STRING): added definition for VERSION_STRING.
	Also changed Package version to "Alpha_25" and version string to "0025"
	because the File class definition changed in the public objects and 
	although the storage header did not change, it could do wacky things if
	the public objects and code did not match up.
	* config.h.in (VERSION_STRING): added undef so configure will define
	it.

	* objectify.c (get_file_001_reference): added a static boolean
	variable 'inside_already' so if it gets called recursively it
	will just return instead of reentering until the stack overflows.


2007-07-28  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify.c (get_file_001_reference): fixed to handle the case
	where no private File class exists yet and changed to save the
	reference in the loop before reading the next object header.
	(get_file_class_reference): new function to return the latest
	File class reference.
	(nwos_get_object_class): added code to test for older File class
	object and update to newest if it is.


2007-07-27  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* export_c_structs.c (output_class): changed to properly deal with
	classes that have revisions.
	* attic/add_class_revision.c: new file to create a new revision of
	an existing class, in this case the File class.
	* objectify_private.h (update_file_001_object_to_current): added
	external definition for.
	* class_definition.c (nwos_clone_updated_class_definition): new
	function to clone a class definition that has been updated.
	(nwos_find_or_create_private_class_definition): added code to check
	if public class has been updated and clone the new updated class if
	so.
	(nwos_find_public_class_definition): added code to check for class
	that has been updated and skip over the old one.
	(nwos_find_private_class_definition): added code to check for class
	that has been updated and skip over the old one.
	* file.c (file_size_to_uint64): new inline function to convert File
	object size to uint64.
	(checksum_file, read_file): changed to return uint64 instead of uint32
	and to calculate file length as uint64.
	(nwos_find_matching_file_from_size_md5_sha1): changed to pass in file
	length as uint64.
	(nwos_create_file_without_storing_data, nwos_check_file_checksums)
	(nwos_find_matching_path_and_file_association): changed to deal with 
	file length as uint64 and allow file size up to 1 terabyte.
	(nwos_create_file, nwos_add_new_revision_of_file, nwos_restore_file)
	(nwos_file_is_identical): changed to use uint64 for file length.
	(nwos_update_file_001_object_to_current): new function to convert an
	old file object (32 bit file size) to new file object (64 bits).
	* objectify.c (nwos_ready): new boolean variable to flag when the
	system is ready for normal processing (can call find class definition
	functions, etc.).
	(get_file_001_reference): new function to find the reference for the
	File 001 class.
	(nwos_read_object_from_disk): modified to check to see if object is a
	File_001 class and update it before returning it.


2007-07-26  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* remove_file.c - new file, this is a hack to remove some files I
	accidentally imported that I didn't want.  I don't recommend using
	this until it is safer.  Right now it could fail and trash your
	archive.


2007-07-23  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* file.c (nwos_number_of_files_for_path): modified to skip over files
	that have a 'next_version' so it only counts a file with multiple
	revisions once.
	(nwos_file_path_to_path_and_file_association): modified to skip over
	files that have a 'next_version' so it only returns the latest version
	of a file with multiple revisions.
	* export_file.c (export_list): modified to deal with files that have
	more than one revision.

	
2007-07-22  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify.h (ObjCreateResult): Added CREATED_NEW_REVISION,
	PATH_NOT_FOUND, and MULTIPLE_FILES values.
	* file.c (nwos_add_new_revision_of_file): new function that creates
	a new revision of a file that is already in the system.
	* import_file.c (main): added "--add-revision" option that calls
	nwos_add_new_revision_of_file to create a new revision of an existing
	file.


2007-07-21  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify.h (nwos_file_is_identical): added 'match' parameter to
	allow it to ignore the time stamp on the file.
	* file.c (nwos_file_is_identical): added 'match' parameter to allow
	it to ignore the time stamp on the file and included it in 'if'
	statement for testing time stamp.
	* verify_file.c (main): add 'match' parameter in call to
	nwos_file_is_identical so it will ignore the time stamp on the file.

	* verify_file.c (main): added option to allow reading from a
	compressed file instead of default storage (like export_file).


2007-07-17  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* prep_disk.c (max_blocks_on_device): changed error print statement
	to cast off_t type to int64 so certain compilers won't complain.


2007-07-15  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify.h (byteswap_uint16): added to swap the bytes in a uint16.
	(byteswap_uint32): added to swap the bytes in a uint32.
	* disk_io.c (nwos_initialize_disk_io): changed to use WORDS_BIGENDIAN
	(generated by ./configure) instead of "__BYTE_ORDER == __LITTLE_ENDIAN"
	to determine endianess, because it is more platform independant.  Also
	changed to use new byteswap_uint16 and byteswap_uint32 functions in
	objectify.h to swap bytes instead of bswap_16 and bswap_32, also for
	platform independence.
	(nwos_terminate_disk_io): same changes as to nwos_initialize_disk_io
	above.
	(nwos_read_block): added initializer for 'i' so that the compiler
	doesn't emit warning about it possibly not being initialized.
	* compress_sparse.c (main): same changes as made in disk_io.c, use
	WORDS_BIGENDIAN and byteswap_uint32.


2007-07-13  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* configure.ac (AC_C_BIGENDIAN): added so endianess works correctly
	for sha1.c.
	* sha1/Makefile.in (sha1.o): added -DHAVE_CONFIG_H so it will
	include config.h and -I.. so it will get it out of the root
	directory.
	* config.h.in (WORDS_BIGENDIAN): added undef for ./configure to
	fill in.
	* INSTALL: add running ./configure.


2007-07-12  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* log_disc.c (main): give the 'binder' variable an illegal initial
	value so the compiler on FreeBSD doesn't complain it is
	uninitialized.

	* config.h: renamed to config.h.in.
	* Makefile: renamed to Makefile.in.
	* Makefile.in (CFLAGS): changed -g option to -O3.
	(LIBS): changed to use ./configure generated LIBS instead of 
	"-lrt -lcrypto" because on FreeBSD and OpenBSD it causes an error
	to include -lrt.
	(clean_all): added command to remove configure generated Makefile
	and config.h.  Removed cleaning of attic/convert_c_structs_to_csv
	because it is no longer used.
	* md5/Makefile: renamed to md5/Makefile.in.
	* md5/Makefile.in (CFLAGS): changed -g option to -O3.
	(clean_all): added section to remove configure generated Makefile.
	* sha1/Makefile: renamed to sha1/Makefile.in.
	* sha1/Makefile.in (CFLAGS): changed -g option to -O3.
	(clean_all): added section to remove configure generated Makefile.
	* objectify.h (RELEASE_VERSION): removed, use PACKAGE_VERSION
	generated by ./configure script in config.h.
	* prep_disk.c (agree_no_warranty): changed RELEASE_VERSION to
	PACKAGE_VERSION.


2007-07-11  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* person.c (nwos_add_birthday): new function to add a birthday
	to a person that doesn't have one (can't change a birthday yet).
	* objectify.h (nwos_add_birthday): add external declaration.
	* computer.c (execute_command): add code to add a person's
	birthday.
	(main): add print statement for adding a birthday.


2007-07-10  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* prep_disk.c (write_chunks): added code to clear errno before
	writing chunks so it won't be non-zero because of some previous
	call.
	* reference_list.c (nwos_create_reference_list_with_existing_id):
	fix bug where memory allocated for first block was file block
	size and not the actual size of Ref_List_First_Block structure.


2007-07-07  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_24`


2007-07-06  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify_private.h (nwos_log): move declaration to objectify.h.
	* objectify.h (nwos_log): move declaration from objectify_private.h.
	* log_disc.c (main): add code to log disc_list info.

	* objectify.c (nwos_next_public_ref): moved to disk_io.c.
	(nwos_generate_new_public_id): moved to disk_io.c.
	* disk_io.c (nwos_next_public_ref): moved from disk_io.c.
	(nwos_generate_new_public_id): moved from disk_io.c.
	(nwos_initialize_disk_io): added #ifdef so if in PUBLIC_MODE
	public file is opend read/write instead of read only.  Also
	fix so public file used_blocks is correctly copied into
	nwos_used_public_blocks instead of nwos_used_private_blocks.
	Finally added code to copy nwos_used_public_blocks into
	nwos_next_public_ref.
	(nwos_terminate_disk_io): added #ifndef around declaration of
	chunk_info_size_in_bytes so it isn't defined in PUBLIC_MODE.
	Moved #endif so that "if (chunk_info_modified)" block isn't
	compiled in PUBLIC_MODE.  Finally added #ifdef about lseek
	and write calls so they use the public_file_desc in PUBLIC_MODE.
	(nwos_write_block): Added #ifdef about lseek and write calls so 
	they use the public_file_desc in PUBLIC_MODE.


2007-07-05  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* log_disc.c (main): changed so that storage locations are
	not predefined in the code, but are added by the user.

	* file.c (nwos_find_disc_copy): added loop to find latest
	version (one with no next).
	(nwos_create_disc_copy): added conditional to move disc if
	the location changed (create a new version of the object).
	* log_disc.c (main): changed assert(result == CREATED_NEW)
	to if statement to say if new copy was created or if the old
	one was simply updated.
	* list_discs.c (main): changed to NOT print copy information
	if a newer version of that object exists.


2007-07-04  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (nwos_read_block): Fixed bug when reading from
	compressed file.  When reference IDs were wrapped around the
	disk, they had to be hashed before searching.  Since they are
	no longer wrapped, they just have to be converted to uint32.


2007-07-02  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* objectify_private.h (Chunk_Info): new structure for
	chunk table stored on disc (formerly chunk_index).
	* objectify.h (RELEASE_VERSION): changed to Alpha_24.
	(VERSION_STRING): changed to 0024.
	(nwos_2_uint8_to_uint16): added new inline function.
	* disk_io.c (chunk_index): changed from uint32* to
	Chunk_Info* and renamed to chunk_info.
	(Bit_Map_Cache_Entry): removed "used" element because the
	blocks used is stored in the chunk_info table.
	(nwos_initialize_disk_io): changed chunk_index to chunk_info,
	chunk_index_modified to chunk_info_modified, and
	chunk_index_size_in_bytes to chunk_info_size_in_bytes.
	Changed to deal with chunk_info as a structure, also read
	and reorder bytes for used blocks in chunk from chunk_info.
	(nwos_terminate_disk_io): changed chunk_index to chunk_info,
	chunk_index_modified to chunk_info_modified, and
	chunk_index_size_in_bytes to chunk_info_size_in_bytes.
	Changed to deal with chunk_info as a structure, also read
	and reorder bytes used blocks in chunk from chunk_info.
	(nwos_hash_uint32_ref):  changed chunk_index to chunk_info
	and changed to deal with it as structure instead of uint32.
	(write_bit_map): added code to count bits set in map and
	verify blocks used count in chunk_info is correct.
	(read_bit_map_into_cache): added code to count bits set in
	map and verify used block count in chunk_info is correct.
	No longer need to update entry->used with used block count
	because it is stored in the chunk_info table.
	(nwos_set_bit_in_map): changed to increment "used" block
	count in chunk_info table instead of cache entry.
	(nwos_clear_bit_in_map): changed to decrement "used" block
	count in chunk_info table instead of cache entry.
	(float chunk_usage): changed to use chunk_info table instead
	of cache entry to compute percentage used in chunk.
	(generate_new_completely_random_id): changed to use "used"
	block count in chunk_info instead of cache entry.  Also
	changed chunk_index to chunk_info and changed to access
	"ref" structure element instead of uint32.
	expand_sparse.c (main): changed to read 0023 compressed file
	with warning, to allow upgrading to 0024.
	check_block_maps (main): added code to verify new "used"
	block counts, in disk layout 0024.

	* INSTALL (Upgrade): added new section on how to upgrade
	from 0021 to 0022, 0022 to 0023, and 0023 to 0024.


2007-07-01  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Converted to GPLv3


2007-06-30  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_23.1

	* reference_list.c (nwos_add_to_reference_list): added #ifdef
	LOG_REFERENCE_LIST around logging of add to reference list,
	so that it is off by default.


2007-06-29  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (nwos_write_block): added #ifdef LOG_WRITE_BLOCK
	around the logging of each write, so that it doesn't log
	block writes by default anymore.

	* disk_io.c (generate_new_completely_random_id): fixed bug
	where byte number was off by 4 (BLOCKS_IN_MAP / 8), so it
	would test for block used in the wrong byte of the bit map
	and sometimes thought a used block was unused.  Then the
	assert(!nwos_block_used()) would assert.


2007-06-28  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_23

	* compress_sparse.c (main): modify for 0023 disk layout.

	* disk_io.c (generate_new_completely_random_id): added log
	message to print id's generated (conditionally compiled).
	(nwos_generate_new_1_in_N_id): added log message to print id's
	generated (conditionally compiled).

	* prep_disc.c (main): Fix Segmentation fault when no parameters
	were given on the command line.


2007-06-27  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* check_block_maps.c (main): Modified to to only check block maps
	that are used, instead of all block maps on the disk.

	* expand_sparse.c (main): added assert to verify that num_blocks 
	stays in sync with nwos_used_private_blocks.

	* expand_sparse.c (main): added code so final messages about
	blocks used and total blocks mismatch are sent to log as well as
	printed to the screen.

	* attic/convert_0022_compressed_to_0023.c (main): added code to
	subtract the number of blocks used for the bit maps from the
	used_blocks.  Layout 0023 doesn't count the blocks used for the
	bit maps in the used_blocks.
	* disk_io.c (nwos_allocate_new_chunk): removed the line to add
	BIT_MAP_BLOCKS to the used_blocks.

	* disk_io.c (nwos_hash_uint32_ref): tweaked the binary search a
	bit to make it cleaner?

	* check_block_maps (main): replaced hard coded constants (256 and
	8192) with defines (FILE_BLOCK_SIZE and BIT_MAP_BYTES).


2007-06-26  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* disk_io.c (nwos_generate_new_1_in_N_id): fix to handle case
	where block is in invalid chunk (hash == 0).
	* disk_io.c (nwos_set_bit_in_map): add increment of entry->used.
	(nwos_clear_bit_in_map): add decrement of entry->used.
	(generate_random_id): removed function, no longer needed.
	(generate_new_completely_random_id): replaced entire function,
	now picks a random chunk, then a random byte in the bit map, and
	finally a random bit in the word.
	* prep_disk.c (main): add call to allocate a chunk for the root
	object.

	* disk_io.c (Bit_Map_Cache_Entry): add "used" element.
	(read_bit_map_into_cache): moved code to compute number of blocks 
	used from chunk_usage function.
	(chunk_usage): moved code to compute number of blocks used to
	read_bit_map_into_cache function.

	* objectify.c (initialize_random_number_generator)
	(private_generate_new_completely_random_id, generate_random_id)
	(nwos_generate_new_completely_random_id): moved to disk_io.c.
	* disk_io.c  (initialize_random_number_generator)
	(private_generate_new_completely_random_id, generate_random_id)
	(nwos_generate_new_completely_random_id): moved from objectify.c.
	(private_generate_new_completely_random_id): renamed to
	generate_new_completely_random_id.
	* objectify_private.h (private_generate_new_completely_random_id):
	removed.

	* expand_sparse.c (main): verify both used_blocks and used_chunks
	are zero before proceeding.
	(main): disabled import from previous version, must sort the blocks
	for this upgrade using convert_0022_to_0023 program.
	(main): change so storage size doesn't have to be exactly equal,
	just large enough to fit the blocks.
	(main): change to call nwos_allocate_new_chunk if hash returns 0,
	meaning the chunk hasn't been allocated yet.
	(main): print number of chunks used.
	* disk_io.c (nwos_used_private_chunks): new global variable stored
	in disk header.
	(nwos_total_private_chunks): was total_private_chunks variable 
	moved from nwos_hash_uint32_ref function.
	(chunk_index, chunk_index_modified): new static variables.
	(nwos_initialize_disk_io, nwos_terminate_disk_io): added code to
	deal with used_chunks and chunk_index.
	(nwos_allocate_new_chunk): new function to allocate a new chunk of
	disk and add it to the chunk_index (can currently only allocate at
	the end of the allocated chunks).
	(nwos_hash_uint32_ref): changed to calculate block number by looking
	it up in the chunk_index instead of wrapping it around storage size.
	* objectify.h (RELEASE_VERSION): change to Alpha_23.
	(VERSION_STRING): change to 0023.
	* prep_disk.c (print_usage): changed name of parameter from "private
	blocks" to "size" because it is more descriptive.
	(convert_size): add test to make sure at least two chunks are 
	allocated.
	(main): added total_blocks which is blocks used for header (and
	chunk index) plus private chunks.
	(main): set number of blocks used on empty disk to zero, instead of
	number of blocks used in bit maps.
	(main): change to only write private chunks if file, no longer
	necessary to write disk or disk partition since no chunks are used.
	(main): remove float chunks which was used for partial chunks, which
	we no longer do.
	* objectify_private.h (Disk_Header): added "used_chunks" element.
	(RESERVED_PRIVATE_CHUNKS, RESERVED_PRIVATE_BLOCKS)
	(MAXIMUM_VALID_PRIVATE_REFERENCE): added definitions for checking for
	valid private reference, because USABLE_BLOCKS_PER_CHUNK doesn't
	divide evenly into the number of references between 0x10000000 and
	0xffffffff.
	(nwos_total_private_chunks, nwos_used_private_chunks)
	(nwos_allocate_new_chunk): added external references.
	

2007-06-25  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_22.3

	* objectify.h (RELEASE_VERSION): change to Alpha_22.3.

	* prep_disk.c (convert_size): fixed bug where it didn't return the
	SIZE_ERROR value even if there was a size error, so prep_disk would
	continue instead of exiting.

	* prep_disk.c (main): moved call to agree_no_warranty after the
	checking of parameters, so that the user doesn't have to agree, only
	to find out that there was an error in the parameters.

	
2007-06-24  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_22.2

	* objectify.c (_LARGEFILE64_SOURCE, disk_header, public_file_desc)
	(obj_file_desc, nwos_block_offset_to_chunks, nwos_total_private_blocks)
	(nwos_used_public_blocks, nwos_used_private_blocks, read_only)
	(modified, public_path, storage_index, storage_count, storage_path)
	(special_update_total_blocks_for_expand_0021, nwos_private_space_used)
	(BIT_MAP_CACHE_SIZE, Bit_Map_Cache_Entry, bit_map_cache, bit_map_tick)
	(INDEX_ALLOC_SIZE, index_compressed_file, nwos_hash_uint32_ref)
	(nwos_hash_ref, ref_to_offset, write_bit_map, read_bit_map_into_cache)
	(find_bit_map_in_cache, nwos_set_bit_in_map, nwos_clear_bit_in_map)
	(nwos_test_bit_in_map, nwos_flush_bit_maps, bits_in_byte, chunk_usage)
	(nwos_block_used, nwos_generate_new_closely_spaced_id)
	(nwos_generate_new_1_in_N_id, read_block, nwos_write_block)
	(nwos_remove_object): moved from objectify.c file.
	(USABLE_BLOCKS_PER_CHUNK): moved to objectify_private.h file.
	(storage_path): rename to nwos_private_path.
	(public_path): rename to nwos_public_path.
	(read_block): rename to nwos_read_block.
	(renamed generate_new_completely_random_id): rename to
	private_generate_new_completely_random_id.
	(nwos_initialize_objectify): moved disk io related code to new
	nwos_initialize_disk_io function.
	(nwos_terminate_objectify): moved disk io related code to new
	nwos_terminate_disk_io function.
	* disk_io.c (_LARGEFILE64_SOURCE, disk_header, public_file_desc)
	(obj_file_desc, nwos_block_offset_to_chunks, nwos_total_private_blocks)
	(nwos_used_public_blocks, nwos_used_private_blocks, read_only)
	(modified, public_path, storage_index, storage_count, storage_path)
	(special_update_total_blocks_for_expand_0021, nwos_private_space_used)
	(BIT_MAP_CACHE_SIZE, Bit_Map_Cache_Entry, bit_map_cache, bit_map_tick)
	(INDEX_ALLOC_SIZE, index_compressed_file, nwos_hash_uint32_ref)
	(nwos_hash_ref, ref_to_offset, write_bit_map, read_bit_map_into_cache)
	(find_bit_map_in_cache, nwos_set_bit_in_map, nwos_clear_bit_in_map)
	(nwos_test_bit_in_map, nwos_flush_bit_maps, bits_in_byte, chunk_usage)
	(nwos_block_used, nwos_generate_new_closely_spaced_id)
	(nwos_generate_new_1_in_N_id, read_block, nwos_write_block)
	(nwos_remove_object): moved from objectify.c file.
	(USABLE_BLOCKS_PER_CHUNK): moved to objectify_private.h file.
	(storage_path): rename to nwos_private_path.
	(public_path): rename to nwos_public_path.
	(obj_file_desc): rename to private_file_desc
	(read_block): rename to nwos_read_block.
	(public_path): rename to nwos_public_path
	(nwos_initialize_disk_io): new function make with code from
	nwos_initialize_objectify.
	(nwos_terminate_disk_io): new function make with code from
	nwos_terminate_objectify.
	objectify_private.h (USABLE_BLOCKS_PER_CHUNK): moved from objectify.c.
	(nwos_public_path, nwos_private_path, nwos_initialize_disk_io)
	(nwos_terminate_disk_io, nwos_read_block)
	(nwos_generate_new_closely_spaced_id, nwos_generate_new_1_in_N_id)
	(private_generate_new_completely_random_id): added external references.
	* Makefile (OBJS): added disk_io.o.
	(export_c_structs): added disk_io.c.

	* objectify.c (block_spacing, block_direction, cache, hash_ref_0014)
	(nwos_generate_new_public_id, is_compatible_version, create_object)
	(nwos_set_sequential_blocks, nwos_generate_new_id_in_range): removed,
	unused, #if 0'd out.
	(check_common_header): removed body of function it was #if 0'd out.
	
	* objectify.c (end_of_time): removed, unused.


2007-06-23  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>

	* Version Alpha_22.1

	* Makefile (uninstall): new rule to remove executables

	* objectify.c (nwos_terminate_objectify): added code to close
	public objects file.

	* prep_disc.c (set_public_root_object): removed 
	#ifndef DONT_COPY_PUBLIC_BLOCKS around this function.
	(main): removed #ifndef DONT_COPY_PUBLIC_BLOCKS
	around code to create private objects, no longer necessary.

	* CHANGE_LOG: renamed to ChangeLog

2007-06-22  J. Scott Edwards  <j.scott.edwards.nwos@gmail.com>
	
	* diff_compressed.c (main): Added special code to convert 0021 file
	to 0022 file.

	* objectify.c (nwos_next_public_ref): uncomment, it is needed when 
	compiled in PUBLIC_MODE.
	(nwos_terminate_objectify): Fixed log of public size.


---------   Everything below here is from the old CHANGE_LOG file: ------------

Alpha_05  2006-01-04

Makefile:

  Removed the create_person and create_phone apps, and created a new app called
  "computer" that is the human interface.


address.c:

  Added the "Direction" class.  Not used yet.


big_bang.c:

  Moved the "create_class_definition" routine out of "big_bang.c" and into a 
  new file "class_definitions.c".  And moved the calls to create various 
  classes such as the person, date, phone, us state, and word classes into 
  those respective files.

  Added code to check for existing objects that are the old version (0004)
  from Alpha_04 and offer to upgrade them to the new version (0005).
  NOTE: it only changes those objects that need to be changed, all other
  objects are left at version 0004.


computer.c:

  New app created out of create_person.c, create_phone.c and find_phone.c 
  apps.


create_person.c, create_phone.c, find_phone.c:

  These apps were all replaced by the "computer" app.


date.c: 

  Removed the count from the month object because it was always two anyway and 
  served no real purpose.

  Added year, month, and date to string functions.

  Added upgrade routine to upgrade 0004 objects to 0005 objects.


name.c: 

  Fixed two bugs in the finding of names.  The first was it set current_top 
  outside of the compare lists loop, so it didn't get reset back to zero when 
  we started over on list [0].  The second was that when it recomputed the 
  num_spellings after compare lists it indexed the reference list with the 
  "word" index instead of [0] which it was computing.

  Fixed bug in matching name object number of words.  It was not correctly
  comparing the number of words, so it would match one with the wrong number
  of words.  For example when searching for "Los Angeles" it would match up
  with "East Los Angeles".

  Changed to allow abbreviations (such as St. for Saint) in names.

  Added debugging printf statements and added asserts.

  Fixed bug where it would try to verify an object against the input 
  parameter when it didn't find an object.

  Added code to make first letter of each word upper case, because now all
  spellings are stored in lower case.


objectify.c:

  Added "is compatible version" routine to determine if a particular version
  of an object is still compatible with the current version.

  Added "is quit command" and "ask yes or no" routines.

  Fixed "ask yes or no" routine so that it works correctly.


objectify.h:

  Removed count from month object.  Since it was always 2, why have it?

  Added external declarations for various routines.

  Added GENDER and US CITY classes.  Added gender variable to person class.

  Changed find_word declaration so that the thing parameter is now a thing
  class parameter.

  Added RESIDENCE, HOUSE, DIRECTION, US ADDRESS, ZIP CODE, STREET NUMBER,
  and STREET classes, which are not used yet in this version. 


person.c:

  Created from create_person.c.


phone.c:

  Moved class creation of phone related classes here from big_bang.c.

  Added phone number creation stuff in part taken from "create_phone.c",
  which has been removed.

  Tweaked the printing of blank lines to make it look better.

  Added "parse phone number" and "parse phone number wo area code" routines
  to deal with phone numbers.

  Reworked the section that deals with problems with phone numbers.

  Added "find phone for person" routine, that finds the phone number for
  a particular person.


spelling.c:

  Changed so that characters are always stored as lower case.

  Added routine to upgrade Alpha_04 objects (0004) to Alpha_05 (0005)
  objects (which consists of changing all the characters to lower case.


us_state.c:

  Moved class creation out of "big_bang.c" and into a new routine here.

  Moved remaining state information (capital city and slogan) from states.txt
  file and into state_info structure.

  Added creation of the US City class.  Added "find state by name", "create
  us city", "add city", and "list cities in state" routines.

  Added routine to add a bunch of additional major cities (only Arkansas,
  Arizona, Alabama, Alaska, California, and a few onther misc. cities are 
  entered in this version).

  Added upgrade routine to upgrade state objects from 0004 to 0005 (which
  meant adding a capital city to each one).  Also called the routine to
  add the addtional cities.


word.c:

  Moved word related class creations out of "big bang" and into a new
  routine here.

  Changed find_word to look for a thing with a certain class instead of a
  certain thing.  I.E. to look for a "month" instead of "January".


