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); }
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); }
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; }
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; } } }