From 752af040600eaf24859790a431a8e835676c149c Mon Sep 17 00:00:00 2001
From: Adrien Destugues <pulkomandy@pulkomandy.tk>
Date: Tue, 4 Mar 2014 21:49:16 +0100
Subject: Import initial patch.


diff --git a/makefile.haiku b/makefile.haiku
new file mode 100644
index 0000000..efbfd22
--- /dev/null
+++ b/makefile.haiku
@@ -0,0 +1,199 @@
+CXX = g++-x86
+
+LIBS = src/extralibs/tinyxml/tinyxml.o \
+       src/extralibs/tinyxml/tinyxmlparser.o \
+       src/extralibs/tinyxml/tinystr.o \
+       src/extralibs/tinyxml/tinyxmlerror.o \
+       -lSDL -lsdldraw -lz -lstdc++ -lsupc++ -lgame
+
+FLAGS = -O2 -fno-strict-aliasing -ffast-math -fno-rtti -fno-exceptions -I/usr/local/include -L/usr/local/lib -Lsrc/extralibs/sdl_draw -Lsrc/extralibs/zlib-1.2.3 -fpermissive \
+        -D __GCC__ -D __NO_MIDI__ -D __MOT_SWAP__
+
+EXEOBJS = ptk.o \
+          editor_303.o editor_pattern.o editor_sequencer.o editor_track.o editor_track_fx.o \
+          patterns_blocks.o editor_synth.o editor_sample.o editor_fx_setup.o editor_setup.o \
+          editor_diskio.o editor_reverb.o editor_instrument.o editor_midi.o \
+          samples_pack.o files_list.o files.o mods.o patterns.o reverbs.o midi_cfg.o \
+          bits.o pack.o tinypack.o words.o wputils.o \
+          config.o 303s.o synths.o insts.o ptps.o \
+          midi.o midi_dispatch.o \
+          timer.o main.o \
+          misc_draw.o draw_primitives.o requesters.o xml.o gadgets.o \
+          samples_ops.o aiff.o riff.o \
+          spline.o tb_303.o wavpack.o samples_unpack.o replay.o synth.o endianness.o \
+          sounddriver_haiku.o
+
+all: protrekkr
+
+clean: RemObj
+
+RemObj:
+	-rm -f $(EXEOBJS)
+
+protrekkr: $(EXEOBJS)
+	(cd src/extralibs/sdl_draw; make -f makefile.haiku)
+	(cd src/extralibs/tinyxml; make)
+	(cd src/extralibs/zlib-1.2.3; make)
+	$(CXX) -o ./release/distrib/ptk_haiku -L./ $(FLAGS) $(EXEOBJS) $(LIBS)
+	strip -s -x ./release/distrib/ptk_haiku
+	chmod +x ./release/distrib/ptk_haiku
+#	-rm -f $(EXEOBJS)
+	
+ptk.o: src/ptk.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+editor_303.o: src/editors/editor_303.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+editor_pattern.o: src/editors/editor_pattern.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+editor_sequencer.o: src/editors/editor_sequencer.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+editor_track.o: src/editors/editor_track.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+editor_track_fx.o: src/editors/editor_track_fx.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+patterns_blocks.o: src/editors/patterns_blocks.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+editor_synth.o: src/editors/editor_synth.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+editor_sample.o: src/editors/editor_sample.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+editor_fx_setup.o: src/editors/editor_fx_setup.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+editor_setup.o: src/editors/editor_setup.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+editor_diskio.o: src/editors/editor_diskio.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+editor_reverb.o: src/editors/editor_reverb.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+editor_instrument.o: src/editors/editor_instrument.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+editor_midi.o: src/editors/editor_midi.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+samples_pack.o: src/samples/samples_pack.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+files_list.o: src/files/files_list.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+files.o: src/files/files.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+mods.o: src/files/mods.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+patterns.o: src/files/patterns.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+reverbs.o: src/files/reverbs.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+midi_cfg.o: src/files/midi_cfg.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+config.o: src/files/config.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+303s.o: src/files/303s.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+synths.o: src/files/synths.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+insts.o: src/files/insts.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+ptps.o: src/files/ptps.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+midi.o: src/midi/midi.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+RtMidi.o: src/midi/RtMidi.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+midi_dispatch.o: src/midi/midi_dispatch.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+timer.o: src/support/timer.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+main.o: src/support/main.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+misc_draw.o: src/ui/misc_draw.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+draw_primitives.o: src/ui/draw_primitives.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+requesters.o: src/ui/requesters.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+xml.o: src/ui/xml.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+gadgets.o: src/ui/gadgets.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+samples_ops.o: src/samples/samples_ops.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+aiff.o: src/samples/aiff/aiff.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+riff.o: src/samples/wav/riff.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+spline.o: release/distrib/replay/lib/spline.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+tb_303.o: release/distrib/replay/lib/tb_303.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+wavpack.o: release/distrib/replay/lib/wavpack.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+samples_unpack.o: release/distrib/replay/lib/samples_unpack.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+replay.o: release/distrib/replay/lib/replay.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+synth.o: release/distrib/replay/lib/synth.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+endianness.o: release/distrib/replay/lib/endianness.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+sounddriver_haiku.o: release/distrib/replay/lib/sounddriver/sounddriver_haiku.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+bits.o: src/samples/wavpack/bits.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+pack.o: src/samples/wavpack/pack.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+words.o: src/samples/wavpack/words.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+wputils.o: src/samples/wavpack/wputils.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
+
+tinypack.o: src/samples/wavpack/tinypack.cpp
+	$(CXX) -c -o $(@) $(FLAGS) $<
diff --git a/release/distrib/replay/lib/include/replay.h b/release/distrib/replay/lib/include/replay.h
index 77d7652..f001033 100644
--- a/release/distrib/replay/lib/include/replay.h
+++ b/release/distrib/replay/lib/include/replay.h
@@ -49,6 +49,8 @@
 #include "../sounddriver/include/sounddriver_aos4.h"
 #elif defined(__PSP__)
 #include "../sounddriver/include/sounddriver_psp.h"
