Added code files, and Makefile.
This commit is contained in:
		
							parent
							
								
									b0728ca8b9
								
							
						
					
					
						commit
						c97d6d119e
					
				
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -35,6 +35,7 @@ | |||||||
| *.i*86 | *.i*86 | ||||||
| *.x86_64 | *.x86_64 | ||||||
| *.hex | *.hex | ||||||
|  | dwmblocks | ||||||
| 
 | 
 | ||||||
| # Debug files | # Debug files | ||||||
| *.dSYM/ | *.dSYM/ | ||||||
|  | |||||||
							
								
								
									
										8
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,8 @@ | |||||||
|  | output: dwmblocks.o blocks.o | ||||||
|  | 	gcc dwmblocks.o blocks.o -o dwmblocks | ||||||
|  | dwmblocks.o: dwmblocks.c | ||||||
|  | 	gcc -c dwmblocks.c  | ||||||
|  | blocks.o: blocks.h | ||||||
|  | 	gcc -c blocks.h  | ||||||
|  | clean: | ||||||
|  | 	rm *.o dwmblocks | ||||||
							
								
								
									
										6
									
								
								blocks.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								blocks.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | |||||||
|  | static const Block blocks[] = { | ||||||
|  | 	{"/home/aidan/bin/statusbar/volume", 0, 10}, | ||||||
|  | 	{"/home/aidan/bin/statusbar/brightness", 0, 11}, | ||||||
|  | 	{"/home/aidan/bin/statusbar/battery", 5, 0}, | ||||||
|  | 	{"/home/aidan/bin/statusbar/clock", 5, 0}, | ||||||
|  | }; | ||||||
							
								
								
									
										151
									
								
								dwmblocks.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										151
									
								
								dwmblocks.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,151 @@ | |||||||
|  | #include<stdlib.h> | ||||||
|  | #include<stdio.h> | ||||||
|  | #include<string.h> | ||||||
|  | #include<unistd.h> | ||||||
|  | #include<signal.h> | ||||||
|  | //#include<X11/Xutil.h>
 | ||||||
|  | #include<X11/Xlib.h> | ||||||
|  | //#include <X11/Xatom.h>
 | ||||||
|  | #define LENGTH(X)               (sizeof(X) / sizeof (X[0])) | ||||||
|  | typedef struct { | ||||||
|  | 	char* command; | ||||||
|  | 	unsigned int interval; | ||||||
|  | 	unsigned int signal; | ||||||
|  | } Block; | ||||||
|  | void sighandler(int num); | ||||||
|  | 
 | ||||||
|  | #include "blocks.h" | ||||||
|  | 
 | ||||||
|  | static Display *dpy; | ||||||
|  | static int screen; | ||||||
|  | static Window root; | ||||||
|  | static char statusbar[LENGTH(blocks)][50] = {0}; | ||||||
|  | static char setrootcmd[256]; | ||||||
|  | static char *statuscat; | ||||||
|  | static const char *volupcmd[]  = { "volup", NULL }; | ||||||
|  | static const char *voldowncmd[]  = { "voldown", NULL }; | ||||||
|  | static const char *volmutecmd[]  = { "volmute", NULL }; | ||||||
|  | static int statusContinue = 1,volmuted = 0; | ||||||
|  | 
 | ||||||
|  | void replace(char *str, char old, char new) | ||||||
|  | { | ||||||
|  | 	int N = strlen(str); | ||||||
|  | 	for(int i = 0; i < N; i++) | ||||||
|  | 		if(str[i] == old) | ||||||
|  | 			str[i] = new; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | void getcmd(char *cmd, char *output) | ||||||
|  | { | ||||||
|  | 	FILE *cmdf = popen(cmd,"r"); | ||||||
|  | 	if (!cmdf) | ||||||
|  | 		return; | ||||||
|  | 	int N = strlen(output); | ||||||
|  | 	char c; | ||||||
|  | 	int i = 0; | ||||||
|  | 	while((c = fgetc(cmdf)) != EOF) | ||||||
|  | 		output[i++] = c; | ||||||
|  | 	output[i++] = '\0'; | ||||||
|  | 	pclose(cmdf); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void getcmds(int time) | ||||||
|  | { | ||||||
|  | 	const Block* current; | ||||||
|  | 	for(int i = 0; i < LENGTH(blocks); i++) | ||||||
|  | 	{	 | ||||||
|  | 		current = blocks + i; | ||||||
|  | 		if ((current->interval != 0 && time % current->interval == 0) || time == -1) | ||||||
|  | 			getcmd(current->command,statusbar[i]); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void getsigcmds(int signal) | ||||||
|  | { | ||||||
|  | 	const Block *current; | ||||||
|  | 	for (int i = 0; i < LENGTH(blocks); i++) | ||||||
|  | 	{ | ||||||
|  | 		current = blocks + i; | ||||||
|  | 		if (current->signal == signal) | ||||||
|  | 			getcmd(current->command,statusbar[i]); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void setupsignals() | ||||||
|  | { | ||||||
|  | 	for(int i = 0; i < LENGTH(blocks); i++) | ||||||
|  | 	{	   | ||||||
|  | 		if (blocks[i].signal > 0) | ||||||
|  | 			signal(SIGRTMIN+blocks[i].signal, sighandler); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void getstatus(char *str) | ||||||
|  | { | ||||||
|  | 	int j = 0;//15;
 | ||||||
|  | 	for(int i = 0; i < 5; j+=strlen(statusbar[i++])) | ||||||
|  | 	{	 | ||||||
|  | 		strcpy(str + j, statusbar[i]); | ||||||
|  | 	} | ||||||
|  | 	//for (;j < LENGTH(str);j++)
 | ||||||
|  | 	str[j] = '\0'; | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void setroot() | ||||||
|  | { | ||||||
|  | 	Display *d = XOpenDisplay(NULL); | ||||||
|  | 	if (d) { | ||||||
|  | 		dpy = d; | ||||||
|  | 	} | ||||||
|  | 	screen = DefaultScreen(dpy); | ||||||
|  | 	root = RootWindow(dpy, screen); | ||||||
|  | 	getstatus(setrootcmd); | ||||||
|  | 	replace(setrootcmd,'\n',' '); | ||||||
|  | 	replace(setrootcmd,EOF,' '); | ||||||
|  | 	//printf("%s\n",setrootcmd);
 | ||||||
|  | 	XStoreName(dpy, root, setrootcmd); | ||||||
|  | 	XCloseDisplay(dpy); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | void *statusloop() | ||||||
|  | { | ||||||
|  | 	setupsignals(); | ||||||
|  | 	int i = 0; | ||||||
|  | 	getcmds(-1); | ||||||
|  | 	while(statusContinue) | ||||||
|  | 	{ | ||||||
|  | 		getcmds(i); | ||||||
|  | 		setroot(); | ||||||
|  | 		sleep(1.0); | ||||||
|  | 		i++; | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void statusinit() | ||||||
|  | { | ||||||
|  | 	statusloop(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | void sighandler(int signum) | ||||||
|  | { | ||||||
|  | 	getsigcmds(signum-SIGRTMIN); | ||||||
|  | 	setroot(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void termhandler(int signum) | ||||||
|  | { | ||||||
|  | 	statusContinue = 0; | ||||||
|  | 	exit(0); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int main() | ||||||
|  | { | ||||||
|  | 	signal(SIGTERM, termhandler); | ||||||
|  | 	signal(SIGINT, termhandler); | ||||||
|  | 	statusinit(); | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user