#include <X11/Xlib.h>
#include "kernel.h"
-#include "ui/kernelwindow.h"
-#include "lock.h"
-#include "options.h"
-#include "kill_interpreter_dialog.h"
-#include "connect_dialog.h"
+#include "ui/KernelWindow.h"
+#include "ConnectDialog.h"
+#include "KillDialog.h"
+#include "LockDialog.h"
+#include "OptionsDialog.h"
+#include "MessageDialog.h"
#include "vlp/config.h"
+#include "vlp/QtConfigurationFinder.h"
+#include "vlp/exception/ConfigFileNotFound.h"
+#include <sys/prctl.h>
/* File resides in top directory (where are Makefiles)*/
#include "../../config.h"
+namespace loglan {
+namespace vlp {
+
char CharLine[25] = "________________________";
/**
{
setupUi(this);
- QString arg0(argv[0]);
- arg0 += "/";
- homeDir = QDir(arg0);
- homeDir.cdUp();
-
-
int i;
for(i = 0; (i < 5) && (i < argc-1); i++) {
strcpy(myargs[i], "");
}
}
+ loglan::vlp::QtConfigurationFinder configFinder;
+ configFinder.initSearchDirs();
+
QDir q(getRemoteDir());
if (!q.exists()) {
ActiveConnections = 0;
strcpy(LockPasswd, "");
- loadConfig(getConfigFilePath());
+ loadConfig(configFinder.findConfig().c_str());
RunNetModule();
std::vector<std::string> hosts = config.getHosts();
- for (int i = 0; i < hosts.size(); i++) {
+ for (unsigned int i = 0; i < hosts.size(); i++) {
ConnectList.append(new ConnectEntry(hosts[i].c_str()));
}
strncpy(progdir, config.getProgramDir(), 256);
+
+ homeDir = QDir(QCoreApplication::applicationDirPath());
}
}
*/
void QKernel::on_actionExecute_triggered()
{
- int i;
QString s = QFileDialog::getOpenFileName(this, "Execute", progdir, "*.log");
if (!s.isNull()) {
- i = s.indexOf(".log");
+ int i = s.indexOf(".log");
if (i > 0)
s.remove(i, 4);
QString program = getHomeDir();
program += "/modules/logedit";
+ fprintf(stderr, "Run EDIT Module: %s, %s\n", program.toStdString().c_str(), getHomeDir());
pid_t pid = fork();
if (pid == 0) {
if (execl(program.toStdString().c_str(),
+ "logedit",
getHomeDir(),
myargs[0],
myargs[1],
QString docDir = getHomeDir();
docDir += "/doc";
+ fprintf(stderr, "Run HELP Module: %s, %s\n", program.toStdString().c_str(), docDir.toStdString().c_str());
+
pid_t pid = fork();
if (pid == 0) {
if (execl(program.toStdString().c_str(),
+ "loghelp",
docDir.toStdString().c_str(),
myargs[0],
myargs[1],
*/
void QKernel::RunGraphModule(char *sk)
{
- char cmd[255];
-
QString program = getHomeDir();
program += "/modules/loggraph";
+ fprintf(stderr, "Run GRAPH Module: %s, %s\n", program.toStdString().c_str(), sk);
+
pid_t pid = fork();
if (pid == 0) {
if (execl(program.toStdString().c_str(),
- program.toStdString().c_str(),
+ "loggraph",
sk,
myargs[0],
myargs[1],
*/
void QKernel::RunNetModule()
{
+
struct sockaddr_un svr;
int len;
int on;
QString program = getHomeDir();
program += "/modules/lognet";
+ fprintf(stderr, "Run NET Module: %s, %s %s\n", program.toStdString().c_str(), getNetModuleSocket(), getConfigFilePath().toStdString().c_str());
pid_t pid = fork();
if (pid == 0) {
if (execl(program.toStdString().c_str(),
- program.toStdString().c_str(),
+ "lognet",
getNetModuleSocket(),
getConfigFilePath().toStdString().c_str(),
myargs[0],
{
MESSAGE m;
- ConnectDialog dialog(this);
- dialog.setWindowTitle("IP Address:");
+ dialog::ConnectDialog dialog(this);
if (dialog.exec()) {
m.msg_type = MSG_NET;
*/
void QKernel::on_actionMessage_triggered()
{
- QDialog *dlg;
- QLineEdit *nodenr;
+ dialog::MessageDialog dialog(this);
MESSAGE m;
- dlg = new QDialog(this, Qt::Dialog);
- dlg->setWindowTitle("Send message to node");
-
- nodenr = new QLineEdit("number", dlg);
- nodenr->setGeometry(90, 10, 50, 30);
- nodenr->setText("");
-
- QLabel *tmpQLabel;
- tmpQLabel = new QLabel("Node number:", dlg);
- tmpQLabel->setGeometry(10, 10, 77, 30);
-
- tmpQLabel = new QLabel("Message:", dlg);
- tmpQLabel->setGeometry(10, 50, 70, 30);
-
- QLineEdit *msg;
- msg = new QLineEdit("", dlg);
- msg->setGeometry(80, 60, 330, 30);
-
- QPushButton *ob;
- ob = new QPushButton("Send", dlg);
- ob->setGeometry(230, 10, 80, 30);
- ob->setDefault(TRUE);
-
- QPushButton *cb;
- cb = new QPushButton("Cancel", dlg);
- cb->setGeometry(330, 10, 80, 30);
- dlg->resize(430, 110);
- connect(ob, SIGNAL(clicked()), dlg, SLOT(accept()));
- connect(cb, SIGNAL(clicked()), dlg, SLOT(reject()));
-
- if (dlg->exec()) {
+ if (dialog.exec()) {
m.msg_type = MSG_NET;
m.param.pword[0] = NET_PROPAGATE;
m.param.pword[1] = MSG_VLP;
m.param.pword[2] = NodeNumber;
- m.param.pword[4] = atoi(nodenr->text().toAscii().data());
+ m.param.pword[4] = dialog.getNodeNumber();
m.param.pword[6] = VLP_WRITE;
- strcpy(m.param.pstr, msg->text().toAscii().data());
+ strcpy(m.param.pstr, dialog.getMessage().toStdString().c_str());
write(net_sock, &m, sizeof(MESSAGE));
}
}
*/
void QKernel::on_actionKill_triggered()
{
- KillInterpreterDialog dialog(this);
- dialog.setWindowTitle("Kill interpreter");
-
- MESSAGE m;
- InterpEntry *interpreter;
+ dialog::KillInterpreterDialog dialog(this);
if (dialog.exec()) {
+ MESSAGE m;
m.msg_type = MSG_INT;
m.param.pword[0] = INT_KILL;
+
+ InterpEntry *interpreter;
interpreter = findINTbyID(dialog.getInterpreterId());
+
if (interpreter != NULL) {
- if (!(interpreter->remote))
+ if (!(interpreter->remote)) {
write(interpreter->sock, &m, sizeof(MESSAGE));
- else
+ }
+ else {
WriteMessage("This is a remote instance of a program!");
+ }
}
else {
WriteMessage("Interpreter not found");
/**
* Sends message to the net module.
+ *
+ * \todo method needs to be refactored
*/
void QKernel::NetMessage()
{
/* TODO: It has to be rewritten */
MESSAGE msg;
int cnt;
- char ss[255];
InterpEntry *pom;
cnt = read(net_sock, &msg, sizeof(MESSAGE));
if ((cnt > 0) && (msg.msg_type == MSG_NET)) {
+ char ss[255];
+
switch(msg.param.pword[0]) {
case NET_CSWRITELN:
WriteMessage(msg.param.pstr);
case VLP_WRITE:
QApplication::beep();
WriteMessage(CharLine);
- WriteMessage(
- "### Incoming Messsage ###");
- sprintf(ss, "Mesg from Node %d: %s",
- msg.param.pword[2],
- msg.param.pstr);
+ WriteMessage("### Incoming Messsage ###");
+ sprintf(ss,
+ "Mesg from Node %d: %s",
+ msg.param.pword[2],
+ msg.param.pstr
+ );
WriteMessage(ss);
WriteMessage(CharLine);
break;
case VLP_REMOTE_INSTANCE:
- sprintf(ss, "%s/%s", getRemoteDir(),
- msg.param.pstr);
+ sprintf(ss, "%s/%s", getRemoteDir(), msg.param.pstr);
if (info_messages) {
WriteMessage("Running program:");
switch (msg.msg_type) {
case MSG_GRAPH:
if (msg.param.pword[0] == GRAPH_ALLOCATE) {
+ fprintf(stderr, "Running graph module with arg: %s\n", msg.param.pstr);
RunGraphModule(msg.param.pstr);
}
break;
case MSG_INT:
switch(msg.param.pword[0]) {
case INT_EXITING:
- char ss[255];
-
MESSAGE m;
m.msg_type = MSG_VLP;
m.param.pword[0] = VLP_INTERPRETER_DOWN;
delete e;
if (info_messages) {
+ char ss[255];
sprintf(ss, "%s : End of program "
"execution", msg.param.pstr);
WriteMessage(ss);
void QKernel::WriteMessage(const char *msg)
{
int x;
- int y;
+// int y;
x = desktop->textCursor().blockNumber();
- y = desktop->textCursor().columnNumber();
+// y = desktop->textCursor().columnNumber();
if (x > 100) {
desktop->clear();
*/
void QKernel::on_actionOptions_triggered()
{
- OptionsDialog optionsDialog(getConfigFilePath(), this);
+ dialog::OptionsDialog optionsDialog(getConfigFilePath(), this);
if (optionsDialog.exec()) {
optionsDialog.saveConfig(getConfigFilePath());
*/
void QKernel::on_actionLock_console_triggered()
{
- LockDialog lockDialog(this);
+ dialog::LockDialog lockDialog(this);
if (lockDialog.exec()) {
QString password = lockDialog.getPassword();
*/
void QKernel::on_actionUnlock_console_triggered()
{
- LockDialog lockDialog(this);
+ dialog::LockDialog lockDialog(this);
if (lockDialog.exec()) {
QString password = lockDialog.getPassword();
{
InterpEntry *pom = NULL;
- for (int i = 0; i < Interpreters.size(); i++) {
- if (Interpreters.at(i)->sock == _id) {
- pom = Interpreters.at(i);
+ for (auto interpreter : Interpreters) {
+ if (interpreter->sock == _id) {
+ pom = interpreter;
break;
}
}
{
InterpEntry *pom = NULL;
- for (int i = 0; i < Interpreters.size(); i++) {
- if (Interpreters.at(i)->ID == _id) {
- pom = Interpreters.at(i);
+ for (auto interpreter : Interpreters) {
+ if (interpreter->ID == _id) {
+ pom = interpreter;
break;
}
}
*/
InterpEntry *QKernel::RunIntModule(char *ss, int r)
{
+ fprintf(stderr, "Run INT Module: %s, %d\n", ss, r);
char a[256], b[255];
struct sockaddr_un svr;
int len, sock, on;
strcpy(newINT->shortname, b);
strcpy(newINT->fullname, ss);
- sprintf(a, "%s%d", IPATH, newint);
+ sprintf(a, "%s%d", homeDir.absoluteFilePath(IPATH).toStdString().c_str(), newint);
sprintf(cmd, "%s/modules/logint %s %s",
getHomeDir(),
a,
if (r) {
strcat(cmd, " r");
}
- sprintf(b, " %s %s %s %s %s",
- myargs[0], myargs[1], myargs[2], myargs[3], myargs[4]);
- strcat(cmd, b);
+// sprintf(b, " %s %s %s %s %s",
+// myargs[0], myargs[1], myargs[2], myargs[3], myargs[4]);
+// sprintf(cmd, "%s %s", cmd, b);
+// strcat(cmd, b);
+ fprintf(stderr, "%s\n", cmd);
strcat(cmd, " &");
sock = socket(AF_UNIX, SOCK_STREAM, 0);
void QKernel::RemoteInstance(InterpEntry *interp, int on)
{
MESSAGE m;
- char s[255];
m.msg_type = MSG_NET;
m.param.pword[0] = NET_NODE_EXIST;
m.param.pword[1] = interp->RInstances[on];
write(interp->sock, &m, sizeof(MESSAGE));
} else { /* There is no such a node! */
+ char s[255];
sprintf(s, "Warning: Node number %d not found!", on);
WriteMessage(s);
WriteMessage("Allocating O-process on the local node");
wait_for_info = TRUE;
}
+}
+}
+
/**
* Program main function
* All program arguments but the first one (argv[0]: program name) are saved and
XInitThreads();
QApplication * app = new QApplication(argc, argv);
- QKernel kernel(argc, argv);
+ loglan::vlp::QKernel kernel(argc, argv);
kernel.show();
return app->exec();
-}
+}
\ No newline at end of file