diff --git a/common/utils/T/tracer/database.c b/common/utils/T/tracer/database.c
index 5ea178141582535e85a6b1a303519d3feba6866c..5e7c9ec8f6b60907d23570a7dc07df5c4da5c915 100644
--- a/common/utils/T/tracer/database.c
+++ b/common/utils/T/tracer/database.c
@@ -409,3 +409,20 @@ void on_off(void *_d, char *item, int *a, int onoff)
     exit(1);
   }
 }
+
+database_event_format get_format(void *_database, int event_id)
+{
+  database *d = _database;
+  database_event_format ret;
+
+  if (event_id < 0 || event_id >= d->isize) {
+    printf("%s:%d: bad event ID (%d)\n", __FILE__, __LINE__, event_id);
+    abort();
+  }
+
+  ret.type = d->i[event_id].arg_type;
+  ret.name = d->i[event_id].arg_name;
+  ret.count = d->i[event_id].asize;
+
+  return ret;
+}
diff --git a/common/utils/T/tracer/database.h b/common/utils/T/tracer/database.h
index 4ca4606c157cbcc6119a65f92d3b068dc981b29a..544f0ad06f8ecad6cd1de69336c98de7097cfa91 100644
--- a/common/utils/T/tracer/database.h
+++ b/common/utils/T/tracer/database.h
@@ -8,4 +8,16 @@ void list_ids(void *database);
 void list_groups(void *database);
 void on_off(void *d, char *item, int *a, int onoff);
 
+/****************************************************************************/
+/* get format of an event                                                   */
+/****************************************************************************/
+
+typedef struct {
+  char **type;
+  char **name;
+  int count;
+} database_event_format;
+
+database_event_format get_format(void *database, int event_id);
+
 #endif /* _DATABASE_H_ */