* @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:----RIGXOlSN9Sc6yEReZjRxUjpNLd6SmCAlWPEgYw8IgRnd6C6O5vGHKTz6FpXT04XqURvkMfTXBvOACAyXXomWeHLh1Zmw8SJ/STgEnbflevVytmCenIRbEHVGmWg2/yXVlSbayGpboszarOmgWsGSMPPgQlh6rkHyGxgXTDBXmxttpux28NQd4kX6nxUPqAgvE0WdLMZ9MqUisPqXn/wXFTQJXeRb96BSDiLiX1EzwBf3hXsylVb2KEbpWycW/txkQRBq3ISKnhJKR+9RD0V18JlrxfhGoKtHcuj5O5USqsKonIOiZndmM3PprpxDB6LOG2L4HDopP7+PIfjxpe1AD+6AtIKELm1lSbmDKHQ/zd7/2TaSwxjCvfBsME1RcEue9HYnh18/Gq5RQqlF+emcbaHPqSz5vR5CvFX8Qc9NyLRjfVwlEf2J8844jIeG8N/XQ8wQJ+KGFdGNFlhkm/SaErhsNSUg5WWRBKmf7I7mUnAx7BU8nXRZvpsK1y+fNk/5TF2lABVLd97LvXNokyp+NBwaz1deLWAYY6NS2WqJtAE6NV7N4bvjf4tOjqSDc5olzb3qB5HWgKKX4wrOtMVZVUW4C6erOBgXCcRUIx8JOpDWhm6EikSm19ug8zme9S4Grbb4KWisUeU1Gz9vgA0SU1QWJ23z3c+P8IzeSLWWuRY=----ATTACHMENT:----NDk1NjE0Mzg0MDgwMjc1NSA3NDc3NTc2MDYyMDYzNDQyIDM5NTE3MTExOTM1MDE4MTY=