1999-02-17  Michael Krause  <m.krause@tu-harburg.de>

	* Released v0.1.0

	* app/preferences.c: Added sliders adjusting the update frequency
	of the scopes and the pattern scrolling.
	* app/scope-group.c (scope_group_set_update_freq):
	* app/track-editor.c (tracker_set_update_freq): New functions

	* app/xm-player.c: * app/audio.c: * app/scope-group.c: Channels
	can be muted again by toggling its scope button.

	* app/module-info.c (modinfo_page_handle_keys): Added Linear/Amiga
	frequency choices, and ProTracker mode toggle. Besides that, you
	can play notes on the keyboard in the module info page now.

	* app/gui.c: Added Tempo and BPM sliders.

	* app/gui-subs.c (gui_subs_create_slider): Generic
	slider/spinbutton combination.

	* app/gui.c: Moved general GUI helper functions to gui-subs.c

	* app/xm-player.c (xmplayer_init_play_song): When starting playing
	at song position 0, reinitialize tempo and bpm.

	* app/audio.c (audio_play):
	(audio_ctlpipe_set_songpos): * app/gui.c (gui_update_player_pos):
	(read_mixer_pipe): Proper "set song position" synchronization.
	(read_mixer_pipe): gui_enable(1) when playing has stopped.
	(gui_enable): Handling some more widgets here.

1999-02-11  Michael Krause  <m.krause@tu-harburg.de>

	* app/gui.c (init_xm): Call tracker_set_num_channels().

	* app/tracker.c (tracker_set_num_channels): New
	function. tracker.c is independent of the global xm pointer now.

1999-02-06  Michael Krause  <m.krause@tu-harburg.de>

	* app/xm-player.c (xmplayer_final_channel_ops): Don't handle
	envelopes, vibrato and volfade in ProTracker mode.
	(PlayNote): Split function into two, one for PT and one for FT, to
	avoid excessive ismod checks.
	(xm_player_playnote_protracker): Remove unnecessary statements,
	dealing with keyoff, sustain and so on..

1999-02-05  Michael Krause  <m.krause@tu-harburg.de>

	* app/xm-player.c (PlayNote): Moved note initialization to
	xm_player_start_note().
	(xmpPlayTick): Moved glissando handling to
	xm_player_handle_glissando().
	(PlayNote): Moved frq initialization to xm_player_get_note_freq().
	(channel): Renamed ArpNotes to ArpOffsets.
	(xmpPlayTick): Arpeggios for ProTracker modules use curtick % 3 as
	arpeggio index.
	(xm_player_get_note_frq): For ProTracker modules we fetch the
	correct period value from the new table 'protracker_periods',
	which was taken from the original ProTracker replayer.
	(xmplayer_final_channel_ops): For ProTracker modules we calculate
	the frequency out of the period according to the Amiga
	Manuals. All these changes result in a perfect mod replay: long
	samples no longer get out of sync as they do in most
	(all?) other PC module players.
	(xmpPlayTick): E10 and E20 are no-ops in ProTracker (they don't
	take the last-used value and slide around).
	(freqrange): Fixed frequency range check for ProTracker modules.

1999-01-30  Michael Krause  <m.krause@tu-harburg.de>

	* app/envelope-box.c: Removed frame

1999-01-28  Michael Krause  <m.krause@tu-harburg.de>

	* app/instrument-editor.c: Added volfade and vibrato widgets

	* app/xm.c (xm_load_xm_instrument): vibtype sanity check

	* app/gui.c: Moved some GUI helper functions from preferences.c

1999-01-21  Michael Krause  <m.krause@tu-harburg.de>

	* Released v0.0.13

1999-01-20  Michael Krause  <m.krause@tu-harburg.de>

	* app/gui.c (gui_update_player_pos): Moved gdk_flush() call from
	the beginning of read_mixer_pipe() to the end of this function.

1999-01-16  Michael Krause  <m.krause@tu-harburg.de>

	* app/gui.c: Disabled clipping LED.

