From 97a0e09ae4a68ea85db3b9abc65df8de7b230439 Mon Sep 17 00:00:00 2001 From: Daniel Jones Date: Wed, 11 Dec 2019 10:26:45 +1030 Subject: 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 --- components.c | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ components.h | 29 ++++++++++++++++++++ config.h | 45 ++++++++++++++++++++++++++++++ 3 files changed, 163 insertions(+) create mode 100644 components.c create mode 100644 components.h create mode 100644 config.h 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 . + */ + +#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 . + */ + +#ifndef COMPONENTS_H +#define COMPONENTS_H + +#include +#include +#include +#include +#include + +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 . + */ + +#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 -- cgit v1.2.3