Annotation of src/usr.bin/spell/spell.ksh, Revision 1.5
1.1 millert 1: #!/bin/ksh -
2: #
1.5 ! millert 3: # $OpenBSD: spell.ksh,v 1.4 2003/02/08 10:19:30 pvalchev Exp $
1.1 millert 4: #
5: # Copyright (c) 2001 Todd C. Miller <Todd.Miller@courtesan.com>
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.5 ! millert 11: # THE SOFTWARE IS PROVIDED "AS IS" AND TODD C. MILLER DISCLAIMS ALL
! 12: # WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
! 13: # OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL TODD C. MILLER BE LIABLE
! 14: # FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
! 15: # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
! 16: # OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
! 17: # CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1.1 millert 18: #
19: SPELLPROG=/usr/libexec/spellprog
20: DICT=/usr/share/dict/words
21: LOCAL_DICT=/usr/local/share/dict/words
22: STOP=/usr/share/dict/stop
23: LOCAL_STOP=/usr/local/share/dict/stop
24: AMERICAN=/usr/share/dict/american
25: BRITISH=/usr/share/dict/british
26: LANG=$AMERICAN
27: STOP_LANG=$BRITISH
28: EXTRA=
29: FLAGS=
30: DEROFF="deroff -w"
31: HISTFILE=
32: TMP=`mktemp /tmp/spell.XXXXXXXX` || exit 1
33: VTMP=
34: USAGE="usage: spell [-biltvx] [-d list] [-h spellhist] [-s stop] [+extra_list] [file ...]"
35:
36: trap "rm -f $TMP $VTMP; exit 0" 0
37:
38: # Use local word/stop lists if they exist
39: if [ -f $LOCAL_DICT ]; then
40: DICT="$DICT $LOCAL_DICT"
41: fi
42: if [ -f $LOCAL_STOP ]; then
43: STOP="$STOP $LOCAL_STOP"
44: fi
45:
46: # getopts will treat +foo the same as -foo so we have to make a copy
47: # of the args and quit the loop when we find something starting with '+'
48: set -A argv $0 "$@"
49: while test "${argv[$OPTIND]#+}" = "${argv[$OPTIND]}" && \
1.2 millert 50: getopts "biltvxd:h:m:s:" c; do
1.1 millert 51: case $c in
52: b) LANG=$BRITISH
53: STOP_LANG=$AMERICAN
54: FLAGS[${#FLAGS[@]}]="-b"
55: ;;
56: i) DEROFF="$DEROFF -i"
57: ;;
1.3 margarid 58: l) DEROFF="delatex"
1.2 millert 59: ;;
60: m) DEROFF="$DEROFF -m $OPTARG"
1.1 millert 61: ;;
62: t) DEROFF="detex"
63: ;;
1.4 pvalchev 64: v) VTMP=`mktemp /tmp/spell.XXXXXXXX` || {
65: rm -f ${TMP}
66: exit 1
67: }
1.1 millert 68: FLAGS[${#FLAGS[@]}]="-v"
69: FLAGS[${#FLAGS[@]}]="-o"
70: FLAGS[${#FLAGS[@]}]="$VTMP"
71: ;;
72: x) FLAGS[${#FLAGS[@]}]="-x"
73: ;;
74: d) DICT="$OPTARG"
75: LANG=
76: ;;
77: s) STOP="$OPTARG"
78: STOP_LANG=
79: LOCAL_STOP=
80: ;;
81: h) HISTFILE="$OPTARG"
82: ;;
83: *) echo "$USAGE" 1>&2
84: exit 1
85: ;;
86: esac
87: done
88: shift $(( $OPTIND - 1 ))
89:
90: while test $# -ne 0; do
91: case "$1" in
92: +*) EXTRA="$EXTRA ${1#+}"
93: shift
94: ;;
95: *) break
96: ;;
97: esac
98: done
99:
100: # Any parameters left are files to be checked, pass them to deroff
101: DEROFF="$DEROFF $@"
102:
103: if [ -n "$HISTFILE" ]; then
104: $DEROFF | sort -u | $SPELLPROG -o $TMP $STOP $STOP_LANG | \
105: $SPELLPROG ${FLAGS[*]} $DICT $LANG $EXTRA | sort -u -k1f - $TMP | \
106: tee -a $HISTFILE
107: who -m >> $HISTFILE
108: else
109: $DEROFF | sort -u | $SPELLPROG -o $TMP $STOP $STOP_LANG | \
110: $SPELLPROG ${FLAGS[*]} $DICT $LANG $EXTRA | sort -u -k1f - $TMP
111: fi
112:
113: if [ -n "$VTMP" ]; then
114: sort -u -k2f -k1 $VTMP
115: fi
116:
117: exit 0