From 91ad3f0addfff8e1c0267c743113588aa299544f Mon Sep 17 00:00:00 2001 From: siboud Date: Thu, 24 Feb 2005 20:37:14 +0000 Subject: [PATCH] Began to work on the guifilter module - added a new directory filter/ in lttv/modules/gui - modified configure.in - modified lttv/modules/gui/Makefile.in git-svn-id: http://ltt.polymtl.ca/svn@875 04897980-b3bd-0310-b5e0-8ef037075253 --- ltt/branches/poly/Makefile.am | 2 +- ltt/branches/poly/configure.in | 1 + ltt/branches/poly/lttv/lttv/filter.c | 127 ++- ltt/branches/poly/lttv/lttv/filter.h | 46 +- .../poly/lttv/modules/gui/Makefile.am | 2 +- .../lttv/modules/gui/filter/.deps/filter.Plo | 1009 +++++++++++++++++ .../gui/filter/.deps/libguifilter.la.Plo | 1 + .../poly/lttv/modules/gui/filter/Makefile.am | 21 + .../poly/lttv/modules/gui/filter/filter.c | 196 ++++ .../modules/gui/filter/hGuiFilterInsert.xpm | 30 + .../poly/lttv/modules/text/textFilter.c | 131 ++- 11 files changed, 1451 insertions(+), 115 deletions(-) create mode 100644 ltt/branches/poly/lttv/modules/gui/filter/.deps/filter.Plo create mode 100644 ltt/branches/poly/lttv/modules/gui/filter/.deps/libguifilter.la.Plo create mode 100644 ltt/branches/poly/lttv/modules/gui/filter/Makefile.am create mode 100644 ltt/branches/poly/lttv/modules/gui/filter/filter.c create mode 100644 ltt/branches/poly/lttv/modules/gui/filter/hGuiFilterInsert.xpm diff --git a/ltt/branches/poly/Makefile.am b/ltt/branches/poly/Makefile.am index 9b5e422f..94f12c42 100644 --- a/ltt/branches/poly/Makefile.am +++ b/ltt/branches/poly/Makefile.am @@ -1,6 +1,6 @@ # WARNING : ltt must come before lttv, so that the traceread library is # up to date -SUBDIRS = ltt lttv lttd doc +SUBDIRS = ltt lttv lttd doc diff --git a/ltt/branches/poly/configure.in b/ltt/branches/poly/configure.in index b6d0dcca..1f825bbf 100644 --- a/ltt/branches/poly/configure.in +++ b/ltt/branches/poly/configure.in @@ -109,6 +109,7 @@ AC_CONFIG_FILES([Makefile lttv/modules/gui/controlflow/Makefile lttv/modules/gui/detailedevents/Makefile lttv/modules/gui/statistics/Makefile + lttv/modules/gui/filter/Makefile lttd/Makefile ltt/Makefile ltt/convert/Makefile diff --git a/ltt/branches/poly/lttv/lttv/filter.c b/ltt/branches/poly/lttv/lttv/filter.c index 4ed2eb1b..3e098016 100644 --- a/ltt/branches/poly/lttv/lttv/filter.c +++ b/ltt/branches/poly/lttv/lttv/filter.c @@ -25,7 +25,7 @@ /* * YET TO BE ANSWERED - * - should all the structures and field types be associated with GQuarks + * - nothing for now */ #include @@ -58,7 +58,21 @@ GQuark LTTV_FILTER_TRACESET, LTTV_FILTER_TRACEFILE, LTTV_FILTER_STATE, - LTTV_FILTER_EVENT; + LTTV_FILTER_EVENT, + LTTV_FILTER_NAME, + LTTV_FILTER_CATEGORY, + LTTV_FILTER_TIME, + LTTV_FILTER_TSC, + LTTV_FILTER_PID, + LTTV_FILTER_PPID, + LTTV_FILTER_C_TIME, + LTTV_FILTER_I_TIME, + LTTV_FILTER_P_NAME, + LTTV_FILTER_EX_MODE, + LTTV_FILTER_EX_SUBMODE, + LTTV_FILTER_P_STATUS, + LTTV_FILTER_CPU; + /** * Parse through filtering field hierarchy as specified @@ -72,27 +86,20 @@ parse_field_path(GList* fp) { GString* f = g_list_first(fp)->data; - switch(g_quark_try_string(f->str)) { -// case LTTV_FILTER_TRACE: -// -// break; -// case LTTV_FILTER_TRACEFILE: -// -// break; -// case LTTV_FILTER_TRACESET: -// -// break; -// case LTTV_FILTER_STATE: -// -// break; -// case LTTV_FILTER_EVENT: -// -// break; - default: /* Quark value unrecognized or equal to 0 */ - g_warning("Unrecognized field in filter string"); - return FALSE; + if(g_quark_try_string(f->str) == LTTV_FILTER_EVENT) { +// parse_subfield(fp, LTTV_FILTER_EVENT); + + } else if(g_quark_try_string(f->str) == LTTV_FILTER_TRACEFILE) { + + } else if(g_quark_try_string(f->str) == LTTV_FILTER_TRACE) { + + } else if(g_quark_try_string(f->str) == LTTV_FILTER_STATE) { + + } else { + g_warning("Unrecognized field in filter string"); + return FALSE; } - return TRUE; + return TRUE; } /** @@ -116,19 +123,16 @@ parse_simple_expression(GString* expression) { * @param t pointer to the current LttvTrace * @return the current lttv_filter or NULL if error */ -lttv_filter* +lttv_filter_t* lttv_filter_new(char *expression, LttvTraceState *tcs) { g_print("filter::lttv_filter_new()\n"); /* debug */ unsigned i, - p=0, /* parenthesis nesting value */ + p_nesting=0, /* parenthesis nesting value */ b=0; /* current breakpoint in expression string */ - - gpointer tree = NULL; - /* temporary values */ GString *a_field_component = g_string_new(""); GList *a_field_path = NULL; @@ -144,8 +148,8 @@ lttv_filter_new(char *expression, LttvTraceState *tcs) { * Binary tree memory allocation * - based upon a preliminary block size */ - gulong size = (strlen(expression)/AVERAGE_EXPRESSION_LENGTH)*MAX_FACTOR; - tree = g_malloc(size*sizeof(lttv_filter_tree)); +// gulong size = (strlen(expression)/AVERAGE_EXPRESSION_LENGTH)*MAX_FACTOR; +// tree = g_malloc(size*sizeof(lttv_filter_tree)); /* * Parse entire expression and construct @@ -182,10 +186,14 @@ lttv_filter_new(char *expression, LttvTraceState *tcs) { } break; case '(': /* start of parenthesis */ - p++; /* incrementing parenthesis nesting value */ + case '[': + case '{': + p_nesting++; /* incrementing parenthesis nesting value */ break; case ')': /* end of parenthesis */ - p--; /* decrementing parenthesis nesting value */ + case ']': + case '}': + p_nesting--; /* decrementing parenthesis nesting value */ break; /* @@ -220,7 +228,7 @@ lttv_filter_new(char *expression, LttvTraceState *tcs) { - if( p>0 ) { + if( p_nesting>0 ) { g_warning("Wrong filtering options, the string\n\"%s\"\n\ is not valid due to parenthesis incorrect use",expression); return NULL; @@ -234,7 +242,7 @@ lttv_filter_new(char *expression, LttvTraceState *tcs) { * @return success/failure of operation */ gboolean -lttv_filter_tracefile(lttv_filter *filter, LttTracefile *tracefile) { +lttv_filter_tracefile(lttv_filter_t *filter, LttTracefile *tracefile) { @@ -265,7 +273,7 @@ lttv_filter_tracefile(lttv_filter *filter, LttTracefile *tracefile) { } gboolean -lttv_filter_tracestate(lttv_filter *filter, LttvTraceState *tracestate) { +lttv_filter_tracestate(lttv_filter_t *filter, LttvTraceState *tracestate) { } @@ -276,28 +284,61 @@ lttv_filter_tracestate(lttv_filter *filter, LttvTraceState *tracestate) { * @return success/failure of operation */ gboolean -lttv_filter_event(lttv_filter *filter, LttEvent *event) { +lttv_filter_event(lttv_filter_t *filter, LttEvent *event) { } +/** + * Initializes the filter module and specific values + */ static void module_init() { - LTTV_FILTER_EVENT = g_quark_from_string("event"); - LTTV_FILTER_TRACE = g_quark_from_string("trace"); - LTTV_FILTER_TRACESET = g_quark_from_string("traceset"); - LTTV_FILTER_STATE = g_quark_from_string("state"); - LTTV_FILTER_TRACEFILE = g_quark_from_string("tracefile"); + + /* + * Quarks initialization + * for hardcoded filtering options + * + * TODO: traceset has no yet been defined + */ + + /* top fields */ + LTTV_FILTER_EVENT = g_quark_from_string("event"); + LTTV_FILTER_TRACE = g_quark_from_string("trace"); + LTTV_FILTER_TRACESET = g_quark_from_string("traceset"); + LTTV_FILTER_STATE = g_quark_from_string("state"); + LTTV_FILTER_TRACEFILE = g_quark_from_string("tracefile"); + /* event.name, tracefile.name, trace.name */ + LTTV_FILTER_NAME = g_quark_from_string("name"); + + /* event sub fields */ + LTTV_FILTER_CATEGORY = g_quark_from_string("category"); + LTTV_FILTER_TIME = g_quark_from_string("time"); + LTTV_FILTER_TSC = g_quark_from_string("tsc"); + + /* state sub fields */ + LTTV_FILTER_PID = g_quark_from_string("pid"); + LTTV_FILTER_PPID = g_quark_from_string("ppid"); + LTTV_FILTER_C_TIME = g_quark_from_string("creation_time"); + LTTV_FILTER_I_TIME = g_quark_from_string("insertion_time"); + LTTV_FILTER_P_NAME = g_quark_from_string("process_name"); + LTTV_FILTER_EX_MODE = g_quark_from_string("execution_mode"); + LTTV_FILTER_EX_SUBMODE = g_quark_from_string("execution_submode"); + LTTV_FILTER_P_STATUS = g_quark_from_string("process_status"); + LTTV_FILTER_CPU = g_quark_from_string("cpu"); + } +/** + * Destroys the filter module and specific values + */ static void module_destroy() { } -//LTTV_MODULE("filter", \ - "", \ - "", \ +LTTV_MODULE("filter", "Filters traceset and events", \ + "Filters traceset and events specifically to user input", \ module_init, module_destroy) diff --git a/ltt/branches/poly/lttv/lttv/filter.h b/ltt/branches/poly/lttv/lttv/filter.h index ab5b6958..29ff2a40 100644 --- a/ltt/branches/poly/lttv/lttv/filter.h +++ b/ltt/branches/poly/lttv/lttv/filter.h @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -57,8 +58,21 @@ extern GQuark LTTV_FILTER_TRACESET, LTTV_FILTER_TRACEFILE, LTTV_FILTER_STATE, - LTTV_FILTER_EVENT; - + LTTV_FILTER_EVENT, + LTTV_FILTER_NAME, + LTTV_FILTER_CATEGORY, + LTTV_FILTER_TIME, + LTTV_FILTER_TSC, + LTTV_FILTER_PID, + LTTV_FILTER_PPID, + LTTV_FILTER_C_TIME, + LTTV_FILTER_I_TIME, + LTTV_FILTER_P_NAME, + LTTV_FILTER_EX_MODE, + LTTV_FILTER_EX_SUBMODE, + LTTV_FILTER_P_STATUS, + LTTV_FILTER_CPU; + /** * @enum lttv_expression_op */ @@ -86,10 +100,10 @@ typedef struct _lttv_simple_expression } lttv_simple_expression; typedef enum _lttv_logical_op { - OR = 1, - AND = 1<<1, - NOT = 1<<2, - XOR = 1<<3 + OR = 1, /* 1 */ + AND = 1<<1, /* 2 */ + NOT = 1<<2, /* 4 */ + XOR = 1<<3 /* 8 */ } lttv_logical_op; /* @@ -97,12 +111,8 @@ typedef enum _lttv_logical_op { */ typedef struct _lttv_expression { -// gboolean or; -// gboolean not; -// gboolean and; -// gboolean xor; // gboolean simple_expression; - lttv_logical_op op; + int op; lttv_expression_type type; union { struct lttv_expression *e; @@ -126,26 +136,28 @@ typedef struct _lttv_filter_tree { * @struct lttv_filter * ( will later contain a binary tree of filtering options ) */ -typedef struct _lttv_filter { +typedef struct _lttv_filter_t { lttv_filter_tree* tree; -} lttv_filter; +} lttv_filter_t; +/* Parse field path contained in list */ gboolean parse_field_path(GList* fp); + gboolean parse_simple_expression(GString* expression); /* Compile the filter expression into an efficient data structure */ -lttv_filter *lttv_filter_new(char *expression, LttvTraceState *tfs); +lttv_filter_t *lttv_filter_new(char *expression, LttvTraceState *tfs); /* Check if the tracefile or event satisfies the filter. The arguments are declared as void * to allow these functions to be used as hooks. */ -gboolean lttv_filter_tracefile(lttv_filter *filter, LttTracefile *tracefile); +gboolean lttv_filter_tracefile(lttv_filter_t *filter, LttTracefile *tracefile); -gboolean lttv_filter_tracestate(lttv_filter *filter, LttvTraceState *tracestate); +gboolean lttv_filter_tracestate(lttv_filter_t *filter, LttvTraceState *tracestate); -gboolean lttv_filter_event(lttv_filter *filter, LttEvent *event); +gboolean lttv_filter_event(lttv_filter_t *filter, LttEvent *event); #endif // FILTER_H diff --git a/ltt/branches/poly/lttv/modules/gui/Makefile.am b/ltt/branches/poly/lttv/modules/gui/Makefile.am index 039dae06..0a9c97bc 100644 --- a/ltt/branches/poly/lttv/modules/gui/Makefile.am +++ b/ltt/branches/poly/lttv/modules/gui/Makefile.am @@ -6,5 +6,5 @@ # WARNING : subdirs order is important : mainWin depends on API -SUBDIRS = lttvwindow controlflow detailedevents statistics +SUBDIRS = lttvwindow controlflow detailedevents statistics filter diff --git a/ltt/branches/poly/lttv/modules/gui/filter/.deps/filter.Plo b/ltt/branches/poly/lttv/modules/gui/filter/.deps/filter.Plo new file mode 100644 index 00000000..a78cdee5 --- /dev/null +++ b/ltt/branches/poly/lttv/modules/gui/filter/.deps/filter.Plo @@ -0,0 +1,1009 @@ +filter.lo filter.o: filter.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/i486-linux/3.3.5/include/stddef.h \ + /usr/lib/gcc-lib/i486-linux/3.3.5/include/limits.h \ + /usr/lib/gcc-lib/i486-linux/3.3.5/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/i486-linux/3.3.5/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/gatomic.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/gutils.h \ + /usr/lib/gcc-lib/i486-linux/3.3.5/include/stdarg.h \ + /usr/include/glib-2.0/glib/gmarkup.h \ + /usr/include/glib-2.0/glib/gmessages.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/string.h /usr/include/bits/string.h \ + /usr/include/bits/string2.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/bits/types.h \ + /usr/include/bits/wordsize.h /usr/include/bits/typesizes.h \ + /usr/include/stdlib.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-script.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-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/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/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/gdkspawn.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/gtkaction.h \ + /usr/include/gtk-2.0/gtk/gtkactiongroup.h \ + /usr/include/gtk-2.0/gtk/gtkitemfactory.h \ + /usr/include/gtk-2.0/gtk/gtkalignment.h \ + /usr/include/gtk-2.0/gtk/gtkarrow.h \ + /usr/include/gtk-2.0/gtk/gtkaspectframe.h \ + /usr/include/gtk-2.0/gtk/gtkframe.h /usr/include/gtk-2.0/gtk/gtkbbox.h \ + /usr/include/gtk-2.0/gtk/gtkbox.h \ + /usr/include/gtk-2.0/gtk/gtkbindings.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/gtkcelllayout.h \ + /usr/include/gtk-2.0/gtk/gtkcellrenderer.h \ + /usr/include/gtk-2.0/gtk/gtkcelleditable.h \ + /usr/include/gtk-2.0/gtk/gtktreeviewcolumn.h \ + /usr/include/gtk-2.0/gtk/gtktreemodel.h \ + /usr/include/gtk-2.0/gtk/gtktreesortable.h \ + /usr/include/gtk-2.0/gtk/gtkcellrendererpixbuf.h \ + /usr/include/gtk-2.0/gtk/gtkcellrenderertext.h \ + /usr/include/gtk-2.0/gtk/gtkcellrenderertoggle.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/gtkcolorbutton.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/gtkcombobox.h \ + /usr/include/gtk-2.0/gtk/gtktreeview.h \ + /usr/include/gtk-2.0/gtk/gtkdnd.h \ + /usr/include/gtk-2.0/gtk/gtkcomboboxentry.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/gtkeditable.h \ + /usr/include/gtk-2.0/gtk/gtkentry.h \ + /usr/include/gtk-2.0/gtk/gtkimcontext.h \ + /usr/include/gtk-2.0/gtk/gtkentrycompletion.h \ + /usr/include/gtk-2.0/gtk/gtkliststore.h \ + /usr/include/gtk-2.0/gtk/gtktreemodelfilter.h \ + /usr/include/gtk-2.0/gtk/gtkeventbox.h \ + /usr/include/gtk-2.0/gtk/gtkexpander.h \ + /usr/include/gtk-2.0/gtk/gtkfilesel.h \ + /usr/include/gtk-2.0/gtk/gtkfixed.h \ + /usr/include/gtk-2.0/gtk/gtkfilechooserdialog.h \ + /usr/include/gtk-2.0/gtk/gtkfilechooser.h \ + /usr/include/gtk-2.0/gtk/gtkfilefilter.h \ + /usr/include/gtk-2.0/gtk/gtkfilechooserwidget.h \ + /usr/include/gtk-2.0/gtk/gtkfontbutton.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/gtkicontheme.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/gtklayout.h /usr/include/gtk-2.0/gtk/gtklist.h \ + /usr/include/gtk-2.0/gtk/gtklistitem.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/gtkradioaction.h \ + /usr/include/gtk-2.0/gtk/gtktoggleaction.h \ + /usr/include/gtk-2.0/gtk/gtkradiobutton.h \ + /usr/include/gtk-2.0/gtk/gtkradiomenuitem.h \ + /usr/include/gtk-2.0/gtk/gtkradiotoolbutton.h \ + /usr/include/gtk-2.0/gtk/gtktoggletoolbutton.h \ + /usr/include/gtk-2.0/gtk/gtktoolbutton.h \ + /usr/include/gtk-2.0/gtk/gtktoolitem.h \ + /usr/include/gtk-2.0/gtk/gtktooltips.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/gtkseparatortoolitem.h \ + /usr/include/gtk-2.0/gtk/gtksizegroup.h \ + /usr/include/gtk-2.0/gtk/gtkspinbutton.h \ + /usr/include/gtk-2.0/gtk/gtkstatusbar.h \ + /usr/include/gtk-2.0/gtk/gtkstock.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/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/gtktreestore.h \ + /usr/include/gtk-2.0/gtk/gtkuimanager.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 ../../../../lttv/lttv/lttv.h \ + ../../../../lttv/lttv/attribute.h ../../../../lttv/lttv/iattribute.h \ + ../../../../ltt/time.h ../../../../ltt/compiler.h /usr/include/math.h \ + /usr/include/bits/huge_val.h /usr/include/bits/mathdef.h \ + /usr/include/bits/mathcalls.h /usr/include/bits/mathinline.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 ../../../../lttv/lttv/module.h \ + ../../../../lttv/lttv/hook.h ../../../../lttv/lttv/filter.h \ + ../../../../lttv/lttv/traceset.h ../../../../ltt/ltt.h \ + ../../../../lttv/lttv/tracecontext.h ../../../../lttv/lttv/state.h \ + ../../../../ltt/event.h \ + ../../../../lttv/modules/gui/lttvwindow/lttvwindow/lttvwindow.h \ + ../../../../lttv/lttv/stats.h \ + ../../../../lttv/modules/gui/lttvwindow/lttvwindow/mainwindow.h \ + ../../../../lttv/modules/gui/lttvwindow/lttvwindow/lttvfilter.h \ + ../../../../lttv/modules/gui/lttvwindow/lttvwindow/lttvwindowtraces.h \ + hGuiFilterInsert.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/i486-linux/3.3.5/include/stddef.h: + +/usr/lib/gcc-lib/i486-linux/3.3.5/include/limits.h: + +/usr/lib/gcc-lib/i486-linux/3.3.5/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/i486-linux/3.3.5/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/gatomic.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/gutils.h: + +/usr/lib/gcc-lib/i486-linux/3.3.5/include/stdarg.h: + +/usr/include/glib-2.0/glib/gmarkup.h: + +/usr/include/glib-2.0/glib/gmessages.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/string.h: + +/usr/include/bits/string.h: + +/usr/include/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/types.h: + +/usr/include/bits/wordsize.h: + +/usr/include/bits/typesizes.h: + +/usr/include/stdlib.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-script.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-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/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/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/gdkspawn.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/gtkaction.h: + +/usr/include/gtk-2.0/gtk/gtkactiongroup.h: + +/usr/include/gtk-2.0/gtk/gtkitemfactory.h: + +/usr/include/gtk-2.0/gtk/gtkalignment.h: + +/usr/include/gtk-2.0/gtk/gtkarrow.h: + +/usr/include/gtk-2.0/gtk/gtkaspectframe.h: + +/usr/include/gtk-2.0/gtk/gtkframe.h: + +/usr/include/gtk-2.0/gtk/gtkbbox.h: + +/usr/include/gtk-2.0/gtk/gtkbox.h: + +/usr/include/gtk-2.0/gtk/gtkbindings.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/gtkcelllayout.h: + +/usr/include/gtk-2.0/gtk/gtkcellrenderer.h: + +/usr/include/gtk-2.0/gtk/gtkcelleditable.h: + +/usr/include/gtk-2.0/gtk/gtktreeviewcolumn.h: + +/usr/include/gtk-2.0/gtk/gtktreemodel.h: + +/usr/include/gtk-2.0/gtk/gtktreesortable.h: + +/usr/include/gtk-2.0/gtk/gtkcellrendererpixbuf.h: + +/usr/include/gtk-2.0/gtk/gtkcellrenderertext.h: + +/usr/include/gtk-2.0/gtk/gtkcellrenderertoggle.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/gtkcolorbutton.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/gtkcombobox.h: + +/usr/include/gtk-2.0/gtk/gtktreeview.h: + +/usr/include/gtk-2.0/gtk/gtkdnd.h: + +/usr/include/gtk-2.0/gtk/gtkcomboboxentry.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/gtkeditable.h: + +/usr/include/gtk-2.0/gtk/gtkentry.h: + +/usr/include/gtk-2.0/gtk/gtkimcontext.h: + +/usr/include/gtk-2.0/gtk/gtkentrycompletion.h: + +/usr/include/gtk-2.0/gtk/gtkliststore.h: + +/usr/include/gtk-2.0/gtk/gtktreemodelfilter.h: + +/usr/include/gtk-2.0/gtk/gtkeventbox.h: + +/usr/include/gtk-2.0/gtk/gtkexpander.h: + +/usr/include/gtk-2.0/gtk/gtkfilesel.h: + +/usr/include/gtk-2.0/gtk/gtkfixed.h: + +/usr/include/gtk-2.0/gtk/gtkfilechooserdialog.h: + +/usr/include/gtk-2.0/gtk/gtkfilechooser.h: + +/usr/include/gtk-2.0/gtk/gtkfilefilter.h: + +/usr/include/gtk-2.0/gtk/gtkfilechooserwidget.h: + +/usr/include/gtk-2.0/gtk/gtkfontbutton.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/gtkicontheme.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/gtklayout.h: + +/usr/include/gtk-2.0/gtk/gtklist.h: + +/usr/include/gtk-2.0/gtk/gtklistitem.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/gtkradioaction.h: + +/usr/include/gtk-2.0/gtk/gtktoggleaction.h: + +/usr/include/gtk-2.0/gtk/gtkradiobutton.h: + +/usr/include/gtk-2.0/gtk/gtkradiomenuitem.h: + +/usr/include/gtk-2.0/gtk/gtkradiotoolbutton.h: + +/usr/include/gtk-2.0/gtk/gtktoggletoolbutton.h: + +/usr/include/gtk-2.0/gtk/gtktoolbutton.h: + +/usr/include/gtk-2.0/gtk/gtktoolitem.h: + +/usr/include/gtk-2.0/gtk/gtktooltips.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/gtkseparatortoolitem.h: + +/usr/include/gtk-2.0/gtk/gtksizegroup.h: + +/usr/include/gtk-2.0/gtk/gtkspinbutton.h: + +/usr/include/gtk-2.0/gtk/gtkstatusbar.h: + +/usr/include/gtk-2.0/gtk/gtkstock.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/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/gtktreestore.h: + +/usr/include/gtk-2.0/gtk/gtkuimanager.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: + +../../../../lttv/lttv/lttv.h: + +../../../../lttv/lttv/attribute.h: + +../../../../lttv/lttv/iattribute.h: + +../../../../ltt/time.h: + +../../../../ltt/compiler.h: + +/usr/include/math.h: + +/usr/include/bits/huge_val.h: + +/usr/include/bits/mathdef.h: + +/usr/include/bits/mathcalls.h: + +/usr/include/bits/mathinline.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: + +../../../../lttv/lttv/module.h: + +../../../../lttv/lttv/hook.h: + +../../../../lttv/lttv/filter.h: + +../../../../lttv/lttv/traceset.h: + +../../../../ltt/ltt.h: + +../../../../lttv/lttv/tracecontext.h: + +../../../../lttv/lttv/state.h: + +../../../../ltt/event.h: + +../../../../lttv/modules/gui/lttvwindow/lttvwindow/lttvwindow.h: + +../../../../lttv/lttv/stats.h: + +../../../../lttv/modules/gui/lttvwindow/lttvwindow/mainwindow.h: + +../../../../lttv/modules/gui/lttvwindow/lttvwindow/lttvfilter.h: + +../../../../lttv/modules/gui/lttvwindow/lttvwindow/lttvwindowtraces.h: + +hGuiFilterInsert.xpm: diff --git a/ltt/branches/poly/lttv/modules/gui/filter/.deps/libguifilter.la.Plo b/ltt/branches/poly/lttv/modules/gui/filter/.deps/libguifilter.la.Plo new file mode 100644 index 00000000..9ce06a81 --- /dev/null +++ b/ltt/branches/poly/lttv/modules/gui/filter/.deps/libguifilter.la.Plo @@ -0,0 +1 @@ +# dummy diff --git a/ltt/branches/poly/lttv/modules/gui/filter/Makefile.am b/ltt/branches/poly/lttv/modules/gui/filter/Makefile.am new file mode 100644 index 00000000..25fc978c --- /dev/null +++ b/ltt/branches/poly/lttv/modules/gui/filter/Makefile.am @@ -0,0 +1,21 @@ +# +# 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/lttvwindow/lttvwindow -llttvwindow + +libdir = ${lttvplugindir} + +lib_LTLIBRARIES = libguifilter.la +libguifilter_la_LDFLAGS = -module +libguifilter_la_SOURCES = filter.c + +EXTRA_DIST = \ + hGuiFilterInsert.xpm + + diff --git a/ltt/branches/poly/lttv/modules/gui/filter/filter.c b/ltt/branches/poly/lttv/modules/gui/filter/filter.c new file mode 100644 index 00000000..04b9e774 --- /dev/null +++ b/ltt/branches/poly/lttv/modules/gui/filter/filter.c @@ -0,0 +1,196 @@ +/* This file is part of the Linux Trace Toolkit viewer + * Copyright (C) 2003-2004 Simon Bouvier-Zappa + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License Version 2 as + * published by the Free Software Foundation; + * + * 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 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 +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +#include "hGuiFilterInsert.xpm" + +typedef struct _FilterViewerData FilterViewerData; + +GtkWidget *guifilter_get_widget(FilterViewerData *fvd); +FilterViewerData *gui_filter(Tab *tab); +void gui_filter_destructor(FilterViewerData *fvd); +gboolean filter_traceset_changed(void * hook_data, void * call_data); +gboolean filter_viewer_data(void * hook_data, void * call_data); +GtkWidget* h_gui_filter(Tab *tab); +void statistic_destroy_walk(gpointer data, gpointer user_data); + +struct _FilterViewerData { + Tab *tab; + + // temp widget -- still thinking about a formal structure + GtkWidget *vcontainer; + GtkWidget *window; +}; + +GtkWidget +*guifilter_get_widget(FilterViewerData *fvd) +{ + return fvd->window; +} + +/** + * Statistic Viewer's constructor + * + * This constructor is used to create StatisticViewerData data structure. + * @return The Statistic viewer data created. + */ +FilterViewerData* +gui_filter(Tab *tab) +{ + GtkCellRenderer *renderer; + GtkTreeViewColumn *column; + + FilterViewerData* fvd = g_new(FilterViewerData,1); + + fvd->tab = tab; + + lttvwindow_register_traceset_notify(fvd->tab, + filter_traceset_changed, + filter_viewer_data); +// request_background_data(filter_viewer_data); + + /* Initialize the vertical container */ + + fvd->window = gtk_drawing_area_new(); + + gtk_widget_set_size_request(fvd->window,200,200); + + fvd->vcontainer = gtk_vbox_new (FALSE, 1); + gtk_container_set_border_width (GTK_CONTAINER (fvd->vcontainer), 1); + gtk_container_add (GTK_CONTAINER (fvd->window), fvd->vcontainer); + + gtk_box_pack_start (GTK_BOX (fvd->vcontainer), fvd->window, TRUE, TRUE, 0); + +// gtk_widget_show(fvd->window); + + g_object_set_data_full( + G_OBJECT(guifilter_get_widget(fvd)), + "filter_viewer_data", + fvd, + (GDestroyNotify)gui_filter_destructor); + + return fvd; +} + +void +gui_filter_destructor(FilterViewerData *fvd) +{ + Tab *tab = fvd->tab; + + /* May already been done by GTK window closing */ + if(GTK_IS_WIDGET(guifilter_get_widget(fvd))){ + g_info("widget still exists"); + } + if(tab != NULL) { + lttvwindow_unregister_traceset_notify(fvd->tab, + filter_traceset_changed, + filter_viewer_data); + } + lttvwindowtraces_background_notify_remove(fvd); + + g_free(fvd); +} + +gboolean +filter_traceset_changed(void * hook_data, void * call_data) { + + return FALSE; +} + +gboolean +filter_viewer_data(void * hook_data, void * call_data) { + + return FALSE; +} + +/** + * Filter Module's constructor hook + * + * This constructor is given as a parameter to the menuitem and toolbar button + * registration. It creates the list. + * @param parent_window A pointer to the parent window. + * @return The widget created. + */ +GtkWidget * +h_gui_filter(Tab *tab) +{ + FilterViewerData* f = gui_filter(tab) ; + + if(f) + return guifilter_get_widget(f); + else return NULL; + +} + + + +/** + * plugin's init function + * + * This function initializes the Statistic Viewer functionnality through the + * gtkTraceSet API. + */ +static void init() { + + lttvwindow_register_constructor("guifilter", + "/", + "Insert Filter Module", + hGuiFilterInsert_xpm, + "Insert Filter Module", + h_gui_filter); +} + +void filter_destroy_walk(gpointer data, gpointer user_data) +{ + FilterViewerData *fvd = (FilterViewerData*)data; + + g_debug("CFV.c : statistic_destroy_walk, %p", fvd); + /* May already have been done by GTK window closing */ + if(GTK_IS_WIDGET(guifilter_get_widget(fvd))) + gtk_widget_destroy(guifilter_get_widget(fvd)); +} + +/** + * plugin's destroy function + * + * This function releases the memory reserved by the module and unregisters + * everything that has been registered in the gtkTraceSet API. + */ +static void destroy() { + + lttvwindow_unregister_constructor(h_gui_filter); + +} + + +LTTV_MODULE("guifilter", "Filter window", \ + "Graphical module that let user specify their filtering options", \ + init, destroy, "lttvwindow") + diff --git a/ltt/branches/poly/lttv/modules/gui/filter/hGuiFilterInsert.xpm b/ltt/branches/poly/lttv/modules/gui/filter/hGuiFilterInsert.xpm new file mode 100644 index 00000000..02515a0b --- /dev/null +++ b/ltt/branches/poly/lttv/modules/gui/filter/hGuiFilterInsert.xpm @@ -0,0 +1,30 @@ +/* XPM */ +static char * hGuiFilterInsert_xpm[] = { +"22 22 5 1", +" c None", +". c #800080", +"r c #FF0000", +"g c #00FF00", +"b c #0000FF", +" ", +" ", +" ..... ", +" .. .. ", +" .. .. ", +" .. .. ", +" ..... .. ", +" ..... . ", +" .. .. ", +" .. .. ", +" .. ..... ", +" .. ..... ", +" .. .. ", +" .. .. ", +" ..... . ", +" ..... .. ", +" .. .. ", +" .. .. ", +" .. .. ", +" ..... ", +" ", +" "}; diff --git a/ltt/branches/poly/lttv/modules/text/textFilter.c b/ltt/branches/poly/lttv/modules/text/textFilter.c index bcca8751..17d73f60 100644 --- a/ltt/branches/poly/lttv/modules/text/textFilter.c +++ b/ltt/branches/poly/lttv/modules/text/textFilter.c @@ -16,8 +16,10 @@ * MA 02111-1307, USA. */ -/* The text filter facility will prompt for user filter option - * and transmit them to the lttv core */ +/* + * The text filter facility will prompt for user filter option + * and transmit them to the lttv core + */ #include #include @@ -37,62 +39,83 @@ /* Insert the hooks before and after each trace and tracefile, and for each event. Print a global header. */ -static char +/* + * YET TO BE ANSWERED ! + * - why does this module need dependency with batchAnalysis ? + */ + +static char *a_file_name = NULL, + *a_string = NULL; + +static GString *a_filter_string = NULL; + static LttvHooks *before_traceset, *event_hook; static FILE *a_file; + /** - * analyses user filter options and issues the filter string - * to the core + * filters the file input from user * @param hook_data the hook data - * @param call_data the call data + * @return success/failure of operation */ -static void parse_filter_options(void *hook_data, void *call_data) { - - char* parsed_string=NULL; /* the string compiled from user's input */ - - /* debug */ - g_print("textFilter::parse_filter_options\n"); - - /* recovering hooks data */ - LttvTracefileContext *tfc = (LttvTracefileContext *)call_data; - - LttvTracefileState *tfs = (LttvTracefileState *)call_data; - -// LttvTrace* lt = tfc->t_context->vt; - - /* hook header */ - g_info("TextFilter options parser"); - - /* +void filter_analyze_file(void *hook_data) { + + g_print("textFilter::filter_analyze_file\n"); + + /* * User may specify filtering options through static file * and/or command line string. From these sources, an * option string is rebuilded and sent to the filter core */ - if(a_file_name != NULL) { /* -f switch in use */ - a_file = fopen(a_file_name, "r"); - if(a_file == NULL) - g_error("textFilter::parse_filter_content() cannot open file %s", a_file_name); - - fscanf(a_file,"%s",parsed_string); - - fclose(a_file); - } - if(a_filter_string != NULL) /* -s switch in use */ - parsed_string = a_filter_string; - - if(parsed_string==NULL) - g_warning("textFilter::parser_filter_options() no filtering options specified !"); - - /* send the filtering string to the core */ - lttv_filter_new(parsed_string,tfs); - + a_file = fopen(a_file_name, "r"); + if(a_file == NULL) { + g_warning("file %s does not exist", a_file_name); + return; + } + + char* tmp; + fscanf(a_file,"%s",tmp); + + if(!a_filter_string->len) { + g_string_append(a_filter_string,tmp); + } + else { + g_string_append(a_filter_string,"&"); /*conjonction between expression*/ + g_string_append(a_filter_string,tmp); + } + + fclose(a_file); +} + +/** + * filters the string input from user + * @param hook_data the hook data + * @return success/failure of operation + */ +void filter_analyze_string(void *hook_data) { + + g_print("textFilter::filter_analyze_string\n"); + + /* + * User may specify filtering options through static file + * and/or command line string. From these sources, an + * option string is rebuilded and sent to the filter core + */ + if(!a_filter_string->len) { + g_string_append(a_filter_string,a_string); + lttv_filter_new(a_filter_string,NULL); + } + else { + g_string_append(a_filter_string,"&"); /*conjonction between expression*/ + g_string_append(a_filter_string,a_string); + } + } /** @@ -112,26 +135,28 @@ static gboolean filter_event_content(void *hook_data, void *call_data) { */ static void init() { - g_print("textFilter::init()"); /* debug */ - + g_print("textFilter::init()\n"); /* debug */ + + a_filter_string = g_string_new(""); + LttvAttributeValue value; LttvIAttribute *attributes = LTTV_IATTRIBUTE(lttv_global_attributes()); g_info("Init textFilter.c"); - a_filter_string = NULL; + a_string = NULL; lttv_option_add("string", 's', "filters a string issued by the user on the command line", "string", - LTTV_OPT_STRING, &a_filter_string, NULL, NULL); + LTTV_OPT_STRING, &a_string, filter_analyze_string, NULL); // add function to call for option a_file_name = NULL; lttv_option_add("filename", 'f', "browse the filter options contained in specified file", "file name", - LTTV_OPT_STRING, &a_file_name, NULL, NULL); + LTTV_OPT_STRING, &a_file_name, filter_analyze_file, NULL); /* * Note to myself ! @@ -143,10 +168,10 @@ static void init() { g_assert((event_hook = *(value.v_pointer)) != NULL); lttv_hooks_add(event_hook, filter_event_content, NULL, LTTV_PRIO_DEFAULT); - g_assert(lttv_iattribute_find_by_path(attributes,"hooks/trace/before", - LTTV_POINTER, &value)); - g_assert((before_traceset = *(value.v_pointer)) != NULL); - lttv_hooks_add(before_traceset, parse_filter_options, NULL, LTTV_PRIO_DEFAULT); +// g_assert(lttv_iattribute_find_by_path(attributes,"hooks/trace/before", +// LTTV_POINTER, &value)); +// g_assert((before_traceset = *(value.v_pointer)) != NULL); +// lttv_hooks_add(before_traceset, parse_filter_options, NULL, LTTV_PRIO_DEFAULT); } @@ -163,12 +188,12 @@ static void destroy() { lttv_hooks_remove_data(event_hook, filter_event_content, NULL); - lttv_hooks_remove_data(before_traceset, parse_filter_options, NULL); +// lttv_hooks_remove_data(before_traceset, parse_filter_options, NULL); } LTTV_MODULE("textFilter", "Filters traces", \ "Filter the trace following commands issued by user input", \ - init, destroy, "option") + init, destroy, "batchAnalysis", "option") -- 2.34.1