rendered paste body#include <stdio.h>#include <stdlib.h>#include <string.h>#include <xosd.h>#include <unistd.h>#include <errno.h>#include <sys/time.h>#include <sys/types.h>#include <sys/stat.h>int main (int argc, char *argv[]){ FILE *fp; xosd *osd; char buffer [1024]; char *newline; char *title; char *font = "-urw-serpentine d-bold-r-normal-*-*-720-*-*-p-*-iso8859-1"; char *colour = "rgb:0/0/f"; int outline_offset=2; char* outline_colour="rgb:0/0/7"; char* shadow_colour="rgb:0/0/3"; int delay = 5; xosd_pos pos = XOSD_bottom; int voffset = 150; int hoffset = 0; int shadow = 7; int scroll_age = 0; struct timeval old_age,new_age; int screen_line = 0; xosd_align align=XOSD_center; fd_set selset;// fp = stdin; umask(0); mkfifo("/tmp/onscreen",0622); fp = fopen("/tmp/onscreen","r");// Stupid hack to keep the FIFO open. fopen("/tmp/onscreen","w"); osd = xosd_create (2); if (!osd) { fprintf (stderr, "Error initializing osd: %s\n", xosd_error); return EXIT_FAILURE; } xosd_set_shadow_offset(osd, shadow); xosd_set_shadow_colour(osd, shadow_colour); xosd_set_outline_offset(osd, outline_offset); xosd_set_outline_colour(osd, outline_colour); xosd_set_colour(osd, colour); xosd_set_timeout(osd, delay); xosd_set_pos(osd, pos); xosd_set_vertical_offset(osd, voffset); xosd_set_horizontal_offset(osd, hoffset); xosd_set_align(osd, align); if (xosd_set_font(osd, font)) { /* This is critical, because fontset=NULL, will segfault later! */ fprintf (stderr, "ABORT: %s\n", xosd_error); return EXIT_FAILURE; } /* Not really needed, but at least we aren't throwing around an unknown value */ old_age.tv_sec=0; if (scroll_age) gettimeofday(&old_age,0); while (1) { FD_ZERO(&selset); FD_SET(fileno(fp),&selset); select(fileno(fp)+1,&selset,NULL,NULL,NULL); if (fgets (buffer, sizeof(buffer)-1, fp)) { if ((newline = strchr (buffer, '\n'))) newline[0] = '\0'; if(strlen(buffer)>2 && buffer[0]=='%') { title=strstr(buffer,":"); if(title) xosd_display (osd, 0, XOSD_string, title+1); xosd_display (osd, 1, XOSD_percentage, atoi(buffer+1)); } else if(strlen(buffer)>2 && buffer[0]=='|') { title=strstr(buffer,":"); if(title) xosd_display (osd, 0, XOSD_string, title+1); xosd_display (osd, 1, XOSD_slider, atoi(buffer+1)); } else { xosd_display (osd, 0, XOSD_string, ""); xosd_display (osd, 1, XOSD_string, buffer); } screen_line++; } else { if (!feof(fp)) { fprintf(stderr,"Error occured reading input file: %s\n",strerror(errno)); exit(1); } } old_age.tv_sec = new_age.tv_sec; } fclose (fp); if (xosd_is_onscreen(osd)) { xosd_wait_until_no_display(osd); } xosd_destroy (osd); return EXIT_SUCCESS;}/* vim: ai si sw=4 */