+
+ case '\b':
+ start_time = glutGet(GLUT_ELAPSED_TIME);
+ prev_tmsec = 0;
+ anim_stop_time = 0;
+ beam_angle = 0;
+ break;
+
+ case ' ':
+ if(anim_stop_time > 0) {
+ long msec = glutGet(GLUT_ELAPSED_TIME);
+ start_time += msec - anim_stop_time;
+ prev_tmsec = msec - start_time;
+ anim_stop_time = 0;
+ } else {
+ anim_stop_time = glutGet(GLUT_ELAPSED_TIME);
+ }
+ break;
+
+ case '=':
+ beam_speed = get_seq_value("beam-speed", tmsec);
+ clear_seq_track("beam-speed");
+ set_seq_value("beam-speed", tmsec, beam_speed + ANIM_DELTA);
+ break;
+
+ case '-':
+ beam_speed = get_seq_value("beam-speed", tmsec) - ANIM_DELTA;
+ if(beam_speed < 0)
+ beam_speed = 0;
+ clear_seq_track("beam-speed");
+ set_seq_value("beam-speed", tmsec, beam_speed);
+ break;
+
+ case '\r':
+ case '\n':
+ idx = find_seq_track("beam-speed");
+ assert(idx >= 0);
+ if(get_seq_value(idx, tmsec) > 0.0) {
+ clear_seq_track(idx);
+ set_seq_value(idx, tmsec, beam_speed);
+ set_seq_value(idx, tmsec + 3000, 0);
+ orig_beam_speed = beam_speed;
+ } else {
+ clear_seq_track(idx);
+ set_seq_value(idx, tmsec, 0);
+ set_seq_value(idx, tmsec + 3000, orig_beam_speed);
+ }
+ break;
+
+ case '`':
+ dump_seq("seq_dump");
+ break;
+