This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
vbbs/app/Classes/Server/Ansi.php
2019-07-14 22:43:31 +10:00

77 lines
2.3 KiB
PHP

<?php
namespace App\Classes\Server;
use App\Classes\Server as AbstractServer;
use App\Models\Mode;
class Ansi extends AbstractServer {
public function __construct(Mode $o)
{
define('ESC', chr(27));
define('CON', ESC.'[?25h'); // Cursor On
define('COFF', ESC.'[?25l'); // Cursor Off
define('CSAVE', ESC.'[s'); // Save Cursor position
define('CRESTORE',ESC.'[u'); // Restore to saved position
define('HOME', ESC.'[0;0f');
define('LEFT', ESC.'[D'); // Move Cursor
define('RIGHT', ESC.'[C'); // Move Cursor
define('DOWN', ESC.'[B'); // Move Cursor
define('UP', ESC.'[A'); // Move Cursor
define('CR', chr(13));
define('LF', chr(10));
define('BS', chr(8));
define('CLS', ESC.'[2J');
define('HASH', '#'); // Enter
define('STAR', '*'); // Star Entry
define('SPACE', ' '); // Space (for compatibility with Videotex)
// NOTE: This consts are effective output
define('RED', ESC.'[0;31m');
define('GREEN', ESC.'[0;32m');
define('YELLOW', ESC.'[1;33m');
define('BLUE', ESC.'[0;34m');
define('MAGENTA', ESC.'[0;35m');
define('CYAN', ESC.'[0;36m');
define('WHITE', ESC.'[1;37m');
define('NEWBG', '');
// Compatibility attributes (to Videotex).
define('R_RED', RED.SPACE);
define('R_GREEN', GREEN.SPACE);
define('R_YELLOW', YELLOW.SPACE);
define('R_BLUE', BLUE.SPACE);
define('R_MAGENTA', MAGENTA.SPACE);
define('R_CYAN', CYAN.SPACE);
define('R_WHITE', WHITE.SPACE);
//define('FLASH',chr(8));
// Keyboard presses
// @todo Check where these are used vs the keys defined above?
define('KEY_DELETE', chr(8));
define('KEY_LEFT', chr(136));
define('KEY_RIGHT', chr(137));
define('KEY_DOWN', chr(138));
define('KEY_UP', chr(139));
parent::__construct($o);
}
function moveCursor($x,$y) {
printf(". Move cursor %s,%s\n",$x,$y);
return ESC.'['.$y.';'.$x.'f';
}
// Abstract function
public function sendBaseline($client,$text,$reposition=FALSE) {
$client->send(CSAVE.ESC.'[24;0f'.$text.
($this->blp > $this->fo->strlenv($text)
? str_repeat(' ',$this->blp-$this->fo->strlenv($text)).
($reposition ? ESC.'[24;0f'.str_repeat(RIGHT,$this->fo->strlenv($text)) : CRESTORE)
: ($reposition ? '' : CRESTORE))
);
$this->blp = $this->fo->strlenv($text);
$this->baseline = $text;
}
}