Sun, 23 Sep 2007 03:50:47 -0400 J Phelps <godless@users.sf.net>
	* SCsub: Added the line "env2.Append(CXXFLAGS = env2.detect.qt_flags);"
	to make the Qt-dependant Error.cpp compile.
Sat, 22 Sep 2007 03:03:44 -0400 J Phelps <godless@users.sf.net>
	* mdi_main_window.cpp: Updated APP_RELEASE_DATE_.

Sat, 22 Sep 2007 02:35:29 -0400 J Phelps <godless@users.sf.net>
	* tracker_voice.(cpp|h)(mix): Mutex is now only locked if the
	optional argument use_mutex is true.
	* mixer.(cpp|h)(eliminate_voice): Added optional argument
	"use_mutex", which defaults to "true", so that it is possible to
	call Tracker_Voice::mix() without having it lock its sample's
	mutex.	This will fix part of SF Bug Item #1777800 (Debian Bug
	#438853), the "Cut sample freezes the program" deadlock.
	* mixer_base.h: Added "use_mutex" argument to virtual function
	eliminate_voice().
	* player_rt_keyboard.(cpp|h)(sample_stop_all): New optional
	argument use_mutex, which gets passed down, eventually being
	received by Tracker_Voice::mix(). Default value is true.
	* sample_edit.cpp(destructive_operation_begin_cbk): The call
	to rt_keyboard->sample_stop_all() is now made with the argument
	"NO_MUTEX", which prevents this function from locking the playing
	sample's mutex, which in this special case is already locked.

Fri, 21 Sep 2007 03:42:37 -0400 J Phelps <godless@users.sf.net>
	 * sample_editor_effects(effect_apply_cbk): Fixed an off-by-one bug.

