Index: main/flat-menu.lisp
===================================================================
--- main/flat-menu.lisp	(revision main,7)
+++ main/flat-menu.lisp	(revision main,7)
@@ -0,0 +1,75 @@
+(defpackage #:flat-menu
+  (:use #:cl #:cffi)
+  (:export))
+
+(in-package #:flat-menu)
+
+
+
+(defclass entry ()
+  ((window :initarg :window)
+   (row :initarg :row)
+   (column :initarg :column)
+   (text :initarg :text)
+   (highlight :accessor highlight)))
+
+(defun draw-entry (entry)
+  (with-slots (window row column text highlight) entry
+    (when highlight
+      (cdk::c-wattron window 262144))
+    (cdk::move-and-add-string window row column text)
+    (when highlight
+      (cdk::c-wattroff window 262144))))
+
+(defmethod (setf highlight) :after (flag (entry entry))
+  (draw-entry entry))
+
+(defun activate-entry (entry)
+  (with-slots (window) entry
+    (setf (highlight entry) t)
+    (cdk::c-refresh-window window)
+    (let ((ch (cdk::c-wgetch window)))
+      (setf (highlight entry) nil)
+      ch)))
+
+(defclass menu ()
+  ((entries :type vector :initarg :entries)
+   (selected :type (integer 0) :accessor selected)))
+
+(defmethod initialize-instance :after ((menu menu) &rest initargs)
+  (with-slots (entries) menu
+    (dotimes (i (length entries))
+      (setf (highlight (aref entries i)) nil))
+    (setf (selected menu) 0)))
+
+(defun activate-menu (menu)
+  (with-slots (entries selected) menu
+    (loop
+       (multiple-value-bind (exit) (activate-entry (aref entries selected))
+         (cond
+           ((= exit 258)
+            
+            (incf selected))
+           ((= exit 259)
+            (decf selected))
+           (t (break)))
+         (setf selected (mod selected (length entries)))))))
+
+(defun test ()
+  (let ((screen (cdk::c-init-curses-screen)))
+    (cdk::c-cbreak)
+    (cdk::c-noecho)
+    (cdk::c-nonl)
+    (cdk::c-keypad screen t)
+    (cdk::c-init-color)
+    (cdk::c-erase-window screen)
+    (let ((entry1 (make-instance 'entry :window screen :row 5 :column 10 :text "Hello, world!"))
+          (entry2 (make-instance 'entry :window screen :row 6 :column 10 :text "Goodbye, galaxy!")))
+      (setf (highlight entry1) t)
+      (let ((menu (make-instance 'menu :entries (vector entry1 entry2))))
+        (activate-menu menu)
+        (format t "Here~%")
+        (read-line)))
+    (cdk::c-refresh-window screen)
+    (read-line)
+    (cdk::c-end-curses)))
