re satoru's post,
While it's not using cbreak, it sorta is an example. The only difference between raw and cbreak is how control keys are delt with.
Quoted from the ncurses_programming_howto:
Normally the terminal driver buffers the characters a user types until a new line or carriage return is encountered. But most programs require that the characters be available as soon as the user types them. The above two functions are used to disable line buffering. The difference between these two functions is in the way control characters like suspend (CTRL-Z), interrupt and quit (CTRL-C) are passed to the program. In the raw() mode these characters are directly passed to the program without generating a signal. In the cbreak() mode these control characters are interpreted as any other character by the terminal driver.
ncurses_cbreak
(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)
ncurses_cbreak — Desactivar el buffer de entrada
Descripción
bool ncurses_cbreak
( void
)
Advertencia
Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.
Deshabilita el buffer de línea y el procesamiento de caracters (la interrumpción y el control de flujo de caracteres no son afectados), haciendo que los caracterse tecleados por el usuario estén disponibles inmediatamente para el programa.
Valores devueltos
Devuelve TRUE o NCURSES_ERR si ocurrión un error.
php at kormoc dot com ¶
7 years ago
satoru ¶
7 years ago
<?php
/**************************************
[WARNING!]
Your terminal may be uncontrollable.
[HOW TO EXIT]
Push space key to terminate raw mode.
[TESTING]
Tested with FreeBSD5.3R + PHP5.0.5-CLI.
The option '--with-ncurses' required.
**************************************/
$tty = system("tty");
$handle = fopen($tty, "r");
if (!$handle)
exit("cannot open $tty.\\n");
print "Push space key to terminate.\\n";
ncurses_init();
ncurses_raw();
do {
$ch = fread($handle, 1);
printf('[%d] ', ord($ch));
} while ($ch != " " && ord($ch) != 3);
ncurses_noraw();
ncurses_end();
print "\\n";
fclose($handle);
?>
