eadf975166aab0358ba230e018c99e812b899ae9
[vlp.git] / src / kernel / kernel.h
1 /**************************************************************
2
3   Copyright (C) 1997  Oskar Swida
4
5  This program is free software; you can redistribute it and/or
6  modify it under the terms of the GNU General Public License
7  as published by the Free Software Foundation; either version 2
8  of the License, or (at your option) any later version.
9
10  This program is distributed in the hope that it will be useful, 
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  GNU General Public License for more details.
14
15  You should have received a copy of the GNU General Public License
16  along with this program; if not, write to the Free Software
17  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18
19
20
21
22  NOTE: This software is using the free software license of 
23        the QT library v.1.30 from Troll Tech AS.
24        See the file LICENSE.QT.
25
26  
27   To contact the author, write:
28      e-mail: swida@aragorn.pb.bialystok.pl
29
30 ************************************************************/
31
32 #ifndef VLP_KERNEL_H
33 #define VLP_KERNEL_H
34
35 #include <QtGui/QMainWindow>
36 #include <QtGui/QListWidget>
37 #include <QtGui/QTextEdit>
38 #include <QtCore/QSocketNotifier>
39
40 #include "comm.h"
41
42 #include "kernelwindow.h"
43
44 #define GPATH "loggr"
45 #define IPATH "logi"
46 #define NPATH "logn"
47 #define REMOTE_PATH "REMOTE"
48 #define MAXINTERP 20
49 #define MAXINSTANCES 256 
50
51
52 #define MESG_COL        0
53 #define WARN_COL        1
54 #define NORM_COL        2
55
56
57 /**
58  * Interpreter slot
59  */
60 class InterpEntry {
61 public:
62         /** Interpreter identifier */
63         int ID;
64         /** Defines if interpreter is remote or not */
65         bool remote;
66         /* Program name */
67         char fullname[255];
68         char shortname[255];
69         
70         /* Socket */
71         int sock;
72         QSocketNotifier *notify;
73         /* IDs of my remote INT modules */
74         int RInstances[MAXINSTANCES];
75         /* Parent interpreter info */
76         ctx_struct p_ctx;
77 };
78
79 /**
80  * Connection slot
81  */
82 class ConnectEntry {
83 public:
84         char addr[256];
85         
86         ConnectEntry(char *s) {
87                 strcpy(addr, s);
88         };
89 };
90
91
92 /**
93  * Kernel class
94  */
95 class QKernel : public QMainWindow, private Ui::KernelWindow {
96         Q_OBJECT
97 public:
98         QMenu *toolsMenu;
99         char progdir[256];
100         int NodeNumber;
101         int ConType;
102
103         QKernel();
104
105         void WriteMessage(char* msg);
106         void InitMessage();
107
108 public slots:
109         void n_impl();
110         void NetMessage();
111         void IntMessage(int);
112
113 protected:
114         virtual void closeEvent (QCloseEvent * e);
115
116 private:
117         QList<InterpEntry*> Interpreters;
118         QList<ConnectEntry*> ConnectList;
119         
120         /**
121          * number of working interpreters
122          * @attention Currently not in use
123          */
124         int Tasks;
125         
126         /**
127          * number of connected VLPs
128          */
129         int ActiveConnections;
130         /**
131          * Indicates state of the Kernel Program. Is it locked or not.
132          */
133         bool LOCKED;
134         bool synchro;
135         bool wait_for_info;
136         char LockPasswd[25];
137         
138         int net_sock;
139         int freeINTid;
140         QSocketNotifier *Net_Notify;
141         char HomeDir[255];
142         bool info_messages;
143
144         void LoadConfig(char *);
145         void RunGraphModule(char*);
146         void RunNetModule();
147         InterpEntry *findINTbySocket(int);
148         InterpEntry *findINTbyID(int);
149         InterpEntry *RunIntModule(char *ss, int r);
150         void RemoteInstance(InterpEntry*, int);
151         void CloseInstances(InterpEntry*);
152
153         /**
154          * Sets QKernel menu entries to the given status
155          * @param locked status which will be set on the menu entries.
156          */
157         void setLocked(bool locked);
158
159 private slots:
160         void on_actionExecute_triggered();
161         void on_actionKill_triggered();
162         void on_actionQuit_triggered();
163         
164         void on_actionMessage_triggered();
165         void on_actionConnect_triggered();
166         void on_actionDisconnect_triggered();
167         void on_actionInfo_triggered();
168
169         void on_actionEditor_triggered();
170         void on_actionHelp_triggered();
171         void on_actionOptions_triggered();
172         void on_actionInfo_messages_triggered();
173         void on_actionLock_console_triggered();
174         void on_actionUnlock_console_triggered();
175 };
176
177 #endif /* VLP_KERNEL_H */