All pastes #231818 Raw Edit

Stuff

public text v1 · immutable
·published 2006-11-01 01:43 UTC
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
 */