basic-command.scm 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. ; Part of Scheme 48 1.9. See file COPYING for notices and license.
  2. ; Authors: Richard Kelsey, Jonathan Rees
  3. ; run
  4. (define-command-syntax 'run "<exp>" "evaluate an expression" '(expression))
  5. (define (run exp)
  6. (evaluate-and-select exp (environment-for-commands)))
  7. ; exit-when-done
  8. (define-command-syntax 'exit-when-done "[<status>]"
  9. "leave Scheme after all threads finish"
  10. '(&opt expression))
  11. (define (exit-when-done . exp-option)
  12. (let ((status (if (null? exp-option)
  13. 0
  14. (eval (car exp-option) (environment-for-commands)))))
  15. (terminate-command-processor! status)))
  16. (define-command-syntax 'exit
  17. "[<status>]"
  18. "leave Scheme now"
  19. '(&opt expression))
  20. (define (exit . exp-option)
  21. (let ((status (if (null? exp-option)
  22. 0
  23. (eval (car exp-option) (environment-for-commands)))))
  24. (scheme-exit-now status)))
  25. ; go
  26. (define-command-syntax 'go "<exp>" "leave Scheme via tail recursion"
  27. '(expression))
  28. (define (go exp)
  29. (let ((env (environment-for-commands)))
  30. (exit-command-processor (lambda () (eval exp env)))))
  31. ; load
  32. (define-command-syntax 'load "<filename> ..."
  33. "load Scheme source file(s)"
  34. '(&rest filename))
  35. (define (load . filenames)
  36. (apply really-load load-into filenames))
  37. (define-command-syntax 'load-script "<filename> ..."
  38. "load Scheme script(s)"
  39. '(&rest filename))
  40. (define (load-script . filenames)
  41. (apply really-load load-script-into filenames))
  42. (define (really-load load-into . filenames)
  43. (let ((env (environment-for-commands)))
  44. ;; (with-interaction-environment env
  45. ;; (lambda ()
  46. ((if (load-noisily?)
  47. (lambda (x) (x))
  48. silently)
  49. (lambda ()
  50. (noting-undefined-variables env
  51. (lambda ()
  52. (for-each (lambda (filename)
  53. (load-into filename env))
  54. filenames)))))));; ))
  55. ; help
  56. (define ? help)
  57. (define-command-syntax 'help
  58. "[<command-name>]"
  59. "list all commands, or give help on a specific command"
  60. '(&opt name))
  61. (define-command-syntax '? "[<command-name>]" "same as ,help" '(&opt name))