1999-01-15  Michael Krause  <m.krause@tu-harburg.de>

	* app/preferences.c: Preferences page for main window
	notebook. Playing parameters can be set independently for editing
	and playing mode. Added necessary extensions to the audio
	subsystem (driver->setprefs() function). We don't load & save the
	preferences yet.

	* app/scope-group.c, app/track-editor.c, app/audio.c (audio_time),
	app/gui.c (gui_audio_tick): Don't let audio subsystem issue ticks
	into the backpipe; use time stamps in public variables
	(audio_playerpos_*) instead.

	* app/gui.c (gui_update_player_pos): Return if set_songpos_count
	!= 0.

	* app/audio.c (audio_play): Using last_synctime_driver instead of
	player time as time stamp.

1999-01-14  Michael Krause  <m.krause@tu-harburg.de>

	* app/drivers/oss.c (oss_open): fragsize is returned as a byte
	count by OSS, but was used as a sample count in the code (this
	resulted in oss_poll_ready_playing() blocking at the write()
	call). Fixed. Playback should be smoother now.

1999-01-11  Michael Krause  <m.krause@tu-harburg.de>

	* app/track-editor.c (tracker_timeout):
	(tracker_start_updating):
	(tracker_stop_updating):
	(tracker_set_time): New functions, mostly c'n'p from
	scope-group.c.  Pattern and song position are updated independent
	of audio player ticks now; this should give smoother and more
	exact display updates when using large fragment sizes.

	* app/gui.c (gui_update_player_pos): This is not done from
	track-editor.c since some of the variables should belong to gui.c
	only.

	* app/audio.c (audio_play): Added ring buffer for player position.

1998-12-29  Michael Krause  <m.krause@tu-harburg.de>

	* app/xm-player.c (xmpPlayTick): Did the same change to the Fine
	VolSlide effects.

1998-12-26  Michael Krause  <m.krause@tu-harburg.de>

	* app/xm-player.c (xmpPlayTick): Bug fix: The A00 effect (VolSlide
	with argument 0) in ProTracker modules does nothing, in
	FastTracker modules it uses the previously used argument
	(mod.Stardust Memories by Jester).

1998-12-19  Michael Krause  <m.krause@tu-harburg.de>

	* app/xm.c (XM_Load): A failed header length checking doesn't
	prevent loading the rest of the module. SoundTracker versions
	earlier than 0.0.12 could save the wrong value in here and 0.0.12
	couldn't load those modules.

	* app/xm-player.c: Ported KB's OpenCP fixes from 981126. This
	mostly affects PlayNote(), vibrato and some strange envelope
	sustain handling fix.

1998-12-13  Michael Krause  <m.krause@tu-harburg.de>

	* Released v0.0.12

	* app/sample-display.c (sample_display_draw_main): Removed
	assertion check against s->width, which was frequently triggered
	when changing the number of channels. We're just returning
	immediately now.

	* app/gui.c (read_mixer_pipe): PLAYING_STOPPED case: enabling GUI
	and setting pattern position only if GUI was disabled.

1998-12-12  Michael Krause  <m.krause@tu-harburg.de>

	* app/module-info.c (modinfo_delete_unused_instruments): This
	function is triggered by the new button "Delete unused
	instruments" and deletes all unused instrument in the current XM.

	* app/st-subs.c (st_instrument_used_in_song): New function, finds
	out if an instrument is used in an XM.

	* app/gui.c (programlist_songpos_changed): Don't change editing
	pattern when browsing in the playlist.

	* app/gtkspinbutton.c (gtk_spin_button_insert_text),
	app/module-info.c: gtk+-1.1.7 compatibility fixes.

	* app/xm-player.c (xmplayer_play_note): Clear channel data before
	initializing new note.

	* app/sample-editor.c (sample_editor_update): Check current_sample
	against NULL and disable the editor if there's no sample.

	* app/xm.c (XM_Save): Saving amiga frequencies flag if set.

	* app/sample-editor.c: Sampling is working again. Enabled
	'Monitor' button.

1998-12-11  Michael Krause  <m.krause@tu-harburg.de>

	* app/drivers/oss.c (oss_open): Added sampling support.

	* app/audio.c (audio_lock, audio_unlock): Added locking
	primitives. (audio_sampled): Added basic support for sampling;
	limited to 16bit 44.1kHz mono sampling currently.

