#define _GNU_SOURCE
#include <gtk/gtk.h>
#include <sys/time.h>
#include <stdio.h>      /* standard I/O                */
#include <stdlib.h>     /* for exit   - 1 occurrence   */
#include <unistd.h>
#include <string.h>

//double ge0,ge1,lsgfx,lsmem,lsalu,lsfpu,lscomp,lscompress,lsmedia,x;
FILE *fp;

//void gtk_table_set_row_spacings(GtkWidget *table, guint	spacing );
//void gtk_table_set_col_spacings(GtkWidget *table, guint	spacing );


void title() {
        printf("\tLSBENCH is a product of the linuxsociety team\n");
        printf("\tThis is version beta-0.3.2 dated 12/28/2007\n");
        printf("\tIt is not recommended that you run this benchmark on systems with less than 64MB of physical memory\n\n");
return;
}

struct GtkDialog
{
      GtkWindow window;    
      GtkWidget *table;
      GtkWidget *buffer;
      GtkWidget *view;
};


static void callback1( GtkWidget *widget,
                      gpointer   data )
{
	title();
//    GtkWidget *window;
//    GtkWidget *event_box;
//    GtkWidget *label;
	system("memdir/lsmem");
//   GtkWidget *window;
//  GtkWidget *view;
//  GtkTextBuffer *buffer;

//  view = gtk_text_view_new ();
//  buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
//  gtk_text_buffer_set_text (buffer, "Hello, this is some text", -1);
// gtk_container_add (GTK_CONTAINER (window), view);
// gtk_widget_show (window);

//	gtk_container_add (GTK_CONTAINER (window), event_box);
//        fp=fopen("memdir/lsmem.log", "r");
//        fscanf(fp, "%lf", &x); 
//        lsmem=x;
//        fclose(fp);

//    label = gtk_label_new ("testing");
//    gtk_container_add (GTK_CONTAINER (event_box), label);
//    gtk_widget_show (label);
//    gtk_widget_show (event_box);	

/*        view = gtk_text_view_new ();
        buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
    
        gchar *str;
    
        fp=fopen("memdir/lsmem.log", "r");
        fscanf(fp, "%s", str);
        fclose(fp);

//      buffer1 = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));

//      gchar *str1;
//        fp=fopen("aludir/lsalu.log", "r");
//        fscanf(fp, "%s", str1);
//        fclose(fp);
//      strcat(str, str1);   

        gtk_text_buffer_set_text (buffer,str, -1);

        gtk_table_attach_defaults (GTK_TABLE (table), view, 1, 2, 0, 7);
    gtk_widget_show (view);
*/
system("./results&");

}

static void callback2( GtkWidget *widget,
                      gpointer   data )
{
	title();
        system("aludir/lsalu");
	system("./results&");                                  
}

static void callback3( GtkWidget *widget,
                      gpointer   data )
{
	title();
        system("fpudir/lsfpu");                                  
        system("./results&");
}

static void callback4( GtkWidget *widget,
                      gpointer   data )
{
	title();
        system("compiledir/lscompile");                                  
        system("./results&");
}

static void callback5( GtkWidget *widget,
                      gpointer   data )
{
	title();
        system("compressiondir/lscompress");                                  
        system("./results&");
}

static void callback6( GtkWidget *widget,
                      gpointer   data )
{
	title();
        system("mediadir/lsmedia");                                  
        system("./results&");
}

static void callback7( GtkWidget *widget,
                      gpointer   data )
{
	title();
        system("gfxdir/lsgfx");                                  
        system("./results&");
}

static void callback8( GtkWidget *widget,
                      gpointer   data )
{
	title();
        system("memdir/lsmem");
        system("aludir/lsalu");
        system("fpudir/lsfpu");
        system("compiledir/lscompile");
        system("compressiondir/lscompress");
        system("mediadir/lsmedia");
        system("gfxdir/lsgfx");
/*
	fp=fopen("memdir/lsmem.log", "r");
	fscanf(fp, "%lf", &x);
	lsmem=x;
	fclose(fp);
        
	fp=fopen("aludir/lsalu.log", "r");
	fscanf(fp, "%lf", &x);
	lsalu=x;
	fclose(fp);

	fp=fopen("fpudir/lsfpu.log", "r");
	fscanf(fp, "%lf", &x); 
	lsfpu=x;
	fclose(fp);
        
	fp=fopen("compiledir/lscompile.log", "r");
	fscanf(fp, "%lf", &x);
	lscomp=x;
	fclose(fp);
        
	fp=fopen("compressiondir/lscompress.log", "r");
	fscanf(fp, "%lf", &x);  
	lscompress=x;
	fclose(fp);

	fp=fopen("mediadir/lsmedia.log", "r");
	fscanf(fp, "%lf", &x);
	lsmedia=x; 
	fclose(fp);
*/
        system("./results&");
                                  
}










