mirror of
https://github.com/php/php-src.git
synced 2025-08-19 08:49:28 +02:00
get good control over colors and prompt
This commit is contained in:
parent
c85f247eac
commit
ddcfa42f15
7 changed files with 207 additions and 160 deletions
36
phpdbg.c
36
phpdbg.c
|
@ -37,9 +37,13 @@ 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->prompt[0] = NULL;
|
||||
pg->prompt[1] = NULL;
|
||||
|
||||
pg->colors[0] = NULL;
|
||||
pg->colors[1] = NULL;
|
||||
pg->colors[2] = NULL;
|
||||
|
||||
pg->exec = NULL;
|
||||
pg->exec_len = 0;
|
||||
pg->ops = NULL;
|
||||
|
@ -151,20 +155,15 @@ static PHP_RSHUTDOWN_FUNCTION(phpdbg) /* {{{ */
|
|||
PHPDBG_G(exec) = NULL;
|
||||
}
|
||||
|
||||
if (PHPDBG_G(prompt)) {
|
||||
efree(PHPDBG_G(prompt));
|
||||
PHPDBG_G(prompt) = NULL;
|
||||
if (PHPDBG_G(prompt)[0]) {
|
||||
free(PHPDBG_G(prompt)[0]);
|
||||
}
|
||||
if (PHPDBG_G(prompt)[1]) {
|
||||
free(PHPDBG_G(prompt)[1]);
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
PHPDBG_G(prompt)[0] = NULL;
|
||||
PHPDBG_G(prompt)[1] = NULL;
|
||||
|
||||
if (PHPDBG_G(oplog)) {
|
||||
fclose(
|
||||
|
@ -698,8 +697,13 @@ phpdbg_main:
|
|||
/* set flags from command line */
|
||||
PHPDBG_G(flags) = flags;
|
||||
|
||||
/* set default colors */
|
||||
phpdbg_set_color_ex(PHPDBG_COLOR_PROMPT, "white-bold", sizeof("white-bold")-1 TSRMLS_CC);
|
||||
phpdbg_set_color_ex(PHPDBG_COLOR_ERROR, "red", sizeof("red")-1 TSRMLS_CC);
|
||||
phpdbg_set_color_ex(PHPDBG_COLOR_NOTICE, "green", sizeof("green")-1 TSRMLS_CC);
|
||||
|
||||
/* set default prompt */
|
||||
phpdbg_set_prompt(PROMPT, "1;64" TSRMLS_CC);
|
||||
phpdbg_set_prompt(PROMPT TSRMLS_CC);
|
||||
|
||||
zend_try {
|
||||
zend_activate_modules(TSRMLS_C);
|
||||
|
|
25
phpdbg.h
25
phpdbg.h
|
@ -62,6 +62,7 @@
|
|||
#endif
|
||||
|
||||
#include "phpdbg_cmd.h"
|
||||
#include "phpdbg_utils.h"
|
||||
|
||||
#ifdef ZTS
|
||||
# define PHPDBG_G(v) TSRMG(phpdbg_globals_id, zend_phpdbg_globals *, v)
|
||||
|
@ -112,7 +113,6 @@
|
|||
#define PHPDBG_IS_SIGNALED (1<<20)
|
||||
#define PHPDBG_IS_INTERACTIVE (1<<21)
|
||||
|
||||
|
||||
#ifndef _WIN32
|
||||
# define PHPDBG_DEFAULT_FLAGS (PHPDBG_IS_QUIET|PHPDBG_IS_COLOURED)
|
||||
#else
|
||||
|
@ -126,14 +126,16 @@
|
|||
/* {{{ output descriptors */
|
||||
#define PHPDBG_STDIN 0
|
||||
#define PHPDBG_STDOUT 1
|
||||
#define PHPDBG_STDERR 2 /* }}} */
|
||||
#define PHPDBG_STDERR 2
|
||||
#define PHPDBG_IO_FDS 3 /* }}} */
|
||||
|
||||
/* {{{ structs */
|
||||
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 */
|
||||
HashTable registered; /* registered */
|
||||
HashTable seek; /* seek oplines */
|
||||
phpdbg_frame_t frame; /* frame */
|
||||
|
||||
char *exec; /* file to execute */
|
||||
size_t exec_len; /* size of exec */
|
||||
zend_op_array *ops; /* op_array */
|
||||
|
@ -141,14 +143,17 @@ ZEND_BEGIN_MODULE_GLOBALS(phpdbg)
|
|||
int bp_count; /* breakpoint count */
|
||||
int del_bp_num; /* breakpoint to delete */
|
||||
int vmret; /* return from last opcode handler execution */
|
||||
|
||||
FILE *oplog; /* opline log */
|
||||
FILE *io[PHPDBG_IO_FDS]; /* io */
|
||||
|
||||
char *prompt[2]; /* prompt */
|
||||
const phpdbg_color_t *colors[PHPDBG_COLORS]; /* colors */
|
||||
|
||||
phpdbg_command_t *lcmd; /* last command */
|
||||
phpdbg_param_t lparam; /* last param */
|
||||
FILE *oplog; /* opline log */
|
||||
HashTable seek; /* seek oplines */
|
||||
|
||||
zend_ulong flags; /* phpdbg flags */
|
||||
HashTable registered; /* registered */
|
||||
phpdbg_frame_t frame; /* frame */
|
||||
FILE *io[3]; /* stdin/stdout/stderr */
|
||||
ZEND_END_MODULE_GLOBALS(phpdbg) /* }}} */
|
||||
|
||||
#endif /* PHPDBG_H */
|
||||
|
|
|
@ -92,6 +92,8 @@ typedef struct {
|
|||
} phpdbg_frame_t;
|
||||
/* }}} */
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Workflow:
|
||||
* 1) read input
|
||||
|
@ -112,6 +114,8 @@ typedef struct {
|
|||
PHPDBG_API phpdbg_input_t* phpdbg_read_input(char *buffered TSRMLS_DC);
|
||||
PHPDBG_API phpdbg_input_t** phpdbg_read_argv(char *buffer, int *argc TSRMLS_DC);
|
||||
PHPDBG_API void phpdbg_destroy_input(phpdbg_input_t** TSRMLS_DC);
|
||||
#define phpdbg_argv_is(n, s) \
|
||||
(memcmp(input->argv[n]->string, s, input->argv[n]->length-1) == SUCCESS)
|
||||
|
||||
/*
|
||||
* Parameter Management
|
||||
|
|
108
phpdbg_set.c
108
phpdbg_set.c
|
@ -24,67 +24,6 @@
|
|||
|
||||
ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
|
||||
|
||||
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[%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) /* {{{ */
|
||||
{
|
||||
return PHPDBG_G(prompt);
|
||||
} /* }}} */
|
||||
|
||||
void phpdbg_set_prompt_color(const char *color TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
static const char *colors[] = {
|
||||
"blue", "0;34",
|
||||
"green", "0;32",
|
||||
"red", "0;31",
|
||||
"cyan", "0;36",
|
||||
"purple", "0;35",
|
||||
NULL, NULL
|
||||
};
|
||||
const char **p = colors;
|
||||
|
||||
do {
|
||||
if (memcmp(color, *p, strlen(*p)+1) == 0) {
|
||||
PHPDBG_G(prompt_color) = estrdup(*p);
|
||||
phpdbg_set_prompt(PHPDBG_G(prompt_raw), *(p+1) TSRMLS_CC);
|
||||
return;
|
||||
}
|
||||
} while (++p && *(++p));
|
||||
} /* }}} */
|
||||
|
||||
const char* phpdbg_get_prompt_color(TSRMLS_D) /* {{{ */
|
||||
{
|
||||
return PHPDBG_G(prompt_color);
|
||||
} /* }}} */
|
||||
|
||||
PHPDBG_SET(prompt) /* {{{ */
|
||||
{
|
||||
switch (param->type) {
|
||||
|
@ -93,7 +32,7 @@ PHPDBG_SET(prompt) /* {{{ */
|
|||
break;
|
||||
|
||||
case STR_PARAM:
|
||||
phpdbg_set_prompt(param->str, NULL TSRMLS_CC);
|
||||
phpdbg_set_prompt(param->str TSRMLS_CC);
|
||||
break;
|
||||
|
||||
phpdbg_default_switch_case();
|
||||
|
@ -102,20 +41,45 @@ PHPDBG_SET(prompt) /* {{{ */
|
|||
return SUCCESS;
|
||||
} /* }}} */
|
||||
|
||||
PHPDBG_SET(prompt_color) /* {{{ */
|
||||
PHPDBG_SET(color) /* {{{ */
|
||||
{
|
||||
switch (param->type) {
|
||||
case EMPTY_PARAM:
|
||||
phpdbg_writeln(phpdbg_get_prompt_color(TSRMLS_C));
|
||||
break;
|
||||
if ((param->type == STR_PARAM) && (input->argc == 3)) {
|
||||
const phpdbg_color_t *color = phpdbg_get_color(
|
||||
input->argv[2]->string, input->argv[2]->length TSRMLS_CC);
|
||||
int element = PHPDBG_COLOR_INVALID;
|
||||
|
||||
case STR_PARAM:
|
||||
phpdbg_set_prompt_color(param->str TSRMLS_CC);
|
||||
break;
|
||||
|
||||
phpdbg_default_switch_case();
|
||||
if (color) {
|
||||
if (phpdbg_argv_is(1, "prompt")) {
|
||||
phpdbg_notice(
|
||||
"setting prompt color to %s (%s)", color->name, color->code);
|
||||
element = PHPDBG_COLOR_PROMPT;
|
||||
if (PHPDBG_G(prompt)[1]) {
|
||||
free(PHPDBG_G(prompt)[1]);
|
||||
PHPDBG_G(prompt)[1]=NULL;
|
||||
}
|
||||
} else if (phpdbg_argv_is(1, "error")) {
|
||||
phpdbg_notice(
|
||||
"setting error color to %s (%s)", color->name, color->code);
|
||||
element = PHPDBG_COLOR_ERROR;
|
||||
|
||||
} else if (phpdbg_argv_is(1, "notice")) {
|
||||
phpdbg_notice(
|
||||
"setting notice color to %s (%s)", color->name, color->code);
|
||||
element = PHPDBG_COLOR_NOTICE;
|
||||
|
||||
} else goto usage;
|
||||
|
||||
/* set color for element */
|
||||
phpdbg_set_color(element, color TSRMLS_CC);
|
||||
} else {
|
||||
phpdbg_error(
|
||||
"Failed to find the requested color (%s)", input->argv[2]->string);
|
||||
}
|
||||
} else {
|
||||
usage:
|
||||
phpdbg_error(
|
||||
"set color used incorrected: set color <prompt|error|notice> <color>");
|
||||
}
|
||||
return SUCCESS;
|
||||
} /* }}} */
|
||||
|
||||
|
|
15
phpdbg_set.h
15
phpdbg_set.h
|
@ -24,22 +24,15 @@
|
|||
|
||||
#define PHPDBG_SET(name) PHPDBG_COMMAND(set_##name)
|
||||
|
||||
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(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(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_COMMAND_D_EX(prompt, "set prompt <string>", 'p', set_prompt, NULL, 0),
|
||||
PHPDBG_COMMAND_D_EX(color, "set color <element> <color>", 'C', set_color, NULL, 1),
|
||||
PHPDBG_COMMAND_D_EX(oplog, "set oplog <output>", 'O', set_oplog, NULL, 0),
|
||||
PHPDBG_END_COMMAND
|
||||
};
|
||||
|
||||
|
||||
#endif /* PHPDBG_SET_H */
|
||||
|
|
105
phpdbg_utils.c
105
phpdbg_utils.c
|
@ -34,12 +34,20 @@ ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
|
|||
|
||||
/* {{{ color structures */
|
||||
const static phpdbg_color_t colors[] = {
|
||||
PHPDBG_COLOR_D("white", "0:0"),
|
||||
PHPDBG_COLOR_D("red", "0:31"),
|
||||
PHPDBG_COLOR_D("green", "0:32"),
|
||||
PHPDBG_COLOR_D("none", "0;0"),
|
||||
|
||||
PHPDBG_COLOR_D("white", "0;64"),
|
||||
PHPDBG_COLOR_D("white-bold", "1;64"),
|
||||
PHPDBG_COLOR_D("red", "0;31"),
|
||||
PHPDBG_COLOR_D("red-bold", "1;31"),
|
||||
PHPDBG_COLOR_D("green", "0;32"),
|
||||
PHPDBG_COLOR_D("green-bold", "1;32"),
|
||||
PHPDBG_COLOR_D("blue", "0;34"),
|
||||
PHPDBG_COLOR_D("blue-bold", "1;34"),
|
||||
PHPDBG_COLOR_D("purple", "0;35"),
|
||||
PHPDBG_COLOR_D("purple-bold", "1;35"),
|
||||
PHPDBG_COLOR_D("cyan", "0;36"),
|
||||
PHPDBG_COLOR_D("cyan-bold", "1;36"),
|
||||
PHPDBG_COLOR_END
|
||||
}; /* }}} */
|
||||
|
||||
|
@ -170,35 +178,35 @@ PHPDBG_API int phpdbg_print(int type TSRMLS_DC, FILE *fp, const char *format, ..
|
|||
|
||||
switch (type) {
|
||||
case P_ERROR:
|
||||
rc = fprintf(fp, "%s%s%s\n",
|
||||
((PHPDBG_G(flags) & PHPDBG_IS_COLOURED) ? "\033[1;31m[" : "["),
|
||||
buffer,
|
||||
((PHPDBG_G(flags) & PHPDBG_IS_COLOURED) ? "]\033[0m" : "]"));
|
||||
if (PHPDBG_G(flags) & PHPDBG_IS_COLOURED) {
|
||||
rc = fprintf(fp,
|
||||
"\033[%sm[%s]\033[0m\n",
|
||||
PHPDBG_G(colors)[PHPDBG_COLOR_ERROR]->code, buffer);
|
||||
} else {
|
||||
rc = fprintf(fp, "[%s]\n", buffer);
|
||||
}
|
||||
break;
|
||||
|
||||
case P_NOTICE:
|
||||
rc = fprintf(fp, "%s%s%s\n",
|
||||
((PHPDBG_G(flags) & PHPDBG_IS_COLOURED) ? "\033[1;64m[" : "["),
|
||||
buffer,
|
||||
((PHPDBG_G(flags) & PHPDBG_IS_COLOURED) ? "]\033[0m" : "]"));
|
||||
if (PHPDBG_G(flags) & PHPDBG_IS_COLOURED) {
|
||||
rc = fprintf(fp,
|
||||
"\033[%sm[%s]\033[0m\n",
|
||||
PHPDBG_G(colors)[PHPDBG_COLOR_NOTICE]->code, buffer);
|
||||
} else {
|
||||
rc = fprintf(fp, "[%s]\n", buffer);
|
||||
}
|
||||
break;
|
||||
|
||||
case P_WRITELN: {
|
||||
if (buffer) {
|
||||
rc = fprintf(fp, "%s%s%s\n",
|
||||
((PHPDBG_G(flags) & PHPDBG_IS_COLOURED) ? "\033[37m" : ""),
|
||||
buffer,
|
||||
((PHPDBG_G(flags) & PHPDBG_IS_COLOURED) ? "\033[0m" : ""));
|
||||
rc = fprintf(fp, "%s\n", buffer);
|
||||
} else {
|
||||
rc = fprintf(fp, "\n");
|
||||
}
|
||||
} break;
|
||||
|
||||
case P_WRITE: if (buffer) {
|
||||
rc = fprintf(fp, "%s%s%s",
|
||||
((PHPDBG_G(flags) & PHPDBG_IS_COLOURED) ? "\033[37m" : ""),
|
||||
buffer,
|
||||
((PHPDBG_G(flags) & PHPDBG_IS_COLOURED) ? "\033[0m" : ""));
|
||||
rc = fprintf(fp, "%s", buffer);
|
||||
} break;
|
||||
|
||||
/* no formatting on logging output */
|
||||
|
@ -218,17 +226,74 @@ PHPDBG_API int phpdbg_print(int type TSRMLS_DC, FILE *fp, const char *format, ..
|
|||
return rc;
|
||||
} /* }}} */
|
||||
|
||||
PHPDBG_API const phpdbg_color_t* phpdbg_get_color(const char *name, size_t name_length) /* {{{ */
|
||||
PHPDBG_API const phpdbg_color_t* phpdbg_get_color(const char *name, size_t name_length TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
const phpdbg_color_t *color = colors;
|
||||
|
||||
while (color && color->name) {
|
||||
if (name_length == color->name_length &&
|
||||
memcmp(name, color->name, name_length) == SUCCESS) {
|
||||
phpdbg_debug(
|
||||
"phpdbg_get_color(%s, %lu): %s", name, name_length, color->code);
|
||||
return color;
|
||||
}
|
||||
++color;
|
||||
}
|
||||
|
||||
phpdbg_debug(
|
||||
"phpdbg_get_color(%s, %lu): failed", name, name_length);
|
||||
|
||||
return NULL;
|
||||
} /* }}} */
|
||||
|
||||
PHPDBG_API void phpdbg_set_color(int element, const phpdbg_color_t *color TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
PHPDBG_G(colors)[element] = color;
|
||||
} /* }}} */
|
||||
|
||||
PHPDBG_API void phpdbg_set_color_ex(int element, const char *name, size_t name_length TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
const phpdbg_color_t *color = phpdbg_get_color(name, name_length TSRMLS_CC);
|
||||
if (color) {
|
||||
phpdbg_set_color(element, color TSRMLS_CC);
|
||||
} else PHPDBG_G(colors)[element] = colors;
|
||||
} /* }}} */
|
||||
|
||||
PHPDBG_API void phpdbg_set_prompt(const char *prompt TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
/* free formatted prompt */
|
||||
if (PHPDBG_G(prompt)[1]) {
|
||||
free(PHPDBG_G(prompt)[1]);
|
||||
PHPDBG_G(prompt)[1] = NULL;
|
||||
}
|
||||
/* free old prompt */
|
||||
if (PHPDBG_G(prompt)[0]) {
|
||||
free(PHPDBG_G(prompt)[0]);
|
||||
PHPDBG_G(prompt)[0] = NULL;
|
||||
}
|
||||
|
||||
/* copy new prompt */
|
||||
PHPDBG_G(prompt)[0] = strdup(prompt);
|
||||
} /* }}} */
|
||||
|
||||
PHPDBG_API const char *phpdbg_get_prompt(TSRMLS_D) /* {{{ */
|
||||
{
|
||||
/* find cached prompt */
|
||||
if (PHPDBG_G(prompt)[1]) {
|
||||
return PHPDBG_G(prompt)[1];
|
||||
}
|
||||
|
||||
/* create cached prompt */
|
||||
if ((PHPDBG_G(flags) & PHPDBG_IS_COLOURED)) {
|
||||
asprintf(
|
||||
&PHPDBG_G(prompt)[1], "\033[%sm%s\033[0m ",
|
||||
PHPDBG_G(colors)[PHPDBG_COLOR_PROMPT]->code,
|
||||
PHPDBG_G(prompt)[0]);
|
||||
} else {
|
||||
asprintf(
|
||||
&PHPDBG_G(prompt)[1], "%s ",
|
||||
PHPDBG_G(prompt)[0]);
|
||||
}
|
||||
|
||||
return PHPDBG_G(prompt)[1];
|
||||
} /* }}} */
|
||||
|
|
|
@ -20,21 +20,6 @@
|
|||
#ifndef PHPDBG_UTILS_H
|
||||
#define PHPDBG_UTILS_H
|
||||
|
||||
/* {{{ color management */
|
||||
#define PHPDBG_COLOR_LEN 12
|
||||
#define PHPDBG_COLOR_D(color, code) \
|
||||
{color, sizeof(color), code}
|
||||
#define PHPDBG_COLOR_END \
|
||||
{NULL, 0L, {0}}
|
||||
|
||||
typedef struct _phpdbg_color_t {
|
||||
char *name;
|
||||
size_t name_length;
|
||||
const char code[PHPDBG_COLOR_LEN];
|
||||
} phpdbg_color_t;
|
||||
|
||||
PHPDBG_API const phpdbg_color_t* phpdbg_get_color(const char *name, size_t name_length); /* }}} */
|
||||
|
||||
/**
|
||||
* Input scan functions
|
||||
*/
|
||||
|
@ -90,4 +75,31 @@ PHPDBG_API int phpdbg_print(int TSRMLS_DC, FILE*, const char*, ...) PHP_ATTRIBUT
|
|||
/* {{{ For separation */
|
||||
#define SEPARATE "------------------------------------------------" /* }}} */
|
||||
|
||||
/* {{{ Color Management */
|
||||
#define PHPDBG_COLOR_LEN 12
|
||||
#define PHPDBG_COLOR_D(color, code) \
|
||||
{color, sizeof(color)-1, code}
|
||||
#define PHPDBG_COLOR_END \
|
||||
{NULL, 0L, {0}}
|
||||
|
||||
#define PHPDBG_COLOR_INVALID -1
|
||||
#define PHPDBG_COLOR_PROMPT 0
|
||||
#define PHPDBG_COLOR_ERROR 1
|
||||
#define PHPDBG_COLOR_NOTICE 2
|
||||
#define PHPDBG_COLORS 3
|
||||
|
||||
typedef struct _phpdbg_color_t {
|
||||
char *name;
|
||||
size_t name_length;
|
||||
const char code[PHPDBG_COLOR_LEN];
|
||||
} phpdbg_color_t;
|
||||
|
||||
PHPDBG_API const phpdbg_color_t* phpdbg_get_color(const char *name, size_t name_length TSRMLS_DC);
|
||||
PHPDBG_API void phpdbg_set_color(int element, const phpdbg_color_t *color TSRMLS_DC);
|
||||
PHPDBG_API void phpdbg_set_color_ex(int element, const char *name, size_t name_length TSRMLS_DC); /* }}} */
|
||||
|
||||
/* {{{ Prompt Management */
|
||||
PHPDBG_API void phpdbg_set_prompt(const char* TSRMLS_DC);
|
||||
PHPDBG_API const char *phpdbg_get_prompt(TSRMLS_D); /* }}} */
|
||||
|
||||
#endif /* PHPDBG_UTILS_H */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue