jcs's openbsd hax
openbsd
1#!/bin/ksh -
2#
3# $OpenBSD: spell.ksh,v 1.12 2019/01/25 00:19:26 millert Exp $
4#
5# Copyright (c) 2001, 2003 Todd C. Miller <millert@openbsd.org>
6#
7# Permission to use, copy, modify, and distribute this software for any
8# purpose with or without fee is hereby granted, provided that the above
9# copyright notice and this permission notice appear in all copies.
10#
11# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18#
19# Sponsored in part by the Defense Advanced Research Projects
20# Agency (DARPA) and Air Force Research Laboratory, Air Force
21# Materiel Command, USAF, under agreement number F39502-99-1-0512.
22#
23SPELLPROG=/usr/libexec/spellprog
24DICT=/usr/share/dict/words
25LOCAL_DICT=/usr/local/share/dict/words
26STOP=/usr/share/dict/stop
27LOCAL_STOP=/usr/local/share/dict/stop
28AMERICAN=/usr/share/dict/american
29BRITISH=/usr/share/dict/british
30LANG=$AMERICAN
31STOP_LANG=$BRITISH
32EXTRA=
33FLAGS=
34DEROFF="deroff -w"
35HISTFILE=
36TMP=`mktemp /tmp/spell.XXXXXXXX` || exit 1
37VTMP=
38USAGE="usage: spell [-biltvx] [-d list] [-h spellhist] [-m a | e | l | m | s]\n\t[-s list] [+extra_list] [file ...]"
39
40set -o posix # set POSIX mode to prevent +foo in getopts
41OPTIND=1 # force getopts to reset itself
42
43trap "rm -f $TMP $VTMP; exit 0" 0 1 2 15
44
45# Use local word/stop lists if they exist
46if [ -f $LOCAL_DICT ]; then
47 DICT="$DICT $LOCAL_DICT"
48fi
49if [ -f $LOCAL_STOP ]; then
50 STOP="$STOP $LOCAL_STOP"
51fi
52
53while getopts "biltvxd:h:m:s:" c; do
54 case $c in
55 b) LANG=$BRITISH
56 STOP_LANG=$AMERICAN
57 FLAGS[${#FLAGS[@]}]="-b"
58 ;;
59 i) DEROFF="$DEROFF -i"
60 ;;
61 l) DEROFF="delatex"
62 ;;
63 m) DEROFF="$DEROFF -m $OPTARG"
64 ;;
65 t) DEROFF="detex -w"
66 ;;
67 v) VTMP=`mktemp /tmp/spell.XXXXXXXX` || {
68 rm -f ${TMP}
69 exit 1
70 }
71 FLAGS[${#FLAGS[@]}]="-v"
72 FLAGS[${#FLAGS[@]}]="-o"
73 FLAGS[${#FLAGS[@]}]="$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