(define-library (chibi shell)
  (import (scheme base) (scheme bitwise) (scheme char) (scheme cxr)
          (scheme list) (scheme write) (srfi 130)
          (chibi io) (chibi filesystem) (chibi process)
          (only (chibi) port-fileno define-auxiliary-syntax))
  (export shell shell& shell-pipe call-with-shell-io
          shell->string shell->string-list
          shell->sexp shell->sexp-list
          shell-if shell-and shell-or shell-do
          in< out> err> out>> err>> >< >> <<)
  (begin
    (define shell-fork fork)
    (define shell-exec execute)
    (define shell-exit exit)
    (define (shell-wait pid)
      (cadr (waitpid pid 0)))
    (define (shell-create-pipe) (apply cons (open-pipe)))
    (define shell-dup duplicate-file-descriptor-to)
    (define shell-open-input open-input-file-descriptor)
    (define shell-open-output open-output-file-descriptor)
    (define shell-close close-file-descriptor)
    (define (shell-port->fd port)
      (port-fileno port))
    (define (shell-fd->input-port fd)
      (open-input-file-descriptor fd))
    (define (shell-fd->output-port fd)
      (open-output-file-descriptor fd)))
  (include "shell.scm"))