You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
1.7KB

  1. (module io (display-newline display-lines show adventure-prompt prompt prompt-default prompt-yn)
  2. (import scheme)
  3. (import chicken.base)
  4. (import srfi-1)
  5. (import srfi-13)
  6. (import fmt)
  7. (import fmt-color)
  8. (import breadline)
  9. (import ncurses)
  10. (import util)
  11. (import comparse)
  12. (import parse)
  13. (define display-newline
  14. (compose (just newline) display))
  15. (define (display-lines ln)
  16. (perhaps (curry map display-newline) ln))
  17. (define (show str)
  18. (fmt #t (dsp (wrap-lines str))))
  19. (define (prompt str)
  20. (newline)
  21. (let ((result (readline str)))
  22. (if (equal? "" result)
  23. (prompt str)
  24. (begin
  25. (add-history! result)
  26. result))))
  27. (define (prompt-yn str)
  28. (newline)
  29. (let ((result (string-downcase (readline str))))
  30. (cond ((equal? "yes" result) #t)
  31. ((equal? "no" result) #f)
  32. (else (begin
  33. (newline)
  34. (display "Please answer yes or no.")
  35. (prompt-yn str))))))
  36. (define (prompt-default str default)
  37. (map stuff-char (string->list default))
  38. (let loop ()
  39. (let ((result (readline str)))
  40. (if (equal? "" result)
  41. (loop)
  42. result))))
  43. (define +articles-prepositions+
  44. '(a an the into on to at as))
  45. (define (adventure-prompt)
  46. (let ((result (parse-line (prompt "> "))))
  47. (if result
  48. (let ((grug-result (filter (compose not (cut member <> +articles-prepositions+)) result)))
  49. (if (not (null? grug-result))
  50. grug-result
  51. (begin (display "I didn't quite understand that.")
  52. (adventure-prompt))))
  53. (begin (display "I didn't quite understand that.")
  54. (adventure-prompt))))))
  55. ; (define parse-formatter
  56. ; (recursive-parser (one-or-more (any-of (followed-by-consuming (char-seq "<b>") (lift fmt-bold parser))
  57. ; (is-not #\<))))))