summaryrefslogtreecommitdiff
path: root/cursed.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'cursed.lisp')
-rw-r--r--cursed.lisp30
1 files changed, 30 insertions, 0 deletions
diff --git a/cursed.lisp b/cursed.lisp
index ee0dfa1..b3fedd7 100644
--- a/cursed.lisp
+++ b/cursed.lisp
@@ -1 +1,31 @@
(in-package #:cursed)
+
+(defclass text ()
+ ((data :type 'simple-string :initarg :data :reader data :initform nil)
+ (index :type '(unsigned-byte 44) :initarg :index :accessor index :initform 0)))
+
+(defun has-data? (cursor)
+ (< (index cursor) (length (data cursor))))
+
+(defun peek (cursor)
+ (char (data cursor)
+ (index cursor)))
+
+(defun advance (cursor)
+ (make-instance 'text
+ :data (data cursor)
+ :index (+ (index cursor) 1)))
+
+(defun distance (from to)
+ (- (index to)
+ (index from)))
+
+(defmethod print-object ((obj text) stream)
+ (print-unreadable-object (obj stream :type t)
+ (let ((str (if (has-data? obj)
+ (format nil "~{~a~a~a~}"
+ (str:context-window (data obj)
+ (index obj)
+ :side-length 10))
+ "END OF DATA")))
+ (substitute #\↲ #\Newline str))))