- T((T_CALLED("endwin()")));
-
- if (SP) {
- SP->_endwin = TRUE;
- SP->_mouse_wrap(SP);
- _nc_screen_wrap();
- _nc_mvcur_wrap(); /* wrap up cursor addressing */
- returnCode(reset_shell_mode());
+ int code = ERR;
+
+ T((T_CALLED("endwin(%p)"), (void *) SP_PARM));
+
+ if (SP_PARM != NULL) {
+ if (SP_PARM->_endwin != ewSuspend) {
+#ifdef USE_TERM_DRIVER
+ TERMINAL_CONTROL_BLOCK *TCB = TCBOf(SP_PARM);
+
+ SP_PARM->_endwin = ewSuspend;
+ if (TCB && TCB->drv && TCB->drv->td_scexit)
+ TCB->drv->td_scexit(SP_PARM);
+#else
+ SP_PARM->_endwin = ewSuspend;
+ SP_PARM->_mouse_wrap(SP_PARM);
+ _nc_screen_wrap();
+ _nc_mvcur_wrap(); /* wrap up cursor addressing */
+#endif
+ code = OK;
+ }
+ if (NCURSES_SP_NAME(reset_shell_mode) (NCURSES_SP_ARG) == ERR)
+ code = ERR;