aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorMax Horn2007-03-08 16:57:14 +0000
committerMax Horn2007-03-08 16:57:14 +0000
commit47bc9aae19190b66af0cf66c19f6f664cdb9cde0 (patch)
treeba5b239db63d701acc626e10de7018ef2152abe2 /common
parent273480d49253cc5a353a76a46da635aaeb779b8c (diff)
downloadscummvm-rg350-47bc9aae19190b66af0cf66c19f6f664cdb9cde0.tar.gz
scummvm-rg350-47bc9aae19190b66af0cf66c19f6f664cdb9cde0.tar.bz2
scummvm-rg350-47bc9aae19190b66af0cf66c19f6f664cdb9cde0.zip
Moving Nintendo DS std C I/O emulation wrappers to common/file.cpp; also add a FIXME comment (why is assert redefined in ds-fs.h ?)
svn-id: r26020
Diffstat (limited to 'common')
-rw-r--r--common/file.cpp72
1 files changed, 72 insertions, 0 deletions
diff --git a/common/file.cpp b/common/file.cpp
index d0538b2bb6..8e9d94eb45 100644
--- a/common/file.cpp
+++ b/common/file.cpp
@@ -52,6 +52,78 @@
#define fsize(a) ps2_fsize(a)
#endif
+#ifdef __DS__
+
+ struct fileHandle {
+ int pos;
+ bool used;
+ char* data;
+ int size;
+
+ DSSaveFile* sramFile;
+ };
+
+ // These functions replease the standard library functions of the same name.
+ // As this header is included after the standard one, I have the chance to #define
+ // all of these to my own code.
+ //
+ // A #define is the only way, as redefinig the functions would cause linker errors.
+
+ // These functions need to be #undef'ed, as their original definition
+ // in devkitarm is done with #includes (ugh!)
+ #undef feof
+ #undef stderr
+ #undef stdout
+ #undef stdin
+ #undef clearerr
+ #undef getc
+ #undef ferror
+
+ #define stdout ((DS::fileHandle*) -1)
+ #define stderr ((DS::fileHandle*) -2)
+ #define stdin ((DS::fileHandle*) -3)
+
+ #define FILE DS::fileHandle
+ //#define size_t int
+
+ //#define FAT_chdir FAT_CWD
+
+ FILE* std_fopen(const char* name, const char* mode);
+ void std_fclose(FILE* handle);
+ size_t std_fread(const void* ptr, size_t size, size_t numItems, FILE* handle);
+ size_t std_fwrite(const void* ptr, size_t size, size_t numItems, FILE* handle);
+ void std_fprintf(FILE* handle, const char* fmt, ...);
+ bool std_feof(FILE* handle);
+ void std_fflush(FILE* handle);
+ char* std_fgets(char* str, int size, FILE* file);
+ long int std_ftell(FILE* handle);
+ int std_fseek(FILE* handle, long int offset, int whence);
+ void std_clearerr(FILE* handle);
+ int std_getc(FILE* handle);
+ char* std_getcwd(char* dir, int dunno);
+ void std_cwd(char* dir);
+ int std_ferror(FILE* handle);
+
+ // Only functions used in the ScummVM source have been defined here!
+ #define fopen(name, mode) DS::std_fopen(name, mode)
+ #define fclose(handle) DS::std_fclose(handle)
+ #define fread(ptr, size, items, file) DS::std_fread(ptr, size, items, file)
+ #define fwrite(ptr, size, items, file) DS::std_fwrite(ptr, size, items, file)
+ #define feof(handle) DS::std_feof(handle)
+ //#define fprintf(file, fmt, ...) DS::fprintf(file, fmt, ##__VA_ARGS__)
+ #define fprintf(file, fmt, ...) { char str[128]; sprintf(str, fmt, ##__VA_ARGS__); DS::std_fwrite(str, strlen(str), 1, file); }
+ #define printf(fmt, ...) consolePrintf(fmt, ##__VA_ARGS__)
+ #define fflush(file) DS::std_fflush(file)
+ #define fgets(str, size, file) DS::std_fgets(str, size, file)
+ #define ftell(handle) DS::std_ftell(handle)
+ #define fseek(handle, offset, whence) DS::std_fseek(handle, offset, whence)
+ #define clearerr(handle) DS::std_clearerr(handle)
+ #define getc(handle) DS::std_getc(handle)
+ #define getcwd(dir, dunno) DS::std_getcwd(dir, dunno)
+ #define ferror(handle) DS::std_ferror(handle)
+
+#endif
+
namespace Common {