diff options
| -rw-r--r-- | client/.cvsignore | 2 | ||||
| -rw-r--r-- | client/client.pro | 10 | ||||
| -rw-r--r-- | client/lua.cc | 91 | ||||
| -rw-r--r-- | client/lua.h | 49 | ||||
| -rw-r--r-- | client/pracro.cc | 141 | 
5 files changed, 292 insertions, 1 deletions
| 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 <lua.hpp> +#include <lauxlib.h> + +#include <string> +#include <map> + +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 <QApplication> +#include <QObject> +#include <QEvent> +#include <QStringList> +#include <QSettings> +#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(); +} | 
