remove autogenerated files
rename scripts/dirlist.in to scripts/dirlist.cgi.in
This commit is contained in:
@@ -1,3 +1,11 @@
|
|||||||
|
2001-11-21 Fumitoshi UKAI <ukai@debian.or.jp>
|
||||||
|
|
||||||
|
* XMakefile: update scripts/dirlist.cgi generation
|
||||||
|
* scripts/multipart/multipart.cgi: removed
|
||||||
|
* scripts/w3mman/w3mman scripts/w3mman/w3mman2html.cgi: removed
|
||||||
|
* scripts/dirlist.in scripts/dirlist.cgi: removed
|
||||||
|
* scripts/dirlist.cgi.in: added
|
||||||
|
|
||||||
2001-11-21 Fumitoshi UKAI <ukai@debian.or.jp>
|
2001-11-21 Fumitoshi UKAI <ukai@debian.or.jp>
|
||||||
|
|
||||||
* add rcsids
|
* add rcsids
|
||||||
|
|||||||
7
configure
vendored
7
configure
vendored
@@ -1,5 +1,5 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# $Id: configure,v 1.7 2001/11/20 17:49:23 ukai Exp $
|
# $Id: configure,v 1.8 2001/11/21 03:58:32 ukai Exp $
|
||||||
# Configuration.
|
# Configuration.
|
||||||
#
|
#
|
||||||
|
|
||||||
@@ -1927,13 +1927,14 @@ END_OF_CONFIG_H
|
|||||||
echo ''
|
echo ''
|
||||||
echo 'config.h is created. See config.h for further configuration.'
|
echo 'config.h is created. See config.h for further configuration.'
|
||||||
echo ''
|
echo ''
|
||||||
echo 'Generating dirlist.cgi'
|
echo 'Generating scripts/dirlist.cgi'
|
||||||
|
|
||||||
perl=`./which perl`
|
perl=`./which perl`
|
||||||
if [ `expr "$perl" : 'not found'` != 0 ]; then
|
if [ `expr "$perl" : 'not found'` != 0 ]; then
|
||||||
perl=/usr/local/bin/perl
|
perl=/usr/local/bin/perl
|
||||||
fi
|
fi
|
||||||
sed -e "s;@PERL@;$perl;" \
|
sed -e "s;@PERL@;$perl;" \
|
||||||
scripts/dirlist.in > scripts/dirlist.cgi
|
scripts/dirlist.cgi.in > scripts/dirlist.cgi
|
||||||
|
chmod +x scripts/dirlist.cgi
|
||||||
|
|
||||||
echo 'Configuration done. Just type "make".'
|
echo 'Configuration done. Just type "make".'
|
||||||
|
|||||||
@@ -1,532 +0,0 @@
|
|||||||
#!/usr/bin/perl
|
|
||||||
#
|
|
||||||
# Directory list CGI by Hironori Sakamoto (hsaka@mth.biglobe.ne.jp)
|
|
||||||
#
|
|
||||||
|
|
||||||
if ( $^O =~ /^(ms)?(dos|win(32|nt)?)/i ) {
|
|
||||||
$WIN32 = 1;
|
|
||||||
$CYGPATH = 1;
|
|
||||||
}
|
|
||||||
elsif ( $^O =~ /cygwin|os2/i ) {
|
|
||||||
$WIN32 = 1;
|
|
||||||
$CYGPATH = 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$WIN32 = 0;
|
|
||||||
$CYGPATH = 0;
|
|
||||||
}
|
|
||||||
$RC_DIR = '~/.w3m/';
|
|
||||||
|
|
||||||
$RC_DIR =~ s@^~/@$ENV{'HOME'}/@;
|
|
||||||
if ($CYGPATH) {
|
|
||||||
$RC_DIR = &cygwin_pathconv("$RC_DIR");
|
|
||||||
}
|
|
||||||
$CONFIG = "$RC_DIR/dirlist";
|
|
||||||
$CGI = $ENV{'SCRIPT_NAME'} || $0;
|
|
||||||
$CGI = "file://" . &file_encode("$CGI");
|
|
||||||
|
|
||||||
$AFMT = '<a href="%s"><nobr>%s</nobr></a>';
|
|
||||||
$NOW = time();
|
|
||||||
|
|
||||||
@OPT = &init_option($CONFIG);
|
|
||||||
|
|
||||||
$query = $ENV{'QUERY_STRING'};
|
|
||||||
$cmd = '';
|
|
||||||
$cgi = 0;
|
|
||||||
if ($query eq '') {
|
|
||||||
$_ = `pwd`;
|
|
||||||
chop;
|
|
||||||
s/\r$//;
|
|
||||||
$dir = $_;
|
|
||||||
$cgi = 0;
|
|
||||||
} elsif ($query =~ /^(opt\d+|dir|cmd)=/) {
|
|
||||||
foreach(split(/\&/, $query)) {
|
|
||||||
if (s/^dir=//) {
|
|
||||||
$dir = &form_decode($_);
|
|
||||||
} elsif (s/^opt(\d+)=//) {
|
|
||||||
$OPT[$1] = $_;
|
|
||||||
} elsif (s/^cmd=//) {
|
|
||||||
$cmd = $_;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$cgi = 1;
|
|
||||||
} else {
|
|
||||||
$dir = $query;
|
|
||||||
if (($dir !~ m@^/@) &&
|
|
||||||
($WIN32 && $dir !~ /^[a-z]:/i)) {
|
|
||||||
$_ = `pwd`;
|
|
||||||
chop;
|
|
||||||
s/\r$//;
|
|
||||||
$dir = "$_/$dir";
|
|
||||||
}
|
|
||||||
$cgi = -1;
|
|
||||||
}
|
|
||||||
if ($dir !~ m@/$@) {
|
|
||||||
$dir .= '/';
|
|
||||||
}
|
|
||||||
if ($dir =~ m@^/@ && $CYGPATH) {
|
|
||||||
$dir = &cygwin_pathconv("$dir");
|
|
||||||
}
|
|
||||||
$ROOT = '';
|
|
||||||
if ($WIN32) {
|
|
||||||
if (($dir =~ s@^//[^/]+@@) || ($dir =~ s@^[a-z]:@@i)) {
|
|
||||||
$ROOT = $&;
|
|
||||||
}
|
|
||||||
if ($CYGPATH) {
|
|
||||||
$ROOT = &cygwin_pathconv("$ROOT");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($cgi) {
|
|
||||||
$dir = &cleanup($dir);
|
|
||||||
}
|
|
||||||
|
|
||||||
$TYPE = $OPT[$OPT_TYPE];
|
|
||||||
$FORMAT = $OPT[$OPT_FORMAT];
|
|
||||||
$SORT = $OPT[$OPT_SORT];
|
|
||||||
if ($cmd) {
|
|
||||||
&update_option($CONFIG);
|
|
||||||
}
|
|
||||||
|
|
||||||
$qdir = "$ROOT" . &html_quote("$dir");
|
|
||||||
$edir = "$ROOT" . &file_encode("$dir");
|
|
||||||
if (! opendir(DIR, "$ROOT$dir")) {
|
|
||||||
print <<EOF;
|
|
||||||
Content-Type: text/html
|
|
||||||
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>Directory list of $qdir</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<b>$qdir</b>: $! !
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
EOF
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
# ($cgi > 0) && print <<EOF;
|
|
||||||
# w3m-control: DELETE_PREVBUF
|
|
||||||
# EOF
|
|
||||||
print <<EOF;
|
|
||||||
Content-Type: text/html
|
|
||||||
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>Directory list of $qdir</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<h1>Directory list of $qdir</h1>
|
|
||||||
EOF
|
|
||||||
&print_form($edir, @OPT);
|
|
||||||
print <<EOF;
|
|
||||||
<hr>
|
|
||||||
EOF
|
|
||||||
$dir =~ s@/$@@;
|
|
||||||
@sdirs = split('/', $dir);
|
|
||||||
$_ = $sdirs[0];
|
|
||||||
if ($_ eq '') {
|
|
||||||
$_ = '/';
|
|
||||||
}
|
|
||||||
if ($TYPE eq $TYPE_TREE) {
|
|
||||||
print <<EOF;
|
|
||||||
<table hborder width="640">
|
|
||||||
<tr valign=top><td width="160">
|
|
||||||
<pre>
|
|
||||||
EOF
|
|
||||||
$q = "$ROOT". &html_quote("$_");
|
|
||||||
$e = "$ROOT" . &file_encode("$_");
|
|
||||||
if ($dir =~ m@^$@) {
|
|
||||||
$n = "\" name=\"current";
|
|
||||||
} else {
|
|
||||||
$n = '';
|
|
||||||
}
|
|
||||||
printf("$AFMT\n", "$e$n", "<b>$q</b>");
|
|
||||||
$N = 0;
|
|
||||||
$SKIPLINE = "";
|
|
||||||
|
|
||||||
&left_dir('', @sdirs);
|
|
||||||
|
|
||||||
print <<EOF;
|
|
||||||
</pre>
|
|
||||||
</td><td width="400">
|
|
||||||
<pre>$SKIPLINE
|
|
||||||
EOF
|
|
||||||
} else {
|
|
||||||
print <<EOF;
|
|
||||||
<pre>
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
&right_dir($dir);
|
|
||||||
|
|
||||||
if ($TYPE eq $TYPE_TREE) {
|
|
||||||
print <<EOF;
|
|
||||||
</pre>
|
|
||||||
</td></tr>
|
|
||||||
</table>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
EOF
|
|
||||||
} else {
|
|
||||||
print <<EOF;
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
sub left_dir {
|
|
||||||
local($pre, $dir, @sdirs) = @_;
|
|
||||||
local($ok) = (@sdirs == 0);
|
|
||||||
local(@cdirs) = ();
|
|
||||||
local($_, $dir0, $d, $qdir, $q, $edir, $e);
|
|
||||||
|
|
||||||
$dir0 = "$dir/";
|
|
||||||
$dir = "$dir0";
|
|
||||||
opendir(DIR, "$ROOT$dir") || return;
|
|
||||||
|
|
||||||
foreach(sort readdir(DIR)) {
|
|
||||||
-d "$ROOT$dir$_" || next;
|
|
||||||
/^\.$/ && next;
|
|
||||||
/^\.\.$/ && next;
|
|
||||||
push(@cdirs, $_);
|
|
||||||
}
|
|
||||||
closedir(DIR);
|
|
||||||
|
|
||||||
$qdir = "$ROOT" . &html_quote($dir);
|
|
||||||
$edir = "$ROOT" . &file_encode($dir);
|
|
||||||
while(@cdirs) {
|
|
||||||
$_ = shift @cdirs;
|
|
||||||
$q = &html_quote($_);
|
|
||||||
$e = &file_encode($_);
|
|
||||||
$N++;
|
|
||||||
if (!$ok && $_ eq $sdirs[0]) {
|
|
||||||
$d = $dir0 . shift @sdirs;
|
|
||||||
if (!@sdirs) {
|
|
||||||
$n = "\" name=\"current";
|
|
||||||
$SKIPLINE = "\n" x $N;
|
|
||||||
} else {
|
|
||||||
$n = '';
|
|
||||||
}
|
|
||||||
printf("${pre}o-$AFMT\n", "$edir$e$n", "<b>$q</b>");
|
|
||||||
&left_dir(@cdirs ? "$pre| " : "$pre ", $d, @sdirs);
|
|
||||||
$ok = 1;
|
|
||||||
} else {
|
|
||||||
printf("${pre}+-$AFMT\n", "$edir$e", $q);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub right_dir {
|
|
||||||
local($dir) = @_;
|
|
||||||
local(@list);
|
|
||||||
local($_, $qdir, $q, $edir, $e, $f, $max, @d, $type, $u, $g);
|
|
||||||
local($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
|
|
||||||
$atime,$mtime,$ctime,$blksize,$blocks);
|
|
||||||
local(%sizes, %ctimes, %prints);
|
|
||||||
|
|
||||||
$dir = "$dir/";
|
|
||||||
opendir(DIR, "$ROOT$dir") || return;
|
|
||||||
|
|
||||||
$qdir = "$ROOT" . &html_quote($dir);
|
|
||||||
$edir = "$ROOT" . &file_encode($dir);
|
|
||||||
if ($TYPE eq $TYPE_TREE) {
|
|
||||||
print "<b>$qdir</b>\n";
|
|
||||||
}
|
|
||||||
@list = ();
|
|
||||||
$max = 0;
|
|
||||||
foreach(readdir(DIR)) {
|
|
||||||
/^\.$/ && next;
|
|
||||||
# if ($TYPE eq $TYPE_TREE) {
|
|
||||||
# /^\.\.$/ && next;
|
|
||||||
# }
|
|
||||||
$f = "$ROOT$dir$_";
|
|
||||||
(($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
|
|
||||||
$atime,$mtime,$ctime,$blksize,$blocks) = lstat($f)) || next;
|
|
||||||
push(@list, $_);
|
|
||||||
$sizes{$_} = $size;
|
|
||||||
$ctimes{$_} = $ctime;
|
|
||||||
|
|
||||||
if ($FORMAT eq $FORMAT_COLUMN) {
|
|
||||||
if (length($_) > $max) {
|
|
||||||
$max = length($_);
|
|
||||||
}
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
$type = &utype($mode);
|
|
||||||
if ($FORMAT eq $FORMAT_SHORT) {
|
|
||||||
$prints{$_} = sprintf("%-6s ", "[$type]");
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
if ($type =~ /^[CB]/) {
|
|
||||||
$size = sprintf("%3u, %3u", ($rdev >> 8) & 0xff, $rdev & 0xffff00ff);
|
|
||||||
}
|
|
||||||
if ($FORMAT eq $FORMAT_LONG) {
|
|
||||||
$u = $USER{$uid} || ($USER{$uid} = getpwuid($uid) || $uid);
|
|
||||||
$g = $GROUP{$gid} || ($GROUP{$gid} = getgrgid($gid) || $gid);
|
|
||||||
$prints{$_} = sprintf( "%s %-8s %-8s %8s %s ",
|
|
||||||
&umode($mode), $u, $g, $size, &utime($ctime));
|
|
||||||
# } elsif ($FORMAT eq $FORMAT_STANDARD) {
|
|
||||||
} else {
|
|
||||||
$prints{$_} = sprintf("%-6s %8s %s ", "[$type]", $size, &utime($ctime));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
closedir(DIR);
|
|
||||||
if ($SORT eq $SORT_SIZE) {
|
|
||||||
@list = sort { $sizes{$b} <=> $sizes{$a} || $a <=> $b } @list;
|
|
||||||
} elsif ($SORT eq $SORT_TIME) {
|
|
||||||
@list = sort { $ctimes{$b} <=> $ctimes{$a} || $a <=> $b } @list;
|
|
||||||
} else {
|
|
||||||
@list = sort @list;
|
|
||||||
}
|
|
||||||
if ($FORMAT eq $FORMAT_COLUMN) {
|
|
||||||
local($COLS, $l, $nr, $n);
|
|
||||||
if ($TYPE eq $TYPE_TREE) {
|
|
||||||
$COLS = 60;
|
|
||||||
} else {
|
|
||||||
$COLS = 80;
|
|
||||||
}
|
|
||||||
$l = int($COLS / ($max + 2)) || 1;
|
|
||||||
$nr = int($#list / $l + 1);
|
|
||||||
$n = 0;
|
|
||||||
print "<table>\n<tr valign=top>";
|
|
||||||
foreach(@list) {
|
|
||||||
$f = "$ROOT$dir$_";
|
|
||||||
$q = &html_quote($_);
|
|
||||||
$e = &file_encode($_);
|
|
||||||
if ($n % $nr == 0) {
|
|
||||||
print "<td>";
|
|
||||||
}
|
|
||||||
if (-d $f) {
|
|
||||||
printf($AFMT, "$edir$e", "$q/");
|
|
||||||
} else {
|
|
||||||
printf($AFMT, "$edir$e", $q);
|
|
||||||
}
|
|
||||||
$n++;
|
|
||||||
if ($n % $nr == 0) {
|
|
||||||
print "</td>\n";
|
|
||||||
} else {
|
|
||||||
print "<br>\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
print "</tr></table>\n";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
foreach(@list) {
|
|
||||||
$f = "$ROOT$dir$_";
|
|
||||||
$q = &html_quote($_);
|
|
||||||
$e = &file_encode($_);
|
|
||||||
print $prints{$_};
|
|
||||||
if (-d $f) {
|
|
||||||
printf($AFMT, "$edir$e", "$q/");
|
|
||||||
} else {
|
|
||||||
printf($AFMT, "$edir$e", $q);
|
|
||||||
}
|
|
||||||
if (-l $f) {
|
|
||||||
print " -> ", &html_quote(readlink($f));
|
|
||||||
}
|
|
||||||
print "\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub init_option {
|
|
||||||
local($config) = @_;
|
|
||||||
$OPT_TYPE = 0;
|
|
||||||
$OPT_FORMAT = 1;
|
|
||||||
$OPT_SORT = 2;
|
|
||||||
$TYPE_TREE = 't';
|
|
||||||
$TYPE_STANDARD = 'd';
|
|
||||||
$FORMAT_SHORT = 's';
|
|
||||||
$FORMAT_STANDARD = 'd';
|
|
||||||
$FORMAT_LONG = 'l';
|
|
||||||
$FORMAT_COLUMN = 'c';
|
|
||||||
$SORT_NAME = 'n';
|
|
||||||
$SORT_SIZE = 's';
|
|
||||||
$SORT_TIME = 't';
|
|
||||||
local(@opt) = ($TYPE_TREE, $FORMAT_STANDARD, $SORT_NAME);
|
|
||||||
local($_);
|
|
||||||
|
|
||||||
open(CONFIG, "< $config") || return @opt;
|
|
||||||
while(<CONFIG>) {
|
|
||||||
chop;
|
|
||||||
s/^\s+//;
|
|
||||||
tr/A-Z/a-z/;
|
|
||||||
if (/^type\s+(\S)/i) {
|
|
||||||
$opt[$OPT_TYPE] = $1;
|
|
||||||
} elsif (/^format\s+(\S)/i) {
|
|
||||||
$opt[$OPT_FORMAT] = $1
|
|
||||||
} elsif (/^sort\s+(\S)/i) {
|
|
||||||
$opt[$OPT_SORT] = $1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
close(CONFIG);
|
|
||||||
return @opt;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub update_option {
|
|
||||||
local($config) = @_;
|
|
||||||
|
|
||||||
open(CONFIG, "> $config") || return;
|
|
||||||
print CONFIG <<EOF;
|
|
||||||
type $TYPE
|
|
||||||
format $FORMAT
|
|
||||||
sort $SORT
|
|
||||||
EOF
|
|
||||||
close(CONFIG);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub print_form {
|
|
||||||
local($d, @OPT) = @_;
|
|
||||||
local(@disc) = ('Type', 'Format', 'Sort');
|
|
||||||
local(@val) = (
|
|
||||||
"('t', 'd')",
|
|
||||||
"('s', 'd', 'c')",
|
|
||||||
"('n', 's', 't')",
|
|
||||||
);
|
|
||||||
local(@opt) = (
|
|
||||||
"('Tree', 'Standard')",
|
|
||||||
"('Short', 'Standard', 'Column')",
|
|
||||||
"('By Name', 'By Size', 'By Time')"
|
|
||||||
);
|
|
||||||
local($_, @vs, @os, $v, $o);
|
|
||||||
|
|
||||||
print <<EOF;
|
|
||||||
<form action=\"$CGI\">
|
|
||||||
<center>
|
|
||||||
<table>
|
|
||||||
<tr valign=top>
|
|
||||||
EOF
|
|
||||||
foreach(0 .. 2) {
|
|
||||||
print "<td align> $disc[$_]</td>\n";
|
|
||||||
}
|
|
||||||
print "</tr><tr>\n";
|
|
||||||
foreach(0 .. 2) {
|
|
||||||
print "<td><select name=opt$_>\n";
|
|
||||||
eval "\@vs = $val[$_]";
|
|
||||||
eval "\@os = $opt[$_]";
|
|
||||||
foreach $v (@vs) {
|
|
||||||
$o = shift(@os);
|
|
||||||
if ($v eq $OPT[$_]) {
|
|
||||||
print "<option value=$v selected>$o\n";
|
|
||||||
} else {
|
|
||||||
print "<option value=$v>$o\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
print "</select></td>\n";
|
|
||||||
}
|
|
||||||
print <<EOF;
|
|
||||||
<td><input type=submit name=cmd value="Update"></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</center>
|
|
||||||
<input type=hidden name=dir value="$d">
|
|
||||||
</form>
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
sub html_quote {
|
|
||||||
local($_) = @_;
|
|
||||||
local(%QUOTE) = (
|
|
||||||
'<', '<',
|
|
||||||
'>', '>',
|
|
||||||
'&', '&',
|
|
||||||
'"', '"',
|
|
||||||
);
|
|
||||||
s/[<>&"]/$QUOTE{$&}/g;
|
|
||||||
return $_;
|
|
||||||
}
|
|
||||||
sub file_encode {
|
|
||||||
local($_) = @_;
|
|
||||||
s/[\000-\040\+:#?&%<>"\177-\377]/sprintf('%%%02X', unpack('C', $&))/eg;
|
|
||||||
return $_;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub form_decode {
|
|
||||||
local($_) = @_;
|
|
||||||
s/\+/ /g;
|
|
||||||
s/%([\da-f][\da-f])/pack('C', hex($1))/egi;
|
|
||||||
return $_;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub cleanup {
|
|
||||||
local($_) = @_;
|
|
||||||
|
|
||||||
s@//+@/@g;
|
|
||||||
s@/\./@/@g;
|
|
||||||
while(m@/\.\./@) {
|
|
||||||
s@^/(\.\./)+@/@;
|
|
||||||
s@/[^/]+/\.\./@/@;
|
|
||||||
}
|
|
||||||
return $_;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub utype {
|
|
||||||
local($_) = @_;
|
|
||||||
local(%T) = (
|
|
||||||
0010000, 'PIPE',
|
|
||||||
0020000, 'CHR',
|
|
||||||
0040000, 'DIR',
|
|
||||||
0060000, 'BLK',
|
|
||||||
0100000, 'FILE',
|
|
||||||
0120000, 'LINK',
|
|
||||||
0140000, 'SOCK',
|
|
||||||
);
|
|
||||||
return $T{($_ & 0170000)} || 'FILE';
|
|
||||||
}
|
|
||||||
|
|
||||||
sub umode {
|
|
||||||
local($_) = @_;
|
|
||||||
local(%T) = (
|
|
||||||
0010000, 'p',
|
|
||||||
0020000, 'c',
|
|
||||||
0040000, 'd',
|
|
||||||
0060000, 'b',
|
|
||||||
0100000, '-',
|
|
||||||
0120000, 'l',
|
|
||||||
0140000, 's',
|
|
||||||
);
|
|
||||||
|
|
||||||
return ($T{($_ & 0170000)} || '-')
|
|
||||||
. (($_ & 00400) ? 'r' : '-')
|
|
||||||
. (($_ & 00200) ? 'w' : '-')
|
|
||||||
. (($_ & 04000) ? 's' :
|
|
||||||
(($_ & 00100) ? 'x' : '-'))
|
|
||||||
. (($_ & 00040) ? 'r' : '-')
|
|
||||||
. (($_ & 00020) ? 'w' : '-')
|
|
||||||
. (($_ & 02000) ? 's' :
|
|
||||||
(($_ & 00010) ? 'x' : '-'))
|
|
||||||
. (($_ & 00004) ? 'r' : '-')
|
|
||||||
. (($_ & 00002) ? 'w' : '-')
|
|
||||||
. (($_ & 01000) ? 't' :
|
|
||||||
(($_ & 00001) ? 'x' : '-'));
|
|
||||||
}
|
|
||||||
|
|
||||||
sub utime {
|
|
||||||
local($_) = @_;
|
|
||||||
local(@MON) = (
|
|
||||||
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
|
|
||||||
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
|
|
||||||
);
|
|
||||||
local($sec,$min,$hour,$mday,$mon,
|
|
||||||
$year,$wday,$yday,$isdst) = localtime($_);
|
|
||||||
|
|
||||||
if ($_ > $NOW - 182*24*60*60 && $_ < $NOW + 183*24*60*60) {
|
|
||||||
return sprintf("%3s %2d %.2d:%.2d", $MON[$mon], $mday, $hour, $min);
|
|
||||||
} else {
|
|
||||||
return sprintf("%3s %2d %5d", $MON[$mon], $mday, 1900+$year);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub cygwin_pathconv {
|
|
||||||
local($_) = @_;
|
|
||||||
local(*CYGPATH);
|
|
||||||
|
|
||||||
open(CYGPATH, '-|') or exec('cygpath', '-w', $_);
|
|
||||||
$_ = <CYGPATH>;
|
|
||||||
close(CYGPATH);
|
|
||||||
s/\r?\n$//;
|
|
||||||
s!\\!/!g;
|
|
||||||
s!/$!!;
|
|
||||||
return $_;
|
|
||||||
}
|
|
||||||
@@ -1,272 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
|
|
||||||
if ($use_NKF = eval "use NKF;") {
|
|
||||||
$CONV = "-e";
|
|
||||||
$MIME_DECODE = "-m -e";
|
|
||||||
} else {
|
|
||||||
# $CONV = "w3m -dump -e";
|
|
||||||
$CONV = "/usr/local/bin/nkf -e";
|
|
||||||
$MIME_DECODE = "/usr/local/bin/nkf -m -e";
|
|
||||||
}
|
|
||||||
$MIME_TYPE = "$ENV{'HOME'}/.mime.types";
|
|
||||||
|
|
||||||
if (defined($ENV{'QUERY_STRING'})) {
|
|
||||||
for (split('&', $ENV{'QUERY_STRING'})) {
|
|
||||||
s/^([^=]*)=//;
|
|
||||||
$v{$1} = $_;
|
|
||||||
}
|
|
||||||
$file = &form_decode($v{'file'});
|
|
||||||
$boundary = &form_decode($v{'boundary'});
|
|
||||||
} else {
|
|
||||||
$file = $ARGV[0];
|
|
||||||
if (@ARGV >= 2) {
|
|
||||||
$boundary = $ARGV[1];
|
|
||||||
}
|
|
||||||
$CGI = "file:///\$LIB/multipart.cgi?file=" . &html_quote($file);
|
|
||||||
}
|
|
||||||
|
|
||||||
open(F, $file);
|
|
||||||
$end = 0;
|
|
||||||
$mbody = '';
|
|
||||||
if (defined($boundary)) {
|
|
||||||
while(<F>) {
|
|
||||||
s/\r?\n$//;
|
|
||||||
($_ eq "--$boundary") && last;
|
|
||||||
($_ eq "--$boundary--") && ($end = 1, last);
|
|
||||||
$mbody .= "$_\n";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
while(<F>) {
|
|
||||||
s/\r?\n$//;
|
|
||||||
if (s/^\-\-//) {
|
|
||||||
$boundary = $_;
|
|
||||||
last;
|
|
||||||
}
|
|
||||||
$mbody .= "$_\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$CGI .= "&boundary=" . &html_quote($boundary);
|
|
||||||
|
|
||||||
if (defined($v{'count'})) {
|
|
||||||
$count = 0;
|
|
||||||
while($count < $v{'count'}) {
|
|
||||||
while(<F>) {
|
|
||||||
s/\r?\n$//;
|
|
||||||
($_ eq "--$boundary") && last;
|
|
||||||
}
|
|
||||||
eof(F) && exit;
|
|
||||||
$count++;
|
|
||||||
}
|
|
||||||
|
|
||||||
%header = ();
|
|
||||||
$hbody = '';
|
|
||||||
while(<F>) {
|
|
||||||
/^\s*$/ && last;
|
|
||||||
$x = $_;
|
|
||||||
s/\r?\n$//;
|
|
||||||
if (/=\?/) {
|
|
||||||
$_ = &decode($_, $MIME_DECODE);
|
|
||||||
}
|
|
||||||
if (s/^(\S+)\s*:\s*//) {
|
|
||||||
$hbody .= "$&$_\n";
|
|
||||||
$p = $1;
|
|
||||||
$p =~ tr/A-Z/a-z/;
|
|
||||||
$header{$p} = $_;
|
|
||||||
} elsif (s/^\s+//) {
|
|
||||||
chop $hbody;
|
|
||||||
$hbody .= "$_\n";
|
|
||||||
$header{$p} .= $_;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$type = $header{"content-type"};
|
|
||||||
$dispos = $header{"content-disposition"};
|
|
||||||
if ($type =~ /application\/octet-stream/) {
|
|
||||||
if ($type =~ /type\=gzip/) {
|
|
||||||
print "Content-Encoding: x-gzip\n";
|
|
||||||
}
|
|
||||||
if ($type =~ /name=\"?([^\"]+)\"?/ ||
|
|
||||||
$dispos =~ /filename=\"?([^\"]+)\"?/) {
|
|
||||||
$type = &guess_type($1);
|
|
||||||
if ($type) {
|
|
||||||
print "Content-Type: $type; name=\"$1\"\n";
|
|
||||||
} else {
|
|
||||||
print "Content-Type: text/plain; name=\"$1\"\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
print $hbody;
|
|
||||||
print "\n";
|
|
||||||
while(<F>) {
|
|
||||||
$x = $_;
|
|
||||||
s/\r?\n$//;
|
|
||||||
($_ eq "--$boundary") && last;
|
|
||||||
if ($_ eq "--$boundary--") {
|
|
||||||
last;
|
|
||||||
}
|
|
||||||
print $x;
|
|
||||||
}
|
|
||||||
close(F);
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($mbody =~ /\S/) {
|
|
||||||
$_ = $mbody;
|
|
||||||
s/\&/\&/g;
|
|
||||||
s/\</\</g;
|
|
||||||
s/\>/\>/g;
|
|
||||||
print "<pre>\n";
|
|
||||||
print $_;
|
|
||||||
print "</pre>\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
$count = 0;
|
|
||||||
while(! $end) {
|
|
||||||
%header = ();
|
|
||||||
$hbody = '';
|
|
||||||
while(<F>) {
|
|
||||||
/^\s*$/ && last;
|
|
||||||
s/\r?\n$//;
|
|
||||||
if (/=\?/) {
|
|
||||||
$_ = &decode($_, $MIME_DECODE);
|
|
||||||
}
|
|
||||||
if (s/^(\S+)\s*:\s*//) {
|
|
||||||
$hbody .= "$&$_\n";
|
|
||||||
$p = $1;
|
|
||||||
$p =~ tr/A-Z/a-z/;
|
|
||||||
$header{$p} = $_;
|
|
||||||
} elsif (s/^\s+//) {
|
|
||||||
chop $hbody;
|
|
||||||
$hbody .= "$_\n";
|
|
||||||
$header{$p} .= $_;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$type = $header{"content-type"};
|
|
||||||
$dispos = $header{"content-disposition"};
|
|
||||||
if ((! $type || $type =~ /^text\/plain/i) &&
|
|
||||||
(! $dispos || $dispos =~ /^inline/i)) {
|
|
||||||
$plain = 1;
|
|
||||||
} else {
|
|
||||||
$plain = 0;
|
|
||||||
}
|
|
||||||
$body = '';
|
|
||||||
while(<F>) {
|
|
||||||
s/\r?\n$//;
|
|
||||||
($_ eq "--$boundary") && last;
|
|
||||||
if ($_ eq "--$boundary--") {
|
|
||||||
$end = 1;
|
|
||||||
last;
|
|
||||||
}
|
|
||||||
if ($plain) {
|
|
||||||
$body .= "$_\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$| = 1;
|
|
||||||
print "<hr>\n";
|
|
||||||
{
|
|
||||||
$_ = $hbody;
|
|
||||||
s/\&/\&/g;
|
|
||||||
s/\</\</g;
|
|
||||||
s/\>/\>/g;
|
|
||||||
print "<pre>\n";
|
|
||||||
print $_;
|
|
||||||
if ($type =~ /name=\"?([^\"]+)\"?/ ||
|
|
||||||
$dispos =~ /filename=\"?([^\"]+)\"?/) {
|
|
||||||
$name = $1;
|
|
||||||
} else {
|
|
||||||
$name = "[Content]";
|
|
||||||
}
|
|
||||||
print "\n<a href=\"$CGI&count=$count\">", &html_quote($name), "</a>";
|
|
||||||
print "\n\n</pre>\n";
|
|
||||||
}
|
|
||||||
if ($plain) {
|
|
||||||
$body = &decode($body, $CONV);
|
|
||||||
$_ = $body;
|
|
||||||
s/\&/\&/g;
|
|
||||||
s/\</\</g;
|
|
||||||
s/\>/\>/g;
|
|
||||||
print "<pre>\n";
|
|
||||||
print $_;
|
|
||||||
print "</pre>\n";
|
|
||||||
}
|
|
||||||
eof(F) && last;
|
|
||||||
$count++;
|
|
||||||
}
|
|
||||||
close(F);
|
|
||||||
|
|
||||||
sub decode {
|
|
||||||
if ($use_NKF) {
|
|
||||||
local($body, $opt) = @_;
|
|
||||||
return nkf($opt, $body);
|
|
||||||
}
|
|
||||||
local($body, @cmd) = @_;
|
|
||||||
local($_);
|
|
||||||
|
|
||||||
$| = 1;
|
|
||||||
pipe(R, W2);
|
|
||||||
pipe(R2, W);
|
|
||||||
if (! fork()) {
|
|
||||||
close(F);
|
|
||||||
close(R);
|
|
||||||
close(W);
|
|
||||||
open(STDIN, "<&R2");
|
|
||||||
open(STDOUT, ">&W2");
|
|
||||||
exec @cmd;
|
|
||||||
die;
|
|
||||||
}
|
|
||||||
close(R2);
|
|
||||||
close(W2);
|
|
||||||
print W $body;
|
|
||||||
close(W);
|
|
||||||
$body = '';
|
|
||||||
while(<R>) {
|
|
||||||
$body .= $_;
|
|
||||||
}
|
|
||||||
close(R);
|
|
||||||
return $body;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub html_quote {
|
|
||||||
local($_) = @_;
|
|
||||||
local(%QUOTE) = (
|
|
||||||
'<', '<',
|
|
||||||
'>', '>',
|
|
||||||
'&', '&',
|
|
||||||
'"', '"',
|
|
||||||
);
|
|
||||||
s/[<>&"]/$QUOTE{$&}/g;
|
|
||||||
return $_;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub form_decode {
|
|
||||||
local($_) = @_;
|
|
||||||
s/\+/ /g;
|
|
||||||
s/%([\da-f][\da-f])/pack('c', hex($1))/egi;
|
|
||||||
return $_;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub guess_type {
|
|
||||||
local($_) = @_;
|
|
||||||
|
|
||||||
/\.(\w+)$/ || next;
|
|
||||||
$_ = $1;
|
|
||||||
tr/A-Z/a-z/;
|
|
||||||
%mime_type = &load_mime_type($MIME_TYPE);
|
|
||||||
$mime_type{$_};
|
|
||||||
}
|
|
||||||
|
|
||||||
sub load_mime_type {
|
|
||||||
local($file) = @_;
|
|
||||||
local(%m, $a, @b, $_);
|
|
||||||
|
|
||||||
open(M, $file) || return ();
|
|
||||||
while(<M>) {
|
|
||||||
/^#/ && next;
|
|
||||||
chop;
|
|
||||||
(($a, @b) = split(" ")) >= 2 || next;
|
|
||||||
for(@b) {
|
|
||||||
$m{$_} = $a;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
close(M);
|
|
||||||
return %m;
|
|
||||||
}
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
|
|
||||||
@W3M = split(' ', 'w3m');
|
|
||||||
$ENV{'MAN'} = 'man';
|
|
||||||
$SCRIPT = 'file:///$LIB/w3mman2html.cgi';
|
|
||||||
|
|
||||||
sub usage {
|
|
||||||
($_ = $0) =~ s@.*/@@;
|
|
||||||
print STDERR "$_ [-M <path>] [[<section>] <command>]\n";
|
|
||||||
print STDERR "$_ [-M <path>] [-k <keyword>]\n";
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
$query = "";
|
|
||||||
while (@ARGV) {
|
|
||||||
$_ = shift @ARGV;
|
|
||||||
if (/^-M$/) {
|
|
||||||
@ARGV || &usage();
|
|
||||||
$ENV{'MANPATH'} = shift @ARGV;
|
|
||||||
} elsif (/^-k$/) {
|
|
||||||
@ARGV || &usage();
|
|
||||||
$query = "?keyword=" . &form_encode(shift @ARGV);
|
|
||||||
} elsif (/^-/) {
|
|
||||||
&usage();
|
|
||||||
} elsif (/^\d/ || $_ eq 'n') {
|
|
||||||
@ARGV || &usage();
|
|
||||||
$query = "?quit=ok&man=" . &form_encode(shift @ARGV);
|
|
||||||
$query .= "§ion=" . &form_encode($_);
|
|
||||||
} else {
|
|
||||||
$query = "?quit=ok&man=" . &form_encode($_);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
exec @W3M, "$SCRIPT$query";
|
|
||||||
|
|
||||||
sub form_encode {
|
|
||||||
local($_) = @_;
|
|
||||||
s/[\000-\040\+:#?&%<>"\177-\377]/sprintf('%%%02X', unpack('C', $&))/eg;
|
|
||||||
return $_;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,252 +0,0 @@
|
|||||||
#!/usr/local/bin/perl
|
|
||||||
|
|
||||||
$MAN = $ENV{'MAN'} || 'man';
|
|
||||||
$QUERY = $ENV{'QUERY_STRING'} || $ARGV[0];
|
|
||||||
$SCRIPT_NAME = $ENV{'SCRIPT_NAME'} || $0;
|
|
||||||
$CGI = "file://$SCRIPT_NAME";
|
|
||||||
$CGI2 = "file:";
|
|
||||||
# $CGI2 = "file:///\$LIB/hlink.cgi?";
|
|
||||||
$SQUEEZE = 1;
|
|
||||||
|
|
||||||
if ($QUERY =~ /\=/) {
|
|
||||||
for (split('&', $QUERY)) {
|
|
||||||
($v, $q) = split('=', $_, 2);
|
|
||||||
$query{$v} = &form_decode($q);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$QUERY =~ s/^man=//;
|
|
||||||
$query{"man"} = &form_decode($QUERY);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! $query{"man"}) {
|
|
||||||
if ($query{"keyword"}) {
|
|
||||||
$keyword = $query{"keyword"};
|
|
||||||
$k = &html_quote($keyword);
|
|
||||||
print <<EOF;
|
|
||||||
Content-Type: text/html
|
|
||||||
|
|
||||||
<html>
|
|
||||||
<head><title>man -k $k</title></head>
|
|
||||||
<body>
|
|
||||||
<h2>man -k <b>$k</b></h2>
|
|
||||||
<ul>
|
|
||||||
EOF
|
|
||||||
$keyword =~ s:([^\w./]):\\$1:g;
|
|
||||||
open(F, "$MAN -k $keyword 2> /dev/null |");
|
|
||||||
@line = ();
|
|
||||||
while(<F>) {
|
|
||||||
chop;
|
|
||||||
$_ = &html_quote($_);
|
|
||||||
s/(\s+-.*)$//;
|
|
||||||
$title = $1;
|
|
||||||
s@(\w[\w.\-]*(\s*\,\s*\w[\w.\-]*)*)\s*(\([\dn]\w*\))@&keyword_ref($1, $3)@ge;
|
|
||||||
print "<li>$_$title\n";
|
|
||||||
}
|
|
||||||
close(F);
|
|
||||||
print <<EOF;
|
|
||||||
</ul>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
EOF
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
print <<EOF;
|
|
||||||
Content-Type: text/html
|
|
||||||
|
|
||||||
<html>
|
|
||||||
<head><title>man</title></head>
|
|
||||||
<body>
|
|
||||||
<form action="$CGI">
|
|
||||||
<table>
|
|
||||||
<tr><td>Manual:<td><input name=man>
|
|
||||||
<tr><td>Section:<td><input name=section>
|
|
||||||
<tr><td>Keyword:<td><input name=keyword>
|
|
||||||
<tr><td><td><input type=submit> <input type=reset>
|
|
||||||
</table>
|
|
||||||
</form>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
EOF
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
$man = $query{"man"};
|
|
||||||
if ($man =~ s/\((\w+)\)$//) {
|
|
||||||
$section = $1;
|
|
||||||
$man_section = "$man($1)";
|
|
||||||
} elsif ($query{"section"}) {
|
|
||||||
$section = $query{"section"};
|
|
||||||
$man_section = "$man($section)";
|
|
||||||
} else {
|
|
||||||
$section = "";
|
|
||||||
$man_section = "$man";
|
|
||||||
}
|
|
||||||
|
|
||||||
$section =~ s:([^\w./]):\\$1:g;
|
|
||||||
$man =~ s:([^\w./]):\\$1:g;
|
|
||||||
open(F, "$MAN $section $man 2> /dev/null |");
|
|
||||||
$ok = 0;
|
|
||||||
undef $header;
|
|
||||||
$blank = -1;
|
|
||||||
while(<F>) {
|
|
||||||
if (! defined($header)) {
|
|
||||||
/^\s*$/ && next;
|
|
||||||
$header = $_;
|
|
||||||
$space = $header;
|
|
||||||
chop $space;
|
|
||||||
$space =~ s/\S.*//;
|
|
||||||
} elsif ($_ eq $header) { # delete header
|
|
||||||
$blank = -1;
|
|
||||||
next;
|
|
||||||
} elsif (!/\010/ && /^$space[\w\200-\377].*\s\S/o) { # delete footer
|
|
||||||
$blank = -1;
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
if ($SQUEEZE) {
|
|
||||||
if (/^\s*$/) {
|
|
||||||
$blank || $blank++;
|
|
||||||
next;
|
|
||||||
} elsif ($blank) {
|
|
||||||
$blank > 0 && print "\n";
|
|
||||||
$blank = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
s/\&/\&/g;
|
|
||||||
s/\</\</g;
|
|
||||||
s/\>/\>/g;
|
|
||||||
|
|
||||||
s@([\200-\377].)(\010{1,2}\1)+@<b>$1</b>@g;
|
|
||||||
s@(\&\w+;|.)(\010\1)+@<b>$1</b>@g;
|
|
||||||
s@__\010{1,2}((\<b\>)?[\200-\377].(\</b\>)?)@<u>$1</u>@g;
|
|
||||||
s@_\010((\<b\>)?(\&\w+\;|.)(\</b\>)?)@<u>$1</u>@g;
|
|
||||||
s@((\<b\>)?[\200-\377].(\</b\>)?)\010{1,2}__@<u>$1</u>@g;
|
|
||||||
s@((\<b\>)?(\&\w+\;|.)(\</b\>)?)\010_@<u>$1</u>@g;
|
|
||||||
s@.\010(.)@$1@g;
|
|
||||||
|
|
||||||
s@\</b\>\</u\>\<b\>_\</b\>\<u\>\<b\>@_@g;
|
|
||||||
s@\</u\>\<b\>_\</b\>\<u\>@_@g;
|
|
||||||
s@\</u\>\<u\>@@g;
|
|
||||||
s@\</b\>\<b\>@@g;
|
|
||||||
|
|
||||||
if (! $ok) {
|
|
||||||
/^No/ && last;
|
|
||||||
print <<EOF;
|
|
||||||
Content-Type: text/html
|
|
||||||
|
|
||||||
<html>
|
|
||||||
<head><title>man $man_section</title></head>
|
|
||||||
<body>
|
|
||||||
<pre>
|
|
||||||
EOF
|
|
||||||
print;
|
|
||||||
$ok = 1;
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
|
|
||||||
s@(http|ftp)://[\w.\-/~]+[\w/]@<a href="$&">$&</a>@g;
|
|
||||||
s@(\W)(mailto:)?(\w[\w.\-]*\@\w[\w.\-]*\.[\w.\-]*\w)@$1<a href="mailto:$3">$2$3</a>@g;
|
|
||||||
s@(\W)(\~?/[\w.][/\w.\-]*)@$1 . &file_ref($2)@ge;
|
|
||||||
s@(include(<\/?[bu]\>|\s)*\<)([/\w.\-]+)@$1 . &include_ref($3)@ge;
|
|
||||||
s@(\w[\w.\-]*)((\</[bu]\>)*)(\([\dm]\w*\))@<a href="$CGI?$1$4">$1</a>$2$4@g;
|
|
||||||
print;
|
|
||||||
}
|
|
||||||
close(F);
|
|
||||||
if (! $ok) {
|
|
||||||
if ($query{'quit'}) {
|
|
||||||
print STDERR "No manual entry for $man_section.\n";
|
|
||||||
print <<EOF;
|
|
||||||
w3m-control: EXIT
|
|
||||||
EOF
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
print <<EOF;
|
|
||||||
Content-Type: text/html
|
|
||||||
|
|
||||||
<html>
|
|
||||||
<head><title>man $man_section</title></head>
|
|
||||||
<body>
|
|
||||||
<pre>
|
|
||||||
EOF
|
|
||||||
print "No manual entry for <B>$man_section</B>.\n";
|
|
||||||
}
|
|
||||||
print <<EOF;
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
EOF
|
|
||||||
|
|
||||||
sub is_command {
|
|
||||||
local($_) = @_;
|
|
||||||
local($p);
|
|
||||||
|
|
||||||
(! -d && -x) || return 0;
|
|
||||||
if (! defined(%PATH)) {
|
|
||||||
for $p (split(":", $ENV{'PATH'})) {
|
|
||||||
$p =~ s@/+$@@;
|
|
||||||
$PATH{$p} = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
s@/[^/]*$@@;
|
|
||||||
return defined($PATH{$_});
|
|
||||||
}
|
|
||||||
|
|
||||||
sub file_ref {
|
|
||||||
local($_) = @_;
|
|
||||||
|
|
||||||
if (&is_command($_)) {
|
|
||||||
($man = $_) =~ s@.*/@@;
|
|
||||||
return "<a href=\"$CGI?$man\">$_</a>";
|
|
||||||
}
|
|
||||||
if (/^\~/ || -f || -d) {
|
|
||||||
return "<a href=\"$CGI2$_\">$_</a>";
|
|
||||||
}
|
|
||||||
return $_;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub include_ref {
|
|
||||||
local($_) = @_;
|
|
||||||
local($d);
|
|
||||||
|
|
||||||
for $d (
|
|
||||||
"/usr/include",
|
|
||||||
"/usr/local/include",
|
|
||||||
"/usr/X11R6/include",
|
|
||||||
"/usr/X11/include",
|
|
||||||
"/usr/X/include",
|
|
||||||
"/usr/include/X11"
|
|
||||||
) {
|
|
||||||
-f "$d/$_" && return "<a href=\"$CGI2$d/$_\">$_</a>";
|
|
||||||
}
|
|
||||||
return $_;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub keyword_ref {
|
|
||||||
local($_, $s) = @_;
|
|
||||||
local(@a) = ();
|
|
||||||
|
|
||||||
for (split(/\s*,\s*/)) {
|
|
||||||
push(@a, "<a href=\"$CGI?$_$s\">$_</a>");
|
|
||||||
}
|
|
||||||
return join(", ", @a) . $s;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub html_quote {
|
|
||||||
local($_) = @_;
|
|
||||||
local(%QUOTE) = (
|
|
||||||
'<', '<',
|
|
||||||
'>', '>',
|
|
||||||
'&', '&',
|
|
||||||
'"', '"',
|
|
||||||
);
|
|
||||||
s/[<>&"]/$QUOTE{$&}/g;
|
|
||||||
return $_;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub form_decode {
|
|
||||||
local($_) = @_;
|
|
||||||
s/\+/ /g;
|
|
||||||
s/%([\da-f][\da-f])/pack('c', hex($1))/egi;
|
|
||||||
return $_;
|
|
||||||
}
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user