diff options
Diffstat (limited to 'sapi/phpdbg/phpdbg_utils.c')
| -rw-r--r-- | sapi/phpdbg/phpdbg_utils.c | 61 | 
1 files changed, 61 insertions, 0 deletions
| diff --git a/sapi/phpdbg/phpdbg_utils.c b/sapi/phpdbg/phpdbg_utils.c index 1effcfccaf..c9b22a2039 100644 --- a/sapi/phpdbg/phpdbg_utils.c +++ b/sapi/phpdbg/phpdbg_utils.c @@ -30,6 +30,8 @@  #ifdef _WIN32  #	include "win32/time.h" +#elif defined(HAVE_SYS_IOCTL_H)  +#	include "sys/ioctl.h"  #endif  ZEND_EXTERN_MODULE_GLOBALS(phpdbg); @@ -65,6 +67,14 @@ const static phpdbg_color_t colors[] = {  	PHPDBG_COLOR_END  }; /* }}} */ +/* {{{ */ +const static phpdbg_element_t elements[] = { +	PHPDBG_ELEMENT_D("prompt", PHPDBG_COLOR_PROMPT), +	PHPDBG_ELEMENT_D("error", PHPDBG_COLOR_ERROR), +	PHPDBG_ELEMENT_D("notice", PHPDBG_COLOR_NOTICE), +	PHPDBG_ELEMENT_END +}; /* }}} */ +  PHPDBG_API int phpdbg_is_numeric(const char *str) /* {{{ */  {  	if (!str) @@ -347,6 +357,21 @@ PHPDBG_API const phpdbg_color_t* phpdbg_get_colors(TSRMLS_D) /* {{{ */  	return colors;  } /* }}} */ +PHPDBG_API int phpdbg_get_element(const char *name, size_t len TSRMLS_DC) { +	const phpdbg_element_t *element = elements; +	 +	while (element && element->name) { +		if (len == element->name_length) { +			if (strncasecmp(name, element->name, len) == SUCCESS) { +				return element->id; +			} +		} +		element++; +	} +	 +	return PHPDBG_COLOR_INVALID; +} +  PHPDBG_API void phpdbg_set_prompt(const char *prompt TSRMLS_DC) /* {{{ */  {  	/* free formatted prompt */ @@ -385,3 +410,39 @@ PHPDBG_API const char *phpdbg_get_prompt(TSRMLS_D) /* {{{ */  	return PHPDBG_G(prompt)[1];  } /* }}} */ + +int phpdbg_rebuild_symtable(TSRMLS_D) { +	if (!EG(active_op_array)) { +		phpdbg_error("No active op array!"); +		return FAILURE; +	} + +	if (!EG(active_symbol_table)) { +		zend_rebuild_symbol_table(TSRMLS_C); + +		if (!EG(active_symbol_table)) { +			phpdbg_error("No active symbol table!"); +			return FAILURE; +		} +	} + +	return SUCCESS; +} + +PHPDBG_API int phpdbg_get_terminal_width(TSRMLS_D) /* {{{ */ +{ +	int columns;	 +#ifdef _WIN32 +	CONSOLE_SCREEN_BUFFER_INFO csbi; + +	GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi); +	columns = csbi.srWindow.Right - csbi.srWindow.Left + 1; +#elif defined(HAVE_SYS_IOCTL_H)  +	struct winsize w; + +	columns = ioctl(fileno(stdout), TIOCGWINSZ, &w) == 0 ? w.ws_col : 100; +#else +	columns = 100; +#endif +	return columns; +} /* }}} */ | 
