source: cpp/frams/virtfile/stdiofile.h @ 295

Last change on this file since 295 was 295, checked in by Maciej Komosinski, 10 years ago

Reorganizations and extensions of directory/file/filesystem IO classes

  • Property svn:eol-style set to native
File size: 3.0 KB
RevLine 
[286]1// This file is a part of Framsticks SDK.  http://www.framsticks.com/
2// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
3// See LICENSE.txt for details.
[109]4
5#ifndef _STDIOFILE_H_
6#define _STDIOFILE_H_
7
8#include "virtfile.h"
9#include <frams/util/sstring.h>
[206]10#include <common/nonstd_stdio.h>
[109]11#include <common/nonstd_dir.h>
12
[281]13class StdioFileSystem : public VirtFileSystem
[109]14{
15public:
[281]16        VirtFILE *Vfopen(const char *path, const char *mode);
[295]17        bool Vfexists(const char* path);
[281]18        VirtDIR *Vopendir(const char* path);
[295]19        bool Vmkdir(const char* path) { return makeDirectory(path); }
20        bool Vdirexists(const char* path,bool is_writable) { return directoryExists(path,is_writable); }
[109]21};
22
[206]23#ifdef USE_MFILE
[281]24class StdioFILE : public VirtFILE
[109]25{
[281]26protected:
27        MFILE *file;
28public:
[295]29        StdioFILE(MFILE *f):VirtFILE("") { file = f; }
30        StdioFILE(MFILE *f, const SString& p):VirtFILE(p) { file = f; }
[281]31        static void setStdio();
32        size_t Vread(void *ptr, size_t size, size_t nmemb) { return mfread(ptr, size, nmemb, file); }
33        size_t Vwrite(const void *ptr, size_t size, size_t nmemb) { return mfwrite(ptr, size, nmemb, file); }
34        int Veof() { return mfeof(file); }
35        int Vputs(const char *s) { return mfputs(s, file); }
36        char *Vgets(char *s, int size) { return mfgets(s, size, file); }
37        int Vseek(long offset, int whence) { return mfseek(file, offset, whence); }
38        long Vtell() { return mftell(file); }
39        int Vflush() { return 0; /*NOT IMPLEMENTED!*/ }
[206]40
[281]41        ~StdioFILE() { if (file) mfclose(file); }
[206]42};
43#else
[281]44class StdioFILE : public VirtFILE
[206]45{
[281]46protected:
47        FILE *file;
48public:
[295]49        StdioFILE(FILE *f):VirtFILE("") { file = f; }
50        StdioFILE(FILE *f, const SString& p):VirtFILE(p) { file = f; }
[281]51        static void setStdio();
52        size_t Vread(void *ptr, size_t size, size_t nmemb) { return fread(ptr, size, nmemb, file); }
53        size_t Vwrite(const void *ptr, size_t size, size_t nmemb) { return fwrite(ptr, size, nmemb, file); }
54        int Veof() { return feof(file); }
55        int Vputc(int c) { return fputc(c, file); }
56        int Vputs(const char *s) { return fputs(s, file); }
57        int Vgetc() { return fgetc(file); }
58        char *Vgets(char *s, int size) { return fgets(s, size, file); }
59        int Vprintf(const char *format, va_list args) { return vfprintf(file, format, args); }
60        int Vseek(long offset, int whence) { return fseek(file, offset, whence); }
61        long Vtell() { return ftell(file); }
62        void Vrewind() { rewind(file); }
63        int Vflush() { return fflush(file); }
[109]64
[281]65        ~StdioFILE() { if (file) fclose(file); }
[109]66};
[206]67#endif
[109]68
[281]69
70#ifdef _WIN32
71#ifdef __BORLANDC__
72 typedef wDIR DIRTYPE;
73#else
74 typedef WDIR DIRTYPE;
75#endif
76#else
77 typedef DIR DIRTYPE;
78#endif
79
80class StdioDIR : public VirtDIR
[109]81{
[281]82        DIRTYPE *dir;
83#ifdef _WIN32
84        dirent de; //only used to convert wide string names (wdirent) to utf8 (dirent)
85#endif
86public:
87        StdioDIR(DIRTYPE *d) : dir(d) {}
88        ~StdioDIR()
89        {
90#ifdef _WIN32
91                if (dir) wclosedir(dir);
92#else
93                if (dir) closedir(dir);
94#endif
95        }
96        dirent* Vreaddir();
[109]97};
98
[281]99class StdioFILEDontClose : public StdioFILE
[109]100{
[281]101public:
[206]102#ifdef USE_MFILE
[281]103        StdioFILEDontClose(MFILE *f) : StdioFILE(f) {}
[206]104#else
[281]105        StdioFILEDontClose(FILE *f) : StdioFILE(f) {}
[206]106#endif
[281]107        ~StdioFILEDontClose() { file = 0; }
[109]108};
109
110#endif
[281]111
Note: See TracBrowser for help on using the repository browser.