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 <stdlib.h>
#include "port.h"
#include "libs/uio.h"
#ifdef __cplusplus
extern "C" {
@@ -326,8 +324,8 @@ typedef struct SAMPLE {
/* Sample functions */
MIKMODAPI extern SAMPLE *Sample_Load(uio_DirHandle*,CHAR*);
MIKMODAPI extern SAMPLE *Sample_LoadFP(uio_Stream*);
MIKMODAPI extern SAMPLE *Sample_Load(CHAR*);
MIKMODAPI extern SAMPLE *Sample_LoadFP(FILE*);
MIKMODAPI extern SAMPLE *Sample_LoadGeneric(MREADER*);
MIKMODAPI extern void Sample_Free(SAMPLE*);
MIKMODAPI extern SBYTE Sample_Play(SAMPLE*,ULONG,UBYTE);
@@ -523,17 +521,10 @@ MIKMODAPI extern struct MLOADER load_xm; /* FastTracker 2 (by Triton) */
* ========== Module player
*/
/* SDL_RWops compatability */
#ifdef USE_RWOPS
#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_Load(CHAR*,int,BOOL);
MIKMODAPI extern MODULE* Player_LoadFP(FILE*,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_Start(MODULE*);
MIKMODAPI extern BOOL Player_Active(void);
@@ -33,13 +33,11 @@
#include <malloc.h>
#endif
#include <stdarg.h>
//#if defined(__OS2__)||defined(__EMX__)||defined(WIN32)
//#define strcasecmp(s,t) stricmp(s,t)
//#endif
#if defined(__OS2__)||defined(__EMX__)||defined(_MSC_VER)
#define strcasecmp(s,t) stricmp(s,t)
#endif
#include "mikmod_build.h"
#include "port.h"
#include "libs/uio.h"
#ifdef macintosh
#ifndef __MWERKS__
@@ -139,20 +137,13 @@ DECLARE_MUTEX(vars);
/*========== Portable file I/O */
/* SDL_RWops compatability */
#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 MREADER* _mm_new_file_reader(FILE* fp);
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 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_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_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 int _mm_read_string (CHAR*,int,MREADER*);
@@ -32,8 +32,6 @@
#include <string.h>
#include "mikmod_internals.h"
#include "port.h"
#include "libs/uio.h"
MREADER *modreader;
@@ -374,20 +372,20 @@ static CHAR* Player_LoadTitle_internal(MREADER *reader)
return l->LoadTitle();
}
CHAR* Player_LoadTitle(uio_DirHandle *dir, CHAR* filename)
CHAR* Player_LoadTitle(CHAR* filename)
{
CHAR* result=NULL;
uio_Stream* fp;
FILE* fp;
MREADER* reader;
if((fp=_mm_fopen(dir, filename,"rb"))) {
if((fp=_mm_fopen(filename,"rb"))) {
if((reader=_mm_new_file_reader(fp))) {
MUTEX_LOCK(lists);
result=Player_LoadTitle_internal(reader);
MUTEX_UNLOCK(lists);
_mm_delete_file_reader(reader);
}
uio_fclose(fp);
fclose(fp);
}
return result;
}
@@ -509,7 +507,7 @@ MODULE* Player_LoadGeneric(MREADER *reader,int maxchan,BOOL curious)
/* Loads a module given a file pointer.
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;
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
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;
if((fp=_mm_fopen(dir, filename,"rb"))) {
if((fp=_mm_fopen(filename,"rb"))) {
mf=Player_LoadFP(fp,maxchan,curious);
uio_fclose(fp);
fclose(fp);
}
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: */
+22 -102
View File
@@ -62,103 +62,23 @@
static long _mm_iobase=0,temp_iobase=0;
/*
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)
FILE* _mm_fopen(CHAR* fname,CHAR* attrib)
{
if ( ((MRWOPSREADER*)reader)->end ==
SDL_RWtell(((MRWOPSREADER*)reader)->rw) ) return 1;
else return 0;
}
FILE *fp;
static BOOL _mm_RWopsReader_Read(MREADER* reader,void* ptr,size_t size)
{
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))) {
if(!(fp=fopen(fname,attrib))) {
_mm_errno = MMERR_OPENING_FILE;
if(_mm_errorhandler) _mm_errorhandler();
}
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;
uio_fclose(fp);
if(!(fp=fopen(fname,"r"))) return 0;
fclose(fp);
return 1;
}
@@ -179,37 +99,37 @@ void _mm_iobase_revert(void)
/*========== File Reader */
typedef struct MFILEREADER {
MREADER core;
uio_Stream* file;
MREADER core;
FILE* file;
} MFILEREADER;
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)
{
return uio_fread(ptr,size,1,((MFILEREADER*)reader)->file);
return fread(ptr,size,1,((MFILEREADER*)reader)->file);
}
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)
{
return uio_fseek(((MFILEREADER*)reader)->file,
return fseek(((MFILEREADER*)reader)->file,
(whence==SEEK_SET)?offset+_mm_iobase:offset,whence);
}
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));
if (reader) {
@@ -231,31 +151,31 @@ void _mm_delete_file_reader (MREADER* reader)
/*========== File Writer */
typedef struct MFILEWRITER {
MWRITER core;
uio_Stream* file;
MWRITER core;
FILE* file;
} MFILEWRITER;
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)
{
return uio_ftell(((MFILEWRITER*)writer)->file);
return ftell(((MFILEWRITER*)writer)->file);
}
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)
{
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));
if (writer) {
@@ -143,7 +143,7 @@ SAMPLE* Sample_LoadGeneric(MREADER* reader)
return result;
}
SAMPLE* Sample_LoadFP(uio_Stream *fp)
SAMPLE* Sample_LoadFP(FILE *fp)
{
SAMPLE* result=NULL;
MREADER* reader;
@@ -155,15 +155,15 @@ SAMPLE* Sample_LoadFP(uio_Stream *fp)
return result;
}
SAMPLE* Sample_Load(uio_DirHandle* dir,CHAR* filename)
SAMPLE* Sample_Load(CHAR* filename)
{
uio_Stream *fp;
FILE *fp;
SAMPLE *si=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);
uio_fclose(fp);
fclose(fp);
}
return si;
}