xref: /openbsd-src/usr.bin/spell/spell.ksh (revision bf198cc6eba0ca1f6d79f71e8e2243d386241fa8)
19175dedbSmillert#!/bin/ksh -
29175dedbSmillert#
3*bf198cc6Smillert# $OpenBSD: spell.ksh,v 1.12 2019/01/25 00:19:26 millert Exp $
49175dedbSmillert#
5*bf198cc6Smillert# Copyright (c) 2001, 2003 Todd C. Miller <millert@openbsd.org>
69175dedbSmillert#
706f01696Smillert# Permission to use, copy, modify, and distribute this software for any
806f01696Smillert# purpose with or without fee is hereby granted, provided that the above
906f01696Smillert# copyright notice and this permission notice appear in all copies.
109175dedbSmillert#
11328f1f07Smillert# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12328f1f07Smillert# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13328f1f07Smillert# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14328f1f07Smillert# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15328f1f07Smillert# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16328f1f07Smillert# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17328f1f07Smillert# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
189175dedbSmillert#
1910501311Smillert# Sponsored in part by the Defense Advanced Research Projects
2010501311Smillert# Agency (DARPA) and Air Force Research Laboratory, Air Force
2110501311Smillert# Materiel Command, USAF, under agreement number F39502-99-1-0512.
2210501311Smillert#
239175dedbSmillertSPELLPROG=/usr/libexec/spellprog
249175dedbSmillertDICT=/usr/share/dict/words
259175dedbSmillertLOCAL_DICT=/usr/local/share/dict/words
269175dedbSmillertSTOP=/usr/share/dict/stop
279175dedbSmillertLOCAL_STOP=/usr/local/share/dict/stop
289175dedbSmillertAMERICAN=/usr/share/dict/american
299175dedbSmillertBRITISH=/usr/share/dict/british
309175dedbSmillertLANG=$AMERICAN
319175dedbSmillertSTOP_LANG=$BRITISH
329175dedbSmillertEXTRA=
339175dedbSmillertFLAGS=
349175dedbSmillertDEROFF="deroff -w"
359175dedbSmillertHISTFILE=
369175dedbSmillertTMP=`mktemp /tmp/spell.XXXXXXXX` || exit 1
379175dedbSmillertVTMP=
38ccd9917bSjmcUSAGE="usage: spell [-biltvx] [-d list] [-h spellhist] [-m a | e | l | m | s]\n\t[-s list] [+extra_list] [file ...]"
399175dedbSmillert
4010501311Smillertset -o posix		# set POSIX mode to prevent +foo in getopts
4110501311SmillertOPTIND=1		# force getopts to reset itself
4210501311Smillert
433efbbe3aSfgschtrap "rm -f $TMP $VTMP; exit 0" 0 1 2 15
449175dedbSmillert
459175dedbSmillert# Use local word/stop lists if they exist
469175dedbSmillertif [ -f $LOCAL_DICT ]; then
479175dedbSmillert	DICT="$DICT $LOCAL_DICT"
489175dedbSmillertfi
499175dedbSmillertif [ -f $LOCAL_STOP ]; then
509175dedbSmillert	STOP="$STOP $LOCAL_STOP"
519175dedbSmillertfi
529175dedbSmillert
5310501311Smillertwhile getopts "biltvxd:h:m:s:" c; do
549175dedbSmillert	case $c in
559175dedbSmillert	b)	LANG=$BRITISH
569175dedbSmillert		STOP_LANG=$AMERICAN
579175dedbSmillert		FLAGS[${#FLAGS[@]}]="-b"
589175dedbSmillert		;;
599175dedbSmillert	i)	DEROFF="$DEROFF -i"
609175dedbSmillert		;;
613ec2b98aSmargarida	l)	DEROFF="delatex"
62e4dfaea3Smillert		;;
63e4dfaea3Smillert	m)	DEROFF="$DEROFF -m $OPTARG"
649175dedbSmillert		;;
654525c48eSmillert	t)	DEROFF="detex -w"
669175dedbSmillert		;;
672ee02be1Spvalchev	v)	VTMP=`mktemp /tmp/spell.XXXXXXXX` || {
682ee02be1Spvalchev			rm -f ${TMP}
692ee02be1Spvalchev			exit 1
702ee02be1Spvalchev		}
719175dedbSmillert		FLAGS[${#FLAGS[@]}]="-v"
729175dedbSmillert		FLAGS[${#FLAGS[@]}]="-o"
739175dedbSmillert		FLAGS[${#FLAGS[@]}]="$VTMP"
749175dedbSmillert		;;
759175dedbSmillert	x)	FLAGS[${#FLAGS[@]}]="-x"
769175dedbSmillert		;;
779175dedbSmillert	d)	DICT="$OPTARG"
789175dedbSmillert		LANG=
799175dedbSmillert		;;
809175dedbSmillert	s)	STOP="$OPTARG"
819175dedbSmillert		STOP_LANG=
829175dedbSmillert		LOCAL_STOP=
839175dedbSmillert		;;
849175dedbSmillert	h)	HISTFILE="$OPTARG"
859175dedbSmillert		;;
869175dedbSmillert	*)	echo "$USAGE" 1>&2
879175dedbSmillert		exit 1
889175dedbSmillert		;;
899175dedbSmillert	esac
909175dedbSmillertdone
919175dedbSmillertshift $(( $OPTIND - 1 ))
929175dedbSmillert
939175dedbSmillertwhile test $# -ne 0; do
949175dedbSmillert	case "$1" in
959175dedbSmillert		+*)	EXTRA="$EXTRA ${1#+}"
969175dedbSmillert			shift
979175dedbSmillert			;;
989175dedbSmillert		*)	break
999175dedbSmillert			;;
1009175dedbSmillert	esac
1019175dedbSmillertdone
1029175dedbSmillert
1039175dedbSmillert# Any parameters left are files to be checked, pass them to deroff
1049175dedbSmillertDEROFF="$DEROFF $@"
1059175dedbSmillert
1069175dedbSmillertif [ -n "$HISTFILE" ]; then
1079175dedbSmillert	$DEROFF | sort -u | $SPELLPROG -o $TMP $STOP $STOP_LANG | \
1089175dedbSmillert	    $SPELLPROG ${FLAGS[*]} $DICT $LANG $EXTRA | sort -u -k1f - $TMP | \
1099175dedbSmillert	    tee -a $HISTFILE
1109175dedbSmillert	who -m >> $HISTFILE
1119175dedbSmillertelse
1129175dedbSmillert	$DEROFF | sort -u | $SPELLPROG -o $TMP $STOP $STOP_LANG | \
1139175dedbSmillert	    $SPELLPROG ${FLAGS[*]} $DICT $LANG $EXTRA | sort -u -k1f - $TMP
1149175dedbSmillertfi
1159175dedbSmillert
1169175dedbSmillertif [ -n "$VTMP" ]; then
1179175dedbSmillert	sort -u -k2f -k1 $VTMP
1189175dedbSmillertfi
1199175dedbSmillert
1209175dedbSmillertexit 0
121