+#elif defined(__HAIKU__)
+#include "../sounddriver/include/sounddriver_haiku.h"
 #else
 #error "Can't work without any sound driver !"
 #endif
diff --git a/release/distrib/replay/lib/replay.cpp b/release/distrib/replay/lib/replay.cpp
index d669c8b..0e420af 100644
--- a/release/distrib/replay/lib/replay.cpp
+++ b/release/distrib/replay/lib/replay.cpp
@@ -43,6 +43,10 @@
 #define int32 int32_t
 #endif
 
+#if defined(__HAIKU__)
+#include <SupportDefs.h>
+#endif
+
 #if !defined(__STAND_ALONE__)
 #include "../../../../src/midi/include/midi.h"
 #include "../../../../src/include/variables.h"
diff --git a/release/distrib/replay/lib/sounddriver/include/sounddriver_haiku.h b/release/distrib/replay/lib/sounddriver/include/sounddriver_haiku.h
new file mode 100644
index 0000000..294c6f8
--- /dev/null
+++ b/release/distrib/replay/lib/sounddriver/include/sounddriver_haiku.h
@@ -0,0 +1,84 @@
+// ------------------------------------------------------
+// Protrekkr
+// Based on Juan Antonio Arguelles Rius's NoiseTrekker.
+//
+// Copyright (C) 2008-2010 Franck Charlet.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+//
+//  1. Redistributions of source code must retain the above copyright notice,
+//     this list of conditions and the following disclaimer.
+//
+//  2. Redistributions in binary form must reproduce the above copyright notice,
+//     this list of conditions and the following disclaimer in the documentation
+//     and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL FRANCK CHARLET OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+// SUCH DAMAGE.
+// ------------------------------------------------------
+
+#ifndef _SOUNDDRIVER_LINUX_H_
+#define _SOUNDDRIVER_LINUX_H_
+
+// ------------------------------------------------------
+// Includes
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/ioctl.h>
+#include <pthread.h>
+#include <float.h>
+#include <memory.h>
+#include <math.h>
+
+#define STDCALL
+
+#define TRUE 1
+#define FALSE 0
+
+// ------------------------------------------------------
+// Constants
+#define AUDIO_PCM_FREQ 44100
+
+#define AUDIO_DBUF_CHANNELS 2
+#define AUDIO_DBUF_RESOLUTION 16
+
+// ------------------------------------------------------
+// Types
+typedef unsigned int Uint32;
+typedef unsigned char Uint8;
+
+// ------------------------------------------------------
+// Functions
+extern int AUDIO_Latency;
+extern int AUDIO_Milliseconds;
+
+#if !defined(__STAND_ALONE__) && !defined(__WINAMP__)
+void Message_Error(char *Message);
+#endif
+
+int AUDIO_Init_Driver(void (STDCALL *Mixer)(Uint8 *, Uint32));
+int AUDIO_Create_Sound_Buffer(int milliseconds);
+void AUDIO_Stop_Sound_Buffer(void);
+void AUDIO_Stop_Driver(void);
+void AUDIO_Play(void);
+void AUDIO_Stop(void);
+int AUDIO_IsPlaying(void);
+float AUDIO_GetTime(void);
+int AUDIO_GetSamples(void);
+void AUDIO_ResetTimer(void);
+
+#endif
diff --git a/release/distrib/replay/lib/sounddriver/sounddriver_haiku.cpp b/release/distrib/replay/lib/sounddriver/sounddriver_haiku.cpp
new file mode 100644
index 0000000..7791631
--- /dev/null
+++ b/release/distrib/replay/lib/sounddriver/sounddriver_haiku.cpp
@@ -0,0 +1,213 @@
+// ------------------------------------------------------
+// Protrekkr
+// Based on Juan Antonio Arguelles Rius's NoiseTrekker.
+//
+// Copyright (C) 2008-2010 Franck Charlet.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+//
+//  1. Redistributions of source code must retain the above copyright notice,
+//     this list of conditions and the following disclaimer.
+//
+//  2. Redistributions in binary form must reproduce the above copyright notice,
+//     this list of conditions and the following disclaimer in the documentation
+//     and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL FRANCK CHARLET OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+// SUCH DAMAGE.
+// ------------------------------------------------------
+
+// ------------------------------------------------------
+// Includes
+#include "include/sounddriver_haiku.h"
+#include <game/StreamingGameSound.h>
+#include <media/MediaDefs.h>
+
+#include <assert.h>
+
+// ------------------------------------------------------
+// Variables
+unsigned int AUDIO_To_Fill;
+int AUDIO_Samples;
+int AUDIO_Play_Flag;
+float AUDIO_Timer;
+
+int volatile AUDIO_Acknowledge;
+BStreamingGameSound* AUDIO_Device;
+Uint32 Amount;
+
+int AUDIO_SoundBuffer_Size;
+int AUDIO_Latency;
+int AUDIO_Milliseconds = 20;
+int AUDIO_16Bits;
+
+// ------------------------------------------------------
+// Functions
+int AUDIO_Create_Sound_Buffer(int milliseconds);
+void AUDIO_Stop_Sound_Buffer(void);
+void (STDCALL *AUDIO_Mixer)(Uint8 *, Uint32);
+void AUDIO_Mixer_Fill_Buffer(void *, Uint32);
+void AUDIO_Synth_Play(void);
+
+// ------------------------------------------------------
+// Name: AUDIO_Thread()
+// Desc: Audio rendering
+static void AUDIO_Callback(void* cookie, void* inBuffer, size_t byteCount, BStreamingGameSound* device)
+{
+	assert(byteCount != 0);
+    if(AUDIO_Play_Flag)
+    {
+        AUDIO_Mixer((Uint8 *) inBuffer, byteCount);
+    }
+    else
+    {
+        unsigned int i;
+        char *pSamples = (char *) inBuffer;
+        for(i = 0; i < byteCount; i++)
+        {
+            pSamples[i] = 0;
+        }
+    }
+    AUDIO_Samples += byteCount;
+    AUDIO_Timer = ((((float) AUDIO_Samples) * (1.0f / (float) AUDIO_Latency)) * 1000.0f);
+}
+
+// ------------------------------------------------------
+// Name: AUDIO_Init_Driver()
+// Desc: Init the audio driver
+int AUDIO_Init_Driver(void (*Mixer)(Uint8 *, Uint32))
+{
+    AUDIO_Mixer = Mixer;
+
+    AUDIO_Device = 0;
+    return(AUDIO_Create_Sound_Buffer(AUDIO_Milliseconds));
+}
+
+// ------------------------------------------------------
+// Name: AUDIO_Create_Sound_Buffer()
+// Desc: Create an audio buffer of given milliseconds
+int AUDIO_Create_Sound_Buffer(int milliseconds)
+{
+    int num_fragments;
+    int frag_size;
+    int found_pcmformat = TRUE;
+
+    if(milliseconds < 10) milliseconds = 10;
+    if(milliseconds > 250) milliseconds = 250;
+
+    num_fragments = 6;
+    frag_size = (int) (AUDIO_PCM_FREQ * (milliseconds / 1000.0f));
+
+    AUDIO_16Bits = TRUE;
+
+	struct gs_audio_format format;
+	format.frame_rate = AUDIO_PCM_FREQ;
+	format.channel_count = AUDIO_DBUF_CHANNELS;
+	format.format = gs_audio_format::B_GS_S16;
+	format.byte_order = B_MEDIA_LITTLE_ENDIAN;
+	format.buffer_size = 4096 * num_fragments;
+
+	AUDIO_Device = new BStreamingGameSound(4096, &format);
+	assert(AUDIO_Device->InitCheck() == B_OK);
+
+    AUDIO_SoundBuffer_Size = format.buffer_size;
+
+    AUDIO_Latency = AUDIO_SoundBuffer_Size;
+	assert(AUDIO_Latency != 0);
+
+	AUDIO_Device->SetStreamHook(&AUDIO_Callback, NULL);
+	AUDIO_Device->StartPlaying();
+    return(TRUE);
+}
+
+// ------------------------------------------------------
+// Name: AUDIO_Wait_For_Thread()
+// Desc: Wait for a command acknowledgment from the thread
+void AUDIO_Wait_For_Thread(void)
+{
+    usleep(10);
+}
+
+// ------------------------------------------------------
+// Name: AUDIO_Play()
+// Desc: Play the sound buffer endlessly
+void AUDIO_Play(void)
+{
+    AUDIO_ResetTimer();
+    AUDIO_Play_Flag = TRUE;
+    AUDIO_Wait_For_Thread();
+}
+
+// ------------------------------------------------------
+// Name: AUDIO_IsPlaying()
+// Desc: Return the playing state of the sound buffer
+int AUDIO_IsPlaying(void)
+{
+    return(AUDIO_Play_Flag);
+}
+
+// ------------------------------------------------------
+// Name: AUDIO_ResetTimer()
+// Desc: Reset the samples counter
+void AUDIO_ResetTimer(void)
+{
+    AUDIO_Samples = 0;
+    AUDIO_Timer = 0.0f;
+}
+
+// ------------------------------------------------------
+// Name: AUDIO_GetTime()
+// Desc: Return the played time in milliseconds
+float AUDIO_GetTime(void)
+{
+    return(AUDIO_Timer);
+}
+
+// ------------------------------------------------------
+// Name: AUDIO_GetSamples()
+// Desc: Return the played time in milliseconds
+int AUDIO_GetSamples(void)
+{
+    return(AUDIO_Samples);
+}
+
+// ------------------------------------------------------
+// Name: AUDIO_Stop()
+// Desc: Stop the sound buffer
+void AUDIO_Stop(void)
+{
+    AUDIO_Play_Flag = FALSE;
+    AUDIO_Wait_For_Thread();
+}
+
+// ------------------------------------------------------
+// Name: AUDIO_Stop_Sound_Buffer()
+// Desc: Release the audio buffer
+void AUDIO_Stop_Sound_Buffer(void)
+{
+    AUDIO_Stop();
+	AUDIO_Device->StopPlaying();
+}
+
+// ------------------------------------------------------
+// Name: AUDIO_Stop_Driver()
+// Desc: Stop everything
+void AUDIO_Stop_Driver(void)
+{
+    AUDIO_Stop_Sound_Buffer();
+    delete AUDIO_Device;
+    AUDIO_Device = 0;
+}
+
diff --git a/release/distrib/replay/lib/wavpack.cpp b/release/distrib/replay/lib/wavpack.cpp
index e0ead57..23a77c9 100644
--- a/release/distrib/replay/lib/wavpack.cpp
+++ b/release/distrib/replay/lib/wavpack.cpp
@@ -33,6 +33,8 @@
 // SUCH DAMAGE.
 // ------------------------------------------------------
 