static gboolean delete_event( GtkWidget *widget,
                              GdkEvent  *event,
                              gpointer   data )
{
    gtk_main_quit ();
    return FALSE;
}

int main( int   argc,
          char *argv[] )
{
    GtkWidget *window;
//    GtkWidget *window2;
    GtkWidget *table;
    GtkWidget *button;
//    GtkWidget *box1;
//    GtkWidget *box2;
//    GtkWidget *view;
//    GtkWidget *view1;
//    GtkTextBuffer *buffer;
//    GtkTextBuffer *buffer1;
//gtk_table_set_row_spacings( GTK_TABLE (table), 10 );
//gtk_table_set_col_spacings( GTK_TABLE (table), 10 );
//    GtkWidget *event_box;
 //   GtkWidget *label;

    gtk_init (&argc, &argv);
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
//    window2 = gtk_window_new (GTK_WINDOW_TOPLEVEL);

    gtk_window_set_title (GTK_WINDOW (window), "lsbench v0.3.0 gtk frontend");
//    gtk_window_set_title (GTK_WINDOW (window2), "./results");

    g_signal_connect (G_OBJECT (window), "delete_event",
		      G_CALLBACK (delete_event), NULL);

    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
//    gtk_container_set_border_width (GTK_CONTAINER (window2), 10);

    table = gtk_table_new (2, 9, FALSE);

//    box1 = gtk_vbox_new (FALSE, 0);
//    box2 = gtk_vbox_new (FALSE, 0);

    gtk_container_add (GTK_CONTAINER (window), table);
//    gtk_container_add (GTK_CONTAINER (table), box1);
//    gtk_container_add (GTK_CONTAINER (table), box2);

//    gtk_table_attach_defaults (GTK_TABLE (table), box1, 0, 0, 0, 0);

//    gtk_table_attach_defaults (GTK_TABLE (table), box2, 1, 2, 0, 1);

    button = gtk_button_new_with_label ("Run Memory Test");
    g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (callback1), (gpointer) "button 1");
// gtk_table_set_row_spacings( GTK_TABLE (table), 10 );
//    gtk_box_pack_start (GTK_BOX(box1), button, TRUE, TRUE, 0);
	gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 1, 0, 1);
//	gtk_table_attach (GTK_TABLE (table), button, 0, 1, 0, 1,GTK_SHRINK,1,1,1);
    gtk_widget_show (button);

    button = gtk_button_new_with_label ("Run ALU Test");
    g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (callback2), (gpointer) "button 2");
	gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 1, 1, 2);
//	gtk_table_attach (GTK_TABLE (table), button, 0, 1, 1, 2,GTK_SHRINK,1,1,1);
//    gtk_box_pack_start(GTK_BOX (box1), button, TRUE, TRUE, 0);
    gtk_widget_show (button);

    button = gtk_button_new_with_label ("Run FPU Test");
    g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (callback3), (gpointer) "button 3");
	gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 1, 2, 3);
//    gtk_box_pack_start(GTK_BOX (box1), button, TRUE, TRUE, 0);
    gtk_widget_show (button);

    button = gtk_button_new_with_label ("Run Compiling Test");
    g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (callback4), (gpointer) "button 4");
	gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 1, 3, 4);
//    gtk_box_pack_start(GTK_BOX (box1), button, TRUE, TRUE, 0);
    gtk_widget_show (button);

    button = gtk_button_new_with_label ("Run Compression Test");
    g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (callback5), (gpointer) "button 5");
	gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 1, 4, 5);
//    gtk_box_pack_start(GTK_BOX (box1), button, TRUE, TRUE, 0);
    gtk_widget_show (button);

    button = gtk_button_new_with_label ("Run Media Test");
    g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (callback6), (gpointer) "button 6");
	gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 1, 5, 6);
//    gtk_box_pack_start(GTK_BOX (box1), button, TRUE, TRUE, 0);
    gtk_widget_show (button);

    button = gtk_button_new_with_label ("Run Graphics Test");
    g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (callback7), (gpointer) "button 7");
	gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 1, 6, 7);
//    gtk_box_pack_start(GTK_BOX (box1), button, TRUE, TRUE, 0);
    gtk_widget_show (button);

    button = gtk_button_new_with_label ("Run All Tests");
    g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (callback8), (gpointer) "button 8");
	gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 1, 7, 8);
