Exemplo n.º 1
0
Arquivo: status.c Projeto: awaw/status
static void
redraw(void)
{
	desktops(5);
	memory(90);
	loadaverage(400);
	procs(550);
	cpubar(650);
	showfile(750);
	datetime();
}
Exemplo n.º 2
0
void draw_juggler(int show_loadavg, aa_context *c, JMLib *j) {
	int color;
	int i;
	struct aajm_loadavg load;

	arm* ap = &(j->ap);
	ball* rhand = &(j->rhand);
	ball* lhand = &(j->lhand);
	hand* handp = &(j->handpoly);

	color = 64;
	// draw head
	aa_drawcircle(c,ap->hx, ap->hy,
			ap->hr, color, -1);

	// draw juggler
	for (i=0;i<5;i++) {
		aa_drawline(c, ap->rx[i], ap->ry[i],
			ap->rx[i+1], ap->ry[i+1], color);
		aa_drawline(c, ap->lx[i], ap->ly[i],
			ap->lx[i+1], ap->ly[i+1], color);
	}

	// hands
	for (i=0; i <= 8; i++) {
		aa_drawline(c, rhand->gx + handp->rx[i],
			rhand->gy + handp->ry[i],
			rhand->gx + handp->rx[i+1],
			rhand->gy + handp->ry[i+1], color);
		aa_drawline(c, lhand->gx + handp->lx[i],
			lhand->gy + handp->ly[i],
			lhand->gx + handp->lx[i+1],
			lhand->gy + handp->ly[i+1], color);
	}
	aa_drawline(c, rhand->gx + handp->rx[9],
		rhand->gy + handp->ry[9],
		rhand->gx + handp->rx[0],
		rhand->gy + handp->ry[0], color);
	aa_drawline(c, lhand->gx + handp->lx[9],
		lhand->gy + handp->ly[9],
		lhand->gx + handp->lx[0],
		lhand->gy + handp->ly[0], color);

	color = 255;
	// draw balls
	int diam = (11*j->dpm/DW);
	for(i=j->numBalls()-1;i>=0;i--) {
		aa_drawcircle(c, j->b[i].gx + diam,
				j->b[i].gy + diam,
				diam, color, color);
	}


	aa_render(c, params, 0, 0,
		aa_imgwidth(c), aa_imgheight(c));

	aa_printf(c, 0, 0, AA_SPECIAL,
		gettext("Site: %s    Style: %s    Balls: %i"),
		j->getSite(), j->getStyle(), j->numBalls());

	if(show_loadavg) {
		loadaverage(&load);
		aa_printf(c, 0, 1, AA_SPECIAL,
			"LoadAvg: %2.2f %2.2f %2.2f",
			load.one, load.five, load.fifteen);
	}
	if(j->getStatus() == ST_PAUSE) {
		aa_puts(c, 1, 3, AA_SPECIAL, gettext("Paused"));
	}
	aa_flush(c);

	memset(c->imagebuffer,0,aa_imgwidth(c)*aa_imgheight(c));
}
Exemplo n.º 3
0
void main_loop(int max_iterations, int delay,
		int loadavg_flag, int normal_load, int socket_fd,
		float randomizestyletime, float randomizesitetime) {
	struct timeval starttime, endtime, selecttime;
	struct timeval lastrandomizestyletime={0,0};
	struct timeval lastrandomizesitetime ={0,0};
	struct aajm_loadavg load;
	long speed = DEFSPEED; /* microseconds between frames */
	long load_speed = 0; /* Speed adjustment, based on load */
	int loop_forever = 0;
	char c;
	int i;
	int tmp;
	char newsite[JML_MAX_SITELEN];
	char newstyle[2];

	int accepted_sock = 0; /* FD for accept()ed socket */
	int amount_read = 0; /* Amount read into buffer so far */
	int r; /* Num bytes read in last read() */
	char socket_buffer[MAX_SOCKET_BUFFER]; /* Buffer */
	char command[MAX_SOCKET_BUFFER];
	char data[MAX_SOCKET_BUFFER];
	fd_set socket_set; /* Used for select() */
	socklen_t sin_size; /* Used by accept() */
	struct sockaddr their_addr; /* Used by accept() */
	JML_CHAR **possible_styles;

	int newstyle_index;

	possible_styles = jmlib->getStyles();

	load.one = -1;
	load.five = -1;
	load.fifteen = -1;

	if(delay > 0) {
		speed = delay * 1000;
	}

	if(max_iterations <= 0) {
		loop_forever = 1;
	}

	memset((void *)socket_buffer,0,MAX_SOCKET_BUFFER);
	memset((void *)command,0,MAX_SOCKET_BUFFER);
	memset((void *)data,0,MAX_SOCKET_BUFFER);

	while (1) {
		gettimeofday(&starttime,NULL);
                if (randomizesitetime > 0 &&
                           (starttime.tv_sec -lastrandomizesitetime.tv_sec ) +
                    (float)(starttime.tv_usec-lastrandomizesitetime.tv_usec)/1000000
                     >= randomizesitetime) {
                        randompattern();
                        lastrandomizesitetime.tv_sec  = starttime.tv_sec;
                        lastrandomizesitetime.tv_usec = starttime.tv_usec;
                }
                if (randomizestyletime > 0 &&
                           (starttime.tv_sec -lastrandomizestyletime.tv_sec ) +
                    (float)(starttime.tv_usec-lastrandomizestyletime.tv_usec)/1000000
                      >= randomizestyletime) {
                        jmlib->setStyle("Random");
                        lastrandomizestyletime.tv_sec  = starttime.tv_sec;
                        lastrandomizestyletime.tv_usec = starttime.tv_usec;
                }

		jmlib->doJuggle();
		draw_juggler(loadavg_flag, context, jmlib);

		if(loadavg_flag) {
			loadaverage(&load);
			if(load.one != -1) {
				tmp = (int)(load.one*100 - normal_load);
				load_speed = 5000 * tmp;
			}
		}

		c=aa_getkey(context,0);
		if(c=='s' || c=='S') {
			/* Change SiteSwap */
			memset(newsite,0,JML_MAX_SITELEN);
			strncpy(newsite, jmlib->getSite(), JML_MAX_SITELEN);
			aa_puts(context, 1, 4, AA_SPECIAL,
				gettext("Enter New SiteSwap..."));
			aa_edit(context, 1, 5, 20,
				newsite, JML_MAX_SITELEN);
			if(newsite[0]!=0) {
				jmlib->setPattern(newsite,newsite,
					HR_DEF, DR_DEF);
				jmlib->setStyleDefault();
				jmlib->startJuggle();
			}
		} else if(c=='r' || c=='R') {
                        randompattern();
		} else if(c=='q' || c=='Q' || c==27) {
			/* Quit */
			/* 27 == Escape
			Don't complain. This was a hack before it started */
			return;
		} else if(c==' ' || c=='p' || c=='P') {
			/* Toggle Pause */
			jmlib->togglePause();
		} else if(c=='t' || c=='T') {
			/* Change Style */
			aa_puts(context, 3, 4, AA_SPECIAL,
				gettext("Choose New Style..."));
			for (i=0;i<jmlib->numStyles();i++) {
				aa_printf(context, 3, 5+i, AA_SPECIAL,
					"%i: %s",i+1,possible_styles[i]);
			}
			aa_flush(context);
			memset(newstyle,0,JML_MAX_SITELEN);
			aa_edit(context, 3, 5+i, 2, newstyle, 2);
			if(newstyle[0]!=0) {
				newstyle_index=atoi(newstyle)-1;
				if(newstyle_index>=0
				  && newstyle_index<jmlib->numStyles()) {
					jmlib->setStyle(possible_styles[newstyle_index]);
				}
			}
		} else if(c=='h' || c=='H') {
			/* Help */
			int curr_height = 4;
			aa_puts(context, 3, curr_height, AA_SPECIAL,
				gettext("Key Help"));
			++curr_height;
			aa_puts(context, 3, ++curr_height, AA_SPECIAL,
				gettext("h - This screen"));
			aa_puts(context, 3, ++curr_height, AA_SPECIAL,
				gettext("s - Change Siteswap"));
			aa_puts(context, 3, ++curr_height, AA_SPECIAL,
				gettext("r - Random Pattern"));
			aa_puts(context, 3, ++curr_height, AA_SPECIAL,
				gettext("t - Change Style"));
			aa_puts(context, 3, ++curr_height, AA_SPECIAL,
				gettext("l - Toggle Load Monitoring"));
#ifdef HAVE_AVCODEC_H
			aa_puts(context, 3, ++curr_height, AA_SPECIAL,
				gettext("m - Dump MPEG"));
#endif
			aa_puts(context, 3, ++curr_height, AA_SPECIAL,
				gettext("q - Quit"));
			aa_puts(context, 3, ++curr_height, AA_SPECIAL,
				gettext("space - Pause"));
			aa_puts(context, 3, ++curr_height, AA_SPECIAL,
				gettext("+, -, enter - Speed up, down, reset"));
			++curr_height;
			aa_puts(context, 3, ++curr_height, AA_SPECIAL,
				gettext("Press any key to remove this menu"));
			aa_flush(context);
			aa_getkey(context, 1);
		} else if(c=='+' || c=='=' || c=='k') {
			/* Speed Up */
			speed -= 1500;
			if(speed < 0) { speed = 0; }
		} else if(c=='-' || c=='j') {
			/* Speed Down */
			speed += 1500;
#ifdef HAVE_AVCODEC_H
		} else if(c=='m') {
			/* Dump MPEG */
			char mpegname[20];
			memset(mpegname,0,20);
			aa_puts(context, 1, 4, AA_SPECIAL,
				gettext("Enter MPEG Name..."));
			aa_edit(context, 1, 5, 20,
				mpegname, JML_MAX_SITELEN);
			if(mpegname[0]!=0) {
				creatempeg(jmlib, mpegname);
			}
#endif
		} else if(c=='l') {
			/* Toggle Load Monitoring */
			if(loadavg_flag == 1) {
				loadavg_flag = 0;
				load_speed = 0;
			} else {
				loadavg_flag = 1;
			}
		} else if(c==13) {
			/* Speed Reset */
			/* 13 == Enter */
			speed = DEFSPEED;
		}
		gettimeofday(&endtime,NULL);

		selecttime.tv_sec = endtime.tv_sec - starttime.tv_sec;
		if (selecttime.tv_sec != 0) {
			endtime.tv_usec += 1000000*selecttime.tv_sec;
			selecttime.tv_sec = 0;
		}
		selecttime.tv_usec = (speed + load_speed) - 
					(endtime.tv_usec - starttime.tv_usec);
		if(selecttime.tv_usec < 0) {
			selecttime.tv_usec = 1;
		}

		/* IPC Code begins here */
		if(socket_fd <= 0) {
			select(0,NULL,NULL,NULL,&selecttime);
		} else {

		FD_ZERO(&socket_set);
		FD_SET(socket_fd,&socket_set);
		/* accepted_sock is the fd we get
			from accept()ing the socket */
		if(accepted_sock > 0) {
			/* read just one byte */
			r = read(accepted_sock,
				(void *)&socket_buffer[amount_read],1);
			if(r == -1 && errno != EAGAIN) {
			/* EAGAIN means we need to try reading again,
			there wasn't an error, the descriptor just had
			nothing waiting in it
			Else, close the handle reset the other data stuff */
				memset((void *)socket_buffer,0,MAX_SOCKET_BUFFER-amount_read-1);
				close(accepted_sock);
				amount_read = 0;
				accepted_sock = 0;
				memset((void *)data,0,MAX_SOCKET_BUFFER);
				memset((void *)command,0,MAX_SOCKET_BUFFER);
			} else if(r > 0) {
			/* transfer stuff: command=data; If we see an
			'=', everything before it was a command. If we
			see a ';', the stuff before it was data */
				amount_read+=r;
				if(socket_buffer[amount_read-1] == '=') {
					memset((void *)command,0,MAX_SOCKET_BUFFER);
					memcpy((void *)command,(void *)socket_buffer, amount_read-1);
					memset((void *)socket_buffer,0,MAX_SOCKET_BUFFER);
					amount_read = 0;
				} else if(socket_buffer[amount_read-1] == ';') {
					memset((void *)data,0,MAX_SOCKET_BUFFER);
					memcpy((void *)data,(void *)socket_buffer, amount_read-1);
					memset((void *)socket_buffer,0,MAX_SOCKET_BUFFER);
					close(accepted_sock);
					amount_read = 0;
					accepted_sock = 0;
				}
			}
			if(amount_read >= MAX_SOCKET_BUFFER-1) {
			/* Too late, F**k 'em, they're trying
			to overflow us anyway */
				write(accepted_sock,OVERFLOW_ERROR,strlen(OVERFLOW_ERROR));
				memset((void *)socket_buffer,0,MAX_SOCKET_BUFFER);
				close(accepted_sock);
				amount_read = 0;
				accepted_sock = 0;
			}
		}

		if(command[0] != '\0' && data[0] != '\0') {
			if(!strcmp(command,"Style")) {
				jmlib->setStyle(data);
			} else if(!strcmp(command,"Site")) {
				jmlib->setPattern("Something",data,
					HR_DEF, DR_DEF);
				jmlib->setStyleDefault();
				jmlib->startJuggle();
			} else if(!strcmp(command,"Speed")) {
				if(!strcmp(data,"Up")) {
					speed -= 1500;
					if(speed < 0) speed = 0;
				} else if(!strcmp(data,"Down")) {
					speed += 1500;
				} else if(!strcmp(data,"Reset")) {
					speed = DEFSPEED;
				}
			}

			memset((void *)data,0,MAX_SOCKET_BUFFER);
			memset((void *)command,0,MAX_SOCKET_BUFFER);
		}
		if(!strcmp(command,"Quit")) {
			return;
		}
				
		if(select(socket_fd+1, &socket_set,
			NULL, NULL, &selecttime) > 0) {
			if(FD_ISSET(socket_fd,&socket_set) && accepted_sock) {
			/* Just close any subsequent conenctions until
				this one's done */
				close(accept(socket_fd,&their_addr,&sin_size));
			} else if(FD_ISSET(socket_fd,&socket_set) && !accepted_sock) {
			/* Else accept() the socket, and set it to not block */
				sin_size = sizeof(sockaddr);
				accepted_sock = accept(socket_fd,&their_addr, &sin_size);
				fcntl(accepted_sock, F_SETFL, O_NONBLOCK);
			}
		}
		}

		if(!loop_forever && max_iterations-- <= 0) {
			break;
		}
	}
}