mirror of
https://github.com/php/php-src.git
synced 2026-03-30 04:02:19 +02:00
- Added initial code for a simple prompt
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@@ -1,5 +1,5 @@
|
||||
.libs/
|
||||
phpdbg
|
||||
phpdbg.lo
|
||||
phpdbg.o
|
||||
*.lo
|
||||
*.o
|
||||
|
||||
|
||||
10
config.m4
10
config.m4
@@ -7,13 +7,13 @@ PHP_ARG_ENABLE(phpdbg, for phpdbg support,
|
||||
|
||||
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_ADD_MAKEFILE_FRAGMENT([$abs_srcdir/sapi/phpdbg/Makefile.frag])
|
||||
PHP_PHPDBG_CFLAGS=-I$abs_srcdir/sapi/phpdbg
|
||||
PHP_PHPDBG_FILES="phpdbg.c phpdbg_prompt.c"
|
||||
|
||||
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) \
|
||||
|
||||
14
phpdbg.c
14
phpdbg.c
@@ -83,11 +83,6 @@ static sapi_module_struct phpdbg_sapi_module = {
|
||||
};
|
||||
/* }}} */
|
||||
|
||||
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;
|
||||
@@ -124,12 +119,9 @@ int main(int argc, char **argv) /* {{{ */
|
||||
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 {
|
||||
|
||||
72
phpdbg_prompt.c
Normal file
72
phpdbg_prompt.c
Normal file
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
+----------------------------------------------------------------------+
|
||||
| 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> ");
|
||||
}
|
||||
} /* }}} */
|
||||
43
phpdbg_prompt.h
Normal file
43
phpdbg_prompt.h
Normal file
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
+----------------------------------------------------------------------+
|
||||
| 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
|
||||
Reference in New Issue
Block a user