aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/extras/rman/contrib/hman.pl
diff options
context:
space:
mode:
Diffstat (limited to 'nx-X11/extras/rman/contrib/hman.pl')
-rw-r--r--nx-X11/extras/rman/contrib/hman.pl261
1 files changed, 261 insertions, 0 deletions
diff --git a/nx-X11/extras/rman/contrib/hman.pl b/nx-X11/extras/rman/contrib/hman.pl
new file mode 100644
index 000000000..099db0417
--- /dev/null
+++ b/nx-X11/extras/rman/contrib/hman.pl
@@ -0,0 +1,261 @@
+#!/usr/bin/perl -w
+#!/citi/gtfd/mach/bin/perl -w
+###############
+# $Id: hman.pl,v 1.1.1.4 2004/03/14 08:29:12 eich Exp $
+# $Source: /cvs/xorg/xc/extras/rman/contrib/hman.pl,v $
+############################################
+# TODO:
+# reorganize location of man pages - move 3x stuff from man3 to man3x
+# recurse - if 'man 3x curses' does not work try 'man 3 curses'
+# display more STDERR
+# Fix broken whatis entries - instead of
+# manpage section - description
+# manpage description section -
+# highlite keywords found
+# pass MANPATH as a command line argument
+############################################
+# Inspired by:
+# http://www.jinr.dubna.su/~gagin
+# http://thsun1.jinr.dubna.su/~gagin/rman.pl
+# http://thsun1.jinr.dubna.su/cgi-bin/rman.pl
+# http://www.jinr.dubna.su/~gagin/rman.pl.html
+#
+# CGI form interface to PolyglotMan program, which is available as
+# ftp://ftp.cs.berkeley.edu:/ucb/people/phelps/tcltk/rman.tar.Z
+#
+# The most recent version of this program available as
+# http://www.geocities.com/SiliconValley/Lakes/8777/hman.html
+#---------------------------------------------------------------------
+# This is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# hman is distributed in the hope that
+# it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this software; see the file COPYING. If not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+#
+# THIS SOFTWARE IS NOT DESIGNED OR INTENDED FOR USE OR RESALE AS ON-LINE
+# CONTROL EQUIPMENT IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE
+# PERFOHMANCE, SUCH AS IN THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT
+# NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL, DIRECT LIFE
+# SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH THE FAILURE OF THE
+# SOFTWARE COULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE
+# PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH RISK ACTIVITIES").
+# ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR HIGH RISK ACTIVITIES
+# IS SPECIFICALLY DISCLAIMED.
+#---------------------------------------------------------------------
+# Request form: hman.pl?ManTopic=SOMETOPIC&ManSection=SECTION
+# Request form: hman.pl?DirectPath=filename
+#
+#---------------------------------------------------------------------
+# Stuff to change
+
+# path to PolyglotMan program. "-b" is not nessesary
+$hman="$ENV{HMANPRG} $ENV{HMANOPT}";
+
+# path to man program
+$ManPrg='/usr/bin/man';
+
+# path to cat program
+$ENV{PAGER} = '/bin/cat';
+
+# path to man directories
+($ManPathFind = $ENV{MANPATH}) =~ s/:/ /g;
+
+# URL to this program
+$hmanpl='/cgi-bin/hman';
+
+# if man produced number of lines less then follows,
+# I assume that request failed
+$emptyman=5;
+
+# tail of every produced html document
+$HtmlTail='<hr><A HREF="' . $hmanpl . '">Back to Hman</a>';
+# $HtmlTitle="<title>CGI form interface to PolyglotMan</title>\n";
+$HtmlHdr="Content-type: text/html\n\n";
+
+# end changable things
+#----------------------------------------------------------------------
+@ManSections = (
+ '1', 'user commands',
+ '2', 'system calls',
+ '3', 'subroutines',
+ '4', 'devices',
+ '5', 'file formats',
+ '6', 'games',
+ '7', 'miscellanious',
+ '8', 'sys. admin.',
+ '9', 'Linux Internals',
+ 'n', 'section n'
+);
+
+# Set unbuffered I/O. Prevents buffering problems with
+# "system()" calls.
+select((select(STDOUT), $| = 1)[0]);
+print $HtmlHdr;
+
+$string = $ENV{QUERY_STRING};
+#
+# Initial Form
+#
+if($string eq "") { initialForm(); }
+
+#
+# Generic parameter parsing ...
+#
+$DirectPath = $ManSection = $ManTopic = "";
+$string =~ s/&/'; \$/g;
+$string =~ s/=/='/g;
+$string =~ s/^(.*)$/\$$1';/;
+eval $string;
+
+hmanDirect($DirectPath) if ($DirectPath ne "");
+
+if ($ManTopic eq "") { badness("<code>Topic for man search needed</code>\n"); }
+
+if ($ManSection eq "") { badness("<code>No section specified</code>\n"); }
+
+$ManSection =~ s/all//;
+if ($ManSection =~ /key/) { manKey($ManTopic); }
+
+findIt($ManTopic);
+open(MANOUT, "$ManPrg $ManSection $ManTopic |")
+ || die "$hmanpl: can't run \"$ManPrg Section $ManTopic |\", $!\n";
+for (0..$emptyman) {
+ $temp = <MANOUT> || last;
+ push @temp, $temp;
+}
+#
+if (@temp < $emptyman) {
+ close(MANOUT);
+ print"<strong>Request failed for topic $ManTopic:</strong>\n<code>";
+ for (@temp) {print;}
+ print "</code><br><h3>Let's try a keyword search:</h3><hr>\n";
+ manKey($ManTopic);
+}
+#
+$cmd = "$hman -r \"$hmanpl?ManTopic=%s&ManSection=%s\" -l \"Man page for $ManTopic";
+if ($ManSection eq "") {
+ $cmd .= '"';
+} else {
+ $cmd .= "($ManSection)\"";
+}
+#
+open(HMANIN, "| $cmd") || die "$hmanpl: can't open $cmd: $!\n";
+for (@temp) {print HMANIN;}
+while(<MANOUT>){print HMANIN;}
+close(MANOUT);
+close(HMANIN);
+
+exitIt();
+###############################################################################
+sub initialForm {
+ print <<EOF;
+<h1>Select a manual page:</h1>
+ <FORM METHOD="GET" action="$hmanpl">
+ <table border=0>
+ <tr>
+ <td align=right>Section:</td>
+ <td>
+ <select name=ManSection>
+ <OPTION value=all>All</option>
+ <OPTION value=key>Keyword Search</option>
+EOF
+ for ($ndx = 0; $ndx < @ManSections; $ndx += 2) {
+ print ' <OPTION value=' . $ManSections[$ndx] . '>'
+ . "$ManSections[$ndx] - $ManSections[$ndx + 1] "
+ . '</option>' . "\n";
+ }
+ print <<EOF;
+ </SELECT>
+ </td>
+ </tr>
+ <tr>
+ <td align=right>Topic:</td>
+ <td><input type="TEXT" name="ManTopic"></td>
+ </tr>
+ <tr>
+ <td align=right><INPUT TYPE="submit" VALUE="Search">
+ <td align=left><input type="reset" value="Reset">
+ </td>
+ </tr>
+ </table>
+ </FORM>
+EOF
+ exitIt();
+}
+sub findIt {
+ my($topic) = ($_[0]);
+ my($cmd, $mixedCase, $navigation, $zcat);
+ $mixedCase = '';
+ foreach (split(/\s*/, $topic)) {
+ $mixedCase .= "[" . $_ . uc($_) . "]";
+ }
+ $cmd = 'find ' . $ManPathFind . ' \( -type f -o -type l \) -name '
+ . $mixedCase .'\* | sort -t. +1';
+ open(FINDIN, "$cmd |") || die "can't open pipe \"$cmd |\": $!";
+ $navigation = 0;
+ while (<FINDIN>) {
+ if ($navigation == 0) {
+ print "<UL>\n";
+ $navigation = 1;
+ }
+ $_ =~ s/[\n\r]*$//;
+ print "<li><A HREF=\"$hmanpl?DirectPath=$_\">$_</a>\n";
+ }
+ close(FINDIN);
+ print "</UL><hr>\n" if ($navigation == 1);
+}
+sub hmanDirect {
+ my($path) = ($_[0], $_[1]);
+ my($cmd, $dir, $topic, $section);
+ ($dir = $path) =~ s/\.(gz|z|Z)$//;
+ ($topic = $dir) =~ s,^.*/,,;
+ $dir =~ s,/[^/]*/[^/]*$,,;
+ # $dir =~ s,/[^/]*$,,;
+ ($section=$topic)=~s/^.*\.([^\.]*)$/$1/;
+ $topic =~ s/\.[^\.]*$//;
+ findIt($topic);
+ $cmd = "cd $dir; (gzip -dc < $path 2>/dev/null || cat < $path) | $hman -r '"
+ . $hmanpl . '?ManTopic=%s&ManSection=%s' ."' -l 'Man page for $topic($section)'";
+ system($cmd) || warn "can't run command \"$cmd\": $!";
+ print $HtmlTail;
+ exit 0;
+}
+sub exitIt {
+ print $HtmlTail;
+ exit 0;
+}
+sub badness {
+ my($text) = ($_[0]);
+ print "<strong>Request failed:</strong> $text, Try again<hr>\n";
+ initialForm();
+}
+sub manKey {
+ my($topic) = ($_[0]);
+ open(TMPHTML,"$ManPrg -k $topic | sort -u |")
+ || die "can't open pipe \"$ManPrg -k $topic | sort -u |\": $!\n";
+ print "<title>Keyword search results for \"$topic\"</title>\n";
+ print "<h1>Keyword search results for \"$topic\"</h1><hr>\n";
+ while(<TMPHTML>) {
+ s/\( \)//g;
+ next if (! /^([^(]+)\s*\(([^)]+)[^-]+-\s(.*)[\n\r]*$/);
+ @topics=split(/, /,$1);
+ next if ($2 eq "");
+ print "<h2>$3:</h2>\n";
+ print "<UL>\n";
+ for $topic (@topics) {
+ print "<li><A HREF=\"$hmanpl?ManSection=$2&ManTopic=$topic\">$topic</a>($2)\n";
+ }
+ print "</UL>\n";
+ }
+ close(TMPHTML);
+ exitIt();
+}