#!/usr/bin/env perl $|++; use strict; use vars qw( @SKIP $HEAD $FOOT $DESCRIPTION ); BEGIN { $CGI::SHTML::CONFIG = "/home/tskirvin/public_html/insecure/shtml.pm"; } use CGI::SHTML; our $cgi = new CGI::SHTML; print $cgi->header(); $DESCRIPTION = ".description"; @SKIP = ( '\.cgi$', '^\.' ); $HEAD = "HEADER.html"; $FOOT = "README.html"; use vars qw( %DESC %TYPE %SIZE %LASTMOD); our @MONTH = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ); if (-r $DESCRIPTION) { open DESC, $DESCRIPTION or die "Couldn't read $DESCRIPTION: $!\n"; while () { chomp; my ($file, $desc) = split '::'; $DESC{$file} = $desc; } close DESC; } opendir( DIR, '.' ) or die "Couldn't open directory: $!\n"; my @files = readdir(DIR); closedir DIR; LOOP: foreach my $filename (@files) { chomp $filename; foreach ( $HEAD, $FOOT, $DESCRIPTION, '.' ) { next LOOP if $filename eq $_ } foreach my $test ( @SKIP ) { next LOOP if eval { $filename =~ m/$test/ } } if (-d $filename) { $TYPE{$filename} = "dir" } $SIZE{$filename} = (stat($filename))[7]; $LASTMOD{$filename} = (stat($filename))[9]; } if ($HEAD && -r $HEAD) { printfile($HEAD) } print < Name Last Modified Size Description EOL foreach (sort keys %SIZE) { print " \n"; print $TYPE{$_} eq "dir" ? " $_/\n " : " $_\n"; print " ", printlastmod($LASTMOD{$_}) || "", "\n"; print " ", printsize($SIZE{$_}), || "", "\n"; print " ", $DESC{$_} || "-", "\n"; print " \n"; } print < EOL if ($FOOT && -r $FOOT) { printfile($FOOT) } exit 0; sub printfile { my $file = shift; return 0 unless (-r $file); my @text; open(FILE, $file) or (warn "Couldn't open $file: $!\n" && return 0); @text = ; close FILE; print $cgi->parse_shtml(@text); 1; } sub printlastmod { my $lastmod = shift; return "" unless $lastmod; sprintf( "%02d-%3s-%4d %02d:%02d:%02d", (localtime($lastmod))[3], @MONTH[(localtime($lastmod))[4]], (localtime($lastmod))[5] + 1900, (localtime($lastmod))[2], (localtime($lastmod))[1], (localtime($lastmod))[0] ); } sub printsize { my $size = shift; return "" unless $size; if ( $size <= 1048576 ) { sprintf("%4.1fk", $size / 1024 ) } elsif ( $size <= 1048576 * 1024 ) { sprintf("%4.1fM", $size / 1024 / 1024 ) } }