1998-12-10  Michael Krause  <m.krause@tu-harburg.de>

	* app/xm-player.c (xmplayer_final_channel_ops): If ismod is set,
	pan channels 0 and 3 to the left and channels 1 and 2 to the right
	(Amiga stereo support is very digital: left or right :D)

	* app/mixers/lqmono.c: Support stereo mixing.

	* app/audio.c (mixer_mix): Fixed stereo-to-mono conversion.

	* app/xm-player.c (xmplayer_final_channel_ops): ch->chFinalPitch
	== 0 is only wrong for Amiga frequencies.

	* app/gui.c (play_song, play_pattern): Moved GUI disabling calls
	to read_mixer_pipe(). (gui_enable): renamed from
	gui_enable_widgets_for_play_mode().

	* app/gui.h: New convenience macros (GUI_ENABLED, GUI_EDITING).
	Renamed playing to gui_playing_mode and exported enum's.

	* app/gui.c (read_mixer_pipe), app/track-editor.c, app/audio.c:
	Note playing and editing fixed.

1998-12-09  Michael Krause  <m.krause@tu-harburg.de>

	* app/scope-group.c (scope_group_create): Setting group spacing to
	0. Making buttons insensitive.

	* app/xm-player.c (xmplayer_final_channel_ops): Test
	ch->chFinalPitch against 0 before setting sample frequency.  Fixes
	crashes on a lot of modules.

	* app/xm.c (xm_save_xm_pattern): Empty patterns are saved with
	data length 0.

1998-12-08  Michael Krause  <m.krause@tu-harburg.de>

	* app/xm.c: Various bug fixes and note saving compression:
	(xm_save_xm_instrument): Always use 40 as sample header size.
	(xm_put_xm_note): xm_save_xm_note() renamed, renders into a buffer
	now instead of into a file. Added note compression.
	(xm_save_xm_pattern): Rewritten for xm_put_xm_note().
	(XM_Save): put_le_32(xh + 60, ...) instead of put_le_16(). XM's
	saved by ST can be loaded into MikIT and FastTracker now :)
	(XM_Load): get_le_32(xh + 60, ...) instead of get_le_16().

1998-12-03  Michael Krause  <m.krause@tu-harburg.de>

	* Released v0.0.11-fixes patch
	
	* app/audio.c: #include <sys/time.h> needed for glibc2.

	* app/module-info.c: Replaced GTK_HAVE_FEATURES_1_1_5 check by
	explicit check of gtk version.
	
1998-12-01  Michael Krause  <m.krause@tu-harburg.de>

	* Released v0.0.11
	
	* app/audio.c, app/gui.c: Clipping indicator working again.

	* app/audio.c (driver_sync): Pitchbend can now be changed while
	playing without crashing.

	* app/gui.c (gui_init): Added pitchbend slider.

	* app/gui.c (gui_adj_amplification_changed): Updated for the new
	audio.c.

	* app/audio.c, app/xm-player.c: Added keyboard note playing.
	Entered notes are played on the channel the cursor is positioned
	in, not in a hidden internal 33rd one as v0.0.10 and earlier did
	it.

1998-11-30  Michael Krause  <m.krause@tu-harburg.de>

	* app/scope-group.c (scope_group_timeout): Fixed the remaining
	bugs (rewritten).

	* app/sample-display.c (sample_display_set_data): These functions
	can copy the provided sample into their own buffer now.

1998-11-29  Michael Krause  <m.krause@tu-harburg.de>

	* app/scope-group.c, app/audio.c, app/mixer.h: I finally have
	working scopes again. The new code updates the scopes
	independently of the audio thread, so the scopes are updated
	frequently even if the audio fragment size is large.  There are
	still some bugs in here, and the code needs cleanup, but that
	doesn't matter at the moment.

	* app/sample-display.c (sample_display_new): Widget can be created
	without the loop and selection editing properties; it is basically
	the scope widget in that case.

	* Removed scope.c and scope.h; sample-display.c offers the same
	functionality.

1998-11-28  Michael Krause  <m.krause@tu-harburg.de>

	* app/xm-player.c, app/audio.c, app/drivers/oss.c: Updated to use
	the new polling scheme.

	* app/driver.h: Added general fd poll() functions for the driver
	modules.

1998-11-25  Michael Krause  <m.krause@tu-harburg.de>

	* Whoo. I see that my just recently updated Emacs has a new date
	style. And I always wondered who's interested in the exact day
	time in a ChangeLog :)

	* app/module-info.c (get_clist_in_scrolled_window): New function
	to accomodate to the new clist handling in gtk+-1.1.5

