+sub make_timer_digit {
+ (my $i) = @_;
+
+ if ($i < 0) {
+ return '-';
+ }
+ elsif ($i < 10) {
+ return chr($i + ord('0'));
+ }
+ elsif ($i < 36) {
+ return chr($i - 10 + ord('A'));
+ }
+ else {
+ return '-';
+ }
+}
+
+sub make_timer {
+ (my $timer, my $full_timer, my $frame, my $ong_state) = @_;
+
+ if (
+ ($timer > 0) ||
+ (($timer >= 0) && ($frame == 0))
+ ) {}
+ elsif (($timer >= -15) && ($ong_state >= STATE->{'ready'})) {
+ return '00','00','NG';
+ }
+ else {
+ return 'EE','EE','EE';
+ }
+
+ my $tc = 40271; # 11:11:11
+ my $max_digit;
+
+ if ($full_timer <= $tc * 9) { #99:99:99
+ $max_digit = 9;
+ }
+ elsif ($full_timer <= $tc * 15) { # FF:FF:FF
+ $max_digit = 15; # F
+ }
+ elsif ($full_timer > $tc * 34) { # YY:YY:YY
+ $max_digit = 35; # Z
+ }
+ else {
+ $max_digit = int(($full_timer - 1) / $tc + 1); # A-Y
+ }
+
+ my $saturation = $tc * $max_digit;
+
+ if ($timer > $saturation) {
+ return '--', '--', '--';
+ }
+
+ my @base = (10, 6, 10, 6, 10, 10);
+ my @digit;
+
+ for my $i (0..5) {
+ $saturation -= $max_digit;
+ if ($timer >= $saturation) {
+ $digit[$i] = $timer - $saturation;
+ if ($digit[$i] > $max_digit) {
+ $digit[$i] = $max_digit;
+ }
+ }
+ else {
+ $digit[$i] = $timer % $base[$i];
+ $timer = int($timer / $base[$i]);
+ $saturation = int($saturation / $base[$i]);
+ }
+ }
+
+ return (
+ make_timer_digit($digit[5]).make_timer_digit($digit[4]),
+ make_timer_digit($digit[3]).make_timer_digit($digit[2]),
+ make_timer_digit($digit[1]).make_timer_digit($digit[0])
+ );
+}
+