Приколы анекдоты

Работа с ANSI консолью

ноября 20, 2008 · 11:03 дп @ Alex Snet  -  11 комментариев

Часто ли нужно сделать програму для консоли? Не так часто, да? А вот я последнее время только этим и занимаюсь… Поэтому сделал класс (на самом деле сделал еще очень давно).

Этот класс позволяет выполнять такие простые операции, как подсветка текста, подсветка бэкграунда буквы или текста,установка курсора на нужную позицию, выбор консоли для вывода (1~8) и прямой граб нажатых клавиш.


<?php 
class console 
{ 
    const TARGET_OUTPUT = "php://output"; 
    const TARGET_STDOUT = "php://stdout"; 
    const TARGET_STDERR = "php://stderr"; 
    const TARGET_STDIN  = "php://stdin"; 
 
    protected static $color = array( 
        'gray'          => 30, 
        'black'         => 30, 
        'red'           => 31, 
        'green'         => 32, 
        'yellow'        => 33, 
        'blue'          => 34, 
        'magenta'       => 35, 
        'cyan'          => 36, 
        'white'         => 37, 
        'default'       => 39 
    ); 
 
    protected static $bgcolor = array( 
        'gray'       => 40, 
        'black'      => 40, 
        'red'        => 41, 
        'green'      => 42, 
        'yellow'     => 43, 
        'blue'       => 44, 
        'magenta'    => 45, 
        'cyan'       => 46, 
        'white'      => 47, 
        'default'    => 49, 
    ); 
 
    protected static $style = array( 
        'default'           => '0', 
 
        'bold'              => 1, 
        'faint'             => 2, 
        'normal'            => 22, 
 
        'italic'            => 3, 
        'notitalic'         => 23, 
 
        'underlined'        => 4, 
        'doubleunderlined'  => 21, 
        'notunderlined'     => 24, 
 
        'blink'             => 5, 
        'blinkfast'         => 6, 
        'noblink'           => 25, 
 
        'negative'          => 7, 
        'positive'          => 27, 
    ); 
 
       private $text            =  ""; 
 
    // Outputing 
    public function draw($text='') 
    { 
        echo $this->text.$text; 
        $this->text = ''; 
        return $this; 
    } 
 
    // Input 
    public function readNumeric() 
    { 
        $stdin = fopen('php://stdin', 'r'); 
        $line = trim(fgets($stdin)); 
        fscanf($stdin, "%d\n", $number); 
          return $number; 
    } 
    public function readString() 
    { 
        $stdin = fopen('php://stdin', 'r'); 
        $line = trim(fgets($stdin)); 
          fscanf($stdin, "%s\n", $string); 
          return $string; 
    } 
 
    // Sound 
    public function beep()                            { echo "\007"; return $this; } 
    public function setSoundHerz($herz=100)            { echo "\033[10;{$herz}]"; return $this; } 
    public function setSoundLong($milliseconds=500)    { echo "'033[11;{$milliseconds}]"; return $this; } 
 
    // Cursor position 
    public function toPos( $row = 1, $column = 1 )    { echo "\033[{$row};{$column}H"; return $this; }
    public function cursorUp($lines=1)                { echo "\033[{$lines}A"; return $this; } 
    public function cursorDown($lines=1)            { echo "\033[{$lines}B"; return $this; } 
    public function cursorRight($columns=1)            { echo "\033[{$columns}C"; return $this; } 
    public function cursorLeft($columns=1)            { echo "\033[{$columns}D"; return $this; } 
 
    // Text colors 
    public function setStyle($style='default')        { $this->text .= "\033[".$this->style[$style]."m"; return $this; } 
    public function setColor($color='default')        { $this->text .= "\033[".$this->color[$style]; return $this; } 
    public function setBgColor($color='default')    { $this->text .= "\033[".$this->bgcolor[$style]; return $this; } 
 
    // Application 
    public function setAppName($name='')            { echo "\033]0;{$name}\007"; return $this; } 
    public function setTitle($name='')                { echo "\033]2;{$name}\007"; return $this; } 
    public function setIcon($name='')                { echo "\033]1;{$name}\007"; return $this; } 
 
    // Other 
    public function clear()                            { echo "\033c"; return $this; } 
    public function console($num=1)                    { echo "\033[12;{$num}]"; return $this; } 
} 
?>

Так же скачать это можно с phpclasses.org по этой ссылке: http://www.phpclasses.org/browse/package/4969.html
Спасибо за внимание.

Тэги: , , ,

А еще я писал про:
None Found

11 комментариев → “Работа с ANSI консолью”


  1. surger

    20 Ноя, 2008

    Даже ностальгия по терминалам пробила…
    Спасиба, камрад

    Ответить

  2. Alex Snet

    20 Ноя, 2008

    Всегда рад помочь! =)

    Ответить

  3. wtask

    16 Дек, 2008

    спасибо, посмотрим. периодически требуются консольные скриптики.

    Ответить

  4. Emilis

    02 Янв, 2009

    Может быть у вас ест и пример как использовать этот класс?

    Ответить

  5. Alex Snet

    02 Янв, 2009

    Emilis :
    Может быть у вас ест и пример как использовать этот класс?

    Да, разумеется. А что именно Вам непонятно?

    Ответить

  6. Pepe

    20 Мар, 2009

    Hi

    Do you have an example how to use this class?
    Thanks.
    Pepe

    Ответить

  7. Val

    29 Окт, 2009

    Добрый день; а вы не пробовали использовать этот класс под windows?

    Ответить

    • Alex Snet

      03 Ноя, 2009

      Нет, не пробовал. Честно говоря, я сомневаюсь что под виндовс пойдут консольные ASCII команды.

      Ответить

      • Val

        03 Ноя, 2009

        Правильно сомневаетесь — не работают консольные команды из пхп на винде.

        Так, очистить экран из пхп я смог только путём вызова соответствующего метода из dllины.

        Что само поразительное, в питоне под ту же самую винду работает subprocess.call(['cmd', '/c', 'cls'])

        А в пхп – нет.

        Ответить

        • Alex Snet

          04 Ноя, 2009

          Val, вы все таки несколько путаете. В данном коде нет вызова других приложений. Здесь мы просто печатаем спецсимволы, которые выполняют ту или иную операцию.
          Насчет вызова консольных приложений – у php есть много вариантов как это делается. К примеру: exec, shell_exec, system, etc…
          Поэтому вполне возможно что с одной командой работать не будет, а с другой вполне.

          Ответить

  8. Val

    04 Ноя, 2009

    Alex, я методично перебрал все эти функции в php и все способы “по-простому” вызвать cls: и command /c cls, и cmd /c cls, и напрямую печатать chr(27), “[H”, chr(27), “[2J” и вообще всё.

    Не работают. Т.е. вообще — они выдают на консоль правильные ASCII команды, и я могу их наблюдать: ←[2J, ♀

    Интернет осчастливил меня следующим: “Windows NT does not support ANSI.SYS escape sequences in Win32 Console applications”

    php.exe — очевидно win32 console app, поэтому не работает.

    Вопрос в том, почему в python.exe работает.

    Ответить

Оставить свой след.

1 2 3 4 5 6 7 8 9 10