Commit | Line | Data |
---|---|---|
03826bab FT |
1 | #!/usr/bin/perl |
2 | ||
3 | use Getopt::Long; | |
4 | use Term::ReadKey; | |
5 | ||
6 | GetOptions(\%options, 'k', 'i', 't'); | |
7 | ||
8 | if(@ARGV > 0) { | |
9 | chdir($ARGV[0]); | |
10 | } | |
11 | while($dir = <*>) { | |
12 | if(-d $dir) { | |
13 | $fl = {}; | |
14 | if(-r "$dir/nextep") { | |
15 | open NE, "$dir/nextep" || die; | |
16 | $ne = ""; | |
17 | $ne += $_ while <NE>; | |
18 | close NE; | |
19 | if($ne == 1) { | |
20 | $fl->{"first"} = 1; | |
21 | } else { | |
22 | $fl->{"act"} = 1; | |
23 | } | |
24 | $dirs{$dir} = $ne; | |
25 | if(-r "$dir/.autodl/curep" && -r "$dir/.autodl/rtinfo") { | |
26 | open DE, "$dir/.autodl/curep" || die; | |
27 | $de = ""; | |
28 | $de += $_ while <DE>; | |
29 | close DE; | |
30 | if($ne < $de) { | |
31 | $fl->{"hasmore"} = 1; | |
32 | } else { | |
33 | $fl->{"nomore"} = 1; | |
34 | } | |
35 | } | |
36 | } | |
37 | if(-r "$dir/.flags") { | |
38 | open FL, "$dir/.flags" || die; | |
39 | while(<FL>) { | |
40 | chomp; | |
41 | $fl->{$_} = 1; | |
42 | } | |
43 | close FL; | |
44 | } | |
45 | $dirs{$dir} = $fl; | |
46 | } | |
47 | } | |
48 | if(! -t STDOUT) { | |
49 | die "not on a tty"; | |
50 | } | |
51 | for (keys %dirs) { | |
52 | $cns = $options{"k"} == $dirs{$_}->{"kaka"}; | |
53 | # $cns = 0 if $dirs{$_}->{"notdone"} && !$options{"i"}; | |
54 | if($cns) { | |
55 | if($dirs{$_}->{"lp"}) { | |
56 | $nc = 31; | |
57 | } elsif($dirs{$_}->{"first"}) { | |
58 | $nc = 32; | |
59 | } elsif($dirs{$_}->{"hasmore"}) { | |
60 | $nc = 36; | |
61 | } elsif($dirs{$_}->{"nomore"}) { | |
62 | $nc = 35; | |
63 | } elsif($dirs{$_}->{"act"}) { | |
64 | $nc = 33; | |
65 | } else { | |
66 | $nc = 34; | |
67 | } | |
68 | } else { | |
69 | $nc = 34; | |
70 | } | |
71 | if($options{"t"} && ($nc == 34)) { | |
72 | delete $dirs{$_}; | |
73 | } else { | |
74 | $dirs{$_}->{"color"} = $nc; | |
75 | } | |
76 | } | |
77 | $cw = 0; | |
78 | for $d (keys %dirs) { | |
79 | $l = length $d; | |
80 | $cw = $l if $l > $cw; | |
81 | } | |
82 | $cw += 2; | |
83 | ($w, $h) = GetTerminalSize; | |
84 | $cols = int($w / $cw); | |
85 | @sorted = sort keys %dirs; | |
86 | $percol = int(@sorted / $cols) + 1; | |
87 | for($i = 0; $i < $percol; $i++) { | |
88 | for($o = 0, $x = 0; $o < $cols; $o++) { | |
89 | $n = ($o * $percol) + $i; | |
90 | last if $n >= @sorted; | |
91 | print (" " x (($cw * $o) - $x)) if $x < $cw * $o; | |
92 | $_ = $sorted[$n]; | |
93 | $x = $cw * $o; | |
94 | $nc = $dirs{$_}->{"color"}; | |
95 | print "\e[${nc}m$_\e[39m"; | |
96 | $x += length; | |
97 | } | |
98 | print "\n"; | |
99 | } |