xref: /freebsd/usr.sbin/manctl/manctl.sh (revision 03863e2a02d451d65cf1e2f69353cb9270f8de70)
1fd785755SGeoff Rehmet#!/bin/sh
2fd785755SGeoff Rehmet#
3fd785755SGeoff Rehmet# Copyright (c) 1994 Geoffrey M. Rehmet, Rhodes University
4fd785755SGeoff Rehmet# All rights reserved.
5fd785755SGeoff Rehmet#
6fd785755SGeoff Rehmet# Redistribution and use in source and binary forms, with or without
7fd785755SGeoff Rehmet# modification, are permitted provided that the following conditions
8fd785755SGeoff Rehmet# are met:
9fd785755SGeoff Rehmet# 1. Redistributions of source code must retain the above copyright
10fd785755SGeoff Rehmet#    notice, this list of conditions and the following disclaimer.
11fd785755SGeoff Rehmet# 2. Redistributions in binary form must reproduce the above copyright
12fd785755SGeoff Rehmet#    notice, this list of conditions and the following disclaimer in the
13fd785755SGeoff Rehmet#    documentation and/or other materials provided with the distribution.
14fd785755SGeoff Rehmet# 3. All advertising materials mentioning features or use of this software
15fd785755SGeoff Rehmet#    must display the following acknowledgement:
16fd785755SGeoff Rehmet#	This product includes software developed by Geoffrey M. Rehmet
17fd785755SGeoff Rehmet# 4. Neither the name of Geoffrey M. Rehmet nor that of Rhodes University
18fd785755SGeoff Rehmet#    may be used to endorse or promote products derived from this software
19fd785755SGeoff Rehmet#    without specific prior written permission.
20fd785755SGeoff Rehmet#
21fd785755SGeoff Rehmet# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
22fd785755SGeoff Rehmet# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
23fd785755SGeoff Rehmet# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
24fd785755SGeoff Rehmet# IN NO EVENT SHALL GEOFFREY M. REHMET OR RHODES UNIVERSITY BE LIABLE
25fd785755SGeoff Rehmet# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26fd785755SGeoff Rehmet# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27fd785755SGeoff Rehmet# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28fd785755SGeoff Rehmet# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29fd785755SGeoff Rehmet# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30fd785755SGeoff Rehmet# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31fd785755SGeoff Rehmet# SUCH DAMAGE.
32fd785755SGeoff Rehmet#
33fd785755SGeoff Rehmet# $Id: manctl,v 1.3 1994/04/17 21:01:18 g89r4222 Exp $
34fd785755SGeoff Rehmet#
35fd785755SGeoff Rehmet# manctl:
36fd785755SGeoff Rehmet#	a utility for manipulating manual pages
37fd785755SGeoff Rehmet# functions:
38fd785755SGeoff Rehmet#	compress uncompressed man pages (elliminating .so's)
39fd785755SGeoff Rehmet#	uncompress compressed man pages
40fd785755SGeoff Rehmet#	purge old formatted man pages (not implemented yet)
41fd785755SGeoff Rehmet# Things to watch out for:
42fd785755SGeoff Rehmet#	Hard links - careful with g(un)zipping!
43fd785755SGeoff Rehmet#	.so's - throw everything through soelim before gzip!
44fd785755SGeoff Rehmet#	symlinks - ignore these - eg: expn is its own man page:
45fd785755SGeoff Rehmet#			don't want to compress this!
46fd785755SGeoff Rehmet#
47fd785755SGeoff RehmetPATH=/bin:/sbin:/usr/bin:/usr/sbin
48fd785755SGeoff Rehmet
49fd785755SGeoff Rehmet#
50fd785755SGeoff Rehmet# purge cat? directories
51fd785755SGeoff Rehmet#
52fd785755SGeoff Rehmetdo_purge()
53fd785755SGeoff Rehmet{
54fd785755SGeoff Rehmet	echo "purge $@" 2>&1
55fd785755SGeoff Rehmet	echo "not implemented yet\n" 2>&1
56fd785755SGeoff Rehmet}
57fd785755SGeoff Rehmet
58fd785755SGeoff Rehmet
59fd785755SGeoff Rehmet#
60fd785755SGeoff Rehmet# Uncompress one page
61fd785755SGeoff Rehmet#
62fd785755SGeoff Rehmetuncompress_page()
63fd785755SGeoff Rehmet{
64fd785755SGeoff Rehmet	local	pname
65fd785755SGeoff Rehmet	local	fname
66fd785755SGeoff Rehmet	local	sect
67fd785755SGeoff Rehmet	local	ext
68fd785755SGeoff Rehmet
69fd785755SGeoff Rehmet	# break up file name
70fd785755SGeoff Rehmet	pname=$1
71fd785755SGeoff Rehmet	IFS='.' ; set $pname
72fd785755SGeoff Rehmet	# less than 3 fields - don't know what to do with this
73fd785755SGeoff Rehmet	if [ $# -lt 3 ] ; then
74fd785755SGeoff Rehmet		IFS=" 	" ; echo ignoring $pname 1>&2 ; return 0 ;
75fd785755SGeoff Rehmet	fi
76fd785755SGeoff Rehmet	# construct name and section
77fd785755SGeoff Rehmet	fname=$1 ; shift
78fd785755SGeoff Rehmet	while [ $# -gt 2 ] ; do
79fd785755SGeoff Rehmet		fname=$fname.$1
80fd785755SGeoff Rehmet		shift
81fd785755SGeoff Rehmet	done
82fd785755SGeoff Rehmet	sect=$1
83fd785755SGeoff Rehmet	ext=$2
84fd785755SGeoff Rehmet
85fd785755SGeoff Rehmet	IFS=" 	"
86fd785755SGeoff Rehmet	case "$ext" in
87fd785755SGeoff Rehmet	gz|Z) 	{
88fd785755SGeoff Rehmet		IFS=" 	" ; set `file $pname`
89fd785755SGeoff Rehmet		if [ $2 != "gzip" ] ; then
90fd785755SGeoff Rehmet			echo moving hard link $pname 1>&2
91fd785755SGeoff Rehmet			mv $pname $fname.$ext	# link
92fd785755SGeoff Rehmet		else
93fd785755SGeoff Rehmet			if [ $2 != "symbolic" ] ; then
94fd785755SGeoff Rehmet				echo gunzipping page $pname 1>&2
95fd785755SGeoff Rehmet				gunzip -c $pname > /tmp/manager.$$
96fd785755SGeoff Rehmet				chmod u+w $pname
97fd785755SGeoff Rehmet				cp /tmp/manager.$$ $pname
98fd785755SGeoff Rehmet				chmod 444 $pname
99fd785755SGeoff Rehmet				mv $pname $fname.$sect
100fd785755SGeoff Rehmet				rm /tmp/manager.$$
101fd785755SGeoff Rehmet			else
102fd785755SGeoff Rehmet				# skip symlinks - this can be
103fd785755SGeoff Rehmet				# a program like expn, which is
104fd785755SGeoff Rehmet				# its own man page !
105fd785755SGeoff Rehmet				echo skipping symlink $pname 1>&2
106fd785755SGeoff Rehmet			fi
107fd785755SGeoff Rehmet		fi };;
108fd785755SGeoff Rehmet	*)	{
109fd785755SGeoff Rehmet		IFS=" 	"
110fd785755SGeoff Rehmet		echo skipping file $pname 1>&2
111fd785755SGeoff Rehmet		} ;;
112fd785755SGeoff Rehmet	esac
113fd785755SGeoff Rehmet	# reset IFS - this is important!
114fd785755SGeoff Rehmet	IFS=" 	"
115fd785755SGeoff Rehmet}
116fd785755SGeoff Rehmet
117fd785755SGeoff Rehmet
118fd785755SGeoff Rehmet#
119fd785755SGeoff Rehmet# Uncompress manpages in paths
120fd785755SGeoff Rehmet#
121fd785755SGeoff Rehmetdo_uncompress()
122fd785755SGeoff Rehmet{
123fd785755SGeoff Rehmet	local	i
124fd785755SGeoff Rehmet	local	dir
125f503299aSGeoff Rehmet	local	workdir
126fd785755SGeoff Rehmet
127f503299aSGeoff Rehmet	workdir=`pwd`
128fd785755SGeoff Rehmet	while [ $# != 0 ] ; do
129fd785755SGeoff Rehmet		if [ -d $1 ] ; then
130fd785755SGeoff Rehmet			dir=$1
131f503299aSGeoff Rehmet			cd $dir
13203863e2aSGeoff Rehmet			for i in * ; do
133fd785755SGeoff Rehmet				case $i in
134fd785755SGeoff Rehmet				*cat?)	;; # ignore cat directories
135fd785755SGeoff Rehmet				*)	{
136fd785755SGeoff Rehmet					if [ -d $i ] ; then
137fd785755SGeoff Rehmet						do_uncompress $i
138fd785755SGeoff Rehmet					else
139fd785755SGeoff Rehmet						if [ -e $i ] ; then
140fd785755SGeoff Rehmet							uncompress_page $i
141fd785755SGeoff Rehmet						fi
142fd785755SGeoff Rehmet					fi } ;;
143fd785755SGeoff Rehmet				esac
144fd785755SGeoff Rehmet			done
145f503299aSGeoff Rehmet			cd $workdir
146fd785755SGeoff Rehmet		else
147fd785755SGeoff Rehmet			echo "directory $1 not found" 1>&2
148fd785755SGeoff Rehmet		fi
149fd785755SGeoff Rehmet		shift
150fd785755SGeoff Rehmet	done
151fd785755SGeoff Rehmet}
152fd785755SGeoff Rehmet
153fd785755SGeoff Rehmet#
154fd785755SGeoff Rehmet# compress one page
155fd785755SGeoff Rehmet#	We need to watch out for hard links here.
156fd785755SGeoff Rehmet#
157fd785755SGeoff Rehmetcompress_page()
158fd785755SGeoff Rehmet{
159fd785755SGeoff Rehmet	local	pname
160fd785755SGeoff Rehmet	local	fname
161fd785755SGeoff Rehmet	local	sect
162fd785755SGeoff Rehmet
163fd785755SGeoff Rehmet	# break up file name
164fd785755SGeoff Rehmet	pname=$1
165fd785755SGeoff Rehmet	IFS='.' ; set $pname
166fd785755SGeoff Rehmet	if [ $# -lt 2 ] ; then
167fd785755SGeoff Rehmet		IFS=" 	" ; echo ignoring $pname 1>&2 ; return 0 ;
168fd785755SGeoff Rehmet	fi
169fd785755SGeoff Rehmet	# construct name and section
170fd785755SGeoff Rehmet	fname=$1 ; shift
171fd785755SGeoff Rehmet	while [ $# -gt 1 ] ; do
172fd785755SGeoff Rehmet		fname=$fname.$1
173fd785755SGeoff Rehmet		shift
174fd785755SGeoff Rehmet	done
175fd785755SGeoff Rehmet	sect=$1
176fd785755SGeoff Rehmet
177fd785755SGeoff Rehmet	IFS=" 	"
178fd785755SGeoff Rehmet	case "$sect" in
179fd785755SGeoff Rehmet	gz) 	{ echo file $pname already gzipped 1>&2 ; } ;;
180fd785755SGeoff Rehmet	Z)	{ echo file $pname already compressed 1>&2 ; } ;;
181fd785755SGeoff Rehmet	[12345678ln]*){
182fd785755SGeoff Rehmet		IFS=" 	" ; set `file $pname`
183fd785755SGeoff Rehmet		if [ $2 = "gzip" ] ; then
184fd785755SGeoff Rehmet			echo moving hard link $pname 1>&2
185fd785755SGeoff Rehmet			mv $pname $pname.gz	# link
186fd785755SGeoff Rehmet		else
187fd785755SGeoff Rehmet			if [ $2 != "symbolic" ] ; then
188fd785755SGeoff Rehmet				echo gzipping page $pname 1>&2
18903863e2aSGeoff Rehmet				cat $pname | \
19003863e2aSGeoff Rehmet				(cd .. ; soelim )| gzip -c -- > /tmp/manager.$$
191fd785755SGeoff Rehmet				chmod u+w $pname
192fd785755SGeoff Rehmet				cp /tmp/manager.$$ $pname
193fd785755SGeoff Rehmet				chmod 444 $pname
194fd785755SGeoff Rehmet				mv $pname $pname.gz
195fd785755SGeoff Rehmet				rm /tmp/manager.$$
196fd785755SGeoff Rehmet			else
197fd785755SGeoff Rehmet				# skip symlink - this can be
198fd785755SGeoff Rehmet				# a program like expn, which is
199fd785755SGeoff Rehmet				# its own man page !
200fd785755SGeoff Rehmet				echo skipping symlink $pname 1>&2
201fd785755SGeoff Rehmet			fi
202fd785755SGeoff Rehmet		fi };;
203fd785755SGeoff Rehmet	*)	{
204fd785755SGeoff Rehmet		IFS=" 	"
205fd785755SGeoff Rehmet		echo skipping file $pname 1>&2
206fd785755SGeoff Rehmet		} ;;
207fd785755SGeoff Rehmet	esac
208fd785755SGeoff Rehmet	# reset IFS - this is important!
209fd785755SGeoff Rehmet	IFS=" 	"
210fd785755SGeoff Rehmet}
211fd785755SGeoff Rehmet
212fd785755SGeoff Rehmet#
213fd785755SGeoff Rehmet# Compress man pages in paths
214fd785755SGeoff Rehmet#
215fd785755SGeoff Rehmetdo_compress()
216fd785755SGeoff Rehmet{
217fd785755SGeoff Rehmet	local	i
218fd785755SGeoff Rehmet	local	dir
219f503299aSGeoff Rehmet	local	workdir
220fd785755SGeoff Rehmet
221f503299aSGeoff Rehmet	workdir=`pwd`
222fd785755SGeoff Rehmet	while [ $# != 0 ] ; do
223fd785755SGeoff Rehmet		if [ -d $1 ] ; then
224fd785755SGeoff Rehmet			dir=$1
225f503299aSGeoff Rehmet			cd $dir
226f503299aSGeoff Rehmet			for i in * ; do
227fd785755SGeoff Rehmet				case $i in
228fd785755SGeoff Rehmet				*cat?)	;; # ignore cat directories
229fd785755SGeoff Rehmet				*)	{
230fd785755SGeoff Rehmet					if [ -d $i ] ; then
231fd785755SGeoff Rehmet						do_compress $i
232fd785755SGeoff Rehmet					else
233fd785755SGeoff Rehmet						if [ -e $i ] ; then
234fd785755SGeoff Rehmet							compress_page $i
235fd785755SGeoff Rehmet						fi
236fd785755SGeoff Rehmet					fi } ;;
237fd785755SGeoff Rehmet				esac
238fd785755SGeoff Rehmet			done
239f503299aSGeoff Rehmet			cd $workdir
240fd785755SGeoff Rehmet		else
241fd785755SGeoff Rehmet			echo "directory $1 not found" 1>&2
242fd785755SGeoff Rehmet		fi
243fd785755SGeoff Rehmet		shift
244fd785755SGeoff Rehmet	done
245fd785755SGeoff Rehmet}
246fd785755SGeoff Rehmet
247fd785755SGeoff Rehmet#
248fd785755SGeoff Rehmet# Display a usage message
249fd785755SGeoff Rehmet#
250fd785755SGeoff Rehmetctl_usage()
251fd785755SGeoff Rehmet{
252fd785755SGeoff Rehmet	echo "usage : 	$1 -compress <path> ... " 1>&2
253fd785755SGeoff Rehmet	echo "	 	$1 -uncompress <path> ... " 1>&2
254fd785755SGeoff Rehmet	echo "	 	$1 -purge <days> <path> ... " 1>&2
255fd785755SGeoff Rehmet	echo "	 	$1 -purge expire <path> ... " 1>&2
256fd785755SGeoff Rehmet	exit 1
257fd785755SGeoff Rehmet}
258fd785755SGeoff Rehmet
259fd785755SGeoff Rehmet
260fd785755SGeoff Rehmet#
261fd785755SGeoff Rehmet# dispatch options
262fd785755SGeoff Rehmet#
263fd785755SGeoff Rehmetif [ $# = 0 ] ; then ; ctl_usage $0 ; fi ;
264fd785755SGeoff Rehmet
265fd785755SGeoff Rehmetcase "$1" in
266fd785755SGeoff Rehmet	-compress)	shift ; do_compress "$@" ;;
267fd785755SGeoff Rehmet	-uncompress)	shift ; do_uncompress "$@" ;;
268fd785755SGeoff Rehmet	-purge)		shift ; do_purge "$@" ;;
269fd785755SGeoff Rehmet	*)		ctl_usage $0 ;;
270fd785755SGeoff Rehmetesac
271