#!/usr/bin/perl &parse_form_data (*FORM); ($manpage = $FORM{'manpage'}) =~ s/^\s*(.*)\b\s*$/$1/; if ((!$manpage) || ($manpage !~ /^[\w\+\-]+$/)) { &return_error (500, "UNIX Manual Error", "Invalid manual page specification."); } else { &display_manpage(); } exit (0); sub parse_form_data { local (*FORM_DATA) = @_; local ($request_method, $query_string, @key_value_pairs, $key_value, $key, $value); $request_method = $ENV{'REQUEST_METHOD'}; if ($request_method eq "GET") { $query_string = $ENV{'QUERY_STRING'}; } elsif ($request_method eq "POST") { read (STDIN, $query_string, $ENV{'CONTENT_LENGTH'}); } else { &return_error (500, "Server Error", "Server uses unsupported method"); } @key_value_pairs = split (/&/, $query_string); foreach $key_value (@key_value_pairs) { ($key, $value) = split (/=/, $key_value); $value =~ tr/+/ /; $value =~ s/%([\dA-Fa-f][\dA-Fa-f])/pack ("C", hex ($1))/eg; if (defined($FORM_DATA{$key})) { $FORM_DATA{$key} = join ("\0", $FORM_DATA{$key}, $value); } else { $FORM_DATA{$key} = $value; } } } sub return_error { local ($status, $keyword, $message) = @_; print "Content-type: text/html", "\n"; print "Status: ", $status, " ", $keyword, "\n\n"; print <CGI Program - Unexpected Error

$keyword


$message End_of_Error exit(1); } sub display_manpage { local ($blank); print "Content-type: text/html", "\n\n"; print "", "\n"; print "UNIX Manual Page", "\n"; print "", "\n"; print "
";

	open (MANUAL, "man $manpage |");
	$blank = 0;
	while ()
	{
		next if ((/^$manpage\(\w+\)/i) || (/\s+\d+$/));

		if (/^\s*$/)
		{
			$blank++;

			if ($blank < 2)
			{
				print;
			}
		}
		else
		{
			$blank = 0;

			s//&/g if (/&/);
			s//</g if (//);

			s/_\010&/&<\/FONT>/g;
			s/_\010</<<\/FONT>/g;
			s/_\010>/><\/FONT>/g;

			if (/((_\010\S)+)/)
			{
				s//$1<\/FONT>/g;
				s/_\010//g;
			}

			s/&\010&/&<\/FONT>/g;
			s/<\010</<<\/FONT>/g;
			s/>\010>/><\/FONT>/g;

			if (/((\S\010\S)+)/)
			{
				s/((\S\010\S)+)/$1<\/FONT>/g;
				s/\S\010//g;
			}

			print;
		}
	}

	print "

", "\n"; print "", "\n"; close (MANUAL); }