Пример #1
0
void aa_edit(aa_context * c, int x, int y, int size, char *s, int maxsize)
{
    struct aa_edit *e;
    int ch;
    aa_showcursor(c);
    e = aa_createedit(c, x, y, size, s, maxsize);
    aa_flush(c);
    while ((ch = aa_getkey(c, 1)) != 13 && ch != '\n') {
	aa_editkey(e, ch);
    }
    aa_hidecursor(c);
    free(e);
}
Пример #2
0
Файл: bb.c Проект: stroucki/bb
int bbupdate()
{
    int ch;
    tl_update_time();
    update_sound();
    TIME = tl_lookup_timer(scenetimer);
    ch = aa_getkey(context, 0);
    switch (ch) {
    case 's':
    case 'S':
    case AA_BACKSPACE:
	finish_stuff = 1;
	break;
    case AA_ESC:
    case 'q':
	finish_stuff = 1, quitnow = 1;
    }
    return (ch);
}
Пример #3
0
int main(int argc, char **argv)
{
	aa_context *c;
	int i, y;
	char s[256];
	aa_renderparams *p;
	strcpy(s, "line editor.");
	if (!aa_parseoptions(NULL, NULL, &argc, argv) || argc != 1) {
		printf("%s\n", aa_help);
		exit(1);
	}
	c = aa_autoinit(&aa_defparams);
	if (c == NULL) {
		printf("Can not intialize aalib\n");
		exit(2);
	}
	if (!aa_autoinitkbd(c, 0)) {
		printf("Can not intialize keyboard\n");
		aa_close(c);
		exit(3);
	}
	for (i = 0; i < aa_imgwidth(c); i++)
		for (y = 0; y < aa_imgheight(c); y++)
			aa_putpixel(c, i, y, i + y < 80 ? i : ((i + y) < 100 ? (i + y == 89 ? 150 : 0) : y * 8));
	aa_hidecursor(c);
	aa_fastrender(c, 0, 0, aa_scrwidth(c), aa_scrheight(c));
	aa_printf(c, 0, 0, AA_SPECIAL, "Fast rendering routine %i",1);
	aa_flush(c);
	aa_getkey(c, 1);
	aa_edit(c, 0, 1, 20, s, 256);
	aa_puts(c, 0, 0, AA_SPECIAL, "Key lookup test        ");
	aa_flush(c);
	int ch;
	while ((ch = aa_getevent(c, 1)) != ' ') {
		char s[80];
		sprintf(s, "Key event test-space to exit. c:%i", ch);
		aa_puts(c, 0, 0, AA_SPECIAL, s);
		aa_flush(c);
	}
	if (aa_autoinitmouse(c, AA_MOUSEALLMASK)) {
		int co = 0;
		sprintf(s, "Mouse test-space to exit");
		aa_puts(c, 0, 0, AA_SPECIAL, s);
		aa_flush(c);
		while (aa_getevent(c, 1) != ' ') {
			int x, y, b;
			char s[80];
			co++;
			aa_getmouse(c, &x, &y, &b);
			sprintf(s, "Mouse test-space to exit. x:%i y:%i b:%i event #%i  ", x, y, b, co);
			aa_puts(c, 0, 0, AA_SPECIAL, s);
			aa_flush(c);
		}
		aa_hidemouse(c);
		while (aa_getevent(c, 1) != ' ') {
			int x, y, b;
			char s[80];
			co++;
			aa_getmouse(c, &x, &y, &b);
			sprintf(s, "Hidden mouse test-space to exit. x:%i y:%i b:%i event #%i  ", x, y, b, co);
			aa_puts(c, 0, 0, AA_SPECIAL, s);
			aa_flush(c);
		}
		aa_uninitmouse(c);
	}
	p = aa_getrenderparams();
	for (i = 0; i < AA_DITHERTYPES; i++) {
		p->dither = i;
		aa_render(c, p, 0, 0, aa_scrwidth(c), aa_scrheight(c));
		aa_puts(c, 0, 0, AA_SPECIAL, aa_dithernames[i]);
		aa_flush(c);
		aa_getkey(c, 1);
	}
	for (i = 0; i < 255; i += 32) {
		p->bright = i;
		aa_render(c, p, 0, 0, aa_scrwidth(c), aa_scrheight(c));
		aa_puts(c, 0, 0, AA_SPECIAL, "Normal rendering - bright changes");
		aa_flush(c);
		aa_getkey(c, 1);
	}
	p->bright = 0;
	for (i = 0; i < 128; i += 16) {
		p->contrast = i;
		aa_render(c, p, 0, 0, aa_scrwidth(c), aa_scrheight(c));
		aa_puts(c, 0, 0, AA_SPECIAL, "Normal rendering - contrast changes");
		aa_flush(c);
		aa_getkey(c, 1);
	}
	p->contrast = 0;
	for (i = 0; i < 255; i += 32) {
		p->gamma = 1 + i / 32.0;
		aa_render(c, p, 0, 0, aa_scrwidth(c), aa_scrheight(c));
		aa_puts(c, 0, 0, AA_SPECIAL, "Normal rendering - gamma changes");
		aa_flush(c);
		aa_getkey(c, 1);
	}
	p->gamma = 1.0;
	for (i = 0; i < 255; i += 32) {
		p->randomval = i;
		aa_render(c, p, 0, 0, aa_scrwidth(c), aa_scrheight(c));
		aa_puts(c, 0, 0, AA_SPECIAL, "Normal rendering - randomval changes");
		aa_flush(c);
		aa_getkey(c, 1);
	}
	aa_close(c);
	return 0;
}
Пример #4
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;
		}
	}
}