static thing_th *open_sub_cons(FILE *src, text_buffer *tb, char opener) { switch(opener) { case '{': return Cons(Atom("grid"), read_expressions(src, tb)); case '[': return Cons(Atom("list"), read_expressions(src, tb)); default: return read_expressions(src, tb); } }
/* ARGSUSED1 */ static void Key ( unsigned char key, int x, int y ) { char title[512]; switch ( key ) { case 27 : case 'q' : case 'Q' : exit (0) ; case 'r' : case 'R' : printf ("Rereading expression file\n"); read_expressions(); e = 0; /* reset the expression count variable */ glutPostRedisplay(); break; case 'a' : printf ("increment muscle: %s\n", face->muscle[m]->name ) ; /* set the muscle activation */ face->muscle[m]->mstat += 0.1 ; activate_muscle ( face, face->muscle[m]->head, face->muscle[m]->tail, face->muscle[m]->fs, face->muscle[m]->fe, face->muscle[m]->zone, 0.1 ) ; glutPostRedisplay(); break; case 'A' : printf ("decrement muscle: %s\n", face->muscle[m]->name ) ; face->muscle[m]->mstat -= 0.1 ; activate_muscle ( face, face->muscle[m]->head, face->muscle[m]->tail, face->muscle[m]->fs, face->muscle[m]->fe, face->muscle[m]->zone, -0.1 ) ; glutPostRedisplay(); break; case 'b' : DRAW_MODE++ ; if ( DRAW_MODE >= 3 ) DRAW_MODE = 0 ; printf ("draw mode: %d\n", DRAW_MODE ) ; glutPostRedisplay(); break; case 'c' : face_reset ( face ) ; glutPostRedisplay(); break; case 'n' : m++ ; if ( m >= face->nmuscles ) m = 0 ; sprintf(title, "geoface (%s)", face->muscle[m]->name); glutSetWindowTitle(title); break; case 'e' : if (face->expression) { face_reset ( face ) ; expressions ( face, e ) ; e++ ; if ( e >= face->nexpressions ) e = 0 ; glutPostRedisplay(); } break; case 'h' : print_mesg(); } }
static thing_th *read_subcons(thing_th *first, FILE *src, text_buffer *tb) { return Cons(first, read_expressions(src, tb)); }
static thing_th *read_construct(FILE *src, text_buffer *tb, const char *constructor) { return Cons(lookup_txt(constructor), read_expressions(src, tb)); }
static thing_th *read_then_expand_if_necessary(FILE *src, text_buffer *tb) { return reg_to_parent(expand_if_necessary(read_expressions(src, tb))); }