<?php namespace App\Classes\BBS\Server; use App\Classes\BBS\Server as AbstractServer; use App\Classes\Sock\SocketClient; class Videotex extends AbstractServer { protected const LOGKEY = 'BVS'; /* CONSTS */ public const PORT = 516; protected function init(SocketClient $client) { define('ESC', chr(27)); define('CON', chr(17)); // Cursor On define('COFF', chr(20)); // Cursor Off define('HOME', chr(30)); define('LEFT', chr(8)); // Move Cursor define('RIGHT', chr(9)); // Move Cursor define('DOWN', chr(10)); // Move Cursor define('UP', chr(11)); // Move Cursor define('CR', chr(13)); define('LF', chr(10)); define('CLS', chr(12)); define('HASH', '_'); // Enter define('STAR', '*'); // Star Entry define('SPACE', ''); // Space // NOTE: This consts are effective output define('RESET', ''); define('RED', ESC.'A'); define('GREEN', ESC.'B'); define('YELLOW', ESC.'C'); define('BLUE', ESC.'D'); define('MAGENTA', ESC.'E'); define('CYAN', ESC.'F'); define('WHITE', ESC.'G'); define('NEWBG', ESC.']'); // Raw attributes - used when storing frames. define('R_RED', chr(1)); define('R_GREEN', chr(2)); define('R_YELLOW', chr(3)); define('R_BLUE', chr(4)); define('R_MAGENTA', chr(5)); define('R_CYAN', chr(6)); define('R_WHITE', chr(7)); define('FLASH', chr(8)); define('KEY_DELETE', chr(0x7f)); define('KEY_LEFT', chr(0x08)); define('KEY_RIGHT', chr(0x09)); define('KEY_DOWN', chr(0x0a)); define('KEY_UP', chr(0x0b)); parent::init($client); } public function moveCursor($x,$y): string { // Take the shortest path. if ($y < 12) { return HOME. (($x < 21) ? str_repeat(DOWN,$y-1).str_repeat(RIGHT,$x) : str_repeat(DOWN,$y).str_repeat(LEFT,40-$x)); } else { return HOME.str_repeat(UP,24-$y+1). (($x < 21) ? str_repeat(RIGHT,$x) : str_repeat(LEFT,40-$x)); } } public function sendBaseline(string $text,bool $reposition=FALSE) { $this->client->send(HOME.UP.$text. ($this->blp > $this->po->strlenv($text) ? str_repeat(' ',$this->blp-$this->po->strlenv($text)). ($reposition ? HOME.UP.str_repeat(RIGHT,$this->po->strlenv($text)) : '') : ''), static::TIMEOUT ); $this->blp = $this->po->strlenv($text); } }