/usr.bin/spell/spell.ksh

https://github.com/avsm/src · Korn Shell · 120 lines · 87 code · 9 blank · 24 comment · 8 complexity · f4b5ee38fdb0d27cfcb2c956c7044150 MD5 · raw file

  1. #!/bin/ksh -
  2. #
  3. # $OpenBSD: spell.ksh,v 1.11 2007/04/17 16:56:23 millert Exp $
  4. #
  5. # Copyright (c) 2001, 2003 Todd C. Miller <Todd.Miller@courtesan.com>
  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. #
  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=
  38. USAGE="usage: spell [-biltvx] [-d list] [-h spellhist] [-m a | e | l | m | s]\n\t[-s list] [+extra_list] [file ...]"
  39. set -o posix # set POSIX mode to prevent +foo in getopts
  40. OPTIND=1 # force getopts to reset itself
  41. trap "rm -f $TMP $VTMP; exit 0" 0 1 2 15
  42. # Use local word/stop lists if they exist
  43. if [ -f $LOCAL_DICT ]; then
  44. DICT="$DICT $LOCAL_DICT"
  45. fi
  46. if [ -f $LOCAL_STOP ]; then
  47. STOP="$STOP $LOCAL_STOP"
  48. fi
  49. while getopts "biltvxd:h:m:s:" c; do
  50. case $c in
  51. b) LANG=$BRITISH
  52. STOP_LANG=$AMERICAN
  53. FLAGS[${#FLAGS[@]}]="-b"
  54. ;;
  55. i) DEROFF="$DEROFF -i"
  56. ;;
  57. l) DEROFF="delatex"
  58. ;;
  59. m) DEROFF="$DEROFF -m $OPTARG"
  60. ;;
  61. t) DEROFF="detex -w"
  62. ;;
  63. v) VTMP=`mktemp /tmp/spell.XXXXXXXX` || {
  64. rm -f ${TMP}
  65. exit 1
  66. }
  67. FLAGS[${#FLAGS[@]}]="-v"
  68. FLAGS[${#FLAGS[@]}]="-o"
  69. FLAGS[${#FLAGS[@]}]="$VTMP"
  70. ;;
  71. x) FLAGS[${#FLAGS[@]}]="-x"
  72. ;;
  73. d) DICT="$OPTARG"
  74. LANG=
  75. ;;
  76. s) STOP="$OPTARG"
  77. STOP_LANG=
  78. LOCAL_STOP=
  79. ;;
  80. h) HISTFILE="$OPTARG"
  81. ;;
  82. *) echo "$USAGE" 1>&2
  83. exit 1
  84. ;;
  85. esac
  86. done
  87. shift $(( $OPTIND - 1 ))
  88. while test $# -ne 0; do
  89. case "$1" in
  90. +*) EXTRA="$EXTRA ${1#+}"
  91. shift
  92. ;;
  93. *) break
  94. ;;
  95. esac
  96. done
  97. # Any parameters left are files to be checked, pass them to deroff
  98. DEROFF="$DEROFF $@"
  99. if [ -n "$HISTFILE" ]; then
  100. $DEROFF | sort -u | $SPELLPROG -o $TMP $STOP $STOP_LANG | \
  101. $SPELLPROG ${FLAGS[*]} $DICT $LANG $EXTRA | sort -u -k1f - $TMP | \
  102. tee -a $HISTFILE
  103. who -m >> $HISTFILE
  104. else
  105. $DEROFF | sort -u | $SPELLPROG -o $TMP $STOP $STOP_LANG | \
  106. $SPELLPROG ${FLAGS[*]} $DICT $LANG $EXTRA | sort -u -k1f - $TMP
  107. fi
  108. if [ -n "$VTMP" ]; then
  109. sort -u -k2f -k1 $VTMP
  110. fi
  111. exit 0