From 14475c9591fa79d0bbba5569e4442150d508bfd4 Mon Sep 17 00:00:00 2001 From: William McBrine Date: Sun, 16 Jul 2006 19:56:08 +0000 Subject: [PATCH] Removed the XCURSES ifdefs from Xinitscr() and delscreen(), which now also calls XCursesExit(). --- curspriv.h | 8 ++++--- dos/pdcscrn.c | 53 +++++++++++++++++++++------------------- os2/pdcscrn.c | 60 ++++++++++++++++++++++++++-------------------- pdcurses/initscr.c | 25 ++++--------------- win32/pdcscrn.c | 45 ++++++++++++++++++---------------- x11/pdcscrn.c | 37 +++++++++++++++------------- x11/pdcx11.h | 3 ++- 7 files changed, 119 insertions(+), 112 deletions(-) diff --git a/curspriv.h b/curspriv.h index 36bb7414..abd46197 100644 --- a/curspriv.h +++ b/curspriv.h @@ -15,7 +15,7 @@ * See the file maintain.er for details of the current maintainer. * ************************************************************************/ -/* $Id: curspriv.h,v 1.91 2006/07/16 18:41:53 wmcbrine Exp $ */ +/* $Id: curspriv.h,v 1.92 2006/07/16 19:56:07 wmcbrine Exp $ */ /* CURSPRIV.H @@ -116,7 +116,7 @@ int PDC_reset_prog_mode(void); int PDC_reset_shell_mode(void); int PDC_resize_screen(int, int); int PDC_scr_close(void); -int PDC_scr_open(SCREEN *); +int PDC_scr_open(int, char **); int PDC_set_ctrl_break(bool); int PDC_set_cursor_mode(int, int); int PDC_set_font(int); @@ -142,7 +142,9 @@ int PDC_query_adapter_type(void); #ifdef XCURSES int XCursesInstructAndWait(int); -int XCursesInitscr(int, char **); +# define PDC_scr_exit() XCursesExit() +#else +# define PDC_scr_exit() if (SP) free(SP) #endif #ifdef PDCDEBUG diff --git a/dos/pdcscrn.c b/dos/pdcscrn.c index 0cd2c751..3b592072 100644 --- a/dos/pdcscrn.c +++ b/dos/pdcscrn.c @@ -24,7 +24,7 @@ # include #endif -RCSID("$Id: pdcscrn.c,v 1.32 2006/07/16 18:08:16 wmcbrine Exp $"); +RCSID("$Id: pdcscrn.c,v 1.33 2006/07/16 19:56:07 wmcbrine Exp $"); Regs regs; /* used in various other modules */ @@ -109,11 +109,11 @@ int PDC_scr_close(void) The DOS platform will never fail. Portability: - PDCurses int PDC_scr_open(SCREEN *internal); + PDCurses int PDC_scr_open(int argc, char **argv); **man-end****************************************************************/ -int PDC_scr_open(SCREEN *internal) +int PDC_scr_open(int argc, char **argv) { #if SMALL || MEDIUM # ifndef __PACIFIC__ @@ -123,44 +123,49 @@ int PDC_scr_open(SCREEN *internal) #endif PDC_LOG(("PDC_scr_open() - called\n")); - internal->orig_attr = FALSE; - internal->orig_emulation = getdosmembyte(0x487); + if ((SP = (SCREEN *)calloc(1, sizeof(SCREEN))) == (SCREEN *)NULL) + return ERR; - PDC_get_cursor_pos(&internal->cursrow, &internal->curscol); + SP->orig_attr = FALSE; + SP->orig_emulation = getdosmembyte(0x487); - internal->direct_video = TRUE; /* Assume that we can */ - internal->video_seg = 0xb000; /* Base screen segment addr */ - internal->video_ofs = 0x0; /* Base screen segment ofs */ - internal->video_page = 0; /* Current Video Page */ - internal->cursor = PDC_get_cursor_mode(); + PDC_get_cursor_pos(&SP->cursrow, &SP->curscol); - internal->adapter = PDC_query_adapter_type(); - internal->scrnmode = PDC_get_scrn_mode(); + SP->direct_video = TRUE; /* Assume that we can */ + SP->video_seg = 0xb000; /* Base screen segment addr */ + SP->video_ofs = 0x0; /* Base screen segment ofs */ + SP->video_page = 0; /* Current Video Page */ + SP->cursor = PDC_get_cursor_mode(); - internal->orig_font = internal->font = PDC_get_font(); - internal->lines = PDC_get_rows(); - internal->cols = PDC_get_columns(); + SP->adapter = PDC_query_adapter_type(); + SP->scrnmode = PDC_get_scrn_mode(); - internal->orig_cursor = internal->cursor; - internal->orgcbr = PDC_get_ctrl_break(); + SP->orig_font = SP->font = PDC_get_font(); + SP->lines = PDC_get_rows(); + SP->cols = PDC_get_columns(); + + SP->orig_cursor = SP->cursor; + SP->orgcbr = PDC_get_ctrl_break(); /* If the environment variable PDCURSES_BIOS is set, the DOS int10() BIOS calls are used in place of direct video memory access. */ if (getenv("PDCURSES_BIOS") != NULL) - internal->direct_video = FALSE; + SP->direct_video = FALSE; /* This code for preserving the current screen. */ if (getenv("PDC_RESTORE_SCREEN") != NULL) { - saved_lines = internal->lines; - saved_cols = internal->cols; + saved_lines = SP->lines; + saved_cols = SP->cols; if ((saved_screen = (unsigned short*)malloc(saved_lines * saved_cols * sizeof(unsigned short))) == NULL) - return ERR; - + { + SP->_preserve = FALSE; + return OK; + } #ifdef __DJGPP__ dosmemget ((unsigned long)_FAR_POINTER(SP->video_seg, SP->video_ofs), saved_lines * saved_cols * @@ -183,7 +188,7 @@ int PDC_scr_open(SCREEN *internal) #endif } - internal->_preserve = (getenv("PDC_PRESERVE_SCREEN") != NULL); + SP->_preserve = (getenv("PDC_PRESERVE_SCREEN") != NULL); return OK; } diff --git a/os2/pdcscrn.c b/os2/pdcscrn.c index d930a5cf..85a7a2e5 100644 --- a/os2/pdcscrn.c +++ b/os2/pdcscrn.c @@ -20,7 +20,7 @@ #include #include -RCSID("$Id: pdcscrn.c,v 1.28 2006/07/16 18:08:16 wmcbrine Exp $"); +RCSID("$Id: pdcscrn.c,v 1.29 2006/07/16 19:56:07 wmcbrine Exp $"); #ifdef EMXVIDEO static unsigned char *saved_screen = NULL; @@ -132,36 +132,38 @@ bool PDC_scrn_modes_equal(int mode1, int mode2) The DOS platform will never fail. Portability: - PDCurses int PDC_scr_open(SCREEN *internal); + PDCurses int PDC_scr_open(int argc, char **argv); **man-end****************************************************************/ -int PDC_scr_open(SCREEN *internal) +int PDC_scr_open(int argc, char **argv) { char *ptr; #ifndef EMXVIDEO USHORT totchars; #endif + PDC_LOG(("PDC_scr_open() - called\n")); - PDC_LOG(("PDC_scr_open() - called. internal: %x\n", internal)); + if ((SP = (SCREEN *)calloc(1, sizeof(SCREEN))) == (SCREEN *)NULL) + return ERR; #ifdef EMXVIDEO v_init(); #endif - internal->orig_attr = FALSE; - internal->orig_emulation = 0; + SP->orig_attr = FALSE; + SP->orig_emulation = 0; - PDC_get_cursor_pos(&internal->cursrow, &internal->curscol); + PDC_get_cursor_pos(&SP->cursrow, &SP->curscol); - internal->cursor = PDC_get_cursor_mode(); + SP->cursor = PDC_get_cursor_mode(); #ifdef EMXVIDEO - internal->tahead = -1; + SP->tahead = -1; #endif #ifndef EMXVIDEO - PDC_query_adapter_type(&internal->adapter); - PDC_get_scrn_mode(&internal->scrnmode); - PDC_get_keyboard_info(&internal->kbdinfo); + PDC_query_adapter_type(&SP->adapter); + PDC_get_scrn_mode(&SP->scrnmode); + PDC_get_keyboard_info(&SP->kbdinfo); PDC_LOG(("PDC_scr_open() - after PDC_get_keyboard_info(). cb: %x, " "fsMask: %x, chTurnAround: %x, fsInterim: %x, fsState: %x\n", @@ -173,16 +175,16 @@ int PDC_scr_open(SCREEN *internal) PDC_set_keyboard_binary(); #else - internal->adapter = PDC_query_adapter_type(); - if (internal->adapter == _UNIX_MONO) - internal->mono = TRUE; + SP->adapter = PDC_query_adapter_type(); + if (SP->adapter == _UNIX_MONO) + SP->mono = TRUE; #endif - internal->orig_font = internal->font = PDC_get_font(); - internal->lines = PDC_get_rows(); - internal->cols = PDC_get_columns(); - internal->orig_cursor = internal->cursor; - internal->orgcbr = PDC_get_ctrl_break(); - internal->sizeable = TRUE; + SP->orig_font = SP->font = PDC_get_font(); + SP->lines = PDC_get_rows(); + SP->cols = PDC_get_columns(); + SP->orig_cursor = SP->cursor; + SP->orgcbr = PDC_get_ctrl_break(); + SP->sizeable = TRUE; /* This code for preserving the current screen */ @@ -194,18 +196,24 @@ int PDC_scr_open(SCREEN *internal) #endif if (ptr != NULL) { - saved_lines = internal->lines; - saved_cols = internal->cols; + saved_lines = SP->lines; + saved_cols = SP->cols; #ifdef EMXVIDEO if ((saved_screen = (unsigned char *)malloc(2 * saved_lines * saved_cols * sizeof(unsigned char))) == NULL) - return ERR; + { + SP->_preserve = FALSE; + return OK; + } v_getline(saved_screen, 0, 0, saved_lines * saved_cols); #else if ((saved_screen = (PCH)malloc(2 * saved_lines * saved_cols * sizeof(unsigned char))) == NULL) - return ERR; + { + SP->_preserve = FALSE; + return OK; + } totchars = saved_lines * saved_cols * 2; VioReadCellStr((PCH)saved_screen, &totchars, 0, 0, (HVIO)NULL); @@ -218,7 +226,7 @@ int PDC_scr_open(SCREEN *internal) if (DosScanEnv("PDC_PRESERVE_SCREEN", (PSZ *)&ptr)) ptr = NULL; #endif - internal->_preserve = (ptr != NULL); + SP->_preserve = (ptr != NULL); return OK; } diff --git a/pdcurses/initscr.c b/pdcurses/initscr.c index 2164a257..1600ac20 100644 --- a/pdcurses/initscr.c +++ b/pdcurses/initscr.c @@ -38,7 +38,7 @@ # undef wnoutrefresh #endif -RCSID("$Id: initscr.c,v 1.55 2006/07/16 18:41:53 wmcbrine Exp $"); +RCSID("$Id: initscr.c,v 1.56 2006/07/16 19:56:07 wmcbrine Exp $"); const char *_curses_notice = "PDCurses 3.0 - Public Domain 2006"; @@ -172,23 +172,12 @@ WINDOW *Xinitscr(int argc, char *argv[]) if (SP != (SCREEN *)NULL && SP->alive) return NULL; -#ifdef XCURSES - if (XCursesInitscr(argc, argv) == ERR) - exit(7); -#endif - -#ifdef XCURSES - if (SP == (SCREEN *)NULL) /* SP already attached in XCursesInitscr() */ -#else - if ((SP = (SCREEN *)calloc(1, sizeof(SCREEN))) == (SCREEN *)NULL) -#endif + if (PDC_scr_open(argc, argv) == ERR) { fprintf(stderr, "initscr(): Unable to create SP\n"); exit(8); } - PDC_scr_open(SP); - SP->autocr = TRUE; /* cr -> lf by default */ SP->raw_out = FALSE; /* tty I/O modes */ SP->raw_inp = FALSE; /* tty I/O modes */ @@ -369,13 +358,9 @@ void delscreen(SCREEN *sp) curscr = (WINDOW *)NULL; SP->alive = FALSE; -#ifndef XCURSES - if (SP) - { - free(SP); - SP = (SCREEN *)NULL; - } -#endif + PDC_scr_exit(); + + SP = (SCREEN *)NULL; } int resize_term(int nlines, int ncols) diff --git a/win32/pdcscrn.c b/win32/pdcscrn.c index 72818695..c419885b 100644 --- a/win32/pdcscrn.c +++ b/win32/pdcscrn.c @@ -19,7 +19,7 @@ #define INCLUDE_WINDOWS_H #include -RCSID("$Id: pdcscrn.c,v 1.38 2006/07/16 18:08:16 wmcbrine Exp $"); +RCSID("$Id: pdcscrn.c,v 1.39 2006/07/16 19:56:07 wmcbrine Exp $"); #define PDC_RESTORE_NONE 0 #define PDC_RESTORE_BUFFER 1 @@ -125,11 +125,11 @@ int PDC_scr_close(void) The DOS platform will never fail. Portability: - PDCurses int PDC_scr_open(SCREEN *internal); + PDCurses int PDC_scr_open(int argc, char **argv); **man-end****************************************************************/ -int PDC_scr_open(SCREEN *internal) +int PDC_scr_open(int argc, char **argv) { COORD bufsize, origin; SMALL_RECT rect; @@ -142,6 +142,9 @@ int PDC_scr_open(SCREEN *internal) #endif PDC_LOG(("PDC_scr_open() - called\n")); + if ((SP = (SCREEN *)calloc(1, sizeof(SCREEN))) == (SCREEN *)NULL) + return ERR; + hConOut = GetStdHandle(STD_OUTPUT_HANDLE); hConIn = GetStdHandle(STD_INPUT_HANDLE); @@ -149,34 +152,34 @@ int PDC_scr_open(SCREEN *internal) GetConsoleScreenBufferInfo(hConOut, &orig_scr); GetConsoleMode(hConIn, &dwConsoleMode); - internal->lines = ((str = getenv("LINES")) != NULL) ? + SP->lines = ((str = getenv("LINES")) != NULL) ? atoi(str) : PDC_get_rows(); - internal->cols = ((str = getenv("COLS")) != NULL) ? + SP->cols = ((str = getenv("COLS")) != NULL) ? atoi(str) : PDC_get_columns(); - if (internal->lines < 2 || internal->lines > csbi.dwMaximumWindowSize.Y) + if (SP->lines < 2 || SP->lines > csbi.dwMaximumWindowSize.Y) { fprintf(stderr, "LINES value must be >= 2 and <= %d: got %d\n", - csbi.dwMaximumWindowSize.Y, internal->lines); + csbi.dwMaximumWindowSize.Y, SP->lines); return ERR; } - if (internal->cols < 2 || internal->cols > csbi.dwMaximumWindowSize.X) + if (SP->cols < 2 || SP->cols > csbi.dwMaximumWindowSize.X) { fprintf(stderr, "COLS value must be >= 2 and <= %d: got %d\n", - csbi.dwMaximumWindowSize.X, internal->cols); + csbi.dwMaximumWindowSize.X, SP->cols); return ERR; } - internal->orig_fore = csbi.wAttributes & 0x0f; - internal->orig_back = (csbi.wAttributes & 0xf0) >> 4; + SP->orig_fore = csbi.wAttributes & 0x0f; + SP->orig_back = (csbi.wAttributes & 0xf0) >> 4; - internal->orig_attr = TRUE; + SP->orig_attr = TRUE; - internal->_restore = PDC_RESTORE_NONE; + SP->_restore = PDC_RESTORE_NONE; if (getenv("PDC_RESTORE_SCREEN") != NULL) { @@ -246,13 +249,13 @@ int PDC_scr_open(SCREEN *internal) return ERR; } - internal->_restore = PDC_RESTORE_WINDOW; + SP->_restore = PDC_RESTORE_WINDOW; } else - internal->_restore = PDC_RESTORE_BUFFER; + SP->_restore = PDC_RESTORE_BUFFER; } - internal->_preserve = (getenv("PDC_PRESERVE_SCREEN") != NULL); + SP->_preserve = (getenv("PDC_PRESERVE_SCREEN") != NULL); bufsize.X = orig_scr.srWindow.Right - orig_scr.srWindow.Left + 1; bufsize.Y = orig_scr.srWindow.Bottom - orig_scr.srWindow.Top + 1; @@ -268,14 +271,14 @@ int PDC_scr_open(SCREEN *internal) PDC_reset_prog_mode(); - PDC_get_cursor_pos(&internal->cursrow, &internal->curscol); + PDC_get_cursor_pos(&SP->cursrow, &SP->curscol); - internal->cursor = PDC_get_cursor_mode(); - internal->adapter = PDC_query_adapter_type(); + SP->cursor = PDC_get_cursor_mode(); + SP->adapter = PDC_query_adapter_type(); - internal->orig_cursor = internal->cursor; + SP->orig_cursor = SP->cursor; - internal->orgcbr = PDC_get_ctrl_break(); + SP->orgcbr = PDC_get_ctrl_break(); #ifdef PDC_THREAD_BUILD diff --git a/x11/pdcscrn.c b/x11/pdcscrn.c index 29868162..77c36ed3 100644 --- a/x11/pdcscrn.c +++ b/x11/pdcscrn.c @@ -17,7 +17,7 @@ #include "pdcx11.h" -RCSID("$Id: pdcscrn.c,v 1.26 2006/07/16 18:08:16 wmcbrine Exp $"); +RCSID("$Id: pdcscrn.c,v 1.27 2006/07/16 19:56:07 wmcbrine Exp $"); bool GLOBAL_sb_on = FALSE; bool GLOBAL_slk_on = FALSE; @@ -63,30 +63,33 @@ int PDC_scr_close(void) The DOS platform will never fail. Portability: - PDCurses int PDC_scr_open(SCREEN *internal); + PDCurses int PDC_scr_open(int argc, char **argv); **man-end****************************************************************/ -int PDC_scr_open(SCREEN *internal) +int PDC_scr_open(int argc, char **argv) { extern bool sb_started; PDC_LOG(("PDC_scr_open() - called\n")); - internal->cursrow = internal->curscol = 0; - internal->cursor = 0; - internal->adapter = 0; - internal->orig_cursor = internal->cursor; - internal->orig_attr = FALSE; - internal->orgcbr = 0; - internal->sb_on = sb_started; - internal->sb_total_y = 0; - internal->sb_viewport_y = 0; - internal->sb_cur_y = 0; - internal->sb_total_x = 0; - internal->sb_viewport_x = 0; - internal->sb_cur_x = 0; - internal->line_color = COLOR_WHITE; + if ((XCursesInitscr(argc, argv) == ERR) || (SP == (SCREEN *)NULL)) + return ERR; + + SP->cursrow = SP->curscol = 0; + SP->cursor = 0; + SP->adapter = 0; + SP->orig_cursor = SP->cursor; + SP->orig_attr = FALSE; + SP->orgcbr = 0; + SP->sb_on = sb_started; + SP->sb_total_y = 0; + SP->sb_viewport_y = 0; + SP->sb_cur_y = 0; + SP->sb_total_x = 0; + SP->sb_viewport_x = 0; + SP->sb_cur_x = 0; + SP->line_color = COLOR_WHITE; return OK; } diff --git a/x11/pdcx11.h b/x11/pdcx11.h index 3c7caf28..c8c27034 100644 --- a/x11/pdcx11.h +++ b/x11/pdcx11.h @@ -15,7 +15,7 @@ * See the file maintain.er for details of the current maintainer. * ************************************************************************/ -/* $Id: pdcx11.h,v 1.36 2006/07/16 18:41:53 wmcbrine Exp $ */ +/* $Id: pdcx11.h,v 1.37 2006/07/16 19:56:08 wmcbrine Exp $ */ #define CURSES_LIBRARY 1 #ifdef HAVE_CONFIG_H @@ -295,6 +295,7 @@ void XCursesEndwin(void); void XCursesExitCursesProcess(int, char *); void XCursesExitXCursesProcess(int, int, char *); int XCursesInstruct(int); +int XCursesInitscr(int, char **); void SelectionOff(void);