summaryrefslogtreecommitdiff
path: root/suggestions.c
diff options
context:
space:
mode:
authorEugeni Dodonov <eugeni@dodonov.net>2011-08-26 12:19:14 -0300
committerEugeni Dodonov <eugeni@dodonov.net>2011-08-26 12:19:14 -0300
commit1bec2dbc30d220d07dbffde53a44539ab3289fc2 (patch)
tree331affec291b39cdeb5d90de91643240f6497f3b /suggestions.c
imported to git for android build
Diffstat (limited to 'suggestions.c')
-rw-r--r--suggestions.c156
1 files changed, 156 insertions, 0 deletions
diff --git a/suggestions.c b/suggestions.c
new file mode 100644
index 0000000..d3261a9
--- /dev/null
+++ b/suggestions.c
@@ -0,0 +1,156 @@
+/*
+ * Copyright 2007, Intel Corporation
+ *
+ * This file is part of PowerTOP
+ *
+ * This program file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; version 2 of the License.
+ *
+ * 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 in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ *
+ * Authors:
+ * Arjan van de Ven <arjan@linux.intel.com>
+ */
+
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+#include <sys/types.h>
+#include <dirent.h>
+
+#include "powertop.h"
+
+
+
+char suggestion_key;
+suggestion_func *suggestion_activate;
+
+struct suggestion;
+
+struct suggestion {
+ struct suggestion *next;
+
+ char *string;
+ int weight;
+
+ char key;
+ char *keystring;
+
+ suggestion_func *func;
+};
+
+
+static struct suggestion *suggestions;
+static int total_weight;
+
+static char previous[1024];
+
+
+void reset_suggestions(void)
+{
+ struct suggestion *ptr;
+ ptr = suggestions;
+ while (ptr) {
+ struct suggestion *next;
+ next = ptr->next;
+ free(ptr->string);
+ free(ptr->keystring);
+ free(ptr);
+ ptr = next;
+ }
+ suggestions = NULL;
+ strcpy(status_bar_slots[8],"");
+ total_weight = 0;
+}
+
+void reset_suggestions2(void)
+{
+ suggestion_key = 255;
+ suggestion_activate = NULL;
+}
+
+void add_suggestion(char *text, int weight, char key, char *keystring, suggestion_func *func)
+{
+ struct suggestion *new;
+
+ if (!text)
+ return;
+
+ new = malloc(sizeof(struct suggestion));
+ if (!new)
+ return;
+ memset(new, 0, sizeof(struct suggestion));
+ new->string = strdup(text);
+ new->weight = weight;
+ new->key = key;
+ if (keystring)
+ new->keystring = strdup(keystring);
+ new->next = suggestions;
+ new->func = func;
+ suggestions = new;
+ total_weight += weight;
+}
+
+void pick_suggestion(void)
+{
+ int value, running = 0;
+ struct suggestion *ptr;
+ int weight;
+
+ strcpy(status_bar_slots[8],"");
+ suggestion_key = 255;
+ suggestion_activate = NULL;
+
+ if (total_weight==0 || suggestions==NULL) {
+ /* zero suggestions */
+ show_suggestion("");
+ return;
+ }
+
+ weight = total_weight;
+ if (strlen(previous) && displaytime > 0.0)
+ weight+=50;
+ value = rand() % weight;
+ ptr = suggestions;
+ while (ptr) {
+ running += ptr->weight;
+ if (strcmp(ptr->string, previous)==0 && displaytime > 0.0)
+ running += 50;
+ if (running > value) {
+ if (ptr->keystring)
+ strncpy(status_bar_slots[8],ptr->keystring, 40);
+ suggestion_key = ptr->key;
+ suggestion_activate = ptr->func;
+ show_suggestion(ptr->string);
+ if (strcmp(ptr->string, previous)) {
+ displaytime = 30.0;
+ strcpy(previous, ptr->string);
+ }
+ return;
+ }
+ ptr = ptr->next;
+ }
+ show_suggestion("");
+ memset(previous, 0, sizeof(previous));
+ displaytime = -1.0;
+}
+
+void print_all_suggestions(void)
+{
+ struct suggestion *ptr;
+
+ for (ptr = suggestions; ptr; ptr = ptr->next)
+ printf("\n%s\n", ptr->string);
+}