1600 lines
54 KiB
Perl
Executable file
1600 lines
54 KiB
Perl
Executable file
#!/usr/bin/perl -T
|
||
#
|
||
# Copyright (c) 1996-2010 Wolfram Schneider <wosch@FreeBSD.org>
|
||
# All rights reserved.
|
||
#
|
||
# Redistribution and use in source and binary forms, with or without
|
||
# modification, are permitted provided that the following conditions
|
||
# are met:
|
||
# 1. Redistributions of source code must retain the above copyright
|
||
# notice, this list of conditions and the following disclaimer.
|
||
# 2. Redistributions in binary form must reproduce the above copyright
|
||
# notice, this list of conditions and the following disclaimer in the
|
||
# documentation and/or other materials provided with the distribution.
|
||
#
|
||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||
# SUCH DAMAGE.
|
||
#
|
||
# man.cgi - HTML hypertext FreeBSD man page interface
|
||
#
|
||
# based on bsdi-man.pl,v 2.17 1995/10/05 16:48:58 sanders Exp
|
||
# bsdi-man -- HTML hypertext BSDI man page interface
|
||
# based on bsdi-man.pl,v 2.10 1993/10/02 06:13:23 sanders Exp
|
||
# by polk@BSDI.COM 1/10/95
|
||
# BSDI Id: bsdi-man,v 1.2 1995/01/11 02:30:01 polk Exp
|
||
# Dual CGI/Plexus mode and new interface by sanders@bsdi.com 9/22/1995
|
||
#
|
||
# $Id: man.cgi,v 1.246 2010-05-23 23:18:58 wosch Exp $
|
||
# $FreeBSD: www/en/cgi/man.cgi,v 1.245 2010/05/23 23:14:46 wosch Exp $
|
||
|
||
############################################################################
|
||
# !!! man.cgi is stale perl4 code !!!
|
||
############################################################################
|
||
|
||
# run `perltidy -b man.cgi' to indent the code
|
||
|
||
# Use standard FreeBSD CGI Style if available.
|
||
# Otherwise print simple HTML design.
|
||
package cgi_style;
|
||
use constant HAS_FREEBSD_CGI_STYLE => eval { require "./cgi-style.pl"; };
|
||
|
||
package main;
|
||
|
||
$debug = 2;
|
||
$www{'title'} = 'FreeBSD Man Pages';
|
||
$www{'home'} = 'http://www.FreeBSD.org';
|
||
$www{'head'} = $www{'title'};
|
||
|
||
$command{'man'} = '/usr/bin/man'; # 8Bit clean man
|
||
|
||
# Config Options
|
||
# map sections to their man command argument(s)
|
||
%sections = (
|
||
'', '',
|
||
'All', '',
|
||
'0', '',
|
||
|
||
'1', '-S1',
|
||
'1c', '-S1',
|
||
'1C', '-S1',
|
||
'1g', '-S1',
|
||
'1m', '-S1',
|
||
'2', '-S2',
|
||
'2j', '-S2',
|
||
'3', '-S3',
|
||
'3S', '-S3',
|
||
'3f', '-S3',
|
||
'3j', '-S3',
|
||
'3m', '-S3',
|
||
'3n', '-S3',
|
||
'3p', '-S3',
|
||
'3pm', '-S3',
|
||
'3r', '-S3',
|
||
'3s', '-S3',
|
||
'3x', '-S3',
|
||
'4', '-S4',
|
||
'5', '-S5',
|
||
'6', '-S6',
|
||
'7', '-S7',
|
||
'8', '-S8',
|
||
'8c', '-S8',
|
||
'9', '-S9',
|
||
'l', '-Sl',
|
||
'n', '-Sn',
|
||
);
|
||
|
||
$sectionpath = {
|
||
'HP-UX 11.22' => { 'path' => '1:1m:2:3:4:5:7:9' },
|
||
'HP-UX 11.20' => { 'path' => '1:1m:2:3:4:5:7:9' },
|
||
'HP-UX 11.11' => { 'path' => '1:1m:2:3:4:5:7:9' },
|
||
'HP-UX 11.00' => { 'path' => '1:1m:2:3:4:5:7:9' },
|
||
'HP-UX 10.20' => { 'path' => '1:1m:2:3:4:5:7:9' },
|
||
'HP-UX 10.10' => { 'path' => '1:1m:2:3:4:5:7:9' },
|
||
'HP-UX 10.01' => { 'path' => '1:1m:2:3:4:5:7:9' },
|
||
'SunOS 5.10' => {
|
||
'path' =>
|
||
'1:1m:1s:1as:2:3:3c:3malloc:3nsl:3socket:3ldap:3nisdb:3rac:3resolv:3rpc:3slp:3proc:3rt:3c_db:3elf:3kvm:3kstat:3m:3mp:3mvec:3pam:3aio:3bsm:3tsol:3contract:3cpc:3sec:3secdb:3smartcard:3cfgadm:3crypt:3devid:3devinfo:3door:3lib:3libucb:3head:3nvpair:3rsm:7:7d:7fs:7i:7ipp:7m:7p:9:9e:9f:9p:9s:4:5:4b:3gen:3exacct:3sysevent:3uuid:3wsreg:3dmi:3snmp:3tnf:3volmgt:3mail:3layout:3ext:3picl:3picltree:3pool:3project:3perl:3lgrp:3sasl:3scf:3dat:3hbaapi:3tecla:1b:1c:1f:3ucb:3xnet:3curses:3plot:3xcurses:3gss:6:3tiff:3fontconfig:3mlib:l:n',
|
||
},
|
||
'SunOS 5.9' => {
|
||
'path' =>
|
||
'1:1m:1s:2:3:3c:3malloc:3dl:3nsl:3socket:3ldap:3nisdb:3rac:3resolv:3rpc:3slp:3xfn:3proc:3rt:3thr:3elf:3kvm:3kstat:3m:3mp:3pam:3sched:3aio:3bsm:3cpc:3sec:3secdb:3cfgadm:3crypt:3devid:3devinfo:3door:3lib:3libucb:3head:3nvpair:3rsm:7:7d:7fs:7i:7m:7p:9:9e:9f:9p:9s:4:5:4b:3gen:3exacct:3sysevent:3wsreg:3dmi:3snmp:3tnf:3volmgt:3mail:3layout:3ext:3picl:3picltree:3pool:3project:1b:1c:1f:3ucb:3xnet:3curses:3plot:3xcurses:3gss:6:l:n',
|
||
},
|
||
'SunOS 5.8' => {
|
||
'path' =>
|
||
'1:1m:1s:2:3:3c:3malloc:3dl:3nsl:3socket:3ldap:3krb:3nisdb:3rac:3resolv:3rpc:3slp:3xfn:3proc:3rt:3thr:3elf:3kvm:3kstat:3m:3mp:3pam:3sched:3aio:3bsm:3cpc:3sec:3secdb:3cfgadm:3crypt:3devid:3devinfo:3door:3lib:3libucb:3head:7:7d:7fs:7i:7m:7p:9:9e:9f:9s:4:5:4b:3gen:3dmi:3snmp:3tnf:3volmgt:3mail:3layout:3ext:1b:1c:1f:3ucb:3xnet:3curses:3plot:3xcurses:6:l:n',
|
||
},
|
||
'SunOS 5.7' => {
|
||
'path' =>
|
||
'1:1m:1c:1f:1s:1b:2:3:3c:3s:3x:3xc:3n:3r:3t:3xn:3m:3k:3g:3e:3b:9f:9s:9e:9:4:5:7:7d:7i:7m:7p:7fs:4b:6:l:n',
|
||
},
|
||
'SunOS 5.6' => {
|
||
'path' =>
|
||
'1:1m:1c:1f:1s:1b:2:3:3c:3s:3x:3xc:3xn:3r:3t:3n:3m:3k:3g:3e:3b:9f:9s:9e:9:4:5:7:7d:7i:7m:7p:7fs:4b:6:l:n',
|
||
},
|
||
'SunOS 5.5.1' => {
|
||
'path' =>
|
||
'1:1m:1c:1f:1s:1b:2:3:3c:3s:3x:3xc:3xn:3r:3t:3n:3m:3k:3g:3e:3b:9f:9s:9e:9:4:5:7:7d:7i:7m:7p:7fs:4b:6:l:n',
|
||
},
|
||
'OpenBSD 3.0' => { 'path' => '1:2:3:3p:4:5:6:7:8:9', },
|
||
'OpenBSD 3.1' => { 'path' => '1:2:3:3p:4:5:6:7:8:9', },
|
||
'OpenBSD 3.2' => { 'path' => '1:2:3:3p:4:5:6:7:8:9', },
|
||
'OpenBSD 3.3' => { 'path' => '1:2:3:3p:4:5:6:7:8:9', },
|
||
'OpenBSD 3.4' => { 'path' => '1:2:3:3p:4:5:6:7:8:9', },
|
||
'OpenBSD 3.5' => { 'path' => '1:2:3:3p:4:5:6:7:8:9', },
|
||
'OpenBSD 3.6' => { 'path' => '1:2:3:3p:4:5:6:7:8:9', },
|
||
'OpenBSD 3.7' => { 'path' => '1:2:3:3p:4:5:6:7:8:9', },
|
||
'OpenBSD 3.8' => { 'path' => '1:2:3:3p:4:5:6:7:8:9', },
|
||
'OpenBSD 3.9' => { 'path' => '1:2:3:3p:4:5:6:7:8:9', },
|
||
'OpenBSD 4.0' => { 'path' => '1:2:3:3p:4:5:6:7:8:9', },
|
||
'OpenBSD 4.1' => { 'path' => '1:2:3:3p:4:5:6:7:8:9', },
|
||
'OpenBSD 4.2' => { 'path' => '1:2:3:3p:4:5:6:7:8:9', },
|
||
'OpenBSD 4.3' => { 'path' => '1:2:3:3p:4:5:6:7:8:9', },
|
||
'OpenBSD 4.4' => { 'path' => '1:2:3:3p:4:5:6:7:8:9', },
|
||
'OpenBSD 4.5' => { 'path' => '1:2:3:3p:4:5:6:7:8:9', },
|
||
'OpenBSD 4.6' => { 'path' => '1:2:3:3p:4:5:6:7:8:9', },
|
||
'OpenBSD 4.7' => { 'path' => '1:2:3:3p:4:5:6:7:8:9', },
|
||
|
||
'CentOS Linux/i386 3.9' => { 'path' => '1:2:3:3p:4:5:6:7:8:9:n', },
|
||
'CentOS Linux/i386 4.8' => { 'path' => '1:1p:2:3:3p:4:5:6:7:8:9:n:0p', },
|
||
'CentOS Linux/i386 5.4' => { 'path' => '0p:1:1p:1x:2:2x:3:3p:3x:4:4x:5:5x:6:6x:7:7x:8:8x:9:9x:l:n', },
|
||
|
||
'SuSE Linux/i386 4.3' => { 'path' => '0p:1:1p:2:3:3p:4:5:6:7:8:9:n:s', },
|
||
'SuSE Linux/i386 5.0' => { 'path' => '0p:1:1p:2:3:3p:4:5:6:7:8:9:n:s', },
|
||
'SuSE Linux/i386 5.2' => { 'path' => '0p:1:1p:2:3:3p:4:5:6:7:8:9:n:s', },
|
||
'SuSE Linux/i386 5.3' => { 'path' => '0p:1:1p:2:3:3p:4:5:6:7:8:9:n:s', },
|
||
'SuSE Linux/i386 6.0' => { 'path' => '0p:1:1p:2:3:3p:4:5:6:7:8:9:n:s', },
|
||
'SuSE Linux/i386 6.1' => { 'path' => '0p:1:1p:2:3:3p:4:5:6:7:8:9:n:s', },
|
||
'SuSE Linux/i386 6.3' => { 'path' => '0p:1:1p:2:3:3p:4:5:6:7:8:9:n:s', },
|
||
'SuSE Linux/i386 6.4' => { 'path' => '0p:1:1p:2:3:3p:4:5:6:7:8:9:n:s', },
|
||
'SuSE Linux/i386 7.0' => { 'path' => '0p:1:1p:2:3:3p:4:5:6:7:8:9:n:s', },
|
||
'SuSE Linux/i386 7.1' => { 'path' => '0p:1:1p:2:3:3p:4:5:6:7:8:9:n:s', },
|
||
'SuSE Linux/i386 7.2' => { 'path' => '0p:1:1p:2:3:3p:4:5:6:7:8:9:n:s', },
|
||
'SuSE Linux/i386 7.3' => { 'path' => '0p:1:1p:2:3:3p:4:5:6:7:8:9:n:s', },
|
||
'SuSE Linux/i386 8.0' => { 'path' => '0p:1:1p:2:3:3p:4:5:6:7:8:9:n:s', },
|
||
'SuSE Linux/i386 8.1' => { 'path' => '0p:1:1p:2:3:3p:4:5:6:7:8:9:n:s', },
|
||
'SuSE Linux/i386 8.2' => { 'path' => '0p:1:1p:2:3:3p:4:5:6:7:8:9:n:s', },
|
||
'SuSE Linux/i386 9.2' => { 'path' => '0p:1:1p:2:3:3p:4:5:6:7:8:9:n:s', },
|
||
'SuSE Linux/i386 9.3' => { 'path' => '0p:1:1p:2:3:3p:4:5:6:7:8:9:n:s', },
|
||
'SuSE Linux/i386 10.0' => { 'path' => '0p:1:1p:2:3:3p:4:5:6:7:8:9:n:s', },
|
||
'SuSE Linux/i386 10.1' => { 'path' => '0p:1:1p:2:3:3p:4:5:6:7:8:9:n:s', },
|
||
'SuSE Linux/i386 10.2' => { 'path' => '0p:1:1p:2:3:3p:4:5:6:7:8:9:n:s', },
|
||
'SuSE Linux/i386 10.3' => { 'path' => '0p:1:1p:2:3:3p:4:5:6:7:8:9:n:s', },
|
||
'SuSE Linux/i386 11.0' => { 'path' => '0p:1:1p:2:3:3p:4:5:6:7:8:9:n:s', },
|
||
'SuSE Linux/i386 11.1' => { 'path' => '0p:1:1p:2:3:3p:4:5:6:7:8:9:n:s', },
|
||
'SuSE Linux/i386 11.2' => { 'path' => '0p:1:1p:2:3:3p:4:5:6:7:8:9:n:s', },
|
||
};
|
||
|
||
foreach my $os ( keys %$sectionpath ) {
|
||
foreach my $section ( split( /:/, $sectionpath->{$os}{'path'} ) ) {
|
||
$section =~ /(.)(.*)/;
|
||
$sectionpath->{$os}{$1} .=
|
||
( $sectionpath->{$os}{$1} ? ':' : '' ) . $section;
|
||
}
|
||
}
|
||
|
||
%sectionName = (
|
||
'0', 'All Sections', '1', '1 - General Commands',
|
||
'2', '2 - System Calls', '3', '3 - Subroutines',
|
||
'4', '4 - Special Files', '5', '5 - File Formats',
|
||
'6', '6 - Games', '7', '7 - Macros and Conventions',
|
||
'8', '8 - Maintenance Commands', '9', '9 - Kernel Interface',
|
||
'n', 'n - New Commands',
|
||
);
|
||
|
||
$manLocalDir = '/usr/local/www/bsddoc/man';
|
||
$manPathDefault = 'FreeBSD 8.0-RELEASE';
|
||
|
||
%manPath = (
|
||
'FreeBSD 8.0-RELEASE and Ports',
|
||
"$manLocalDir/FreeBSD-8.0-RELEASE/man:$manLocalDir/FreeBSD-7.2-RELEASE/openssl/man:$manLocalDir/FreeBSD-ports",
|
||
'FreeBSD 7.3-RELEASE and Ports',
|
||
"$manLocalDir/FreeBSD-7.3-RELEASE/man:$manLocalDir/FreeBSD-7.3-RELEASE/openssl/man:$manLocalDir/FreeBSD-ports",
|
||
'FreeBSD 6.4-RELEASE and Ports',
|
||
"$manLocalDir/FreeBSD-6.4-RELEASE/man:$manLocalDir/FreeBSD-6.4-RELEASE/openssl/man:$manLocalDir/FreeBSD-ports",
|
||
|
||
'FreeBSD Ports', "$manLocalDir/FreeBSD-ports",
|
||
'FreeBSD 9-current', "$manLocalDir/FreeBSD-9-current/man:$manLocalDir/FreeBSD-9-current/openssl/man",
|
||
|
||
'FreeBSD 8.0-RELEASE', "$manLocalDir/FreeBSD-8.0-RELEASE/man:$manLocalDir/FreeBSD-8.0-RELEASE/openssl/man",
|
||
'FreeBSD 8.0-stable', "$manLocalDir/FreeBSD-8.0-stable/man:$manLocalDir/FreeBSD-8.0-stable/openssl/man",
|
||
'FreeBSD Ports 8.0-RELEASE', "$manLocalDir/FreeBSD-ports-8.0-RELEASE",
|
||
|
||
'FreeBSD 7.3-stable', "$manLocalDir/FreeBSD-7.3-RELEASE/man:$manLocalDir/FreeBSD-7.3-RELEASE/openssl/man",
|
||
'FreeBSD 7.3-RELEASE', "$manLocalDir/FreeBSD-7.3-RELEASE/man:$manLocalDir/FreeBSD-7.3-RELEASE/openssl/man",
|
||
'FreeBSD Ports 7.3-RELEASE', "$manLocalDir/FreeBSD-ports-7.3-RELEASE",
|
||
|
||
'FreeBSD 7.2-stable', "$manLocalDir/FreeBSD-7.2-stable",
|
||
'FreeBSD 7.2-RELEASE', "$manLocalDir/FreeBSD-7.2-RELEASE/man:$manLocalDir/FreeBSD-7.2-RELEASE/openssl/man",
|
||
'FreeBSD 7.1-RELEASE', "$manLocalDir/FreeBSD-7.1-RELEASE/man:$manLocalDir/FreeBSD-7.1-RELEASE/openssl/man",
|
||
'FreeBSD Ports 7.1-RELEASE', "$manLocalDir/FreeBSD-ports-7.1-RELEASE",
|
||
|
||
'FreeBSD 7.0-RELEASE', "$manLocalDir/FreeBSD-7.0-RELEASE/man:$manLocalDir/FreeBSD-7.0-RELEASE/openssl/man",
|
||
'FreeBSD Ports 7.0-RELEASE', "$manLocalDir/FreeBSD-ports-7.0-RELEASE",
|
||
|
||
'FreeBSD 6.4-stable', "$manLocalDir/FreeBSD-6.4-stable",
|
||
'FreeBSD 6.4-RELEASE',
|
||
"$manLocalDir/FreeBSD-6.4-RELEASE/man:$manLocalDir/FreeBSD-6.4-RELEASE/openssl/man",
|
||
'FreeBSD 6.3-RELEASE',
|
||
"$manLocalDir/FreeBSD-6.3-RELEASE/man:$manLocalDir/FreeBSD-6.3-RELEASE/openssl/man",
|
||
|
||
'FreeBSD 6.2-RELEASE',
|
||
"$manLocalDir/FreeBSD-6.2-RELEASE/man:$manLocalDir/FreeBSD-6.2-RELEASE/openssl/man",
|
||
'FreeBSD Ports 6.2-RELEASE', "$manLocalDir/FreeBSD-ports-6.2-RELEASE",
|
||
|
||
'FreeBSD 6.1-RELEASE',
|
||
"$manLocalDir/FreeBSD-6.1-RELEASE/man:$manLocalDir/FreeBSD-6.1-RELEASE/openssl/man",
|
||
'FreeBSD 6.0-RELEASE',
|
||
"$manLocalDir/FreeBSD-6.0-RELEASE/man:$manLocalDir/FreeBSD-6.0-RELEASE/openssl/man",
|
||
|
||
'FreeBSD 5.5-RELEASE',
|
||
"$manLocalDir/FreeBSD-5.5-RELEASE/man:$manLocalDir/FreeBSD-5.5-RELEASE/openssl/man",
|
||
'FreeBSD Ports 5.1-RELEASE', "$manLocalDir/FreeBSD-ports-5.1-RELEASE",
|
||
|
||
'FreeBSD 5.4-RELEASE',
|
||
"$manLocalDir/FreeBSD-5.4-RELEASE/man:$manLocalDir/FreeBSD-5.4-RELEASE/openssl/man",
|
||
'FreeBSD 5.3-RELEASE',
|
||
"$manLocalDir/FreeBSD-5.3-RELEASE/man:$manLocalDir/FreeBSD-5.3-RELEASE/openssl/man",
|
||
'FreeBSD 5.2.1-RELEASE',
|
||
"$manLocalDir/FreeBSD-5.2-RELEASE/man:$manLocalDir/FreeBSD-5.2-RELEASE/openssl/man",
|
||
'FreeBSD 5.2-RELEASE',
|
||
"$manLocalDir/FreeBSD-5.2-RELEASE/man:$manLocalDir/FreeBSD-5.2-RELEASE/openssl/man",
|
||
'FreeBSD 5.1-RELEASE',
|
||
"$manLocalDir/FreeBSD-5.1-RELEASE/man:$manLocalDir/FreeBSD-5.1-RELEASE/openssl/man",
|
||
'FreeBSD 5.0-RELEASE', "$manLocalDir/FreeBSD-5.0-RELEASE",
|
||
|
||
'FreeBSD 4.11-RELEASE',
|
||
"$manLocalDir/FreeBSD-4.11-RELEASE/man:$manLocalDir/FreeBSD-4.11-RELEASE/openssl/man:$manLocalDir/FreeBSD-4.11-RELEASE/perl/man",
|
||
'FreeBSD Ports 4.7-RELEASE', "$manLocalDir/FreeBSD-ports-4.7-RELEASE",
|
||
|
||
'FreeBSD 4.10-RELEASE',
|
||
"$manLocalDir/FreeBSD-4.10-RELEASE/man:$manLocalDir/FreeBSD-4.10-RELEASE/openssl/man:$manLocalDir/FreeBSD-4.10-RELEASE/perl/man",
|
||
'FreeBSD 4.9-RELEASE', "$manLocalDir/FreeBSD-4.9-RELEASE",
|
||
'FreeBSD 4.8-RELEASE', "$manLocalDir/FreeBSD-4.8-RELEASE",
|
||
'FreeBSD 4.7-RELEASE', "$manLocalDir/FreeBSD-4.7-RELEASE",
|
||
'FreeBSD 4.6.2-RELEASE', "$manLocalDir/FreeBSD-4.6.2-RELEASE",
|
||
'FreeBSD 4.6-RELEASE', "$manLocalDir/FreeBSD-4.6-RELEASE",
|
||
'FreeBSD 4.5-RELEASE', "$manLocalDir/FreeBSD-4.5-RELEASE",
|
||
'FreeBSD 4.4-RELEASE', "$manLocalDir/FreeBSD-4.4-RELEASE",
|
||
'FreeBSD 4.3-RELEASE', "$manLocalDir/FreeBSD-4.3-RELEASE",
|
||
'FreeBSD 4.2-RELEASE', "$manLocalDir/FreeBSD-4.2-RELEASE",
|
||
'FreeBSD 4.1.1-RELEASE', "$manLocalDir/FreeBSD-4.1.1-RELEASE",
|
||
'FreeBSD 4.1-RELEASE', "$manLocalDir/FreeBSD-4.1-RELEASE",
|
||
'FreeBSD 4.0-RELEASE', "$manLocalDir/FreeBSD-4.0-RELEASE",
|
||
'FreeBSD 3.5.1-RELEASE', "$manLocalDir/FreeBSD-3.5.1-RELEASE",
|
||
'FreeBSD 3.4-RELEASE', "$manLocalDir/FreeBSD-3.4-RELEASE",
|
||
'FreeBSD 3.3-RELEASE', "$manLocalDir/FreeBSD-3.3-RELEASE",
|
||
'FreeBSD 3.2-RELEASE', "$manLocalDir/FreeBSD-3.2-RELEASE",
|
||
'FreeBSD 3.1-RELEASE', "$manLocalDir/FreeBSD-3.1-RELEASE",
|
||
'FreeBSD 3.0-RELEASE', "$manLocalDir/FreeBSD-3.0-RELEASE",
|
||
'FreeBSD 2.2.5-RELEASE', "$manLocalDir/FreeBSD-2.2.5-RELEASE",
|
||
'FreeBSD 2.2.6-RELEASE', "$manLocalDir/FreeBSD-2.2.6-RELEASE",
|
||
'FreeBSD 2.2.7-RELEASE', "$manLocalDir/FreeBSD-2.2.7-RELEASE",
|
||
'FreeBSD 2.2.8-RELEASE', "$manLocalDir/FreeBSD-2.2.8-RELEASE",
|
||
'FreeBSD 2.2.2-RELEASE', "$manLocalDir/FreeBSD-2.2.2-RELEASE",
|
||
'FreeBSD 2.2.1-RELEASE', "$manLocalDir/FreeBSD-2.2.1-RELEASE",
|
||
'FreeBSD 2.1.7.1-RELEASE', "$manLocalDir/FreeBSD-2.1.7.1-RELEASE",
|
||
'FreeBSD 2.1.6.1-RELEASE', "$manLocalDir/FreeBSD-2.1.6.1-RELEASE",
|
||
'FreeBSD 2.1.5-RELEASE', "$manLocalDir/FreeBSD-2.1.5-RELEASE",
|
||
'FreeBSD 2.1.0-RELEASE', "$manLocalDir/FreeBSD-2.1.0-RELEASE",
|
||
'FreeBSD 2.0.5-RELEASE', "$manLocalDir/FreeBSD-2.0.5-RELEASE",
|
||
'FreeBSD 2.0-RELEASE', "$manLocalDir/FreeBSD-2.0-RELEASE",
|
||
'FreeBSD 1.1.5.1-RELEASE', "$manLocalDir/FreeBSD-1.1.5.1-RELEASE",
|
||
'FreeBSD 1.1-RELEASE', "$manLocalDir/FreeBSD-1.1-RELEASE",
|
||
'FreeBSD 1.0-RELEASE', "$manLocalDir/FreeBSD-1.0-RELEASE",
|
||
|
||
'OpenBSD 2.0', "$manLocalDir/OpenBSD-2.0",
|
||
'OpenBSD 2.1', "$manLocalDir/OpenBSD-2.1",
|
||
'OpenBSD 2.2', "$manLocalDir/OpenBSD-2.2",
|
||
'OpenBSD 2.3', "$manLocalDir/OpenBSD-2.3",
|
||
'OpenBSD 2.4', "$manLocalDir/OpenBSD-2.4",
|
||
'OpenBSD 2.5', "$manLocalDir/OpenBSD-2.5",
|
||
'OpenBSD 2.6', "$manLocalDir/OpenBSD-2.6",
|
||
'OpenBSD 2.7', "$manLocalDir/OpenBSD-2.7",
|
||
'OpenBSD 2.8', "$manLocalDir/OpenBSD-2.8",
|
||
'OpenBSD 2.9', "$manLocalDir/OpenBSD-2.9",
|
||
'OpenBSD 3.0', "$manLocalDir/OpenBSD-3.0",
|
||
'OpenBSD 3.1', "$manLocalDir/OpenBSD-3.1",
|
||
'OpenBSD 3.2', "$manLocalDir/OpenBSD-3.2",
|
||
'OpenBSD 3.3', "$manLocalDir/OpenBSD-3.3",
|
||
'OpenBSD 3.4',
|
||
"$manLocalDir/OpenBSD-3.4/share/man:$manLocalDir/OpenBSD-3.4/X11R6/man",
|
||
'OpenBSD 3.5',
|
||
"$manLocalDir/OpenBSD-3.5/share/man:$manLocalDir/OpenBSD-3.5/X11R6/man",
|
||
'OpenBSD 3.6',
|
||
"$manLocalDir/OpenBSD-3.6/share/man:$manLocalDir/OpenBSD-3.6/X11R6/man",
|
||
'OpenBSD 3.7', "$manLocalDir/OpenBSD-3.7",
|
||
'OpenBSD 3.8', "$manLocalDir/OpenBSD-3.8",
|
||
'OpenBSD 3.9', "$manLocalDir/OpenBSD-3.9",
|
||
'OpenBSD 4.0', "$manLocalDir/OpenBSD-4.0",
|
||
'OpenBSD 4.1', "$manLocalDir/OpenBSD-4.1",
|
||
'OpenBSD 4.2', "$manLocalDir/OpenBSD-4.2",
|
||
'OpenBSD 4.3', "$manLocalDir/OpenBSD-4.3",
|
||
'OpenBSD 4.4', "$manLocalDir/OpenBSD-4.4",
|
||
'OpenBSD 4.5', "$manLocalDir/OpenBSD-4.5",
|
||
'OpenBSD 4.6', "$manLocalDir/OpenBSD-4.6",
|
||
'OpenBSD 4.7', "$manLocalDir/OpenBSD-4.7",
|
||
|
||
#'NetBSD 0.9', "$manLocalDir/NetBSD-0.9",
|
||
'NetBSD 1.0', "$manLocalDir/NetBSD-1.0",
|
||
'NetBSD 1.1', "$manLocalDir/NetBSD-1.1",
|
||
'NetBSD 1.2', "$manLocalDir/NetBSD-1.2",
|
||
'NetBSD 1.2.1', "$manLocalDir/NetBSD-1.2.1",
|
||
'NetBSD 1.3', "$manLocalDir/NetBSD-1.3",
|
||
'NetBSD 1.3.1', "$manLocalDir/NetBSD-1.3.1",
|
||
'NetBSD 1.3.2', "$manLocalDir/NetBSD-1.3.2",
|
||
'NetBSD 1.3.3', "$manLocalDir/NetBSD-1.3.3",
|
||
'NetBSD 1.4', "$manLocalDir/NetBSD-1.4",
|
||
'NetBSD 1.4.1', "$manLocalDir/NetBSD-1.4.1",
|
||
'NetBSD 1.4.2', "$manLocalDir/NetBSD-1.4.2",
|
||
'NetBSD 1.4.3', "$manLocalDir/NetBSD-1.4.3",
|
||
'NetBSD 1.5', "$manLocalDir/NetBSD-1.5",
|
||
'NetBSD 1.5.1', "$manLocalDir/NetBSD-1.5.1",
|
||
'NetBSD 1.5.2', "$manLocalDir/NetBSD-1.5.2",
|
||
'NetBSD 1.5.3', "$manLocalDir/NetBSD-1.5.3",
|
||
'NetBSD 1.6', "$manLocalDir/NetBSD-1.6",
|
||
'NetBSD 1.6.1', "$manLocalDir/NetBSD-1.6.1",
|
||
'NetBSD 1.6.2', "$manLocalDir/NetBSD-1.6.2",
|
||
'NetBSD 2.0', "$manLocalDir/NetBSD-2.0",
|
||
'NetBSD 2.0.2', "$manLocalDir/NetBSD-2.0.2",
|
||
'NetBSD 2.1', "$manLocalDir/NetBSD-2.1",
|
||
'NetBSD 3.0', "$manLocalDir/NetBSD-3.0",
|
||
'NetBSD 3.1', "$manLocalDir/NetBSD-3.1",
|
||
'NetBSD 4.0', "$manLocalDir/NetBSD-4.0",
|
||
'NetBSD 4.0.1', "$manLocalDir/NetBSD-4.0.1",
|
||
'NetBSD 5.0', "$manLocalDir/NetBSD-5.0",
|
||
|
||
'2.8 BSD', "$manLocalDir/2.8BSD",
|
||
'2.9.1 BSD', "$manLocalDir/2.9.1BSD",
|
||
'2.10 BSD', "$manLocalDir/2.10BSD",
|
||
'2.11 BSD', "$manLocalDir/2.11BSD",
|
||
'386BSD 0.0', "$manLocalDir/386BSD-0.0",
|
||
'386BSD 0.1', "$manLocalDir/386BSD-0.1",
|
||
'4.3BSD Reno', "$manLocalDir/4.3BSD-Reno",
|
||
'4.3BSD NET/2', "$manLocalDir/net2",
|
||
'4.4BSD Lite2', "$manLocalDir/4.4BSD-Lite2",
|
||
|
||
'Linux Slackware 3.1', "$manLocalDir/Slackware-3.1",
|
||
'Red Hat Linux/i386 4.2', "$manLocalDir/RedHat-4.2",
|
||
'Red Hat Linux/i386 5.0', "$manLocalDir/RedHat-5.0",
|
||
'Red Hat Linux/i386 5.2', "$manLocalDir/RedHat-5.2-i386",
|
||
'Red Hat Linux/i386 6.1', "$manLocalDir/RedHat-6.1-i386",
|
||
'Red Hat Linux/i386 6.2', "$manLocalDir/RedHat-6.2-i386",
|
||
'Red Hat Linux/i386 7.0', "$manLocalDir/RedHat-7.0-i386",
|
||
'Red Hat Linux/i386 7.1', "$manLocalDir/RedHat-7.1-i386",
|
||
'Red Hat Linux/i386 7.2', "$manLocalDir/RedHat-7.2-i386",
|
||
'Red Hat Linux/i386 7.3', "$manLocalDir/RedHat-7.3-i386",
|
||
'Red Hat Linux/i386 8.0', "$manLocalDir/RedHat-8.0-i386",
|
||
'Red Hat Linux/i386 9', "$manLocalDir/RedHat-9-i386",
|
||
|
||
'CentOS Linux/i386 3.9', "$manLocalDir/CentOS-3.9",
|
||
'CentOS Linux/i386 4.8', "$manLocalDir/CentOS-4.8",
|
||
'CentOS Linux/i386 5.4', "$manLocalDir/CentOS-5.4",
|
||
|
||
'SuSE Linux/i386 4.3', "$manLocalDir/SuSE-4.3-i386",
|
||
'SuSE Linux/i386 5.0', "$manLocalDir/SuSE-5.0-i386",
|
||
'SuSE Linux/i386 5.2', "$manLocalDir/SuSE-5.2-i386",
|
||
'SuSE Linux/i386 5.3', "$manLocalDir/SuSE-5.3-i386",
|
||
'SuSE Linux/i386 6.0', "$manLocalDir/SuSE-6.0-i386",
|
||
'SuSE Linux/i386 6.1', "$manLocalDir/SuSE-6.1-i386",
|
||
'SuSE Linux/i386 6.3', "$manLocalDir/SuSE-6.3-i386",
|
||
'SuSE Linux/i386 6.4', "$manLocalDir/SuSE-6.4-i386",
|
||
'SuSE Linux/i386 7.0', "$manLocalDir/SuSE-7.0-i386",
|
||
'SuSE Linux/i386 7.1', "$manLocalDir/SuSE-7.1-i386",
|
||
'SuSE Linux/i386 7.2', "$manLocalDir/SuSE-7.2-i386",
|
||
'SuSE Linux/i386 7.3', "$manLocalDir/SuSE-7.3-i386",
|
||
'SuSE Linux/i386 8.0', "$manLocalDir/SuSE-8.0-i386",
|
||
'SuSE Linux/i386 8.1', "$manLocalDir/SuSE-8.1-i386",
|
||
'SuSE Linux/i386 8.2', "$manLocalDir/SuSE-8.2-i386",
|
||
'SuSE Linux/i386 9.2', "$manLocalDir/SuSE-9.2-i386",
|
||
'SuSE Linux/i386 9.3', "$manLocalDir/SuSE-9.3-i386",
|
||
'SuSE Linux/i386 10.0', "$manLocalDir/SuSE-10.0",
|
||
'SuSE Linux/i386 10.1', "$manLocalDir/SuSE-10.1",
|
||
'SuSE Linux/i386 10.2', "$manLocalDir/SuSE-10.2",
|
||
'SuSE Linux/i386 10.3', "$manLocalDir/SuSE-10.3",
|
||
'SuSE Linux/i386 11.0', "$manLocalDir/SuSE-11.0",
|
||
'SuSE Linux/i386 11.1', "$manLocalDir/SuSE-11.1",
|
||
'SuSE Linux/i386 11.2', "$manLocalDir/SuSE-11.2",
|
||
|
||
'SuSE Linux/i386 ES 10 SP1', "$manLocalDir/SLES-10-SP1-i386",
|
||
|
||
'HP-UX 11.22', "$manLocalDir/HP-UX-11.22",
|
||
'HP-UX 11.20', "$manLocalDir/HP-UX-11.20",
|
||
'HP-UX 11.11', "$manLocalDir/HP-UX-11.11",
|
||
'HP-UX 11.00', "$manLocalDir/HP-UX-11.00",
|
||
'HP-UX 10.20', "$manLocalDir/HP-UX-10.20",
|
||
'HP-UX 10.10', "$manLocalDir/HP-UX-10.10",
|
||
'HP-UX 10.01', "$manLocalDir/HP-UX-10.01",
|
||
|
||
'SunOS 5.10', "$manLocalDir/SunOS-5.10",
|
||
'SunOS 5.9', "$manLocalDir/SunOS-5.9",
|
||
'SunOS 5.8', "$manLocalDir/SunOS-5.8",
|
||
'SunOS 5.7', "$manLocalDir/SunOS-5.7",
|
||
'SunOS 5.6', "$manLocalDir/SunOS-5.6",
|
||
'SunOS 5.5.1', "$manLocalDir/SunOS-5.5.1",
|
||
'SunOS 4.1.3', "$manLocalDir/SunOS-4.1.3",
|
||
|
||
#'XFree86 3.2', "$manLocalDir/XFree86-3.2",
|
||
'XFree86 2.1', "$manLocalDir/XFree86-2.1",
|
||
'XFree86 3.3', "$manLocalDir/XFree86-3.3",
|
||
'XFree86 3.3.6', "$manLocalDir/XFree86-3.3.6",
|
||
'XFree86 4.0', "$manLocalDir/XFree86-4.0",
|
||
'XFree86 4.0.1', "$manLocalDir/XFree86-4.0.1",
|
||
'XFree86 4.0.2', "$manLocalDir/XFree86-4.0.2",
|
||
'XFree86 4.1.0', "$manLocalDir/XFree86-4.1.0",
|
||
'XFree86 4.2.0', "$manLocalDir/XFree86-4.2.0",
|
||
'XFree86 4.2.99.3', "$manLocalDir/XFree86-4.2.99.3",
|
||
'XFree86 4.3.0', "$manLocalDir/XFree86-4.3.0",
|
||
'XFree86 4.4.0', "$manLocalDir/XFree86-4.4.0",
|
||
'XFree86 4.5.0', "$manLocalDir/XFree86-4.5.0",
|
||
'XFree86 4.6.0', "$manLocalDir/XFree86-4.6.0",
|
||
'XFree86 4.7.0', "$manLocalDir/XFree86-4.7.0",
|
||
|
||
'X11R6.7.0', "$manLocalDir/X11R6.7.0",
|
||
'X11R6.8.2', "$manLocalDir/X11R6.8.2",
|
||
'X11R6.9.0', "$manLocalDir/X11R6.9.0",
|
||
'X11R7.2', "$manLocalDir/X11R7.2",
|
||
'X11R7.3.2', "$manLocalDir/X11R7.3.2",
|
||
'X11R7.4', "$manLocalDir/X11R7.4",
|
||
|
||
'ULTRIX 4.2', "$manLocalDir/ULTRIX-4.2",
|
||
'OSF1 V4.0/alpha', "$manLocalDir/OSF1-V4.0-alpha",
|
||
'OSF1 V5.1/alpha', "$manLocalDir/OSF1-V5.1-alpha",
|
||
|
||
'Plan 9', "$manLocalDir/plan9",
|
||
'Minix 2.0', "$manLocalDir/Minix-2.0",
|
||
'Unix Seventh Edition', "$manLocalDir/v7man",
|
||
"Darwin 1.3.1/x86", "$manLocalDir/Darwin-1.3.1-x86",
|
||
"Darwin 1.4.1/x86", "$manLocalDir/Darwin-1.4.1-x86",
|
||
"Darwin 6.0.2/x86", "$manLocalDir/Darwin-6.0.2-x86",
|
||
"Darwin 7.0.1", "$manLocalDir/Darwin-7.0.1",
|
||
"Darwin 8.0.1/ppc", "$manLocalDir/Darwin-8.0.1-ppc",
|
||
"OpenDarwin 20030208pre4/ppc", "$manLocalDir/OpenDarwin-20030208pre4-ppc",
|
||
"OpenDarwin 6.6.1/x86", "$manLocalDir/OpenDarwin-6.6.1-x86",
|
||
"OpenDarwin 6.6.2/x86", "$manLocalDir/OpenDarwin-6.6.2-x86",
|
||
"OpenDarwin 7.2.1", "$manLocalDir/OpenDarwin-7.2.1",
|
||
);
|
||
|
||
my @no_pdf_output = (
|
||
'386BSD 0.0',
|
||
'386BSD 0.1',
|
||
'4.4BSD Lite2',
|
||
'NetBSD 0.9',
|
||
'NetBSD 1.0',
|
||
'NetBSD 1.1',
|
||
'NetBSD 1.2',
|
||
'NetBSD 1.2.1',
|
||
'OpenBSD 2.0',
|
||
'OpenBSD 2.1',
|
||
'OpenBSD 2.2',
|
||
'OpenBSD 2.3',
|
||
'OpenBSD 2.4',
|
||
'OpenBSD 2.5',
|
||
'OpenBSD 2.6',
|
||
'OpenBSD 2.7',
|
||
'OpenBSD 2.8',
|
||
'OpenBSD 2.9',
|
||
'OpenBSD 3.0',
|
||
'OpenBSD 3.1',
|
||
'OpenBSD 3.2',
|
||
'OpenBSD 3.3',
|
||
'OpenBSD 3.4',
|
||
'OpenBSD 3.5',
|
||
'OpenBSD 3.6',
|
||
'OpenBSD 3.7',
|
||
'OpenBSD 3.8',
|
||
'OpenBSD 3.9',
|
||
'OpenBSD 4.0',
|
||
'OpenBSD 4.1',
|
||
'OpenBSD 4.2',
|
||
'OpenBSD 4.3',
|
||
'OpenBSD 4.4',
|
||
'OpenBSD 4.5',
|
||
'OpenBSD 4.6',
|
||
'OpenBSD 4.7',
|
||
);
|
||
|
||
my %no_pdf_output = map { $_ => 1 } @no_pdf_output;
|
||
|
||
# delete not existing releases
|
||
while ( ( $key, $val ) = each %manPath ) {
|
||
my $counter = 0;
|
||
|
||
# if the manpath contains colons, at least one directory must exists
|
||
foreach ( split( /:/, $val ) ) {
|
||
$counter++ if -d;
|
||
}
|
||
|
||
# give up and delete release
|
||
if ( !$counter && $key ne $manPathDefault ) {
|
||
delete $manPath{"$key"};
|
||
warn qq{man.cgi Remove release "$key"\n} if $debug >= 2;
|
||
}
|
||
}
|
||
|
||
# keywords must be in lower cases.
|
||
%manPathAliases = (
|
||
'freebsd', 'FreeBSD 8.0-RELEASE',
|
||
'freebsd-release', 'FreeBSD 8.0-RELEASE',
|
||
|
||
'freebsd-stable', 'FreeBSD 7.2-stable',
|
||
'freebsd-stable8', 'FreeBSD 8.0-stable',
|
||
'freebsd-stable7', 'FreeBSD 7.2-stable',
|
||
'freebsd-stable6', 'FreeBSD 6.4-stable',
|
||
|
||
'freebsd-current', 'FreeBSD 9-current',
|
||
'freebsd-release-ports', 'FreeBSD 8.0-RELEASE and Ports',
|
||
|
||
'slackware', 'Linux Slackware 3.1',
|
||
'redhat', 'Red Hat Linux/i386 9',
|
||
'centos', 'CentOS Linux/i386 5.4',
|
||
'suse', 'SuSE Linux/i386 11.2',
|
||
'linux', 'SuSE Linux/i386 11.2',
|
||
'darwin', 'Darwin 8.0.1/ppc',
|
||
'opendarwin', 'OpenDarwin 7.2.1',
|
||
'macosx', 'Darwin 8.0.1/ppc',
|
||
|
||
'netbsd', 'NetBSD 5.0',
|
||
'openbsd', 'OpenBSD 4.7',
|
||
'v7', 'Unix Seventh Edition',
|
||
'v7man', 'Unix Seventh Edition',
|
||
'x11', 'X11R7.4',
|
||
'xfree86', 'XFree86 4.7.0',
|
||
'ultrix', 'ULTRIX 4.2',
|
||
'hpux', 'HP-UX 11.22',
|
||
'solaris', 'SunOS 5.10',
|
||
'sunos5', 'SunOS 5.10',
|
||
'sunos4', 'SunOS 4.1.3',
|
||
'sunos', 'SunOS 4.1.3',
|
||
'freebsd ports', 'FreeBSD Ports',
|
||
'ports', 'FreeBSD Ports',
|
||
'plan9', 'Plan 9',
|
||
'osf1', 'OSF1 V5.1/alpha',
|
||
'true64', 'OSF1 V5.1/alpha',
|
||
);
|
||
|
||
foreach ( sort keys %manPathAliases ) {
|
||
|
||
# delete non-existing aliases
|
||
if ( !defined( $manPath{ $manPathAliases{$_} } ) ) {
|
||
undef $manPathAliases{$_};
|
||
next;
|
||
}
|
||
|
||
# add aliases, replases spaces with dashes
|
||
if (/\s/) {
|
||
local ($key) = $_;
|
||
$key =~ s/\s+/-/g;
|
||
$manPathAliases{$key} = $manPathAliases{$_};
|
||
}
|
||
}
|
||
|
||
@sections = keys %sections;
|
||
shift @sections; # all but the "" entry
|
||
$sections = join( "|", @sections ); # sections regexp
|
||
|
||
# mailto - Author
|
||
# webmaster - who run this service
|
||
$mailto = 'wosch@FreeBSD.org';
|
||
$mailtoURL = 'http://wolfram.schneider.org';
|
||
$mailtoURL = "mailto:$mailto" if !$mailtoURL;
|
||
$full_url = 'http://www.freebsd.org/cgi/man.cgi';
|
||
$want_to_link_to_this_page = 1;
|
||
|
||
&secure_env;
|
||
|
||
# CGI Interface -- runs at load time
|
||
&do_man( &env('SCRIPT_NAME'), &env('PATH_INFO'), &env('QUERY_STRING') )
|
||
unless defined($main'plexus_configured);
|
||
|
||
$enable_include_links = 0;
|
||
$enable_mailto_links = 0;
|
||
|
||
#
|
||
# end of config
|
||
#######################################################################################
|
||
|
||
sub html_footer {
|
||
my %args = @_;
|
||
|
||
print
|
||
qq{<a href="$BASE?manpath=$m">home</a> | <a href="$BASE/help.html">help</a> \n}
|
||
if !$args{'no_home_link'};
|
||
|
||
if (cgi_style::HAS_FREEBSD_CGI_STYLE) {
|
||
print q{<hr noshade="noshade" />};
|
||
print &cgi_style::html_footer;
|
||
}
|
||
else {
|
||
print "</body>\n</html>\n";
|
||
}
|
||
}
|
||
|
||
sub html_header {
|
||
my ( $title, $base ) = @_;
|
||
|
||
my $html_meta = q|
|
||
<meta name="robots" content="nofollow" />
|
||
<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type" />
|
||
<link rel="search" type="application/opensearchdescription+xml" href="http://www.freebsd.org/search/opensearch/man.xml" title="FreeBSD Manpages" />
|
||
<style type="text/css">
|
||
<!--
|
||
b { color: #996600; }
|
||
i { color: #008000; }
|
||
-->
|
||
</style>
|
||
|;
|
||
|
||
return &html_header2( $title, $html_meta )
|
||
if !cgi_style::HAS_FREEBSD_CGI_STYLE;
|
||
|
||
( my $header = &cgi_style::short_html_header( $title, 1 ) ) =~
|
||
s,<head>,<head>\n$html_meta,s;
|
||
|
||
$header =~ s,^Content-type:\s+\S+\s+,,s;
|
||
$header =~ s,<head>,<head>\n<base href="$base" />,s if $base;
|
||
return $header;
|
||
}
|
||
|
||
# Plexus Native Interface
|
||
sub do_man {
|
||
local ( $BASE, $path, $form ) = @_;
|
||
local ( $_, %form, $query, $name, $section, $apropos );
|
||
|
||
local ($u) = $BASE;
|
||
|
||
return &faq_output($u) if ( $path =~ /\/(faq|help)\.html$/ );
|
||
return &get_the_sources if ( $path =~ /source$/ );
|
||
|
||
return &include_output($path)
|
||
if ( $enable_include_links && $path =~ m%^/usr/include/% && -f $path );
|
||
|
||
return &indexpage if ( $form eq "" );
|
||
|
||
&decode_form( $form, *form, 0 );
|
||
|
||
$format = $form{'format'};
|
||
$format = 'html' if $format !~ /^(ps|pdf|ascii|latin1)$/;
|
||
|
||
# remove trailing spaces for dumb users
|
||
$form{'query'} =~ s/\s+$//;
|
||
$form{'query'} =~ s/^\s+//;
|
||
|
||
$name = $query = $form{'query'};
|
||
$section = $form{'sektion'};
|
||
$apropos = $form{'apropos'};
|
||
$alttitle = $form{'title'};
|
||
$manpath = $form{'manpath'};
|
||
|
||
if ( $manpath =~ /^([0-9A-Za-z \.\-\/]+)$/ ) {
|
||
$manpath = $1;
|
||
}
|
||
else {
|
||
$manpath = '';
|
||
}
|
||
|
||
if ( !$manpath ) {
|
||
$manpath = $manPathDefault;
|
||
}
|
||
elsif ( !$manPath{$manpath} ) {
|
||
local ($m) = ( $manpath =~ y/A-Z/a-z/ );
|
||
if ( $manPath{ $manPathAliases{$manpath} } ) {
|
||
$manpath = $manPathAliases{$manpath};
|
||
}
|
||
else {
|
||
$manpath = $manPathDefault;
|
||
}
|
||
}
|
||
|
||
$format = 'html' if $no_pdf_output{$manpath} && $format =~ /^(ps|pdf)$/;
|
||
|
||
local ($fform) = &dec($form);
|
||
if ( $fform =~ m%^([a-zA-Z_\-\.:]+)$% ) {
|
||
return &man( $1, '' );
|
||
}
|
||
elsif ( $fform =~ m%^([a-zA-Z_\-\.:]+)\(([0-9a-zA-Z]+)\)$% ) {
|
||
return &man( $1, $2 );
|
||
}
|
||
|
||
# download a man hierarchie as gzip'd tar file
|
||
return &download if ( $apropos > 1 );
|
||
|
||
# empty query
|
||
return &indexpage if ( $manpath && $form !~ /query=/ );
|
||
|
||
$section = "" if $section eq "ALL" || $section eq '';
|
||
|
||
if ( !$apropos && $query =~ m/^(.*)\(([^\)]*)\)/ ) {
|
||
$name = $1;
|
||
$section = $2;
|
||
}
|
||
if ( $name =~ /^([\w\-:\.]+)$/ ) {
|
||
$name = $1;
|
||
}
|
||
else { $name = ''; }
|
||
|
||
if ( $section =~ /^([\w\-\.]+)$/ ) {
|
||
$section = $1;
|
||
}
|
||
else { $section = ''; }
|
||
|
||
$apropos ? &apropos($query) : &man( $name, $section );
|
||
}
|
||
|
||
# --------------------- support routines ------------------------
|
||
|
||
sub debug {
|
||
&http_header("text/plain");
|
||
print @_, "\n----------\n\n\n";
|
||
}
|
||
|
||
sub get_the_sources {
|
||
local ($file) = $0;
|
||
|
||
open( R, $file ) || &mydie("open $file: $!\n");
|
||
print "Content-type: text/plain\n\n";
|
||
while (<R>) { print }
|
||
close R;
|
||
exit;
|
||
}
|
||
|
||
# download a manual directory as gzip'd tar archive
|
||
sub download {
|
||
|
||
$| = 1;
|
||
my $filename = $manpath;
|
||
$filename =~ s/\s+/_/;
|
||
$filename = &encode_url($filename);
|
||
$filename .= '.tgz';
|
||
|
||
print qq{Content-type: application/x-tgz\n}
|
||
. qq{Content-disposition: attachment; filename="$filename"\n} . "\n";
|
||
|
||
local (@m);
|
||
local ($m) = $manPath{"$manpath"};
|
||
foreach ( split( /:/, $m ) ) {
|
||
push( @m, $_ . '/' ) if s%^$manLocalDir/?%%;
|
||
}
|
||
|
||
chdir($manLocalDir) || do {
|
||
print "chdir: $!\n";
|
||
exit(0);
|
||
};
|
||
|
||
$m = join( " ", @m );
|
||
|
||
#warn "find $m -print | cpio -o -H tar 2>/dev/null | gzip -cqf";
|
||
|
||
sleep 1;
|
||
system("find $m -print | cpio -o -H tar 2>/dev/null | gzip -cqf");
|
||
exit(0);
|
||
}
|
||
|
||
sub http_header {
|
||
local ( $content_type, $filename ) = @_;
|
||
|
||
print qq{Content-disposition: inline; filename="$filename"\n}
|
||
if $filename;
|
||
|
||
if ( defined($main'plexus_configured) ) {
|
||
&main'MIME_header( 'ok', $content_type );
|
||
}
|
||
else {
|
||
print "Content-type: $content_type\n\n";
|
||
}
|
||
}
|
||
|
||
sub env { defined( $main'ENV{ $_[0] } ) ? $main'ENV{ $_[0] } : undef; }
|
||
|
||
sub apropos {
|
||
local ($query) = @_;
|
||
local ( $_, $title, $head, *APROPOS );
|
||
local ( $names, $section, $msg, $key );
|
||
local ($prefix);
|
||
|
||
$prefix = "Apropos ";
|
||
if ($alttitle) {
|
||
$prefix = "";
|
||
$title = &encode_title($alttitle);
|
||
$head = &encode_data($alttitle);
|
||
}
|
||
else {
|
||
$title = &encode_title($query);
|
||
$head = &encode_data($query);
|
||
}
|
||
|
||
&http_header("text/html");
|
||
print &html_header("Apropos $title");
|
||
print "<h1>", $www{'head'}, "</h1>\n\n";
|
||
&formquery;
|
||
|
||
local ($mpath) = $manPath{$manpath};
|
||
if ( $debug >= 2 ) {
|
||
foreach my $dir ( split( /:/, $mpath ) ) {
|
||
my $whatis = $dir . '/whatis';
|
||
warn "$manpath: no whatis file found: $whatis\n" if !-f $whatis;
|
||
}
|
||
}
|
||
|
||
open( APROPOS, "env MANPATH=$mpath $command{'man'} -k . |" ) || do {
|
||
warn "$0: Cannot open whatis database for `$mpath'\n";
|
||
print "Cannot open whatis database for `$mpath'\n";
|
||
print "</dl>\n</body>\n</html>\n";
|
||
return;
|
||
};
|
||
|
||
local ($q) = $query;
|
||
$q =~ s/(\W)/\\W/g;
|
||
local ($acounter) = 0;
|
||
|
||
print qq{<dl>\n};
|
||
while (<APROPOS>) {
|
||
next if !/$q/oi;
|
||
$acounter++;
|
||
|
||
# matches whatis.db lines: name[, name ...] (sect) - msg
|
||
$names = $section = $msg = $key = undef;
|
||
( $key, $section ) = m/^([^()]+)\(([^)]*)\)/;
|
||
$key =~ s/\s+$//;
|
||
$key =~ s/.*\s+//;
|
||
( $names, $msg ) = m/^(.*\))\s+-\s+(.*)/;
|
||
print "<dt><a href=\"$BASE?query=", &encode_url($key), "&sektion=",
|
||
&encode_url($section), "&apropos=0", "&manpath=",
|
||
&encode_url($manpath), "\">", &encode_data("$names"),
|
||
"</a>\n</dt>\n<dd>", &encode_data($msg), "</dd>\n";
|
||
}
|
||
print qq{</dl>\n};
|
||
close(APROPOS);
|
||
|
||
if ( !$acounter ) {
|
||
print "Sorry, no data found for `$query'.\n";
|
||
print qq{You may look for other }
|
||
. qq{<a href="../../search/">FreeBSD Search Services</a>.\n};
|
||
}
|
||
&html_footer;
|
||
}
|
||
|
||
sub to_filename {
|
||
my %args = @_;
|
||
|
||
my $name = exists $args{'name'} ? $args{'name'} : 'manpage';
|
||
my $section = exists $args{'section'}
|
||
&& $args{'section'} ne "" ? $args{'section'} : '0';
|
||
my $format = exists $args{'format'} ? $args{'format'} : 'unkown';
|
||
|
||
my $filename = qq{$name.$section.$format};
|
||
$filename =~ s/[^\w\-\.]/_/g;
|
||
$filename =~ s/_+/_/g;
|
||
|
||
return $filename;
|
||
}
|
||
|
||
sub man {
|
||
local ( $name, $section ) = @_;
|
||
local ( $_, $title, $head, *MAN );
|
||
local ( $html_name, $html_section, $prefix );
|
||
local (@manargs);
|
||
local ($query) = $name;
|
||
|
||
# $section =~ s/^([0-9ln]).*$/$1/;
|
||
$section =~ tr/A-Z/a-z/;
|
||
|
||
$prefix = "Man ";
|
||
if ($alttitle) {
|
||
$prefix = "";
|
||
$title = &encode_title($alttitle);
|
||
$head = &encode_data($alttitle);
|
||
}
|
||
elsif ($section) {
|
||
$title = &encode_title("${name}($section)");
|
||
$head = &encode_data("${name}($section)");
|
||
}
|
||
else {
|
||
$title = &encode_title("${name}");
|
||
$head = &encode_data("${name}");
|
||
}
|
||
|
||
if ( $format eq "html" ) {
|
||
&http_header("text/html");
|
||
print &html_header("$title");
|
||
print "<h1>", $www{'head'}, "</h1>\n\n";
|
||
&formquery;
|
||
print "<pre>\n";
|
||
}
|
||
else {
|
||
|
||
#$format =~ /^(ps|ascii|latin1)$/')
|
||
$ENV{'NROFF_FORMAT'} = $format;
|
||
|
||
# Content-encoding: x-gzip
|
||
if ( $format eq "ps" ) {
|
||
&http_header(
|
||
"application/postscript",
|
||
&to_filename(
|
||
'name' => $name,
|
||
'section' => $section,
|
||
'format' => 'ps'
|
||
)
|
||
);
|
||
}
|
||
elsif ( $format eq "pdf" ) {
|
||
&http_header(
|
||
"application/pdf",
|
||
&to_filename(
|
||
'name' => $name,
|
||
'section' => $section,
|
||
'format' => 'pdf'
|
||
)
|
||
);
|
||
}
|
||
else {
|
||
&http_header("text/plain");
|
||
}
|
||
}
|
||
|
||
$html_name = &encode_data($name);
|
||
$html_section = &encode_data($section);
|
||
|
||
#print Dumper($sectionpath);
|
||
#print "yy $section yy $manpath\n";
|
||
if ( $name =~ /^\s*$/ ) {
|
||
print "Empty input, no man page given.\n";
|
||
return;
|
||
}
|
||
|
||
if ( index( $name, '*' ) != -1 ) {
|
||
print "Invalid character input '*': $name\n";
|
||
return;
|
||
}
|
||
|
||
if ( $section !~ /^[0-9ln]\w*$/ && $section ne '' ) {
|
||
print "Sorry, section `$section' is not valid\n";
|
||
return;
|
||
}
|
||
|
||
if ( !$section ) {
|
||
if ( $sectionpath->{$manpath} ) {
|
||
$section = "-S " . $sectionpath->{$manpath}{'path'};
|
||
}
|
||
else {
|
||
$section = '';
|
||
}
|
||
}
|
||
else {
|
||
if ( $sectionpath->{$manpath}{$section} ) {
|
||
$section = "-S " . $sectionpath->{$manpath}{$section};
|
||
}
|
||
else {
|
||
my $s = substr( $section, 0, 1 );
|
||
|
||
# create a colon separated list of sections
|
||
$section = "-S $section" . ( $s ne $section ? ":$s" : '' );
|
||
}
|
||
}
|
||
|
||
@manargs = split( / /, $section );
|
||
if ($manpath) {
|
||
if ( $manPath{$manpath} ) {
|
||
unshift( @manargs, ( '-M', $manPath{$manpath} ) );
|
||
&groff_path( $manPath{$manpath} );
|
||
}
|
||
elsif ( $manpath{ &dec($manpath) } ) {
|
||
unshift( @manargs, ( '-M', $manPath{ &dec($manpath) } ) );
|
||
&groff_path( $manPath{ &dec($manpath) } );
|
||
}
|
||
else {
|
||
|
||
# unset invalid manpath
|
||
print "x $manpath x\n";
|
||
print "x " . &dec($manpath) . "x\n";
|
||
undef $manpath;
|
||
}
|
||
}
|
||
|
||
if ( $format =~ /^(ps|pdf)$/ ) {
|
||
push( @manargs, '-t' );
|
||
}
|
||
|
||
warn "X $command{'man'} @manargs -- x $name x\n" if $debug >= 3;
|
||
|
||
&proc( *MAN, $command{'man'}, @manargs, "--", $name )
|
||
|| &mydie("$0: open of $command{'man'} command failed: $!\n");
|
||
if ( eof(MAN) ) {
|
||
|
||
# print "X $command{'man'} @manargs -- x $name x\n";
|
||
print qq{</pre>\n};
|
||
print "Sorry, no data found for `<i>$html_name</i>"
|
||
. ( $html_section ? "($html_section)" : '' ) . "'.\n";
|
||
print
|
||
qq{Please try a <a href="$BASE?apropos=1&manpath=freebsd-release-ports&query=$html_name">keyword search</a>.\n};
|
||
print qq{<p>You may look for other }
|
||
. qq{<a href="../../search/">FreeBSD Search Services</a>.</p>\n};
|
||
&html_footer;
|
||
return;
|
||
}
|
||
|
||
if ( $format ne "html" ) {
|
||
if ( $format eq "latin1" || $format eq "ascii" ) {
|
||
while (<MAN>) { s/.//g; print; }
|
||
}
|
||
elsif ( $format eq "pdf" ) {
|
||
|
||
#
|
||
# run a PostScript to PDF converter
|
||
#
|
||
local (@args) = ( 'mktemp', '/tmp/_man.cgi-ps2pdf-XXXXXXXXXXXX' );
|
||
open( TMP, "-|" )
|
||
or exec(@args)
|
||
or die "open @args: $!\n";
|
||
local ($tempfile) = <TMP>;
|
||
close TMP;
|
||
|
||
# chomp, avoid security warnings using -T switch
|
||
#chop($tempfile);
|
||
if ( $tempfile =~ /(\S+)/ ) {
|
||
$tempfile = $1;
|
||
}
|
||
|
||
if ( !$tempfile || !-f $tempfile ) {
|
||
die "Cannot create tempfile: $tempfile\n";
|
||
}
|
||
|
||
#warn $tempfile;
|
||
|
||
#$tempfile = '/tmp/bla2';
|
||
open( TMP, "> $tempfile" ) or die "open $tempfile: $!\n";
|
||
while (<MAN>) {
|
||
print TMP $_;
|
||
}
|
||
close TMP;
|
||
local ( $ENV{'PATH'} ) = '/bin:/usr/bin:/usr/local/bin';
|
||
open( PDF, "-|" )
|
||
or exec( '/usr/local/bin/ps2pdf', $tempfile, '/dev/stdout' )
|
||
or die "open ps2pdf: $!\n";
|
||
|
||
# sleep and delete the temp file
|
||
#select(undef, undef, undef, 0.8);
|
||
#unlink($tempfile);
|
||
|
||
while (<PDF>) {
|
||
print;
|
||
}
|
||
close PDF;
|
||
unlink($tempfile);
|
||
|
||
}
|
||
else {
|
||
while (<MAN>) { print; }
|
||
}
|
||
close(MAN);
|
||
exit(0);
|
||
}
|
||
|
||
local ($space) = 1;
|
||
local (@sect);
|
||
local ( $i, $j );
|
||
while (<MAN>) {
|
||
|
||
# remove tailing white space
|
||
if (/^\s+$/) {
|
||
next if $space;
|
||
$space = 1;
|
||
}
|
||
else {
|
||
$space = 0;
|
||
}
|
||
|
||
$_ = &encode_data($_);
|
||
if ( $enable_include_links
|
||
&& m,(<b>)?\#include(</b>)?\s+(<b>)?\<\;(.*\.h)\>\;(</b>)?, )
|
||
{
|
||
$match = $4;
|
||
( $regexp = $match ) =~ s/\./\\\./;
|
||
s,$regexp,\<a href=\"$BASE/usr/include/$match\"\>$match\</A\>,;
|
||
}
|
||
/^\s/ && # skip headers
|
||
s,((<[IB]>)?[\w\_\.\-]+\s*(</[IB]>)?\s*\(([1-9ln][a-zA-Z]*)\)),&mlnk($1),oige;
|
||
|
||
# detect E-Mail Addreses in manpages
|
||
if ( $enable_mailto_links && /\@/ ) {
|
||
s/([a-z0-9_\-\.]+\@[a-z0-9\-\.]+\.[a-z]+)/<a href="mailto:$1">$1<\/A>/gi;
|
||
}
|
||
|
||
# detect URLs in manpages
|
||
if (m%tp://%) {
|
||
s,((ftp|http)://[^\s<>\)]+),<a href="$1">$1</a>,gi;
|
||
}
|
||
|
||
if (s%^(<b>.*?</b>)+\n?$% ($str = $1) =~ s,(<b>|</b>),,g; $str%ge) {
|
||
$i = $_;
|
||
$j = &encode_url($i);
|
||
$j =~ s/\+/_/g;
|
||
$_ = qq{<a name="$j" href="#end"><b>$i</b></a>\n};
|
||
push( @sect, $i );
|
||
}
|
||
print;
|
||
}
|
||
close(MAN);
|
||
print qq{</pre>\n<a name="end" />\n<hr />\n};
|
||
|
||
for ( $i = 0 ; $i <= $#sect ; $i++ ) {
|
||
$j = &encode_url( $sect[$i] );
|
||
$j =~ s/\+/_/g;
|
||
|
||
print qq{<a href="#$j}
|
||
. qq{">$sect[$i]</a>}
|
||
. ( $i < $#sect ? " |\n" : "\n" );
|
||
}
|
||
|
||
if ($want_to_link_to_this_page) {
|
||
my $url = qq{$full_url?query=$html_name};
|
||
$url .= qq{&sektion=$html_section} if $html_section != 0;
|
||
$url .= qq{&manpath=} . &encode_url($manpath);
|
||
|
||
print qq{<p align="left">Want to link to this manual page? };
|
||
print qq{Use this URL:<br/><<a href="$url">$url</a>></p>\n};
|
||
}
|
||
|
||
&html_footer;
|
||
|
||
# Sleep 0.35 seconds to avoid DoS attacs
|
||
select undef, undef, undef, 0.35;
|
||
}
|
||
|
||
#
|
||
# You may need to precreate some mdoc.local files for every system you
|
||
# support (every collection of man pages), maybe like:
|
||
#
|
||
# $manLocalDir/NetBSD-1.4.2/tmac
|
||
#
|
||
# and then in your cgi script itself set the GROFF_TMAC_PATH as appropriate
|
||
# like:
|
||
#
|
||
# GROFF_TMAC_PATH=$manLocalDir/NetBSD-1.4.2/tmac:/usr/share/tmac/
|
||
#
|
||
sub groff_path {
|
||
local $manpath = shift;
|
||
|
||
local @groff_path;
|
||
foreach ( split( /:/, $manpath ) ) {
|
||
push( @groff_path, $_ . '/tmac' );
|
||
}
|
||
|
||
$ENV{'GROFF_TMAC_PATH'} = join( ':', @groff_path, '/usr/share/tmac' );
|
||
}
|
||
|
||
sub mlnk {
|
||
local ($matched) = @_;
|
||
local ( $link, $section );
|
||
( $link = $matched ) =~ s/[\s]+//g;
|
||
$link =~ s/<\/?[IB]>//ig;
|
||
( $link, $section ) = ( $link =~ m/^([^\(]*)\((.*)\)/ );
|
||
$link = &encode_url($link);
|
||
$section = &encode_url($section);
|
||
local ($manpath) = &encode_url($manpath);
|
||
return qq{<a href="$BASE?query=$link}
|
||
. qq{&sektion=$section&apropos=0&manpath=$manpath">$matched</a>};
|
||
}
|
||
|
||
sub proc {
|
||
local ( *FH, $prog, @args ) = @_;
|
||
local ($pid) = open( FH, "-|" );
|
||
return undef unless defined($pid);
|
||
if ( $pid == 0 ) {
|
||
exec( $prog, @args )
|
||
or &mydie("exec $prog failed\n");
|
||
}
|
||
1;
|
||
}
|
||
|
||
# $indent is a bit of optional data processing I put in for
|
||
# formatting the data nicely when you are emailing it.
|
||
# This is derived from code by Denis Howe <dbh@doc.ic.ac.uk>
|
||
# and Thomas A Fine <fine@cis.ohio-state.edu>
|
||
sub decode_form {
|
||
local ( $form, *data, $indent, $key, $_ ) = @_;
|
||
foreach $_ ( split( /&/, $form ) ) {
|
||
( $key, $_ ) = split( /=/, $_, 2 );
|
||
$_ =~ s/\+/ /g; # + -> space
|
||
$key =~ s/\+/ /g; # + -> space
|
||
$_ =~ s/%([\da-f]{1,2})/pack(C,hex($1))/eig; # undo % escapes
|
||
$key =~ s/%([\da-f]{1,2})/pack(C,hex($1))/eig; # undo % escapes
|
||
$_ =~ s/[\r\n]+/\n\t/g if defined($indent); # indent data after \n
|
||
$data{$key} = &escape($_);
|
||
}
|
||
}
|
||
|
||
# block cross-site scripting attacks (css)
|
||
sub escape($) { $_ = $_[0]; s/&/&/g; s/</</g; s/>/>/g; $_; }
|
||
|
||
sub dec {
|
||
local ($_) = @_;
|
||
|
||
s/\+/ /g; # '+' -> space
|
||
s/%(..)/pack("c",hex($1))/ge; # '%ab' -> char ab
|
||
|
||
return ($_);
|
||
}
|
||
|
||
#
|
||
# Splits up a query request, returns an array of items.
|
||
# usage: @items = &main'splitquery($query);
|
||
#
|
||
sub splitquery {
|
||
local ($query) = @_;
|
||
grep( ( s/%([\da-f]{1,2})/pack(C,hex($1))/eig, 1 ), split( /\+/, $query ) );
|
||
}
|
||
|
||
# encode unknown data for use in a URL <a href="...">
|
||
sub encode_url {
|
||
local ($_) = @_;
|
||
|
||
# rfc1738 says that ";"|"/"|"?"|":"|"@"|"&"|"=" may be reserved.
|
||
# And % is the escape character so we escape it along with
|
||
# single-quote('), double-quote("), grave accent(`), less than(<),
|
||
# greater than(>), and non-US-ASCII characters (binary data),
|
||
# and white space. Whew.
|
||
s/([\000-\032\;\/\?\:\@\&\=\%\'\"\`\<\>\177-\377 ])/sprintf('%%%02x',ord($1))/eg;
|
||
s/%20/+/g;
|
||
$_;
|
||
}
|
||
|
||
# encode unknown data for use in <TITLE>...</TITILE>
|
||
sub encode_title {
|
||
|
||
# like encode_url but less strict (I couldn't find docs on this)
|
||
local ($_) = @_;
|
||
s/([\000-\031\%\&\<\>\177-\377])/sprintf('%%%02x',ord($1))/eg;
|
||
$_;
|
||
}
|
||
|
||
# encode unknown data for use inside markup attributes <MARKUP ATTR="...">
|
||
sub encode_attribute {
|
||
|
||
# rfc1738 says to use entity references here
|
||
local ($_) = @_;
|
||
s/([\000-\031\"\'\`\%\&\<\>\177-\377])/sprintf('\&#%03d;',ord($1))/eg;
|
||
$_;
|
||
}
|
||
|
||
# encode unknown text data for using as HTML,
|
||
# treats ^H as overstrike ala nroff.
|
||
sub encode_data {
|
||
local ($_) = @_;
|
||
local ($str);
|
||
|
||
# Escape &, < and >
|
||
s,\010[><&],,g;
|
||
s/\&/\&\;/g;
|
||
s/\</\<\;/g;
|
||
s/\>/\>\;/g;
|
||
|
||
s,((_\010[^_])+),($str = $1) =~ s/.\010//g; "<i>$str</i>";,ge;
|
||
s,((.\010.)+),($str = $1) =~ s/.\010//g; "<b>$str</b>";,ge;
|
||
|
||
#s,((_\010.)+),($str = $1) =~ s/.\010//g; "<i>$str</i>";,ge;
|
||
#s,(.\010)+,$1,g;
|
||
#if (!s,((.\010.)+\s+(.\010.)+),($str = $1) =~ s/.\010//g; "<b>$str</b>";,ge) {
|
||
# s,(([^_]\010.)+),($str = $1) =~ s/[^_]\010//g; "<b>$str</b>";,ge;
|
||
# s,(([_]\010.)+),($str = $1) =~ s/[_]\010//g; "<i>$str</i>";,ge;
|
||
#}
|
||
# Escape binary data except for ^H which we process below
|
||
# \375 gets turned into the & for the entity reference
|
||
#s/([^\010\012\015\032-\176])/sprintf('\375#%03d;',ord($1))/eg;
|
||
# Process ^H sequences, we use \376 and \377 (already escaped
|
||
# above) to stand in for < and > until those characters can
|
||
# be properly escaped below.
|
||
#s,\376[IB]\377_\376/[IB]\377,,g;
|
||
#s/.[\b]//g; # just do an erase for anything else
|
||
# Now convert our magic chars into our tag markers
|
||
#s/\375/\&/g; s/\376/</g; s/\377/>/g;
|
||
|
||
# cleanup all the rest
|
||
s,.\010,,g;
|
||
|
||
$_;
|
||
}
|
||
|
||
sub indexpage {
|
||
&http_header("text/html");
|
||
print &html_header("$www{'title'}: Index Page") . "<h1>", $www{'head'},
|
||
"</h1>\n\n" . &intro;
|
||
&formquery;
|
||
|
||
local ($m) = ( $manpath ? $manpath : $manPathDefault );
|
||
$m = &encode_url($m);
|
||
|
||
print "<b><i>Section Indexes</i></b>:\n";
|
||
foreach ( '1', '2', '3', '4', '5', '6', '7', '8', '9', 'n' ) {
|
||
print qq{¤ } if $_ ne '1';
|
||
print
|
||
qq{<a href="$BASE?query=($_)&sektion=&apropos=1&manpath=$m&title=Section%20$_Index">$_</a>\n};
|
||
}
|
||
|
||
print "<br /><b><i>Explanations of Man Sections:</i></b>\n";
|
||
foreach ( '1', '2', '3', '4', '5', '6', '7', '8', '9' ) {
|
||
print qq{¤ } if $_ ne '1';
|
||
print
|
||
qq{<a href="$BASE?query=intro&sektion=$_&apropos=0&manpath=$m&title=Introduction%20Section%20$_">intro($_)</a>\n};
|
||
}
|
||
|
||
if (0) {
|
||
print "<br />\n<b><i>Quick Reference Categories:</i></b>\n";
|
||
foreach (
|
||
'database', 'disk', 'driver', 'ethernet', 'mail',
|
||
'net', 'nfs', 'nis', 'protocol', 'ppp',
|
||
'roff', 'string', 'scsi', 'statistic', 'tcl',
|
||
'tcp', 'time'
|
||
)
|
||
{
|
||
print
|
||
qq{¤ <a href="$BASE?query=$_&sektion=&apropos=1&manpath=$m&title=Quick%20Ref%20$_">$_</a>\n};
|
||
}
|
||
}
|
||
|
||
print <<ETX if 0 && $mailto;
|
||
URL: <a href="$BASE" target="_parent">$www{'home'}$BASE</a><br />
|
||
ETX
|
||
|
||
print "<br />\n";
|
||
&html_footer( 'no_home_link' => 1 );
|
||
}
|
||
|
||
sub formquery {
|
||
local ( $astring, $bstring );
|
||
if ( !$apropos ) {
|
||
$astring = q{ checked="checked"};
|
||
}
|
||
else {
|
||
$bstring = q{ checked="checked"};
|
||
}
|
||
|
||
print <<ETX;
|
||
<form method="get" action="$BASE">
|
||
Man Page or Keyword Search:
|
||
<input value="$query" name="query" />
|
||
<input type="submit" value="Submit" />
|
||
<input type="reset" value="Reset" />
|
||
<br />
|
||
<input name="apropos" value="0" type="radio"$astring /> <a href="$BASE?query=man&sektion=1&apropos=0">Man</a>
|
||
<select name="sektion">
|
||
ETX
|
||
|
||
foreach $key ( sort keys %sectionName ) {
|
||
print "<option"
|
||
. ( ( $key eq $section ) ? ' selected="selected" ' : ' ' )
|
||
. qq{value="$key">$sectionName{$key}</option>\n};
|
||
}
|
||
|
||
print qq{</select>\n<select name="manpath">\n};
|
||
|
||
local ($l) = ( $manpath ? $manpath : $manPathDefault );
|
||
foreach ( sort keys %manPath ) {
|
||
$key = $_;
|
||
print "<option"
|
||
. ( ( $key eq $l ) ? ' selected="selected" ' : ' ' )
|
||
. qq{value="$key">$key</option>\n};
|
||
}
|
||
|
||
local ($m) = &encode_url($l);
|
||
print <<ETX;
|
||
</select>
|
||
<br />
|
||
<input name="apropos" value="1" type="radio"$bstring /> <a href="$BASE?query=apropos&sektion=1&apropos=0">Apropos</a> Keyword Search (all sections)
|
||
<select name="format">
|
||
ETX
|
||
|
||
my @format = ('html');
|
||
push( @format, ( 'pdf', 'ps' ) ) if !$no_pdf_output{$manpath};
|
||
push( @format, ( 'latin1', 'ascii' ) )
|
||
; # you need a 8 bit clean man, e.g. jp-man
|
||
|
||
foreach (@format) {
|
||
print qq{<option value="$_">$_</option>\n};
|
||
}
|
||
|
||
print <<ETX;
|
||
</select>
|
||
Output format
|
||
</form>
|
||
|
||
<a href="$BASE?manpath=$m">home</a> |
|
||
<a href="$BASE/help.html">help</a>
|
||
<hr />
|
||
ETX
|
||
0;
|
||
}
|
||
|
||
sub faq {
|
||
|
||
local ( @list, @list2 );
|
||
local ($url);
|
||
foreach ( sort keys %manPath ) {
|
||
$url = &encode_url($_);
|
||
push( @list,
|
||
qq{<li><a href="$BASE?apropos=2&manpath=$url">[download]}
|
||
. qq{</a> "$_" -> $BASE?manpath=$url}
|
||
. qq{</li>\n} );
|
||
}
|
||
|
||
foreach ( sort keys %manPathAliases ) {
|
||
push( @list2,
|
||
qq[<li>"$_" -> "$manPathAliases{$_}" -> ]
|
||
. qq{<a href="$BASE?manpath=}
|
||
. &encode_url($_)
|
||
. qq{">$BASE?manpath=}
|
||
. &encode_url($_)
|
||
. "</a></li>\n" )
|
||
if $manPathAliases{$_};
|
||
}
|
||
|
||
local $id =
|
||
'$FreeBSD: www/en/cgi/man.cgi,v 1.245 2010/05/23 23:14:46 wosch Exp $';
|
||
return qq{\
|
||
<pre>
|
||
Copyright (c) 1996-2010 <a href="$mailtoURL">Wolfram Schneider</a>
|
||
Copyright (c) 1993-1995 Berkeley Software Design, Inc.
|
||
|
||
This data is part of a licensed program from BERKELEY SOFTWARE
|
||
DESIGN, INC. Portions are copyrighted by BSDI, The Regents of
|
||
the University of California, Massachusetts Institute of
|
||
Technology, Free Software Foundation, The FreeBSD Project, and others.
|
||
|
||
</pre>\n
|
||
This script has the revsion: $id
|
||
<p />
|
||
|
||
Copyright (c) for man pages by OS vendors.
|
||
<p/>
|
||
<a href="ftp://ftp.2bsd.com">2.11 BSD</a>,
|
||
<a href="http://www.hp.com">HP</a>,
|
||
<a href="http://www.freebsd.org">FreeBSD</a>,
|
||
<a href="http://www.cs.vu.nl/~ast/minix.html">Minix</a>,
|
||
<a href="http://www.netbsd.org">NetBSD</a>,
|
||
<a href="http://www.openbsd.org">OpenBSD</a>,
|
||
<a href="http://plan9.bell-labs.com/plan9/">Plan 9</a>,
|
||
<a href="http://www.redhat.com">Red Hat</a>,
|
||
<a href="http://slackware.com">Slackware Linux</a>,
|
||
<a href="http://www.sun.com">SunOS</a>,
|
||
<a href="http://www.suse.com">SuSE</a>,
|
||
<a href="http://www.digital.com">ULTRIX</a>,
|
||
<a href="ftp://elib.zib.de/pub/netlib/att/cs/v7man">Unix Seventh Edition</a>,
|
||
<a href="http://www.xfree86.org">XFree86</a>,
|
||
<a href="http://www.x.org">X11R6</a>
|
||
|
||
<h2>FAQ</h2>
|
||
<ul>
|
||
<li>Get the <a href="$BASE/source">source</a> of the man.cgi script</li>
|
||
<li>Troff macros works only if defined in FreeBSD/groff. OS specific
|
||
macros like `appeared in NetBSD version 1.2' are not supported.</li>
|
||
<li>Some OSs provide only formated manual pages (catpages), e.g. NetBSD
|
||
and OpenBSD. In this case it is not possible to create Postscript
|
||
and troff output.</li>
|
||
<li>The <a href="http://cvsweb.freebsd.org/src/share/misc/bsd-family-tree">
|
||
Unix family tree, BSD part</a>.</li>
|
||
<li>The <a href="http://www.freebsd.org/cgi/ports.cgi">
|
||
FreeBSD Ports Changes</a> script.</li>
|
||
<li>Copyright (c) and download for man pages by
|
||
OS vendors</li>
|
||
</ul>
|
||
|
||
<h2>Shortcuts for FreeBSD manual pages</h2>
|
||
|
||
<ul>
|
||
<li>which manpage: <a href="http://man.freebsd.org/which">http://man.freebsd.org/which</a></li>
|
||
<li>socket(2) manpage: <a href="http://man.freebsd.org/socket/2">http://man.freebsd.org/socket/2</a></li>
|
||
</ul>
|
||
|
||
<p />
|
||
|
||
<ul>
|
||
<li>which manpage: <a href="$BASE?which">$full_url?which</a></li>
|
||
<li>socket(2) manpage: <a href="$BASE?socket(2)">$full_url?socket(2)</a></li>
|
||
</ul>
|
||
|
||
|
||
<h2>Releases</h2>
|
||
|
||
Releases and Releases Aliases are information how
|
||
to make a link to this script to the right OS version.
|
||
<p />
|
||
You may download the manpages as gzip'd tar archive
|
||
for private use. A tarball is usually 5MB big.
|
||
<p />
|
||
<ul>
|
||
@list
|
||
</ul>
|
||
|
||
<h2>Releases Aliases</h2>
|
||
Release aliases are for lazy people. Plus, they have a longer
|
||
lifetime, eg. 'openbsd' points always to the latest OpenBSD release.
|
||
<ul>
|
||
@list2
|
||
</ul>
|
||
};
|
||
}
|
||
|
||
sub intro {
|
||
return qq{\
|
||
<p />
|
||
<i>Man Page Lookup</i> searches for man pages name and section as
|
||
given in the selection menu and the query dialog. <i>Apropos
|
||
Keyword Search</i> searches the database for the string given in
|
||
the query dialog. There are also several hypertext links provided
|
||
as short-cuts to various queries: <i>Section Indexes</i> is apropos
|
||
listings of all man pages by section. <i>Explanations of Man
|
||
Sections</i> contains pointers to the intro pages for various man
|
||
sections.
|
||
<p />
|
||
};
|
||
}
|
||
|
||
sub faq_output {
|
||
my $base = $BASE;
|
||
$base =~ s,[^/]*$,,;
|
||
$base = 'http://www.freebsd.org/cgi/'; # XXX
|
||
|
||
&http_header("text/html");
|
||
print &html_header( "FreeBSD manual page help", $base ) . "<h1>",
|
||
$www{'head'}, "</h1>\n" . &faq . qq{<br />\n};
|
||
&html_footer;
|
||
}
|
||
|
||
sub html_header2 {
|
||
my ( $title, $head ) = @_;
|
||
|
||
return qq{<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
|
||
<head>
|
||
<title>$title</title>
|
||
$head
|
||
</head>
|
||
<body>
|
||
};
|
||
}
|
||
|
||
sub secure_env {
|
||
$main'ENV{'PATH'} = '/bin:/usr/bin';
|
||
$main'ENV{'MANPATH'} = $manPath{$manPathDefault};
|
||
$main'ENV{'IFS'} = " \t\n";
|
||
$main'ENV{'PAGER'} = 'cat';
|
||
$main'ENV{'SHELL'} = '/bin/sh';
|
||
$main'ENV{'LANG'} = 'C';
|
||
undef $main'ENV{'DISPLAY'};
|
||
}
|
||
|
||
sub include_output {
|
||
local ($inc) = @_;
|
||
|
||
&http_header("text/plain");
|
||
open( I, "$inc" ) || do { print "open $inc: $!\n"; exit(1) };
|
||
while (<I>) { print }
|
||
close(I);
|
||
}
|
||
|
||
# CGI script must die with error status 0
|
||
sub mydie {
|
||
local ($message) = @_;
|
||
&http_header("text/html");
|
||
print &html_header("Error");
|
||
print $message;
|
||
|
||
print qq{
|
||
<p />
|
||
<a href="$BASE">home</a>
|
||
};
|
||
&html_footer;
|
||
exit(0);
|
||
}
|
||
|
||
1;
|
||
|