Mon Nov 23 16:59:20 1998  Michael Krause  <m.krause@tu-harburg.de>

	* app/drivers/oss.c (oss_open): Rewrote to use the new mixer
	interface.  Tries more playback formats now (unsigned and signed
	16 bits little endian / big endian as well as unsigned / signed 8
	bit formats) and can also play stereo (there's just the mixer
	which has to make use of this :D)

	* app/sample-display.c (sample_display_realize):
 	* app/scope.c (scope_realize):
	* app/tracker.c (tracker_realize): Removed gtk_style_detach()
	calls. They caused a crash on some people's machines and were
	useless anyway.

	* app/audio.c: Added sound format conversion layer between driver
	and mixer. Also added extra layer between XM player and the driver
	so we can handle things like pitchbending and balancing
	transparently. Pitchbending variable works perfectly.

Thu Nov 19 19:48:28 1998  Michael Krause  <m.krause@tu-harburg.de>

	* app/xm-player.c (xmpPlayTick): Added some last changes to make
 	amiga frequencies work.

	* app/xm.c (xm_load_mod): Set xm->flags to IS_MOD and AMIGA_FREQ.
	(XM_Load): Set xm->flags to AMIGA_FREQ if necessary.

	* app/xm.h: Add flags field

Wed Nov 18 17:44:23 1998  Michael Krause  <m.krause@tu-harburg.de>

	* app/poll.c: poll() emulation via select(). Cleans up the #ifdef
 	mess in some of the other files.

	* app/sample-editor.c: Sampling temporarily disabled until support
 	for that is in the driver module layer.

	* app/endian-conv.h: Using direct memory access on i386 machines.

	* app/xm.c (xm_save_xm_instrument): Save vibrato and volfade
 	settings

Sat Nov 14 17:33:15 1998  Michael Krause  <m.krause@tu-harburg.de>

	* app/xm.c (xm_load_xm_instrument): Loading vibrato and volfade
 	settings.

	* app/xm.h: New fields for vibrato settings and volume fadeout.

	* I've just finished a first working version of the new player
 	system. Also I've decided to replace my own XM player by the one
 	from OpenCP. The following is a rough description of the changes:

	* app/audio.c: This file contains the audio handler thread (it
 	will also handle sampling). It controls the driver and player
 	(Note that the player is not (yet) modularized) and the mechanism
 	for communicating with the main thread.

	* app/driver.h: Contains driver module definitions. The driver is
 	the primary interface which audio.c deals with. I've written it
 	with auto-sequencer devices like GUS and AWE in mind, but this
 	might still need some tuning, as I don't own such a card.

	* app/drivers/: Contains available driver modules. A driver module
 	supplies functions for playing and sampling data.

	* app/mixer.h: Mixer module definitions. Mixer functions are
 	usually only called by the driver module which needs the
 	mixer. The rest of SoundTracker doesn't care whether a mixer is
 	needed or not.

	* app/mixers/: The available mixer modules. lqmono.c contains the
 	mixer routines as found in 0.0.10.
	
	* app/xm-player.c: XM player routines. xmplayer_play() calls the
 	driver functions directly and returns when driver->sync()
 	blocks. Alright, this is the new OpenCP player.  It's supposed to
 	be the most FastTracker compatible player out there, despite of
 	the chaotic source code :) Had to rewrite all the envelope
 	handling and note / effect retrieval.

	* app/main.c (main): The former mixer communication pipe is
 	allocated here; also we currently initialize the audio thread with
 	the OSS driver and the lqmono mixer.
	
	* app/mixer.c: Is now obsolete.
	
Sat Nov  7 14:19:40 1998  Michael Krause  <m.krause@tu-harburg.de>

	* Starting to think about a modular audio driver and mixer system.

Sun Nov  1 12:37:39 1998  Michael Krause  <m.krause@tu-harburg.de>

	* Released v0.0.10

	* app/xm.c: Doing charset conversion in the XM loader and saver.

	* app/recode.c: New file; converts characters between IBM PC and
 	ISO Latin1 encodings (derived from the recode source code).

	* app/mixer.c (mixer_fill_buffer): Changed some loop calculations.
  	I'm not yet completely happy with this piece of code.
	
	* app/gui.c: Added amplification slider and clipping indicator.

	* app/xm.c (xm_load_mod): Initialize sample only if length > 0.
  	Check for correct loop parameters.

	* app/track-editor.c (vscrollbar_changed): Block patpos signal
 	handler before tracker_set_patpos().

