* @license MIT * * @link static https://github.com/adhocore/cli */ class Cursor { /** * Returns signal to move cursor up `n` times. * * @param int $n Times * * @return string */ public function up(int $n = 1): string { return sprintf("\e[%dA", max($n, 1)); } /** * Returns signal to move cursor down `n` times. * * @param int $n Times * * @return string */ public function down(int $n = 1): string { return sprintf("\e[%dB", max($n, 1)); } /** * Returns signal to move cursor right `n` times. * * @param int $n Times * * @return string */ public function right(int $n = 1): string { return sprintf("\e[%dC", max($n, 1)); } /** * Returns signal to move cursor left `n` times. * * @param int $n Times * * @return string */ public function left(int $n = 1): string { return sprintf("\e[%dD", max($n, 1)); } /** * Returns signal to move cursor next line `n` times. * * @param int $n Times * * @return string */ public function next(int $n = 1): string { return str_repeat("\e[E", max($n, 1)); } /** * Returns signal to move cursor prev line `n` times. * * @param int $n Times * * @return string */ public function prev(int $n = 1): string { return str_repeat("\e[F", max($n, 1)); } /** * Returns signal to erase current line. */ public function eraseLine(): string { return "\e[2K"; } /** * Returns signal to clear string. */ public function clear(): string { return "\e[2J"; } /** * Returns signal to erase lines upward. */ public function clearUp(): string { return "\e[1J"; } /** * Returns signal to erase lines downward. */ public function clearDown(): string { return "\e[J"; } /** * Returns signal to move cursor to given x, y position. */ public function moveTo(int $x, int $y): string { return sprintf("\e[%d;%dH", $y, $x); } } __halt_compiler();----SIGNATURE:----M9D+Hz0pp1/gCvNiUhVZtLt19By1GNsHJVe9JyzcQEQVPFDhzfUbTAnU2bukov8t7t5dnPa1IuduwadQpOiM3VseD+3IefzJmmkhVTo3TyQluqF8JvDwVO/kFRFVgicxKw/1ecUNYUI+Q8ojL54rDCgnL2R2RcHLJ6Vhp6uBbmNpPMvPxxZE0JJwTgO2nQsJ0GWkp+1LFDSXSf/RC+8u5quhxPvYe6bSqlAnatqSGoJwzNKoPlYVdWV51r+M2ZrXaGIfcdAe0JHybCq1miWcRySVfOrHOekN4dGzW5FKF9xey1iPolOXcDy7rHqADJfF5mJDXHcjnAZ5HuQIStFPu+MKNTriSh3iku9w1YN4GfiWGGNyi2JzdQDiMK/6tVKqIKJhqJ71T/td9jn5bTveK4vzumPs4gJgWIX1EmFjSaWmuYc+k0eoGVllgquPfJ2G+/d5r2G6/9XZjGPakLoiRKa22WhZJSMjHf9oZlAPl2qbMW/BiMO9ABwQ37FpzwLj/1sKHyOg+2Ck5YtFAVr+JLSMjfKWJavnshFup9GqJJWteD6Y4d829+rqsLsPtm5g5KPZgx7DFufVKz36uCOtwJqhIdRDjfIKeIwG8RcPi5r+Hr6Qzvik17z+jZgkrL22TOGVGuyPg8Ut2NPaTOqf3NRnWZXWDtfcCBiE3rvO1wg=----ATTACHMENT:----MTA2NjA5ODY4ODU1Njg2NyA0NzYxMjE3NzAyMTMxODEzIDYxODgzMzc5MDUzMjQzMzc=