ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
-int phpdbg_is_numeric(const char *str) /* {{{ */
+/* {{{ 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("blue", "0;34"),
+ PHPDBG_COLOR_D("purple", "0;35"),
+ PHPDBG_COLOR_D("cyan", "0;36"),
+ PHPDBG_COLOR_END
+}; /* }}} */
+
+PHPDBG_API int phpdbg_is_numeric(const char *str) /* {{{ */
{
if (!str)
return 0;
return 0;
} /* }}} */
-int phpdbg_is_empty(const char *str) /* {{{ */
+PHPDBG_API int phpdbg_is_empty(const char *str) /* {{{ */
{
if (!str)
return 1;
return 1;
} /* }}} */
-int phpdbg_is_addr(const char *str) /* {{{ */
+PHPDBG_API int phpdbg_is_addr(const char *str) /* {{{ */
{
return str[0] && str[1] && memcmp(str, "0x", 2) == 0;
} /* }}} */
-int phpdbg_is_class_method(const char *str, size_t len, char **class, char **method) /* {{{ */
+PHPDBG_API int phpdbg_is_class_method(const char *str, size_t len, char **class, char **method) /* {{{ */
{
char *sep = NULL;
return 1;
} /* }}} */
-char *phpdbg_resolve_path(const char *path TSRMLS_DC) /* {{{ */
+PHPDBG_API char *phpdbg_resolve_path(const char *path TSRMLS_DC) /* {{{ */
{
char resolved_name[MAXPATHLEN];
return estrdup(resolved_name);
} /* }}} */
-const char *phpdbg_current_file(TSRMLS_D) /* {{{ */
+PHPDBG_API const char *phpdbg_current_file(TSRMLS_D) /* {{{ */
{
const char *file = zend_get_executed_filename(TSRMLS_C);
return file;
} /* }}} */
-char *phpdbg_trim(const char *str, size_t len, size_t *new_len) /* {{{ */
+PHPDBG_API char *phpdbg_trim(const char *str, size_t len, size_t *new_len) /* {{{ */
{
const char *p = str;
char *new = NULL;
} /* }}} */
-int phpdbg_print(int type TSRMLS_DC, FILE *fp, const char *format, ...) /* {{{ */
+PHPDBG_API int phpdbg_print(int type TSRMLS_DC, FILE *fp, const char *format, ...) /* {{{ */
{
int rc = 0;
char *buffer = NULL;
return rc;
} /* }}} */
+
+PHPDBG_API const phpdbg_color_t* phpdbg_get_color(const char *name, size_t name_length) /* {{{ */
+{
+ const phpdbg_color_t *color = colors;
+
+ while (color && color->name) {
+ if (name_length == color->name_length &&
+ memcmp(name, color->name, name_length) == SUCCESS) {
+ return color;
+ }
+ ++color;
+ }
+
+ return NULL;
+} /* }}} */
#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
*/
-int phpdbg_is_numeric(const char*);
-int phpdbg_is_empty(const char*);
-int phpdbg_is_addr(const char*);
-int phpdbg_is_class_method(const char*, size_t, char**, char**);
-const char *phpdbg_current_file(TSRMLS_D);
-char *phpdbg_resolve_path(const char* TSRMLS_DC);
-char *phpdbg_trim(const char*, size_t, size_t*);
+PHPDBG_API int phpdbg_is_numeric(const char*);
+PHPDBG_API int phpdbg_is_empty(const char*);
+PHPDBG_API int phpdbg_is_addr(const char*);
+PHPDBG_API int phpdbg_is_class_method(const char*, size_t, char**, char**);
+PHPDBG_API const char *phpdbg_current_file(TSRMLS_D);
+PHPDBG_API char *phpdbg_resolve_path(const char* TSRMLS_DC);
+PHPDBG_API char *phpdbg_trim(const char*, size_t, size_t*);
/**
* Error/notice/formatting helper
};
#ifdef ZTS
-int phpdbg_print(int TSRMLS_DC, FILE*, const char*, ...) PHP_ATTRIBUTE_FORMAT(printf, 4, 5);
+PHPDBG_API int phpdbg_print(int TSRMLS_DC, FILE*, const char*, ...) PHP_ATTRIBUTE_FORMAT(printf, 4, 5);
#else
-int phpdbg_print(int TSRMLS_DC, FILE*, const char*, ...) PHP_ATTRIBUTE_FORMAT(printf, 3, 4);
+PHPDBG_API int phpdbg_print(int TSRMLS_DC, FILE*, const char*, ...) PHP_ATTRIBUTE_FORMAT(printf, 3, 4);
#endif
#define phpdbg_error(fmt, ...) phpdbg_print(P_ERROR TSRMLS_CC, PHPDBG_G(io)[PHPDBG_STDOUT], fmt, ##__VA_ARGS__)