Fri Oct 30 20:13:58 1998  Michael Krause  <m.krause@tu-harburg.de>

	* app/sample-editor.c: WAV loader and saver do endianness
 	conversion and handle 8 and 16 bit samples. Added relnote spin
 	button, resolution display and sample length display. Telling the
 	mixer to stop playing before doing destructive sample operations.
	(sample_editor_ok_clicked): Initialize sample type.

Thu Oct 29 18:30:29 1998  Michael Krause  <m.krause@tu-harburg.de>

	* app/mixer.c (mixer_fill_buffer): Added amplification and signal
 	clipping.

	* app/xm.c (xm_load_mod): Initialize s->panning to 128.

	* app/mixer.c (mixer_fill_buffer): Added support for 8 bit
 	samples.

	* app/xm.c: Added support for 8 bit samples in XM loader/saver and
 	MOD loader.

	* app/sample-display.c (sample_display_draw_data): Added support
 	for 8 bit sample data.

	* app/xm.h (struct STSample): renamed 'type' to 'loop' and added
 	new field 'type' which indicates 16 or 8 bit sample.

	* app/sample-display.c (handle_motion): Bug fixed: end points
 	could be equal to the starting points.

Wed Oct 28 15:11:43 1998  Michael Krause  <m.krause@tu-harburg.de>

	* app/sample-editor.c: Added some assertions to make sure that the
 	loop and selection ends are always to the right of the start
 	points.

	* app/sample-display.c: Made the whole source a lot more readable
 	and fixed a good number of bugs. Thanks to Darin Ohashi for
 	finding one of them.

	* configure.in: Check for select() only if poll() is not found.

	* app/gtkspinbutton.c (gtk_spin_button_configure): Fixed some
	compatibility #ifdef's and compiler warnings.

	* app/mixer.c: Use poll() instead of select() when available.

	* gui.c, sample-editor.c, configure.in: Doesn't fail when poll()
 	is not available -- falling back to select().

Mon Oct 26 11:51:14 1998  Michael Krause  <m.krause@tu-harburg.de>

	* app/xm.c: Cleaned up and made all routines endianness- and
 	typesize-safe.

	* app/st-subs.c: New file; moved some of the more general
 	functions from xm.c to this place.

	* configure.in (CFLAGS): Added -Wall. And I always wondered why I
 	got so few compiler warnings in the last few days :)

	* app/xm.h: Got rid of the num_patterns and num_instruments
 	fields. These were only relevant to xm.c anyway.

Sun Oct 25 18:18:05 1998  Michael Krause  <m.krause@tu-harburg.de>

	* app/mixer.c (player_tick): Instrument without note retriggers
 	volume and envelope now.

	* Released v0.0.9

	* TODO: Added a lot of things.

	* README: Added a list of keyboard mappings.

	* app/mixer.c (player_tick): Added ea* and eb* effects.

	* app/xm.c (MOD_Load): Hacked together a ProTracker module
 	loader. The finetune conversion is not really okay I think.

	* app/endian-conv.h (get_be_16): Added.

	* app/tracker.c (tracker_draw): only draw when widget is visible.

	* app/gui.c (read_mixer_pipe): case STOPPED: tracker_set_pos().
	(play_song): change_current_pattern().

	* app/mixer.c (stop_playing): Set player_songpos and
 	player_patpos.

Wed Oct 21 20:02:24 1998  Michael Krause  <m.krause@tu-harburg.de>

	* app/gtkspinbutton.c: Hacked in some #if's to make it compile
 	with gtk+ 1.0.x.

Sun Oct 18 12:40:01 1998  Michael Krause  <m.krause@tu-harburg.de>

	* app/xm.c (XM_load_pattern): Do endianness conversion (whoops,
 	forgot that yesterday :D) and clear allocated channels.
	(XM_load_note): optimized.

