#!/usr/bin/perl -w ######################################################## #Program: perlMan #Programmer: ZiaTioN #Requires: Linux/Unix/BSD/MAC # perl # CGI.pm # # Description: # This application was designed to be a web interface # for the Linux/Unix/BSD/MAC man, perldoc and info pages. # Most the appearance is controlled by the CSS settings # in the
tag. # # Copyright: # Copyright (C) 2005 - * ziation AT perlskripts.com # # This program is free software and can be redistrubuted # and/or modified under the terms of the GNU General Public # License the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # Additional requirements I have for redistrobution or editing # is that this header must remain intact. # # Disclaimer: # This application comes free of any warranty or guarantee. # If for some crazy reason this application does any damage # to your system the author of this application (me) can # not be held responsible. # # Note: # Inspiration for this application came from a program # called phpMan (http://sourceforge.net/projects/phpunixman/). # It is very similar in look and functionality to this # program. I came across the program and decided to write # my own in perl. This is NOT a perl port of that php # application. ######################################################## use strict; use CGI qw(:standard); ######################################################## # Gather and filter URL parameters my $param = CleanParam(param('param')); my $mode = CleanParam(param('mode')); my $section = CleanParam(param('section')); $mode = 'man' unless $mode; ######################################################## # Some initial checking to make sure things are in order my $mWidth = 132; my @path = reverse(split(/\//, $0)); my $app = $path[0]; if ($mode !~ /man|perldoc|info|copyright|apropos|source/) { showHeader(); print "Invalid mode type!\n"; showFooter(); exit(0); } ######################################################## # This is more or less the driver to the application if ($mode eq 'man') { showHeader(); showMan($param); showFooter(); exit(0); } if ($mode eq 'perldoc') { showHeader(); showPerldoc($param); showFooter(); exit(0) } if ($mode eq 'info') { showHeader(); showInfo($param); showFooter(); exit(0); } if ($mode eq 'apropos') { showHeader(); showApropos($param); showFooter(); exit(0); } if ($mode eq 'source') { showHeader(); showSource(); showFooter(); exit(0); } copyright() if ($mode eq 'copyright'); ######################################################## # HTML building section # Print HTML header sub showHeader { my @modes = qw(man perldoc info apropos); my $input; for (@modes) { if ($_ eq $mode) { $input .= qq~ $_\n~; } else { $input .= qq~ $_\n~; } } print "Content-type: text/html; charset=ISO-8859-1\n\n"; print qq~perlMan -- Web Interface For Man Pages | |
View Source -- View License |
~; } #Print HTML body sub showMan { my $param = shift; my $intro; unless ($param) { $intro .= qq~1) General Commands intro(1)
~; $intro .= qq~2) System Calls intro(2)
~; $intro .= qq~3) Subroutines intro(3)
~; $intro .= qq~4) Special Files intro(4)
~; $intro .= qq~5) File Formats intro(5)
~; $intro .= qq~6) Games intro(6)
~; $intro .= qq~7) Macros and Conventions intro(7)
~; $intro .= qq~8) Maintenance Commands intro(8)
~; $intro .= qq~9) Kernel Interface intro(9)
~; $intro .= qq~n) New Commands
~; print $intro; return; } # Method to obtain data without spawning a shell open(MODE, "-|") || exec("MANWIDTH=$mWidth $mode $section $param"); if () { print ParseData($_) while ( ); } else { print qq!$param: Nothing Appropriate!; } close(MODE); } sub showPerldoc { my $param = shift; my $cmd = $mode; $cmd = 'apropos' unless ($param); $param = 'perl' unless ($param); # Method to obtain data without spawning a shell open(MODE, "-|") || exec("$cmd $param"); if ( ) { print ParseData($_) while ( ); } else { print qq!$param: Nothing Appropriate!; } close(MODE); } sub showInfo { my $param = shift; # Method to obtain data without spawning a shell open(MODE, "-|") || exec("$mode $param"); if ( ) { print ParseData($_) while ( ); } else { print qq!$param: Nothing Appropriate!; } close(MODE); } sub showApropos { my $param = shift; my $cmd = $mode; unless ($param) { $cmd = 'man'; $param = 'apropos'; } # Method to obtain data without spawning a shell open(MODE, "-|") || exec("$cmd $param"); if ( ) { print ParseData($_) while ( ); } else { print qq!$param: Nothing Appropriate!; } close(MODE); } sub showSource { open(APP, "<", $0) || print "Error: $!\n", return; print ParseData($_) while ( ); close(APP); } # Print HTML footer sub showFooter { print qq~