+#include <stdint.h>
+ 
 #include "include/samples_unpack.h"
 #include "include/wavpack.h"
 
diff --git a/src/editors/editor_instrument.cpp b/src/editors/editor_instrument.cpp
index e76a912..8092595 100644
--- a/src/editors/editor_instrument.cpp
+++ b/src/editors/editor_instrument.cpp
@@ -44,6 +44,10 @@
 #include "../files/include/files.h"
 #include "../ui/include/requesters.h"
 
+#if defined(__HAIKU__)
+#include <SupportDefs.h>
+#endif
+
 // ------------------------------------------------------
 // Variables
 extern REQUESTER Overwrite_Requester;
diff --git a/src/editors/editor_pattern.cpp b/src/editors/editor_pattern.cpp
index ec2eecb..7e235a8 100644
--- a/src/editors/editor_pattern.cpp
+++ b/src/editors/editor_pattern.cpp
@@ -38,6 +38,10 @@
 #include "include/editor_instrument.h"
 #include "include/editor_sequencer.h"
 
+#if defined(__HAIKU__)
+#include <SupportDefs.h>
+#endif
+
 // ------------------------------------------------------
 // Constants
 #define POS_HORIZ_SLIDER 716
diff --git a/src/extralibs/sdl_draw/makefile.haiku b/src/extralibs/sdl_draw/makefile.haiku
new file mode 100644
index 0000000..e321d5d
--- /dev/null
+++ b/src/extralibs/sdl_draw/makefile.haiku
@@ -0,0 +1,26 @@
+LIBFLAGS = -c
+FLAGS = -O2 -D G_OS_WIN32 -D __LINUX__ -D __GCC__
+LIBOBJS = draw_hline.o draw_line.o draw_pixel.o draw_vline.o
+
+all: sdldraw
+clean: RemLibObj
+
+RemLibObj:
+	-rm -f $(LIBOBJS)
+	
+sdldraw: $(LIBOBJS)
+	ar -d libsdldraw.a
+	ar -r libsdldraw.a $(LIBOBJS)
+	-rm -f $(LIBOBJS)
+
+draw_hline.o: src/draw_hline.cpp
+	g++-x86 -o $(@) $(LIBFLAGS) $(FLAGS) src/draw_hline.cpp
+
+draw_line.o: src/draw_line.cpp
+	g++-x86 -o $(@) $(LIBFLAGS) $(FLAGS) src/draw_line.cpp
+
+draw_pixel.o: src/draw_pixel.cpp
+	g++-x86 -o $(@) $(LIBFLAGS) $(FLAGS) src/draw_pixel.cpp
+
+draw_vline.o: src/draw_vline.cpp
+	g++-x86 -o $(@) $(LIBFLAGS) $(FLAGS) src/draw_vline.cpp
diff --git a/src/extralibs/tinyxml/makefile.haiku b/src/extralibs/tinyxml/makefile.haiku
new file mode 100644
index 0000000..5ffb952
--- /dev/null
+++ b/src/extralibs/tinyxml/makefile.haiku
@@ -0,0 +1,130 @@
+#****************************************************************************
+#
+# Makefile for TinyXml test.
+# Lee Thomason
+# www.grinninglizard.com
+#
+# This is a GNU make (gmake) makefile
+#****************************************************************************
+
+# DEBUG can be set to YES to include debugging info, or NO otherwise
+DEBUG          := NO
+
+# PROFILE can be set to YES to include profiling info, or NO otherwise
+PROFILE        := NO
+
+# TINYXML_USE_STL can be used to turn on STL support. NO, then STL
+# will not be used. YES will include the STL files.
+TINYXML_USE_STL := NO
+
+#****************************************************************************
+
+CC     := gcc
+CXX    := g++
+LD     := g++
+AR     := ar rc
+RANLIB := ranlib
+
+DEBUG_CFLAGS     := -Wall -Wno-format -g -DDEBUG
+RELEASE_CFLAGS   := -Wall -Wno-unknown-pragmas -Wno-format -O3
+
+LIBS		 :=
+
+DEBUG_CXXFLAGS   := ${DEBUG_CFLAGS} 
+RELEASE_CXXFLAGS := ${RELEASE_CFLAGS}
+
+DEBUG_LDFLAGS    := -g
+RELEASE_LDFLAGS  :=
+
+ifeq (YES, ${DEBUG})
+   CFLAGS       := ${DEBUG_CFLAGS}
+   CXXFLAGS     := ${DEBUG_CXXFLAGS}
+   LDFLAGS      := ${DEBUG_LDFLAGS}
+else
+   CFLAGS       := ${RELEASE_CFLAGS}
+   CXXFLAGS     := ${RELEASE_CXXFLAGS}
+   LDFLAGS      := ${RELEASE_LDFLAGS}
+endif
+
+ifeq (YES, ${PROFILE})
+   CFLAGS   := ${CFLAGS} -pg -O3
+   CXXFLAGS := ${CXXFLAGS} -pg -O3
+   LDFLAGS  := ${LDFLAGS} -pg
+endif
+
+#****************************************************************************
+# Preprocessor directives
+#****************************************************************************
+
+ifeq (YES, ${TINYXML_USE_STL})
+  DEFS := -DTIXML_USE_STL
+else
+  DEFS :=
+endif
+
+#****************************************************************************
+# Include paths
+#****************************************************************************
+
+#INCS := -I/usr/include/g++-2 -I/usr/local/include
+INCS :=
+
+
+#****************************************************************************
+# Makefile code common to all platforms
+#****************************************************************************
+
+CFLAGS   := ${CFLAGS}   ${DEFS}
+CXXFLAGS := ${CXXFLAGS} ${DEFS}
+
+#****************************************************************************
+# Targets of the build
+#****************************************************************************
+
+OUTPUT := xmltest
+
+all: ${OUTPUT}
+
+
+#****************************************************************************
+# Source files
+#****************************************************************************
+
+SRCS := tinyxml.cpp tinyxmlparser.cpp xmltest.cpp tinyxmlerror.cpp tinystr.cpp
+
+# Add on the sources for libraries
+SRCS := ${SRCS}
+
+OBJS := $(addsuffix .o,$(basename ${SRCS}))
+
+#****************************************************************************
+# Output
+#****************************************************************************
+
+${OUTPUT}: ${OBJS}
+	${LD} -o $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS}
+
+#****************************************************************************
+# common rules
+#****************************************************************************
+
+# Rules for compiling source files to object files
+%.o : %.cpp
+	${CXX} -c ${CXXFLAGS} ${INCS} $< -o $@
+
+%.o : %.c
+	${CC} -c ${CFLAGS} ${INCS} $< -o $@
+
+dist:
+	bash makedistlinux
+
+clean:
+	-rm -f core ${OBJS} ${OUTPUT}
+
+depend:
+	#makedepend ${INCS} ${SRCS}
+
+tinyxml.o: tinyxml.h tinystr.h
+tinyxmlparser.o: tinyxml.h tinystr.h
+xmltest.o: tinyxml.h tinystr.h
+tinyxmlerror.o: tinyxml.h tinystr.h
diff --git a/src/files/files_list.cpp b/src/files/files_list.cpp
index 71753b7..994a62e 100644
--- a/src/files/files_list.cpp
+++ b/src/files/files_list.cpp
@@ -286,7 +286,7 @@ void Set_Current_Dir(void)
     }
 }
 