Sat Oct 17 14:43:35 1998  Michael Krause  <m.krause@tu-harburg.de>

	* Released v0.0.8

	* app/mixer.c (mixer_main): PLAY_NOTE: reset globalvolume and
 	smplcount only if we aren't playing the module.

	* app/sample-editor.c: Added "Clear", "Show All", "Zoom in" and
 	"Zoom out" operations.
	(remove_clicked): fix loop positions after cutting.

	* app/sample-display.c: Unified semantics of the loop, selection
 	and window end: The loop, selection and window end offsets point
 	to the first sample that is not to be played in the loop / that is
 	not victim of a forthcoming sample operation / that is not to be
 	displayed.

	* app/xm.h: Replaced STSample.looplen by loopend and changed the
 	rest of the source code accordingly.

	* app/mixer.c (init_note_freq): Don't reset sample when
 	initializing 3xx effect.

	* app/sample-editor.c (load_wav, save_wav): Do endianness
 	conversion.

	* app/endian-conv.h: Moved the endianness routines from xm.c to
 	this place.

	* configure.in: Remove checks for 'const' and 'inline'. We only
 	compile on gcc anyway.

	* app/xm.c (byteswap_le_16_array): Actually implemented this
 	routine. Untested.
	(XM_Load): Amiga frequencies are ignored but loading continues.
  	Do endianness conversion.
 	(XM_save_samples): Clear sh[] before working.
 	(XM_load_instrument): Issueing a warning if vibrato or volume
 	fadeout are used. Do endianness conversion.

	* app/sample-editor.c: Displaying selection data; reset button
 	added.

Fri Oct 16 14:46:44 1998  Michael Krause  <m.krause@tu-harburg.de>

	* app/sample-display.c (handle_motion): Almost rewritten. Should
 	be working as expected now.

	* app/sample-editor.c (sample_editor_display_loop_changed):
 	Handling the 'loop_change' signal.

	* app/sample-display.c: The loop points can be set with
 	SHIFT-button1/3. Added signals 'selection_changed' and
 	'loop_changed'.

	* app/sample-editor.c: Added loop type/start/end controls.

	* app/gtkspinbutton.c: Modified version of the original GTK+
 	spinbutton widget which adjusts its width so that the number is
 	always displayed completely.

	* app/xm.c (XM_load_samples): Initialize loopstart/-end if the
 	loop flag is off.
	(st_clean_sample): Initialize looplen to 1.

	* app/gui.c (gui_put_labelled_spin_button,
 	gui_update_spin_adjustment): made non-static.

	* app/sample-editor.c (sample_editor_update): After sampling into
 	an empty sample slot, all the editing widgets are enabled now.

Wed Oct 13 12:00:00 1998  Michael Krause  <m.krause@tu-harburg.de>

	* app/sample-display.c: Started to restructure this thing so that
 	the drawing speed is optimized. Still a bit buggy.

Mon Oct 12 12:36:37 1998  Michael Krause  <m.krause@tu-harburg.de>

	* app/xm.c (XM_Save): Save real module name instead of
 	"<untitled>".

	* app/module-info.c: Added "Module Info" page to the main window
 	notebook, containing a list of all the instruments and samples and
 	the song name.

	* app/xm.c (XM_new_pattern): Initialize p->alloc_length. Stupid
 	bug.

	* app/sample-editor.c (ok_clicked, load_wav): exchange calls to
 	st_clean_sample() and st_clean_instrument(); add extra call to
 	st_clean_sample() to set sample name.
	(sample_editor_update): Set sample name text entry to new value.

	* app/gui.c (offset_current_sample, handle_standard_keys): Added
 	ctrl-GDK_Up and ctrl-GDK_Down for sample switching.

	* app/track-editor.c (tracker_page_handle_keys): Check modifier keys
	in GDK_Up and GDK_Down.

	* app/gui.c (gui_init): Moved current_instrument_create() and
 	editing_status_create() into this function. Added sample selector.
	(gui_get_text_entry): new function, automatically installs the
 	keyboard capture handling on a newly created text entry.

