summaryrefslogtreecommitdiff
path: root/src/miav.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/miav.cc')
-rw-r--r--src/miav.cc120
1 files changed, 120 insertions, 0 deletions
diff --git a/src/miav.cc b/src/miav.cc
new file mode 100644
index 0000000..4d53bc5
--- /dev/null
+++ b/src/miav.cc
@@ -0,0 +1,120 @@
+/***************************************************************************
+ * miav.cc
+ *
+ * Sat Aug 21 17:32:24 2004
+ * Copyright 2004 deva
+ * deva@aasimon.org
+ ****************************************************************************/
+
+/*
+ * This program 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.
+ *
+ * This program 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 Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <config.h>
+
+#include "server.h"
+#include "socket.h"
+
+#ifdef USE_GUI
+#include <qapplication.h>
+#include "mainwindow.h"
+#include <miav.h>
+#endif /* USE_GUI */
+
+#include <stdio.h>
+
+enum {
+ MODE_GRAB,
+ MODE_SERVER
+};
+
+/**
+ * This function starts the MIaV gui.
+ */
+int grab(int argc, char *argv[]) {
+#ifdef USE_GUI
+ QApplication miav_grab( argc, argv );
+ MainWindow mainwindow;
+ miav_grab.setMainWidget( &mainwindow );
+ return miav_grab.exec();
+#else /* USE_GUI */
+ printf("Error: MIaV was not compiled with GUI support...\n");
+ return 0;
+#endif /* USE_GUI */
+}
+
+/**
+ * This function starts the MIaV server.
+ */
+int server(int argc, char *argv[]) {
+ pid_t childpid; // variable to store the child's pid
+
+ signal(SIGCLD, SIG_IGN); // Ved SIGCHILD til IGNORE maa wait/waitpid ikke kaldes
+ // (ellers kommer der kernel-brok)
+
+ if(argc < 1) {
+ printf("Usage: miav server [port]\n");
+ printf("[port] Is the port number the server will be listening to.\n");
+ return 1;
+ }
+
+ printf("Listening on port %d\n",atoi(argv[0]));
+ Socket *s = new Socket(atoi(argv[0]));
+
+ while(1) {
+ Socket *sc = new Socket(s->slisten());
+ if(sc->isConnected()) {
+ childpid = fork();
+
+ if(childpid == -1) {
+ // fork() returns -1 on failure
+ perror("fork");
+ exit(1);
+ } else if(childpid == 0) {
+ // fork() returns 0 to the child process
+ delete s; // Close listen socket.
+ newConnection(sc);
+ delete sc; // Close communication socket.
+ exit(0);
+ } else {
+ // fork() returns new pid to the parent process
+ }
+ }
+ }
+ delete s;
+ return 0;
+}
+
+int main(int argc, char *argv[])
+{
+ int mode = MODE_GRAB;
+
+ if(argc < 2) {
+ printf("Usage: miav [mode] [mode options]\n");
+ printf("[mode] can be one of the following: grab or server.\n");
+ return 1;
+ }
+
+ if(!strcmp(argv[1], "grab")) mode = MODE_GRAB;
+ if(!strcmp(argv[1], "server")) mode = MODE_SERVER;
+
+ switch(mode) {
+ case MODE_GRAB:
+ return grab(argc - 2, &argv[2]);
+ case MODE_SERVER:
+ return server(argc - 2, &argv[2]);
+ }
+ return 0;
+}