On Sun, Sep 21, 2014 at 09:26:13AM -0400, jonetsu(a)teksavvy.com wrote:
Le dimanche, 21 Sep 2014 14:40:22 +0200,
Edgar Aichinger <edogawa(a)aon.at> a écrit :
Am Sonntag, 21. September 2014, 14:24:07 schrieb
Pedro
Lopez-Cabanillas:
I can confirm this behaviour when the program is compiled for 64
bits, but seems to work for 32 bit. Looks like a bug in the
program, which has not been properly ported from MS VC++ to GCC/G++.
I can confirm that too for 64bit, but FWIW running this
http://melodymachine.com/sfark.htm in wine got the soundfonts
extracted, just to let you know in case running non-oss windows
programs is an option...
Many thanks for the replies ! I haven't tried the 32-bit way yet, so I
can do that using a 32-bit Mint VM.
I just tried now by coincidence the Windows version from melodymachine
using wine, and although it installs OK (I presume, even though it is
in C:\Program Files where ever that really is in Linux !), and although
it is possible to use the GUI to navigate to a soundfile (way out there
somewhere else on the Linux machine) and double-click it, the program
will report 'file not found'. I'm surely missing something fundamental
about how wine/Windows apps works in Linux.
The follow patch fixes the problem:
diff -ur sfArkLib~/sfklCoding.cpp sfArkLib/sfklCoding.cpp
--- sfArkLib~/sfklCoding.cpp 2013-12-19 00:07:11.000000000 +0100
+++ sfArkLib/sfklCoding.cpp 2014-09-21 19:29:35.925453244 +0200
@@ -633,7 +633,7 @@
if (n <= 0 || n > ZBUF_SIZE) // Check for valid block length
{
- sprintf(MsgTxt, "ERROR - Invalid length for %s file (apparently %ld bytes)
%s", FileExt, n, CorruptedMsg);
+ sprintf(MsgTxt, "ERROR - Invalid length for %s file (apparently %d bytes)
%s", FileExt, n, CorruptedMsg);
msg(MsgTxt, MSG_PopUp);
GlobalErrorFlag = SFARKLIB_ERR_CORRUPT;
return false;
@@ -833,7 +833,7 @@
return EndProcess(GlobalErrorFlag);
}
- sprintf(MsgTxt, "Created %s (%ld kb) successfully.", ReqOutFileName,
Blk.TotBytesWritten/1024);
+ sprintf(MsgTxt, "Created %s (%d kb) successfully.", ReqOutFileName,
Blk.TotBytesWritten/1024);
msg(MsgTxt, 0);
return EndProcess(GlobalErrorFlag);
diff -ur sfArkLib~/sfklZip.cpp sfArkLib/sfklZip.cpp
--- sfArkLib~/sfklZip.cpp 2013-12-19 00:07:11.000000000 +0100
+++ sfArkLib/sfklZip.cpp 2014-09-21 19:28:37.014193859 +0200
@@ -26,7 +26,7 @@
ULONG UnMemcomp(const BYTE *InBuf, int InBytes, BYTE *OutBuf, int OutBufLen)
{
// Uncompress buffer using ZLIBs uncompress function...
- ULONG OutBytes = OutBufLen;
+ unsigned long OutBytes = OutBufLen;
int Result = uncompress(OutBuf, &OutBytes, InBuf, InBytes);
if (Result != Z_OK) // uncompress failed?
{
diff -ur sfArkLib~/wcc.h sfArkLib/wcc.h
--- sfArkLib~/wcc.h 2013-12-19 00:07:11.000000000 +0100
+++ sfArkLib/wcc.h 2014-09-21 19:28:37.015193847 +0200
@@ -67,13 +67,13 @@
// ----- typdefs -----
typedef unsigned short USHORT;
typedef unsigned char BYTE;
-typedef unsigned long ULONG;
+typedef unsigned int ULONG;
//typedef int bool;
typedef short AWORD; // Audio word (i.e., 16-bit audio)
typedef unsigned short UAWORD;
-typedef long LAWORD; // "long" audio word i.e. 32 bits
-typedef unsigned long ULAWORD;
+typedef int LAWORD; // "long" audio word i.e. 32 bits
+typedef unsigned int ULAWORD;
// Types used by Bit I/O (BIO) routines...
typedef USHORT BIOWORD;