MikMod hacks removal, stage 2: getting rid of unnecessary SDL_RWops and uio

git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@1958 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
avolkov
2005-11-07 04:55:03 +00:00
parent 20d68b22a3
commit fb3a7fa5ca
5 changed files with 48 additions and 168 deletions
@@ -31,8 +31,6 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include "port.h"
#include "libs/uio.h"
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
@@ -326,8 +324,8 @@ typedef struct SAMPLE {
/* Sample functions */ /* Sample functions */
MIKMODAPI extern SAMPLE *Sample_Load(uio_DirHandle*,CHAR*); MIKMODAPI extern SAMPLE *Sample_Load(CHAR*);
MIKMODAPI extern SAMPLE *Sample_LoadFP(uio_Stream*); MIKMODAPI extern SAMPLE *Sample_LoadFP(FILE*);
MIKMODAPI extern SAMPLE *Sample_LoadGeneric(MREADER*); MIKMODAPI extern SAMPLE *Sample_LoadGeneric(MREADER*);
MIKMODAPI extern void Sample_Free(SAMPLE*); MIKMODAPI extern void Sample_Free(SAMPLE*);
MIKMODAPI extern SBYTE Sample_Play(SAMPLE*,ULONG,UBYTE); MIKMODAPI extern SBYTE Sample_Play(SAMPLE*,ULONG,UBYTE);
@@ -523,17 +521,10 @@ MIKMODAPI extern struct MLOADER load_xm; /* FastTracker 2 (by Triton) */
* ========== Module player * ========== Module player
*/ */
/* SDL_RWops compatability */ MIKMODAPI extern MODULE* Player_Load(CHAR*,int,BOOL);
#ifdef USE_RWOPS MIKMODAPI extern MODULE* Player_LoadFP(FILE*,int,BOOL);
#include "port.h"
#include SDL_INCLUDE(SDL_rwops.h)
MIKMODAPI extern MODULE* Player_LoadRW(SDL_RWops*,int,BOOL);
#endif /* USE_RWOPS */
/* End SDL_RWops compatability */
MIKMODAPI extern MODULE* Player_Load(uio_DirHandle *, CHAR*,int,BOOL);
MIKMODAPI extern MODULE* Player_LoadFP(uio_Stream*,int,BOOL);
MIKMODAPI extern MODULE* Player_LoadGeneric(MREADER*,int,BOOL); MIKMODAPI extern MODULE* Player_LoadGeneric(MREADER*,int,BOOL);
MIKMODAPI extern CHAR* Player_LoadTitle(uio_DirHandle*,CHAR*); MIKMODAPI extern CHAR* Player_LoadTitle(CHAR*);
MIKMODAPI extern void Player_Free(MODULE*); MIKMODAPI extern void Player_Free(MODULE*);
MIKMODAPI extern void Player_Start(MODULE*); MIKMODAPI extern void Player_Start(MODULE*);
MIKMODAPI extern BOOL Player_Active(void); MIKMODAPI extern BOOL Player_Active(void);
@@ -33,13 +33,11 @@
#include <malloc.h> #include <malloc.h>
#endif #endif
#include <stdarg.h> #include <stdarg.h>
//#if defined(__OS2__)||defined(__EMX__)||defined(WIN32) #if defined(__OS2__)||defined(__EMX__)||defined(_MSC_VER)
//#define strcasecmp(s,t) stricmp(s,t) #define strcasecmp(s,t) stricmp(s,t)
//#endif #endif
#include "mikmod_build.h" #include "mikmod_build.h"
#include "port.h"
#include "libs/uio.h"
#ifdef macintosh #ifdef macintosh
#ifndef __MWERKS__ #ifndef __MWERKS__
@@ -139,20 +137,13 @@ DECLARE_MUTEX(vars);
/*========== Portable file I/O */ /*========== Portable file I/O */
/* SDL_RWops compatability */ extern MREADER* _mm_new_file_reader(FILE* fp);
#ifdef USE_RWOPS
extern MREADER *_mm_new_rwops_reader(SDL_RWops * rw);
extern void _mm_delete_rwops_reader (MREADER*);
#endif /* USE_RWOPS */
/* End SDL_RWops compatability */
extern MREADER* _mm_new_file_reader(uio_Stream* fp);
extern void _mm_delete_file_reader(MREADER*); extern void _mm_delete_file_reader(MREADER*);
extern MWRITER* _mm_new_file_writer(uio_Stream *fp); extern MWRITER* _mm_new_file_writer(FILE *fp);
extern void _mm_delete_file_writer(MWRITER*); extern void _mm_delete_file_writer(MWRITER*);
extern BOOL _mm_FileExists(uio_DirHandle *dir,CHAR *fname); extern BOOL _mm_FileExists(CHAR *fname);
#define _mm_write_SBYTE(x,y) y->Put(y,(int)x) #define _mm_write_SBYTE(x,y) y->Put(y,(int)x)
#define _mm_write_UBYTE(x,y) y->Put(y,(int)x) #define _mm_write_UBYTE(x,y) y->Put(y,(int)x)
@@ -173,7 +164,7 @@ extern BOOL _mm_FileExists(uio_DirHandle *dir,CHAR *fname);
extern void _mm_iobase_setcur(MREADER*); extern void _mm_iobase_setcur(MREADER*);
extern void _mm_iobase_revert(void); extern void _mm_iobase_revert(void);
extern uio_Stream *_mm_fopen(uio_DirHandle *,CHAR*,CHAR*); extern FILE *_mm_fopen(CHAR*,CHAR*);
extern void _mm_write_string(CHAR*,MWRITER*); extern void _mm_write_string(CHAR*,MWRITER*);
extern int _mm_read_string (CHAR*,int,MREADER*); extern int _mm_read_string (CHAR*,int,MREADER*);
@@ -32,8 +32,6 @@
#include <string.h> #include <string.h>
#include "mikmod_internals.h" #include "mikmod_internals.h"
#include "port.h"
#include "libs/uio.h"
MREADER *modreader; MREADER *modreader;
@@ -374,20 +372,20 @@ static CHAR* Player_LoadTitle_internal(MREADER *reader)
return l->LoadTitle(); return l->LoadTitle();
} }
CHAR* Player_LoadTitle(uio_DirHandle *dir, CHAR* filename) CHAR* Player_LoadTitle(CHAR* filename)
{ {
CHAR* result=NULL; CHAR* result=NULL;
uio_Stream* fp; FILE* fp;
MREADER* reader; MREADER* reader;
if((fp=_mm_fopen(dir, filename,"rb"))) { if((fp=_mm_fopen(filename,"rb"))) {
if((reader=_mm_new_file_reader(fp))) { if((reader=_mm_new_file_reader(fp))) {
MUTEX_LOCK(lists); MUTEX_LOCK(lists);
result=Player_LoadTitle_internal(reader); result=Player_LoadTitle_internal(reader);
MUTEX_UNLOCK(lists); MUTEX_UNLOCK(lists);
_mm_delete_file_reader(reader); _mm_delete_file_reader(reader);
} }
uio_fclose(fp); fclose(fp);
} }
return result; return result;
} }
@@ -509,7 +507,7 @@ MODULE* Player_LoadGeneric(MREADER *reader,int maxchan,BOOL curious)
/* Loads a module given a file pointer. /* Loads a module given a file pointer.
File is loaded from the current file seek position. */ File is loaded from the current file seek position. */
MODULE* Player_LoadFP(uio_Stream* fp,int maxchan,BOOL curious) MODULE* Player_LoadFP(FILE* fp,int maxchan,BOOL curious)
{ {
MODULE* result=NULL; MODULE* result=NULL;
struct MREADER* reader=_mm_new_file_reader (fp); struct MREADER* reader=_mm_new_file_reader (fp);
@@ -523,36 +521,16 @@ MODULE* Player_LoadFP(uio_Stream* fp,int maxchan,BOOL curious)
/* Open a module via its filename. The loader will initialize the specified /* Open a module via its filename. The loader will initialize the specified
song-player 'player'. */ song-player 'player'. */
MODULE* Player_Load(uio_DirHandle *dir,CHAR* filename,int maxchan,BOOL curious) MODULE* Player_Load(CHAR* filename,int maxchan,BOOL curious)
{ {
uio_Stream *fp; FILE *fp;
MODULE *mf=NULL; MODULE *mf=NULL;
if((fp=_mm_fopen(dir, filename,"rb"))) { if((fp=_mm_fopen(filename,"rb"))) {
mf=Player_LoadFP(fp,maxchan,curious); mf=Player_LoadFP(fp,maxchan,curious);
uio_fclose(fp); fclose(fp);
} }
return mf; return mf;
} }
/* SDL_RWops compatability */
#ifdef USE_RWOPS
/* Open a module via an SDL_rwop. The loader will initialize the specified
song-player 'player'. */
MODULE* Player_LoadRW(SDL_RWops *rw,int maxchan,BOOL curious)
{
MODULE* result=NULL;
struct MREADER* reader=_mm_new_rwops_reader (rw);
if (reader) {
result=Player_LoadGeneric(reader,maxchan,curious);
_mm_delete_rwops_reader(reader);
}
return result;
}
#endif /* USE_RWOPS */
/* End SDL_RWops compatability */
/* ex:set ts=4: */ /* ex:set ts=4: */
+20 -100
View File
@@ -62,103 +62,23 @@
static long _mm_iobase=0,temp_iobase=0; static long _mm_iobase=0,temp_iobase=0;
/* FILE* _mm_fopen(CHAR* fname,CHAR* attrib)
This section is added to use SDL_rwops for IO
-Matt Campbell (matt@campbellhome.dhs.org) April 2000
*/
#ifdef USE_RWOPS
typedef struct MRWOPSREADER {
MREADER core;
SDL_RWops* rw;
int end;
} MRWOPSREADER;
static BOOL _mm_RWopsReader_Eof(MREADER* reader)
{ {
if ( ((MRWOPSREADER*)reader)->end == FILE *fp;
SDL_RWtell(((MRWOPSREADER*)reader)->rw) ) return 1;
else return 0;
}
static BOOL _mm_RWopsReader_Read(MREADER* reader,void* ptr,size_t size) if(!(fp=fopen(fname,attrib))) {
{
return SDL_RWread(((MRWOPSREADER*)reader)->rw, ptr, size, 1);
}
static int _mm_RWopsReader_Get(MREADER* reader)
{
char buf;
if ( SDL_RWread(((MRWOPSREADER*)reader)->rw, &buf, 1, 1) != 1 ) return EOF;
else return (int)buf;
}
static BOOL _mm_RWopsReader_Seek(MREADER* reader,long offset,int whence)
{
return SDL_RWseek(((MRWOPSREADER*)reader)->rw,
(whence==SEEK_SET)?offset+_mm_iobase:offset,whence);
}
static long _mm_RWopsReader_Tell(MREADER* reader)
{
return SDL_RWtell(((MRWOPSREADER*)reader)->rw) - _mm_iobase;
}
MREADER *_mm_new_rwops_reader(SDL_RWops * rw)
{
int here;
MRWOPSREADER* reader=(MRWOPSREADER*)_mm_malloc(sizeof(MRWOPSREADER));
if (reader) {
reader->core.Eof =&_mm_RWopsReader_Eof;
reader->core.Read=&_mm_RWopsReader_Read;
reader->core.Get =&_mm_RWopsReader_Get;
reader->core.Seek=&_mm_RWopsReader_Seek;
reader->core.Tell=&_mm_RWopsReader_Tell;
reader->rw=rw;
/* RWops does not explicitly support an eof check, so we shall find
the end manually - this requires seek support for the RWop */
here = SDL_RWtell(rw);
reader->end = SDL_RWseek(rw, 0, SEEK_END);
SDL_RWseek(rw, here, SEEK_SET); /* Move back */
}
return (MREADER*)reader;
}
void _mm_delete_rwops_reader (MREADER* reader)
{
if(reader) free(reader);
}
#endif /* USE_RWOPS */
/*
End SDL_rwops section
*/
uio_Stream* _mm_fopen(uio_DirHandle* dir,CHAR* fname,CHAR* attrib)
{
uio_Stream *fp;
if(!(fp=uio_fopen(dir,fname,attrib))) {
_mm_errno = MMERR_OPENING_FILE; _mm_errno = MMERR_OPENING_FILE;
if(_mm_errorhandler) _mm_errorhandler(); if(_mm_errorhandler) _mm_errorhandler();
} }
return fp; return fp;
} }
BOOL _mm_FileExists(uio_DirHandle* dir,CHAR* fname) BOOL _mm_FileExists(CHAR* fname)
{ {
uio_Stream *fp; FILE *fp;
if(!(fp=uio_fopen(dir, fname,"rb"))) return 0; if(!(fp=fopen(fname,"r"))) return 0;
uio_fclose(fp); fclose(fp);
return 1; return 1;
} }
@@ -180,36 +100,36 @@ void _mm_iobase_revert(void)
typedef struct MFILEREADER { typedef struct MFILEREADER {
MREADER core; MREADER core;
uio_Stream* file; FILE* file;
} MFILEREADER; } MFILEREADER;
static BOOL _mm_FileReader_Eof(MREADER* reader) static BOOL _mm_FileReader_Eof(MREADER* reader)
{ {
return uio_feof(((MFILEREADER*)reader)->file); return feof(((MFILEREADER*)reader)->file);
} }
static BOOL _mm_FileReader_Read(MREADER* reader,void* ptr,size_t size) static BOOL _mm_FileReader_Read(MREADER* reader,void* ptr,size_t size)
{ {
return uio_fread(ptr,size,1,((MFILEREADER*)reader)->file); return fread(ptr,size,1,((MFILEREADER*)reader)->file);
} }
static int _mm_FileReader_Get(MREADER* reader) static int _mm_FileReader_Get(MREADER* reader)
{ {
return uio_fgetc(((MFILEREADER*)reader)->file); return fgetc(((MFILEREADER*)reader)->file);
} }
static BOOL _mm_FileReader_Seek(MREADER* reader,long offset,int whence) static BOOL _mm_FileReader_Seek(MREADER* reader,long offset,int whence)
{ {
return uio_fseek(((MFILEREADER*)reader)->file, return fseek(((MFILEREADER*)reader)->file,
(whence==SEEK_SET)?offset+_mm_iobase:offset,whence); (whence==SEEK_SET)?offset+_mm_iobase:offset,whence);
} }
static long _mm_FileReader_Tell(MREADER* reader) static long _mm_FileReader_Tell(MREADER* reader)
{ {
return uio_ftell(((MFILEREADER*)reader)->file)-_mm_iobase; return ftell(((MFILEREADER*)reader)->file)-_mm_iobase;
} }
MREADER *_mm_new_file_reader(uio_Stream* fp) MREADER *_mm_new_file_reader(FILE* fp)
{ {
MFILEREADER* reader=(MFILEREADER*)_mm_malloc(sizeof(MFILEREADER)); MFILEREADER* reader=(MFILEREADER*)_mm_malloc(sizeof(MFILEREADER));
if (reader) { if (reader) {
@@ -232,30 +152,30 @@ void _mm_delete_file_reader (MREADER* reader)
typedef struct MFILEWRITER { typedef struct MFILEWRITER {
MWRITER core; MWRITER core;
uio_Stream* file; FILE* file;
} MFILEWRITER; } MFILEWRITER;
static BOOL _mm_FileWriter_Seek(MWRITER* writer,long offset,int whence) static BOOL _mm_FileWriter_Seek(MWRITER* writer,long offset,int whence)
{ {
return uio_fseek(((MFILEWRITER*)writer)->file,offset,whence); return fseek(((MFILEWRITER*)writer)->file,offset,whence);
} }
static long _mm_FileWriter_Tell(MWRITER* writer) static long _mm_FileWriter_Tell(MWRITER* writer)
{ {
return uio_ftell(((MFILEWRITER*)writer)->file); return ftell(((MFILEWRITER*)writer)->file);
} }
static BOOL _mm_FileWriter_Write(MWRITER* writer,void* ptr,size_t size) static BOOL _mm_FileWriter_Write(MWRITER* writer,void* ptr,size_t size)
{ {
return (uio_fwrite(ptr,size,1,((MFILEWRITER*)writer)->file)==size); return (fwrite(ptr,size,1,((MFILEWRITER*)writer)->file)==size);
} }
static BOOL _mm_FileWriter_Put(MWRITER* writer,int value) static BOOL _mm_FileWriter_Put(MWRITER* writer,int value)
{ {
return uio_fputc(value,((MFILEWRITER*)writer)->file); return fputc(value,((MFILEWRITER*)writer)->file);
} }
MWRITER *_mm_new_file_writer(uio_Stream* fp) MWRITER *_mm_new_file_writer(FILE* fp)
{ {
MFILEWRITER* writer=(MFILEWRITER*)_mm_malloc(sizeof(MFILEWRITER)); MFILEWRITER* writer=(MFILEWRITER*)_mm_malloc(sizeof(MFILEWRITER));
if (writer) { if (writer) {
@@ -143,7 +143,7 @@ SAMPLE* Sample_LoadGeneric(MREADER* reader)
return result; return result;
} }
SAMPLE* Sample_LoadFP(uio_Stream *fp) SAMPLE* Sample_LoadFP(FILE *fp)
{ {
SAMPLE* result=NULL; SAMPLE* result=NULL;
MREADER* reader; MREADER* reader;
@@ -155,15 +155,15 @@ SAMPLE* Sample_LoadFP(uio_Stream *fp)
return result; return result;
} }
SAMPLE* Sample_Load(uio_DirHandle* dir,CHAR* filename) SAMPLE* Sample_Load(CHAR* filename)
{ {
uio_Stream *fp; FILE *fp;
SAMPLE *si=NULL; SAMPLE *si=NULL;
if(!(md_mode & DMODE_SOFT_SNDFX)) return NULL; if(!(md_mode & DMODE_SOFT_SNDFX)) return NULL;
if((fp=_mm_fopen(dir,filename,"rb"))) { if((fp=_mm_fopen(filename,"rb"))) {
si = Sample_LoadFP(fp); si = Sample_LoadFP(fp);
uio_fclose(fp); fclose(fp);
} }
return si; return si;
} }