*** empty log message ***
authorAndreas Tonnesen <andreto@olsr.org>
Mon, 13 Sep 2004 16:58:44 +0000 (16:58 +0000)
committerAndreas Tonnesen <andreto@olsr.org>
Mon, 13 Sep 2004 16:58:44 +0000 (16:58 +0000)
gui/win32/Shim/shim.c [new file with mode: 0644]

diff --git a/gui/win32/Shim/shim.c b/gui/win32/Shim/shim.c
new file mode 100644 (file)
index 0000000..0bf487c
--- /dev/null
@@ -0,0 +1,104 @@
+/*\r
+ * Windows GUI for olsr.org\r
+ * Copyright (C) 2004 Thomas Lopatic (thomas@lopatic.de)\r
+ *\r
+ * This file is part of olsr.org.\r
+ *\r
+ * olsr.org is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * olsr.org is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with olsr.org; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+ *\r
+ */\r
+\r
+#include <windows.h>\r
+\r
+void EntryPoint(void)\r
+{\r
+       STARTUPINFO StartInfo;\r
+       PROCESS_INFORMATION ProcInfo;\r
+       int i;\r
+       char *CmdLine;\r
+       char *Walker;\r
+       char NewCmdLine[MAX_PATH + 500];\r
+       HANDLE Handles[2];\r
+       unsigned long Res;\r
+\r
+       Handles[0] = OpenEvent(EVENT_ALL_ACCESS, FALSE, "TheOlsrdShimEvent");\r
+\r
+       if (Handles[0] == NULL)\r
+       {\r
+               MessageBox(NULL, "Cannot open event.", "Shim Error", MB_ICONERROR | MB_OK);\r
+               ExitProcess(1);\r
+       }\r
+\r
+       CmdLine = GetCommandLine();\r
+\r
+       while (*CmdLine != 0 && *CmdLine != 32)\r
+               CmdLine++;\r
+\r
+       if (*CmdLine == 0)\r
+       {\r
+               MessageBox(NULL, "Missing arguments.", "Shim Error", MB_ICONERROR | MB_OK);\r
+               ExitProcess(1);\r
+       }\r
+\r
+       GetModuleFileName(NULL, NewCmdLine, MAX_PATH);\r
+\r
+       for (Walker = NewCmdLine; *Walker != 0; Walker++);\r
+\r
+       while (*Walker != '\\')\r
+               Walker--;\r
+\r
+       Walker[1] = 'o';\r
+       Walker[2] = 'l';\r
+       Walker[3] = 's';\r
+       Walker[4] = 'r';\r
+       Walker[5] = 'd';\r
+       Walker[6] = '.';\r
+       Walker[7] = 'e';\r
+       Walker[8] = 'x';\r
+       Walker[9] = 'e';\r
+\r
+       Walker[10] = ' ';\r
+\r
+       Walker += 11;\r
+\r
+       while ((*Walker++ = *CmdLine++) != 0);\r
+\r
+       for (i = 0; i < sizeof (STARTUPINFO); i++)\r
+               ((char *)&StartInfo)[i] = 0;\r
+\r
+       StartInfo.cb = sizeof (STARTUPINFO);\r
+\r
+       if (!CreateProcess(NULL, NewCmdLine, NULL, NULL, TRUE,\r
+               CREATE_NEW_PROCESS_GROUP, NULL, NULL, &StartInfo, &ProcInfo))\r
+       {\r
+               MessageBox(NULL, "Cannot execute OLSR server.", "Shim Error", MB_ICONERROR | MB_OK);\r
+               ExitProcess(1);\r
+       }\r
+\r
+       Handles[1] = ProcInfo.hProcess;\r
+\r
+       Res = WaitForMultipleObjects(2, Handles, FALSE, INFINITE);\r
+\r
+       if (Res == WAIT_OBJECT_0)\r
+       {\r
+               GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT, ProcInfo.dwProcessId);\r
+               WaitForSingleObject(ProcInfo.hProcess, INFINITE);\r
+       }\r
+       \r
+       CloseHandle(ProcInfo.hThread);\r
+       CloseHandle(ProcInfo.hProcess);\r
+\r
+       ExitProcess(0);\r
+}\r