#!/usr/bin/perl -w use strict; use Time::Local; my $N = 2; my $m = 29.530588853; my $n = "\n"; my $e = "\e["; my ($x, $y, $z, $u, $v, $w, $s, @r, @t, @q, $i, $j, $k, $l, @c, @a); my @p = ( "${e}90;40m", "${e}37;40m", "${e}30;47m", "${e}30;47m", "${e}90;40m", "${e}96;40m", "${e}30;106m", ); sub g() { return localtime $l; } sub f() { ($x, $y, $z, $u, $v, $w) = g; $l = timelocal 0, 0, 0, $k ? $u : 1, $v, $w; } sub h($$) { print $_[0] if $_[1]; } @t = (time); if( !$#ARGV ) { if( $ARGV[0] !~ /^(\d+)-(\d+)-(\d+)$/ || !defined($t[0] = eval { timelocal(0, 0, 0, $3, $2 - 1, $1 - 1900) }) ) { die "Unable to parse $ARGV[0] as YYYY-MM-DD$n"; } } for($i = 0; $i < $N; $i++) { $l = $t[$i]; ($x, $y, $z, $u, $v, $w) = g; push @r, [$w, $v, $i ? -1 : $u]; $k = 0; for(f;; f) { ($x, $y, $z, $u, $v, $k, $s) = g; last if !$s; $l -= 43200; } $t[$i] = $l; @c = @a = (); for($j = 0; $j < 6 * 7; $j++) { ($x, $y, $z, $u, $v, $w, $s, $k) = g; $k += $w * 365 + int(~-$w / 4) - int(~-$w / 100) + int(($w + 299) / 400); push @a, $k - int($k / $m) * $m; push @c, ($v - $r[$i][1] ? 0 : $u - $r[$i][2] ? 1 : 2); $l += 129600; f; } for($j = 0; $j < 41; $j++) { $c[$j] |= 4 if $a[$j] <= 15.5 && $a[$j + 1] > 15.5; push @c, 0; } push @q, [@c]; h " ", $i; printf "${e}97;40m${e}4m %04d-%02d" . (" " x 26) . "${e}0m", $r[$i][0] + 1900, $r[$i][1] + 1; push @t, $t[$i] + 3628800; } h $n, 1; for($j = 0; $j < 7; $j++) { for($i = 0; $i < $N; $i++) { h " ", $i; for($k = 0; $k < 7; $k++) { $x = $q[$i][$j * 7 + $k]; $y = $j * 7 + $k > 6 ? $q[$i][$j * 7 + $k - 7] : 0; $z = $x | $y; $z = $z - 7 ? $z : 2 | ($x - 2 && $y - 2 ? 4 : 0); h "$p[$z] ${e}0m ", 1; } } h $n, 1; if( $j < 6 ) { for($i = 0; $i < $N; $i++) { $l = $t[$i]; h " ", $i; for($s = 0; $s < 7; $s++) { ($x, $y, $z, $u) = g; printf "%s %2d ${e}0m ", $p[$q[$i][$j * 7 + $s]], $u; $l += 129600; f; } $t[$i] = $l; } h $n, 1; } }