.libs/
phpdbg
-phpdbg.lo
-phpdbg.o
+*.lo
+*.o
if test "$PHP_PHPDBG" != "no"; then
AC_DEFINE(HAVE_PHPDBG, 1, [ ])
-
+
PHP_PHPDBG_CFLAGS=-I$abs_srcdir/sapi/phpdbg
- PHP_PHPDBG_FILES=phpdbg.c
+ PHP_PHPDBG_FILES="phpdbg.c phpdbg_prompt.c"
- PHP_ADD_MAKEFILE_FRAGMENT([$abs_srcdir/sapi/phpdbg/Makefile.frag])
+ PHP_ADD_MAKEFILE_FRAGMENT([$abs_srcdir/sapi/phpdbg/Makefile.frag])
PHP_SELECT_SAPI(phpdbg, program, $PHP_PHPDBG_FILES, $PHP_PHPDBG_CFLAGS, [$(SAPI_PHPDBG_PATH)])
-
+
BUILD_BINARY="sapi/phpdbg/phpdbg"
BUILD_PHPDBG="\$(LIBTOOL) --mode=link \
\$(CC) -export-dynamic \$(CFLAGS_CLEAN) \$(EXTRA_CFLAGS) \$(EXTRA_LDFLAGS_PROGRAM) \$(LDFLAGS) \$(PHP_RPATHS) \
};
/* }}} */
-static inline int zend_machine(int argc, char **argv TSRMLS_DC) /* {{{ */
-{
- php_printf("Hello World :)\n");
-} /* }}} */
-
int main(int argc, char **argv) /* {{{ */
{
sapi_module_struct *phpdbg = &phpdbg_sapi_module;
zend_activate_modules(TSRMLS_C);
} zend_end_try();
- /* START: ZEND INITIALIZED */
- {
- /* do the thing */
- zend_machine(argc, argv TSRMLS_CC);
- }
- /* END: ZEND BLOCK */
+ zend_try {
+ phpdbg_iteractive(argc, argv);
+ } zend_end_try();
if (PG(modules_activated)) {
zend_try {
--- /dev/null
+/*
+ +----------------------------------------------------------------------+
+ | PHP Version 5 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997-2013 The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 3.01 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_01.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: Felipe Pena <felipe@php.net> |
+ +----------------------------------------------------------------------+
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include "zend.h"
+#include "phpdbg_prompt.h"
+
+void do_quit(const char *params) /* {{{ */
+{
+ zend_bailout();
+} /* }}} */
+
+static const phpdbg_command prompt_commands[] = {
+ {PHPDBG_STRL("quit"), do_quit},
+ {NULL, 0, 0}
+};
+
+static void do_cmd(char *cmd_line) /* {{{ */
+{
+ const phpdbg_command *command = prompt_commands;
+ char *params = NULL;
+ const char *cmd = strtok_r(cmd_line, " ", ¶ms);
+ size_t cmd_len = cmd ? strlen(cmd) : 0;
+
+ while (command && command->name) {
+ if (command->name_len == cmd_len
+ && memcmp(cmd, command->name, cmd_len) == 0) {
+ /* Command find */
+ command->handler(params);
+ return;
+ }
+ ++command;
+ }
+
+ printf("command not found!\n");
+
+} /* }}} */
+
+void phpdbg_iteractive(int argc, char **argv) /* {{{ */
+{
+ char cmd[PHPDBG_MAX_CMD];
+
+ printf("phpdbg> ");
+
+ while (fgets(cmd, PHPDBG_MAX_CMD, stdin) != NULL) {
+ size_t cmd_len = strlen(cmd) - 1;
+
+ if (cmd[cmd_len] == '\n') {
+ cmd[cmd_len] = 0;
+ }
+ if (cmd_len) {
+ do_cmd(cmd);
+ }
+ printf("phpdbg> ");
+ }
+} /* }}} */
--- /dev/null
+/*
+ +----------------------------------------------------------------------+
+ | PHP Version 5 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997-2013 The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 3.01 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_01.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: Felipe Pena <felipe@php.net> |
+ +----------------------------------------------------------------------+
+*/
+
+#ifndef PHPDBG_PROMPT_H
+#define PHPDBG_PROMPT_H
+
+/**
+ * Maximum command length
+ */
+#define PHPDBG_MAX_CMD 500
+
+#define PHPDBG_STRL(s) s, sizeof(s)-1
+
+/**
+ * Command handler
+ */
+typedef void (*phpdbg_command_handler)(const char*);
+
+/**
+ * Command representation
+ */
+typedef struct _phpdbg_command {
+ const char *name; /* Command name */
+ size_t name_len; /* Command name length */
+ phpdbg_command_handler handler; /* Command handler */
+} phpdbg_command;
+
+#endif