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