Sat Oct 10 11:22:25 1998  Michael Krause  <m.krause@tu-harburg.de>

	* app/gui.c (read_mixer_pipe): Checking startstop_fifo against 0
 	before decrementing. Prevents a crash when the mixer stops playing
 	via the F00 command.

	* Released v0.0.7

	* Using autoconf/automake for configuration now. Moved all the
 	sources into the 'app' subdirectory.

	* mixer.c: Using explicit gint32's instead of int's in some fields
 	of struct channel.

	* gui.c (play_song), (play_pattern): Call play_stop() first.

	* mixer.c (player_tick): Don't handle more than xm->num_channels
 	channels.

	* gui.c, xm.c (st_set_num_channels): Number of channels is
 	adjustable now.

	* gui.c (init_xm): Call change_current_pattern() instead of
 	tracker_set_pattern(). New parameter 'new_xm'.

	* gui.c, xm.c (st_set_pattern_length): Pattern length can be
 	changed now.

	* mixer.c: Replaced all occurences of the word 'period' by
 	'pitch'.  A period is inversely proportional to the frequency; the
 	value called period in the XM docs is not. 'Pitch' isn't exactly
 	the right word either, but 'period' is worse because it has
 	another meaning in the Amiga context.

	* gui.c (handle_standard_keys): Added GDK_Multi_key as a synonym
	for GDK_Control_R.

Fri Oct  9 00:15:22 1998  Michael Krause  <m.krause@tu-harburg.de>

	* mixer.c (period_to_speed): Checking for integer overflow. Very
 	short periods (very high frequencies) can't be rendered
 	currently. The mixer code should be using long longs I guess. Some
 	crashes are prevented for now.

Thu Oct  8 22:22:50 1998  Michael Krause  <m.krause@tu-harburg.de>

	* gui.c (wait_for_player): Using new startstop_fifo variable to
 	synchronize with the mixer thread. Fixes crash when loading XM
 	after playing notes with the keyboard.

	* gui.c (free_xm): New routine which resets all subsystems of the
 	tracker before calling XM_Free(). Fixes crash when loading XM
 	while in sample editor with samples playing.

	* mixer.c (mixer_fill_buffer): Fixed loop handling again; first
 	sample is now loopstart << ACCURACY, last sample is loopend <<
 	ACCURACY - 1.

	* gui.c (change_current_pattern): Call mixer_set_pattern even when
 	we're not in playing_pattern mode. Can now change pattern while
 	playing a mod, just like in PT.

	* mixer.c (mixer_main), gui.c (read_mixer_pipe):
	(programlist_songpos_changed): Added set_songpos_fifo variable to
 	avoid GUI feedbacks when fast-forwarding the song position.

Wed Oct  7 20:03:35 1998  Michael Krause  <m.krause@tu-harburg.de>

	* gui.c (programlist_songpos_changed): change_current_pattern()
 	called even if playing. (change_current_pattern): Change
 	editing_pat first, then call the other routines. Call
 	mixer_set_pattern() only if in playing pattern mode.

Tue Oct  6 17:37:14 1998  Michael Krause  <m.krause@tu-harburg.de>

	* gui.c (spin_editpat_changed): Call change_current_pattern() even
 	if playing.

	* gui.c, xm.c: Added "Clear Song" and "Clear All" operations.

	* gui.c: Added restart position widget to the program list.

	* gui.c: Instrument name changes are stored.

	* mixer.c, gui.c: Position updates are handled together with the
 	scopes in MSG2MAIN_TICK. Visual updates are a bit smoother on my
 	slow machine now. And the scope buffers are double-buffered, so
 	the scope is more in time with the sound.

	* mixer.c: Fixed period range checking to use OpenCP's values.

	* Makefile: Moved $(LDFLAGS) to the end of the line; some people's
 	compilers complain otherwise.

Mon Oct  5 17:10:03 1998  Michael Krause  <m.krause@tu-harburg.de>

	* mixer.c (player_tick): Handling playlist restart position now,
	adding support for position jumps. Added dxx effect.

	* xm.c: Added the framework for endianness conversion. Rewrote
 	load_samples and save_samples to use the new "length" semantics.

	* xm.h: STSample.length / loopstart / looplen are measured in
 	samples now, not in bytes. This removes the necessity for a lot of
 	">> 1" in the rest of the code.

Sun Oct  4 17:29:10 1998  Michael Krause  <m.krause@tu-harburg.de>

	* Released v0.0.6

	* sample-editor.c (daemon_thread): renamed daemon() to
 	daemon_thread() so that we can compile on glibc2 systems :)

	* xm.c (XM_load_samples): if an XM has samples with loop length 0,
 	disable the loop completely.

	* mixer.c (mixer_fill_buffer): fixed loop handling so that it
 	works on very short loops, too. New routine is not yet optimized.

	* Released v0.0.5 today (first public release)
