From: Felipe Pena Date: Sun, 24 Nov 2013 17:00:30 +0000 (-0200) Subject: - Initial work on setting color to prompt X-Git-Tag: php-5.6.0alpha1~110^2~89 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8589c0af91b78c59c8a226ad7eec9af3262e8737;p=php - Initial work on setting color to prompt --- diff --git a/phpdbg.c b/phpdbg.c index 8a2369de18..72478e0535 100644 --- a/phpdbg.c +++ b/phpdbg.c @@ -38,6 +38,8 @@ void (*zend_execute_old)(zend_op_array *op_array TSRMLS_DC); static inline void php_phpdbg_globals_ctor(zend_phpdbg_globals *pg) /* {{{ */ { pg->prompt = NULL; + pg->prompt_raw = NULL; + pg->prompt_color = NULL; pg->exec = NULL; pg->exec_len = 0; pg->ops = NULL; @@ -154,6 +156,16 @@ static PHP_RSHUTDOWN_FUNCTION(phpdbg) /* {{{ */ PHPDBG_G(prompt) = NULL; } + if (PHPDBG_G(prompt_raw)) { + efree(PHPDBG_G(prompt_raw)); + PHPDBG_G(prompt_raw) = NULL; + } + + if (PHPDBG_G(prompt_color)) { + efree(PHPDBG_G(prompt_color)); + PHPDBG_G(prompt_color) = NULL; + } + if (PHPDBG_G(oplog)) { fclose( PHPDBG_G(oplog)); @@ -687,7 +699,7 @@ phpdbg_main: PHPDBG_G(flags) = flags; /* set default prompt */ - phpdbg_set_prompt(PROMPT TSRMLS_CC); + phpdbg_set_prompt(PROMPT, "1;64" TSRMLS_CC); zend_try { zend_activate_modules(TSRMLS_C); diff --git a/phpdbg.h b/phpdbg.h index 8f455e8c7b..327116d6f4 100644 --- a/phpdbg.h +++ b/phpdbg.h @@ -132,6 +132,8 @@ ZEND_BEGIN_MODULE_GLOBALS(phpdbg) HashTable bp[PHPDBG_BREAK_TABLES]; /* break points */ char *prompt; /* prompt */ + char *prompt_raw; /* prompt unmodified */ + char *prompt_color; /* prompt color */ char *exec; /* file to execute */ size_t exec_len; /* size of exec */ zend_op_array *ops; /* op_array */ diff --git a/phpdbg_set.c b/phpdbg_set.c index e81b0f4cc5..650f2116c8 100644 --- a/phpdbg_set.c +++ b/phpdbg_set.c @@ -18,23 +18,40 @@ */ #include "phpdbg.h" +#include "phpdbg_cmd.h" #include "phpdbg_set.h" #include "phpdbg_utils.h" ZEND_EXTERN_MODULE_GLOBALS(phpdbg); -void phpdbg_set_prompt(const char *prompt TSRMLS_DC) /* {{{ */ +void phpdbg_set_prompt(const char *prompt, const char *color TSRMLS_DC) /* {{{ */ { + char *old_prompt_raw = PHPDBG_G(prompt_raw); + if (PHPDBG_G(prompt)) { efree(PHPDBG_G(prompt)); PHPDBG_G(prompt) = NULL; } + if (color) { + if (PHPDBG_G(prompt_color)) { + efree(PHPDBG_G(prompt_color)); + } + PHPDBG_G(prompt_color) = estrdup(color); + } + if (PHPDBG_G(flags) & PHPDBG_IS_COLOURED) { - spprintf(&PHPDBG_G(prompt), 0, "\033[1;64m%s\033[0m ", prompt); + spprintf(&PHPDBG_G(prompt), 0, "\033[%sm%s\033[0m ", + PHPDBG_G(prompt_color) ? PHPDBG_G(prompt_color) : "1;64", prompt); } else { spprintf(&PHPDBG_G(prompt), 0, "%s ", prompt); } + + PHPDBG_G(prompt_raw) = estrdup(prompt); + + if (old_prompt_raw) { + efree(old_prompt_raw); + } } /* }}} */ const char *phpdbg_get_prompt(TSRMLS_D) /* {{{ */ @@ -42,6 +59,23 @@ const char *phpdbg_get_prompt(TSRMLS_D) /* {{{ */ return PHPDBG_G(prompt); } /* }}} */ +void phpdbg_set_prompt_color(const char *color TSRMLS_DC) /* {{{ */ +{ + if (memcmp(color, PHPDBG_STRL("blue")) == 0) { + PHPDBG_G(prompt_color) = estrndup("blue", sizeof("blue")-1); + phpdbg_set_prompt(PHPDBG_G(prompt_raw), "0;34" TSRMLS_CC); + } else if (memcmp(color, PHPDBG_STRL("green")) == 0) { + PHPDBG_G(prompt_color) = estrndup("green", sizeof("green")-1); + phpdbg_set_prompt(PHPDBG_G(prompt_raw), "0;32" TSRMLS_CC); + } + +} /* }}} */ + +const char* phpdbg_get_prompt_color(TSRMLS_D) /* {{{ */ +{ + return PHPDBG_G(prompt_color); +} /* }}} */ + PHPDBG_SET(prompt) /* {{{ */ { switch (param->type) { @@ -50,7 +84,24 @@ PHPDBG_SET(prompt) /* {{{ */ break; case STR_PARAM: - phpdbg_set_prompt(param->str TSRMLS_CC); + phpdbg_set_prompt(param->str, NULL TSRMLS_CC); + break; + + phpdbg_default_switch_case(); + } + + return SUCCESS; +} /* }}} */ + +PHPDBG_SET(prompt_color) /* {{{ */ +{ + switch (param->type) { + case EMPTY_PARAM: + phpdbg_writeln(phpdbg_get_prompt_color(TSRMLS_C)); + break; + + case STR_PARAM: + phpdbg_set_prompt_color(param->str TSRMLS_CC); break; phpdbg_default_switch_case(); diff --git a/phpdbg_set.h b/phpdbg_set.h index e691a8195f..a78558c636 100644 --- a/phpdbg_set.h +++ b/phpdbg_set.h @@ -24,15 +24,20 @@ #define PHPDBG_SET(name) PHPDBG_COMMAND(set_##name) -void phpdbg_set_prompt(const char* TSRMLS_DC); -const char* phpdbg_get_prompt(TSRMLS_D); +void phpdbg_set_prompt(const char*, const char* TSRMLS_DC); +const char *phpdbg_get_prompt(TSRMLS_D); + +void phpdbg_set_prompt_color(const char* TSRMLS_DC); +const char *phpdbg_get_prompt_color(TSRMLS_D); PHPDBG_SET(prompt); +PHPDBG_SET(prompt_color); PHPDBG_SET(oplog); static const phpdbg_command_t phpdbg_set_commands[] = { - PHPDBG_COMMAND_D_EX(prompt, "set prompt", 'p', set_prompt, NULL, 0), - PHPDBG_COMMAND_D_EX(oplog, "set oplog output", 'O', set_oplog, NULL, 0), + PHPDBG_COMMAND_D_EX(prompt, "set prompt", 'p', set_prompt, NULL, 0), + PHPDBG_COMMAND_D_EX(prompt_color, "set prompt color", 'c', set_prompt_color, NULL, 0), + PHPDBG_COMMAND_D_EX(oplog, "set oplog output", 'O', set_oplog, NULL, 0), PHPDBG_END_COMMAND };