40 lines
732 B
PHP
40 lines
732 B
PHP
|
<?php declare(strict_types=1);
|
||
|
|
||
|
namespace Kilo;
|
||
|
|
||
|
use FFI;
|
||
|
|
||
|
// require_once 'constants.php';
|
||
|
|
||
|
function enableRawMode(): void
|
||
|
{
|
||
|
global $ffi;
|
||
|
global $original_termios;
|
||
|
|
||
|
|
||
|
// Populate the original terminal settings
|
||
|
$ffi->tcgetattr(STDIN_FILENO, FFI::addr($original_termios));
|
||
|
|
||
|
$termios = clone $original_termios;
|
||
|
|
||
|
$termios->c_lflag &= ~(_ECHO | ICANON);
|
||
|
|
||
|
// Turn on raw mode
|
||
|
$ffi->tcsetattr(STDIN_FILENO, TCSAFLUSH, FFI::addr($termios));
|
||
|
}
|
||
|
|
||
|
function disableRawMode(): void
|
||
|
{
|
||
|
global $ffi;
|
||
|
global $original_termios;
|
||
|
|
||
|
$ffi->tcsetattr(STDIN_FILENO, TCSAFLUSH, FFI::addr($original_termios));
|
||
|
}
|
||
|
|
||
|
function read_stdin() {
|
||
|
$handle = fopen('php://stdin', 'r');
|
||
|
$input = rtrim(fgets($handle, 128));
|
||
|
fclose($handle);
|
||
|
|
||
|
return $input;
|
||
|
}
|