commands as $c => $tmp) echo " $c\n"; exit(is_null($error) ? 0 : 1); } function on(string $command, callable $f) { $this->commands[$command] = $f; return $this; } function run(): void { global $argv, $argc; if (!is_cli()) cli::die('SAPI != cli'); if ($argc < 2) $this->usage(); if (empty($this->commands)) cli::die("no commands added"); $func = $argv[1]; if (!isset($this->commands[$func])) self::usage('unknown command "'.$func.'"'); $this->commands[$func](); } public static function input(string $prompt): string { echo $prompt; $input = substr(fgets(STDIN), 0, -1); return $input; } public static function silentInput(string $prompt = ''): string { echo $prompt; system('stty -echo'); $input = substr(fgets(STDIN), 0, -1); system('stty echo'); echo "\n"; return $input; } public static function die($error): void { self::error($error); exit(1); } public static function error($error): void { fwrite(STDERR, "error: {$error}\n"); } }