-#if defined(__LINUX__) || defined(__MACOSX__)
+#if defined(__LINUX__) || defined(__MACOSX__) || defined(__HAIKU__)
 int list_file(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf)
 {
     int i;
diff --git a/src/samples/include/samples_ops.h b/src/samples/include/samples_ops.h
index 32b73b1..f408850 100644
--- a/src/samples/include/samples_ops.h
+++ b/src/samples/include/samples_ops.h
@@ -37,6 +37,10 @@
 #include "../../include/variables.h"
 #include "../../ui/include/misc_draw.h"
 
+#if defined(__HAIKU__)
+#include <SupportDefs.h>
+#endif
+
 // ------------------------------------------------------
 // Variables
 extern int cur_sample_buffer;
diff --git a/src/support/main.cpp b/src/support/main.cpp
index 4bc3e47..38e6359 100644
--- a/src/support/main.cpp
+++ b/src/support/main.cpp
@@ -59,6 +59,10 @@
 #include <mach-o/dyld.h>
 #endif
 
+#if defined(__HAIKU__)
+#include <libgen.h>
+#endif
+
 #if defined(__AMIGAOS4__) || defined(__AROS__)
 const char *AMIGA_VERSION = "\0$VER: " TITLE " " VER_VER "." VER_REV "." VER_REVSMALL "\0";
 #endif
@@ -444,6 +448,9 @@ extern SDL_NEED int SDL_main(int argc, char *argv[])
     }
     CHDIR(ExePath);
 
