#include "lisp/lisp.hpp"
#include "lisp/parser.hpp"
#include "obstack/obstackpp.hpp"
-#include "physfs/physfs_stream.hpp"
+#include "physfs/ifile_stream.hpp"
+#include "physfs/ifile_streambuf.hpp"
#include "tinygettext/tinygettext.hpp"
#include "supertux/gameconfig.hpp"
#include "lisp/writer.hpp"
-#include "physfs/physfs_stream.hpp"
+#include "physfs/ofile_stream.hpp"
#include "util/log.hpp"
namespace lisp {
--- /dev/null
+// SuperTux
+// Copyright (C) 2006 Matthias Braun <matze@braunis.de>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+#include "physfs/ifile_stream.hpp"
+
+#include "physfs/ifile_streambuf.hpp"
+
+IFileStream::IFileStream(const std::string& filename) :
+ std::istream(new IFileStreambuf(filename))
+{
+}
+
+IFileStream::~IFileStream()
+{
+ delete rdbuf();
+}
+
+/* EOF */
--- /dev/null
+// SuperTux
+// Copyright (C) 2006 Matthias Braun <matze@braunis.de>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+#ifndef HEADER_SUPERTUX_PHYSFS_IFILE_STREAM_HPP
+#define HEADER_SUPERTUX_PHYSFS_IFILE_STREAM_HPP
+
+#include <istream>
+#include <physfs.h>
+
+class IFileStream : public std::istream
+{
+public:
+ IFileStream(const std::string& filename);
+ ~IFileStream();
+};
+
+#endif
+
+/* EOF */
--- /dev/null
+// SuperTux
+// Copyright (C) 2006 Matthias Braun <matze@braunis.de>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+#include "physfs/ifile_streambuf.hpp"
+
+#include <stdexcept>
+#include <sstream>
+
+IFileStreambuf::IFileStreambuf(const std::string& filename) :
+ file()
+{
+ // check this as PHYSFS seems to be buggy and still returns a
+ // valid pointer in this case
+ if(filename == "") {
+ throw std::runtime_error("Couldn't open file: empty filename");
+ }
+ file = PHYSFS_openRead(filename.c_str());
+ if(file == 0) {
+ std::stringstream msg;
+ msg << "Couldn't open file '" << filename << "': "
+ << PHYSFS_getLastError();
+ throw std::runtime_error(msg.str());
+ }
+}
+
+IFileStreambuf::~IFileStreambuf()
+{
+ PHYSFS_close(file);
+}
+
+int
+IFileStreambuf::underflow()
+{
+ if(PHYSFS_eof(file)) {
+ return traits_type::eof();
+ }
+
+ PHYSFS_sint64 bytesread = PHYSFS_read(file, buf, 1, sizeof(buf));
+ if(bytesread <= 0) {
+ return traits_type::eof();
+ }
+ setg(buf, buf, buf + bytesread);
+
+ return buf[0];
+}
+
+IFileStreambuf::pos_type
+IFileStreambuf::seekpos(pos_type pos, std::ios_base::openmode)
+{
+ if(PHYSFS_seek(file, static_cast<PHYSFS_uint64> (pos)) == 0) {
+ return pos_type(off_type(-1));
+ }
+
+ // the seek invalidated the buffer
+ setg(buf, buf, buf);
+ return pos;
+}
+
+IFileStreambuf::pos_type
+IFileStreambuf::seekoff(off_type off, std::ios_base::seekdir dir,
+ std::ios_base::openmode mode)
+{
+ off_type pos = off;
+ PHYSFS_sint64 ptell = PHYSFS_tell(file);
+
+ switch(dir) {
+ case std::ios_base::beg:
+ break;
+ case std::ios_base::cur:
+ if(off == 0)
+ return static_cast<pos_type> (ptell) - static_cast<pos_type> (egptr() - gptr());
+ pos += static_cast<off_type> (ptell) - static_cast<off_type> (egptr() - gptr());
+ break;
+ case std::ios_base::end:
+ pos += static_cast<off_type> (PHYSFS_fileLength(file));
+ break;
+ default:
+#ifdef DEBUG
+ assert(false);
+#else
+ return pos_type(off_type(-1));
+#endif
+ }
+
+ return seekpos(static_cast<pos_type> (pos), mode);
+}
+
+/* EOF */
--- /dev/null
+// SuperTux
+// Copyright (C) 2006 Matthias Braun <matze@braunis.de>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+#ifndef HEADER_SUPERTUX_PHYSFS_IFILE_STREAMBUF_HPP
+#define HEADER_SUPERTUX_PHYSFS_IFILE_STREAMBUF_HPP
+
+#include <streambuf>
+#include <physfs.h>
+
+/** This class implements a C++ streambuf object for physfs files.
+ * So that you can use normal istream operations on them
+ */
+class IFileStreambuf : public std::streambuf
+{
+public:
+ IFileStreambuf(const std::string& filename);
+ ~IFileStreambuf();
+
+protected:
+ virtual int underflow();
+ virtual pos_type seekoff(off_type pos, std::ios_base::seekdir,
+ std::ios_base::openmode);
+ virtual pos_type seekpos(pos_type pos, std::ios_base::openmode);
+
+private:
+ PHYSFS_file* file;
+ char buf[1024];
+
+private:
+ IFileStreambuf(const IFileStreambuf&);
+ IFileStreambuf& operator=(const IFileStreambuf&);
+};
+
+#endif
+
+/* EOF */
--- /dev/null
+// SuperTux
+// Copyright (C) 2006 Matthias Braun <matze@braunis.de>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+#ifndef HEADER_SUPERTUX_PHYSFS_OFILE_STREAM_CPP
+#define HEADER_SUPERTUX_PHYSFS_OFILE_STREAM_CPP
+
+#include "physfs/ofile_stream.hpp"
+
+#include "physfs/ofile_streambuf.hpp"
+
+OFileStream::OFileStream(const std::string& filename) :
+ std::ostream(new OFileStreambuf(filename))
+{
+}
+
+OFileStream::~OFileStream()
+{
+ delete rdbuf();
+}
+
+#endif
+
+/* EOF */
--- /dev/null
+// SuperTux
+// Copyright (C) 2006 Matthias Braun <matze@braunis.de>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+#ifndef HEADER_SUPERTUX_PHYSFS_OFILE_STREAM_HPP
+#define HEADER_SUPERTUX_PHYSFS_OFILE_STREAM_HPP
+
+#include <ostream>
+#include <physfs.h>
+
+class OFileStream : public std::ostream
+{
+public:
+ OFileStream(const std::string& filename);
+ ~OFileStream();
+};
+
+#endif
+
+/* EOF */
--- /dev/null
+// SuperTux
+// Copyright (C) 2006 Matthias Braun <matze@braunis.de>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+#include "physfs/ofile_streambuf.hpp"
+
+#include <sstream>
+#include <stdexcept>
+
+OFileStreambuf::OFileStreambuf(const std::string& filename) :
+ file()
+{
+ file = PHYSFS_openWrite(filename.c_str());
+ if(file == 0) {
+ std::stringstream msg;
+ msg << "Couldn't open file '" << filename << "': "
+ << PHYSFS_getLastError();
+ throw std::runtime_error(msg.str());
+ }
+
+ setp(buf, buf+sizeof(buf));
+}
+
+OFileStreambuf::~OFileStreambuf()
+{
+ sync();
+ PHYSFS_close(file);
+}
+
+int
+OFileStreambuf::overflow(int c)
+{
+ char c2 = (char)c;
+
+ if(pbase() == pptr())
+ return 0;
+
+ size_t size = pptr() - pbase();
+ PHYSFS_sint64 res = PHYSFS_write(file, pbase(), 1, size);
+ if(res <= 0)
+ return traits_type::eof();
+
+ if(c != traits_type::eof()) {
+ PHYSFS_sint64 res = PHYSFS_write(file, &c2, 1, 1);
+ if(res <= 0)
+ return traits_type::eof();
+ }
+
+ setp(buf, buf + res);
+ return 0;
+}
+
+int
+OFileStreambuf::sync()
+{
+ return overflow(traits_type::eof());
+}
+
+/* EOF */
--- /dev/null
+// SuperTux
+// Copyright (C) 2006 Matthias Braun <matze@braunis.de>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+#ifndef HEADER_SUPERTUX_PHYSFS_OFILE_STREAMBUF_HPP
+#define HEADER_SUPERTUX_PHYSFS_OFILE_STREAMBUF_HPP
+
+#include <streambuf>
+#include <physfs.h>
+
+class OFileStreambuf : public std::streambuf
+{
+public:
+ OFileStreambuf(const std::string& filename);
+ ~OFileStreambuf();
+
+protected:
+ virtual int overflow(int c);
+ virtual int sync();
+
+private:
+ PHYSFS_file* file;
+ char buf[1024];
+
+private:
+ OFileStreambuf(const OFileStreambuf&);
+ OFileStreambuf& operator=(const OFileStreambuf&);
+};
+
+#endif
+
+/* EOF */
+++ /dev/null
-// SuperTux
-// Copyright (C) 2006 Matthias Braun <matze@braunis.de>
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-#include "physfs/physfs_stream.hpp"
-
-#include <config.h>
-
-#include <assert.h>
-#include <sstream>
-#include <stdexcept>
-
-IFileStreambuf::IFileStreambuf(const std::string& filename) :
- file()
-{
- // check this as PHYSFS seems to be buggy and still returns a
- // valid pointer in this case
- if(filename == "") {
- throw std::runtime_error("Couldn't open file: empty filename");
- }
- file = PHYSFS_openRead(filename.c_str());
- if(file == 0) {
- std::stringstream msg;
- msg << "Couldn't open file '" << filename << "': "
- << PHYSFS_getLastError();
- throw std::runtime_error(msg.str());
- }
-}
-
-IFileStreambuf::~IFileStreambuf()
-{
- PHYSFS_close(file);
-}
-
-int
-IFileStreambuf::underflow()
-{
- if(PHYSFS_eof(file)) {
- return traits_type::eof();
- }
-
- PHYSFS_sint64 bytesread = PHYSFS_read(file, buf, 1, sizeof(buf));
- if(bytesread <= 0) {
- return traits_type::eof();
- }
- setg(buf, buf, buf + bytesread);
-
- return buf[0];
-}
-
-IFileStreambuf::pos_type
-IFileStreambuf::seekpos(pos_type pos, std::ios_base::openmode)
-{
- if(PHYSFS_seek(file, static_cast<PHYSFS_uint64> (pos)) == 0) {
- return pos_type(off_type(-1));
- }
-
- // the seek invalidated the buffer
- setg(buf, buf, buf);
- return pos;
-}
-
-IFileStreambuf::pos_type
-IFileStreambuf::seekoff(off_type off, std::ios_base::seekdir dir,
- std::ios_base::openmode mode)
-{
- off_type pos = off;
- PHYSFS_sint64 ptell = PHYSFS_tell(file);
-
- switch(dir) {
- case std::ios_base::beg:
- break;
- case std::ios_base::cur:
- if(off == 0)
- return static_cast<pos_type> (ptell) - static_cast<pos_type> (egptr() - gptr());
- pos += static_cast<off_type> (ptell) - static_cast<off_type> (egptr() - gptr());
- break;
- case std::ios_base::end:
- pos += static_cast<off_type> (PHYSFS_fileLength(file));
- break;
- default:
-#ifdef DEBUG
- assert(false);
-#else
- return pos_type(off_type(-1));
-#endif
- }
-
- return seekpos(static_cast<pos_type> (pos), mode);
-}
-
-//---------------------------------------------------------------------------
-
-OFileStreambuf::OFileStreambuf(const std::string& filename) :
- file()
-{
- file = PHYSFS_openWrite(filename.c_str());
- if(file == 0) {
- std::stringstream msg;
- msg << "Couldn't open file '" << filename << "': "
- << PHYSFS_getLastError();
- throw std::runtime_error(msg.str());
- }
-
- setp(buf, buf+sizeof(buf));
-}
-
-OFileStreambuf::~OFileStreambuf()
-{
- sync();
- PHYSFS_close(file);
-}
-
-int
-OFileStreambuf::overflow(int c)
-{
- char c2 = (char)c;
-
- if(pbase() == pptr())
- return 0;
-
- size_t size = pptr() - pbase();
- PHYSFS_sint64 res = PHYSFS_write(file, pbase(), 1, size);
- if(res <= 0)
- return traits_type::eof();
-
- if(c != traits_type::eof()) {
- PHYSFS_sint64 res = PHYSFS_write(file, &c2, 1, 1);
- if(res <= 0)
- return traits_type::eof();
- }
-
- setp(buf, buf + res);
- return 0;
-}
-
-int
-OFileStreambuf::sync()
-{
- return overflow(traits_type::eof());
-}
-
-//---------------------------------------------------------------------------
-
-IFileStream::IFileStream(const std::string& filename)
- : std::istream(new IFileStreambuf(filename))
-{
-}
-
-IFileStream::~IFileStream()
-{
- delete rdbuf();
-}
-
-//---------------------------------------------------------------------------
-
-OFileStream::OFileStream(const std::string& filename)
- : std::ostream(new OFileStreambuf(filename))
-{
-}
-
-OFileStream::~OFileStream()
-{
- delete rdbuf();
-}
-
-/* EOF */
+++ /dev/null
-// SuperTux
-// Copyright (C) 2006 Matthias Braun <matze@braunis.de>
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-#ifndef HEADER_SUPERTUX_PHYSFS_PHYSFS_STREAM_HPP
-#define HEADER_SUPERTUX_PHYSFS_PHYSFS_STREAM_HPP
-
-#include <iostream>
-#include <physfs.h>
-
-/** This class implements a C++ streambuf object for physfs files.
- * So that you can use normal istream operations on them
- */
-class IFileStreambuf : public std::streambuf
-{
-public:
- IFileStreambuf(const std::string& filename);
- ~IFileStreambuf();
-
-protected:
- virtual int underflow();
- virtual pos_type seekoff(off_type pos, std::ios_base::seekdir,
- std::ios_base::openmode);
- virtual pos_type seekpos(pos_type pos, std::ios_base::openmode);
-
-private:
- PHYSFS_file* file;
- char buf[1024];
-
-private:
- IFileStreambuf(const IFileStreambuf&);
- IFileStreambuf& operator=(const IFileStreambuf&);
-};
-
-class OFileStreambuf : public std::streambuf
-{
-public:
- OFileStreambuf(const std::string& filename);
- ~OFileStreambuf();
-
-protected:
- virtual int overflow(int c);
- virtual int sync();
-
-private:
- PHYSFS_file* file;
- char buf[1024];
-
-private:
- OFileStreambuf(const OFileStreambuf&);
- OFileStreambuf& operator=(const OFileStreambuf&);
-};
-
-class IFileStream : public std::istream
-{
-public:
- IFileStream(const std::string& filename);
- ~IFileStream();
-};
-
-class OFileStream : public std::ostream
-{
-public:
- OFileStream(const std::string& filename);
- ~OFileStream();
-};
-
-#endif
-
-/* EOF */
#include "math/random_generator.hpp"
#include "object/camera.hpp"
#include "object/player.hpp"
-#include "physfs/physfs_stream.hpp"
+#include "physfs/ifile_stream.hpp"
#include "supertux/fadeout.hpp"
#include "supertux/game_session.hpp"
#include "supertux/gameconfig.hpp"
#include <sqstdstring.h>
#include <stdarg.h>
-#include "physfs/physfs_stream.hpp"
+#include "physfs/ifile_stream.hpp"
#include "supertux/console.hpp"
#include "util/log.hpp"
#include "supertux/console.hpp"
#include <math.h>
+#include <iostream>
-#include "physfs/physfs_stream.hpp"
+#include "physfs/ifile_stream.hpp"
#include "scripting/squirrel_util.hpp"
#include "supertux/gameconfig.hpp"
#include "supertux/main.hpp"
#include "object/smoke_cloud.hpp"
#include "object/text_object.hpp"
#include "object/tilemap.hpp"
-#include "physfs/physfs_stream.hpp"
+#include "physfs/ifile_stream.hpp"
#include "scripting/squirrel_util.hpp"
#include "supertux/collision.hpp"
#include "supertux/constants.hpp"
#include "lisp/parser.hpp"
#include "lisp/writer.hpp"
-#include "physfs/physfs_stream.hpp"
+#include "physfs/ifile_stream.hpp"
#include "scripting/serialize.hpp"
#include "scripting/squirrel_util.hpp"
#include "supertux/mainloop.hpp"
#include "lisp/parser.hpp"
#include "object/background.hpp"
#include "object/tilemap.hpp"
-#include "physfs/physfs_stream.hpp"
+#include "physfs/ifile_stream.hpp"
#include "scripting/squirrel_error.hpp"
#include "scripting/squirrel_util.hpp"
#include "sprite/sprite.hpp"