summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Jones <admin@danieljon.es>2019-12-11 10:26:45 +1030
committerDaniel Jones <admin@danieljon.es>2019-12-11 10:26:45 +1030
commit97a0e09ae4a68ea85db3b9abc65df8de7b230439 (patch)
tree7bcc62c77760b7206df836c9babe0242163fbc41
parent3a8f8c7318d7a664684ceb5b7b2c2c9ed0b82087 (diff)
downloadbinstatus-97a0e09ae4a68ea85db3b9abc65df8de7b230439.tar.gz
binstatus-97a0e09ae4a68ea85db3b9abc65df8de7b230439.zip
rewrite for dynamic nature
taking the suckless approach things are now configurable and it's easy to add new components to the status bar. see config.h
-rw-r--r--components.c89
-rw-r--r--components.h29
-rw-r--r--config.h45
3 files changed, 163 insertions, 0 deletions
diff --git a/components.c b/components.c
new file mode 100644
index 0000000..a8a27db
--- /dev/null
+++ b/components.c
@@ -0,0 +1,89 @@
+/*
+ * This program 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, either version 3 of the License, or
+ *(at your option) any later version.
+ *
+ * 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "components.h"
+int
+dectobin(int dec)
+{
+ if (dec == 0) return 0;
+ if (dec == 1) return 1;
+ return (dec % 2) + 10 * dectobin(dec / 2);
+}
+
+char *eat(char *food, size_t len)
+{
+ if (len == 0) return food;
+ while (food[len-1] == '\n')
+ {
+ food[len-1] = '\0';
+ }
+ return food;
+}
+
+void
+gettime(int *store)
+{
+ time_t t = time(NULL);
+ struct tm *tm = localtime(&t);
+ store[0] = tm->tm_hour;
+ store[1] = tm->tm_min;
+}
+
+int
+converthour(int hour)
+{
+ return (hour - 12 < 0) ? 0 : hour - 12;
+}
+
+char *currenttime(char *store, size_t size, int flag)
+{
+ int time[2];
+ gettime(time);
+ snprintf(store, size, "%02d:%02d ", time[0], time[1]);
+ return store;
+}
+
+char *battery(char *store, size_t size, int flag)
+{
+ FILE *capacity;
+ char cap[4];
+ capacity = fopen("/sys/class/power_supply/BAT0/capacity", "r");
+ if (!capacity)
+ {
+ fprintf(stderr, "cannot read battery percent\n");
+ return "error ";
+ }
+ fread(cap, 1, 4, capacity);
+ fclose(capacity);
+ snprintf(store, size, "%d%% ", atoi(cap));
+ return store;
+}
+
+char *charging(char *store, size_t size, int flag)
+{
+ FILE *state;
+ char cap[15];
+ state = fopen("/sys/class/power_supply/BAT0/status", "r");
+ if (!state)
+ {
+ fprintf(stderr, "cannot read battery state\n");
+ return "error ";
+ }
+ fgets(cap, 15, state);
+ eat(cap, strlen(cap));
+ fclose(state);
+ snprintf(store, size, "%s ", cap);
+ return store;
+}
diff --git a/components.h b/components.h
new file mode 100644
index 0000000..bf3bc79
--- /dev/null
+++ b/components.h
@@ -0,0 +1,29 @@
+/*
+ * This program 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, either version 3 of the License, or
+ *(at your option) any later version.
+ *
+ * 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef COMPONENTS_H
+#define COMPONENTS_H
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <time.h>
+
+char *currenttime(char *store, size_t size, int flag);
+char *battery(char *store, size_t size, int flag);
+char *charging(char *store, size_t size, int flag);
+
+#endif
diff --git a/config.h b/config.h
new file mode 100644
index 0000000..bb0e59a
--- /dev/null
+++ b/config.h
@@ -0,0 +1,45 @@
+/*
+ * This program 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, either version 3 of the License, or
+ *(at your option) any later version.
+ *
+ * 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#define MAXLENGTH 256
+
+enum flag
+{
+ NORMALTIME = 1<<1,
+ BINARYTIME = 1<<2,
+ MILITARYTIME = 1<<3,
+};
+
+struct component
+{
+ char *(*function)();
+ int flag;
+};
+
+/*
+ * add or remove components as desired
+ * components are shown in the order of this array
+ */
+struct component components[] ={
+/* function flag */
+ {currenttime, NORMALTIME},
+ {battery, 0},
+ {charging, 0},
+};
+
+#endif