//    gtk_box_pack_start(GTK_BOX (box1), button, TRUE, TRUE, 0);
    gtk_widget_show (button);


 /* Add a "close" button to the bottom of the dialog */
    button = gtk_button_new_with_label ("close");
    g_signal_connect_swapped (G_OBJECT (button), "clicked", G_CALLBACK (delete_event), G_OBJECT (window));
gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 1, 8, 9);
//    gtk_box_pack_start(GTK_BOX (box1), button, TRUE, TRUE, 0);
    gtk_widget_show (button);
//    gtk_widget_show (box1);

//box2 = gtk_vbox_new (FALSE, 0);
//gtk_container_add (GTK_CONTAINER (window), box1);
// gtk_box_pack_start(GTK_BOX (box1), window, TRUE, TRUE, 0);
//gtk_container_add (GTK_CONTAINER (table), box2);
//gtk_table_attach_defaults (GTK_TABLE (table), box2, 1, 1, 1, 1);



/*        view = gtk_text_view_new ();
        buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));

        gchar *str;

        fp=fopen("memdir/lsmem.log", "r");
        fscanf(fp, "%s", str);
        fclose(fp);

//	buffer1 = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));

//	gchar *str1;
//        fp=fopen("aludir/lsalu.log", "r");
//        fscanf(fp, "%s", str1);
//        fclose(fp);
//	strcat(str, str1);

        gtk_text_buffer_set_text (buffer,str, -1);

	gtk_table_attach_defaults (GTK_TABLE (table), view, 1, 2, 0, 7);
    gtk_widget_show (view);


        view1 = gtk_text_view_new ();
        buffer1 = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view1));
        gchar *str1;
        fp=fopen("aludir/lsalu.log", "r");
        fscanf(fp, "%s", str1);
        fclose(fp);
        gtk_text_buffer_set_text (buffer1,str1, 0);
        gtk_table_attach_defaults (GTK_TABLE (table), view1, 1, 2, 1, 2);
    gtk_widget_show (view1);

        view = gtk_text_view_new ();
        buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
        gchar *str2;
        fp=fopen("fpudir/lsfpu.log", "r");
        fscanf(fp, "%s", str2);
        fclose(fp);
        gtk_text_buffer_set_text (buffer,str2, -1);
        gtk_table_attach_defaults (GTK_TABLE (table), view, 0, 2, 0, 3);
    gtk_widget_show (view);

        view = gtk_text_view_new ();
        buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
        gchar *str3;
        fp=fopen("compiledir/lscompile.log", "r");
        fscanf(fp, "%s", str3);
        fclose(fp);
        gtk_text_buffer_set_text (buffer,str3, -1);
        gtk_table_attach_defaults (GTK_TABLE (table), view, 0, 2, 0, 4);
    gtk_widget_show (view);

        view = gtk_text_view_new ();
        buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
        gchar *str4;
        fp=fopen("compressiondir/lscompress.log", "r");
        fscanf(fp, "%s", str4);
        fclose(fp);
        gtk_text_buffer_set_text (buffer,str4, -1);
        gtk_table_attach_defaults (GTK_TABLE (table), view, 0, 2, 0, 5);
    gtk_widget_show (view);

        view = gtk_text_view_new ();
        buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
        gchar *str5;
        fp=fopen("mediadir/lsmedia.log", "r");
        fscanf(fp, "%s", str5);
        fclose(fp);
        gtk_text_buffer_set_text (buffer,str5, -1);
        gtk_table_attach_defaults (GTK_TABLE (table), view, 0, 2, 0, 6);
    gtk_widget_show (view);
*/
//        view = gtk_text_view_new ();
//        buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
//        gchar *str6;
//        fp=fopen("gfxdir/lsgfx.log", "r");
//        fscanf(fp, "%s", str6);
//        fclose(fp);
//        gtk_text_buffer_set_text (buffer,str6, -1);
//        gtk_table_attach_defaults (GTK_TABLE (table), view, 1, 2, 0, 7);
//    gtk_widget_show (view);

//        view = gtk_text_view_new ();
//        buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
//        gchar *str7;
//        fp=fopen("l.log", "r");
//        fscanf(fp, "%s", str7);
//        fclose(fp);
//        gtk_text_buffer_set_text (buffer,str7, -1);
//        gtk_table_attach_defaults (GTK_TABLE (table), view, 1, 2, 0, 8);
//    gtk_widget_show (view);















//    gtk_widget_show (box2);

    gtk_widget_show (table);

    gtk_widget_show (window);
    //gtk_widget_show (window2);
    /* Rest in gtk_main and wait for the fun to begin! */
    gtk_main ();

    return 0;
}
