(define-library (chibi snow interface)
  (export warn info message die input input-password input-number yes-or-no?
          restore-history save-history)
  (import (scheme base) (scheme char) (scheme read) (scheme write)
          (scheme file) (scheme process-context) (srfi 1)
          (chibi config) (chibi pathname) (chibi show)
          (chibi term edit-line))
  (cond-expand
   (chibi
    (import (chibi filesystem)))
   (chicken
    (import posix)
    (begin
      (define (create-directory* dir) (create-directory dir #t))))
   (sagittarius
    (import (only (sagittarius) create-directory)
            (chibi string))
    (begin
      (define (create-directory* dir . o)
        (let ((mode (if (pair? o) (car o) #o755)))
          (or (file-directory? dir)
              (create-directory dir mode)
              (let* ((start (string-cursor-start dir))
                     (slash
                      (string-find-right dir #\/ start
                                         (string-skip-right dir #\/))))
                (and (string-cursor>? slash start)
                     (let ((parent (substring-cursor dir start slash)))
                       (and (not (equal? parent dir))
                            (not (file-exists? parent))
                            (create-directory* parent mode)
                            (create-directory dir mode)))))))))))
  (include "interface.scm"))