Winelib CoolPlayer port
Vincent Béron
vberon at mecano.gme.usherb.ca
Tue Apr 22 15:17:58 CDT 2003
Hi all,
This is what's needed to compile CoolPlayer as a Winelib app. CoolPlayer
is an MP3/OGG/stream player for Windows.
Note that the patches doesn't touch anything inside of Wine. CVS Wine is
needed until the next release though.
The main change is the Makefiles, as CoolPlayer is currently developed
with MS Visual Studio.
Then there's the usual filename case-sensitivity.
After that a typo and an empty enum declaration in an unused function
prototype.
Next is a difference in inline asm syntax between MSVC and gcc. Somebody
got a better way to do it?
Then is some type definition (might be better fixed in another way).
This ends the conversion to gcc.
Next is the actual Winelib stuff, which is very small.
The first part is an MFC header (thankfully, nothing else seems to be
needed from MFC).
The second part is the only problematic thing. The current div
implementation works fine for binary compatibility on i386, but doesn't
work well for source level compatibility on the same platform. Other
platforms are fine. This is really the only thing which needs to change
in Wine.
Next phase is to get the relevant changes accepted in CoolPlayer
(already started), and fix the last Wine issue so that div_t d=div(a, b)
works as expected.
Vincent
-------------- next part --------------
diff -urN CoolPlayerCVS-20030421-2130-orig/libmad/Makefile CoolPlayerCVS-20030421-2130/libmad/Makefile
--- CoolPlayerCVS-20030421-2130-orig/libmad/Makefile 1969-12-31 19:00:00.000000000 -0500
+++ CoolPlayerCVS-20030421-2130/libmad/Makefile 2003-04-21 22:17:22.000000000 -0400
@@ -0,0 +1,63 @@
+# Standard Variables
+
+CC = winegcc
+AR = ar rc
+RM = rm -f
+RANLIB = ranlib
+CBASEFLAGS = -W -Wall $(INCDIRS) -mno-cygwin
+CPPBASEFLAGS = -D_LIB -DHAVE_CONFIG_H -DASO_ZEROCHECK -DWIN32
+
+INCDIRS = -I.
+OPTIMIZ = -O2
+STRIP = -s
+
+# Compilation flags
+
+CFLAGS = $(CBASEFLAGS) -g
+CPPFLAGS = $(CPPBASEFLAGS) -DFPM_DEFAULT -D_DEBUG -DDEBUG
+
+# Main target
+
+BINDIR = .
+
+TARGET = $(BINDIR)/libmad.a
+
+C_SRCS = \
+ bit.c \
+ decoder.c \
+ fixed.c \
+ frame.c \
+ huffman.c \
+ layer12.c \
+ layer3.c \
+ stream.c \
+ synth.c \
+ timer.c \
+ version.c
+
+OBJS = $(C_SRCS:%.c=%.o)
+
+# Explicit rules
+%.o : %.c
+ $(CC) $(CFLAGS) $(CPPFLAGS) $(INCDIRS) -c -o $@ $<
+
+# Targets
+
+all: $(TARGET)
+
+debug: $(TARGET)
+
+$(TARGET): deps $(OBJS)
+ $(RM) $@
+ $(AR) $@ $(OBJS)
+ $(RANLIB) $@
+
+clean:
+ $(RM) $(TARGET) $(OBJS) deps
+
+# Automatic Dependencies
+
+deps: $(C_SRCS)
+ $(CC) -MM $(CFLAGS) $(CPPFLAGS) $(INCDIRS) $(C_SRCS) > $@
+
+-include deps
diff -urN CoolPlayerCVS-20030421-2130-orig/Makefile CoolPlayerCVS-20030421-2130/Makefile
--- CoolPlayerCVS-20030421-2130-orig/Makefile 1969-12-31 19:00:00.000000000 -0500
+++ CoolPlayerCVS-20030421-2130/Makefile 2003-04-21 22:24:36.000000000 -0400
@@ -0,0 +1,132 @@
+# Standard Variables
+
+CC = winegcc
+RM = rm -f
+WRES = wrc
+CBASEFLAGS = -W -Wall $(INCDIRS) -mno-cygwin
+CPPBASEFLAGS = -D_WINDOWS -DWIN32
+LDBASEFLAGS = -mno-cygwin
+
+WINELIBDIR = /home/vincent/source/wine-20030421-2130-CoolPlayer
+#WINELIBDIR = /usr/lib/wine
+WINEINCDIR = /home/vincent/source/wine-20030421-2130-CoolPlayer
+#WINEINCDIR = /usr/include/wine
+LIBDIRS = -L$(WINELIBDIR)/dlls -L$(WINELIBDIR)/libs/uuid -L$(WINELIBDIR)/libs/wine
+#LIBDIRS = -L$(WINELIBDIR)/wine -L$(WINELIBDIR)
+LIBS = ./libmad/libmad.a ./vorbis/vorbisfile_static.a ./vorbis/vorbis_static.a ./ogg/ogg_static.a -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -luuid -lcomctl32 -lwinmm -lwsock32 -ldsound -lwininet -lm
+INCDIRS = -I. -I./ogg/include -I./vorbis/include -I$(WINEINCDIR)/include -I$(WINEINCDIR)/include/msvcrt
+OPTIMIZ = -O2
+STRIP = -s
+
+SUBDIRS = \
+ libmad \
+ ogg \
+ vorbis
+
+# Compilation flags
+
+CFLAGS = $(CBASEFLAGS) -g
+CPPFLAGS = $(CPPBASEFLAGS) -D_DEBUG -DMEM_DEBUG=1
+LDFLAGS = $(LDBASEFLAGS)
+
+# Main target
+
+BINDIR = .
+
+TARGET = $(BINDIR)/coolplayer.exe
+
+C_SRCS = \
+ about.c \
+ bitmap2region.c \
+ CLV_ListView.c \
+ CompositeFile.c \
+ CPI_CircleBuffer.c \
+ CPI_Equaliser_Basic.c \
+ CPI_ID3_Genres.c \
+ CPI_Image.c \
+ CPI_Interface.c \
+ CPI_InterfacePart.c \
+ CPI_InterfacePart_CommandButton.c \
+ CPI_Keyboard.c \
+ CPI_Player.c \
+ CPI_Player_Callbacks.c \
+ CPI_Player_CoDec_MPEG.c \
+ CPI_Player_CoDec_OGG.c \
+ CPI_Player_CoDec_WAV.c \
+ CPI_Player_CoDec_WinAmpPlugin.c \
+ CPI_Player_Engine.c \
+ CPI_Player_FileAssoc.c \
+ CPI_Player_Output_DirectSound.c \
+ CPI_Player_Output_File.c \
+ CPI_Player_Output_Wave.c \
+ CPI_Playlist.c \
+ CPI_Playlist_Callbacks.c \
+ CPI_PlaylistItem.c \
+ CPI_PlaylistWindow.c \
+ CPI_Stream.c \
+ CPI_Stream_Internet.c \
+ CPI_Stream_LocalFile.c \
+ CPI_Verbs.c \
+ CPSK_Skin.c \
+ DLG_Find.c \
+ main.c \
+ options.c \
+ playlist.c \
+ profile.c \
+ RotatingIcon.c \
+ shwapi.c \
+ skin.c \
+ stdafx.c \
+ WindowsOS.c \
+ ZLib/adler32.c \
+ ZLib/crc32.c \
+ ZLib/infblock.c \
+ ZLib/infcodes.c \
+ ZLib/inffast.c \
+ ZLib/inflate.c \
+ ZLib/inftrees.c \
+ ZLib/infutil.c \
+ ZLib/zutil.c
+
+RC_SRCS = \
+ coolplayer.rc
+
+OBJS = $(C_SRCS:.c=.o) $(EXTRA_OBJS)
+RC_OBJS = $(RC_SRCS:.rc=.res.o)
+
+# Explicit rules
+%.o : %.c
+ $(CC) $(CFLAGS) $(CPPFLAGS) $(INCDIRS) -c -o $@ $<
+
+%.res.o : %.rc
+ $(WRES) $(CPPFLAGS) $(INCDIRS) $< $@
+
+# Targets
+
+all: $(SUBDIRS) $(TARGET)
+
+$(SUBDIRS): dummy
+ @cd $@ && $(MAKE)
+
+debug: $(SUBDIRS:%=%/__debug__) $(TARGET)
+
+$(SUBDIRS:%=%/__debug__): dummy
+ cd `dirname $@` && $(MAKE) debug
+
+$(TARGET): deps $(OBJS) $(RC_OBJS)
+ $(CC) -mwindows $(LDFLAGS) $(LIBDIRS) -o $@ $(OBJS) $(RC_OBJS) $(LIBS)
+
+clean: $(SUBDIRS:%=%/__clean__)
+ $(RM) $(TARGET:.exe=) $(TARGET:.exe=.exe.so) $(OBJS) $(RC_OBJS) deps
+
+$(SUBDIRS:%=%/__clean__): dummy
+ cd `dirname $@` && $(MAKE) clean
+
+.PHONY: dummy all debug clean $(SUBDIRS) $(SUBDIRS:%=%/__debug__) $(SUBDIRS:%=%/__clean__)
+
+# Automatic Dependencies
+
+deps: $(C_SRCS)
+ $(CC) -MM $(CFLAGS) $(CPPFLAGS) $(INCDIRS) $(C_SRCS) > $@
+
+-include deps
diff -urN CoolPlayerCVS-20030421-2130-orig/ogg/Makefile CoolPlayerCVS-20030421-2130/ogg/Makefile
--- CoolPlayerCVS-20030421-2130-orig/ogg/Makefile 1969-12-31 19:00:00.000000000 -0500
+++ CoolPlayerCVS-20030421-2130/ogg/Makefile 2003-04-21 21:51:07.000000000 -0400
@@ -0,0 +1,54 @@
+# Standard Variables
+
+CC = winegcc
+AR = ar rc
+RM = rm -f
+RANLIB = ranlib
+CBASEFLAGS = -W -Wall $(INCDIRS) -mno-cygwin
+CPPBASEFLAGS = -D_LIB -DWIN32
+
+INCDIRS = -I./include
+OPTIMIZ = -O2
+STRIP = -s
+
+# Compilation flags
+
+CFLAGS = $(CBASEFLAGS) -g
+CPPFLAGS = $(CPPBASEFLAGS) -D_DEBUG
+
+# Main target
+
+BINDIR = .
+
+TARGET = $(BINDIR)/ogg_static.a
+
+C_SRCS = \
+ src/bitwise.c \
+ src/framing.c
+
+OBJS = $(C_SRCS:%.c=%.o)
+
+# Explicit rules
+%.o : %.c
+ $(CC) $(CFLAGS) $(CPPFLAGS) $(INCDIRS) -c -o $@ $<
+
+# Targets
+
+all: $(TARGET)
+
+debug: $(TARGET)
+
+$(TARGET): deps $(OBJS)
+ $(RM) $@
+ $(AR) $@ $(OBJS)
+ $(RANLIB) $@
+
+clean:
+ $(RM) $(TARGET) $(OBJS) deps
+
+# Automatic Dependencies
+
+deps: $(C_SRCS)
+ $(CC) -MM $(CFLAGS) $(CPPFLAGS) $(INCDIRS) $(C_SRCS) > $@
+
+-include deps
diff -urN CoolPlayerCVS-20030421-2130-orig/vorbis/Makefile CoolPlayerCVS-20030421-2130/vorbis/Makefile
--- CoolPlayerCVS-20030421-2130-orig/vorbis/Makefile 1969-12-31 19:00:00.000000000 -0500
+++ CoolPlayerCVS-20030421-2130/vorbis/Makefile 2003-04-21 21:51:07.000000000 -0400
@@ -0,0 +1,87 @@
+# Standard Variables
+
+CC = winegcc
+AR = ar rc
+RM = rm -f
+RANLIB = ranlib
+CBASEFLAGS = -W -Wall $(INCDIRS) -mno-cygwin
+CPPBASEFLAGS = -D_LIB -DWIN32
+
+INCDIRS = -I./include -I../ogg/include
+OPTIMIZ = -O2
+STRIP = -s
+
+# Compilation flags
+
+CFLAGS = $(CBASEFLAGS) -g
+CPPFLAGS = $(CPPBASEFLAGS) -D_DEBUG
+
+# Main target
+
+BINDIR = .
+
+TARGETS = $(BINDIR)/vorbis_static.a $(BINDIR)/vorbisfile_static.a
+
+VORBIS_STATIC_C_SRCS = \
+ lib/analysis.c \
+ lib/bitrate.c \
+ lib/block.c \
+ lib/codebook.c \
+ lib/envelope.c \
+ lib/floor0.c \
+ lib/floor1.c \
+ lib/info.c \
+ lib/lpc.c \
+ lib/lsp.c \
+ lib/mapping0.c \
+ lib/mdct.c \
+ lib/psy.c \
+ lib/registry.c \
+ lib/res0.c \
+ lib/sharedbook.c \
+ lib/smallft.c \
+ lib/synthesis.c \
+ lib/window.c
+
+VORBISFILE_STATIC_C_SRCS = \
+ lib/vorbisfile.c
+
+C_SRCS = $(VORBIS_STATIC_C_SRCS) $(VORBISFILE_STATIC_C_SRCS)
+
+VORBIS_STATIC_OBJS = $(VORBIS_STATIC_C_SRCS:.c=.o)
+VORBISFILE_STATIC_OBJS = $(VORBISFILE_STATIC_C_SRCS:.c=.o)
+
+OBJS = $(VORBIS_STATIC_OBJS) $(VORBISFILE_STATIC_OBJS)
+
+# Explicit rules
+%.o : %.c
+ $(CC) $(CFLAGS) $(CPPFLAGS) $(INCDIRS) -c -o $@ $<
+
+# Targets
+
+all: $(TARGETS)
+
+debug: $(TARGETS)
+
+$(BINDIR)/vorbis_static.a: deps-vorbis-static $(VORBIS_STATIC_OBJS)
+ $(RM) $@
+ $(AR) $@ $(VORBIS_STATIC_OBJS)
+ $(RANLIB) $@
+
+$(BINDIR)/vorbisfile_static.a: deps-vorbisfile-static $(VORBISFILE_STATIC_OBJS)
+ $(RM) $@
+ $(AR) $@ $(VORBISFILE_STATIC_OBJS)
+ $(RANLIB) $@
+
+clean:
+ $(RM) $(TARGETS) $(OBJS) deps-vorbis-static deps-vorbisfile-static
+
+# Automatic Dependencies
+
+deps-vorbis-static: $(VORBIS_STATIC_C_SRCS)
+ $(CC) -MM $(CFLAGS) $(CPPFLAGS) $(INCDIRS) $(VORBIS_STATIC_C_SRCS) > $@
+deps-vorbisfile-static: $(VORBISFILE_STATIC_C_SRCS)
+ $(CC) -MM $(CFLAGS) $(CPPFLAGS) $(INCDIRS) $(VORBISFILE_STATIC_C_SRCS) > $@
+
+-include deps-vorbis-static
+-include deps-vorbisfile-static
-------------- next part --------------
diff -urN CoolPlayerCVS-20030421-2130-orig/CompositeFile.c CoolPlayerCVS-20030421-2130/CompositeFile.c
--- CoolPlayerCVS-20030421-2130-orig/CompositeFile.c 2003-04-20 15:50:11.000000000 -0400
+++ CoolPlayerCVS-20030421-2130/CompositeFile.c 2003-04-21 21:51:07.000000000 -0400
@@ -23,7 +23,7 @@
#include "stdafx.h"
#include "globals.h"
#include "CompositeFile.h"
-#include "Zlib/zlib.h"
+#include "ZLib/zlib.h"
#define CPC_PKFILE_MAGIC 0x04034B50
diff -urN CoolPlayerCVS-20030421-2130-orig/CPI_Player_Callbacks.c CoolPlayerCVS-20030421-2130/CPI_Player_Callbacks.c
--- CoolPlayerCVS-20030421-2130-orig/CPI_Player_Callbacks.c 2003-04-20 15:50:08.000000000 -0400
+++ CoolPlayerCVS-20030421-2130/CPI_Player_Callbacks.c 2003-04-21 21:51:07.000000000 -0400
@@ -23,8 +23,8 @@
#include "stdafx.h"
#include "globals.h"
#include "CPI_Player.h"
-#include "CPI_PlayList.h"
-#include "CPI_PlayListItem.h"
+#include "CPI_Playlist.h"
+#include "CPI_PlaylistItem.h"
////////////////////////////////////////////////////////////////////////////////
diff -urN CoolPlayerCVS-20030421-2130-orig/stdafx.h CoolPlayerCVS-20030421-2130/stdafx.h
--- CoolPlayerCVS-20030421-2130-orig/stdafx.h 2003-04-16 21:50:19.000000000 -0400
+++ CoolPlayerCVS-20030421-2130/stdafx.h 2003-04-21 21:51:07.000000000 -0400
@@ -4,14 +4,14 @@
#define _WIN32_WINDOWS 0x0410
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
-// #include "AggressiveOptimize.h"
+// #include "aggressiveoptimize.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <limits.h>
#include "debug.h"
#include <process.h>
-#include <Wininet.h>
+#include <wininet.h>
#include <search.h>
#include <malloc.h>
#include <time.h>
-------------- next part --------------
diff -urN CoolPlayerCVS-20030421-2130-orig/skin.h CoolPlayerCVS-20030421-2130/skin.h
--- CoolPlayerCVS-20030421-2130-orig/skin.h 2003-04-17 10:27:15.000000000 -0400
+++ CoolPlayerCVS-20030421-2130/skin.h 2003-04-21 21:51:07.000000000 -0400
@@ -58,7 +58,7 @@
typedef struct
{
char name[128];
- enum Obects Object;
+ enum Objects Object;
}
Associate;
-------------- next part --------------
diff -urN CoolPlayerCVS-20030421-2130-orig/globals.h CoolPlayerCVS-20030421-2130/globals.h
--- CoolPlayerCVS-20030421-2130-orig/globals.h 2003-04-21 21:25:35.000000000 -0400
+++ CoolPlayerCVS-20030421-2130/globals.h 2003-04-21 21:51:07.000000000 -0400
@@ -321,7 +321,7 @@
void main_draw_vu_from_mouse(HWND hWnd, int vunummer, int vuwaarde);
void main_draw_vu_from_value(HWND hWnd, int vunummer, int vuwaarde);
void main_menuproc(HWND hWnd, LPPOINT points);
-void main_play(HWND hWnd, BOOL Nogap, enum PlayWhat playwhat);
+//void main_play(HWND hWnd, BOOL Nogap, enum PlayWhat playwhat);
void main_reset_window(HWND hWnd);
void main_set_eq(void);
void main_skin_add_to_menu(char *name);
-------------- next part --------------
diff -urN CoolPlayerCVS-20030421-2130-orig/debug.h CoolPlayerCVS-20030421-2130/debug.h
--- CoolPlayerCVS-20030421-2130-orig/debug.h 2001-08-17 10:38:35.000000000 -0400
+++ CoolPlayerCVS-20030421-2130/debug.h 2003-04-21 21:51:07.000000000 -0400
@@ -28,10 +28,10 @@
#define CP_TRACE4(format, arg1, arg2, arg3, arg4) _CrtDbgReport(_CRT_WARN, __FILE__, __LINE__, NULL, format "\n", arg1, arg2, arg3, arg4)
#define CP_TRACE5(format, arg1, arg2, arg3, arg4, arg5) _CrtDbgReport(_CRT_WARN, __FILE__, __LINE__, NULL, format "\n", arg1, arg2, arg3, arg4, arg5)
//
-#define CP_ASSERT(expr) if(!(expr)) { CP_TRACE1("ASSERTION %s FAILS", #expr); __asm { int 3 } }
-#define CP_FAIL(errstring) { CP_TRACE1("HARD FAILURE %s", #errstring); __asm { int 3 } }
+#define CP_ASSERT(expr) if(!(expr)) { CP_TRACE1("ASSERTION %s FAILS", #expr); __asm__("int $3"); }
+#define CP_FAIL(errstring) { CP_TRACE1("HARD FAILURE %s", #errstring); __asm__("int $3"); }
//
-#define CP_CHECKOBJECT(obj_ptr_typed) if(!obj_ptr_typed || !_CrtIsMemoryBlock(obj_ptr_typed, sizeof(*obj_ptr_typed), NULL, NULL, NULL)) { CP_TRACE1("POINTER %s is Bogus", #obj_ptr_typed); __asm { int 3 } }
+#define CP_CHECKOBJECT(obj_ptr_typed) if(!obj_ptr_typed || !_CrtIsMemoryBlock(obj_ptr_typed, sizeof(*obj_ptr_typed), NULL, NULL, NULL)) { CP_TRACE1("POINTER %s is Bogus", #obj_ptr_typed); __asm__("int $3"); }
-------------- next part --------------
diff -urN CoolPlayerCVS-20030421-2130-orig/ogg/include/ogg/os_types.h CoolPlayerCVS-20030421-2130/ogg/include/ogg/os_types.h
--- CoolPlayerCVS-20030421-2130-orig/ogg/include/ogg/os_types.h 2003-04-12 11:29:28.000000000 -0400
+++ CoolPlayerCVS-20030421-2130/ogg/include/ogg/os_types.h 2003-04-21 21:51:07.000000000 -0400
@@ -34,13 +34,21 @@
typedef __int16 ogg_int16_t;
typedef unsigned __int16 ogg_uint16_t;
# else
- /* Cygwin */
- #include <_G_config.h>
- typedef _G_int64_t ogg_int64_t;
- typedef _G_int32_t ogg_int32_t;
- typedef _G_uint32_t ogg_uint32_t;
- typedef _G_int16_t ogg_int16_t;
- typedef _G_uint16_t ogg_uint16_t;
+# ifdef __CYGWIN__
+ /* Cygwin */
+ #include <_G_config.h>
+ typedef _G_int64_t ogg_int64_t;
+ typedef _G_int32_t ogg_int32_t;
+ typedef _G_uint32_t ogg_uint32_t;
+ typedef _G_int16_t ogg_int16_t;
+ typedef _G_uint16_t ogg_uint16_t;
+# else
+ /* mingw */
+ typedef long long ogg_int64_t;
+ typedef int ogg_int32_t;
+ typedef unsigned int ogg_uint32_t;
+ typedef short ogg_int16_t;
+# endif
# endif
#elif defined(__MACOS__)
-------------- next part --------------
diff -urN CoolPlayerCVS-20030421-2130-orig/afxres.h CoolPlayerCVS-20030421-2130/afxres.h
--- CoolPlayerCVS-20030421-2130-orig/afxres.h 1969-12-31 19:00:00.000000000 -0500
+++ CoolPlayerCVS-20030421-2130/afxres.h 2003-04-21 21:51:07.000000000 -0400
@@ -0,0 +1 @@
+#include "winres.h"
-------------- next part --------------
diff -urN CoolPlayerCVS-20030421-2130-orig/CPI_Player_CoDec_WAV.c CoolPlayerCVS-20030421-2130/CPI_Player_CoDec_WAV.c
--- CoolPlayerCVS-20030421-2130-orig/CPI_Player_CoDec_WAV.c 2003-04-20 15:50:08.000000000 -0400
+++ CoolPlayerCVS-20030421-2130/CPI_Player_CoDec_WAV.c 2003-04-21 21:51:07.000000000 -0400
@@ -272,6 +272,7 @@
{
unsigned int iSeekPos;
div_t progress;
+ long long temp;
CPs_CoDec_Wave *pContext = (CPs_CoDec_Wave*)pModule->m_pModuleCookie;
CP_CHECKOBJECT(pContext);
@@ -283,7 +284,9 @@
iSeekPos &= ~0x3;
// Setup our progress
- progress = div(iSeekPos, pContext->m_iBytesPerSecond);
+ temp = div(iSeekPos, pContext->m_iBytesPerSecond);
+ progress.quot = ((int) (temp & 0xffffffffULL));
+ progress.rem = ((int) ((unsigned long long) temp)) >> 32;
pContext->m_iCurrentOffset_Secs = progress.quot;
pContext->m_iCurrentOffset_Fraction_Bytes = progress.rem;
More information about the wine-patches
mailing list