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
*/