#lang scheme
;;entrada-salida I-O

;;puertos = dispositivos buffered
;; puerto de entrada y puerto de salida
;(current-input-port)
;(current-output-port)

(define lectura-escritura-en-port
  (lambda ()
    (let* ((port-in (current-input-port))
           (input-leido (read port-in))
           (port-out (current-output-port))
           )
      (fprintf port-out "Escribimos en el puerto ~a,
                         lo leído desde ~a: ~a~n" 
               port-out port-in input-leido)
      ) ))

(define los-predicados-del-tipo
  (lambda (puerto)
    (if (port? puerto)
        (if (port-closed? puerto)
            (printf "~a es un puerto cerrado~n" puerto)
            (if (input-port? puerto)
                (printf "~a es un puerto de entrada~n" puerto)
                (if (output-port? puerto)
                    (printf "~a es un puerto de salida~n" 
                            puerto)
                    (printf "~a no es un puerto~n" puerto)
                        )
                    )
                )
        (printf "~a no es un puerto~n" puerto) ) ))

;;; Cada fichero está en algún sitio.
;;; Path = trayectoria que conduce al sitio
(define dir-path "/Volumes/usuario/ZETA/")

;;; Cada fichero tiene un nombre y una extensión
;;; prueba1 = nombre; txt = extensión
(define nombre-fichero "prueba1.txt")

;;; la variable in-port-1 tiene como valor el puerto
;;; que devuelve open-input-file.
(define in-port-1 
  (open-input-file 
   (string-append dir-path nombre-fichero)))

;;; Primera prueba de lectura del contenido del fichero
(define read-mientras-no-eof
  (lambda (in-port)
    (let go ((item (read in-port)))
      (if (eof-object? item)
          (close-input-port in-port)
          (begin
            (display item)
            (go (read in-port))) ) ) ))

(read-mientras-no-eof in-port-1)
;;; Tercera prueba de lectura
(define peek-char-mientras-no-eof
  (lambda (in-port)
    (let go ((item (peek-char in-port)))
      (if (eof-object? item)
          (char-ready? in-port);(close-input-port in-port)
          (begin
            (display item)
            (go (peek-char in-port))) ) ) ))

;(peek-char-mientras-no-eof in-port-1)

