Annotation of src/usr.bin/spell/spell.ksh, Revision 1.10
1.1 millert 1: #!/bin/ksh -
2: #
1.10 ! jmc 3: # $OpenBSD: spell.ksh,v 1.9 2005/07/06 07:08:05 jmc Exp $
1.1 millert 4: #
1.7 millert 5: # Copyright (c) 2001, 2003 Todd C. Miller <Todd.Miller@courtesan.com>
1.1 millert 6: #
1.5 millert 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.
1.1 millert 10: #
1.6 millert 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.
1.1 millert 18: #
1.7 millert 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: #
1.1 millert 23: SPELLPROG=/usr/libexec/spellprog
24: DICT=/usr/share/dict/words
25: LOCAL_DICT=/usr/local/share/dict/words
26: STOP=/usr/share/dict/stop
27: LOCAL_STOP=/usr/local/share/dict/stop
28: AMERICAN=/usr/share/dict/american
29: BRITISH=/usr/share/dict/british
30: LANG=$AMERICAN
31: STOP_LANG=$BRITISH
32: EXTRA=
33: FLAGS=
34: DEROFF="deroff -w"
35: HISTFILE=
36: TMP=`mktemp /tmp/spell.XXXXXXXX` || exit 1
37: VTMP=
1.10 ! jmc 38: USAGE="usage: spell [-biltvx] [-d list] [-h spellhist] [-m a | e | l | m | s]\n\t[-s list] [+extra_list] [file ...]"
1.1 millert 39:
1.7 millert 40: set -o posix # set POSIX mode to prevent +foo in getopts
41: OPTIND=1 # force getopts to reset itself
42:
1.8 fgsch 43: trap "rm -f $TMP $VTMP; exit 0" 0 1 2 15
1.1 millert 44:
45: # Use local word/stop lists if they exist
46: if [ -f $LOCAL_DICT ]; then
47: DICT="$DICT $LOCAL_DICT"
48: fi
49: if [ -f $LOCAL_STOP ]; then
50: STOP="$STOP $LOCAL_STOP"
51: fi
52:
1.7 millert 53: while getopts "biltvxd:h:m:s:" c; do
1.1 millert 54: case $c in
55: b) LANG=$BRITISH
56: STOP_LANG=$AMERICAN
57: FLAGS[${#FLAGS[@]}]="-b"
58: ;;
59: i) DEROFF="$DEROFF -i"
60: ;;
1.3 margarid 61: l) DEROFF="delatex"
1.2 millert 62: ;;
63: m) DEROFF="$DEROFF -m $OPTARG"
1.1 millert 64: ;;
65: t) DEROFF="detex"
66: ;;
1.4 pvalchev 67: v) VTMP=`mktemp /tmp/spell.XXXXXXXX` || {
68: rm -f ${TMP}
69: exit 1
70: }
1.1 millert 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
90: done
91: shift $(( $OPTIND - 1 ))
92:
93: while test $# -ne 0; do
94: case "$1" in
95: +*) EXTRA="$EXTRA ${1#+}"
96: shift
97: ;;
98: *) break
99: ;;
100: esac
101: done
102:
103: # Any parameters left are files to be checked, pass them to deroff
104: DEROFF="$DEROFF $@"
105:
106: if [ -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
111: else
112: $DEROFF | sort -u | $SPELLPROG -o $TMP $STOP $STOP_LANG | \
113: $SPELLPROG ${FLAGS[*]} $DICT $LANG $EXTRA | sort -u -k1f - $TMP
114: fi
115:
116: if [ -n "$VTMP" ]; then
117: sort -u -k2f -k1 $VTMP
118: fi
119:
120: exit 0