]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/tinfo/tinfo_driver.c
ncurses 5.9 - patch 20150404
[ncurses.git] / ncurses / tinfo / tinfo_driver.c
index e36541f331f000b4bfb28ec98c1a7547382a757f..a17accd358e543be61110f942c45e97d5f9a60c1 100644 (file)
@@ -50,7 +50,7 @@
 # endif
 #endif
 
 # endif
 #endif
 
-MODULE_ID("$Id: tinfo_driver.c,v 1.33 2014/03/08 20:33:38 tom Exp $")
+MODULE_ID("$Id: tinfo_driver.c,v 1.39 2014/09/27 21:58:57 tom Exp $")
 
 /*
  * SCO defines TIOCGSIZE and the corresponding struct.  Other systems (SunOS,
 
 /*
  * SCO defines TIOCGSIZE and the corresponding struct.  Other systems (SunOS,
@@ -106,6 +106,13 @@ drv_doupdate(TERMINAL_CONTROL_BLOCK * TCB)
     return TINFO_DOUPDATE(TCB->csp);
 }
 
     return TINFO_DOUPDATE(TCB->csp);
 }
 
+static const char *
+drv_Name(TERMINAL_CONTROL_BLOCK * TCB)
+{
+    (void) TCB;
+    return "tinfo";
+}
+
 static bool
 drv_CanHandle(TERMINAL_CONTROL_BLOCK * TCB, const char *tname, int *errret)
 {
 static bool
 drv_CanHandle(TERMINAL_CONTROL_BLOCK * TCB, const char *tname, int *errret)
 {
@@ -114,6 +121,8 @@ drv_CanHandle(TERMINAL_CONTROL_BLOCK * TCB, const char *tname, int *errret)
     TERMINAL *termp;
     SCREEN *sp;
 
     TERMINAL *termp;
     SCREEN *sp;
 
+    T((T_CALLED("tinfo::drv_CanHandle(%p)"), TCB));
+
     assert(TCB != 0 && tname != 0);
     termp = (TERMINAL *) TCB;
     sp = TCB->csp;
     assert(TCB != 0 && tname != 0);
     termp = (TERMINAL *) TCB;
     sp = TCB->csp;
@@ -169,7 +178,7 @@ drv_CanHandle(TERMINAL_CONTROL_BLOCK * TCB, const char *tname, int *errret)
        ret_error1(TGETENT_YES, "I can't handle hardcopy terminals.\n", tname);
     }
 
        ret_error1(TGETENT_YES, "I can't handle hardcopy terminals.\n", tname);
     }
 
-    return result;
+    returnBool(result);
 }
 
 static int
 }
 
 static int
@@ -376,7 +385,7 @@ drv_size(TERMINAL_CONTROL_BLOCK * TCB, int *linep, int *colp)
        /* try asking the OS */
        {
            TERMINAL *termp = (TERMINAL *) TCB;
        /* try asking the OS */
        {
            TERMINAL *termp = (TERMINAL *) TCB;
-           if (isatty(termp->Filedes)) {
+           if (NC_ISATTY(termp->Filedes)) {
                STRUCT_WINSIZE size;
 
                errno = 0;
                STRUCT_WINSIZE size;
 
                errno = 0;
@@ -662,7 +671,7 @@ drv_init(TERMINAL_CONTROL_BLOCK * TCB)
      * _nc_setupscreen().  Do it now anyway, so we can initialize the
      * baudrate.
      */
      * _nc_setupscreen().  Do it now anyway, so we can initialize the
      * baudrate.
      */
-    if (isatty(trm->Filedes)) {
+    if (NC_ISATTY(trm->Filedes)) {
        TCB->drv->td_mode(TCB, TRUE, TRUE);
     }
 }
        TCB->drv->td_mode(TCB, TRUE, TRUE);
     }
 }
@@ -1001,7 +1010,7 @@ drv_initacs(TERMINAL_CONTROL_BLOCK * TCB, chtype *real_map, chtype *fake_map)
        size_t i;
        for (i = 1; i < ACS_LEN; ++i) {
            if (real_map[i] == 0) {
        size_t i;
        for (i = 1; i < ACS_LEN; ++i) {
            if (real_map[i] == 0) {
-               real_map[i] = i;
+               real_map[i] = (chtype) i;
                if (real_map != fake_map) {
                    if (sp != 0)
                        sp->_screen_acs_map[i] = TRUE;
                if (real_map != fake_map) {
                    if (sp != 0)
                        sp->_screen_acs_map[i] = TRUE;
@@ -1289,6 +1298,35 @@ drv_keyok(TERMINAL_CONTROL_BLOCK * TCB, int c, int flag)
     return (code);
 }
 
     return (code);
 }
 
+static int
+drv_cursorSet(TERMINAL_CONTROL_BLOCK * TCB, int vis)
+{
+    SCREEN *sp;
+    int code = ERR;
+
+    AssertTCB();
+    SetSP();
+
+    T((T_CALLED("tinfo:drv_cursorSet(%p,%d)"), (void *) SP_PARM, vis));
+
+    if (SP_PARM != 0 && IsTermInfo(SP_PARM)) {
+       switch (vis) {
+       case 2:
+           code = NCURSES_PUTP2_FLUSH("cursor_visible", cursor_visible);
+           break;
+       case 1:
+           code = NCURSES_PUTP2_FLUSH("cursor_normal", cursor_normal);
+           break;
+       case 0:
+           code = NCURSES_PUTP2_FLUSH("cursor_invisible", cursor_invisible);
+           break;
+       }
+    } else {
+       code = ERR;
+    }
+    returnCode(code);
+}
+
 static bool
 drv_kyExist(TERMINAL_CONTROL_BLOCK * TCB, int key)
 {
 static bool
 drv_kyExist(TERMINAL_CONTROL_BLOCK * TCB, int key)
 {
@@ -1303,6 +1341,7 @@ drv_kyExist(TERMINAL_CONTROL_BLOCK * TCB, int key)
 
 NCURSES_EXPORT_VAR (TERM_DRIVER) _nc_TINFO_DRIVER = {
     TRUE,
 
 NCURSES_EXPORT_VAR (TERM_DRIVER) _nc_TINFO_DRIVER = {
     TRUE,
+       drv_Name,               /* Name */
        drv_CanHandle,          /* CanHandle */
        drv_init,               /* init */
        drv_release,            /* release */
        drv_CanHandle,          /* CanHandle */
        drv_init,               /* init */
        drv_release,            /* release */
@@ -1336,5 +1375,6 @@ NCURSES_EXPORT_VAR (TERM_DRIVER) _nc_TINFO_DRIVER = {
        drv_nap,                /* nap */
        drv_kpad,               /* kpad */
        drv_keyok,              /* kyOk */
        drv_nap,                /* nap */
        drv_kpad,               /* kpad */
        drv_keyok,              /* kyOk */
-       drv_kyExist             /* kyExist */
+       drv_kyExist,            /* kyExist */
+       drv_cursorSet           /* cursorSet */
 };
 };