#!/usr/bin/perl #howmx.pl 2006-06-07 by i16 #ActivePerl and PAR version 2006-06-10 - 2007-01-04 -- by i16 $ROOT=$ARGV[1]; if(!$ROOT) { $ROOT=$ENV{'HOWM'};} if(!$ROOT) { $ROOT="C:\\Documents and Settings\\All Users\\Documents\\howm";} #### use POSIX; use Time::Local; $now=time; ($ss,$mm,$hh,$d,$m,$y)=localtime($now); $date=sprintf("%04d-%02d-%02d",$y+1900,$m+1,$d); open(STDOUT,">".$ARGV[2]); ## no redirect if no ARGV2 $fnames=0; &findfile($ROOT); $argv0=$ARGV[0]; if($argv0=~/a/) { foreach $f (@fname) { $dn=&dosname($f); open(F,"<$f"); while($t=) { print "$dn(1): $t" if $t =~ /^=/; } close(F); } } if($argv0=~/m/) { $evn=0;$fun=0;$qqn=0;$okn=0; foreach $f (@fname) { open(F,"<$f"); while() { chomp();s/\r$//; if(/.*\[(\d\d\d\d)\-(\d\d)\-(\d\d)\](\+|\-|\@|\!|\.)(\d+)?(\s*)(\{.*?\})?(.*)$/){ $y=$1;$m=$2;$d=$3;$a=$4;$x=$5;$ss=$6;$w=$7;$b=$8; $z="[$y-$m-$d]$a$x$ss$w$b"; $u=timelocal(0,0,0,$d,$m-1,$y-1900); $diffd=$now-$u; $diff2=$diffd; $e=sprintf(">%6d %s\n",floor($diffd/86400),$z); if($a eq "@") { push @fu,$e; next;} elsif($a eq "!") { if($u>$now){ push @fu,$e; next;} push @qq,$w."~".$e; next; } elsif($a eq ".") { $ok[$okn++]=$e; next;} elsif($a eq "+") { ## skip if $u<$now; $x=7 if !$x; $diff2/=$x; } elsif($a eq "-") { ## skip if $u<$now-86400; $x=1 if !$x; $diff2/=$x; $diff2=-$diff2; } $ev[$evn++]=$w." ".sprintf("%16d",$diff2+86400*36500).$e; } } close(F); } if(open(T,"<$ROOT/0000-00-00-000000.howm")) { @lll=; close(T); } else { @lll=split(/:/,"= <<< %menu%\n:%schedule\n:%todo\n:##end"); } foreach$ll(@lll) { if($ll=~/^\%schedule/) { print foreach (sort @fu); } elsif($ll=~/^\%todo/) { $h=""; foreach $qqq (reverse sort @qq) { $qqq=~/^(\{.*?\})?~(.*)/; if($1) { print "$1\n" if $1 ne $h; $h=$1; } print "$2\n"; } print"\n"; $h=""; foreach $evv (sort @ev) { $evv=~/^(\{.*?\})?[\d\- ]+(.*)$/; if($1) { print "$1\n" if $1 ne $h; $h=$1; } print "$2\n"; } print"\n"; print foreach (sort @ok); } else { print $ll;} } } sub dosname { my($f)=@_; ## NOOP on Active Perl version ##$f=~s|^$ROOT/||; ##$f=~s|/|\\|g; return $f; } sub findfile { my($path)=@_; my @a; my $name, $i, $f; ##print "$path\n"; opendir(DIR,$path); for($i=0;defined($name=readdir(DIR));$i++) {$a[$i]=$name;} closedir(DIR); foreach $name (@a) { next if $name=~/^\.\.?$/; next if $name=~/\.(exe|gif|jpg|jpeg|png|exe.bk)$/i; $f="$path/$name"; if(-f $f) {$fname[$fnames++]=$f;} elsif(-d $f) {findfile($f);} } }