   (out< [this options])
 
   (out<< [this callback options]))
+
+(defn process-input-text [terminal text]
+  (loop [text text]
+    (cond
+      (<= (count text) 0)
+      nil
+      (.startsWith text "\n")
+      (do 
+        (new-line! terminal)
+        (recur (-> text rest rest)))
+      (.startsWith text "\b")
+      (do
+        (delete-backward-char! terminal)
+        (recur (-> text rest rest)))
+      :else
+      (do
+        (put-char! terminal (first text))
+        (right-char! terminal))
+      )))
 
 (defn terminal
   [screen

                   ::out-channel
                   ::options]))

(defn process-input-text [terminal text]
  (cond
    (.startsWith text "\n")
    (do 
      
      )
    ))

(defprotocol ITerminal
  (init [this])
  (current-position [this])
  (move-to! [this col row])
  (put-char! [this char])
  (up-char! [this])
  (right-char! [this])
  (down-char! [this])
  (left-char! [this])
  (in> [this input options])
  (in>> [this input options])
  (refresh! [this])

  (put-char! [this char]
    (let [[i j] (current-position this)]
      (reset! screen (screen/put-char @screen char i j {}))))

  (delete-char! [this]
    (let [[i j] (current-position this)]
      (reset! screen (screen/clear-block @screen i j))))

  (up-char! [this]
    (let [[i j] (current-position this)]
