diff options
Diffstat (limited to 'ext/ncurses/ncurses_functions.c')
-rw-r--r-- | ext/ncurses/ncurses_functions.c | 2458 |
1 files changed, 2458 insertions, 0 deletions
diff --git a/ext/ncurses/ncurses_functions.c b/ext/ncurses/ncurses_functions.c new file mode 100644 index 000000000..90d416eb4 --- /dev/null +++ b/ext/ncurses/ncurses_functions.c @@ -0,0 +1,2458 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 5 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997-2004 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.0 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_0.txt. | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: Hartmut Holzgraefe <hholzgra@php.net> | + | Georg Richter <georg.richter@php-ev.de> | + +----------------------------------------------------------------------+ +*/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "php.h" +#include "php_ini.h" +#include "php_ncurses.h" + +#define FETCH_WINRES(r, z) ZEND_FETCH_RESOURCE(r, WINDOW **, z, -1, "ncurses_window", le_ncurses_windows) +#if HAVE_NCURSES_PANEL +# define FETCH_PANEL(r, z) ZEND_FETCH_RESOURCE(r, PANEL **, z, -1, "ncurses_panel", le_ncurses_panels) +#endif + +#define IS_NCURSES_INITIALIZED() \ + if (!NCURSES_G(registered_constants)) { \ + php_error_docref(NULL TSRMLS_CC, E_WARNING, "You must initialize ncruses via ncurses_init(), before calling any ncurses functions."); \ + RETURN_FALSE; \ + } + +/* {{{ proto int ncurses_addch(int ch) + Adds character at current position and advance cursor */ +PHP_FUNCTION(ncurses_addch) +{ + long ch; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &ch) == FAILURE) { + return; + } + + IS_NCURSES_INITIALIZED(); + RETURN_LONG(addch(ch)); +} +/* }}} */ + +/* {{{ proto int ncurses_waddch(resource window, int ch) + Adds character at current position in a window and advance cursor */ +PHP_FUNCTION(ncurses_waddch) +{ + long ch; + zval *handle; + WINDOW **win; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &handle, &ch) == FAILURE) { + return; + } + + FETCH_WINRES(win, &handle); + + RETURN_LONG(waddch(*win, ch)); +} +/* }}} */ + +#ifdef HAVE_NCURSES_COLOR_SET +/* {{{ proto int ncurses_color_set(int pair) + Sets fore- and background color */ +PHP_FUNCTION(ncurses_color_set) +{ + long pair; + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &pair) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(color_set(pair,NULL)); +} +/* }}} */ +#endif + +/* {{{ proto int ncurses_delwin(resource window) + Deletes a ncurses window */ +PHP_FUNCTION(ncurses_delwin) +{ + zval *handle; + WINDOW **w; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) { + return; + } + + FETCH_WINRES(w, &handle); + + zend_list_delete(Z_LVAL_P(handle)); +} +/* }}} */ + +/* {{{ proto int ncurses_end(void) + Stops using ncurses, clean up the screen */ +PHP_FUNCTION(ncurses_end) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(endwin()); /* endialize the curses library */ +} +/* }}} */ + +/* {{{ proto int ncurses_getch(void) + Reads a character from keyboard */ +PHP_FUNCTION(ncurses_getch) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(getch()); +} +/* }}} */ + +/* {{{ proto bool ncurses_has_colors(void) + Checks if terminal has colors */ +PHP_FUNCTION(ncurses_has_colors) +{ + IS_NCURSES_INITIALIZED(); + RETURN_BOOL(has_colors()); +} +/* }}} */ + +/* {{{ proto int ncurses_init(void) + Initializes ncurses */ +PHP_FUNCTION(ncurses_init) +{ + initscr(); /* initialize the curses library */ + keypad(stdscr, TRUE); /* enable keyboard mapping */ + (void) nonl(); /* tell curses not to do NL->CR/NL on output */ + (void) cbreak(); /* take input chars one at a time, no wait for \n */ + + if (!NCURSES_G(registered_constants)) { + zend_constant c; + + WINDOW **pscr = (WINDOW**)emalloc(sizeof(WINDOW *)); + zval *zscr; + + *pscr = stdscr; + MAKE_STD_ZVAL(zscr); + ZEND_REGISTER_RESOURCE(zscr, pscr, le_ncurses_windows); + c.value = *zscr; + zval_copy_ctor(&c.value); + c.flags = CONST_CS; + c.name = zend_strndup(ZEND_STRS("STDSCR")); + c.name_len = sizeof("STDSCR"); + zend_register_constant(&c TSRMLS_CC); + + /* we need this "interesting" arrangement because the + * underlying values of the ACS_XXX defines are not + * initialized until after ncurses has been initialized */ + +#define PHP_NCURSES_DEF_CONST(x) \ + ZVAL_LONG(zscr, x); \ + c.value = *zscr; \ + zval_copy_ctor(&c.value); \ + c.flags = CONST_CS; \ + c.name = zend_strndup(ZEND_STRS("NCURSES_" #x)); \ + c.name_len = sizeof("NCURSES_" #x); \ + zend_register_constant(&c TSRMLS_CC) + + PHP_NCURSES_DEF_CONST(ACS_ULCORNER); + PHP_NCURSES_DEF_CONST(ACS_LLCORNER); + PHP_NCURSES_DEF_CONST(ACS_URCORNER); + PHP_NCURSES_DEF_CONST(ACS_LRCORNER); + PHP_NCURSES_DEF_CONST(ACS_LTEE); + PHP_NCURSES_DEF_CONST(ACS_RTEE); + PHP_NCURSES_DEF_CONST(ACS_BTEE); + PHP_NCURSES_DEF_CONST(ACS_TTEE); + PHP_NCURSES_DEF_CONST(ACS_HLINE); + PHP_NCURSES_DEF_CONST(ACS_VLINE); + PHP_NCURSES_DEF_CONST(ACS_PLUS); + PHP_NCURSES_DEF_CONST(ACS_S1); + PHP_NCURSES_DEF_CONST(ACS_S9); + PHP_NCURSES_DEF_CONST(ACS_DIAMOND); + PHP_NCURSES_DEF_CONST(ACS_CKBOARD); + PHP_NCURSES_DEF_CONST(ACS_DEGREE); + PHP_NCURSES_DEF_CONST(ACS_PLMINUS); + PHP_NCURSES_DEF_CONST(ACS_BULLET); + PHP_NCURSES_DEF_CONST(ACS_LARROW); + PHP_NCURSES_DEF_CONST(ACS_RARROW); + PHP_NCURSES_DEF_CONST(ACS_DARROW); + PHP_NCURSES_DEF_CONST(ACS_UARROW); + PHP_NCURSES_DEF_CONST(ACS_BOARD); + PHP_NCURSES_DEF_CONST(ACS_LANTERN); + PHP_NCURSES_DEF_CONST(ACS_BLOCK); + + FREE_ZVAL(zscr); + NCURSES_G(registered_constants) = 1; + } +} +/* }}} */ + +/* {{{ proto int ncurses_init_pair(int pair, int fg, int bg) + Allocates a color pair */ +PHP_FUNCTION(ncurses_init_pair) +{ + long pair, fg, bg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &pair, &fg, &bg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(init_pair(pair,fg,bg)); +} +/* }}} */ + +/* {{{ proto int ncurses_move(int y, int x) + Moves output position */ +PHP_FUNCTION(ncurses_move) +{ + long x, y; + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &y, &x) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(move(y,x)); +} +/* }}} */ + +/* {{{ proto resource ncurses_newpad(int rows, int cols) + Creates a new pad (window) */ +PHP_FUNCTION(ncurses_newpad) +{ + long rows,cols; + WINDOW **pwin; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &rows, &cols) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + + pwin = (WINDOW **)emalloc(sizeof(WINDOW *)); + *pwin = newpad(rows,cols); + + if(!*pwin) { + efree(pwin); + RETURN_FALSE; + } + + ZEND_REGISTER_RESOURCE(return_value, pwin, le_ncurses_windows); + +} +/* }}} */ + +/* {{{ proto int ncurses_prefresh(resource pad, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol) + Copys a region from a pad into the virtual screen */ +PHP_FUNCTION(ncurses_prefresh) +{ + WINDOW **pwin; + zval *phandle; + long pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rllllll", &phandle, &pminrow, + &pmincol, &sminrow, &smincol, &smaxrow, &smaxcol) == FAILURE) { + return; + } + + FETCH_WINRES(pwin, &phandle); + + RETURN_LONG(prefresh(*pwin, pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol)); +} +/* }}} */ + +/* {{{ proto int ncurses_pnoutrefresh(resource pad, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol) + Copys a region from a pad into the virtual screen */ +PHP_FUNCTION(ncurses_pnoutrefresh) +{ + WINDOW **pwin; + zval *phandle; + long pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rllllll", &phandle, &pminrow, + &pmincol, &sminrow, &smincol, &smaxrow, &smaxcol) == FAILURE) { + return; + } + + FETCH_WINRES(pwin, &phandle); + + RETURN_LONG(pnoutrefresh(*pwin, pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol)); +} +/* }}} */ + + + +/* {{{ proto int ncurses_newwin(int rows, int cols, int y, int x) + Creates a new window */ +PHP_FUNCTION(ncurses_newwin) +{ + long rows,cols,y,x; + WINDOW **pwin; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll", &rows, &cols, &y, &x) == FAILURE) { + return; + } + + IS_NCURSES_INITIALIZED(); + pwin = (WINDOW **)emalloc(sizeof(WINDOW *)); + *pwin=newwin(rows,cols,y,x); + + if(!*pwin) { + efree(pwin); + RETURN_FALSE; + } + + ZEND_REGISTER_RESOURCE(return_value, pwin, le_ncurses_windows); +} +/* }}} */ + +/* {{{ proto int ncurses_refresh(int ch) + Refresh screen */ +PHP_FUNCTION(ncurses_refresh) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(refresh()); +} +/* }}} */ + +/* {{{ proto int ncurses_start_color(void) + Starts using colors */ +PHP_FUNCTION(ncurses_start_color) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(start_color()); +} +/* }}} */ + +/* {{{ proto int ncurses_standout(void) + Starts using 'standout' attribute */ +PHP_FUNCTION(ncurses_standout) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(standout()); +} +/* }}} */ + +/* {{{ proto int ncurses_standend(void) + Stops using 'standout' attribute */ +PHP_FUNCTION(ncurses_standend) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(standend()); +} +/* }}} */ + +/* {{{ proto int ncurses_baudrate(void) + Returns baudrate of terminal */ +PHP_FUNCTION(ncurses_baudrate) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(baudrate()); +} +/* }}} */ + +/* {{{ proto int ncurses_beep(void) + Let the terminal beep */ +PHP_FUNCTION(ncurses_beep) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(beep()); +} +/* }}} */ + +/* {{{ proto bool ncurses_can_change_color(void) + Checks if we can change terminals colors */ +PHP_FUNCTION(ncurses_can_change_color) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(can_change_color()); +} +/* }}} */ + +/* {{{ proto bool ncurses_cbreak(void) + Switches of input buffering */ +PHP_FUNCTION(ncurses_cbreak) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(cbreak()); +} +/* }}} */ + +/* {{{ proto bool ncurses_clear(void) + Clears screen */ +PHP_FUNCTION(ncurses_clear) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(clear()); +} +/* }}} */ + +/* {{{ proto bool ncurses_clrtobot(void) + Clears screen from current position to bottom */ +PHP_FUNCTION(ncurses_clrtobot) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(clrtobot()); +} +/* }}} */ + +/* {{{ proto bool ncurses_clrtoeol(void) + Clears screen from current position to end of line */ +PHP_FUNCTION(ncurses_clrtoeol) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(clrtoeol()); +} +/* }}} */ + +/* {{{ proto int ncurses_reset_prog_mode(void) + Resets the prog mode saved by def_prog_mode */ +PHP_FUNCTION(ncurses_reset_prog_mode) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(reset_prog_mode()); +} +/* }}} */ + +/* {{{ proto int ncurses_reset_shell_mode(void) + Resets the shell mode saved by def_shell_mode */ +PHP_FUNCTION(ncurses_reset_shell_mode) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(reset_shell_mode()); +} +/* }}} */ + +/* {{{ proto int ncurses_def_prog_mode(void) + Saves terminals (program) mode */ +PHP_FUNCTION(ncurses_def_prog_mode) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(def_prog_mode()); +} +/* }}} */ + +/* {{{ proto int ncurses_def_shell_mode(void) + Saves terminal (shell) mode*/ +PHP_FUNCTION(ncurses_def_shell_mode) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(def_shell_mode()); +} +/* }}} */ + +/* {{{ proto int ncurses_delch(void) + Deletes character at current position, move rest of line left */ +PHP_FUNCTION(ncurses_delch) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(delch()); +} +/* }}} */ + +/* {{{ proto int ncurses_deleteln(void) + Deletes line at current position, move rest of screen up */ +PHP_FUNCTION(ncurses_deleteln) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(deleteln()); +} +/* }}} */ + +/* {{{ proto int ncurses_doupdate(void) + Writes all prepared refreshes to terminal */ +PHP_FUNCTION(ncurses_doupdate) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(doupdate()); +} +/* }}} */ + +/* {{{ proto int ncurses_echo(void) + Activates keyboard input echo */ +PHP_FUNCTION(ncurses_echo) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(echo()); +} +/* }}} */ + +/* {{{ proto int ncurses_erase(void) + Erases terminal screen */ +PHP_FUNCTION(ncurses_erase) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(erase()); +} +/* }}} */ + +/* {{{ proto string ncurses_erasechar(void) + Returns current erase character */ +PHP_FUNCTION(ncurses_erasechar) +{ + char temp[2]; + + IS_NCURSES_INITIALIZED(); + temp[0] = erasechar(); + temp[1] = '\0'; + + RETURN_STRINGL (temp, 1, 1); +} +/* }}} */ + +/* {{{ proto int ncurses_flash(void) + Flashes terminal screen (visual bell) */ +PHP_FUNCTION(ncurses_flash) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(flash()); +} +/* }}} */ + +/* {{{ proto int ncurses_flushinp(void) + Flushes keyboard input buffer */ +PHP_FUNCTION(ncurses_flushinp) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(flushinp()); +} +/* }}} */ + +/* {{{ proto int ncurses_has_ic(void) + Checks for insert- and delete-capabilities */ +PHP_FUNCTION(ncurses_has_ic) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(has_ic()); +} +/* }}} */ + + +/* {{{ proto int ncurses_has_il(void) + Checks for line insert- and delete-capabilities */ +PHP_FUNCTION(ncurses_has_il) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(has_il()); +} +/* }}} */ + +/* {{{ proto string ncurses_inch(void) + Gets character and attribute at current position */ +PHP_FUNCTION(ncurses_inch) +{ + char temp[2]; + + IS_NCURSES_INITIALIZED(); + temp[0] = inch(); + temp[1] = '\0'; + + RETURN_STRINGL (temp, 1, 1); +} +/* }}} */ + +/* {{{ proto int ncurses_insertln(void) + Inserts a line, move rest of screen down */ +PHP_FUNCTION(ncurses_insertln) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(insertln()); +} +/* }}} */ + +/* {{{ proto int ncurses_isendwin(void) + Ncurses is in endwin mode, normal screen output may be performed */ +PHP_FUNCTION(ncurses_isendwin) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(isendwin()); +} +/* }}} */ + +/* {{{ proto string ncurses_killchar(void) + Returns current line kill character */ +PHP_FUNCTION(ncurses_killchar) +{ + char temp[2]; + + IS_NCURSES_INITIALIZED(); + temp[0] = killchar(); + temp[1] = '\0'; + + RETURN_STRINGL (temp, 1, 1); +} +/* }}} */ + +/* {{{ proto int ncurses_nl(void) + Translates newline and carriage return / line feed */ +PHP_FUNCTION(ncurses_nl) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(nl()); +} +/* }}} */ + +/* {{{ proto int ncurses_nocbreak(void) + Switches terminal to cooked mode */ +PHP_FUNCTION(ncurses_nocbreak) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(nocbreak()); +} +/* }}} */ + +/* {{{ proto int ncurses_noecho(void) + Switches off keyboard input echo */ +PHP_FUNCTION(ncurses_noecho) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(noecho()); +} +/* }}} */ + +/* {{{ proto int ncurses_nonl(void) + Do not ranslate newline and carriage return / line feed */ +PHP_FUNCTION(ncurses_nonl) +{ + RETURN_LONG(nonl()); +} +/* }}} */ + +/* {{{ proto bool ncurses_noraw(void) + Switches terminal out of raw mode */ +PHP_FUNCTION(ncurses_noraw) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(noraw()); +} +/* }}} */ + +/* {{{ proto int ncurses_raw(void) + Switches terminal into raw mode */ +PHP_FUNCTION(ncurses_raw) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(raw()); +} +/* }}} */ + +/* {{{ proto int ncurses_meta(resource window, bool 8bit) + Enables/Disable 8-bit meta key information */ +PHP_FUNCTION(ncurses_meta) +{ + zend_bool enable; + zval *handle; + WINDOW **win; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rb", &handle, &enable) == FAILURE) { + return; + } + + FETCH_WINRES(win, &handle); + + RETURN_LONG(meta(*win, enable)); +} +/* }}} */ + +/* {{{ proto int ncurses_werase(resource window) + Erase window contents */ +PHP_FUNCTION(ncurses_werase) +{ + zval *handle; + WINDOW **win; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) { + return; + } + + FETCH_WINRES(win, &handle); + + RETURN_LONG(werase(*win)); +} +/* }}} */ + + +/* {{{ proto int ncurses_resetty(void) + Restores saved terminal state */ +PHP_FUNCTION(ncurses_resetty) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(resetty()); +} +/* }}} */ + +/* {{{ proto int ncurses_savetty(void) + Saves terminal state */ +PHP_FUNCTION(ncurses_savetty) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(savetty()); +} +/* }}} */ + +/* {{{ proto int ncurses_termattrs(void) + Returns a logical OR of all attribute flags supported by terminal */ +PHP_FUNCTION(ncurses_termattrs) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(termattrs()); +} +/* }}} */ + +/* {{{ proto int ncurses_use_default_colors(void) + Assigns terminal default colors to color id -1 */ +PHP_FUNCTION(ncurses_use_default_colors) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(use_default_colors()); +} +/* }}} */ + +/* {{{ proto int ncurses_slk_attr(void) + Returns current soft label keys attribute */ +PHP_FUNCTION(ncurses_slk_attr) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(slk_attr()); +} +/* }}} */ + +/* {{{ proto int ncurses_slk_clear(void) + Clears soft label keys from screen */ +PHP_FUNCTION(ncurses_slk_clear) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(slk_clear()); +} +/* }}} */ + +/* {{{ proto int ncurses_slk_noutrefresh(void) + Copies soft label keys to virtual screen */ +PHP_FUNCTION(ncurses_slk_noutrefresh) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(slk_noutrefresh()); +} +/* }}} */ + +/* {{{ proto int ncurses_slk_refresh(void) + Copies soft label keys to screen */ +PHP_FUNCTION(ncurses_slk_refresh) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(slk_refresh()); +} +/* }}} */ + +/* {{{ proto int ncurses_slk_restore(void) + Restores soft label keys */ +PHP_FUNCTION(ncurses_slk_restore) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(slk_restore()); +} +/* }}} */ + +/* {{{ proto int ncurses_slk_touch(void) + Forces output when ncurses_slk_noutrefresh is performed */ +PHP_FUNCTION(ncurses_slk_touch) +{ + IS_NCURSES_INITIALIZED(); + RETURN_LONG(slk_touch()); +} +/* }}} */ + +/* {{{ proto bool ncurses_slk_set(int labelnr, string label, int format) + Sets function key labels */ +PHP_FUNCTION(ncurses_slk_set) +{ + char *str; + int len; + long labelnr; + long format; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lsl", &labelnr, &str, &len, &format) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_BOOL(slk_set(labelnr, str, format)); +} +/* }}} */ + + +/* {{{ proto int ncurses_attroff(int attributes) + Turns off the given attributes */ +PHP_FUNCTION(ncurses_attroff) +{ + long intarg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(attroff(intarg)); +} +/* }}} */ + +/* {{{ proto int ncurses_attron(int attributes) + Turns on the given attributes */ +PHP_FUNCTION(ncurses_attron) +{ + long intarg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(attron(intarg)); +} +/* }}} */ + +/* {{{ proto int ncurses_attrset(int attributes) + Sets given attributes */ +PHP_FUNCTION(ncurses_attrset) +{ + long intarg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(attrset(intarg)); +} +/* }}} */ + +/* {{{ proto int ncurses_bkgd(int attrchar) + Sets background property for terminal screen */ +PHP_FUNCTION(ncurses_bkgd) +{ + long intarg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(bkgd(intarg)); +} +/* }}} */ + +/* {{{ proto int ncurses_curs_set(int visibility) + Sets cursor state */ +PHP_FUNCTION(ncurses_curs_set) +{ + long intarg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(curs_set(intarg)); +} +/* }}} */ + +/* {{{ proto int ncurses_delay_output(int milliseconds) + Delays output on terminal using padding characters */ +PHP_FUNCTION(ncurses_delay_output) +{ + long intarg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(delay_output(intarg)); +} +/* }}} */ + +/* {{{ proto int ncurses_echochar(int character) + Single character output including refresh */ +PHP_FUNCTION(ncurses_echochar) +{ + long intarg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(echochar(intarg)); +} +/* }}} */ + +/* {{{ proto int ncurses_halfdelay(int tenth) + Puts terminal into halfdelay mode */ +PHP_FUNCTION(ncurses_halfdelay) +{ + long intarg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(halfdelay(intarg)); +} +/* }}} */ + +/* {{{ proto int ncurses_has_key(int keycode) + Checks for presence of a function key on terminal keyboard */ +PHP_FUNCTION(ncurses_has_key) +{ + long intarg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(has_key(intarg)); +} +/* }}} */ + +/* {{{ proto int ncurses_insch(int character) + Inserts character moving rest of line including character at current position */ +PHP_FUNCTION(ncurses_insch) +{ + long intarg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(insch(intarg)); +} +/* }}} */ + +/* {{{ proto int ncurses_insdelln(int count) + Inserts lines before current line scrolling down (negative numbers delete and scroll up) */ +PHP_FUNCTION(ncurses_insdelln) +{ + long intarg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(insdelln(intarg)); +} +/* }}} */ + +/* {{{ proto int ncurses_mouseinterval(int milliseconds) + Sets timeout for mouse button clicks */ +PHP_FUNCTION(ncurses_mouseinterval) +{ + long intarg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(mouseinterval(intarg)); +} +/* }}} */ + +/* {{{ proto int ncurses_napms(int milliseconds) + Sleep */ +PHP_FUNCTION(ncurses_napms) +{ + long intarg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(napms(intarg)); +} +/* }}} */ + +/* {{{ proto int ncurses_scrl(int count) + Scrolls window content up or down without changing current position */ +PHP_FUNCTION(ncurses_scrl) +{ + long intarg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(scrl(intarg)); +} +/* }}} */ + +/* {{{ proto int ncurses_slk_attroff(int intarg) + ??? */ +PHP_FUNCTION(ncurses_slk_attroff) +{ + long intarg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(slk_attroff(intarg)); +} +/* }}} */ + +/* {{{ proto int ncurses_slk_attron(int intarg) + ??? */ +PHP_FUNCTION(ncurses_slk_attron) +{ + long intarg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(slk_attron(intarg)); +} +/* }}} */ + +/* {{{ proto int ncurses_slk_attrset(int intarg) + ??? */ +PHP_FUNCTION(ncurses_slk_attrset) +{ + long intarg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(slk_attrset(intarg)); +} +/* }}} */ + +#ifdef HAVE_NCURSES_SLK_COLOR +/* {{{ proto int ncurses_slk_color(int intarg) + Sets color for soft label keys*/ +PHP_FUNCTION(ncurses_slk_color) +{ + long intarg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(slk_color(intarg)); +} +/* }}} */ +#endif + +/* {{{ proto int ncurses_slk_init(int intarg) + Inits soft label keys */ +PHP_FUNCTION(ncurses_slk_init) +{ + long intarg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(slk_init(intarg)); +} +/* }}} */ + +/* {{{ proto int ncurses_typeahead(int fd) + Specifys different filedescriptor for typeahead checking */ +PHP_FUNCTION(ncurses_typeahead) +{ + long intarg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(typeahead(intarg)); +} +/* }}} */ + +/* {{{ proto int ncurses_ungetch(int keycode) + Puts a character back into the input stream */ +PHP_FUNCTION(ncurses_ungetch) +{ + long intarg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(ungetch(intarg)); +} +/* }}} */ + +/* {{{ proto int ncurses_vidattr(int intarg) + ??? */ +PHP_FUNCTION(ncurses_vidattr) +{ + long intarg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(vidattr(intarg)); +} +/* }}} */ + +#ifdef HAVE_NCURSES_USE_EXTENDED_NAMES +/* {{{ proto int ncurses_use_extended_names(bool flag) + Controls use of extended names in terminfo descriptions */ +PHP_FUNCTION(ncurses_use_extended_names) +{ + long intarg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(use_extended_names(intarg)); +} +/* }}} */ +#endif + +/* {{{ proto void ncurses_bkgdset(int attrchar) + Controls screen background */ +PHP_FUNCTION(ncurses_bkgdset) +{ + long intarg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + bkgdset(intarg); +} +/* }}} */ + +/* {{{ proto void ncurses_filter(void) + */ +PHP_FUNCTION(ncurses_filter) +{ + IS_NCURSES_INITIALIZED(); + filter(); +} +/* }}} */ + +/* {{{ proto int ncurses_noqiflush(void) + Do not flush on signal characters*/ +PHP_FUNCTION(ncurses_noqiflush) +{ + IS_NCURSES_INITIALIZED(); + noqiflush(); +} +/* }}} */ + +/* {{{ proto void ncurses_qiflush(void) + Flushes on signal characters */ +PHP_FUNCTION(ncurses_qiflush) +{ + IS_NCURSES_INITIALIZED(); + qiflush(); +} +/* }}} */ + +/* {{{ proto void ncurses_timeout(int millisec) + Sets timeout for special key sequences */ +PHP_FUNCTION(ncurses_timeout) +{ + long intarg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + timeout(intarg); +} +/* }}} */ + +/* {{{ proto void ncurses_use_env(int flag) + Controls use of environment information about terminal size */ +PHP_FUNCTION(ncurses_use_env) +{ + long intarg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + use_env(intarg); +} +/* }}} */ + +/* {{{ proto int ncurses_addstr(string text) + Outputs text at current position */ +PHP_FUNCTION(ncurses_addstr) +{ + char *str; + int str_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(addstr(str)); +} +/* }}} */ + +/* {{{ proto int ncurses_putp(string text) + ??? */ +PHP_FUNCTION(ncurses_putp) +{ + char *str; + int str_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(putp(str)); +} +/* }}} */ + +/* {{{ proto int ncurses_scr_dump(string filename) + Dumps screen content to file */ +PHP_FUNCTION(ncurses_scr_dump) +{ + char *str; + int str_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(scr_dump(str)); +} +/* }}} */ + +/* {{{ proto int ncurses_scr_init(string filename) + Initializes screen from file dump */ +PHP_FUNCTION(ncurses_scr_init) +{ + char *str; + int str_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(scr_init(str)); +} +/* }}} */ + +/* {{{ proto int ncurses_scr_restore(string filename) + Restores screen from file dump */ +PHP_FUNCTION(ncurses_scr_restore) +{ + char *str; + int str_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(scr_restore(str)); +} +/* }}} */ + +/* {{{ proto int ncurses_scr_set(string filename) + Inherits screen from file dump */ +PHP_FUNCTION(ncurses_scr_set) +{ + char *str; + int str_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(scr_set(str)); +} +/* }}} */ + +/* {{{ proto int ncurses_mvaddch(int y, int x, int c) + Moves current position and add character */ +PHP_FUNCTION(ncurses_mvaddch) +{ + long y,x,c; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &y, &x, &c) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(mvaddch(y,x,c)); +} +/* }}} */ + +/* {{{ proto int ncurses_mvaddchnstr(int y, int x, string s, int n) + Moves position and add attrributed string with specified length */ +PHP_FUNCTION(ncurses_mvaddchnstr) +{ + long y,x,n; + char *str; + int str_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llsl", &y, &x, &str, &str_len, &n) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(mvaddchnstr(y,x,(chtype *)str,n)); +} +/* }}} */ + +/* {{{ proto int ncurses_addchnstr(string s, int n) + Adds attributed string with specified length at current position */ +PHP_FUNCTION(ncurses_addchnstr) +{ + long n; + char *str; + int str_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", &str, &str_len, &n) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(addchnstr((chtype *)str,n)); +} +/* }}} */ + +/* {{{ proto int ncurses_mvaddchstr(int y, int x, string s) + Moves position and add attributed string */ +PHP_FUNCTION(ncurses_mvaddchstr) +{ + long y,x; + char *str; + int str_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lls", &y, &x, &str, &str_len) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(mvaddchstr(y,x,(chtype *)str)); +} +/* }}} */ + +/* {{{ proto int ncurses_addchstr(string s) + Adds attributed string at current position */ +PHP_FUNCTION(ncurses_addchstr) +{ + char *str; + int str_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(addchstr((chtype *)str)); +} +/* }}} */ + +/* {{{ proto int ncurses_mvaddnstr(int y, int x, string s, int n) + Moves position and add string with specified length */ +PHP_FUNCTION(ncurses_mvaddnstr) +{ + long y,x,n; + char *str; + int str_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llsl", &y, &x, &str, &str_len, &n) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(mvaddnstr(y,x,str,n)); +} +/* }}} */ + +/* {{{ proto int ncurses_addnstr(string s, int n) + Adds string with specified length at current position */ +PHP_FUNCTION(ncurses_addnstr) +{ + long n; + char *str; + int str_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", &str, &str_len, &n) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(addnstr(str,n)); +} +/* }}} */ + +/* {{{ proto int ncurses_mvaddstr(int y, int x, string s) + Moves position and add string */ +PHP_FUNCTION(ncurses_mvaddstr) +{ + long y,x; + char *str; + int str_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lls", &y, &x, &str, &str_len) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(mvaddstr(y,x,str)); +} +/* }}} */ + +/* {{{ proto int ncurses_mvdelch(int y, int x) + Moves position and delete character, shift rest of line left */ +PHP_FUNCTION(ncurses_mvdelch) +{ + long y,x; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &y, &x) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(mvdelch(y,x)); +} +/* }}} */ + + +/* {{{ proto int ncurses_mvgetch(int y, int x) + Moves position and get character at new position */ +PHP_FUNCTION(ncurses_mvgetch) +{ + long y,x; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &y, &x) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(mvgetch(y,x)); +} +/* }}} */ + +/* {{{ proto int ncurses_mvinch(int y, int x) + Moves position and get attributed character at new position */ +PHP_FUNCTION(ncurses_mvinch) +{ + long y,x; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &y, &x) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(mvinch(y,x)); +} +/* }}} */ + +/* {{{ proto int ncurses_insstr(string text) + Inserts string at current position, moving rest of line right */ +PHP_FUNCTION(ncurses_insstr) +{ + char *str; + int str_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(insstr(str)); +} +/* }}} */ + +/* {{{ proto int ncurses_instr(string &buffer) + Reads string from terminal screen */ +PHP_FUNCTION(ncurses_instr) +{ + ulong retval; + zval *param; + char *str; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", ¶m) == FAILURE ) { + return; + } + IS_NCURSES_INITIALIZED(); + + str = (char *)emalloc(COLS + 1); + retval = instr(str); + + ZVAL_STRING(param, str, strlen(str)); + efree(str); + + RETURN_LONG(retval); +} +/* }}} */ + +/* {{{ proto int ncurses_mvhline(int y, int x, int attrchar, int n) + Sets new position and draw a horizontal line using an attributed character and max. n characters long */ +PHP_FUNCTION(ncurses_mvhline) +{ + long i1,i2,i3,i4; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll", &i1, &i2, &i3, &i4) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(mvhline(i1,i2,i3,i4)); +} +/* }}} */ + +/* {{{ proto int ncurses_mvvline(int y, int x, int attrchar, int n) + Sets new position and draw a vertical line using an attributed character and max. n characters long */ +PHP_FUNCTION(ncurses_mvvline) +{ + long i1,i2,i3,i4; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll", &i1, &i2, &i3, &i4) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(mvvline(i1,i2,i3,i4)); +} +/* }}} */ + +/* {{{ proto int ncurses_mvcur(int old_y,int old_x, int new_y, int new_x) + Moves cursor immediately */ +PHP_FUNCTION(ncurses_mvcur) +{ + long i1,i2,i3,i4; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll", &i1, &i2, &i3, &i4) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(mvcur(i1,i2,i3,i4)); +} +/* }}} */ + +/* {{{ proto int ncurses_init_color(int color, int r, int g, int b) + Sets new RGB value for color */ +PHP_FUNCTION(ncurses_init_color) +{ + long i1,i2,i3,i4; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll", &i1, &i2, &i3, &i4) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(init_color(i1,i2,i3,i4)); +} +/* }}} */ + +/* {{{ proto int ncurses_color_content(int color, int &r, int &g, int &b) + Gets the RGB value for color */ +PHP_FUNCTION(ncurses_color_content) +{ + zval *r, *g, *b; + short rv, gv, bv; + int retval; + long c; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lzzz", &c, &r, &g, &b) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + + retval = color_content(c, &rv, &gv, &bv); + + ZVAL_LONG(r, rv); + ZVAL_LONG(g, gv); + ZVAL_LONG(b, bv); + + RETURN_LONG(retval); +} +/* }}} */ + +/* {{{ proto int ncurses_pair_content(int pair, int &f, int &b) + Gets the RGB value for color */ +PHP_FUNCTION(ncurses_pair_content) +{ + zval *f, *b; + short fv, bv; + int retval; + long p; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lzz", &p, &f, &b) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + + retval = pair_content(p, &fv, &bv); + + ZVAL_LONG(f, fv); + ZVAL_LONG(b, bv); + + RETURN_LONG(retval); +} +/* }}} */ + +/* {{{ proto int ncurses_border(int left, int right, int top, int bottom, int tl_corner, int tr_corner, int bl_corner, int br_corner) + Draws a border around the screen using attributed characters */ +PHP_FUNCTION(ncurses_border) +{ + long i1,i2,i3,i4,i5,i6,i7,i8; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llllllll", &i1, &i2, &i3, &i4, &i5, &i6, &i7, &i8) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(border(i1,i2,i3,i4,i5,i6,i7,i8)); +} +/* }}} */ + +/* {{{ proto int ncurses_wborder(resource window, int left, int right, int top, int bottom, int tl_corner, int tr_corner, int bl_corner, int br_corner) + Draws a border around the window using attributed characters */ +PHP_FUNCTION(ncurses_wborder) +{ + long i1,i2,i3,i4,i5,i6,i7,i8; + zval *handle; + WINDOW **win; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rllllllll", &handle, &i1, &i2, &i3, &i4, &i5, &i6, &i7, &i8) == FAILURE) { + return; + } + + FETCH_WINRES(win, &handle); + + RETURN_LONG(wborder(*win,i1,i2,i3,i4,i5,i6,i7,i8)); +} +/* }}} */ + +#ifdef HAVE_NCURSES_ASSUME_DEFAULT_COLORS +/* {{{ proto int ncurses_assume_default_colors(int fg, int bg) + Defines default colors for color 0 */ +PHP_FUNCTION(ncurses_assume_default_colors) +{ + long i1,i2; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &i1, &i2) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(assume_default_colors(i1,i2)); +} +/* }}} */ +#endif + +/* {{{ proto int ncurses_define_key(string definition, int keycode) + Defines a keycode */ +PHP_FUNCTION(ncurses_define_key) +{ + long n; + char *str; + int str_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", &str, &str_len, &n) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(define_key(str,n)); +} +/* }}} */ + +/* {{{ proto int ncurses_hline(int charattr, int n) + Draws a horizontal line at current position using an attributed character and max. n characters long */ +PHP_FUNCTION(ncurses_hline) +{ + long i1,i2; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &i1, &i2) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(hline(i1,i2)); +} +/* }}} */ + +/* {{{ proto int ncurses_vline(int charattr, int n) + Draws a vertical line at current position using an attributed character and max. n characters long */ +PHP_FUNCTION(ncurses_vline) +{ + long i1,i2; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &i1, &i2) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(vline(i1,i2)); +} +/* }}} */ + +/* {{{ proto int ncurses_whline(resource window, int charattr, int n) + Draws a horizontal line in a window at current position using an attributed character and max. n characters long */ +PHP_FUNCTION(ncurses_whline) +{ + long i1,i2; + zval *handle; + WINDOW **win; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rll", &handle, &i1, &i2) == FAILURE) { + return; + } + + FETCH_WINRES(win, &handle); + + RETURN_LONG(whline(*win,i1,i2)); +} +/* }}} */ + +/* {{{ proto int ncurses_wvline(resource window, int charattr, int n) + Draws a vertical line in a window at current position using an attributed character and max. n characters long */ +PHP_FUNCTION(ncurses_wvline) +{ + long i1,i2; + zval *handle; + WINDOW **win; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rll", &handle, &i1, &i2) == FAILURE) { + return; + } + FETCH_WINRES(win, &handle); + + RETURN_LONG(wvline(*win,i1,i2)); +} +/* }}} */ + +/* {{{ proto int ncurses_keyok(int keycode, int enable) + Enables or disable a keycode */ +PHP_FUNCTION(ncurses_keyok) +{ + long i,b; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &i, &b) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + RETURN_LONG(hline(i,b)); +} +/* }}} */ + +/* {{{ proto int ncurses_mvwaddstr(resource window, int y, int x, string text) + Adds string at new position in window */ +PHP_FUNCTION(ncurses_mvwaddstr) +{ + zval *handle; + long y, x; + int text_len; + char *text; + WINDOW **w; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlls", &handle, &y, &x, &text, &text_len) == FAILURE) { + return; + } + + FETCH_WINRES(w, &handle); + + RETURN_LONG(mvwaddstr(*w,y,x,text)); +} +/* }}} */ + +/* {{{ proto int ncurses_wrefresh(resource window) + Refreshes window on terminal screen */ +PHP_FUNCTION(ncurses_wrefresh) +{ + zval *handle; + WINDOW **w; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) { + return; + } + + FETCH_WINRES(w, &handle); + + RETURN_LONG(wrefresh(*w)); +} +/* }}} */ + +/* {{{ proto string ncurses_termname(void) + Returns terminal name */ +PHP_FUNCTION(ncurses_termname) +{ + char temp[15]; + + IS_NCURSES_INITIALIZED(); + + strlcpy(temp, termname(), sizeof(temp)); + + RETURN_STRINGL (temp, strlen(temp), 1); +} +/* }}} */ + +/* {{{ proto string ncurses_longname(void) + Returns terminal description */ +PHP_FUNCTION(ncurses_longname) +{ + char temp[128]; + + IS_NCURSES_INITIALIZED(); + + strlcpy(temp, longname(), sizeof(temp)); + + RETURN_STRINGL (temp, strlen(temp), 1); +} +/* }}} */ + +/* {{{ proto int ncurses_mousemask(int newmask, int &oldmask) + Returns and sets mouse options */ +PHP_FUNCTION(ncurses_mousemask) +{ + ulong oldmask; + ulong retval; + zval *param; + long newmask; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lz", &newmask, ¶m) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + + retval = mousemask(newmask, &oldmask); + + ZVAL_LONG(param, oldmask); + + RETURN_LONG(retval); +} +/* }}} */ + +/* {{{ proto bool ncurses_getmouse(array &mevent) + Reads mouse event from queue. The content of mevent is cleared before new data is added. */ +PHP_FUNCTION(ncurses_getmouse) +{ + zval *arg; + MEVENT mevent; + ulong retval; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &arg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + + pval_destructor(arg); + array_init(arg); + + retval = getmouse(&mevent); + + add_assoc_long(arg, "id", mevent.id); + add_assoc_long(arg, "x", mevent.x); + add_assoc_long(arg, "y", mevent.y); + add_assoc_long(arg, "z", mevent.z); + add_assoc_long(arg, "mmask", mevent.bstate); + + RETURN_BOOL(retval == 0); +} +/* }}} */ + +/* {{{ proto int ncurses_ungetmouse(array mevent) + Pushes mouse event to queue */ +PHP_FUNCTION(ncurses_ungetmouse) +{ + zval *arg, **pvalue; + MEVENT mevent; + ulong retval; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &arg) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + + if (zend_hash_find(Z_ARRVAL_P(arg), "id", sizeof("id"), (void **) &pvalue) == SUCCESS) { + convert_to_long_ex(pvalue); + mevent.id = Z_LVAL_PP(pvalue); + } + + if (zend_hash_find(Z_ARRVAL_P(arg), "x", sizeof("x"), (void **) &pvalue) == SUCCESS) { + convert_to_long_ex(pvalue); + mevent.x = Z_LVAL_PP(pvalue); + } + + if (zend_hash_find(Z_ARRVAL_P(arg), "y", sizeof("y"), (void **) &pvalue) == SUCCESS) { + convert_to_long_ex(pvalue); + mevent.y = Z_LVAL_PP(pvalue); + } + + if (zend_hash_find(Z_ARRVAL_P(arg), "z", sizeof("z"), (void **) &pvalue) == SUCCESS) { + convert_to_long_ex(pvalue); + mevent.z = Z_LVAL_PP(pvalue); + } + + if (zend_hash_find(Z_ARRVAL_P(arg), "mmask", sizeof("mmask"), (void **) &pvalue) == SUCCESS) { + convert_to_long_ex(pvalue); + mevent.bstate = Z_LVAL_PP(pvalue); + } + + retval = ungetmouse(&mevent); + + RETURN_LONG(retval); +} +/* }}} */ + +/* {{{ proto bool ncurses_mouse_trafo(int &y, int &x, bool toscreen) + Transforms coordinates */ +PHP_FUNCTION(ncurses_mouse_trafo) +{ + zval *x, *y; + zend_bool toscreen; + int nx, ny, retval; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zzb", &y, &x, &toscreen) == FAILURE) { + return; + } + IS_NCURSES_INITIALIZED(); + + convert_to_long(y); + convert_to_long(x); + + nx = Z_LVAL_P(x); + ny = Z_LVAL_P(y); + + retval = mouse_trafo(&ny, &nx, toscreen); + + ZVAL_LONG(x, nx); + ZVAL_LONG(y, ny); + + RETURN_BOOL(retval); +} +/* }}} */ + +/* {{{ proto bool ncurses_wmouse_trafo(resource window, int &y, int &x, bool toscreen) + Transforms window/stdscr coordinates */ +PHP_FUNCTION(ncurses_wmouse_trafo) +{ + zval *handle, *x, *y; + int nx, ny, retval; + WINDOW **win; + zend_bool toscreen; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rzzb", &handle, &y, &x, &toscreen) == FAILURE) { + return; + } + + FETCH_WINRES(win, &handle); + + convert_to_long(x); + convert_to_long(y); + + nx = Z_LVAL_P(x); + ny = Z_LVAL_P(y); + + retval = wmouse_trafo (*win, &ny, &nx, toscreen); + + ZVAL_LONG(x, nx); + ZVAL_LONG(y, ny); + + RETURN_BOOL(retval); +} +/* }}} */ + +/* {{{ proto void ncurses_getyx(resource window, int &y, int &x) + Returns the current cursor position for a window */ +PHP_FUNCTION(ncurses_getyx) +{ + zval *handle, *x, *y; + WINDOW **win; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rzz", &handle, &y, &x) == FAILURE) { + return; + } + + FETCH_WINRES(win, &handle); + + convert_to_long(x); + convert_to_long(y); + + getyx(*win, Z_LVAL_P(y), Z_LVAL_P(x)); +} +/* }}} */ + +/* {{{ proto void ncurses_getmaxyx(resource window, int &y, int &x) + Returns the size of a window */ +PHP_FUNCTION(ncurses_getmaxyx) +{ + zval *handle, *x, *y; + WINDOW **win; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rzz", &handle, &y, &x) == FAILURE) { + return; + } + + FETCH_WINRES(win, &handle); + + convert_to_long(x); + convert_to_long(y); + + getmaxyx(*win, Z_LVAL_P(y), Z_LVAL_P(x)); +} +/* }}} */ + +/* {{{ proto int ncurses_wmove(resource window, int y, int x) + Moves windows output position */ +PHP_FUNCTION(ncurses_wmove) +{ + zval *handle, *x, *y; + WINDOW **win; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rzz", &handle, &y, &x) == FAILURE) { + return; + } + + FETCH_WINRES(win, &handle); + + convert_to_long(x); + convert_to_long(y); + + RETURN_LONG(wmove(*win, Z_LVAL_P(y), Z_LVAL_P(x))); +} +/* }}} */ + +/* {{{ proto int ncurses_keypad(resource window, bool bf) + Turns keypad on or off */ +PHP_FUNCTION(ncurses_keypad) +{ + zval *handle; + zend_bool bf; + WINDOW **win; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rb", &handle, &bf) == FAILURE) { + return; + } + + FETCH_WINRES(win, &handle); + + RETURN_LONG(keypad(*win, bf)); + +} +/* }}} */ + +#ifdef HAVE_NCURSES_COLOR_SET +/* {{{ proto int ncurses_wcolor_set(resource window, int color_pair) + Sets windows color pairings */ +PHP_FUNCTION(ncurses_wcolor_set) +{ + zval *handle; + long color_pair; + WINDOW **win; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &handle, &color_pair) == FAILURE) { + return; + } + + FETCH_WINRES(win, &handle); + + RETURN_LONG(wcolor_set(*win, color_pair, 0)); +} +/* }}} */ +#endif + +/* {{{ proto int ncurses_wclear(resource window) + Clears window */ +PHP_FUNCTION(ncurses_wclear) +{ + zval *handle; + WINDOW **win; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) { + return; + } + + FETCH_WINRES(win, &handle); + + RETURN_LONG(wclear(*win)); +} +/* }}} */ + +/* {{{ proto int ncurses_wnoutrefresh(resource window) + Copies window to virtual screen */ +PHP_FUNCTION(ncurses_wnoutrefresh) +{ + zval *handle; + WINDOW **win; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) { + return; + } + + FETCH_WINRES(win, &handle); + + RETURN_LONG(wnoutrefresh(*win)); +} +/* }}} */ + +/* {{{ proto int ncurses_waddstr(resource window, string str [, int n]) + Outputs text at current postion in window */ +PHP_FUNCTION(ncurses_waddstr) +{ + zval *handle; + char *str; + int str_len; + long n = 0; + WINDOW **win; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|l", &handle, &str, &str_len, &n) == FAILURE) { + return; + } + + FETCH_WINRES(win, &handle); + if (!n) { + RETURN_LONG(waddstr(*win, str)); + } else { + RETURN_LONG(waddnstr(*win, str, n)); + } +} +/* }}} */ + +/* {{{ proto int ncurses_wgetch(resource window) + Reads a character from keyboard (window) */ +PHP_FUNCTION(ncurses_wgetch) +{ + zval *handle; + WINDOW **win; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) { + return; + } + + FETCH_WINRES(win, &handle); + + RETURN_LONG(wgetch(*win)); +} +/* }}} */ + +/* {{{ proto int ncurses_wattroff(resource window, int attrs) + Turns off attributes for a window */ +PHP_FUNCTION(ncurses_wattroff) +{ + zval *handle; + WINDOW **win; + long attrs; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &handle, &attrs) == FAILURE) { + return; + } + + FETCH_WINRES(win, &handle); + + RETURN_LONG(wattroff(*win, attrs)); +} +/* }}} */ + +/* {{{ proto int ncurses_wattron(resource window, int attrs) + Turns on attributes for a window */ +PHP_FUNCTION(ncurses_wattron) +{ + zval *handle; + WINDOW **win; + long attrs; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &handle, &attrs) == FAILURE) { + return; + } + + FETCH_WINRES(win, &handle); + + RETURN_LONG(wattron(*win, attrs)); +} +/* }}} */ + +/* {{{ proto int ncurses_wattrset(resource window, int attrs) + Set the attributes for a window */ +PHP_FUNCTION(ncurses_wattrset) +{ + zval *handle; + WINDOW **win; + long attrs; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &handle, &attrs) == FAILURE) { + return; + } + + FETCH_WINRES(win, &handle); + + RETURN_LONG(wattrset(*win, attrs)); +} +/* }}} */ + +/* {{{ proto int ncurses_wstandend(resource window) + End standout mode for a window */ +PHP_FUNCTION(ncurses_wstandend) +{ + zval *handle; + WINDOW **win; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) { + return; + } + + FETCH_WINRES(win, &handle); + + RETURN_LONG(wstandend(*win)); +} +/* }}} */ + +/* {{{ proto int ncurses_wstandout(resource window) + Enter standout mode for a window */ +PHP_FUNCTION(ncurses_wstandout) +{ + zval *handle; + WINDOW **win; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) { + return; + } + + FETCH_WINRES(win, &handle); + + RETURN_LONG(wstandout(*win)); +} +/* }}} */ + +#if HAVE_NCURSES_PANEL +/* {{{ proto resource ncurses_new_panel(resource window) + Create a new panel and associate it with window */ +PHP_FUNCTION(ncurses_new_panel) +{ + zval *handle; + WINDOW **win; + PANEL **panel; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) { + return; + } + + FETCH_WINRES(win, &handle); + + panel = (PANEL **)emalloc(sizeof(PANEL *)); + *panel = new_panel(*win); + + if (*panel == NULL) { + efree(panel); + RETURN_FALSE; + } else { + long id = ZEND_REGISTER_RESOURCE(return_value, panel, le_ncurses_panels); + set_panel_userptr(*panel, (void*)id); + } + +} +/* }}} */ + +/* {{{ proto bool ncurses_del_panel(resource panel) + Remove panel from the stack and delete it (but not the associated window) */ +PHP_FUNCTION(ncurses_del_panel) +{ + zval *handle; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) { + return; + } + zend_list_delete(Z_RESVAL_P(handle)); + + RETURN_TRUE; +} +/* }}} */ + +/* {{{ proto int ncurses_hide_panel(resource panel) + Remove panel from the stack, making it invisible */ +PHP_FUNCTION(ncurses_hide_panel) +{ + zval *handle; + PANEL **panel; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) { + return; + } + + FETCH_PANEL(panel, &handle); + + RETURN_LONG(hide_panel(*panel)); + +} +/* }}} */ + +/* {{{ proto int ncurses_show_panel(resource panel) + Places an invisible panel on top of the stack, making it visible */ +PHP_FUNCTION(ncurses_show_panel) +{ + zval *handle; + PANEL **panel; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) { + return; + } + + FETCH_PANEL(panel, &handle); + + RETURN_LONG(show_panel(*panel)); + +} +/* }}} */ + +/* {{{ proto int ncurses_top_panel(resource panel) + Moves a visible panel to the top of the stack */ +PHP_FUNCTION(ncurses_top_panel) +{ + zval *handle; + PANEL **panel; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) { + return; + } + + FETCH_PANEL(panel, &handle); + + RETURN_LONG(top_panel(*panel)); + +} +/* }}} */ + +/* {{{ proto int ncurses_bottom_panel(resource panel) + Moves a visible panel to the bottom of the stack */ +PHP_FUNCTION(ncurses_bottom_panel) +{ + zval *handle; + PANEL **panel; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) { + return; + } + + FETCH_PANEL(panel, &handle); + + RETURN_LONG(bottom_panel(*panel)); + +} +/* }}} */ + +/* {{{ proto int ncurses_move_panel(resource panel, int startx, int starty) + Moves a panel so that it's upper-left corner is at [startx, starty] */ +PHP_FUNCTION(ncurses_move_panel) +{ + zval *handle; + PANEL **panel; + long startx, starty; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rll", &handle, &startx, &starty) == FAILURE) { + return; + } + + FETCH_PANEL(panel, &handle); + + RETURN_LONG(move_panel(*panel, startx, starty)); + +} +/* }}} */ + +/* {{{ proto int ncurses_replace_panel(resource panel, resource window) + Replaces the window associated with panel */ +PHP_FUNCTION(ncurses_replace_panel) +{ + zval *phandle, *whandle; + PANEL **panel; + WINDOW **window; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rr", &phandle, &whandle) == FAILURE) { + return; + } + + FETCH_PANEL(panel, &phandle); + FETCH_WINRES(window, &whandle); + + RETURN_LONG(replace_panel(*panel, *window)); + +} +/* }}} */ + +/* {{{ proto resource ncurses_panel_above(resource panel) + Returns the panel above panel. If panel is null, returns the bottom panel in the stack */ +PHP_FUNCTION(ncurses_panel_above) +{ + zval *phandle = NULL; + PANEL **panel; + PANEL *above; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r!", &phandle) == FAILURE) { + return; + } + + if (phandle) { + FETCH_PANEL(panel, &phandle); + above = panel_above(*panel); + } else { + above = panel_above((PANEL *)0); + } + + if (above) { + long id = (long)panel_userptr(above); + zend_list_addref(id); + RETURN_RESOURCE(id); + } else { + RETURN_FALSE; + } +} +/* }}} */ + +/* {{{ proto resource ncurses_panel_below(resource panel) + Returns the panel below panel. If panel is null, returns the top panel in the stack */ +PHP_FUNCTION(ncurses_panel_below) +{ + zval *phandle = NULL; + PANEL **panel; + PANEL *below; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r!", &phandle) == FAILURE) { + return; + } + + if (phandle) { + FETCH_PANEL(panel, &phandle); + below = panel_below(*panel); + } else { + below = panel_below((PANEL *)0); + } + if (below) { + long id = (long)panel_userptr(below); + zend_list_addref(id); + RETURN_RESOURCE(id); + } else { + RETURN_FALSE; + } +} +/* }}} */ + +/* {{{ proto resource ncurses_panel_window(resource panel) + Returns the window associated with panel */ +PHP_FUNCTION(ncurses_panel_window) +{ + zval *phandle = NULL; + PANEL **panel; + WINDOW **win; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &phandle) == FAILURE) { + return; + } + + FETCH_PANEL(panel, &phandle); + + win = (WINDOW **)emalloc(sizeof(WINDOW *)); + *win = panel_window(*panel); + + if (*win == NULL) { + efree(win); + RETURN_FALSE; + } + ZEND_REGISTER_RESOURCE(return_value, win, le_ncurses_windows); +} +/* }}} */ + +/* {{{ proto void ncurses_update_panels(void) + Refreshes the virtual screen to reflect the relations between panels in the stack. */ +PHP_FUNCTION(ncurses_update_panels) +{ + IS_NCURSES_INITIALIZED(); + update_panels(); +} +/* }}} */ +#endif /* HAVE_NCURSES_PANEL */ + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + * vim600: sw=4 ts=4 fdm=marker + * vim<600: sw=4 ts=4 + */ |