xref: /netbsd/usr.bin/spell/spell/spell.sh (revision 6550d01e)
1#!/bin/sh
2#
3# $NetBSD: spell.sh,v 1.2 2005/07/06 08:01:13 wiz Exp $
4#
5# Taken from:
6# OpenBSD: spell.ksh,v 1.8 2004/02/02 22:36:50 fgsch Exp
7#
8# Converted to sh from ksh by Perry E. Metzger
9#
10# Copyright (c) 2001, 2003 Todd C. Miller <Todd.Miller@courtesan.com>
11#
12# Permission to use, copy, modify, and distribute this software for any
13# purpose with or without fee is hereby granted, provided that the above
14# copyright notice and this permission notice appear in all copies.
15#
16# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
17# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
18# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
19# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
20# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
21# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
22# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
23#
24# Sponsored in part by the Defense Advanced Research Projects
25# Agency (DARPA) and Air Force Research Laboratory, Air Force
26# Materiel Command, USAF, under agreement number F39502-99-1-0512.
27#
28SPELLPROG=/usr/libexec/spellprog
29DICT=/usr/share/dict/words
30LOCAL_DICT=/usr/local/share/dict/words
31STOP=/usr/share/dict/stop
32LOCAL_STOP=/usr/local/share/dict/stop
33AMERICAN=/usr/share/dict/american
34BRITISH=/usr/share/dict/british
35LANG=$AMERICAN
36STOP_LANG=$BRITISH
37EXTRA=
38FLAGS=
39DEROFF="deroff -w"
40HISTFILE=
41TMP=`mktemp /tmp/spell.XXXXXXXX` || exit 1
42VTMP=
43USAGE="usage: spell [-biltvx] [-d list] [-h spellhist] [-m a | e | l | m | s]\n\t[-s stop] [+extra_list] [file ...]"
44
45trap "rm -f $TMP $VTMP; exit 0" 0 1 2 15
46
47# Use local word/stop lists if they exist
48if [ -f $LOCAL_DICT ]; then
49	DICT="$DICT $LOCAL_DICT"
50fi
51if [ -f $LOCAL_STOP ]; then
52	STOP="$STOP $LOCAL_STOP"
53fi
54
55while getopts "biltvxd:h:m:s:" c; do
56	case $c in
57	b)	LANG=$BRITISH
58		STOP_LANG=$AMERICAN
59		FLAGS="$FLAGS -b"
60		;;
61	i)	DEROFF="$DEROFF -i"
62		;;
63	l)	DEROFF="delatex"
64		;;
65	m)	DEROFF="$DEROFF -m $OPTARG"
66		;;
67	t)	DEROFF="detex"
68		;;
69	v)	VTMP=`mktemp /tmp/spell.XXXXXXXX` || {
70			rm -f $TMP
71			exit 1
72		}
73		FLAGS="$FLAGS -v -o $VTMP"
74		;;
75	x)	FLAGS="$FLAGS -x"
76		;;
77	d)	DICT="$OPTARG"
78		LANG=
79		;;
80	s)	STOP="$OPTARG"
81		STOP_LANG=
82		LOCAL_STOP=
83		;;
84	h)	HISTFILE="$OPTARG"
85		;;
86	*)	echo "$USAGE" 1>&2
87		exit 1
88		;;
89	esac
90done
91shift $(( $OPTIND - 1 ))
92
93while test $# -ne 0; do
94	case "$1" in
95		+*)	EXTRA="$EXTRA ${1#+}"
96			shift
97			;;
98		*)	break
99			;;
100	esac
101done
102
103# Any parameters left are files to be checked, pass them to deroff
104DEROFF="$DEROFF $@"
105
106if [ -n "$HISTFILE" ]; then
107	$DEROFF | sort -u | $SPELLPROG -o $TMP $STOP $STOP_LANG | \
108	    $SPELLPROG $FLAGS $DICT $LANG $EXTRA | sort -u -k1f - $TMP | \
109	    tee -a $HISTFILE
110	who -m >> $HISTFILE
111else
112	$DEROFF | sort -u | $SPELLPROG -o $TMP $STOP $STOP_LANG | \
113	    $SPELLPROG $FLAGS $DICT $LANG $EXTRA | sort -u -k1f - $TMP
114fi
115
116if [ -n "$VTMP" ]; then
117	sort -u -k2f -k1 $VTMP
118fi
119
120exit 0
121