From 57a06611188676a76111687fd3aec485260f4b58 Mon Sep 17 00:00:00 2001 From: deva Date: Thu, 29 May 2008 14:59:00 +0000 Subject: Added initial LUA code. --- client/.cvsignore | 2 +- client/client.pro | 10 ++++ client/lua.cc | 91 +++++++++++++++++++++++++++++++++++ client/lua.h | 49 +++++++++++++++++++ client/pracro.cc | 141 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 292 insertions(+), 1 deletion(-) create mode 100644 client/lua.cc create mode 100644 client/lua.h create mode 100644 client/pracro.cc diff --git a/client/.cvsignore b/client/.cvsignore index 9702af8..a5fa052 100644 --- a/client/.cvsignore +++ b/client/.cvsignore @@ -1,4 +1,4 @@ +pracro Makefile -client moc_* diff --git a/client/client.pro b/client/client.pro index 5e15f48..28c9af1 100644 --- a/client/client.pro +++ b/client/client.pro @@ -8,8 +8,17 @@ DEPENDPATH += . widgets INCLUDEPATH += . widgets QT += core gui network xml +win32 { + LIBS += -llua51 +} + +unix { + LIBS += -llua +} + HEADERS += \ builder.h \ + lua.h \ macro.h \ sendrecieve.h \ widgets.h \ @@ -30,6 +39,7 @@ HEADERS += \ SOURCES += \ pracro.cc \ builder.cc \ + lua.cc \ macro.cc \ sendrecieve.cc \ widgets/widget.cc \ diff --git a/client/lua.cc b/client/lua.cc new file mode 100644 index 0000000..46c8fbd --- /dev/null +++ b/client/lua.cc @@ -0,0 +1,91 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * lua.cc + * + * Thu May 29 16:30:50 CEST 2008 + * Copyright 2008 Bent Bisballe Nyeng + * deva@aasimon.org + ****************************************************************************/ + +/* + * This file is part of Pracro. + * + * Pracro 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 2 of the License, or + * (at your option) any later version. + * + * Pracro 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 Pracro; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ +#include "lua.h" + +LUA::LUA(Variables &variables) +{ + L = luaL_newstate(); + if(L == NULL) { + // throw LUADataParserException("Could not create LUA state."); + } + + luaL_openlibs(L); + + std::string preload; + Variables::iterator var = variables.begin(); + while(var != variables.end()) { + preload += (*var).first + " = \"" + (*var).second + "\"\n"; + var++; + } + + int s = luaL_loadbuffer(L, preload.c_str(), preload.size(), "preload"); + switch(s) { + case 0: //no errors; + break; + case LUA_ERRSYNTAX: //syntax error during pre-compilation; + case LUA_ERRMEM: //memory allocation error. + case LUA_ERRFILE: //cannot open/read the file. + //throw LUADataParserException(lua_tostring(L, lua_gettop(L))); + break; + default: + //throw LUADataParserException("Unknown return value of luaL_loadfile."); + break; + } + + // Run program (init) + lua_pcall(L, 0, LUA_MULTRET, 0); +} + +LUA::~LUA() +{ + lua_close(L); +} + +std::string LUA::run(std::string &program) +{ + int s = luaL_loadbuffer(L, program.c_str(), program.size(), "program"); + switch(s) { + case 0: //no errors; + break; + case LUA_ERRSYNTAX: //syntax error during pre-compilation; + case LUA_ERRMEM: //memory allocation error. + case LUA_ERRFILE: //cannot open/read the file. + //throw LUADataParserException(lua_tostring(L, lua_gettop(L))); + break; + default: + //throw LUADataParserException("Unknown return value of luaL_loadfile."); + break; + } + + // Run the loaded code + lua_pcall(L, 0, LUA_MULTRET, 0); + + std::string res = lua_tostring(L, lua_gettop(L)); + lua_pop(L, 1); + + return res; +} diff --git a/client/lua.h b/client/lua.h new file mode 100644 index 0000000..e5eda5b --- /dev/null +++ b/client/lua.h @@ -0,0 +1,49 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * lua.h + * + * Thu May 29 16:30:50 CEST 2008 + * Copyright 2008 Bent Bisballe Nyeng + * deva@aasimon.org + ****************************************************************************/ + +/* + * This file is part of Pracro. + * + * Pracro 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 2 of the License, or + * (at your option) any later version. + * + * Pracro 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 Pracro; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ +#ifndef __PRACRO_LUA_H__ +#define __PRACRO_LUA_H__ + +#include +#include + +#include +#include + +typedef std::map< std::string, std::string > Variables; + +class LUA { +public: + LUA(Variables &variables); + ~LUA(); + + std::string run(std::string &program); + +private: + lua_State *L; +}; + +#endif/*__PRACRO_LUA_H__*/ diff --git a/client/pracro.cc b/client/pracro.cc new file mode 100644 index 0000000..6aca830 --- /dev/null +++ b/client/pracro.cc @@ -0,0 +1,141 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * main.cc + * + * Fri Jul 13 12:38:45 CEST 2007 + * Copyright 2007 Bent Bisballe Nyeng and Lars Bisballe Jensen + * deva@aasimon.org and elsenator@gmail.com + ****************************************************************************/ + +/* + * This file is part of Pracro. + * + * Pracro 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 2 of the License, or + * (at your option) any later version. + * + * Pracro 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 Pracro; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +#include +#include +#include +#include +#include +#include "macro.h" + +#define VERSION "1.0" + +#define CPR_DEFAULT "0000000000" +#define MACRO_DEFAULT "example2" +#define COURSE_DEFAULT "example2" +#define USER_DEFAULT "testuser" +#define CONFIG_DEFAULT "pracro.ini" + +QString cpr = CPR_DEFAULT; +QString user = USER_DEFAULT; +QString config = CONFIG_DEFAULT; +QString host; +quint16 port; + +static void print_usage() +{ + printf("Usage: pracro -m MACRO -c CPR -U USER\n"); + printf("Executes the requested Pracro MACRO using supplied CPR and USER.\n"); + printf("\n"); + printf(" -h, --help Displays this help text.\n"); + printf(" -m, --macro MACRO Requests macro MACRO from the Pracro \n" + " Server, defaults to \""MACRO_DEFAULT"\".\n"); + printf(" -c, --course COURSE Requests course COURSE from the Pracro \n" + " Server, defaults to \""COURSE_DEFAULT"\".\n"); + printf(" -C, --cpr CPR Defines the cpr for use with the macro,\n" + " defaults to \""CPR_DEFAULT"\".\n"); + printf(" -C, --config FILE The configfile to use. Default is \""CONFIG_DEFAULT"\"\n"); + printf(" -u, -U, --user USER Defines the requesting user(not the patient),\n" + " defaults to \""USER_DEFAULT"\"\n"); +} + +static void print_version() +{ + printf("Pracro v"VERSION"\n"); +} + +static QString getParam(QStringList &args, QStringList::iterator &arg) +{ + arg++; + if(arg == args.end() || arg->at(0) == '-') { + print_usage(); + exit(1); + } + return *arg; +} + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QString macro = MACRO_DEFAULT; + QString course = COURSE_DEFAULT; + + QStringList args = app.arguments(); + QStringList::iterator arg = args.begin(); + arg++; // Skip program name... + while(arg != args.end()) { + + if(*arg == "--help" || + *arg == "-h") { + print_usage(); + } + else if(*arg == "--version" || + *arg == "-v") { + print_version(); + } + else if(*arg == "--user" || + *arg == "-U" || + *arg == "-u") { + user = getParam(args,arg); + } + else if(*arg == "--macro" || + *arg == "-m") { + macro = getParam(args, arg); + } + else if(*arg == "--course" || + *arg == "-c") { + course = getParam(args, arg); + } + else if(*arg == "--cpr" || + *arg == "-C") { + cpr = getParam(args, arg); + } + else if(*arg == "--config") { + config = getParam(args, arg); + } + else { + print_version(); + print_usage(); + return 1; + } + + arg++; + } + + QSettings settings(config, QSettings::IniFormat); + + settings.beginGroup("server"); + host = settings.value("host").toString(); + port = settings.value("port").toInt(); + settings.endGroup(); + + new_macro(course, macro); + + //app.setQuitOnLastWindowClosed(false); + return app.exec(); +} -- cgit v1.2.3