VLP-28 Moved kernel class declarations to the header file. Code refactor.
[vlp.git] / src / kernel / kernel.cpp
index 969156fed849fd142d95d83ca20ac8ab6be992b9..d2521abafcf342c3e570cd9918c8a96c2417bccd 100644 (file)
 #include <fcntl.h>
 
 #include "genint1.h"
-#include "comm.h"
 #include "socu.h"
 #include <netinet/in.h>
 
 #include <libconfig.h>
 
+#include "kernel.h"
+
 /* File resides in top directory (where are Makefiles)*/
 #include "../../config.h"
 
-#define GPATH "loggr"
-#define IPATH "logi"
-#define NPATH "logn"
-#define REMOTE_PATH "REMOTE"
-#define MAXINTERP 20
-#define MAXINSTANCES 256 
-
-
-#define MESG_COL       0
-#define WARN_COL       1
-#define NORM_COL       2
-
 
 char CharLine[25] = "________________________";
 char myargs[5][255];
 
-/**
- * Interpreter slot
- */
-class InterpEntry {
-public:
-       /** Interpreter identifier */
-       int ID;
-       /** Defines if interpreter is remote or not */
-       bool remote;
-       /* Program name */
-       char fullname[255];
-       char shortname[255];
-       
-       /* Socket */
-       int sock;
-       QSocketNotifier *notify;
-       /* IDs of my remote INT modules */
-       int RInstances[MAXINSTANCES];
-       /* Parent interpreter info */
-       ctx_struct p_ctx;
-};
-
-/**
- * Connection slot
- */
-class ConnectEntry {
-public:
-       char addr[256];
-       
-       ConnectEntry(char *s) {
-               strcpy(addr, s);
-       };
-};
-
-QApplication *app;
-
-/**
- * Kernel class
- */
-class QKernel : public QMainWindow {
-       Q_OBJECT
-public:
-       QTextEdit *desktop;
-       QMenuBar *bar;
-       QMenu *programMenu;
-       QMenu *machineMenu;
-       QMenu *toolsMenu;
-       char progdir[256];
-       int NodeNumber;
-       int ConType;
-
-       QKernel();
-
-       virtual void resizeEvent(QResizeEvent *ev);
-
-       void WriteMessage(char* msg);
-       void InitMessage();
-
-public slots:
-       void n_impl();
-       void Run_Prog();
-       void Edit();
-       void Help();
-       void SetOptions();
-       void AddAddress();
-       void DelAddress();
-       void LockConsole();
-       void UnlockConsole();
-       void MessageToNode();
-       void QuitProc();
-       void NetMessage();
-       void IntMessage(int);
-       void KillInterpreter();
-       void Disconnect();
-       void SetMessages();
-       void Connect();
-       void Info();
-
-protected:
-       virtual void closeEvent (QCloseEvent * e);
-
-private:
-       QList<InterpEntry*> Interpreters;
-       QList<ConnectEntry*> ConnectList;
-       QListWidget *connections;
-       
-       /**
-        * number of working interpreters
-        * @attention Currently not in use
-        */
-       int Tasks;
-       
-       /**
-        * number of connected VLPs
-        */
-       int ActiveConnections;
-       bool LOCKED;
-       bool synchro;
-       bool wait_for_info;
-       char LockPasswd[25];
-       QAction * lockid;
-       QAction * unlockid;
-       QAction * qid;
-       QAction * cwid;
-       QAction * optid;
-       QAction * programExecuteAction;
-       QAction * programKillAction;
-       QAction * machineMessageAction;
-       QAction * machineConnectAction;
-       QAction * machineDisconnectAction;
-       QAction * machineInfoAction;
-       QAction * msgid;
-       QAction * hid;
-       
-       int net_sock;
-       int freeINTid;
-       QSocketNotifier *Net_Notify;
-       char HomeDir[255];
-       bool info_messages;
-
-       void LoadConfig(char *);
-       void RunGraphModule(char*);
-       void RunNetModule();
-       InterpEntry *findINTbySocket(int);
-       InterpEntry *findINTbyID(int);
-       InterpEntry *RunIntModule(char *ss, int r);
-       void RemoteInstance(InterpEntry*, int);
-       void CloseInstances(InterpEntry*);
-};
+//QApplication *app;
 
 /**
  * Event invoked on program close.
@@ -226,6 +87,25 @@ void QKernel::closeEvent(QCloseEvent * e)
        }
 }
 
+void QKernel::setLocked(bool locked)
+{
+       LOCKED = locked;
+
+       quitAction->setDisabled(locked);
+       programExecuteAction->setDisabled(locked);
+       programKillAction->setDisabled(locked);
+       machineMessageAction->setDisabled(locked);
+       machineConnectAction->setDisabled(locked);
+       machineDisconnectAction->setDisabled(locked);
+       machineInfoAction->setDisabled(locked);
+
+       /* Enable only menu entry for unlocking */
+       toolsEditorAction->setDisabled(locked);
+       toolsOptionsAction->setDisabled(locked);
+       toolsLockAction->setDisabled(locked);
+       toolsUnlockAction->setEnabled(locked);
+}
+
 /**
  * Kernel program constructor.
  * Prepares everything to work.
@@ -258,21 +138,21 @@ QKernel::QKernel()
        machineInfoAction = machineMenu->addAction("Info", this, SLOT(Info()));
 
        toolsMenu = menuBar()->addMenu("&Tools");
-       cwid = toolsMenu->addAction("Editor", this, SLOT(Edit()));
-       hid = toolsMenu->addAction("Help", this, SLOT(Help()));
+       toolsEditorAction = toolsMenu->addAction("Editor", this, SLOT(Edit()));
+       toolsMenu->addAction("Help", this, SLOT(Help()));
        toolsMenu->addSeparator(); 
-       optid = toolsMenu->addAction("Options", this, SLOT(SetOptions()));
-       msgid = toolsMenu->addAction("Info messages", this, SLOT(SetMessages()));
-       msgid->setCheckable(TRUE);
-       msgid->setChecked(TRUE);
-       toolsMenu->addSeparator(); 
-       lockid = toolsMenu->addAction("Lock console", this, SLOT(LockConsole()));
-       unlockid = toolsMenu->addAction("Unlock console", this, 
+       toolsOptionsAction = toolsMenu->addAction("Options", this, SLOT(SetOptions()));
+       toolsInfoAction = toolsMenu->addAction("Info messages", this, SLOT(SetMessages()));
+       toolsInfoAction->setCheckable(TRUE);
+       toolsInfoAction->setChecked(TRUE);
+       toolsMenu->addSeparator();
+       toolsLockAction = toolsMenu->addAction("Lock console", this, SLOT(LockConsole()));
+       toolsUnlockAction = toolsMenu->addAction("Unlock console", this, 
                                                        SLOT(UnlockConsole()));
-       unlockid->setDisabled(TRUE);
+       toolsUnlockAction->setDisabled(TRUE);
        LOCKED = FALSE;
 
-       qid = menuBar()->addAction("&Quit", this, SLOT(QuitProc()));
+       quitAction = menuBar()->addAction("&Quit", this, SLOT(QuitProc()));
 
        desktop = new QTextEdit(this);
        desktop->setReadOnly(TRUE);
@@ -345,7 +225,7 @@ void QKernel::LoadConfig(char * fname)
                        config_error_line(&cfg));
                config_destroy(&cfg);
                fclose(file);
-               exit(3);/* from original code. */
+               exit(3);
        }
 
        setting = config_lookup(&cfg, "node_number");