Fri, 21 Sep 2007 03:21:00 -0400 J Phelps <godless@users.sf.net>
	* simple_edit_effects.cpp: Fixed a bug where memcpy was passed
	the wrong size.  This is likely to be the cause of one of the
	elements of SourceForge Bug Item #1777800, AKA Debian Bug #438853
	(reverse doesn't work).

Tue Aug 21 02:54:38 EDT 2007 J Phelps <godless@users.sf.net>
	* interface_binds/editor.cpp (get_visible_columns): Line 160:
	fixed a divide-by-zero bug that is discovered by shrinking the
	window to a very small size.
Mon Aug 13 17:22:24 EDT 2007 J Phelps <godless@users.sf.net>
	* loader_ct.cpp: Incremented FILE_FORMAT_MINOR so that
	older versions of CheeseTracker will issue a warning when
	reading files created with newer versions. Stereo samples
	are unreadable to old versions of CheeseTracker.
Sat Aug 11 14:17:05 EDT 2007 J Phelps <godless@users.sf.net>
	* editor.cpp(get_note_from_key): Removed extra temporary
	variable.
	* editor_note_insertion.cpp(insert_note_at_cursor): Added
	toupper to argument passed to get_note_increment().
	* interface.cpp(eventFilter,keyPressEvent,keyReleaseEvent),
	* sample_player_fdialog.cpp(eventFilter),
	* editor_note_insertion.cpp,
	* pattern_edit__keys.cpp(event),
	* sample_instrument_table.cpp(event): Removed
	the tests that prevented keypresses outside of the range [0-9A-Z]
	from being usable as musical-keyboard keys, to fix Bug Tracker
	item #1771371.
	* editor_commands.cpp(get_note_increment): Removed conversion
	to uppercase, as this is handled upstream.
Wed Aug 8 16:23:28 EDT 2007 J Phelps <godless@users.sf.net>
	* sample_player_fdialog.(h|cpp): Added a checkbox titled
	"Audition samples", checked by default. When activated, the
	load-sample dialog behaves as always, allowing samples to be
	auditioned with the virtual musical keyboard. When disabled,
	samples are not loaded for auditioning and the musical keyboard
	keybindings are disabled.

	Currently, the positioning of the checkbox is very suboptimal.
Tue Aug 7 21:06:13 EDT 2007 J Phelps <godless@users.sf.net>
	* sample_data_fixedpoint.h (fixedpoint_loop): Fixed
	a divide-by-zero bug.
Tue Aug 7 19:19:28 EDT 2007 J Phelps <godless@users.sf.net>
	* sound_driver_oss.cpp(finish): Throw an exception if
	close() returns -1. Also usleep() for 1/4 second to
	eliminate the "Device or resource busy" error that
	happens if the close() is immediately followed by an
	open().
	* sound_drive_manager.cpp: Added a try..catch around
	one of the calls to Sound_Driver::init(), but more
	uncaught calls remain.
Tue Aug 7 15:11:07 EDT 2007 J Phelps <godless@users.sf.net>
	* pattern.cpp (set_length): Added a new iterator J. This
	function had a habit of calling map::erase() on a map
	element pointed to by the iterator I. Following this,
	it would increment I. erase() invalidates I, but it has
	gone unnoticed because I++ was still able to access the
	deallocated memory. But, when this is done with
	_GLIBCXX_DEBUG defined, the program aborts().

	Now, the new iterator J becomes a copy of I, then I
	is incremented, and then J is erased. 

	Because I is incremented in the middle of the for-loop,
	the end condition had to be moved into the loop, as well.

	An additional test is placed above the loop to handle
	the case in which column[i].begin() == column[i].end(),
	which would cause I to be "past-the-end" prior to the
	incrementation.
	* pattern.cpp (process_retrieve_request): Cast the
	signed int p_column to size_t to prevent a warning.
	* pattern.cpp: Changed the indentation style.
	* editor_selection.cpp(mark_column_sixteen): Added
	call to normalize_selection() and set selection_begin_y,
	which was previously neglected.

	* mdi_main_window.cpp: Updated the APP_VERSION_ string
	to 0.9.15.1 and updated the release date.
	* version_history.text: Updated.
Tue Aug 7 04:34:46 EDT 2007 J Phelps <godless@users.sf.net>
	* pattern_edit__keys.cpp(event): Added keybinding for
	Alt+D (select block of 16).
	* editor_selection.cpp,editor.h: Added new function,
	mark_block_sixteen(), to support the new key command.

	Added new Editor::Pattern_Actions enum Pattern_MARK_BLOCK_SIXTEEN.
	* editor_commands.cpp(perform_action): Added block to handle the
	Pattern_MARK_BLOCK_SIXTEEN menu action.
	* mdi_main_window.cpp(MDI_Main_Window()): Added menu item
	"Mark- Sixteen notes".
Tue Aug 7 04:06:48 EDT 2007 J Phelps <godless@users.sf.net>
	* simple_edit_effects.(cpp|h), edit_effect.h: Altered the
	indentation style. Changed all p_begin and p_end arguments to
	type ptrdiff_t to get rid of "comparison between signed and
	unsigned" warnings, which I have found to be a source of
	bugs.
	
	Edit_Effect_PreLoop_Cut::process: The loop pointers are
	adjusted before the truncate(), because otherwise,
	truncate() does some adjustments of its own which
	cause the loop to end up having Start:End positions
	0:1.
Mon Aug 6 22:54:33 EDT 2007 J Phelps <godless@users.sf.net>
	* interface.cpp(eventFilter): Imposed my intentation style on
	the entire file. Also fixed another old bug: eventFilter()
	didn't properly handle keyPressEvents for the live keyboard.
	As a result, the real-time keyboard sometimes got triggered
	twice, which Linietsky worked around by adding a filter
	in Player_Realtime_Keyboard::instrument_press_key()

	eventFilter now handles those keyPressEvents properly, and
	the filter code in (instrument|sample)_press_key has been
	removed.
	
Mon Aug 6 21:28:16 EDT 2007 J Phelps <godless@users.sf.net>
	* sample_data_fixedpoint.h(fixedpoint_loop): More
	minor math adjustments.
	* trackercore/player_rt_keyboard.cpp: Some functions
	here are copied in the identically-named
	interface_binds/player_rt_keyboard.cpp. A bug was fixed
	in the latter copy which remained in the former. Both
	copies are fixed now.

	The two copies are subly different, and therefore can't
	be merged until I better understand them.
Mon Aug 6 19:42:31 EDT 2007 J Phelps <godless@users.sf.net>
	* interface_binds/tracker_instance.cpp: Libaudiofile
	is registered first, because CheeseTracker calls each
	loader in succession to open a file, and the larger
	samples are likely to be the ones that are recognized
	by Libaudiofile. Loading them with libaudiofile first
	will therefore result in shorter load times.
Mon Aug 6 19:32:14 EDT 2007 J Phelps <godless@users.sf.net>
	* interface_binds/tracker_instance.cpp: #ifdef'd around
	references to Loader_WAV so that the program will compile
	when libaudiofile is present.
Mon Aug 6 17:59:32 EDT 2007 J Phelps <godless@users.sf.net>
	* cheesetracker/loaders/SCsub: Our own WAV loader is no longer
	compiled if libaudiofile and its superior WAV loader is
	available.
Mon Aug 6 15:26:42 EDT 2007 J Phelps <godless@users.sf.net>
	* sample_data.cpp(eof_reached): In certain cases, eof_reached()
	returned an incorrect value. Fixed.
	* player_data_control.cpp(lock_player_variables): Added __FILE__
	and __LINE__ parameters and corrected usage throughout the
	program.
	* sample_edit.cpp(load_sample): Added a try..catch to ensure
	that a mutex gets unlocked here.
	* loader_ct.cpp(load_sample): Now returns SUCCESS instead of
	FILE_ERROR.

	Now uses the basename of the sample for the name.
	* tracker_voice.cpp(add_to_mix_buffer): Now updates the variable
	that determines if the sample is playing backward.
	* sample_data_fixedpoint.h(fixedpoint_loop): Local loop-position
	variables converted from unsigned size_t to signed ptrdiff_t,
	because comparisons against the signed current_pos were treating
	the latter as an unsigned int. Also, a small adjustment to the
	math has been made.
	
Mon Aug 6 08:08:25 EDT 2007 J Phelps <godless@users.sf.net>
	* sample_data_fixedpoint.h(fixedpoint_loop): Attempted to Fix a bug,
	but failed: In pingpong loops, the cursor is placed far into the
	negative when it reaches the end of the sample in the positive
	direction. This results in an Out_Of_Bounds error. 

	Now, instead, an Out_Of_Bounds error can be made to occur
	with current_pos == -1, without the assert() meant to
	catch this condition being triggered.

	Removed obsolete comments and variables from this function.
	* loader_libaudiofile.cpp(load_sample_func): Fixed a bug:
	The call to SD->put_sample() was inside the channel loop
	instead of outside it, resulting in the sample getting
	size*channels frames stored in it.
	* sample_data.h,sample_data.cpp(seek): Changed parameter and
	return type from size_t to ptrdiff_t, to allow restoration
	of negative values from add_to_mix_buffer().
	* tracker_voice.cpp(add_to_mix_buffer): No longer turns off
	fixedpoint_mode() in the sample before using seek(). This
	allows seek() to enable seeks to negative locations for
	add_to_mix_buffer() but not for other functions.
Mon Aug 6 07:50:14 EDT 2007 J Phelps <godless@users.sf.net>
	* loader_libaudiofile.cpp(load_sample_func): Implemented the
	function.
	* tracker_instance.h,tracker_instance.cpp: Added the code to
	register the libaudiofile loader with the format manager.
	* mdi_main_window.cpp: Changed version string to 0.9.15 and
	updated release date.
	* version-history.text: Updated.
Sun Aug 5 19:21:02 EDT 2007 J Phelps <godless@users.sf.net>
	* loader_libaudiofile.cpp, loader_libaudiofile.h:
	New loaders added. Currently empty.
	* : SCons scripts adjusted to detect libaudiofile
	<default GCC search path only> and to compile the
	libaudiofile loader only if libaudiofile is found.
Sun Aug 5 18:09:37 EDT 2007 J Phelps <godless@users.sf.net>
	* file_format_manager.h, Error.h: Moved definitions of
	File_Error and File_Corrupt from the former to the latter.
	* file_format_manager.cpp: #included Error.h to allow
	code in this file to catch the File_Corrupt and File_Error
	exceptions.
	* Error.h: Fixed a bug in the THROWF macro: The exception
	was declared, set up, but not actually thrown!
Sun Aug 5 17:47:10 EDT 2007 J Phelps <godless@users.sf.net>
	* Error.h: New macro THROWF makes it easier to throw
	Error exceptions with eprintf'd error messages. It
	uses the GNU implementation of variadic macros rather
	than C99 variadic macros.
	* file_format_manager.h: New Error exception types File_Error
	and File_Corrupt.
	* file_reader.h: Added a new method get_filename(), which
	returns the internally-held filename string for use in error
	messages.
	* loader_wav.cpp: Throws an exception if an error occurs,
	to prevent an infinite loop.

Sun Aug 5 05:37:54 EDT 2007 J Phelps <godless@users.sf.net>
	* editor_selection.cpp: Changed the '<' operators in
	for-loops in this file back to <=, which they were
	previously, to correct a bug with selections in the
	Pattern Editor.

Sat Aug 4 21:01:54 EDT 2007 J Phelps <godless@users.sf.net>
	* player_rt_keyboard.cpp
	(find_empty_channel,find_note_in_channel,instrument_stop_all):
	Reversed the order of "for" loops here, so that notes played
	with the "live" keyboard occupy the last channels, instead of
	the first. This way, the live keyboard does not get trampled on
	by the notes in a song, therefore making it possible to play
	the live keyboard alongside a song.

Sat Aug 4 19:37:45 EDT 2007 J Phelps <godless@users.sf.net>
	* tracker_voice.cpp(add_to_mix_buffer): Changed
	"info.lvolsel=vol" to "info.lvolsel=vol/2.0". I don't
	remember why this was changed, and it caused a bug. The
	change happened before I started keeping this ChangeLog,
	and before I started using SVN.

Sat Aug 4 18:51:28 EDT 2007 J Phelps <godless@users.sf.net>
	* sample_data.cpp(get_sample_for_cosine_mixer,
	do_cubic_mixer_voodoo, get_sample_for_linear_mixer):
	Reintroduced blank-sample generation when these are called
	with Sample_Data::eof_reached() == true. Necessary now that
	fixedpoint_move_cursor no longer ensures that the cursor will
	stay within bounds.

	* sample_data.cpp(blank_sample): Changed "zero" from being a
	template argument to a function argument, because GCC 4.1.2
	can't compile this template if TYPE==float.
	
Sat Aug 4 18:26:52 EDT 2007 J Phelps <godless@users.sf.net>
	* tracker_voice.cpp(add_to_mix_buffer): Samples no longer
	continue playing past the end.
Sat Aug 4 18:08:08 EDT 2007 J Phelps <godless@users.sf.net>
	* sample_data_fixedpoint.h(fixedpoint_move_cursor): Removed
	bounds checking, as this is handled in fixedpoint_loop.
Sat Aug 4 15:21:40 EDT 2007 J Phelps <godless@users.sf.net>
	* resample_kernel.cpp (mix_sample): Fixed a math bug that caused
	pitch envelopes to sound like shit if they were used as filters.
Fri Aug 3 04:54:44 EDT 2007 J Phelps <godless@users.sf.net>
	* dds_helpers.cpp (get_sample_data,set_sample_data):
	Added support for multi-channel samples, at last!!!!
Fri Aug 3 02:44:54 EDT 2007 J Phelps <godless@users.sf.net>
	* sample_data.h
	  sample_data.cpp (get_current_pos): Changed return type
	from size_t to ptrdiff_t.
	* tracker_voice.h: Changed type of Tracker_Voice::current_index
	from size_t to ptrdiff_t.
Fri Aug 3 01:54:44 EDT 2007 J Phelps <godless@users.sf.net>
	* sample_viewer.cpp (paintEvent): Fixed fencepost bug
	that was causing the GNU vector class's array bounds
	checking to trip.
	* mdi_main_window.cpp: Updated version and website strings.
Wed Aug 1 02:02:12 EDT 2007 J Phelps <godless@users.sf.net>
	* sample_data_fixedpoint.h (fixedpoint_loop): Copied in
	the version of fixedpoint_loop() from Revision 57.
	* sample_data.h: Changed type of current_pos from size_t
	to ptrdiff_t.
	* sample_data_fixedpoint.h (fixedpoint_loop): Restored the
	"sustaining" argument.
	* tracker_voice.cpp (add_to_mix_buffer): fixedpoint_loop() is
	called with "false" as the argument, until the code to load
	sustain loops from files is implemented.
Mon Jul 30 12:32:46 EDT 2007 J Phelps <godless@users.sf.net>
	* tracker_voice.cpp (add_to_mix_buffer): Added 1 to
	calculation of the number of "virtual samples", as in
	cheesetracker-0.9.9. This was thought to be an off-by-one
	bug, but it is now known that this is required for looping
	to work properly.
Mon Jul 30 03:37:11 EDT 2007 J Phelps <godless@users.sf.net>
	* sample_data.cpp (Copy constructor): Fixed a bug where
	copy-constructed Sample_Data structures don't allocate
	a new mutex, and therefore crash upon deletion.
Wed Jun 27 10:10:49 EDT 2007 J Phelps <godless@users.sf.net>
	* loader_raw.cpp
	* loader_wav.cpp
	* loader_it_samples.cpp
	* loader_s3m.cpp
	* saver_raw.cpp
	* saver_it.cpp
	* saver_wav.cpp
	* interface.cpp
	* pattern_edit__keys.cpp
	* player_data_events.cpp
	* pattern.cpp
	* player_data_control.cpp
	* tracker_voice.cpp
	* simple_edit_effects.cpp
	* mutex_queue.cpp
	* mutex_lock.cpp
	* mutex_lock.h
	* multireader_lock.cpp
	* sample_data.h
	* sample_data.cpp
	* dds_helpers.cpp
	* sound_driver_manager.cpp
	* sample_viewer.cpp
	* effect_chain_editor.cpp
	* sample_editor_clipboard.cpp
	* mixer_effects_manager.cpp
	* envelope_point_editor.cpp
	* mutex_lock_pthreads.h: Added __FILE__ and __LINE__ arguments
	for all mutex-related types except the multireader lock (which
	is not currently in use). This allows deadlocks to be traced to
	the source file and line where the mutex was obtained.

Mon Jun 25 14:01:30 EDT 2007 J Phelps <godless@users.sf.net>
	* voice.control.h(UsedSample): Changed type of
	Voice_Control::UsedSample::offset to size_t.
	* channel_control.h: Changed type of
	Channel_Control::sample_start_index from Sint32 to size_t.
	* player_data_notes.cpp(process_new_note): Changed
	assignment of (now unsigned) sample_start_index from -1
	to 0.
	* tracker_voice.h: Added new member fixedpoint_offset to
	struct Tracker_Voice::Info.
	* sample_data.h/sample_data_fixedpoint.h: Added new member
	functions get_fixedpoint_offset and set_fixedpoint_offset.
	* tracker_voice.cpp(add_to_mix_buffer): fixedpoint_offset
	from the sample is now preserved across calls to
	add_to_mix_buffer.
Mon Jun 25 06:37:25 EDT 2007 J Phelps <godless@users.sf.net>
	* editor_selection.cpp
	* sample_editor_effects.cpp
	* simple_edit_effects.cpp: Fixed off-by-one for-loop bugs.
	* message_box.h: Added new macro GENERIC_TRY_CATCH to avoid
	reimplementing try-catch blocks in Qt-called functions.

Sun Jun 24 17:51:49 EDT 2007 J Phelps <godless@users.sf.net>
	* tracker_voice.cpp(add_to_mix_buffer): Added use of the GMP
	library. It turns out that even the small amount of fixed-point
	math used here may cause an integer overflow. On 32-bit systems,
	it is possible to simply use 64-bit integers, so #ifdefs were put
	in to that effect. Systems with sizeof(size_t) == sizeof(Uint64)
	need GMP.

	* SConstruct, detect,py: Updated to detect the need for GMP.

Sun Jun 24 02:12:38 EDT 2007 J Phelps <godless@users.sf.net>
	* tracker_voice.cpp(add_to_mix_buffer)
	  sample_data_fixedpoint.h(fixedpoint_loop)
	  sample_data.h: Moved the code that does looping
	  from add_to_mix_buffer to fixedpoint_loop, a new
	  function.
	  
Sat Jun 23 22:38:25 EDT 2007 J Phelps <godless@users.sf.net>
	* resampler_linear.cpp
	  resampler_cosine.cpp
	  resampler_cubic.cpp
	  resampler_raw.cpp: Rewrote the resamplers. They now
	all use the code in resampler_kernel.cpp, which eliminates
	much of the code duplication.
Sat Jun 23 03:51:59 EDT 2007 J Phelps <godless@users.sf.net>
	* tracker_voice.h: Removed unused definition for
	Tracker_Voice::FRACTIONAL.
	* tracker_voice.cpp: Reintroduced SOME of the fixed-point math.

	Removed the variable "debug_int", which was being used to
	trace a memory error (which turned out to be caused by
	improper data sharing between threads).

	* typedefs.h: Macro WARN() does not use ANSI color sequences
	unless ANSI_COLORS is defined.
	* resampler_manager.cpp (get_resampler): Replaced NULL return
	value with an exception-throw, since the NULL return value is
	never checked for.

	New behavior: get_resampler(-1) is equivalent to
	get_resampler(get_default_resampler()), because this is how
	it's used.

	Added "signed" to the parameter type of p_index to show
	that it really _is_ supposed to be signed.
	* resampler_instance.h (set_current_resampler): Replaced use of
	ERROR macro with an exception-throw.
	* resampler_instance.h (mix): Simplified the initialization
	of resampler_idx because it is no longer necessary to call
	Resampler_Manager::get_default_resampler() explicitly.
	* fixedpoint.h: Renamed to sample_data_fixedpoint.h. Preprocessor
	macros will attempt to prevent its inclusion in source files
	other than sample_data.cpp.
	* fixedpoint_defs.h: Created. Macros previously in fixedpoint.h
	have been moved here. It turns out that certain calculations
	in tracker_voice.cpp cannot be made accurately without
	fixed-point math.
	* resampler_kernel.cpp/h: Created. This is a cleaner
	implementation of the algorithm previously implemented
	with macros from helpers.h.
Fri Jun 15 13:24:02 EDT 2007 J Phelps <godless@users.sf.net>
	* cheesetracker/loaders/loader_raw.cpp
	* cheesetracker/loaders/loader_wav.cpp
	* cheesetracker/loaders/loader_it_samples.cpp
	* cheesetracker/loaders/loader_s3m.cpp
	* cheesetracker/savers/saver_raw.cpp
	* cheesetracker/savers/saver_it.cpp
	* cheesetracker/savers/saver_wav.cpp
	* cheesetracker/trackercore/tracker_voice.cpp
	* common/plugins/edit_effects/simple_edit_effects.cpp
	* common/interface__QT/audio/sample_viewer.cpp
	* common/interface__QT/audio/sample_editor_clipboard.cpp
	* common/components/audio/sample_data.h
	* common/components/audio/sample_data.cpp
	* common/components/audio/dds_helpers.cpp:
		Now using Mutex_Lock instead of multireader_lock for
		access to Sample_Data. Since Sample_Data's access
		functions also manage an internal iterator (instead
		of the iterator being in the calling function),
		Sample_Data must be locked during "read" operations
		as well as "write" operations.

	* pattern.cpp (process_retrieve_request): Performance enhancement:
	Removed exception-throwing behavior because all functions that
	use this function were catching the exception and substututing
	"empty_note" for the return value. So now, it simply returns
	empty_note.

Wed Jun 13 01:10:50 EDT 2007 J Phelps <godless@users.sf.net>
	* sample_data.cpp: ASSERT_NOTFIXEDPOINT is defined to nothing
	if NDEBUG is defined.  * common/components/audio/fixedpoint.h:
	Created. The fixed-point functions from sample_data.h are
	defined here, and there are comments that explain how the whole
	fixed-point scheme works.

	Incidentally, another fixedpoint.h file was discovered,
	common/components/data/fixedpoint.h, which defines a fixed-point
	class for which there are no method definitions in the source.

Tue Jun 12 01:32:10 EDT 2007 J Phelps <godless@users.sf.net>
	* multireader_lock.h/cpp: Created. Any number of threads 
	can hold an multireader_lock, and any one process can lock
	all the others out. This allows many threads to read
	a memory region, and one thread to kick the others out
	for writing.

	* sample_data.h: Now uses a multireader_lock instead of
	a mutex.

Mon Jun 11 14:18:56 EDT 2007 J Phelps <godless@users.sf.net>
	* mutex_lock.h: New method on Mutex_Lock_Container: add().
	This makes it possible to put more than one mutex in the
	same Mutex_Lock_Container, all of which will be released
	together.

Mon Jun 11 10:16:54 EDT 2007 J Phelps <godless@users.sf.net>
	* mutex_lock.h: New class, Mutex_Lock_Container, which locks a
	mutex during construction and unlocks it upon destruction.

	* sample_data.h/cpp (lock): Now returns pointer to
	Mutex_Lock_Container.
	* sample_data.h/cpp (unlock): Removed.
	* sample_data.h/cpp (seek): Now returns the final seek position.

	* tracker_voice.cpp (mix): Using sample_data mutexes.

	* tracker_voice.cpp (add_to_mix_buffer): Renamed several
	cryptically-named variables, corrected an OB1 bug in the
	loop-checking logic.

	Removed the 300-page dissertation on fixed-point numbers.

	* sample_data.cpp (resample functions): Commented out the checks
	for sample EOF, as I attempt to make tracker_voice stay
	perfectly within the boundaries.

	* resampler_instance.h/cpp (set_fractional): Removed.

	* : Removed all variables and class members named
	"fractional_size".

Sun Jun 10 13:50:36 EDT 2007 J Phelps <godless@users.sf.net>
	* resampler_manager_new.cpp: Removed.

	* dds_helpers.cpp (get_effect_chain_data): Corrected "taking
	address of temporary" warning from G++ by creating new local
	variable "property_list".

	Also moved curly braces in function definitions to Column 1,
	so that ']]' works in vi.

Sun Jun 10 13:41:59 EDT 2007 J Phelps 
	* loader_xm.cpp (loader_instrument_internal): Moved the
	sample.data.seek(0) call down to the part that loads the sample
	data from the disk.

Sun Jun 10 06:55:15 EDT 2007 J Phelps <godless@users.sf.net>
	* sample_data.cpp (fixedpoint_move_cursor): Removed the for-loop
	that was previously placed around the whole function. This
	for-loop was intended for a different design that never got
	implemented. Instead, it caused a bug.
