anchor.diff:    (stream file-ptr))
   
   (defun close-file-ptr (file-ptr)
  +  "Close a file-ptr pointer created with `file-ptr-wrapper-for-fd'.
  +
  +The file-ptr will not be closed automatically by the garbage
  +collector."
     (with-safe-fd-manipulation
       (debug-log status "FCLOSE ~A" file-ptr)
       (forget (fileno file-ptr))
       (fclose file-ptr)))
   
   (defun file-ptr-wrapper-for-fd (fd mode)
  +  "Create a file-ptr which interacts with a dup'd version of the given
  +fd.
  +
  +This file-ptr must be closed with `close-file-ptr'.  The garbage
  +collector will not close it for you."
     (with-safe-fd-manipulation
       (let* ((new-fd (track (dup fd)))
              (result (fdopen new-fd mode)))
         (debug-log status "FDOPEN ~A ~A = ~A" result new-fd fd)
         result)))
   
  -(defvar *editline-sidetable* (make-hash-table))
  +(defvar *editline-sidetable* (make-hash-table)
  +  "This table provides a way to find the instance of the `editline'
  +class corresponding to a given `editline-ptr'.")
   
   (defclass editline ()
     ((stdin
  -    :reader editline-stdin)
  +    :reader editline-stdin
  +    :documentation
  +    "A lisp stream which communicates with the same endpoint as the
  +stdin editline is using.")
      (stdout
  -    :reader editline-stdout)
  +    :reader editline-stdout
  +        :documentation
  +    "A lisp stream which communicates with the same endpoint as the
  +stdout editline is using.")
      (stderr
  -    :reader editline-stderr)
  -
  -   ;; Low-level stuff
  -   prompt
  -   rprompt
  -   fin
  -   fout
  -   ferr
  -   ptr
  +    :reader editline-stderr
  +        :documentation
  +    "A lisp stream which communicates with the same endpoint as the
  +stderr editline is using.")
  +   (ptr
  +    :documentation
  +    "The editline-ptr associated with this instance.")
  +
  +   ;; Resources that need to be freed
  +   (prompt
  +    :documentation
  +    "The C-string representing the prompt that editline should use.")
  +   (rprompt
  +    :documentation
  +    "The C-string representing the rprompt that editline should use.")
  +   (fin
  +    :documentation
  +    "The file-ptr that was provided to editline for stdin.")
  +   (fout
  +    :documentation
  +    "The file-ptr that was provided to editline for stdout.")
  +   (ferr
  +    :documentation
  +    "The file-ptr that was provided to editline for stderr.")
      (command-data
  -    :initform (make-hash-table))))
  +    :initform (make-hash-table)
  +    :documentation
  +    "Contains `command-data' that was provided to editline.")))
   
   (defstruct command-data
  +  "A struct that contains pointers which need to be freed."
     (name-ptr (null-pointer))
     (help-ptr (null-pointer)))
   
   (defun extra (e)
  +  "Look up the `editline' instance associated with the given
  +`editline-ptr'."
     (gethash (pointer-address e) *editline-sidetable*))
   
   (defun forget-extra (e)
  +  "Remove the `editline' instance associated with the given
  +`editline-ptr' from `*editline-sidetable*'."
     (remhash (pointer-address e) *editline-sidetable*)
     (values))
   
  
positive.code:    :shcl/shell/prompt-types)
    (:import-from :shcl/core/environment #:env)
    (:import-from :shcl/core/posix #:posix-write #:dup)
    (:import-from :shcl/core/fd-table
                  #:make-fd-stream #:fd-stream #:with-safe-fd-manipulation #:track
                  #:forget #:get-fd)
    (:import-from :shcl/core/support #:string-table)
    (:import-from :fset)
    (:export #:get-line #:make-editline-stream))
  
negative.code:     (make-lineinfo :text buffer-text :cursor-index cursor-position)))
  
  (defun editline-line (e)
    "Retrieve information about the line the user is currently authoring.
  
  Returns a `lineinfo' instance."
    (with-slots (ptr) e
      (convert-lineinfo (el-line ptr))))
  
  