From ff5149e28f06c4d681b496c27043f9eb61711f34 Mon Sep 17 00:00:00 2001 From: dos-reis Date: Mon, 27 Jun 2011 11:48:31 +0000 Subject: * utils/Makefile.in (libOpenAxiom_SOURCES): Include filesystem.cc * include/open-axiom.h (Filesystem): New. * gui/debate.cc (Debate::Debate): Initialize fs data member. * gui/debate.h (Debate): Declare it. --- src/ChangeLog | 7 +++++++ src/gui/debate.cc | 2 +- src/gui/debate.h | 2 ++ src/include/open-axiom.h | 29 ++++++++++++++++++++++++++ src/utils/Makefile.in | 5 ++++- src/utils/filesystem.cc | 54 ++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 src/utils/filesystem.cc (limited to 'src') diff --git a/src/ChangeLog b/src/ChangeLog index 9a1baa4e..17973ddb 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2011-06-27 Gabriel Dos Reis + + * utils/Makefile.in (libOpenAxiom_SOURCES): Include filesystem.cc + * include/open-axiom.h (Filesystem): New. + * gui/debate.cc (Debate::Debate): Initialize fs data member. + * gui/debate.h (Debate): Declare it. + 2011-06-26 Gabriel Dos Reis * algebra/sf.spad.pamphlet (DoubleFloat) [nan?]: New export. diff --git a/src/gui/debate.cc b/src/gui/debate.cc index 101dae1d..407d3208 100644 --- a/src/gui/debate.cc +++ b/src/gui/debate.cc @@ -49,7 +49,7 @@ namespace OpenAxiom { } Debate::Debate(QWidget* parent, Command& cmd) - : QScrollArea(parent), conv(*this) { + : QScrollArea(parent), conv(*this), fs(cmd.root_dir) { setWidget(&conv); setViewportMargins(0, 0, 0, 0); viewport()->setAutoFillBackground(true); diff --git a/src/gui/debate.h b/src/gui/debate.h index fa875c5b..6fc9b84d 100644 --- a/src/gui/debate.h +++ b/src/gui/debate.h @@ -48,6 +48,7 @@ namespace OpenAxiom { ~Debate(); Conversation* exchanges() { return &conv; } + Filesystem* filesystem() { return &fs; } protected: void resizeEvent(QResizeEvent*); @@ -57,6 +58,7 @@ namespace OpenAxiom { private: Conversation conv; + Filesystem fs; }; } diff --git a/src/include/open-axiom.h b/src/include/open-axiom.h index e230a825..53b24d65 100644 --- a/src/include/open-axiom.h +++ b/src/include/open-axiom.h @@ -35,6 +35,7 @@ #define OPENAXIOM_included #include +#include #include "openaxiom-c-macros.h" @@ -208,6 +209,34 @@ namespace OpenAxiom { Command(); }; + // ---------------- + // -- Filesystem -- + // ---------------- + // Basic interface to the OpenAxiom filesystem + struct Filesystem { + // Construct the basic filesystem from the OpenAxiom system + // directory. All other directories are derived from the root. + explicit Filesystem(const std::string&); + + // The directory containing the core system + std::string sysdir() const; + + // The directory containing algebra modules + std::string algdir() const; + + // The directory containing database files. + std::string dbdir() const; + + private: + const std::string root; + const std::string alg; + const std::string db; + }; + + // Return the path name the specified dabatase file. + std::string database_filepath(const Filesystem&, const std::string&); + + const char* get_systemdir(int argc, char*[]); const char* make_path_for(const char*, Driver); diff --git a/src/utils/Makefile.in b/src/utils/Makefile.in index 1352cfea..dd2d3154 100644 --- a/src/utils/Makefile.in +++ b/src/utils/Makefile.in @@ -37,7 +37,10 @@ hammer_OBJECTS = $(hammer_SOURCES:.cc=.lo) hammer_LDADD = -L. -lOpenAxiom libOpenAxiom_HEADERS = storage.H hash-table.H string-pool.H sexpr.H -libOpenAxiom_SOURCES = storage.cc string-pool.cc sexpr.cc command.cc +libOpenAxiom_SOURCES = \ + storage.cc string-pool.cc sexpr.cc command.cc \ + filesystem.cc + libOpenAxiom_OBJECTS = $(libOpenAxiom_SOURCES:.cc=.lo) oa_public_headers = storage hash-table string-pool sexpr diff --git a/src/utils/filesystem.cc b/src/utils/filesystem.cc new file mode 100644 index 00000000..eca8bf29 --- /dev/null +++ b/src/utils/filesystem.cc @@ -0,0 +1,54 @@ +// Copyright (C) 2011, Gabriel Dos Reis. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// - Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// - Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in +// the documentation and/or other materials provided with the +// distribution. +// +// - Neither the name of The Numerical Algorithms Group Ltd. nor the +// names of its contributors may be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +// PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --% Author: Gabriel Dos Reis. + + +#include "open-axiom.h" + +namespace OpenAxiom { + Filesystem::Filesystem(const std::string& d) + : root(d), + alg(d + "/algebra"), + db(alg) + { } + + std::string Filesystem::sysdir() const { return root; } + + std::string Filesystem::algdir() const { return alg; } + + std::string Filesystem::dbdir() const { return db; } + + std::string + database_filepath(const Filesystem& fs, const std::string& file) { + return fs.dbdir() + "/" + file + ".daase"; + } +} -- cgit v1.2.3