diff --git a/demo/_curses.py b/demo/_curses.py
index 46d7c3ff403163b407a74834a5ae0267c44ece21_ZGVtby9fY3Vyc2VzLnB5..9793a0cbb33d258028d2a6683d4cef1dc1c37098_ZGVtby9fY3Vyc2VzLnB5 100644
--- a/demo/_curses.py
+++ b/demo/_curses.py
@@ -22,6 +22,11 @@
 
 int setupterm(char *term, int fildes, int *errret);
 
+int tigetflag(char *);
+int tigetnum(char *);
+char *tigetstr(char *);
+char *tparm (char *, ...);
+
 int cbreak(void);
 int nocbreak(void);
 int echo(void);
@@ -205,4 +210,5 @@
 
 initscr = Window
 
+_setupterm_called = False
 
@@ -208,5 +214,13 @@
 
-def setupterm(term=ffi.NULL, fd=-1):
+
+def _ensure_setupterm_called():
+    if not _setupterm_called:
+        raise error("must call (at least) setupterm() first")
+
+
+def setupterm(term=None, fd=-1):
+    if term is None:
+        term = ffi.NULL
     if fd < 0:
         import sys
         fd = sys.stdout.fileno()
@@ -219,6 +233,33 @@
         else:
             s = "setupterm: unknown error %d" % err[0]
         raise error(s)
+    global _setupterm_called
+    _setupterm_called = True
+
+
+def tigetflag(capname):
+    _ensure_setupterm_called()
+    return lib.tigetflag(capname)
+
+
+def tigetnum(capname):
+    _ensure_setupterm_called()
+    return lib.tigetnum(capname)
+
+
+def tigetstr(capname):
+    _ensure_setupterm_called()
+    out = lib.tigetstr(capname)
+    if out == ffi.NULL:
+        return None
+    return ffi.string(out)
+
+
+def tparm(name, *args):
+    _ensure_setupterm_called()
+    cargs = [ffi.cast("long", arg) for arg in args]
+    return ffi.string(lib.tparm(name, *cargs))
+
 
 def color_pair(n):
     return n << 8