Performance tools, initial check-in
[vpp.git] / g2 / main.c
diff --git a/g2/main.c b/g2/main.c
new file mode 100644 (file)
index 0000000..a782e17
--- /dev/null
+++ b/g2/main.c
@@ -0,0 +1,196 @@
+/* 
+ *------------------------------------------------------------------
+ * Copyright (c) 2005-2016 Cisco and/or its affiliates.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "g2.h"
+#include "props.h"
+#include <pwd.h>
+#include <strings.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+/*
+ * globals
+ */
+
+GtkWidget *g_mainwindow;        /* The main window */
+
+/* Graphical object heirarchy
+ *
+ * [main window]
+ *   [main vbox]
+ *     [main (e.g. file) menubar]
+ *     [view hbox] 
+ *     [view bottom menu]
+ */
+
+GtkWidget *g_mainvbox;
+GtkWidget *g_mainhbox;
+
+gint delete_event(GtkWidget *widget, GdkEvent *event, gpointer data)
+{
+    /* Allow window to be destroyed */
+    return(FALSE);
+}
+
+void destroy(GtkWidget *widget, gpointer data)
+{
+    gtk_main_quit();
+}
+
+int main (int argc, char **argv)
+{
+    char tmpbuf [128];
+    struct passwd *pw;
+    char *event_file = 0;
+    char *cpel_file = 0;
+    char *clib_file =0;
+    char *title = "none";
+    int curarg=1;
+    char *homedir;
+    
+    gtk_init(&argc, &argv);
+
+    homedir = getenv ("HOME");
+    tmpbuf[0] = 0;
+
+    if (homedir) {
+        sprintf(tmpbuf, "%s/.g2", homedir);
+    } else {
+        pw = getpwuid(geteuid());
+        if (pw) {
+            sprintf(tmpbuf, "%s/.g2", pw->pw_dir);
+        }
+    }
+    if (tmpbuf[0])
+        readprops(tmpbuf);
+
+    g_mainwindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+    gtk_signal_connect (GTK_OBJECT(g_mainwindow), "delete_event",
+                        GTK_SIGNAL_FUNC (delete_event), NULL);
+
+    gtk_signal_connect (GTK_OBJECT(g_mainwindow), "destroy",
+                        GTK_SIGNAL_FUNC (destroy), NULL);
+
+    gtk_container_set_border_width(GTK_CONTAINER(g_mainwindow), 5);
+
+    g_mainvbox = gtk_vbox_new(FALSE, 0);
+    g_mainhbox = gtk_hbox_new(FALSE, 0);
+
+    /* 
+     * init routines
+     */
+
+    menu1_init();
+    point_selector_init();
+    view1_init();
+    event_init();
+
+    /* 
+     * Now that we're ready to rock 'n roll, see if we've been asked to
+     * press a few buttons...
+     */
+    
+    while (curarg < argc) {
+        if (!strncmp(argv[curarg], "--cpel-input", 4)) {
+            curarg++;
+            if (curarg < argc) {
+                cpel_file = argv[curarg];
+                curarg++;
+                break;
+            }
+            g_error("Missing filename after --cpel-input");
+        }
+        if (!strncmp(argv[curarg], "--clib-input", 4)) {
+            curarg++;
+            if (curarg < argc) {
+                clib_file = argv[curarg];
+                curarg++;
+                break;
+            }
+            g_error("Missing filename after --cpel-input");
+        }
+
+        if (!strncmp(argv[curarg], "--pointdefs", 3)) {
+            curarg++;
+            if (curarg < argc) {
+                read_event_definitions(argv[curarg]);
+                curarg++;
+                continue;
+            }
+            g_error ("Missing filename after --pointdefs\n");
+        }
+        if (!strncmp(argv[curarg], "--event-log", 3)) {
+            curarg++;
+            if (curarg < argc) {
+                event_file = argv[curarg];
+                curarg++;
+                continue;
+            }
+            g_error ("Missing filename after --event-log\n");
+        }
+
+        if (!strncmp(argv[curarg], "--ticks-per-us", 3)) {
+            curarg++;
+            if (curarg < argc) {
+                ticks_per_ns = 0.0;
+                ticks_per_ns = atof(argv[curarg]);
+                if (ticks_per_ns == 0.0) {
+                    g_error("ticks-per-ns (%s) didn't convert properly\n",
+                            argv[curarg]);
+                }
+                ticks_per_ns_set = TRUE;
+                curarg++;
+                continue;
+            }
+            g_error ("Missing filename after --event-log\n");
+        }
+
+        fprintf(stderr, 
+                "g2 [--pointdefs <filename>] [--event-log <filename>]\n");
+        fprintf(stderr, "   [--ticks-per-us <value>]\n");
+        fprintf(stderr, 
+                "   [--cpel-input <filename>] [--clib-input <filename]>\n");
+        fprintf(stderr, 
+                "%s\n%s\n", version_string, minor_v_string);
+        exit(0);
+    }
+
+    if (clib_file) {
+        read_clib_file (clib_file);
+        title = clib_file;
+    } else if (cpel_file) {
+        read_cpel_file(cpel_file);
+        title = cpel_file;
+    } else if (event_file) {
+        read_events(event_file);
+        title = event_file;
+    }
+
+    set_window_title(title);
+
+    gtk_signal_connect (GTK_OBJECT (g_mainwindow), "key_press_event",
+                        (GtkSignalFunc) view1_handle_key_press_event, NULL);
+    gtk_container_add(GTK_CONTAINER(g_mainvbox), g_mainhbox);
+    gtk_widget_show(g_mainhbox);
+    gtk_container_add(GTK_CONTAINER(g_mainwindow), g_mainvbox);
+    gtk_widget_show(g_mainvbox);
+    gtk_widget_show(g_mainwindow);
+
+    gtk_main();
+    return(0);
+}