First testing draft of the program. Displays the up and download speed
This commit is contained in:
parent
2937d03396
commit
65e8f879ef
32
Makefile
Normal file
32
Makefile
Normal file
@ -0,0 +1,32 @@
|
||||
# cStatBar Makefile
|
||||
|
||||
SRC = cstatbar.c
|
||||
OBJ = ${SRC:.c=.o}
|
||||
CC = cc
|
||||
CFLAGS = -std=c99 -g
|
||||
LDFLAGS = -lX11
|
||||
|
||||
|
||||
all: options cstatbar
|
||||
|
||||
options:
|
||||
@echo cstatusbar build options are as follow:
|
||||
@echo "CFLAGS = ${CFLAGS}"
|
||||
@echo "LDFLAGS = ${LDFLAGS}"
|
||||
@echo "CC = ${CC}"
|
||||
|
||||
.c.o:
|
||||
${CC} -c ${CFLAGS} $<
|
||||
|
||||
${OBJ}: config.h
|
||||
|
||||
config.h:
|
||||
cp config.def.h $@
|
||||
|
||||
cstatbar: ${OBJ}
|
||||
${CC} -o $@ ${OBJ} ${LDFLAGS}
|
||||
|
||||
clean:
|
||||
rm -f cstatbar ${OBJ}
|
||||
|
||||
.PHONY: all options clean
|
14
config.def.h
Normal file
14
config.def.h
Normal file
@ -0,0 +1,14 @@
|
||||
static const int cycletime = 2; /* time between updates in second */
|
||||
static const char interface[] = "enp4s0"; /* The name of the inteface to display information for */
|
||||
static const char * icons[] = { /* Array of icons to be used for the status bar segments */
|
||||
"", // Icon for date
|
||||
"", // Icon for battery
|
||||
"", // Icon for CPU usage
|
||||
"", // Icon for RAM usage
|
||||
"", // Icon for disk
|
||||
"龍", // Icon for network speed
|
||||
"", // Icon for upload speed
|
||||
"", // Icon for download speed
|
||||
"", // Icon for network information
|
||||
"" // Icon for music infos
|
||||
};
|
14
config.h
Normal file
14
config.h
Normal file
@ -0,0 +1,14 @@
|
||||
static const int cycletime = 2; /* time between updates in second */
|
||||
static const char interface[] = "enp4s0"; /* The name of the inteface to display information for */
|
||||
static const char * icons[] = { /* Array of icons to be used for the status bar segments */
|
||||
"", // Icon for date
|
||||
"", // Icon for battery
|
||||
"", // Icon for CPU usage
|
||||
"", // Icon for RAM usage
|
||||
"", // Icon for disk
|
||||
"龍", // Icon for network speed
|
||||
"", // Icon for upload speed
|
||||
"", // Icon for download speed
|
||||
"", // Icon for network information
|
||||
"" // Icon for music infos
|
||||
};
|
148
cstatbar.c
Normal file
148
cstatbar.c
Normal file
@ -0,0 +1,148 @@
|
||||
/* cStatBar
|
||||
*
|
||||
* A simple statusbar to be used with DWM
|
||||
* Gathers different kinds of system info and displays it as the windows title
|
||||
*
|
||||
* Requires dwm to have the status2d patch applied and a font that supports icons e.g. Nerdfonts
|
||||
*
|
||||
* author: _N0x
|
||||
* version: 0.1
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <X11/Xlib.h>
|
||||
|
||||
#include "config.h"
|
||||
|
||||
/* enums */
|
||||
enum { IconDateTime, IconBattery, IconCPU, IconRAM, IconDisk,
|
||||
IconNetSpeed, IconNetSpeedUp, IconNetSpeedDown, IconNetwork, IconMusic };
|
||||
|
||||
/* function declaration */
|
||||
void setup();
|
||||
void setxroot(char *title);
|
||||
char *readinfile(char *filename);
|
||||
char *getnetworkspeed();
|
||||
char *cs(int count, ...);
|
||||
|
||||
/* variables */
|
||||
static const char *iface;
|
||||
static const char kbs[] = "kb/s";
|
||||
|
||||
|
||||
/* Uses functionality from Xlib to set the window root name to a specified string */
|
||||
void setxroot(char *title)
|
||||
{
|
||||
Display * dpy = XOpenDisplay(NULL);
|
||||
|
||||
int screen = DefaultScreen(dpy);
|
||||
Window root = RootWindow(dpy, screen);
|
||||
|
||||
XStoreName(dpy, root, title);
|
||||
XFlush(dpy);
|
||||
|
||||
XCloseDisplay(dpy);
|
||||
}
|
||||
|
||||
|
||||
/* Takes in a filename and returns the content of the file */
|
||||
char * readinfile(char *fileName)
|
||||
{
|
||||
FILE * fd;
|
||||
char * c;
|
||||
int len;
|
||||
|
||||
fd = fopen(fileName, "r");
|
||||
if (fd==NULL)
|
||||
{
|
||||
perror("Could not read in File.\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
fseek(fd, 0, SEEK_END);
|
||||
len = ftell(fd);
|
||||
fseek(fd, 0, SEEK_SET);
|
||||
c = malloc(len);
|
||||
fread(c, 1, len, fd);
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
char * getnetworkspeed()
|
||||
{
|
||||
char *tmp,*result,*R1,*R2,*T1,*T2;
|
||||
char TT[12], RR[12];
|
||||
|
||||
tmp = cs(3, "/sys/class/net/", iface, "/statistics/rx_bytes");
|
||||
R1 = readinfile(tmp);
|
||||
free(tmp);
|
||||
|
||||
tmp = cs(3, "/sys/class/net/", iface, "/statistics/tx_bytes");
|
||||
T1 = readinfile(tmp);
|
||||
free(tmp);
|
||||
|
||||
sleep(1);
|
||||
|
||||
tmp = cs(3, "/sys/class/net/", iface, "/statistics/rx_bytes");
|
||||
R2 = readinfile(tmp);
|
||||
free(tmp);
|
||||
|
||||
tmp = cs(3, "/sys/class/net/", iface, "/statistics/tx_bytes");
|
||||
T2 = readinfile(tmp);
|
||||
free(tmp);
|
||||
|
||||
sprintf(RR, "%d", (atoi(R2) - atoi(R1)) / 1024);
|
||||
sprintf(TT, "%d", (atoi(T2) - atoi(T1)) / 1024);
|
||||
|
||||
result = cs(11, icons[IconNetSpeed], " ",
|
||||
icons[IconNetSpeedUp], " ", TT, kbs, " ",
|
||||
icons[IconNetSpeedDown], " ", RR, kbs);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/* a variadic function to take in count number of strings and concatenate them into one single string */
|
||||
char * cs(int count, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start(ap, count);
|
||||
|
||||
int len = 1;
|
||||
for(int i=0; i<count; i++) { len += strlen(va_arg(ap, char*)); }
|
||||
va_end(ap);
|
||||
|
||||
char * result = malloc(len * sizeof(char));
|
||||
int pos = 0;
|
||||
|
||||
va_start(ap, count);
|
||||
for(int i=0; i<count; i++){
|
||||
char * tmp = va_arg(ap, char *);
|
||||
strcpy(result + pos, tmp);
|
||||
pos += strlen(tmp);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
void setup(){
|
||||
iface = interface;
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
setup();
|
||||
|
||||
while(1) {
|
||||
//setxroot(name);
|
||||
printf("%s\n", getnetworkspeed());
|
||||
|
||||
sleep(cycletime);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user