source: cpp/frams/virtfile/virtfile.cpp @ 196

Last change on this file since 196 was 131, checked in by Maciej Komosinski, 11 years ago

a better way to save/restore a preprocessor macro, unfortunately not a c++ standard (yet?)

  • Property svn:eol-style set to native
File size: 3.1 KB
RevLine 
[121]1// This file is a part of the Framsticks GDK.
2// Copyright (C) 2002-2014  Maciej Komosinski and Szymon Ulatowski.  See LICENSE.txt for details.
[109]3// Refer to http://www.framsticks.com/ for further information.
4
5#include "virtfile.h"
6
7VirtFILE *VirtFILE::Vstdin=0;
8VirtFILE *VirtFILE::Vstdout=0;
9VirtFILE *VirtFILE::Vstderr=0;
10
11VirtFileSystem *VirtFILE::vfs=0;
12
13VirtFILE *Vfopen(const char* path,const char*mode)
14{
15return VirtFILE::vfs ? VirtFILE::vfs->Vfopen(path,mode) : 0;
16}
17
18VirtDIR *Vopendir(const char* path)
19{
20return VirtFILE::vfs ? VirtFILE::vfs->Vopendir(path) : 0;
21}
22
23int Vfexists(const char* path)
24{
25return VirtFILE::vfs ? VirtFILE::vfs->Vfexists(path) : 0;
26}
27
28VirtFILE::~VirtFILE()
29{}
30
31void VirtFILE::selectFileSystem(VirtFileSystem *s) {vfs=s;}
32
33int VirtFILE::printf(const char *format, ...)
34{
35int ret; va_list argptr;
36va_start(argptr,format);
37ret=Vprintf(format,argptr);
38va_end(argptr);
39return ret;
40}
41
42void VirtFILE::setVstdin(VirtFILE *f) {Vstdin=f;}
43void VirtFILE::setVstdout(VirtFILE *f) {Vstdout=f;}
44void VirtFILE::setVstderr(VirtFILE *f) {Vstderr=f;}
45VirtFILE* VirtFILE::getVstdin() {return Vstdin;}
46VirtFILE* VirtFILE::getVstdout() {return Vstdout;}
47VirtFILE* VirtFILE::getVstderr() {return Vstderr;}
48//////////////////////////////////////////////////////////////////////////
49
50VirtFILE* VirtFileSystem::Vfopen(const char* path,const char*mode) {return 0;}
51int VirtFileSystem::Vfexists(const char* path) {return 0;}
52VirtDIR* VirtFileSystem::Vopendir(const char* path) {return 0;}
53
54//////////////////////////////////////////////////////////////////////////
55
56
57
58int fread(void *ptr, size_t size, size_t nmemb, VirtFILE* f) {return f->Vread(ptr,size,nmemb);}
59int fwrite(const void *ptr, size_t size, size_t nmemb, VirtFILE* f) {return f->Vwrite(ptr,size,nmemb);}
[123]60
[131]61
62//since we want our own feof(VirtFILE*) function and some systems unfortunately define feof as a macro, we need to #undef it. Same as in virtfile.h
63#if defined _MSC_VER || defined __CYGWIN__ || defined SHP
64 #pragma push_macro("feof")
[123]65 #undef feof
66#endif
[131]67#if defined __BORLANDC__ //does not support #pragma push_macro/pop_macro
68 #undef feof
69#endif
[123]70
71int feof(VirtFILE* f) {return f->Veof();}
72
73//...and then restore the original macro:
[131]74#if defined _MSC_VER || defined __CYGWIN__ || defined SHP
75 #pragma pop_macro("feof")
76#endif
[109]77#ifdef __BORLANDC__
[123]78 #define feof(__f)     ((__f)->flags & _F_EOF)
[109]79#endif
80
[123]81
[109]82int fputc(int c,VirtFILE* f) {return f->Vputc(c);}
83int fputs(const char *s,VirtFILE* f) {return f->Vputs(s);}
84int fgetc(VirtFILE* f) {return f->Vgetc();}
85int fseek(VirtFILE* f,long offset, int whence) {return f->Vseek(offset,whence);}
86int ftell(VirtFILE* f) {return f->Vtell();}
87void rewind(VirtFILE* f) {f->Vrewind();}
88int fflush(VirtFILE* f) {return f->Vflush();}
89char *fgets(char *s, int size, VirtFILE* f) {return f->Vgets(s,size);}
90int fprintf(VirtFILE* f,const char *format, ...)
91        {
92        int ret; va_list argptr;
93        va_start(argptr,format);
94        ret=f->Vprintf(format,argptr);
95        va_end(argptr);
96        return ret;
97        }
98int fclose(VirtFILE* f) {delete f; return 0;}
99
100int closedir(VirtDIR* d) {delete d; return 0;}
101dirent* readdir(VirtDIR* d) {return d->Vreaddir();}
[123]102
Note: See TracBrowser for help on using the repository browser.