+static const char *smpi_colors[] ={
+ "recv", "1 0 0",
+ "irecv", "1 0.52 0.52",
+ "send", "0 0 1",
+ "isend", "0.52 0.52 1",
+ "sendrecv", "0 1 1",
+ "wait", "1 1 0",
+ "waitall", "0.78 0.78 0",
+ "waitany", "0.78 0.78 0.58",
+
+ "allgather", "1 0 0",
+ "allgatherv", "1 0.52 0.52",
+ "allreduce", "1 0 1",
+ "alltoall", "0.52 0 1",
+ "alltoallv", "0.78 0.52 1",
+ "barrier", "0 0.78 0.78",
+ "bcast", "0 0.78 0.39",
+ "gather", "1 1 0",
+ "gatherv", "1 1 0.52",
+ "reduce", "0 1 0",
+ "reducescatter", "0.52 1 0.52",
+ "scan", "1 0.58 0.23",
+ "scatterv", "0.52 0 0.52",
+ "scatter", "1 0.74 0.54",
+ "computing", "0 1 1",
+
+ NULL, NULL,
+};
+
+static char *str_tolower (const char *str)
+{
+ char *ret = xbt_strdup (str);
+ int i, n = strlen (ret);
+ for (i = 0; i < n; i++)
+ ret[i] = tolower (str[i]);
+ return ret;
+}
+
+static const char *instr_find_color (const char *state)
+{
+ char *target = str_tolower (state);
+ const char *ret = NULL;
+ const char *current;
+ unsigned int i = 0;
+ while ((current = smpi_colors[i])){
+ if (strcmp (state, current) == 0){ ret = smpi_colors[i+1]; break; } //exact match
+ if (strstr(target, current)) { ret = smpi_colors[i+1]; break; }; //as substring
+ i+=2;
+ }
+ free (target);
+ return ret;
+}
+
+