From 6b1d312011afb06cc4eac46c3a49abdbf9243a48 Mon Sep 17 00:00:00 2001 From: yangxx Date: Wed, 8 Oct 2003 17:21:58 +0000 Subject: [PATCH] Statistic viewer git-svn-id: http://ltt.polymtl.ca/svn@291 04897980-b3bd-0310-b5e0-8ef037075253 --- ltt/branches/poly/include/lttv/gtkTraceSet.h | 27 + .../poly/lttv/modules/gui/API/gtkTraceSet.c | 45 + .../lttv/modules/gui/mainWin/src/callbacks.c | 23 +- .../modules/gui/mainWin/src/init_module.c | 5 +- .../guiStatistic/.deps/guiStatistic.Plo | 937 ++++++++++++++++++ .../lttv/modules/guiStatistic/Makefile.am | 16 + .../lttv/modules/guiStatistic/guiStatistic.c | 485 +++++++++ .../poly/lttv/modules/icons/Makefile.am | 4 +- .../modules/icons/hGuiStatisticInsert.xpm | 48 + 9 files changed, 1580 insertions(+), 10 deletions(-) create mode 100644 ltt/branches/poly/lttv/modules/guiStatistic/.deps/guiStatistic.Plo create mode 100644 ltt/branches/poly/lttv/modules/guiStatistic/Makefile.am create mode 100644 ltt/branches/poly/lttv/modules/guiStatistic/guiStatistic.c create mode 100644 ltt/branches/poly/lttv/modules/icons/hGuiStatisticInsert.xpm diff --git a/ltt/branches/poly/include/lttv/gtkTraceSet.h b/ltt/branches/poly/include/lttv/gtkTraceSet.h index 62aaf2ad..6dd9ccd4 100644 --- a/ltt/branches/poly/include/lttv/gtkTraceSet.h +++ b/ltt/branches/poly/include/lttv/gtkTraceSet.h @@ -14,6 +14,7 @@ #include #include #include +#include /** * Function to register a view constructor so that main window can generate @@ -378,3 +379,29 @@ void contextRemoveHooks(mainWindow *main_win , */ void getTracesetTimeSpan(mainWindow *main_win, LttTime * start, LttTime* end); + + +/** + * Function to add/remove event hooks for state + * @param main_win the main window the viewer belongs to. + */ + +void stateAddEventHooks(mainWindow *main_win ); +void stateRemoveEventHooks(mainWindow *main_win ); + + +/** + * Function to add/remove event hooks for stats + * @param main_win the main window the viewer belongs to. + */ + +void statsAddEventHooks(mainWindow *main_win ); +void statsRemoveEventHooks(mainWindow *main_win ); + + +/** + * Function to get the stats of the traceset + * @param main_win the main window the viewer belongs to. + */ + +LttvTracesetStats* getTracesetStats(mainWindow *main_win); diff --git a/ltt/branches/poly/lttv/modules/gui/API/gtkTraceSet.c b/ltt/branches/poly/lttv/modules/gui/API/gtkTraceSet.c index f5ba86b9..336e1f8b 100644 --- a/ltt/branches/poly/lttv/modules/gui/API/gtkTraceSet.c +++ b/ltt/branches/poly/lttv/modules/gui/API/gtkTraceSet.c @@ -18,6 +18,9 @@ #include #include #include +#include +#include + /** * Internal function parts @@ -675,3 +678,45 @@ void getTracesetTimeSpan(mainWindow *main_win, LttTime * start, LttTime* end) } } } + + +/** + * Function to add/remove event hooks for state + * @param main_win the main window the viewer belongs to. + */ + +void stateAddEventHooks(mainWindow *main_win ) +{ + lttv_state_add_event_hooks((LttvTracesetState*)main_win->traceset_context); +} + +void stateRemoveEventHooks(mainWindow *main_win ) +{ + lttv_state_remove_event_hooks((LttvTracesetState*)main_win->traceset_context); +} + + +/** + * Function to add/remove event hooks for stats + * @param main_win the main window the viewer belongs to. + */ + +void statsAddEventHooks(mainWindow *main_win ) +{ + lttv_stats_add_event_hooks((LttvTracesetStats*)main_win->traceset_context); +} + +void statsRemoveEventHooks(mainWindow *main_win ) +{ + lttv_stats_remove_event_hooks((LttvTracesetStats*)main_win->traceset_context); +} + +/** + * Function to get the stats of the traceset + * @param main_win the main window the viewer belongs to. + */ + +LttvTracesetStats* getTracesetStats(mainWindow *main_win) +{ + return (LttvTracesetStats*)main_win->traceset_context; +} diff --git a/ltt/branches/poly/lttv/modules/gui/mainWin/src/callbacks.c b/ltt/branches/poly/lttv/modules/gui/mainWin/src/callbacks.c index 1c184ab0..4d6499c6 100644 --- a/ltt/branches/poly/lttv/modules/gui/mainWin/src/callbacks.c +++ b/ltt/branches/poly/lttv/modules/gui/mainWin/src/callbacks.c @@ -12,6 +12,9 @@ #include #include #include +#include + +#define PATH_LENGTH 256 extern systemView * gSysView; extern LttvTracesetContext * gTracesetContext; @@ -108,22 +111,20 @@ void get_label_string (GtkWidget * text, gchar * label) strcpy(label,gtk_entry_get_text(entry)); } -void get_label(GtkWindow * mw, gchar * str) +void get_label(GtkWindow * mw, gchar * str, gchar* dialogue_title, gchar * label_str) { GtkWidget * dialogue; GtkWidget * text; GtkWidget * label; gint id; - strcpy(str,"Page"); //default label - - dialogue = gtk_dialog_new_with_buttons("Get the name of the tab",mw, + dialogue = gtk_dialog_new_with_buttons(dialogue_title,mw, GTK_DIALOG_MODAL, GTK_STOCK_OK,GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL,GTK_RESPONSE_REJECT, NULL); - label = gtk_label_new("Please input tab's name"); + label = gtk_label_new(label_str); gtk_widget_show(label); text = gtk_entry_new(); @@ -373,7 +374,7 @@ on_tab_activate (GtkMenuItem *menuitem, gpointer user_data) { GList * list; - gchar label[64]; + gchar label[PATH_LENGTH]; tab * tmpTab; GtkWidget * pane; @@ -415,7 +416,8 @@ on_tab_activate (GtkMenuItem *menuitem, gtk_widget_show((GtkWidget*)tmpTab->custom); tmpTab->Next = NULL; - get_label((GtkWindow*)mwData->MWindow, label); + strcpy(label,"Page"); + get_label((GtkWindow*)mwData->MWindow, label,"Get the name of the tab","Please input tab's name"); tmpTab->label = gtk_label_new (label); gtk_widget_show (tmpTab->label); @@ -606,7 +608,14 @@ void on_add_module_search_path_activate (GtkMenuItem *menuitem, gpointer user_data) { + gchar str[PATH_LENGTH]; + mainWindow * mwData = get_window_data_struct((GtkWidget*)menuitem); g_printf("Add module search path\n"); + str[0] = '\0'; + get_label((GtkWindow*)mwData->MWindow, str, "Add module search path", "Please input a search path:"); + if(strlen(str)){ + lttv_module_path_add(str); + } } diff --git a/ltt/branches/poly/lttv/modules/gui/mainWin/src/init_module.c b/ltt/branches/poly/lttv/modules/gui/mainWin/src/init_module.c index 4ed046f9..4e55042d 100644 --- a/ltt/branches/poly/lttv/modules/gui/mainWin/src/init_module.c +++ b/ltt/branches/poly/lttv/modules/gui/mainWin/src/init_module.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include @@ -27,7 +28,7 @@ /* global variable */ systemView * gSysView; -LttvTracesetState * gTracesetContext = NULL; +LttvTracesetStats * gTracesetContext = NULL; static LttvTraceset * traceset; /** Array containing instanced objects. */ @@ -118,7 +119,7 @@ static gboolean Window_Creation_Hook(void *hook_data, void *call_data) mw->CurrentTab = NULL; mw->Attributes = LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE, NULL)); if(!gTracesetContext){ - gTracesetContext = g_object_new(LTTV_TRACESET_STATE_TYPE, NULL); + gTracesetContext = g_object_new(LTTV_TRACESET_STATS_TYPE, NULL); //FIXME: lttv_context_fini should be called some where. lttv_context_init(LTTV_TRACESET_CONTEXT(gTracesetContext), traceset); } diff --git a/ltt/branches/poly/lttv/modules/guiStatistic/.deps/guiStatistic.Plo b/ltt/branches/poly/lttv/modules/guiStatistic/.deps/guiStatistic.Plo new file mode 100644 index 00000000..85599466 --- /dev/null +++ b/ltt/branches/poly/lttv/modules/guiStatistic/.deps/guiStatistic.Plo @@ -0,0 +1,937 @@ +guiStatistic.lo guiStatistic.o: guiStatistic.c \ + /usr/include/glib-2.0/glib.h /usr/include/glib-2.0/glib/galloca.h \ + /usr/include/glib-2.0/glib/gtypes.h \ + /usr/lib/glib-2.0/include/glibconfig.h \ + /usr/include/glib-2.0/glib/gmacros.h \ + /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/stddef.h \ + /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/limits.h \ + /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/syslimits.h \ + /usr/include/limits.h /usr/include/features.h /usr/include/sys/cdefs.h \ + /usr/include/gnu/stubs.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h \ + /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/float.h \ + /usr/include/glib-2.0/glib/garray.h \ + /usr/include/glib-2.0/glib/gasyncqueue.h \ + /usr/include/glib-2.0/glib/gthread.h \ + /usr/include/glib-2.0/glib/gerror.h /usr/include/glib-2.0/glib/gquark.h \ + /usr/include/glib-2.0/glib/gbacktrace.h \ + /usr/include/glib-2.0/glib/gcache.h /usr/include/glib-2.0/glib/glist.h \ + /usr/include/glib-2.0/glib/gmem.h \ + /usr/include/glib-2.0/glib/gcompletion.h \ + /usr/include/glib-2.0/glib/gconvert.h \ + /usr/include/glib-2.0/glib/gdataset.h \ + /usr/include/glib-2.0/glib/gdate.h /usr/include/glib-2.0/glib/gdir.h \ + /usr/include/glib-2.0/glib/gfileutils.h \ + /usr/include/glib-2.0/glib/ghash.h /usr/include/glib-2.0/glib/ghook.h \ + /usr/include/glib-2.0/glib/giochannel.h \ + /usr/include/glib-2.0/glib/gmain.h /usr/include/glib-2.0/glib/gslist.h \ + /usr/include/glib-2.0/glib/gstring.h \ + /usr/include/glib-2.0/glib/gunicode.h \ + /usr/include/glib-2.0/glib/gmarkup.h \ + /usr/include/glib-2.0/glib/gmessages.h \ + /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/stdarg.h \ + /usr/include/glib-2.0/glib/gnode.h \ + /usr/include/glib-2.0/glib/gpattern.h \ + /usr/include/glib-2.0/glib/gprimes.h \ + /usr/include/glib-2.0/glib/gqsort.h /usr/include/glib-2.0/glib/gqueue.h \ + /usr/include/glib-2.0/glib/grand.h /usr/include/glib-2.0/glib/grel.h \ + /usr/include/glib-2.0/glib/gscanner.h \ + /usr/include/glib-2.0/glib/gshell.h /usr/include/glib-2.0/glib/gspawn.h \ + /usr/include/glib-2.0/glib/gstrfuncs.h \ + /usr/include/glib-2.0/glib/gthreadpool.h \ + /usr/include/glib-2.0/glib/gtimer.h /usr/include/glib-2.0/glib/gtree.h \ + /usr/include/glib-2.0/glib/gutils.h /usr/include/glib-2.0/gmodule.h \ + /usr/include/gtk-2.0/gtk/gtk.h /usr/include/gtk-2.0/gdk/gdk.h \ + /usr/include/gtk-2.0/gdk/gdkcolor.h /usr/include/gtk-2.0/gdk/gdktypes.h \ + /usr/include/pango-1.0/pango/pango.h \ + /usr/include/pango-1.0/pango/pango-attributes.h \ + /usr/include/pango-1.0/pango/pango-font.h \ + /usr/include/pango-1.0/pango/pango-coverage.h \ + /usr/include/pango-1.0/pango/pango-types.h \ + /usr/include/glib-2.0/glib-object.h \ + /usr/include/glib-2.0/gobject/gboxed.h \ + /usr/include/glib-2.0/gobject/gtype.h \ + /usr/include/glib-2.0/gobject/genums.h \ + /usr/include/glib-2.0/gobject/gobject.h \ + /usr/include/glib-2.0/gobject/gvalue.h \ + /usr/include/glib-2.0/gobject/gparam.h \ + /usr/include/glib-2.0/gobject/gclosure.h \ + /usr/include/glib-2.0/gobject/gsignal.h \ + /usr/include/glib-2.0/gobject/gmarshal.h \ + /usr/include/glib-2.0/gobject/gparamspecs.h \ + /usr/include/glib-2.0/gobject/gsourceclosure.h \ + /usr/include/glib-2.0/gobject/gtypemodule.h \ + /usr/include/glib-2.0/gobject/gtypeplugin.h \ + /usr/include/glib-2.0/gobject/gvaluearray.h \ + /usr/include/glib-2.0/gobject/gvaluetypes.h \ + /usr/include/pango-1.0/pango/pango-break.h \ + /usr/include/pango-1.0/pango/pango-item.h \ + /usr/include/pango-1.0/pango/pango-context.h \ + /usr/include/pango-1.0/pango/pango-fontmap.h \ + /usr/include/pango-1.0/pango/pango-fontset.h \ + /usr/include/pango-1.0/pango/pango-engine.h \ + /usr/include/pango-1.0/pango/pango-glyph.h \ + /usr/include/pango-1.0/pango/pango-enum-types.h \ + /usr/include/pango-1.0/pango/pango-layout.h \ + /usr/include/pango-1.0/pango/pango-glyph-item.h \ + /usr/include/pango-1.0/pango/pango-tabs.h \ + /usr/lib/gtk-2.0/include/gdkconfig.h \ + /usr/include/gtk-2.0/gdk/gdkcursor.h \ + /usr/include/gtk-2.0/gdk/gdkdisplay.h \ + /usr/include/gtk-2.0/gdk/gdkevents.h /usr/include/gtk-2.0/gdk/gdkdnd.h \ + /usr/include/gtk-2.0/gdk/gdkinput.h \ + /usr/include/gtk-2.0/gdk/gdkdrawable.h /usr/include/gtk-2.0/gdk/gdkgc.h \ + /usr/include/gtk-2.0/gdk/gdkrgb.h \ + /usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf.h \ + /usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-features.h \ + /usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-loader.h \ + /usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-enum-types.h \ + /usr/include/gtk-2.0/gdk/gdkenumtypes.h \ + /usr/include/gtk-2.0/gdk/gdkfont.h /usr/include/gtk-2.0/gdk/gdkimage.h \ + /usr/include/gtk-2.0/gdk/gdkkeys.h \ + /usr/include/gtk-2.0/gdk/gdkdisplaymanager.h \ + /usr/include/gtk-2.0/gdk/gdkpango.h \ + /usr/include/gtk-2.0/gdk/gdkpixbuf.h \ + /usr/include/gtk-2.0/gdk/gdkpixmap.h \ + /usr/include/gtk-2.0/gdk/gdkproperty.h \ + /usr/include/gtk-2.0/gdk/gdkregion.h \ + /usr/include/gtk-2.0/gdk/gdkscreen.h \ + /usr/include/gtk-2.0/gdk/gdkselection.h \ + /usr/include/gtk-2.0/gdk/gdkvisual.h \ + /usr/include/gtk-2.0/gdk/gdkwindow.h \ + /usr/include/gtk-2.0/gtk/gtkaccelgroup.h \ + /usr/include/gtk-2.0/gtk/gtkenums.h \ + /usr/include/gtk-2.0/gtk/gtkaccellabel.h \ + /usr/include/gtk-2.0/gtk/gtklabel.h /usr/include/gtk-2.0/gtk/gtkmisc.h \ + /usr/include/gtk-2.0/gtk/gtkwidget.h \ + /usr/include/gtk-2.0/gtk/gtkobject.h \ + /usr/include/gtk-2.0/gtk/gtktypeutils.h \ + /usr/include/gtk-2.0/gtk/gtktypebuiltins.h \ + /usr/include/gtk-2.0/gtk/gtkdebug.h \ + /usr/include/gtk-2.0/gtk/gtkadjustment.h \ + /usr/include/gtk-2.0/gtk/gtkstyle.h \ + /usr/include/gtk-2.0/gtk/gtksettings.h /usr/include/gtk-2.0/gtk/gtkrc.h \ + /usr/include/atk-1.0/atk/atkobject.h \ + /usr/include/atk-1.0/atk/atkstate.h \ + /usr/include/atk-1.0/atk/atkrelationtype.h \ + /usr/include/gtk-2.0/gtk/gtkwindow.h /usr/include/gtk-2.0/gtk/gtkbin.h \ + /usr/include/gtk-2.0/gtk/gtkcontainer.h \ + /usr/include/gtk-2.0/gtk/gtkmenu.h \ + /usr/include/gtk-2.0/gtk/gtkmenushell.h \ + /usr/include/gtk-2.0/gtk/gtkaccelmap.h \ + /usr/include/gtk-2.0/gtk/gtkaccessible.h /usr/include/atk-1.0/atk/atk.h \ + /usr/include/atk-1.0/atk/atkaction.h \ + /usr/include/atk-1.0/atk/atkcomponent.h \ + /usr/include/atk-1.0/atk/atkutil.h \ + /usr/include/atk-1.0/atk/atkdocument.h \ + /usr/include/atk-1.0/atk/atkeditabletext.h \ + /usr/include/atk-1.0/atk/atktext.h \ + /usr/include/atk-1.0/atk/atkgobjectaccessible.h \ + /usr/include/atk-1.0/atk/atkhyperlink.h \ + /usr/include/atk-1.0/atk/atkhypertext.h \ + /usr/include/atk-1.0/atk/atkimage.h \ + /usr/include/atk-1.0/atk/atknoopobject.h \ + /usr/include/atk-1.0/atk/atknoopobjectfactory.h \ + /usr/include/atk-1.0/atk/atkobjectfactory.h \ + /usr/include/atk-1.0/atk/atkregistry.h \ + /usr/include/atk-1.0/atk/atkrelation.h \ + /usr/include/atk-1.0/atk/atkrelationset.h \ + /usr/include/atk-1.0/atk/atkselection.h \ + /usr/include/atk-1.0/atk/atkstateset.h \ + /usr/include/atk-1.0/atk/atkstreamablecontent.h \ + /usr/include/atk-1.0/atk/atktable.h /usr/include/atk-1.0/atk/atkvalue.h \ + /usr/include/gtk-2.0/gtk/gtkalignment.h \ + /usr/include/gtk-2.0/gtk/gtkaspectframe.h \ + /usr/include/gtk-2.0/gtk/gtkframe.h /usr/include/gtk-2.0/gtk/gtkarrow.h \ + /usr/include/gtk-2.0/gtk/gtkbindings.h \ + /usr/include/gtk-2.0/gtk/gtkbox.h /usr/include/gtk-2.0/gtk/gtkbbox.h \ + /usr/include/gtk-2.0/gtk/gtkbutton.h \ + /usr/include/gtk-2.0/gtk/gtkcalendar.h \ + /usr/include/gtk-2.0/gtk/gtksignal.h \ + /usr/include/gtk-2.0/gtk/gtkmarshal.h \ + /usr/include/gtk-2.0/gtk/gtkcellrenderer.h \ + /usr/include/gtk-2.0/gtk/gtkcelleditable.h \ + /usr/include/gtk-2.0/gtk/gtkcellrenderertext.h \ + /usr/include/gtk-2.0/gtk/gtkcellrenderertoggle.h \ + /usr/include/gtk-2.0/gtk/gtkcellrendererpixbuf.h \ + /usr/include/gtk-2.0/gtk/gtkcheckbutton.h \ + /usr/include/gtk-2.0/gtk/gtktogglebutton.h \ + /usr/include/gtk-2.0/gtk/gtkcheckmenuitem.h \ + /usr/include/gtk-2.0/gtk/gtkmenuitem.h \ + /usr/include/gtk-2.0/gtk/gtkitem.h \ + /usr/include/gtk-2.0/gtk/gtkclipboard.h \ + /usr/include/gtk-2.0/gtk/gtkselection.h \ + /usr/include/gtk-2.0/gtk/gtkclist.h \ + /usr/include/gtk-2.0/gtk/gtkhscrollbar.h \ + /usr/include/gtk-2.0/gtk/gtkscrollbar.h \ + /usr/include/gtk-2.0/gtk/gtkrange.h \ + /usr/include/gtk-2.0/gtk/gtkvscrollbar.h \ + /usr/include/gtk-2.0/gtk/gtkcolorsel.h \ + /usr/include/gtk-2.0/gtk/gtkdialog.h /usr/include/gtk-2.0/gtk/gtkvbox.h \ + /usr/include/gtk-2.0/gtk/gtkcolorseldialog.h \ + /usr/include/gtk-2.0/gtk/gtkcombo.h /usr/include/gtk-2.0/gtk/gtkhbox.h \ + /usr/include/gtk-2.0/gtk/gtkctree.h /usr/include/gtk-2.0/gtk/gtkcurve.h \ + /usr/include/gtk-2.0/gtk/gtkdrawingarea.h \ + /usr/include/gtk-2.0/gtk/gtkdnd.h \ + /usr/include/gtk-2.0/gtk/gtkeditable.h \ + /usr/include/gtk-2.0/gtk/gtkentry.h \ + /usr/include/gtk-2.0/gtk/gtkimcontext.h \ + /usr/include/gtk-2.0/gtk/gtkeventbox.h \ + /usr/include/gtk-2.0/gtk/gtkfilesel.h \ + /usr/include/gtk-2.0/gtk/gtkfixed.h \ + /usr/include/gtk-2.0/gtk/gtkfontsel.h \ + /usr/include/gtk-2.0/gtk/gtkgamma.h /usr/include/gtk-2.0/gtk/gtkgc.h \ + /usr/include/gtk-2.0/gtk/gtkhandlebox.h \ + /usr/include/gtk-2.0/gtk/gtkhbbox.h \ + /usr/include/gtk-2.0/gtk/gtkhpaned.h \ + /usr/include/gtk-2.0/gtk/gtkpaned.h \ + /usr/include/gtk-2.0/gtk/gtkhruler.h \ + /usr/include/gtk-2.0/gtk/gtkruler.h \ + /usr/include/gtk-2.0/gtk/gtkhscale.h \ + /usr/include/gtk-2.0/gtk/gtkscale.h \ + /usr/include/gtk-2.0/gtk/gtkhseparator.h \ + /usr/include/gtk-2.0/gtk/gtkseparator.h \ + /usr/include/gtk-2.0/gtk/gtkiconfactory.h \ + /usr/include/gtk-2.0/gtk/gtkimage.h \ + /usr/include/gtk-2.0/gtk/gtkimagemenuitem.h \ + /usr/include/gtk-2.0/gtk/gtkimcontextsimple.h \ + /usr/include/gtk-2.0/gtk/gtkimmulticontext.h \ + /usr/include/gtk-2.0/gtk/gtkinputdialog.h \ + /usr/include/gtk-2.0/gtk/gtkinvisible.h \ + /usr/include/gtk-2.0/gtk/gtkitemfactory.h \ + /usr/include/gtk-2.0/gtk/gtklayout.h /usr/include/gtk-2.0/gtk/gtklist.h \ + /usr/include/gtk-2.0/gtk/gtklistitem.h \ + /usr/include/gtk-2.0/gtk/gtkliststore.h \ + /usr/include/gtk-2.0/gtk/gtktreemodel.h \ + /usr/include/gtk-2.0/gtk/gtktreesortable.h \ + /usr/include/gtk-2.0/gtk/gtkmain.h \ + /usr/include/gtk-2.0/gtk/gtkmenubar.h \ + /usr/include/gtk-2.0/gtk/gtkmessagedialog.h \ + /usr/include/gtk-2.0/gtk/gtknotebook.h \ + /usr/include/gtk-2.0/gtk/gtkoldeditable.h \ + /usr/include/gtk-2.0/gtk/gtkoptionmenu.h \ + /usr/include/gtk-2.0/gtk/gtkpixmap.h /usr/include/gtk-2.0/gtk/gtkplug.h \ + /usr/include/gtk-2.0/gtk/gtksocket.h \ + /usr/include/gtk-2.0/gtk/gtkpreview.h \ + /usr/include/gtk-2.0/gtk/gtkprogress.h \ + /usr/include/gtk-2.0/gtk/gtkprogressbar.h \ + /usr/include/gtk-2.0/gtk/gtkradiobutton.h \ + /usr/include/gtk-2.0/gtk/gtkradiomenuitem.h \ + /usr/include/gtk-2.0/gtk/gtkscrolledwindow.h \ + /usr/include/gtk-2.0/gtk/gtkviewport.h \ + /usr/include/gtk-2.0/gtk/gtkseparatormenuitem.h \ + /usr/include/gtk-2.0/gtk/gtksizegroup.h \ + /usr/include/gtk-2.0/gtk/gtkspinbutton.h \ + /usr/include/gtk-2.0/gtk/gtkstock.h \ + /usr/include/gtk-2.0/gtk/gtkstatusbar.h \ + /usr/include/gtk-2.0/gtk/gtktable.h \ + /usr/include/gtk-2.0/gtk/gtktearoffmenuitem.h \ + /usr/include/gtk-2.0/gtk/gtktext.h \ + /usr/include/gtk-2.0/gtk/gtktextbuffer.h \ + /usr/include/gtk-2.0/gtk/gtktexttagtable.h \ + /usr/include/gtk-2.0/gtk/gtktexttag.h \ + /usr/include/gtk-2.0/gtk/gtktextiter.h \ + /usr/include/gtk-2.0/gtk/gtktextchild.h \ + /usr/include/gtk-2.0/gtk/gtktextmark.h \ + /usr/include/gtk-2.0/gtk/gtktextview.h \ + /usr/include/gtk-2.0/gtk/gtktipsquery.h \ + /usr/include/gtk-2.0/gtk/gtktoolbar.h \ + /usr/include/gtk-2.0/gtk/gtktooltips.h \ + /usr/include/gtk-2.0/gtk/gtktree.h \ + /usr/include/gtk-2.0/gtk/gtktreednd.h \ + /usr/include/gtk-2.0/gtk/gtktreeitem.h \ + /usr/include/gtk-2.0/gtk/gtktreemodelsort.h \ + /usr/include/gtk-2.0/gtk/gtktreeselection.h \ + /usr/include/gtk-2.0/gtk/gtktreeview.h \ + /usr/include/gtk-2.0/gtk/gtktreeviewcolumn.h \ + /usr/include/gtk-2.0/gtk/gtktreestore.h \ + /usr/include/gtk-2.0/gtk/gtkvbbox.h \ + /usr/include/gtk-2.0/gtk/gtkversion.h \ + /usr/include/gtk-2.0/gtk/gtkvpaned.h \ + /usr/include/gtk-2.0/gtk/gtkvruler.h \ + /usr/include/gtk-2.0/gtk/gtkvscale.h \ + /usr/include/gtk-2.0/gtk/gtkvseparator.h ../../../include/lttv/module.h \ + ../../../include/lttv/gtkTraceSet.h ../../../include/ltt/ltt.h \ + ../../../include/ltt/LTTTypes.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/wordsize.h \ + /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/sigset.h \ + /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ + /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ + /usr/include/sys/time.h ../../../include/ltt/ltt-private.h \ + ../../../include/ltt/type.h ../../../include/ltt/trace.h \ + ../../../include/lttv/hook.h ../../../include/lttv/common.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h ../../../include/lttv/stats.h \ + ../../../include/lttv/state.h ../../../include/lttv/processTrace.h \ + ../../../include/lttv/traceset.h ../../../include/lttv/attribute.h \ + ../../../include/lttv/iattribute.h ../../../include/ltt/event.h \ + /usr/include/string.h /usr/include/bits/string.h \ + /usr/include/bits/string2.h /usr/include/stdlib.h \ + ../icons/hGuiStatisticInsert.xpm + +/usr/include/glib-2.0/glib.h: + +/usr/include/glib-2.0/glib/galloca.h: + +/usr/include/glib-2.0/glib/gtypes.h: + +/usr/lib/glib-2.0/include/glibconfig.h: + +/usr/include/glib-2.0/glib/gmacros.h: + +/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/stddef.h: + +/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/limits.h: + +/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/syslimits.h: + +/usr/include/limits.h: + +/usr/include/features.h: + +/usr/include/sys/cdefs.h: + +/usr/include/gnu/stubs.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/float.h: + +/usr/include/glib-2.0/glib/garray.h: + +/usr/include/glib-2.0/glib/gasyncqueue.h: + +/usr/include/glib-2.0/glib/gthread.h: + +/usr/include/glib-2.0/glib/gerror.h: + +/usr/include/glib-2.0/glib/gquark.h: + +/usr/include/glib-2.0/glib/gbacktrace.h: + +/usr/include/glib-2.0/glib/gcache.h: + +/usr/include/glib-2.0/glib/glist.h: + +/usr/include/glib-2.0/glib/gmem.h: + +/usr/include/glib-2.0/glib/gcompletion.h: + +/usr/include/glib-2.0/glib/gconvert.h: + +/usr/include/glib-2.0/glib/gdataset.h: + +/usr/include/glib-2.0/glib/gdate.h: + +/usr/include/glib-2.0/glib/gdir.h: + +/usr/include/glib-2.0/glib/gfileutils.h: + +/usr/include/glib-2.0/glib/ghash.h: + +/usr/include/glib-2.0/glib/ghook.h: + +/usr/include/glib-2.0/glib/giochannel.h: + +/usr/include/glib-2.0/glib/gmain.h: + +/usr/include/glib-2.0/glib/gslist.h: + +/usr/include/glib-2.0/glib/gstring.h: + +/usr/include/glib-2.0/glib/gunicode.h: + +/usr/include/glib-2.0/glib/gmarkup.h: + +/usr/include/glib-2.0/glib/gmessages.h: + +/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/stdarg.h: + +/usr/include/glib-2.0/glib/gnode.h: + +/usr/include/glib-2.0/glib/gpattern.h: + +/usr/include/glib-2.0/glib/gprimes.h: + +/usr/include/glib-2.0/glib/gqsort.h: + +/usr/include/glib-2.0/glib/gqueue.h: + +/usr/include/glib-2.0/glib/grand.h: + +/usr/include/glib-2.0/glib/grel.h: + +/usr/include/glib-2.0/glib/gscanner.h: + +/usr/include/glib-2.0/glib/gshell.h: + +/usr/include/glib-2.0/glib/gspawn.h: + +/usr/include/glib-2.0/glib/gstrfuncs.h: + +/usr/include/glib-2.0/glib/gthreadpool.h: + +/usr/include/glib-2.0/glib/gtimer.h: + +/usr/include/glib-2.0/glib/gtree.h: + +/usr/include/glib-2.0/glib/gutils.h: + +/usr/include/glib-2.0/gmodule.h: + +/usr/include/gtk-2.0/gtk/gtk.h: + +/usr/include/gtk-2.0/gdk/gdk.h: + +/usr/include/gtk-2.0/gdk/gdkcolor.h: + +/usr/include/gtk-2.0/gdk/gdktypes.h: + +/usr/include/pango-1.0/pango/pango.h: + +/usr/include/pango-1.0/pango/pango-attributes.h: + +/usr/include/pango-1.0/pango/pango-font.h: + +/usr/include/pango-1.0/pango/pango-coverage.h: + +/usr/include/pango-1.0/pango/pango-types.h: + +/usr/include/glib-2.0/glib-object.h: + +/usr/include/glib-2.0/gobject/gboxed.h: + +/usr/include/glib-2.0/gobject/gtype.h: + +/usr/include/glib-2.0/gobject/genums.h: + +/usr/include/glib-2.0/gobject/gobject.h: + +/usr/include/glib-2.0/gobject/gvalue.h: + +/usr/include/glib-2.0/gobject/gparam.h: + +/usr/include/glib-2.0/gobject/gclosure.h: + +/usr/include/glib-2.0/gobject/gsignal.h: + +/usr/include/glib-2.0/gobject/gmarshal.h: + +/usr/include/glib-2.0/gobject/gparamspecs.h: + +/usr/include/glib-2.0/gobject/gsourceclosure.h: + +/usr/include/glib-2.0/gobject/gtypemodule.h: + +/usr/include/glib-2.0/gobject/gtypeplugin.h: + +/usr/include/glib-2.0/gobject/gvaluearray.h: + +/usr/include/glib-2.0/gobject/gvaluetypes.h: + +/usr/include/pango-1.0/pango/pango-break.h: + +/usr/include/pango-1.0/pango/pango-item.h: + +/usr/include/pango-1.0/pango/pango-context.h: + +/usr/include/pango-1.0/pango/pango-fontmap.h: + +/usr/include/pango-1.0/pango/pango-fontset.h: + +/usr/include/pango-1.0/pango/pango-engine.h: + +/usr/include/pango-1.0/pango/pango-glyph.h: + +/usr/include/pango-1.0/pango/pango-enum-types.h: + +/usr/include/pango-1.0/pango/pango-layout.h: + +/usr/include/pango-1.0/pango/pango-glyph-item.h: + +/usr/include/pango-1.0/pango/pango-tabs.h: + +/usr/lib/gtk-2.0/include/gdkconfig.h: + +/usr/include/gtk-2.0/gdk/gdkcursor.h: + +/usr/include/gtk-2.0/gdk/gdkdisplay.h: + +/usr/include/gtk-2.0/gdk/gdkevents.h: + +/usr/include/gtk-2.0/gdk/gdkdnd.h: + +/usr/include/gtk-2.0/gdk/gdkinput.h: + +/usr/include/gtk-2.0/gdk/gdkdrawable.h: + +/usr/include/gtk-2.0/gdk/gdkgc.h: + +/usr/include/gtk-2.0/gdk/gdkrgb.h: + +/usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf.h: + +/usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-features.h: + +/usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-loader.h: + +/usr/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-enum-types.h: + +/usr/include/gtk-2.0/gdk/gdkenumtypes.h: + +/usr/include/gtk-2.0/gdk/gdkfont.h: + +/usr/include/gtk-2.0/gdk/gdkimage.h: + +/usr/include/gtk-2.0/gdk/gdkkeys.h: + +/usr/include/gtk-2.0/gdk/gdkdisplaymanager.h: + +/usr/include/gtk-2.0/gdk/gdkpango.h: + +/usr/include/gtk-2.0/gdk/gdkpixbuf.h: + +/usr/include/gtk-2.0/gdk/gdkpixmap.h: + +/usr/include/gtk-2.0/gdk/gdkproperty.h: + +/usr/include/gtk-2.0/gdk/gdkregion.h: + +/usr/include/gtk-2.0/gdk/gdkscreen.h: + +/usr/include/gtk-2.0/gdk/gdkselection.h: + +/usr/include/gtk-2.0/gdk/gdkvisual.h: + +/usr/include/gtk-2.0/gdk/gdkwindow.h: + +/usr/include/gtk-2.0/gtk/gtkaccelgroup.h: + +/usr/include/gtk-2.0/gtk/gtkenums.h: + +/usr/include/gtk-2.0/gtk/gtkaccellabel.h: + +/usr/include/gtk-2.0/gtk/gtklabel.h: + +/usr/include/gtk-2.0/gtk/gtkmisc.h: + +/usr/include/gtk-2.0/gtk/gtkwidget.h: + +/usr/include/gtk-2.0/gtk/gtkobject.h: + +/usr/include/gtk-2.0/gtk/gtktypeutils.h: + +/usr/include/gtk-2.0/gtk/gtktypebuiltins.h: + +/usr/include/gtk-2.0/gtk/gtkdebug.h: + +/usr/include/gtk-2.0/gtk/gtkadjustment.h: + +/usr/include/gtk-2.0/gtk/gtkstyle.h: + +/usr/include/gtk-2.0/gtk/gtksettings.h: + +/usr/include/gtk-2.0/gtk/gtkrc.h: + +/usr/include/atk-1.0/atk/atkobject.h: + +/usr/include/atk-1.0/atk/atkstate.h: + +/usr/include/atk-1.0/atk/atkrelationtype.h: + +/usr/include/gtk-2.0/gtk/gtkwindow.h: + +/usr/include/gtk-2.0/gtk/gtkbin.h: + +/usr/include/gtk-2.0/gtk/gtkcontainer.h: + +/usr/include/gtk-2.0/gtk/gtkmenu.h: + +/usr/include/gtk-2.0/gtk/gtkmenushell.h: + +/usr/include/gtk-2.0/gtk/gtkaccelmap.h: + +/usr/include/gtk-2.0/gtk/gtkaccessible.h: + +/usr/include/atk-1.0/atk/atk.h: + +/usr/include/atk-1.0/atk/atkaction.h: + +/usr/include/atk-1.0/atk/atkcomponent.h: + +/usr/include/atk-1.0/atk/atkutil.h: + +/usr/include/atk-1.0/atk/atkdocument.h: + +/usr/include/atk-1.0/atk/atkeditabletext.h: + +/usr/include/atk-1.0/atk/atktext.h: + +/usr/include/atk-1.0/atk/atkgobjectaccessible.h: + +/usr/include/atk-1.0/atk/atkhyperlink.h: + +/usr/include/atk-1.0/atk/atkhypertext.h: + +/usr/include/atk-1.0/atk/atkimage.h: + +/usr/include/atk-1.0/atk/atknoopobject.h: + +/usr/include/atk-1.0/atk/atknoopobjectfactory.h: + +/usr/include/atk-1.0/atk/atkobjectfactory.h: + +/usr/include/atk-1.0/atk/atkregistry.h: + +/usr/include/atk-1.0/atk/atkrelation.h: + +/usr/include/atk-1.0/atk/atkrelationset.h: + +/usr/include/atk-1.0/atk/atkselection.h: + +/usr/include/atk-1.0/atk/atkstateset.h: + +/usr/include/atk-1.0/atk/atkstreamablecontent.h: + +/usr/include/atk-1.0/atk/atktable.h: + +/usr/include/atk-1.0/atk/atkvalue.h: + +/usr/include/gtk-2.0/gtk/gtkalignment.h: + +/usr/include/gtk-2.0/gtk/gtkaspectframe.h: + +/usr/include/gtk-2.0/gtk/gtkframe.h: + +/usr/include/gtk-2.0/gtk/gtkarrow.h: + +/usr/include/gtk-2.0/gtk/gtkbindings.h: + +/usr/include/gtk-2.0/gtk/gtkbox.h: + +/usr/include/gtk-2.0/gtk/gtkbbox.h: + +/usr/include/gtk-2.0/gtk/gtkbutton.h: + +/usr/include/gtk-2.0/gtk/gtkcalendar.h: + +/usr/include/gtk-2.0/gtk/gtksignal.h: + +/usr/include/gtk-2.0/gtk/gtkmarshal.h: + +/usr/include/gtk-2.0/gtk/gtkcellrenderer.h: + +/usr/include/gtk-2.0/gtk/gtkcelleditable.h: + +/usr/include/gtk-2.0/gtk/gtkcellrenderertext.h: + +/usr/include/gtk-2.0/gtk/gtkcellrenderertoggle.h: + +/usr/include/gtk-2.0/gtk/gtkcellrendererpixbuf.h: + +/usr/include/gtk-2.0/gtk/gtkcheckbutton.h: + +/usr/include/gtk-2.0/gtk/gtktogglebutton.h: + +/usr/include/gtk-2.0/gtk/gtkcheckmenuitem.h: + +/usr/include/gtk-2.0/gtk/gtkmenuitem.h: + +/usr/include/gtk-2.0/gtk/gtkitem.h: + +/usr/include/gtk-2.0/gtk/gtkclipboard.h: + +/usr/include/gtk-2.0/gtk/gtkselection.h: + +/usr/include/gtk-2.0/gtk/gtkclist.h: + +/usr/include/gtk-2.0/gtk/gtkhscrollbar.h: + +/usr/include/gtk-2.0/gtk/gtkscrollbar.h: + +/usr/include/gtk-2.0/gtk/gtkrange.h: + +/usr/include/gtk-2.0/gtk/gtkvscrollbar.h: + +/usr/include/gtk-2.0/gtk/gtkcolorsel.h: + +/usr/include/gtk-2.0/gtk/gtkdialog.h: + +/usr/include/gtk-2.0/gtk/gtkvbox.h: + +/usr/include/gtk-2.0/gtk/gtkcolorseldialog.h: + +/usr/include/gtk-2.0/gtk/gtkcombo.h: + +/usr/include/gtk-2.0/gtk/gtkhbox.h: + +/usr/include/gtk-2.0/gtk/gtkctree.h: + +/usr/include/gtk-2.0/gtk/gtkcurve.h: + +/usr/include/gtk-2.0/gtk/gtkdrawingarea.h: + +/usr/include/gtk-2.0/gtk/gtkdnd.h: + +/usr/include/gtk-2.0/gtk/gtkeditable.h: + +/usr/include/gtk-2.0/gtk/gtkentry.h: + +/usr/include/gtk-2.0/gtk/gtkimcontext.h: + +/usr/include/gtk-2.0/gtk/gtkeventbox.h: + +/usr/include/gtk-2.0/gtk/gtkfilesel.h: + +/usr/include/gtk-2.0/gtk/gtkfixed.h: + +/usr/include/gtk-2.0/gtk/gtkfontsel.h: + +/usr/include/gtk-2.0/gtk/gtkgamma.h: + +/usr/include/gtk-2.0/gtk/gtkgc.h: + +/usr/include/gtk-2.0/gtk/gtkhandlebox.h: + +/usr/include/gtk-2.0/gtk/gtkhbbox.h: + +/usr/include/gtk-2.0/gtk/gtkhpaned.h: + +/usr/include/gtk-2.0/gtk/gtkpaned.h: + +/usr/include/gtk-2.0/gtk/gtkhruler.h: + +/usr/include/gtk-2.0/gtk/gtkruler.h: + +/usr/include/gtk-2.0/gtk/gtkhscale.h: + +/usr/include/gtk-2.0/gtk/gtkscale.h: + +/usr/include/gtk-2.0/gtk/gtkhseparator.h: + +/usr/include/gtk-2.0/gtk/gtkseparator.h: + +/usr/include/gtk-2.0/gtk/gtkiconfactory.h: + +/usr/include/gtk-2.0/gtk/gtkimage.h: + +/usr/include/gtk-2.0/gtk/gtkimagemenuitem.h: + +/usr/include/gtk-2.0/gtk/gtkimcontextsimple.h: + +/usr/include/gtk-2.0/gtk/gtkimmulticontext.h: + +/usr/include/gtk-2.0/gtk/gtkinputdialog.h: + +/usr/include/gtk-2.0/gtk/gtkinvisible.h: + +/usr/include/gtk-2.0/gtk/gtkitemfactory.h: + +/usr/include/gtk-2.0/gtk/gtklayout.h: + +/usr/include/gtk-2.0/gtk/gtklist.h: + +/usr/include/gtk-2.0/gtk/gtklistitem.h: + +/usr/include/gtk-2.0/gtk/gtkliststore.h: + +/usr/include/gtk-2.0/gtk/gtktreemodel.h: + +/usr/include/gtk-2.0/gtk/gtktreesortable.h: + +/usr/include/gtk-2.0/gtk/gtkmain.h: + +/usr/include/gtk-2.0/gtk/gtkmenubar.h: + +/usr/include/gtk-2.0/gtk/gtkmessagedialog.h: + +/usr/include/gtk-2.0/gtk/gtknotebook.h: + +/usr/include/gtk-2.0/gtk/gtkoldeditable.h: + +/usr/include/gtk-2.0/gtk/gtkoptionmenu.h: + +/usr/include/gtk-2.0/gtk/gtkpixmap.h: + +/usr/include/gtk-2.0/gtk/gtkplug.h: + +/usr/include/gtk-2.0/gtk/gtksocket.h: + +/usr/include/gtk-2.0/gtk/gtkpreview.h: + +/usr/include/gtk-2.0/gtk/gtkprogress.h: + +/usr/include/gtk-2.0/gtk/gtkprogressbar.h: + +/usr/include/gtk-2.0/gtk/gtkradiobutton.h: + +/usr/include/gtk-2.0/gtk/gtkradiomenuitem.h: + +/usr/include/gtk-2.0/gtk/gtkscrolledwindow.h: + +/usr/include/gtk-2.0/gtk/gtkviewport.h: + +/usr/include/gtk-2.0/gtk/gtkseparatormenuitem.h: + +/usr/include/gtk-2.0/gtk/gtksizegroup.h: + +/usr/include/gtk-2.0/gtk/gtkspinbutton.h: + +/usr/include/gtk-2.0/gtk/gtkstock.h: + +/usr/include/gtk-2.0/gtk/gtkstatusbar.h: + +/usr/include/gtk-2.0/gtk/gtktable.h: + +/usr/include/gtk-2.0/gtk/gtktearoffmenuitem.h: + +/usr/include/gtk-2.0/gtk/gtktext.h: + +/usr/include/gtk-2.0/gtk/gtktextbuffer.h: + +/usr/include/gtk-2.0/gtk/gtktexttagtable.h: + +/usr/include/gtk-2.0/gtk/gtktexttag.h: + +/usr/include/gtk-2.0/gtk/gtktextiter.h: + +/usr/include/gtk-2.0/gtk/gtktextchild.h: + +/usr/include/gtk-2.0/gtk/gtktextmark.h: + +/usr/include/gtk-2.0/gtk/gtktextview.h: + +/usr/include/gtk-2.0/gtk/gtktipsquery.h: + +/usr/include/gtk-2.0/gtk/gtktoolbar.h: + +/usr/include/gtk-2.0/gtk/gtktooltips.h: + +/usr/include/gtk-2.0/gtk/gtktree.h: + +/usr/include/gtk-2.0/gtk/gtktreednd.h: + +/usr/include/gtk-2.0/gtk/gtktreeitem.h: + +/usr/include/gtk-2.0/gtk/gtktreemodelsort.h: + +/usr/include/gtk-2.0/gtk/gtktreeselection.h: + +/usr/include/gtk-2.0/gtk/gtktreeview.h: + +/usr/include/gtk-2.0/gtk/gtktreeviewcolumn.h: + +/usr/include/gtk-2.0/gtk/gtktreestore.h: + +/usr/include/gtk-2.0/gtk/gtkvbbox.h: + +/usr/include/gtk-2.0/gtk/gtkversion.h: + +/usr/include/gtk-2.0/gtk/gtkvpaned.h: + +/usr/include/gtk-2.0/gtk/gtkvruler.h: + +/usr/include/gtk-2.0/gtk/gtkvscale.h: + +/usr/include/gtk-2.0/gtk/gtkvseparator.h: + +../../../include/lttv/module.h: + +../../../include/lttv/gtkTraceSet.h: + +../../../include/ltt/ltt.h: + +../../../include/ltt/LTTTypes.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/wordsize.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/bits/sched.h: + +/usr/include/sys/time.h: + +../../../include/ltt/ltt-private.h: + +../../../include/ltt/type.h: + +../../../include/ltt/trace.h: + +../../../include/lttv/hook.h: + +../../../include/lttv/common.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/wchar.h: + +/usr/include/gconv.h: + +/usr/include/bits/stdio_lim.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +../../../include/lttv/stats.h: + +../../../include/lttv/state.h: + +../../../include/lttv/processTrace.h: + +../../../include/lttv/traceset.h: + +../../../include/lttv/attribute.h: + +../../../include/lttv/iattribute.h: + +../../../include/ltt/event.h: + +/usr/include/string.h: + +/usr/include/bits/string.h: + +/usr/include/bits/string2.h: + +/usr/include/stdlib.h: + +../icons/hGuiStatisticInsert.xpm: diff --git a/ltt/branches/poly/lttv/modules/guiStatistic/Makefile.am b/ltt/branches/poly/lttv/modules/guiStatistic/Makefile.am new file mode 100644 index 00000000..0794479d --- /dev/null +++ b/ltt/branches/poly/lttv/modules/guiStatistic/Makefile.am @@ -0,0 +1,16 @@ +# +# Makefile for LTT New generation user interface : plugins. +# +# Created by Mathieu Desnoyers on May 6, 2003 +# + +AM_CFLAGS = $(GLIB_CFLAGS) +AM_CFLAGS += $(GTK_CFLAGS) +LIBS += $(GLIB_LIBS) +LIBS += $(GTK_LIBS) -L${top_srcdir}/lttv/modules/gui/API -lmainWinApi + +libdir = ${lttvplugindir} + +lib_LTLIBRARIES = libguiStatistic.la +libguiStatistic_la_LDFLAGS = -module +libguiStatistic_la_SOURCES = guiStatistic.c diff --git a/ltt/branches/poly/lttv/modules/guiStatistic/guiStatistic.c b/ltt/branches/poly/lttv/modules/guiStatistic/guiStatistic.c new file mode 100644 index 00000000..081a537f --- /dev/null +++ b/ltt/branches/poly/lttv/modules/guiStatistic/guiStatistic.c @@ -0,0 +1,485 @@ +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +#include "../icons/hGuiStatisticInsert.xpm" + +#define PATH_LENGTH 256 + +static LttvModule *Main_Win_Module; + +/** Array containing instanced objects. Used when module is unloaded */ +GSList *gStatistic_Viewer_Data_List = NULL ; + +typedef struct _StatisticViewerData StatisticViewerData; + +//! Statistic Viewer's constructor hook +GtkWidget *hGuiStatistic(mainWindow *pmParentWindow); +//! Statistic Viewer's constructor +StatisticViewerData *GuiStatistic(mainWindow *pmParentWindow); +//! Statistic Viewer's destructor +void GuiStatistic_Destructor(StatisticViewerData *Statistic_Viewer_Data); +void GuiStatistic_free(StatisticViewerData *Statistic_Viewer_Data); + +void grab_focus(GtkWidget *widget, gpointer data); +static void tree_selection_changed_cb (GtkTreeSelection *selection, gpointer data); + +void Destroy_hash_key(gpointer key); +void Destroy_hash_data(gpointer data); + +void get_traceset_stats(StatisticViewerData * Statistic_Viewer_Data); +void show_traceset_stats(StatisticViewerData * Statistic_Viewer_Data); +void show_tree(StatisticViewerData * Statistic_Viewer_Data, + LttvAttribute* stats, GtkTreeIter* parent); +void show_statistic(StatisticViewerData * Statistic_Viewer_Data, + LttvAttribute* stats, GtkTextBuffer* buf); + + +enum +{ + NAME_COLUMN, + N_COLUMNS +}; + +struct _StatisticViewerData{ + mainWindow * mw; + LttvTracesetStats * stats; + + GtkWidget * HPaned_V; + GtkTreeStore * Store_M; + GtkWidget * Tree_V; + + //scroll window containing Tree View + GtkWidget * Scroll_Win_Tree; + + GtkWidget * Text_V; + //scroll window containing Text View + GtkWidget * Scroll_Win_Text; + + // Selection handler + GtkTreeSelection *Select_C; + + //hash + GHashTable *Statistic_Hash; +}; + + +/** + * plugin's init function + * + * This function initializes the Statistic Viewer functionnality through the + * gtkTraceSet API. + */ +G_MODULE_EXPORT void init(LttvModule *self, int argc, char *argv[]) { + + Main_Win_Module = lttv_module_require(self, "mainwin", argc, argv); + + if(Main_Win_Module == NULL){ + g_critical("Can't load Statistic Viewer : missing mainwin\n"); + return; + } + + g_critical("GUI Statistic Viewer init()"); + + /* Register the toolbar insert button */ + ToolbarItemReg(hGuiStatisticInsert_xpm, "Insert Statistic Viewer", hGuiStatistic); + + /* Register the menu item insert entry */ + MenuItemReg("/", "Insert Statistic Viewer", hGuiStatistic); + +} + +void destroy_walk(gpointer data, gpointer user_data) +{ + GuiStatistic_Destructor((StatisticViewerData*)data); +} + +/** + * plugin's destroy function + * + * This function releases the memory reserved by the module and unregisters + * everything that has been registered in the gtkTraceSet API. + */ +G_MODULE_EXPORT void destroy() { + int i; + + StatisticViewerData *Statistic_Viewer_Data; + + g_critical("GUI Statistic Viewer destroy()"); + + g_slist_foreach(gStatistic_Viewer_Data_List, destroy_walk, NULL ); + + g_slist_free(gStatistic_Viewer_Data_List); + + /* Unregister the toolbar insert button */ + ToolbarItemUnreg(hGuiStatistic); + + /* Unregister the menu item insert entry */ + MenuItemUnreg(hGuiStatistic); +} + + +void +GuiStatistic_free(StatisticViewerData *Statistic_Viewer_Data) +{ + g_hash_table_destroy(Statistic_Viewer_Data->Statistic_Hash); + gStatistic_Viewer_Data_List = g_slist_remove(gStatistic_Viewer_Data_List, Statistic_Viewer_Data); + g_warning("Delete Statistic data\n"); + g_free(Statistic_Viewer_Data); +} + +void +GuiStatistic_Destructor(StatisticViewerData *Statistic_Viewer_Data) +{ + /* May already been done by GTK window closing */ + if(GTK_IS_WIDGET(Statistic_Viewer_Data->HPaned_V)) + gtk_widget_destroy(Statistic_Viewer_Data->HPaned_V); + + GuiStatistic_free(Statistic_Viewer_Data); +} + + +/** + * Statistic Viewer's constructor hook + * + * This constructor is given as a parameter to the menuitem and toolbar button + * registration. It creates the list. + * @param pmParentWindow A pointer to the parent window. + * @return The widget created. + */ +GtkWidget * +hGuiStatistic(mainWindow * pmParentWindow) +{ + StatisticViewerData* Statistic_Viewer_Data = GuiStatistic(pmParentWindow) ; + + if(Statistic_Viewer_Data) + return Statistic_Viewer_Data->HPaned_V; + else return NULL; + +} + +/** + * Statistic Viewer's constructor + * + * This constructor is used to create StatisticViewerData data structure. + * @return The Statistic viewer data created. + */ +StatisticViewerData * +GuiStatistic(mainWindow *pmParentWindow) +{ + GtkCellRenderer *renderer; + GtkTreeViewColumn *column; + + StatisticViewerData* Statistic_Viewer_Data = g_new(StatisticViewerData,1); + + Statistic_Viewer_Data->mw = pmParentWindow; + Statistic_Viewer_Data->stats = getTracesetStats(Statistic_Viewer_Data->mw); + + Statistic_Viewer_Data->Statistic_Hash = g_hash_table_new_full(g_str_hash, g_str_equal, + Destroy_hash_key, Destroy_hash_data); + + Statistic_Viewer_Data->HPaned_V = gtk_hpaned_new(); + Statistic_Viewer_Data->Store_M = gtk_tree_store_new (N_COLUMNS, G_TYPE_STRING); + Statistic_Viewer_Data->Tree_V = gtk_tree_view_new_with_model (GTK_TREE_MODEL (Statistic_Viewer_Data->Store_M)); + g_object_unref (G_OBJECT (Statistic_Viewer_Data->Store_M)); + + g_signal_connect (G_OBJECT (Statistic_Viewer_Data->Tree_V), "grab-focus", + G_CALLBACK (grab_focus), + Statistic_Viewer_Data); + + // Setup the selection handler + Statistic_Viewer_Data->Select_C = gtk_tree_view_get_selection (GTK_TREE_VIEW (Statistic_Viewer_Data->Tree_V)); + gtk_tree_selection_set_mode (Statistic_Viewer_Data->Select_C, GTK_SELECTION_SINGLE); + g_signal_connect (G_OBJECT (Statistic_Viewer_Data->Select_C), "changed", + G_CALLBACK (tree_selection_changed_cb), + Statistic_Viewer_Data); + + renderer = gtk_cell_renderer_text_new (); + column = gtk_tree_view_column_new_with_attributes ("Statistic Name", + renderer, + "text", NAME_COLUMN, + NULL); + gtk_tree_view_column_set_alignment (column, 0.0); + // gtk_tree_view_column_set_fixed_width (column, 45); + gtk_tree_view_append_column (GTK_TREE_VIEW (Statistic_Viewer_Data->Tree_V), column); + + + gtk_tree_view_set_headers_visible(GTK_TREE_VIEW (Statistic_Viewer_Data->Tree_V), FALSE); + + Statistic_Viewer_Data->Scroll_Win_Tree = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(Statistic_Viewer_Data->Scroll_Win_Tree), + GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); + + gtk_container_add (GTK_CONTAINER (Statistic_Viewer_Data->Scroll_Win_Tree), Statistic_Viewer_Data->Tree_V); + gtk_paned_pack1(GTK_PANED(Statistic_Viewer_Data->HPaned_V),Statistic_Viewer_Data->Scroll_Win_Tree, TRUE, FALSE); + gtk_paned_set_position(GTK_PANED(Statistic_Viewer_Data->HPaned_V), 160); + + Statistic_Viewer_Data->Scroll_Win_Text = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(Statistic_Viewer_Data->Scroll_Win_Text), + GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); + + Statistic_Viewer_Data->Text_V = gtk_text_view_new (); + g_signal_connect (G_OBJECT (Statistic_Viewer_Data->Text_V), "grab-focus", + G_CALLBACK (grab_focus), + Statistic_Viewer_Data); + + gtk_text_view_set_editable(GTK_TEXT_VIEW(Statistic_Viewer_Data->Text_V),FALSE); + gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(Statistic_Viewer_Data->Text_V),FALSE); + gtk_container_add (GTK_CONTAINER (Statistic_Viewer_Data->Scroll_Win_Text), Statistic_Viewer_Data->Text_V); + gtk_paned_pack2(GTK_PANED(Statistic_Viewer_Data->HPaned_V), Statistic_Viewer_Data->Scroll_Win_Text, TRUE, FALSE); + + gtk_widget_show(Statistic_Viewer_Data->Scroll_Win_Tree); + gtk_widget_show(Statistic_Viewer_Data->Scroll_Win_Text); + gtk_widget_show(Statistic_Viewer_Data->Tree_V); + gtk_widget_show(Statistic_Viewer_Data->Text_V); + gtk_widget_show(Statistic_Viewer_Data->HPaned_V); + + g_object_set_data_full( + G_OBJECT(Statistic_Viewer_Data->HPaned_V), + "Statistic_Viewer_Data", + Statistic_Viewer_Data, + (GDestroyNotify)GuiStatistic_free); + + /* Add the object's information to the module's array */ + gStatistic_Viewer_Data_List = g_slist_append(gStatistic_Viewer_Data_List, Statistic_Viewer_Data); + + get_traceset_stats(Statistic_Viewer_Data); + + return Statistic_Viewer_Data; +} + +void grab_focus(GtkWidget *widget, gpointer data) +{ + StatisticViewerData *Statistic_Viewer_Data = (StatisticViewerData *)data; + mainWindow * mw = Statistic_Viewer_Data->mw; + SetFocusedPane(mw, gtk_widget_get_parent(Statistic_Viewer_Data->HPaned_V)); +} + +static void +tree_selection_changed_cb (GtkTreeSelection *selection, gpointer data) +{ + StatisticViewerData *Statistic_Viewer_Data = (StatisticViewerData*)data; + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(Statistic_Viewer_Data->Store_M); + gchar *Event; + GtkTextBuffer* buf; + gchar * str; + GtkTreePath * path; + GtkTextIter text_iter; + LttvAttribute * stats; + + if (gtk_tree_selection_get_selected (selection, &model, &iter)) + { + gtk_tree_model_get (model, &iter, NAME_COLUMN, &Event, -1); + + path = gtk_tree_model_get_path(GTK_TREE_MODEL(model),&iter); + str = gtk_tree_path_to_string (path); + stats = (LttvAttribute*)g_hash_table_lookup (Statistic_Viewer_Data->Statistic_Hash,str); + g_free(str); + + buf = gtk_text_view_get_buffer((GtkTextView*)Statistic_Viewer_Data->Text_V); + gtk_text_buffer_set_text(buf,"Statistic for '", -1); + gtk_text_buffer_get_end_iter(buf, &text_iter); + gtk_text_buffer_insert(buf, &text_iter, Event, strlen(Event)); + gtk_text_buffer_get_end_iter(buf, &text_iter); + gtk_text_buffer_insert(buf, &text_iter, "' :\n\n",5); + + show_statistic(Statistic_Viewer_Data, stats, buf); + + g_free (Event); + } +} + +void Destroy_hash_key(gpointer key) +{ + g_free(key); +} + +void Destroy_hash_data(gpointer data) +{ + // g_free(data); +} + +void get_traceset_stats(StatisticViewerData * Statistic_Viewer_Data) +{ + LttTime start, end; + + start.tv_sec = 0; + start.tv_nsec = 0; + end.tv_sec = G_MAXULONG; + end.tv_nsec = G_MAXULONG; + + stateAddEventHooks(Statistic_Viewer_Data->mw); + statsAddEventHooks(Statistic_Viewer_Data->mw); + + processTraceset(Statistic_Viewer_Data->mw, start, end, G_MAXULONG); + + stateRemoveEventHooks(Statistic_Viewer_Data->mw); + statsRemoveEventHooks(Statistic_Viewer_Data->mw); + + //establish tree view for stats + show_traceset_stats(Statistic_Viewer_Data); +} + +void show_traceset_stats(StatisticViewerData * Statistic_Viewer_Data) +{ + int i, nb; + LttvTraceset *ts; + LttvTraceStats *tcs; + LttSystemDescription *desc; + LttvTracesetStats * tscs = Statistic_Viewer_Data->stats; + gchar * str, trace_str[PATH_LENGTH]; + GtkTreePath * path; + GtkTreeIter iter; + GtkTreeStore * store = Statistic_Viewer_Data->Store_M; + + if(tscs->stats == NULL) return; + + gtk_tree_store_append (store, &iter, NULL); + gtk_tree_store_set (store, &iter, + NAME_COLUMN, "Traceset statistics", + -1); + path = gtk_tree_model_get_path(GTK_TREE_MODEL(store), &iter); + str = gtk_tree_path_to_string (path); + g_hash_table_insert(Statistic_Viewer_Data->Statistic_Hash, + (gpointer)str, tscs->stats); + show_tree(Statistic_Viewer_Data, tscs->stats, &iter); + + //show stats for all traces + ts = tscs->parent.parent.ts; + nb = lttv_traceset_number(ts); + + for(i = 0 ; i < nb ; i++) { + tcs = (LttvTraceStats *)(LTTV_TRACESET_CONTEXT(tscs)->traces[i]); + desc = ltt_trace_system_description(tcs->parent.parent.t); + sprintf(trace_str, "Trace on system %s at time %d secs", + desc->node_name,desc->trace_start.tv_sec); + + gtk_tree_store_append (store, &iter, NULL); + gtk_tree_store_set (store, &iter,NAME_COLUMN,trace_str,-1); + path = gtk_tree_model_get_path(GTK_TREE_MODEL(store), &iter); + str = gtk_tree_path_to_string (path); + g_hash_table_insert(Statistic_Viewer_Data->Statistic_Hash, + (gpointer)str,tcs->stats); + show_tree(Statistic_Viewer_Data, tcs->stats, &iter); + } +} + +void show_tree(StatisticViewerData * Statistic_Viewer_Data, + LttvAttribute* stats, GtkTreeIter* parent) +{ + int i, nb; + LttvAttribute *subtree; + LttvAttributeName name; + LttvAttributeValue value; + LttvAttributeType type; + gchar * str, dir_str[PATH_LENGTH]; + GtkTreePath * path; + GtkTreeIter iter; + GtkTreeStore * store = Statistic_Viewer_Data->Store_M; + + nb = lttv_attribute_get_number(stats); + for(i = 0 ; i < nb ; i++) { + type = lttv_attribute_get(stats, i, &name, &value); + switch(type) { + case LTTV_GOBJECT: + if(LTTV_IS_ATTRIBUTE(*(value.v_gobject))) { + sprintf(dir_str, "%s", g_quark_to_string(name)); + subtree = (LttvAttribute *)*(value.v_gobject); + gtk_tree_store_append (store, &iter, parent); + gtk_tree_store_set (store, &iter,NAME_COLUMN,dir_str,-1); + path = gtk_tree_model_get_path(GTK_TREE_MODEL(store), &iter); + str = gtk_tree_path_to_string (path); + g_hash_table_insert(Statistic_Viewer_Data->Statistic_Hash, + (gpointer)str, subtree); + show_tree(Statistic_Viewer_Data, subtree, &iter); + } + break; + default: + break; + } + } +} + +void show_statistic(StatisticViewerData * Statistic_Viewer_Data, + LttvAttribute* stats, GtkTextBuffer* buf) +{ + int i, nb , flag; + LttvAttribute *subtree; + LttvAttributeName name; + LttvAttributeValue value; + LttvAttributeType type; + gchar type_name[PATH_LENGTH], type_value[PATH_LENGTH]; + GtkTextIter text_iter; + + flag = 0; + nb = lttv_attribute_get_number(stats); + for(i = 0 ; i < nb ; i++) { + type = lttv_attribute_get(stats, i, &name, &value); + sprintf(type_name,"%s", g_quark_to_string(name)); + type_value[0] = '\0'; + switch(type) { + case LTTV_INT: + sprintf(type_value, " : %d\n", *value.v_int); + break; + case LTTV_UINT: + sprintf(type_value, " : %u\n", *value.v_uint); + break; + case LTTV_LONG: + sprintf(type_value, " : %ld\n", *value.v_long); + break; + case LTTV_ULONG: + sprintf(type_value, " : %lu\n", *value.v_ulong); + break; + case LTTV_FLOAT: + sprintf(type_value, " : %f\n", (double)*value.v_float); + break; + case LTTV_DOUBLE: + sprintf(type_value, " : %f\n", *value.v_double); + break; + case LTTV_TIME: + sprintf(type_value, " : %10u.%09u\n", value.v_time->tv_sec, + value.v_time->tv_nsec); + break; + case LTTV_POINTER: + sprintf(type_value, " : POINTER\n"); + break; + case LTTV_STRING: + sprintf(type_value, " : %s\n", *value.v_string); + break; + default: + break; + } + if(strlen(type_value)){ + flag = 1; + strcat(type_name,type_value); + gtk_text_buffer_get_end_iter(buf, &text_iter); + gtk_text_buffer_insert(buf, &text_iter, type_name, strlen(type_name)); + } + } + + if(flag == 0){ + sprintf(type_value, "No statistic information in this directory.\nCheck in subdirectories please.\n"); + gtk_text_buffer_get_end_iter(buf, &text_iter); + gtk_text_buffer_insert(buf, &text_iter, type_value, strlen(type_value)); + + } +} + + diff --git a/ltt/branches/poly/lttv/modules/icons/Makefile.am b/ltt/branches/poly/lttv/modules/icons/Makefile.am index 101c5d21..42ae1fcf 100644 --- a/ltt/branches/poly/lttv/modules/icons/Makefile.am +++ b/ltt/branches/poly/lttv/modules/icons/Makefile.am @@ -6,4 +6,6 @@ EXTRA_DIST = \ hGuiControlFlowInsert.xpm\ - hGuiEventsInsert.xpm + hGuiEventsInsert.xpm\ + hGuiStatisticInsert.xpm + diff --git a/ltt/branches/poly/lttv/modules/icons/hGuiStatisticInsert.xpm b/ltt/branches/poly/lttv/modules/icons/hGuiStatisticInsert.xpm new file mode 100644 index 00000000..e8d4dd91 --- /dev/null +++ b/ltt/branches/poly/lttv/modules/icons/hGuiStatisticInsert.xpm @@ -0,0 +1,48 @@ +/* XPM */ +static char * hGuiStatisticInsert_xpm[] = { +"40 40 5 1", +" c None", +". c #000000", +"+ c #6E6E6E", +"@ c #BEBEBE", +"# c #FFDD00", +"++++++++++++++++++++++++++++++++++++++++", +"+@@@@@@@@@@@@@@@@@....@@@@@@@@@@@@@@@@@+", +"+@@@@@@@@@@@@@@@@......@@@@@@@@@@@@@@@@+", +"+@@@@@@@@@@@@@@@..####..@@@@@@@@@@@@@@@+", +"+@@@@@@@@@@@@@@..######..@@@@@@@@@@@@@@+", +"+@@@@@@@@@@@@@..########..@@@@@@@@@@@@@+", +"+@@@@@@@@@@@@..##########..@@@@@@@@@@@@+", +"+@@@@@@@@@@@..############..@@@@@@@@@@@+", +"+@@@@@@@@@@..#####....#####..@@@@@@@@@@+", +"+@@@@@@@@@..#####......#####..@@@@@@@@@+", +"+@@@@@@@@..######......######..@@@@@@@@+", +"+@@@@@@@..#######......#######..@@@@@@@+", +"+@@@@@@..########......########..@@@@@@+", +"+@@@@@..#........#....##########..@@@@@+", +"+@@@@..##.####....###############..@@@@+", +"+@@@..###.###......###############..@@@+", +"+@@..####.#......#.################..@@+", +"+@..#####.#.....##.#####....########..@+", +"+..######......###.#####.....########..+", +"+..######.....................#######..+", +"+..####..#.....###.#####.....########..+", +"+..#######......########....#########..+", +"+@..######.......############..#####..++", +"+@@..#####...#....###########..####..+@+", +"+@@@..####...##...#########.######..+@@+", +"+@@@@..###...##...#####..##.#.###..+@@@+", +"+@@@@@..##...##...####....###.##..+@@@@+", +"+@@@@@@..#...##..####......####..+@@@@@+", +"+@@@@@@@..#..##...##........##..+@@@@@@+", +"+@@@@@@@@..#.##...##........#..+@@@@@@@+", +"+@@@@@@@@@..################..+@@@@@@@@+", +"+@@@@@@@@@@..##############..+@@@@@@@@@+", +"+@@@@@@@@@@@..############..+@@@@@@@@@@+", +"+@@@@@@@@@@@@..##########..+@@@@@@@@@@@+", +"+@@@@@@@@@@@@@..########..+@@@@@@@@@@@@+", +"+@@@@@@@@@@@@@@..######..+@@@@@@@@@@@@@+", +"+@@@@@@@@@@@@@@@..####..+@@@@@@@@@@@@@@+", +"+@@@@@@@@@@@@@@@@......+@@@@@@@@@@@@@@@+", +"+@@@@@@@@@@@@@@@@@....+@@@@@@@@@@@@@@@@+", +"++++++++++++++++++++++++++++++++++++++++"}; -- 2.34.1