| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -13,6 +13,7 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#endif | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define LENGTH(X)               (sizeof(X) / sizeof (X[0])) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define CMDLENGTH		50 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define MIN( a, b ) ( ( a < b) ? a : b ) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define STATUSLENGTH (LENGTH(blocks) * CMDLENGTH + 1) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					typedef struct { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -26,13 +27,13 @@ void dummysighandler(int num); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#endif | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void sighandler(int num); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void getcmds(int time); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void getsigcmds(int signal); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void getsigcmds(unsigned int signal); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void setupsignals(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void sighandler(int signum); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					int getstatus(char *str, char *last); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void setroot(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void statusloop(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void termhandler(int signum); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void termhandler(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include "blocks.h" | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -55,18 +56,19 @@ void getcmd(const Block *block, char *output) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							return; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						char c; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int i = strlen(block->icon); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						fgets(output+i, CMDLENGTH-i, cmdf); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						fgets(output+i, CMDLENGTH-i-delimLen, cmdf); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						i = strlen(output); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if (delim != '\0' && --i) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							output[i++] = delim; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						output[i++] = '\0'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if (delim[0] != '\0' && --i) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							 strncpy(output+i, delim, delimLen);  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						else | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							output[i++] = '\0'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						pclose(cmdf); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void getcmds(int time) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						const Block* current; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						for(int i = 0; i < LENGTH(blocks); i++) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						for(unsigned int i = 0; i < LENGTH(blocks); i++) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							current = blocks + i; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if ((current->interval != 0 && time % current->interval == 0) || time == -1) | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -74,10 +76,10 @@ void getcmds(int time) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void getsigcmds(int signal) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void getsigcmds(unsigned int signal) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						const Block *current; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						for (int i = 0; i < LENGTH(blocks); i++) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						for (unsigned int i = 0; i < LENGTH(blocks); i++) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							current = blocks + i; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if (current->signal == signal) | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -93,7 +95,7 @@ void setupsignals() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        signal(i, dummysighandler); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#endif | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						for(int i = 0; i < LENGTH(blocks); i++) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						for(unsigned int i = 0; i < LENGTH(blocks); i++) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if (blocks[i].signal > 0) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								signal(SIGMINUS+blocks[i].signal, sighandler); | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -105,9 +107,9 @@ int getstatus(char *str, char *last) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						strcpy(last, str); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						str[0] = '\0'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						for(int i = 0; i < LENGTH(blocks); i++) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						for(unsigned int i = 0; i < LENGTH(blocks); i++) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							strcat(str, statusbar[i]); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						str[strlen(str)-1] = '\0'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						str[strlen(str)-strlen(delim)] = '\0'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						return strcmp(str, last);//0 if they are the same | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -162,7 +164,7 @@ void sighandler(int signum) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						writestatus(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void termhandler(int signum) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void termhandler() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						statusContinue = 0; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -172,10 +174,11 @@ int main(int argc, char** argv) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						for(int i = 0; i < argc; i++) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if (!strcmp("-d",argv[i])) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								delim = argv[++i][0]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								strncpy(delim, argv[++i], delimLen); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							else if(!strcmp("-p",argv[i])) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								writestatus = pstdout; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						delim[MIN(delimLen, strlen(delim))] = '\0'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						signal(SIGTERM, termhandler); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						signal(SIGINT, termhandler); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						statusloop(); | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
					 | 
				
				 | 
				
					
  |