source: cpp/frams/virtfile/virtfile.h @ 282

Last change on this file since 282 was 247, checked in by Maciej Komosinski, 9 years ago

Sources support both 32-bit and 64-bit, and more compilers

  • Property svn:eol-style set to native
File size: 3.4 KB
Line 
1// This file is a part of the Framsticks GDK.
2// Copyright (C) 1999-2014  Maciej Komosinski and Szymon Ulatowski.  See LICENSE.txt for details.
3// Refer to http://www.framsticks.com/ for further information.
4
5#ifndef _VIRTFILE_H_
6#define _VIRTFILE_H_
7
8#include <stdio.h>
9#include <stdarg.h>
10#include <common/nonstd_dir.h>
11//#include <dirent.h> //to jest inkludowane przez powyzsze
12//struct dirent; //kiedys byla ta linia jak nie bylo jeszcze implementacji windowsowej dirent, ale borlandowi sie nie podoba jak s¹ obie
13
14#ifdef DLLEXPORTACTIVE  //tylko w tym pliku uzyte
15#define DLLEXP __declspec(dllexport)
16#else
17#define DLLEXP
18#endif
19
20class DLLEXP VirtFileSystem;
21
22class DLLEXP VirtFILE
23{
24  public:
25virtual size_t Vread(void *ptr, size_t size, size_t nmemb)=0;
26virtual size_t Vwrite(const void *ptr, size_t size, size_t nmemb)=0;
27virtual int Veof()=0;
28virtual int Vputc(int c) {unsigned char data=(unsigned char)c; return (Vwrite(&data,1,1)==1)?data:EOF;}
29virtual int Vputs(const char *s)=0;
30virtual int Vgetc() {unsigned char data; if (Vread(&data,1,1)==1) return data; else return EOF;}
31virtual int Vseek(long offset, int whence)=0;
32virtual long Vtell()=0;
33virtual void Vrewind() {Vseek(0,SEEK_SET);}
34virtual int Vflush()=0;
35virtual char *Vgets(char *s, int size)=0;
36virtual int Vprintf(const char *format, va_list args);
37int printf(const char *format, ...);
38virtual const char *VgetPath() {return 0;} // 0=unspecified path
39virtual int getSize();
40virtual ~VirtFILE();
41static VirtFILE *Vstdin,*Vstdout,*Vstderr;
42static void setVstdin(VirtFILE *);
43static void setVstdout(VirtFILE *);
44static void setVstderr(VirtFILE *);
45static VirtFILE* getVstdin();
46static VirtFILE* getVstdout();
47static VirtFILE* getVstderr();
48static VirtFileSystem *vfs;
49static void selectFileSystem(VirtFileSystem *s);
50};
51
52class DLLEXP VirtDIR
53{
54  public:
55virtual ~VirtDIR() {}
56virtual dirent* Vreaddir() {return 0;}
57};
58
59class DLLEXP VirtFileSystem
60{
61public:
62virtual VirtFILE *Vfopen(const char* path,const char*mode);
63virtual int Vfexists(const char* path);
64virtual VirtDIR *Vopendir(const char* path);
65};
66
67DLLEXP VirtFILE *Vfopen(const char* path,const char*mode);
68DLLEXP VirtDIR *Vopendir(const char* path);
69DLLEXP int Vfexists(const char* path);
70
71DLLEXP int fread(void *ptr, size_t size, size_t nmemb, VirtFILE* f);
72DLLEXP int fwrite(const void *ptr, size_t size, size_t nmemb, VirtFILE* f);
73
74
75//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.cpp
76#if defined _MSC_VER || defined __CYGWIN__ || defined SHP || defined __ANDROID__
77 #pragma push_macro("feof")
78 #undef feof
79#endif
80#if defined __BORLANDC__ //does not support #pragma push_macro/pop_macro
81 #undef feof
82#endif
83 
84DLLEXP int feof(VirtFILE* f);// {return f->Veof();}
85
86//...and then restore the original macro:
87#if defined _MSC_VER || defined __CYGWIN__ || defined SHP || defined __ANDROID__
88 #pragma pop_macro("feof")
89#endif
90#if defined __BORLANDC__
91 #define feof(__f)     ((__f)->flags & _F_EOF)
92#endif
93
94
95DLLEXP int fputc(int c,VirtFILE* f);
96DLLEXP int fputs(const char *s,VirtFILE* f);
97DLLEXP int fgetc(VirtFILE* f);
98DLLEXP int fseek(VirtFILE* f,long offset, int whence);
99DLLEXP int ftell(VirtFILE* f);
100DLLEXP void rewind(VirtFILE* f);
101DLLEXP int fflush(VirtFILE* f);
102DLLEXP char *fgets(char *s, int size, VirtFILE* f);
103DLLEXP int fprintf(VirtFILE* f,const char *format, ...);
104DLLEXP int fclose(VirtFILE* f);
105
106DLLEXP dirent* readdir(VirtDIR* d);
107DLLEXP int closedir(VirtDIR* d);
108
109#endif
110
Note: See TracBrowser for help on using the repository browser.