]> bicyclesonthemoon.info Git - ott/bsta/commitdiff
multiple timers; improve ong script main v1.2.15
authorb <rowerynaksiezycu@gmail.com>
Mon, 23 Mar 2026 22:08:13 +0000 (22:08 +0000)
committerb <rowerynaksiezycu@gmail.com>
Mon, 23 Mar 2026 22:08:13 +0000 (22:08 +0000)
bsta_lib.1.pm
ong.1.pl
timer.js

index 8fdb86164075604b90b4509ade5d471905e05cc0..a7820b09b34cb5692dfc3c9ba51ce11d033d1751 100644 (file)
@@ -699,15 +699,26 @@ sub make_timer {
        }
        
        my $tc = 40271; # 11:11:11
+       my $tc_9 = $tc *  9; # 99:99:99
+       my $tc_f = $tc * 15; # FF:FF:FF
+       my $tc_y = $tc * 34; # YY:YY:YY
+       my $tc_z = $tc * 35; # ZZ:ZZ:ZZ
        my $max_digit;
+       my $extra_timers = 0;
        
-       if ($full_timer <= $tc * 9) { #99:99:99
+       while ($timer > $tc_z) {
+               $extra_timers += 1;
+               $timer -= $tc_z;
+               $full_timer -= $tc_z;
+       }
+       
+       if ($full_timer <= $tc_9) { # 99:99:99
                $max_digit = 9;
        }
-       elsif ($full_timer <= $tc * 15) { # FF:FF:FF
+       elsif ($full_timer <= $tc_f) { # FF:FF:FF
                $max_digit = 15; # F
        }
-       elsif ($full_timer > $tc * 34) { # YY:YY:YY
+       elsif ($full_timer > $tc_y) { # YY:YY:YY
                $max_digit = 35; # Z
        }
        else {
@@ -741,7 +752,8 @@ sub make_timer {
        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])
+               make_timer_digit($digit[1]).make_timer_digit($digit[0]),
+               $extra_timers
        );
 }
 
@@ -1007,7 +1019,7 @@ sub print_viewer_page {
        my $timer_color_m = (($timer_unlocked >= 2) || ($ong_state >= STATE->{'ready'})) ? 'br' : 'ni';
        my $timer_color_s = (($timer_unlocked >= 3) || ($ong_state >= STATE->{'ready'})) ? 'br' : 'ni';
        
-       (my $timer_h, my $timer_m, my $timer_s) = make_timer(
+       (my $timer_h, my $timer_m, my $timer_s, my $timer_x) = make_timer(
                $timer, $full_timer, $frame, $ong_state
        );
        
@@ -1410,11 +1422,18 @@ sub print_viewer_page {
        print $fh '    <div id="command">'."\n";
        
        if ($show_timer) {
-               print $fh '     <span id="timer">';
-               print $fh '[<span id="ongh" class="hv '.$timer_color_h.'">'.$timer_h.'</span>';
-               print $fh ':<span id="ongm" class="hv '.$timer_color_m.'">'.$timer_m.'</span>';
-               print $fh ':<span id="ongs" class="hv '.$timer_color_s.'">'.$timer_s.'</span>]';
-               print $fh '</span><br>'."\n";
+               while ($timer_x >= 0) {
+                       my $timer_n = ($timer_x > 0) ? $timer_x : '';
+                       print $fh '     <span id="timer'.$timer_n.'" class="timer">';
+                       print $fh '[<span id="ongh'.$timer_n.'" class="hv '.$timer_color_h.'">'.$timer_h.'</span>';
+                       print $fh ':<span id="ongm'.$timer_n.'" class="hv '.$timer_color_m.'">'.$timer_m.'</span>';
+                       print $fh ':<span id="ongs'.$timer_n.'" class="hv '.$timer_color_s.'">'.$timer_s.'</span>]';
+                       print $fh '</span><br>'."\n";
+                       $timer_h = '--';
+                       $timer_m = '--';
+                       $timer_s = '--';
+                       $timer_x -= 1;
+               }
        }
        print $fh '     &gt;';
        if ($show_command_link) {
index 31867b29cfb8960368475e6e762f4eee1b6f6a46..2855d687e310dc6042b74cf556074578ccb5d215 100644 (file)
--- a/ong.1.pl
+++ b/ong.1.pl
@@ -111,6 +111,12 @@ $timer        = int($settings{'dynamicongtime'});
 $last         = int($settings{'last'});
 $frame        = int($state   {'last'});
 
+if ($frame >= $last) {
+       print "END\n\n";
+       close ($fh);
+       exit;
+}
+
 if ($ongstate == STATE->{'ready'}) {
        $frame += 1;
        print 'next frame: '.$frame."\n";
@@ -119,12 +125,12 @@ else {
        print 'not ready'."\n";
 }
 
-if (($timer > 0) && ($frame < $last)) {
-       $timer = int($timer / ($last - $frame));
-}
-else {
+if ($timer <= 0) {
        $timer = 1;
 }
+elsif ($frame < $last) {
+       $timer = int($timer / ($last - $frame));
+}
 if ($static_timer > $timer) {
        $timer = $static_timer;
 }
index 11b2ca0128f44e54a970db24ee7a69f1d6507093..86fad4203de7e343429c8dda3e565632bfc00904 100644 (file)
--- a/timer.js
+++ b/timer.js
@@ -41,37 +41,70 @@ function i2d (i) {
 }
 
 window.onload = function () {
-       var e_h;
-       var e_m;
-       var e_s;
-       var h;
-       var m;
-       var s;
+       var e_h = [];
+       var e_m = [];
+       var e_s = [];
+       var h = [];
+       var m = [];
+       var s = [];
        var hms;
        var digits;
        var countdown;
-       var timer;
+       var timer = [];
+       var n = -1;
+       var x = -1;
        var base = [10, 6, 10, 6, 10, 10];
        
-       e_h = document.getElementById("ongh");
-       e_m = document.getElementById("ongm");
-       e_s = document.getElementById("ongs");
-       
-       if (e_h == null || e_m == null || e_s == null) {
-               // window.alert("NUL");
-               return;
+       for (var i=0; ; ++i) {
+               var ind = i;
+               if (ind == 0)
+                       ind = '';
+               e_h[i] = document.getElementById("ongh"+ind);
+               e_m[i] = document.getElementById("ongm"+ind);
+               e_s[i] = document.getElementById("ongs"+ind);
+               
+               if (e_h[i] == null || e_m[i] == null || e_s[i] == null) {
+                       // window.alert("NUL "+i);
+                       break;
+               }
+               
+               h[i] = e_h[i].innerHTML;
+               m[i] = e_m[i].innerHTML;
+               s[i] = e_s[i].innerHTML;
+               
+               if (h[i].length != 2 || m[i].length != 2 || s[i].length != 2) {
+                       // window.alert("LENGTH "+i);
+                       break;
+               }
+               
+               timer[i] = document.getElementById("timer"+ind);
+               timer[i].onclick = function () {
+                       enabled = !enabled;
+                       if (!(enabled && valid))
+                               return;
+                       for (var j=x; j > 0; --j) {
+                               if (j > n) {
+                                       var block = timer[j].parentNode;
+                                       var br = timer[j].nextSibling;
+                                       block.removeChild(timer[j]);
+                                       block.removeChild(br);
+                                       --x;
+                                       continue;
+                               }
+                               e_h[j].innerHTML = h[j];
+                               e_m[j].innerHTML = m[j];
+                               e_s[j].innerHTML = s[j];
+                       }
+               };
+               n = i;
+               x = n;
        }
-       
-       h = e_h.innerHTML;
-       m = e_m.innerHTML;
-       s = e_s.innerHTML;
-       
-       if (h.length != 2 || m.length != 2 || s.length != 2) {
-               // window.alert("LENGTH");
+       if (n < 0) {
+               // window.alert("NO");
                return;
        }
        
-       hms = h + ":" + m + ":" + s;
+       hms = h[n] + ":" + m[n] + ":" + s[n];
        
        if (
                hms == "00:00:NG" ||
@@ -83,22 +116,12 @@ window.onload = function () {
        }
        
        digits = [];
-       digits[0] = d2i(s[1]);
-       digits[1] = d2i(s[0]);
-       digits[2] = d2i(m[1]);
-       digits[3] = d2i(m[0]);
-       digits[4] = d2i(h[1]);
-       digits[5] = d2i(h[0]);
-       
-       timer = document.getElementById("timer");
-       timer.onclick = function () {
-               enabled = !enabled;
-               if (enabled && valid) {
-                       e_h.innerHTML = h;
-                       e_m.innerHTML = m;
-                       e_s.innerHTML = s;
-               }
-       }
+       digits[0] = d2i(s[n][1]);
+       digits[1] = d2i(s[n][0]);
+       digits[2] = d2i(m[n][1]);
+       digits[3] = d2i(m[n][0]);
+       digits[4] = d2i(h[n][1]);
+       digits[5] = d2i(h[n][0]);
        
        countdown = setInterval (function() {
                var stop = true;
@@ -125,21 +148,42 @@ window.onload = function () {
                        digits[2] == 0 && digits[3] == 0 &&
                        digits[4] == 0 && digits[5] == 0
                ) {
-                       h = "00";
-                       m = "00";
-                       s = "NG";
-                       // window.alert("ONG");
-                       clearInterval(countdown);
+                       if (n > 0) {
+                               --n;
+                               h[n] = 'ZZ';
+                               m[n] = 'ZZ';
+                               s[n] = 'ZZ';
+                               digits[0] = d2i(s[n][1]);
+                               digits[1] = d2i(s[n][0]);
+                               digits[2] = d2i(m[n][1]);
+                               digits[3] = d2i(m[n][0]);
+                               digits[4] = d2i(h[n][1]);
+                               digits[5] = d2i(h[n][0]);
+                       }
+                       else {
+                               h[n] = "00";
+                               m[n] = "00";
+                               s[n] = "NG";
+                               // window.alert("ONG");
+                               clearInterval(countdown);
+                       }
                }
                else {
-                       h = i2d(digits[5]) + i2d(digits[4]);
-                       m = i2d(digits[3]) + i2d(digits[2]);
-                       s = i2d(digits[1]) + i2d(digits[0]);
+                       h[n] = i2d(digits[5]) + i2d(digits[4]);
+                       m[n] = i2d(digits[3]) + i2d(digits[2]);
+                       s[n] = i2d(digits[1]) + i2d(digits[0]);
                }
                if (enabled) {
-                       e_h.innerHTML = h;
-                       e_m.innerHTML = m;
-                       e_s.innerHTML = s;
+                       while (x > n) {
+                               var block = timer[x].parentNode;
+                               var br = timer[x].nextSibling;
+                               block.removeChild(timer[x]);
+                               block.removeChild(br);
+                               --x;
+                       }
+                       e_h[n].innerHTML = h[n];
+                       e_m[n].innerHTML = m[n];
+                       e_s[n].innerHTML = s[n];
                }
                valid = true;
        }, 1000);