|
|
@ -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(); |
|
|
|