aboutsummaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2013-06-26 11:43:56 +0000
committerdos-reis <gdr@axiomatics.org>2013-06-26 11:43:56 +0000
commit7f57a915cee3c91cddd166fe9964655696666c4b (patch)
treed00aa4323f8dc4280e736c5e15ee8479f89eb31b /src/gui
parentf9e4a03a220766099d6b5fc683a58185c4805a05 (diff)
downloadopen-axiom-7f57a915cee3c91cddd166fe9964655696666c4b.tar.gz
Rewrite s-expression reader.
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/gui.pro.in3
-rw-r--r--src/gui/main-window.cc24
-rw-r--r--src/gui/main-window.h5
3 files changed, 30 insertions, 2 deletions
diff --git a/src/gui/gui.pro.in b/src/gui/gui.pro.in
index 6969b454..d118c08c 100644
--- a/src/gui/gui.pro.in
+++ b/src/gui/gui.pro.in
@@ -8,6 +8,7 @@ oa_targetdir = @top_builddir@/@target@
OA_INC = $${oa_targetdir}/include
OA_LIB = -L@top_builddir@/@target@/lib -lOpenAxiom
OA_IOLIB = -L@top_builddir@/src/io -lio
+OA_SYNTAX_LIB = -L@top_builddir@/src/syntax -lsyntax
## We build in release mode.
CONFIG += release
@@ -38,7 +39,7 @@ DEPENDPATH += @srcdir@
SOURCES += server.cc conversation.cc main-window.cc debate.cc main.cc
## Additional support libraries
-LIBS += $$OA_LIB $$OA_IOLIB
+LIBS += $$OA_SYNTAX_LIB $$OA_LIB $$OA_IOLIB
## C++ compiler
#QMAKE_CXX = @CXX@
diff --git a/src/gui/main-window.cc b/src/gui/main-window.cc
index 6d3eb205..1ef6ec56 100644
--- a/src/gui/main-window.cc
+++ b/src/gui/main-window.cc
@@ -36,10 +36,33 @@
#include <QMessageBox>
#include <QScrollBar>
+#include <open-axiom/diagnostics>
+#include <open-axiom/sexpr>
+#include <open-axiom/FileMapping>
#include "debate.h"
#include "main-window.h"
namespace OpenAxiom {
+ void
+ MainWindow::display_error(const std::string& s) {
+ QMessageBox::critical(this, tr("System error"), QString(s.c_str()));
+ }
+
+ void
+ MainWindow::read_databases() {
+ try {
+ const auto& fs = server()->system_root();
+ Memory::FileMapping db { fs.dbdir() + "/interp.daase" };
+ Sexpr::Reader rd { db.begin(), db.end() };
+ while (rd.read())
+ ;
+ }
+ catch(const Diagnostics::BasicError& e) {
+ display_error(e.message());
+ }
+ }
+
+
static void connect_server_io(MainWindow* win, Debate* debate) {
QObject::connect(win->server(), SIGNAL(readyReadStandardError()),
win, SLOT(display_error()));
@@ -70,6 +93,7 @@ namespace OpenAxiom {
// wait to be pinged before displaying a prompt. This is
// an unfortunate result of a rather awkward hack.
server()->input("");
+ read_databases();
}
MainWindow::~MainWindow() {
diff --git a/src/gui/main-window.h b/src/gui/main-window.h
index 5e08067e..499e5f66 100644
--- a/src/gui/main-window.h
+++ b/src/gui/main-window.h
@@ -1,4 +1,4 @@
-// Copyright (C) 2011, Gabriel Dos Reis.
+// Copyright (C) 2011-2013, Gabriel Dos Reis.
// All rights reserved.
// Written by Gabriel Dos Reis.
//
@@ -48,6 +48,7 @@ namespace OpenAxiom {
~MainWindow();
Server* server() { return &srv; }
+ void display_error(const std::string&);
private slots:
void done(int, QProcess::ExitStatus);
@@ -56,6 +57,8 @@ namespace OpenAxiom {
private:
Server srv;
QTabWidget tabs;
+
+ void read_databases();
};
}