+#elif defined(__HAIKU__)
+	chdir(dirname(argv[0]));
+    GETCWD(ExePath, MAX_PATH);
 #elif defined(__AMIGAOS4__) || defined(__AROS__)
     CHDIR("/PROGDIR/");
     GETCWD(ExePath, MAX_PATH);
-- 
2.26.0


From 76b1720b3d2983748c7b3f4fe734e76da5edd299 Mon Sep 17 00:00:00 2001
From: Ken Mays <kmays2000@gmail.com>
Date: Wed, 26 Feb 2020 21:49:16 +0100
Subject: wavpack narrowing conversion patch


diff --git a/src/samples/wavpack/words.cpp b/src/samples/wavpack/words.cpp
index 54c440e..c7b1f04 100644
--- a/src/samples/wavpack/words.cpp
+++ b/src/samples/wavpack/words.cpp
@@ -67,7 +67,7 @@
 
 ///////////////////////////// local table storage ////////////////////////////
 
-const uint32_t bitset [] =
+const ssize_t bitset [] =
 {
     1L << 0, 1L << 1, 1L << 2, 1L << 3,
     1L << 4, 1L << 5, 1L << 6, 1L << 7,
@@ -79,7 +79,7 @@ const uint32_t bitset [] =
     1L << 28, 1L << 29, 1L << 30, 1L << 31
 };
 
-const uint32_t bitmask [] =
+const ssize_t bitmask [] =
 {
     (1L << 0) - 1, (1L << 1) - 1, (1L << 2) - 1, (1L << 3) - 1,
     (1L << 4) - 1, (1L << 5) - 1, (1L << 6) - 1, (1L << 7) - 1,
-- 
2.26.0