@@ -455,7 +335,7 @@ void QKernel::Edit()
 void QKernel::Help()
 {
        char cmd[255];
-       sprintf(cmd, "%s/modules/loghelp %s/doc %s %s %s %s %s &", HomeDir, 
+       sprintf(cmd, "%s/modules/loghelp %s/doc %s %s %s %s %s &", HomeDir,
                HomeDir, myargs[0], myargs[1], myargs[2], myargs[3], myargs[4]);
        system(cmd);
 }
@@ -467,9 +347,8 @@ void QKernel::RunGraphModule(char *sk)
 {
        char cmd[255];
 
-       sprintf(cmd, "%s/modules/loggraph %s %s %s %s %s %s", HomeDir, sk, 
-                       myargs[0], myargs[1], myargs[2], myargs[3], myargs[4]);
-       strcat(cmd, " &");
+       sprintf(cmd, "%s/modules/loggraph %s %s %s %s %s %s &", HomeDir,
+               sk, myargs[0], myargs[1], myargs[2], myargs[3], myargs[4]);
 
        if (system(cmd) != 0)
                WriteMessage("Cannot connect GRAPH resources");
@@ -484,9 +363,8 @@ void QKernel::RunNetModule()
        int len, on;
        int sock;
        char cmd[255];
-       sprintf(cmd, "%s/modules/lognet %s %s %s %s %s %s", HomeDir, NPATH, 
-                       myargs[0], myargs[1], myargs[2], myargs[3], myargs[4]);
-       strcat(cmd, " &");
+       sprintf(cmd, "%s/modules/lognet %s %s %s %s %s %s &", HomeDir,
+               NPATH, myargs[0], myargs[1], myargs[2], myargs[3], myargs[4]);
 
        /* -------- socket for NET module -------- */
        unlink(NPATH);
@@ -596,7 +474,7 @@ void QKernel::QuitProc()
        msg.param.pword[0] = NET_EXIT;
        write(net_sock, &msg, sizeof(MESSAGE));
        /*  ::close(net_sock);*/
-       app->quit();
+       QApplication::instance()->quit();
 }
 
 /**
@@ -965,15 +843,12 @@ void QKernel::WriteMessage(char *msg)
 void QKernel::SetMessages()
 {
        if (toolsMenu != NULL) {
-               if (msgid->isChecked()) {
-                       msgid->setChecked(FALSE);
-                       info_messages = FALSE;
-               } else {
-                       msgid->setChecked(TRUE);
-                       info_messages = TRUE;
-               }
+               toolsInfoAction->setChecked(!toolsInfoAction->isChecked());
+//             toolsInfoAction->toggle();
+               info_messages = toolsInfoAction->isChecked();
+               fprintf(stderr, "Info is checked? %s\n", toolsInfoAction->isChecked() ? "yes" : "no");
        }
-       /* bar->repaint(); */
+//     menuBar()->repaint();
 }
 
 /**
@@ -1159,20 +1034,8 @@ void QKernel::LockConsole()
                         */
                        if (d.exec()) {
                                if (strcmp(ed.text().toAscii().data(), LockPasswd) == 0) {
-                                       qid->setDisabled(TRUE);
-                                       programExecuteAction->setDisabled(TRUE);
-                                       programKillAction->setDisabled(TRUE);
-                                       machineMessageAction->setDisabled(TRUE);
-                                       machineConnectAction->setDisabled(TRUE);
-                                       machineDisconnectAction->setDisabled(TRUE);
-                                       machineInfoAction->setDisabled(TRUE);
-
-                                       unlockid->setEnabled(TRUE);
-                                       lockid->setDisabled(TRUE);
-                                       cwid->setDisabled(TRUE);
-                                       optid->setDisabled(TRUE);
+                                       setLocked(TRUE);
                                        WriteMessage("CONSOLE LOCKED");
-                                       LOCKED = TRUE;
                                } else {
                                        QMessageBox msg(this);
                                        msg.setText("Not matching!");
@@ -1216,19 +1079,8 @@ void QKernel::UnlockConsole()
 
        if (d.exec()) {
                if (strcmp(ed.text().toAscii().data(), LockPasswd) == 0) {
-                       qid->setEnabled(TRUE);
-                       programExecuteAction->setEnabled(TRUE);
-                       programKillAction->setEnabled(TRUE);
-                       machineMessageAction->setEnabled(TRUE);
-                       machineConnectAction->setEnabled(TRUE);
-                       machineDisconnectAction->setEnabled(TRUE);
-                       machineInfoAction->setEnabled(TRUE);
-                       unlockid->setEnabled(FALSE);
-                       lockid->setEnabled(TRUE);
-                       cwid->setEnabled(TRUE);
-                       optid->setEnabled(TRUE);
+                       setLocked(FALSE);
                        WriteMessage("CONSOLE UNLOCKED");
-                       LOCKED = FALSE;
                } else {
                        QMessageBox msg(this);
                        msg.setText("Wrong password!");
@@ -1506,8 +1358,6 @@ void QKernel::Info()
        wait_for_info = TRUE;
 }
 
-#include "kernel.moc"
-
 /**
  * Program main function
  * All program arguments but the first one (argv[0]: program name) are saved and
@@ -1525,7 +1375,7 @@ int main(int argc, char **argv)
                strcpy(myargs[i - 1], argv[i]);
        }
 
-       app = new QApplication(argc, argv);
+       QApplication * app = new QApplication(argc, argv);
        QKernel kernel;
        kernel.show();
        kernel.InitMessage();