defs 809 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. nl='
  2. '
  3. tab=' '
  4. fn prompt {
  5. def=()
  6. what=()
  7. if(~ $1 -d && ! ~ $#* 1){
  8. def=$2
  9. shift
  10. shift
  11. }
  12. optstr=()
  13. if(~ $1 -w && ! ~ $#* 1){
  14. optstr=$2
  15. shift
  16. shift
  17. }
  18. pr=$1
  19. shift
  20. opts=($*)
  21. if(~ $#opts 0) {
  22. suf=' '
  23. }
  24. if not if(! ~ $#optstr 0) {
  25. if(~ $optstr '')
  26. suf=' '
  27. if not {
  28. pr=$pr^' ('^$"optstr^')'
  29. suf=''
  30. }
  31. }
  32. if not {
  33. pr=$pr^' ('^$1
  34. shift
  35. for(i)
  36. pr=$pr^', '^$i
  37. pr=$pr^')'
  38. suf=''
  39. }
  40. if(~ $#def 1)
  41. pr=$pr^$suf^'['^$def^']'
  42. pr=$pr^': '
  43. okay=no
  44. while(~ $okay no) {
  45. # whatis opts
  46. echo -n $pr >[1=2]
  47. ifs='' {rd=`{read}}
  48. if(~ $#rd 0)
  49. exit notdone
  50. rd=`{echo $rd}
  51. if(~ $#rd 0 || ~ $rd '')
  52. rd=$def
  53. switch($#opts){
  54. case 0
  55. if(! ~ $rd '')
  56. okay=yes
  57. case *
  58. if(~ $rd $opts)
  59. okay=yes
  60. }
  61. }
  62. echo -n $rd >/env/rd # just in case
  63. }