Index: main/curses.lisp
===================================================================
--- main/curses.lisp	(revision main,1)
+++ main/curses.lisp	(revision main,1)
@@ -0,0 +1,57 @@
+(defpackage #:curses
+  (:use #:cl #:cffi))
+
+(in-package #:curses)
+
+
+
+(define-foreign-library ncurses
+  (t (:default "libncurses")))
+
+(use-foreign-library ncurses)
+
+(defctype window* :pointer)
+
+(defcfun initscr window*)
+(defcfun endwin :int)
+(defcfun refresh :int)
+(defcfun cbreak :int)
+(defcfun noecho :int)
+(defcfun getch :int)
+
+
+
+(define-foreign-library menu
+  (t (:default "libmenu")))
+
+(use-foreign-library menu)
+
+(defctype item* :pointer)
+(defctype menu* :pointer)
+
+(defcfun new-item item* (name :string) (description :string))
+(defcfun free-item :int (item item*))
+(defcfun new-menu menu* (items :pointer))
+(defcfun post-menu :int (menu menu*))
+(defcfun menu-driver :int (menu menu*) (c :int))
+
+
+
+(defun make-menu (items)
+  (let* ((items-vector
+          (map 'vector
+               (lambda (item)
+                 (etypecase item
+                   (string (new-item (foreign-string-alloc item) (foreign-string-alloc item)))
+                   (cons (new-item (foreign-string-alloc (car item)) (foreign-string-alloc (cdr item))))))
+               items))
+         (foreign-items (foreign-alloc 'item*
+                                       :count (length items-vector)
+                                       :initial-contents items-vector
+                                       :null-terminated-p t)))
+    (new-menu foreign-items)))
+
+(defun init-screen ()
+  (initscr)
+  (cbreak)
+  (noecho))
