BBS-Universal

 view release on metacpan or  search on metacpan

lib/BBS/Universal.pm  view on Meta::CPAN


 

# package BBS::Universal::ASCII;

sub ascii_initialize {
    my $self = shift;

    $self->{'debug'}->DEBUG(['Start ASCII Initialize']);
    $self->{'ascii_meta'} = {
        'RETURN'    => { 'out' => chr(13),           'unicode' => ' ', 'desc' => 'Carriage Return' },
        'LINEFEED'  => { 'out' => chr(10),           'unicode' => ' ', 'desc' => 'Linefeed' },
        'NEWLINE'   => { 'out' => chr(13) . chr(10), 'unicode' => ' ', 'desc' => 'Newline' },
        'BACKSPACE' => { 'out' => chr(8),            'unicode' => ' ', 'desc' => 'Backspace' },
        'TAB'       => { 'out' => chr(9),            'unicode' => ' ', 'desc' => 'Tab' },
        'DELETE'    => { 'out' => chr(127),          'unicode' => ' ', 'desc' => 'Delete' },
        'CLS'       => { 'out' => chr(12),           'unicode' => ' ', 'desc' => 'Clear Screen (Formfeed)' },
        'CLEAR'     => { 'out' => chr(12),           'unicode' => ' ', 'desc' => 'Clear Screen (Formfeed)' },
        'RING BELL' => { 'out' => chr(7),            'unicode' => ' ', 'desc' => 'Console Bell' },
    };
    $self->{'debug'}->DEBUG(['End ACSII Initialize']);
    return ($self);
} ## end sub ascii_initialize

sub ascii_output {
    my $self = shift;
    my $text = shift;

    $self->{'debug'}->DEBUG(['Start ASCII Output']);

lib/BBS/Universal.pm  view on Meta::CPAN

 

# package BBS::Universal::ATASCII;

sub atascii_initialize {
    my $self = shift;

    $self->{'debug'}->DEBUG(['Start ATASCII Initialize']);
    $self->{'atascii_meta'} = {
        # Control
        'ESC'                          => { 'out' => chr(27),  'unicode' => '␛', 'desc' => 'Escape', },
        'UP'                           => { 'out' => chr(28),  'unicode' => ' ', 'desc' => 'Move Cursor Up', },
        'DOWN'                         => { 'out' => chr(29),  'unicode' => ' ', 'desc' => 'Move Cursor Down', },
        'LEFT'                         => { 'out' => chr(30),  'unicode' => ' ', 'desc' => 'Move Cursor Left', },
        'RIGHT'                        => { 'out' => chr(31),  'unicode' => ' ', 'desc' => 'Move Cursor Right', },
        'CLEAR'                        => { 'out' => chr(125), 'unicode' => ' ', 'desc' => 'Clear Screen', },
        'BACKSPACE'                    => { 'out' => chr(126), 'unicode' => ' ', 'desc' => 'Backspace', },
        'TAB'                          => { 'out' => chr(127), 'unicode' => ' ', 'desc' => 'Tab', },
        'RETURN'                       => { 'out' => chr(155), 'unicode' => ' ', 'desc' => 'Carriage Return', },
        'DELETE LINE'                  => { 'out' => chr(156), 'unicode' => ' ', 'desc' => 'Delete Line', },
        'INSERT LINE'                  => { 'out' => chr(157), 'unicode' => ' ', 'desc' => 'Insert Line', },
        'CLEAR TAB STOP'               => { 'out' => chr(158), 'unicode' => ' ', 'desc' => 'Clear Tab Stop', },
        'SET TAB STOP'                 => { 'out' => chr(159), 'unicode' => ' ', 'desc' => 'Set Tab Stop', },
        'BUZZER'                       => { 'out' => chr(253), 'unicode' => ' ', 'desc' => 'Console Bell', },
        'RING BELL'                    => { 'out' => chr(253), 'unicode' => ' ', 'desc' => 'Console Bell', },
        'DELETE'                       => { 'out' => chr(254), 'unicode' => ' ', 'desc' => 'Delete', },
        'INSERT'                       => { 'out' => chr(255), 'unicode' => ' ', 'desc' => 'Insert', },

        # Normal

        'HEART'                        => { 'out' => chr(0),   'unicode' => '♥', 'desc' => 'Heart', },
        'VERTICAL BAR MIDDLE LEFT'     => { 'out' => chr(1),   'unicode' => '┣', 'desc' => 'Vertical Bar Middle Left', },
        'RIGHT VERTICAL BAR'           => { 'out' => chr(2),   'unicode' => '🮇', 'desc' => 'Right Vertical Bar', },
        'BOTTOM RIGHT CORNER'          => { 'out' => chr(3),   'unicode' => 'â”›', 'desc' => 'Bottom Right Corner', },
        'VERTICAL BAR MIDDLE RIGHT'    => { 'out' => chr(4),   'unicode' => '┫', 'desc' => 'Vertical Bar Middle Right', },
        'TOP RIGHT CORNER'             => { 'out' => chr(5),   'unicode' => '┓', 'desc' => 'Top Right Corner', },
        'LARGE FORWARD SLASH'          => { 'out' => chr(6),   'unicode' => '╱', 'desc' => 'Large Forward Slash', },
        'LARGE BACKSLASH'              => { 'out' => chr(7),   'unicode' => '╲', 'desc' => 'Large Backslash', },
        'TOP LEFT WEDGE'               => { 'out' => chr(8),   'unicode' => 'â—¢', 'desc' => 'Top Left Wedge', },
        'BOTTOM RIGHT BOX'             => { 'out' => chr(9),   'unicode' => 'â–—', 'desc' => 'Bottom Right Box', },
        'TOP RIGHT WEDGE'              => { 'out' => chr(10),  'unicode' => 'â—£', 'desc' => 'Top Right Wedge', },
        'TOP RIGHT BOX'                => { 'out' => chr(11),  'unicode' => '▝', 'desc' => 'Top Right Box', },
        'TOP LEFT BOX'                 => { 'out' => chr(12),  'unicode' => 'â–˜', 'desc' => 'Top Left Box', },
        'TOP HORIZONTAL BAR'           => { 'out' => chr(13),  'unicode' => '🮂', 'desc' => 'Top Horizontal Bar', },
        'BOTTOM HORIZONTAL BAR'        => { 'out' => chr(14),  'unicode' => 'â–‚', 'desc' => 'Bottom Horizontal Bar', },
        'BOTTOM LEFT BOX'              => { 'out' => chr(15),  'unicode' => 'â––', 'desc' => 'Bottom Left Box', },
        'CLUB'                         => { 'out' => chr(16),  'unicode' => '♣', 'desc' => 'Club', },
        'TOP LEFT CORNER'              => { 'out' => chr(17),  'unicode' => '┏', 'desc' => 'Top Left Corner', },
        'HORIZONTAL BAR'               => { 'out' => chr(18),  'unicode' => '━', 'desc' => 'Horizontal Bar', },
        'CROSS BAR'                    => { 'out' => chr(19),  'unicode' => 'â•‹', 'desc' => 'Cross Bar', },
        'CENTER DOT'                   => { 'out' => chr(20),  'unicode' => '⏺', 'desc' => 'Center Dot', },
        'BOTTOM BOX'                   => { 'out' => chr(21),  'unicode' => 'â–„', 'desc' => 'Bottom Box', },
        'LEFT VERTICAL BAR'            => { 'out' => chr(22),  'unicode' => 'â–Ž', 'desc' => 'Left Vertical Bar', },
        'HORIZONTAL BAR MIDDLE TOP'    => { 'out' => chr(23),  'unicode' => '┳', 'desc' => 'Horizontal Bar Middle Top', },
        'HORIZONTAL BAR MIDDLE BOTTOM' => { 'out' => chr(24),  'unicode' => 'â”»', 'desc' => 'Horizontal Bar Middle Bottom', },
        'LEFT VERTICAL BAR'            => { 'out' => chr(25),  'unicode' => '▌', 'desc' => 'Left Vertical Bar', },
        'BOTTOM LEFT CORNER'           => { 'out' => chr(26),  'unicode' => 'â”—', 'desc' => 'Botom Left Corner', },
        'UP ARROW'                     => { 'out' => chr(28),  'unicode' => '🡹', 'desc' => 'Up Arrow', },
        'DOWN ARROW'                   => { 'out' => chr(29),  'unicode' => '🡻', 'desc' => 'Down Arrow', },
        'LEFT ARROW'                   => { 'out' => chr(30),  'unicode' => '🡸', 'desc' => 'Left Arrow', },
        'RIGHT ARROW'                  => { 'out' => chr(31),  'unicode' => '🡺', 'desc' => 'Right Arrow', },
        'DIAMOND'                      => { 'out' => chr(96),  'unicode' => '♦', 'desc' => 'Diamond', },
        'SPADE'                        => { 'out' => chr(123), 'unicode' => 'â™ ', 'desc' => 'Spade', },
        'MIDDLE VERTICAL BAR'          => { 'out' => chr(124), 'unicode' => '|', 'desc' => 'Middle Vertical Bar', },
        'BACK ARROW'                   => { 'out' => chr(125), 'unicode' => '🢰', 'desc' => 'Back Arrow', },
        'LEFT TRIANGLE'                => { 'out' => chr(126), 'unicode' => 'â—€', 'desc' => 'Left Triangle', },
        'RIGHT TRIANGLE'               => { 'out' => chr(127), 'unicode' => 'â–¶', 'desc' => 'Right Triangle', },
    };

    my $inv = "\e[7m";
    my $ni  = "\e[27m";

	my @list = keys %{ $self->{'atascii_meta'} };
    foreach my $name (@list) {
		next if ($name =~ /^(ESC|UP|DOWN|LEFT|RIGHT|CLEAR|BACKSPACE|TAB|RETURN|NEWLINE|DELETE LINE|INSERT LINE|CLEAR TAB STOP|BUZZER|RING BELL|DELETE|INSERT)$/);
		$self->{'atascii_meta'}->{"REVERSED $name"}->{'unicode'} = $inv . $self->{'atascii_meta'}->{$name}->{'unicode'} . $ni;
        $self->{'atascii_meta'}->{"REVERSED $name"}->{'out'}     = chr(128 + ord($self->{'atascii_meta'}->{$name}->{'out'}));
        $self->{'atascii_meta'}->{"REVERSED $name"}->{'desc'}    = 'Reversed ' . $self->{'atascii_meta'}->{$name}->{'desc'};
    }

    $self->{'atascii_table'} = [
        # Normal
        '♥', '┣', '🮇', '┛', '┫', '┓', '╱', '╲', '◢', '▗', '◣', '🬁', '🬀', '▔', '▂', '▖', '♣', '┏', '━', '╋', '⏺', '▄', '▎', '┳', '┻', '▌', '┗', '␛', '🡹', '🡻', '🡸', '🡺',
        ' ', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?',
        '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', "\\", ']', '^', '_',
        '♦', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '♠', '|', '🢰', '◀', '▶',

lib/BBS/Universal.pm  view on Meta::CPAN


sub petscii_initialize {
    my $self = shift;

    $self->{'debug'}->DEBUG(['Start PETSCII Initialize']);

    my $inv = "\e[7m";
    my $ni  = "\e[27m";

    $self->{'petscii_meta'} = {
#       'NULL 0'                                  => { 'out' => chr(0),   'unicode' => ' ', 'desc' => 'NOP 0', },
#       'NULL 1'                                  => { 'out' => chr(1),   'unicode' => ' ', 'desc' => 'NOP 1', },
#       'NULL 2'                                  => { 'out' => chr(2),   'unicode' => ' ', 'desc' => 'NOP 2', },
        'STOP'                                    => { 'out' => chr(3),   'unicode' => ' ', 'desc' => 'PETSCII STOP', },
#       'NULL 4'                                  => { 'out' => chr(4),   'unicode' => ' ', 'desc' => 'NOP 4', },
        'WHITE'                                   => { 'out' => chr(5),   'unicode' => ' ', 'desc' => 'White text', },
        'RESET'                                   => { 'out' => chr(5),   'unicode' => ' ', 'desc' => 'Reset back to white text', },
#       'NULL 6'                                  => { 'out' => chr(6),   'unicode' => ' ', 'desc' => 'NOP 6', },
#       'NULL 7'                                  => { 'out' => chr(7),   'unicode' => ' ', 'desc' => 'NOP 7', },
        'DISABLE SHIFT'                           => { 'out' => chr(8),   'unicode' => ' ', 'desc' => 'Disable shift', },
        'ENABLE SHIFT'                            => { 'out' => chr(9),   'unicode' => ' ', 'desc' => 'Enable shift', },
#       'NULL 10'                                 => { 'out' => chr(10),  'unicode' => ' ', 'desc' => 'NOP 10', },
#       'NULL 11'                                 => { 'out' => chr(11),  'unicode' => ' ', 'desc' => 'NOP 11', },
#       'NULL 12'                                 => { 'out' => chr(12),  'unicode' => ' ', 'desc' => 'NOP 12', },
        'RETURN'                                  => { 'out' => chr(13),  'unicode' => ' ', 'desc' => 'Carriage Return', },
        'LOWERCASE'                               => { 'out' => chr(14),  'unicode' => ' ', 'desc' => 'Lowercase', },
#       'NULL 15'                                 => { 'out' => chr(15),  'unicode' => ' ', 'desc' => 'NOP 15', },
#       'NULL 16'                                 => { 'out' => chr(16),  'unicode' => ' ', 'desc' => 'NOP 16', },
        'DOWN'                                    => { 'out' => chr(17),  'unicode' => ' ', 'desc' => 'Cursor down', },
        'REVERSE ON'                              => { 'out' => chr(18),  'unicode' => ' ', 'desc' => 'Reverse on', },
        'HOME'                                    => { 'out' => chr(19),  'unicode' => ' ', 'desc' => 'Home', },
        'DELETE'                                  => { 'out' => chr(20),  'unicode' => ' ', 'desc' => 'Delete', },
#       'NULL 21'                                 => { 'out' => chr(21),  'unicode' => ' ', 'desc' => 'NOP 21', },
#       'NULL 22'                                 => { 'out' => chr(22),  'unicode' => ' ', 'desc' => 'NOP 22', },
#       'NULL 23'                                 => { 'out' => chr(23),  'unicode' => ' ', 'desc' => 'NOP 23', },
#       'NULL 24'                                 => { 'out' => chr(24),  'unicode' => ' ', 'desc' => 'NOP 24', },
#       'NULL 25'                                 => { 'out' => chr(25),  'unicode' => ' ', 'desc' => 'NOP 25', },
#       'NULL 26'                                 => { 'out' => chr(26),  'unicode' => ' ', 'desc' => 'NOP 26', },
#       'NULL 27'                                 => { 'out' => chr(27),  'unicode' => ' ', 'desc' => 'NOP 27', },
        'RED'                                     => { 'out' => chr(28),  'unicode' => ' ', 'desc' => 'Red', },
        'RIGHT'                                   => { 'out' => chr(29),  'unicode' => ' ', 'desc' => 'Cursor right', },
        'GREEN'                                   => { 'out' => chr(30),  'unicode' => ' ', 'desc' => 'Green', },
        'BLUE'                                    => { 'out' => chr(31),  'unicode' => ' ', 'desc' => 'Blue', },
#       'SPACE'                                   => { 'out' => ' ',      'unicode' => ' ', 'desc' => 'Space', },
#       'EXCLAMATION MARK'                        => { 'out' => '!',      'unicode' => '!', 'desc' => 'Exclamation mark', },
#       'DOUBLE QUOTE'                            => { 'out' => '"',      'unicode' => '"', 'desc' => 'Double quotation mark', },
#       'HASH'                                    => { 'out' => '#',      'unicode' => '#', 'desc' => 'Hash/pound', },
#       'DOLLAR'                                  => { 'out' => '$',      'unicode' => '$', 'desc' => 'Dollar sign', },
#       'PERCENT'                                 => { 'out' => '%',      'unicode' => '%', 'desc' => 'Percent sign', },
#       'AMPERSAND'                               => { 'out' => '&',      'unicode' => '&', 'desc' => 'Ampersand', },
#       'SINGLE QUOTE'                            => { 'out' => "'",      'unicode' => "'", 'desc' => 'Single quotation mark', },
#       'PARENTHESIS LEFT'                        => { 'out' => '(',      'unicode' => '(', 'desc' => 'Left parenthesis', },
#       'PARENTHESIS RIGHT'                       => { 'out' => ')',      'unicode' => ')', 'desc' => 'Right parenthesis', },
#       'ASTERISK'                                => { 'out' => '*',      'unicode' => '*', 'desc' => 'Asterisk', },
#       'PLUS'                                    => { 'out' => '+',      'unicode' => '+', 'desc' => 'Plus sign', },
#       'COMMA'                                   => { 'out' => ',',      'unicode' => ',', 'desc' => 'Comma', },
#       'HYPHEN'                                  => { 'out' => '-',      'unicode' => '-', 'desc' => 'Hyphen', },
#       'PERIOD'                                  => { 'out' => ',',      'unicode' => '.', 'desc' => 'Period', },
#       'FORWARD SLASH'                           => { 'out' => '/',      'unicode' => '/', 'desc' => 'Forward slash', },
#       'ZERO'                                    => { 'out' => '0',      'unicode' => '0', 'desc' => 'Zero', },
#       'ONE'                                     => { 'out' => '1',      'unicode' => '1', 'desc' => 'One', },
#       'TWO'                                     => { 'out' => '2',      'unicode' => '2', 'desc' => 'Two', },
#       'THREE'                                   => { 'out' => '3',      'unicode' => '3', 'desc' => 'Three', },
#       'FOUR'                                    => { 'out' => '4',      'unicode' => '4', 'desc' => 'Four', },
#       'FIVE'                                    => { 'out' => '5',      'unicode' => '5', 'desc' => 'Five', },
#       'SIX'                                     => { 'out' => '6',      'unicode' => '6', 'desc' => 'Six', },
#       'SEVEN'                                   => { 'out' => '7',      'unicode' => '7', 'desc' => 'Seven', },
#       'EIGHT'                                   => { 'out' => '8',      'unicode' => '8', 'desc' => 'Eight', },
#       'NINE'                                    => { 'out' => '9',      'unicode' => '9', 'desc' => 'Nine', },
#       'COLON'                                   => { 'out' => ':',      'unicode' => ':', 'desc' => 'Colon', },
#       'SEMICOLON'                               => { 'out' => ';',      'unicode' => ';', 'desc' => 'Semicolon', },
#       'LESS THAN'                               => { 'out' => '<',      'unicode' => '<', 'desc' => 'Less than', },
#       'EQUAL'                                   => { 'out' => '=',      'unicode' => '=', 'desc' => 'Equal sign', },
#       'GREATER THAN'                            => { 'out' => '>',      'unicode' => '>', 'desc' => 'Greater than', },
#       'QUESTION MARK'                           => { 'out' => '?',      'unicode' => '?', 'desc' => 'Question mark', },
#       'AT'                                      => { 'out' => '@',      'unicode' => '@', 'desc' => 'At symbol', },
#       'CHAR A'                                  => { 'out' => 'A',      'unicode' => 'A', 'desc' => 'A', },
#       'CHAR B'                                  => { 'out' => 'B',      'unicode' => 'B', 'desc' => 'B', },
#       'CHAR C'                                  => { 'out' => 'C',      'unicode' => 'C', 'desc' => 'C', },
#       'CHAR D'                                  => { 'out' => 'D',      'unicode' => 'D', 'desc' => 'D', },
#       'CHAR E'                                  => { 'out' => 'E',      'unicode' => 'E', 'desc' => 'E', },
#       'CHAR F'                                  => { 'out' => 'F',      'unicode' => 'F', 'desc' => 'F', },
#       'CHAR G'                                  => { 'out' => 'G',      'unicode' => 'G', 'desc' => 'G', },
#       'CHAR H'                                  => { 'out' => 'H',      'unicode' => 'H', 'desc' => 'H', },
#       'CHAR I'                                  => { 'out' => 'I',      'unicode' => 'I', 'desc' => 'I', },
#       'CHAR J'                                  => { 'out' => 'J',      'unicode' => 'J', 'desc' => 'J', },
#       'CHAR K'                                  => { 'out' => 'K',      'unicode' => 'K', 'desc' => 'K', },
#       'CHAR L'                                  => { 'out' => 'L',      'unicode' => 'L', 'desc' => 'L', },
#       'CHAR M'                                  => { 'out' => 'M',      'unicode' => 'M', 'desc' => 'M', },
#       'CHAR N'                                  => { 'out' => 'N',      'unicode' => 'N', 'desc' => 'N', },
#       'CHAR O'                                  => { 'out' => 'O',      'unicode' => 'O', 'desc' => 'O', },
#       'CHAR P'                                  => { 'out' => 'P',      'unicode' => 'P', 'desc' => 'P', },
#       'CHAR Q'                                  => { 'out' => 'Q',      'unicode' => 'Q', 'desc' => 'Q', },
#       'CHAR R'                                  => { 'out' => 'R',      'unicode' => 'R', 'desc' => 'R', },
#       'CHAR S'                                  => { 'out' => 'S',      'unicode' => 'S', 'desc' => 'S', },
#       'CHAR T'                                  => { 'out' => 'T',      'unicode' => 'T', 'desc' => 'T', },
#       'CHAR U'                                  => { 'out' => 'U',      'unicode' => 'U', 'desc' => 'U', },
#       'CHAR V'                                  => { 'out' => 'V',      'unicode' => 'V', 'desc' => 'V', },
#       'CHAR W'                                  => { 'out' => 'W',      'unicode' => 'W', 'desc' => 'W', },
#       'CHAR X'                                  => { 'out' => 'X',      'unicode' => 'X', 'desc' => 'X', },
#       'CHAR Y'                                  => { 'out' => 'Y',      'unicode' => 'Y', 'desc' => 'Y', },
#       'CHAR Z'                                  => { 'out' => 'Z',      'unicode' => 'Z', 'desc' => 'Z', },
#       'SQUARE BRACKET LEFT'                     => { 'out' => chr(91),  'unicode' => '[', 'desc' => 'Square left bracket', },
        'BRITISH POUND'                           => { 'out' => chr(92),  'unicode' => '£', 'desc' => 'British Pound', },
#       'SQUARE BRACKET RIGHT'                    => { 'out' => chr(93),  'unicode' => ']', 'desc' => 'Square right bracket', },
        'UP ARROW'                                => { 'out' => chr(94),  'unicode' => '↑', 'desc' => 'Up Arrow', },
        'LEFT ARROW'                              => { 'out' => chr(95),  'unicode' => '←', 'desc' => 'Left Arrow', },
        'HORIZONTAL BAR'                          => { 'out' => chr(96),  'unicode' => '─', 'desc' => 'Horizontal Bar', },
        'SPADE'                                   => { 'out' => chr(97),  'unicode' => 'â™ ', 'desc' => 'Spade', },
        'VERTICAL BAR CENTER'                     => { 'out' => chr(98),  'unicode' => '│', 'desc' => 'Giant Vertical Bar', },
        'HORIZONTAL BAR DUPLICATE'                => { 'out' => chr(99),  'unicode' => '─', 'desc' => 'Horizontal Bar', },
        'HORIZONTAL BAR SMALL UPPER BIAS'         => { 'out' => chr(100), 'unicode' => '🭸', 'desc' => 'Horizontal bar with a slight upper bias', },
        'HORIZONTAL BAR LARGE UPPER BIAS'         => { 'out' => chr(101), 'unicode' => '🭶', 'desc' => 'Horizontal bar with a strong upper bias', },
        'HORIZONTAL BAR SMALL LOWER BIAS'         => { 'out' => chr(102), 'unicode' => '🭺', 'desc' => 'Horizontal bar with a slight lower bias', },
        'VERTICAL BAR SMALL LEFT BIAS'            => { 'out' => chr(103), 'unicode' => ' ', 'desc' => 'Vertical bar with a slight left bias', },
        'VERTICAL BAR SMALL RIGHT BIAS'           => { 'out' => chr(104), 'unicode' => ' ', 'desc' => 'Vertical bar with a slight right bias', },
        'TOP RIGHT ROUNDED CORNER'                => { 'out' => chr(105), 'unicode' => 'â•®', 'desc' => 'Top Right Rounded Corner', },
        'BOTTOM LEFT ROUNDED CORNER'              => { 'out' => chr(106), 'unicode' => 'â•°', 'desc' => 'Bottom Left Rounded Corner', },
        'BOTTOM RIGHT ROUNDED CORNER'             => { 'out' => chr(107), 'unicode' => '╯', 'desc' => 'Bottom Right Rounded Corner', },
        'BOTTOM LEFT RIGHT ANGLE'                 => { 'out' => chr(108), 'unicode' => '⎿', 'desc' => 'Bottom left right angle', },
        'GIANT BACKSLASH'                         => { 'out' => chr(109), 'unicode' => '╲', 'desc' => 'Giant Backslash', },
        'GIANT FORWARD SLASH'                     => { 'out' => chr(110), 'unicode' => '╱', 'desc' => 'Giant Forward Slash', },
        'TOP LEFT RIGHT ANGLE'                    => { 'out' => chr(111), 'unicode' => '⎾', 'desc' => 'Top left right angle', },
        'TOP RIGHT RIGHT ANGLE'                   => { 'out' => chr(112), 'unicode' => ' ', 'desc' => 'Top right right angle', },
        'CENTER DOT'                              => { 'out' => chr(113), 'unicode' => '•', 'desc' => 'CENTER DOT', },
        'HORIZONTAL BAR LARGE LOWER BIAS'         => { 'out' => chr(114), 'unicode' => '🭻', 'desc' => 'Horizontal bar with a strong lower bias', },
        'HEART'                                   => { 'out' => chr(115), 'unicode' => '♥', 'desc' => 'Heart', },
        'VERTICAL BAR LARGE LEFT BIAS'            => { 'out' => chr(116), 'unicode' => ' ', 'desc' => 'Vertical bar with a strong left bias', },
        'TOP LEFT ROUNDED CORNER'                 => { 'out' => chr(117), 'unicode' => 'â•­', 'desc' => 'Top Left Rounded Corner', },
        'GIANT X'                                 => { 'out' => chr(118), 'unicode' => '╳', 'desc' => 'Giant X', },
        'THIN CIRCLE'                             => { 'out' => chr(119), 'unicode' => 'â—‹', 'desc' => 'Thin Circle', },
        'CLUB'                                    => { 'out' => chr(120), 'unicode' => '♣', 'desc' => 'Club', },
        'VERTICAL BAR LARGE RIGHT BIAS'           => { 'out' => chr(121), 'unicode' => ' ', 'desc' => 'Vertical bar with a strong right bias', },
        'DIAMOND'                                 => { 'out' => chr(122), 'unicode' => '♦', 'desc' => 'Diamond', },
        'CROSS BAR'                               => { 'out' => chr(123), 'unicode' => '┼', 'desc' => 'Cross Bar', },
        'SHADE LEFT'                              => { 'out' => chr(124), 'unicode' => '🮌', 'desc' => 'Shade left', },
        'VERTICAL BAR'                            => { 'out' => chr(125), 'unicode' => '┃', 'desc' => 'Vertical bar', },
        'PI'                                      => { 'out' => chr(126), 'unicode' => 'Ï€', 'desc' => 'Pi symbol', },
        'BOTTOM LEFT WEDGE'                       => { 'out' => chr(127), 'unicode' => 'â—¥', 'desc' => 'Bottom Left Wedge', },
#       'NULL 128'                                => { 'out' => chr(128), 'unicode' => ' ', 'desc' => 'NOP 128', },
        'ORANGE'                                  => { 'out' => chr(129), 'unicode' => ' ', 'desc' => 'Orange' },
#       'NULL 130'                                => { 'out' => chr(130), 'unicode' => ' ', 'desc' => 'NOP 130', },
        'RUN'                                     => { 'out' => chr(131), 'unicode' => ' ', 'desc' => 'Run key', },
#       'NULL 132'                                => { 'out' => chr(132), 'unicode' => ' ', 'desc' => 'NOP 132', },
#       'F1'                                      => { 'out' => chr(133), 'unicode' => ' ', 'desc' => 'F1', },
#       'F3'                                      => { 'out' => chr(134), 'unicode' => ' ', 'desc' => 'F3', },
#       'F5'                                      => { 'out' => chr(135), 'unicode' => ' ', 'desc' => 'F5', },
#       'F7'                                      => { 'out' => chr(136), 'unicode' => ' ', 'desc' => 'F7', },
#       'F2'                                      => { 'out' => chr(137), 'unicode' => ' ', 'desc' => 'F2', },
#       'F4'                                      => { 'out' => chr(138), 'unicode' => ' ', 'desc' => 'F4', },
#       'F6'                                      => { 'out' => chr(139), 'unicode' => ' ', 'desc' => 'F6', },
#       'F8'                                      => { 'out' => chr(140), 'unicode' => ' ', 'desc' => 'F8', },
        'SHIFT RETURN'                            => { 'out' => chr(141), 'unicode' => ' ', 'desc' => 'Shift-return', },
        'UPPERCASE'                               => { 'out' => chr(142), 'unicode' => ' ', 'desc' => 'Uppercase', },
#       'NULL 143'                                => { 'out' => chr(143), 'unicode' => ' ', 'desc' => 'NOP 143', },
        'BLACK'                                   => { 'out' => chr(144), 'unicode' => ' ', 'desc' => 'Black', },
        'UP'                                      => { 'out' => chr(145), 'unicode' => ' ', 'desc' => 'Cursor up', },
        'REVERSE OFF'                             => { 'out' => chr(146), 'unicode' => ' ', 'desc' => 'Reverse off', },
        'CLEAR'                                   => { 'out' => chr(147), 'unicode' => ' ', 'desc' => 'Clear', },
        'INSERT'                                  => { 'out' => chr(148), 'unicode' => ' ', 'desc' => 'Insert', },
        'BROWN'                                   => { 'out' => chr(149), 'unicode' => ' ', 'desc' => 'Brown', },
        'LIGHT RED'                               => { 'out' => chr(150), 'unicode' => ' ', 'desc' => 'Light/bright red', },
        'DARK GRAY'                               => { 'out' => chr(151), 'unicode' => ' ', 'desc' => 'Dark gray', },
        'MEDIUM GRAY'                             => { 'out' => chr(152), 'unicode' => ' ', 'desc' => 'Medium gray', },
        'LIGHT GREEN'                             => { 'out' => chr(153), 'unicode' => ' ', 'desc' => 'Light/bright green', },
        'LIGHT BLUE'                              => { 'out' => chr(154), 'unicode' => ' ', 'desc' => 'Light/bright blue', },
        'LIGHT GRAY'                              => { 'out' => chr(155), 'unicode' => ' ', 'desc' => 'Light gray', },
        'PURPLE'                                  => { 'out' => chr(156), 'unicode' => ' ', 'desc' => 'Purple', },
        'LEFT'                                    => { 'out' => chr(157), 'unicode' => ' ', 'desc' => 'Cursor left', },
        'YELLOW'                                  => { 'out' => chr(158), 'unicode' => ' ', 'desc' => 'Yellow', },
        'CYAN'                                    => { 'out' => chr(159), 'unicode' => ' ', 'desc' => 'Cyan', },
        'REVERSE SPACE'                           => { 'out' => chr(160), 'unicode' => "$inv $ni", 'desc' => 'Dithered Box Full', },
        'REVERSE LEFT HALF'                       => { 'out' => chr(161), 'unicode' => $inv . '▌' . $ni, 'desc' => 'Reversed Left Half', },
        'REVERSE BOTTOM BOX'                      => { 'out' => chr(162), 'unicode' => $inv . 'â–„' . $ni, 'desc' => 'Reversed Bottom Box', },
        'REVERSE TOP HORIZONTAL BAR'              => { 'out' => chr(163), 'unicode' => $inv . 'â–”' . $ni, 'desc' => 'Reversed Top Horizontal Bar', },
        'REVERSE BOTTOM HORIZONTAL BAR'           => { 'out' => chr(164), 'unicode' => $inv . '▁' . $ni, 'desc' => 'Reversed Bottom Horizontal Bar', },
        'REVERSE LEFT VERTICAL BAR'               => { 'out' => chr(165), 'unicode' => $inv . 'â–Ž' . $ni, 'desc' => 'Reversed Left Vertical Bar', },
        'REVERSE DITHERED BOX'                    => { 'out' => chr(166), 'unicode' => $inv . 'â–’' . $ni, 'desc' => 'Reversed Dithered Box', },
        'REVERSE RIGHT VERTICAL BAR'              => { 'out' => chr(167), 'unicode' => $inv . '🮈' . $ni, 'desc' => 'Reversed Right Vertical Bar', },
        'REVERSE DITHERED BOTTOM'                 => { 'out' => chr(168), 'unicode' => $inv . '🮏' . $ni, 'desc' => 'Reversed Dithered Left', },
        'REVERSE BOTTOM RIGHT WEDGE'              => { 'out' => chr(169), 'unicode' => $inv . 'â—¤' . $ni, 'desc' => 'Reversed Bottom Right Wedge', },
        'REVERSE VERTICAL BAR RIGHT'              => { 'out' => chr(170), 'unicode' => $inv . '🮈' . $ni, 'desc' => 'Reversed Vertical bar flushed right', },
        'REVERSE VERTICAL BAR MIDDLE LEFT'        => { 'out' => chr(171), 'unicode' => $inv . '├' . $ni, 'desc' => 'Reversed Vertical Bar Middle Left', },
        'REVERSE BOTTOM RIGHT BOX'                => { 'out' => chr(172), 'unicode' => $inv . 'â–—' . $ni, 'desc' => 'Reversed Bottom Right Box', },
        'REVERSE BOTTOM LEFT CORNER'              => { 'out' => chr(173), 'unicode' => $inv . 'â””' . $ni, 'desc' => 'Reversed Bottom Left Corner', },
        'REVERSE TOP RIGHT CORNER'                => { 'out' => chr(174), 'unicode' => $inv . '┐' . $ni, 'desc' => 'Reversed Top Right Corner', },
        'REVERSE HORIZONTAL BAR BOTTOM'           => { 'out' => chr(175), 'unicode' => $inv . 'â–‚' . $ni, 'desc' => 'Reversed Horizontal Bar Bottom', },
        'REVERSE TOP LEFT CORNER'                 => { 'out' => chr(176), 'unicode' => $inv . '┌' . $ni, 'desc' => 'Reversed Top Left Corner', },
        'REVERSE HORIZONTAL BAR MIDDLE BOTTOM'    => { 'out' => chr(177), 'unicode' => $inv . 'â”´' . $ni, 'desc' => 'Reversed Horizontal Bar Middle Bottom', },
        'REVERSE HORIZONTAL BAR MIDDLE TOP'       => { 'out' => chr(178), 'unicode' => $inv . '┬' . $ni, 'desc' => 'Reversed Horizontal Bar Middle Top', },
        'REVERSE VERTICAL BAR MIDDLE RIGHT'       => { 'out' => chr(179), 'unicode' => $inv . '┤' . $ni, 'desc' => 'Reversed Vertical Bar Middle Right', },
        'REVERSE VERTICAL BOX LEFT'               => { 'out' => chr(180), 'unicode' => $inv . '▍' . $ni, 'desc' => 'Reversed Vertical Box Left', },
        'REVERSE LEFT HALF BOX'                   => { 'out' => chr(181), 'unicode' => $inv . '▌' . $ni, 'desc' => 'Reversed Left Half Box', },
        'REVERSE RIGHT HALF BOX'                  => { 'out' => chr(182), 'unicode' => $inv . '🮈' . $ni, 'desc' => 'Reversed Right half box', },
        'REVERSE HORIZONTAL BAR TOP'              => { 'out' => chr(183), 'unicode' => $inv . '🮂' . $ni, 'desc' => 'Reversed Horizontal bar top', },
        'REVERSE HORIZONTAL BAR THICK TOP'        => { 'out' => chr(184), 'unicode' => $inv . '🮃' . $ni, 'desc' => 'Reversed Horizontal bar thick top', },
        'REVERSE HORIZONTAL BAR THICK BOTTOM'     => { 'out' => chr(185), 'unicode' => $inv . 'â–ƒ' . $ni, 'desc' => 'Reversed Horizontal bar thick bottom', },
        'REVERSE BOTTOM RIGHT RIGHT ANGLE'        => { 'out' => chr(186), 'unicode' => $inv . '🭿' . $ni, 'desc' => 'Reversed Bottom right right angle', },
        'REVERSE BOTTOM LEFT BOX'                 => { 'out' => chr(187), 'unicode' => $inv . 'â––' . $ni, 'desc' => 'Reversed Bottom Left Box', },
        'REVERSE TOP RIGHT BOX'                   => { 'out' => chr(188), 'unicode' => $inv . '▝' . $ni, 'desc' => 'Reversed Top Right Box', },
        'REVERSE BOTTOM RIGHT CORNER'             => { 'out' => chr(189), 'unicode' => $inv . '┘' . $ni, 'desc' => 'Reversed Bottom Right Corner', },
        'REVERSE TOP LEFT BOX'                    => { 'out' => chr(190), 'unicode' => $inv . 'â–˜' . $ni, 'desc' => 'Reversed Top Left Box', },
        'REVERSE TOP LEFT BOTTOM RIGHT BOX'       => { 'out' => chr(191), 'unicode' => $inv . 'â–š' . $ni, 'desc' => 'Reversed Top Left Bottom Right Box', },
        'REVERSE HORIZONTAL BAR'                  => { 'out' => chr(192), 'unicode' => $inv . '🭹' . $ni, 'desc' => 'Reversed Horizontal bar', },
#       'REVERSE SPADE DUPLICATE'                 => { 'out' => chr(193), 'unicode' => $inv . 'â™ ' . $ni, 'desc' => 'Reversed Spade duplicate', },
#       'REVERSE VERTICAL BAR CENTER DUPLICATE'   => { 'out' => chr(194), 'unicode' => $inv . '│' . $ni, 'desc' => 'Reversed Giant Vertical Bar duplicate', },
        'REVERSE HORIZONTAL BAR DUPLICATE'        => { 'out' => chr(195), 'unicode' => $inv . '─' . $ni, 'desc' => 'Reversed Horizontal Bar duplicate', },
        'REVERSE HORIZONTAL BAR SMALL UPPER BIAS' => { 'out' => chr(196), 'unicode' => $inv . '🭸' . $ni, 'desc' => 'Reversed Horizontal bar with a slight upper bias', },
        'REVERSE HORIZONTAL BAR LARGE UPPER BIAS' => { 'out' => chr(197), 'unicode' => $inv . '🭶' . $ni, 'desc' => 'Reversed Horizontal bar with a strong upper bias', },
        'REVERSE HORIZONTAL BAR SMALL LOWER BIAS' => { 'out' => chr(198), 'unicode' => $inv . '🭺' . $ni, 'desc' => 'Reversed Horizontal bar with a slight lower bias', },
        'REVERSE VERTICAL BAR SMALL LEFT BIAS'    => { 'out' => chr(199), 'unicode' => $inv . ' ' . $ni, 'desc' => 'Reversed Vertical bar with a slight left bias', },
        'REVERSE VERTICAL BAR SMALL RIGHT BIAS'   => { 'out' => chr(200), 'unicode' => $inv . ' ' . $ni, 'desc' => 'Reversed Vertical bar with a slight right bias', },
        'REVERSE TOP RIGHT ROUNDED CORNER'        => { 'out' => chr(201), 'unicode' => $inv . 'â•®' . $ni, 'desc' => 'Reversed Top Right Rounded Corner', },
        'REVERSE BOTTOM LEFT ROUNDED CORNER'      => { 'out' => chr(202), 'unicode' => $inv . 'â•°' . $ni, 'desc' => 'Reversed Bottom Left Rounded Corner', },
        'REVERSE BOTTOM RIGHT ROUNDED CORNER'     => { 'out' => chr(203), 'unicode' => $inv . '╯' . $ni, 'desc' => 'Reversed Bottom Right Rounded Corner', },
        'REVERSE BOTTOM LEFT RIGHT ANGLE'         => { 'out' => chr(204), 'unicode' => $inv . '⎿' . $ni, 'desc' => 'Reversed Bottom left right angle', },
        'REVERSE GIANT BACKSLASH'                 => { 'out' => chr(205), 'unicode' => $inv . '╲' . $ni, 'desc' => 'Reversed Giant Backslash', },
        'REVERSE GIANT FORWARD SLASH'             => { 'out' => chr(206), 'unicode' => $inv . '╱' . $ni, 'desc' => 'Reversed Giant Forward Slash', },
        'REVERSE TOP LEFT RIGHT ANGLE'            => { 'out' => chr(207), 'unicode' => $inv . '⎾' . $ni, 'desc' => 'Reversed Top left right angle', },
        'REVERSE TOP RIGHT RIGHT ANGLE'           => { 'out' => chr(208), 'unicode' => $inv . ' ' . $ni, 'desc' => 'Reversed Top right right angle', },
        'REVERSE CENTER DOT'                      => { 'out' => chr(209), 'unicode' => $inv . '•' . $ni, 'desc' => 'Reversed CENTER DOT', },
        'REVERSE HORIZONTAL BAR LARGE LOWER BIAS' => { 'out' => chr(210), 'unicode' => $inv . '🭻' . $ni, 'desc' => 'Reversed Horizontal bar with a strong lower bias', },
        'REVERSE HEART'                           => { 'out' => chr(211), 'unicode' => $inv . '♥' . $ni, 'desc' => 'Reversed Heart', },
        'REVERSE VERTICAL BAR LARGE LEFT BIAS'    => { 'out' => chr(212), 'unicode' => $inv . ' ' . $ni, 'desc' => 'Reversed Vertical bar with a strong left bias', },
        'REVERSE TOP LEFT ROUNDED CORNER'         => { 'out' => chr(213), 'unicode' => $inv . 'â•­' . $ni, 'desc' => 'Reversed Top Left Rounded Corner', },
        'REVERSE GIANT X'                         => { 'out' => chr(214), 'unicode' => $inv . '╳' . $ni, 'desc' => 'Reversed Giant X', },
        'REVERSE THIN CIRCLE'                     => { 'out' => chr(215), 'unicode' => $inv . 'â—‹' . $ni, 'desc' => 'Reversed Thin Circle', },
        'REVERSE CLUB'                            => { 'out' => chr(216), 'unicode' => $inv . '♣' . $ni, 'desc' => 'Reversed Club', },
        'REVERSE VERTICAL BAR LARGE RIGHT BIAS'   => { 'out' => chr(217), 'unicode' => $inv . ' ' . $ni, 'desc' => 'Reversed Vertical bar with a strong right bias', },
        'REVERSE DIAMOND'                         => { 'out' => chr(218), 'unicode' => $inv . '♦' . $ni, 'desc' => 'Reversed Diamond', },
        'REVERSE CROSS BAR'                       => { 'out' => chr(219), 'unicode' => $inv . '┼' . $ni, 'desc' => 'Reversed Cross Bar', },
        'REVERSE SHADE LEFT'                      => { 'out' => chr(220), 'unicode' => $inv . '🮌' . $ni, 'desc' => 'Reversed Shade left', },
        'REVERSE VERTICAL BAR'                    => { 'out' => chr(221), 'unicode' => $inv . '┃' . $ni, 'desc' => 'Reversed Vertical bar', },
        'REVERSE PI'                              => { 'out' => chr(222), 'unicode' => $inv . 'Ï€' . $ni, 'desc' => 'Reversed Pi symbol', },
        'REVERSE BOTTOM LEFT WEDGE'               => { 'out' => chr(223), 'unicode' => $inv . 'â—¥' . $ni, 'desc' => 'Reversed Bottom Left Wedge', },
#       'REVERSE SPACE 2'                         => { 'out' => chr(224), 'unicode' => $inv . ' ' . $ni, 'desc' => 'Reversed Dithered Box Full duplicate', },
#       'REVERSE LEFT HALF 2'                     => { 'out' => chr(225), 'unicode' => $inv . '▌' . $ni, 'desc' => 'Reversed Left Half duplicate', },
#       'REVERSE BOTTOM BOX 2'                    => { 'out' => chr(226), 'unicode' => $inv . 'â–„' . $ni, 'desc' => 'Reversed Bottom Box duplicate', },
#       'REVERSE TOP HORIZONTAL BAR 2'            => { 'out' => chr(227), 'unicode' => $inv . 'â–”' . $ni, 'desc' => 'Reversed Top Horizontal Bar duplicate', },
#       'REVERSE BOTTOM HORIZONTAL BAR 2'         => { 'out' => chr(228), 'unicode' => $inv . '▁' . $ni, 'desc' => 'Reversed Bottom Horizontal Bar duplicate', },
#       'REVERSE LEFT VERTICAL BAR 2'             => { 'out' => chr(229), 'unicode' => $inv . 'â–Ž' . $ni, 'desc' => 'Reversed Left Vertical Bar duplicate', },
#       'REVERSE DITHERED BOX 2'                  => { 'out' => chr(230), 'unicode' => $inv . 'â–’' . $ni, 'desc' => 'Reversed Dithered Box duplicate', },
#       'REVERSE RIGHT VERTICAL BAR 2'            => { 'out' => chr(231), 'unicode' => $inv . '🮈' . $ni, 'desc' => 'Reversed Right Vertical Bar duplicate', },
#       'REVERSE DITHERED BOTTOM 2'               => { 'out' => chr(232), 'unicode' => $inv . '🮏' . $ni, 'desc' => 'Reversed Dithered Left duplicate', },
#       'REVERSE BOTTOM RIGHT WEDGE 2'            => { 'out' => chr(233), 'unicode' => $inv . 'â—¤' . $ni, 'desc' => 'Reversed Bottom Right Wedge duplicate', },
#       'REVERSE VERTICAL BAR RIGHT 2'            => { 'out' => chr(234), 'unicode' => $inv . '🮈' . $ni, 'desc' => 'Reversed Vertical bar flushed right duplicate', },
#       'REVERSE VERTICAL BAR MIDDLE LEFT 2'      => { 'out' => chr(235), 'unicode' => $inv . '├' . $ni, 'desc' => 'Reversed Vertical Bar Middle Left duplicate', },
#       'REVERSE BOTTOM RIGHT BOX 2'              => { 'out' => chr(236), 'unicode' => $inv . 'â–—' . $ni, 'desc' => 'Reversed Bottom Right Box duplicate', },
#       'REVERSE BOTTOM LEFT CORNER 2'            => { 'out' => chr(237), 'unicode' => $inv . 'â””' . $ni, 'desc' => 'Reversed Bottom Left Corner duplicate', },
#       'REVERSE TOP RIGHT CORNER 2'              => { 'out' => chr(238), 'unicode' => $inv . '┐' . $ni, 'desc' => 'Reversed Top Right Corner duplicate', },
#       'REVERSE HORIZONTAL BAR BOTTOM 2'         => { 'out' => chr(239), 'unicode' => $inv . 'â–‚' . $ni, 'desc' => 'Reversed Horizontal Bar Bottom duplicate', },
#       'REVERSE TOP LEFT CORNER 2'               => { 'out' => chr(240), 'unicode' => $inv . '┌' . $ni, 'desc' => 'Reversed Top Left Corner duplicate', },
#       'REVERSE HORIZONTAL BAR MIDDLE BOTTOM 2'  => { 'out' => chr(241), 'unicode' => $inv . 'â”´' . $ni, 'desc' => 'Reversed Horizontal Bar Middle Bottom duplicate', },
#       'REVERSE HORIZONTAL BAR MIDDLE TOP 2'     => { 'out' => chr(242), 'unicode' => $inv . '┬' . $ni, 'desc' => 'Reversed Horizontal Bar Middle Top duplicate', },
#       'REVERSE VERTICAL BAR MIDDLE RIGHT 2'     => { 'out' => chr(243), 'unicode' => $inv . '┤' . $ni, 'desc' => 'Reversed Vertical Bar Middle Right duplicate', },
#       'REVERSE VERTICAL BOX LEFT 2'             => { 'out' => chr(244), 'unicode' => $inv . '▍' . $ni, 'desc' => 'Reversed Vertical Box Left duplicate', },
#       'REVERSE LEFT HALF BOX 2'                 => { 'out' => chr(245), 'unicode' => $inv . '▌' . $ni, 'desc' => 'Reversed Left Half Box duplicate', },
#       'REVERSE RIGHT HALF BOX 2'                => { 'out' => chr(246), 'unicode' => $inv . '🮈' . $ni, 'desc' => 'Reversed Right half box duplicate', },
#       'REVERSE HORIZONTAL BAR TOP 2'            => { 'out' => chr(247), 'unicode' => $inv . '🮂' . $ni, 'desc' => 'Reversed Horizontal bar top duplicate', },
#       'REVERSE HORIZONTAL BAR THICK TOP 2'      => { 'out' => chr(248), 'unicode' => $inv . '🮃' . $ni, 'desc' => 'Reversed Horizontal bar thick top duplicate', },
#       'REVERSE HORIZONTAL BAR THICK BOTTOM 2'   => { 'out' => chr(249), 'unicode' => $inv . 'â–ƒ' . $ni, 'desc' => 'Reversed Horizontal bar thick bottom duplicate', },
#       'REVERSE BOTTOM RIGHT RIGHT ANGLE 2'      => { 'out' => chr(250), 'unicode' => $inv . '🭿' . $ni, 'desc' => 'Reversed Bottom right right angle duplicate', },
#       'REVERSE BOTTOM LEFT BOX 2'               => { 'out' => chr(251), 'unicode' => $inv . 'â––' . $ni, 'desc' => 'Reversed Bottom Left Box duplicate', },
#       'REVERSE TOP RIGHT BOX 2'                 => { 'out' => chr(252), 'unicode' => $inv . '▝' . $ni, 'desc' => 'Reversed Top Right Box duplicate', },
#       'REVERSE BOTTOM RIGHT CORNER 2'           => { 'out' => chr(253), 'unicode' => $inv . '┘' . $ni, 'desc' => 'Reversed Bottom Right Corner duplicate', },
#       'REVERSE TOP LEFT BOX 2'                  => { 'out' => chr(254), 'unicode' => $inv . 'â–˜' . $ni, 'desc' => 'Reversed Top Left Box duplicate', },
#       'REVERSE PI 2'                            => { 'out' => chr(255), 'unicode' => $inv . 'Ï€' . $ni, 'desc' => 'Reversed Pi symbol duplicate', },
    };
    $self->{'debug'}->DEBUG(['End PETSCII Initialize']);
    return ($self);
} ## end sub petscii_initialize

sub petscii_output {
    my $self = shift;
    my $text = shift;

    $self->{'debug'}->DEBUG(['Start PETSCII Output']);

lib/BBS/Universal.pm  view on Meta::CPAN

        $text .= "[% ORANGE %]║[% YELLOW  %]    ## ## ##          [% BRIGHT BLUE %]╔═══╗ ╒═╦═╕ ╔═══╗ ╔═══╗ ╔═══╕ ╒═╦═╕ ╒═╦═╕       [% YELLOW  %]    ## ## ##    [% ORANGE %]║[% ...
        $text .= "[% ORANGE %]║[% GREEN   %]    ## ## ##          [% BRIGHT BLUE %]║   ║   ║   ║   ║ ║   ╜ ║       ║     ║         [% GREEN   %]    ## ## ##    [% ORANGE %]║[% RESET %]\n";
        $text .= "[% ORANGE %]║[% CYAN    %]    ## ## ##          [% BRIGHT BLUE %]╠═══╣   ║   ╠═══╣ ╚═══╗ ║       ║     ║         [% CYAN    %]    ## ## ##    [% ORANGE %]║[% RESET %]\n";
        $text .= "[% ORANGE %]â•‘[% BLUE    %]  ###  ##  ###        [% BRIGHT BLUE %]â•‘   â•‘   â•‘   â•‘   â•‘ â•“   â•‘ â•‘       â•‘     â•‘         [% BLUE    %]  ###  ##  ###  [% ORANGE %]â•‘[% RESET %]\n";
        $text .= "[% ORANGE %]║[% MAGENTA %] ###   ##   ###       [% BRIGHT BLUE %]╜   ╙   ╙   ╜   ╙ ╚═══╝ ╚═══╛ ╘═╩═╛ ╘═╩═╛       [% MAGENTA %] ###   ##   ### [% ORANGE %]║[% RESET %]\n";
        $text .= '[% ORANGE %]╠══════╦' . '═' x 39 . '╦' . '═' x 39 . '╣[% RESET %]' . "\n";
        $text .= "[% ORANGE %]â•‘[% BRIGHT YELLOW %] CHAR [% ORANGE %]â•‘[% BRIGHT YELLOW %] ATASCII TOKENS                        [% ORANGE %]â•‘[% BRIGHT YELLOW %] DESCRIPTION                           [% ORANGE %]â•‘[% RESET %]\n";
        $text .= '[% ORANGE %]╠══════╬' . '═' x 39 . '╬' . '═' x 39 . '╣[% RESET %]' . "\n";

        foreach my $name (@atatkn) {
            $text .= '[% ORANGE %]â•‘[% RESET %]  ' . $self->{'atascii_meta'}->{$name}->{'unicode'} . '   [% ORANGE %]â•‘[% RESET %] ' . sprintf('%-37s %s %-37s %s', $name, '[% ORANGE %]â•‘[% RESET %]', $self->{'atascii_meta'}->{$name}->{'desc'}, '[%...
        }
		$text .= '[% ORANGE %]â•‘[% RESET %] ' . '[% HORIZONTAL BAR %]' x 4 . ' [% ORANGE %]â•‘[% RESET %] ' . sprintf('%-37s %s %-37s %s', 'HORIZONTAL RULE', '[% ORANGE %]â•‘[% RESET %]', 'Horizontal rule', '[% ORANGE %]â•‘[% RESET %]') . "\n";

        $text .= "[% ORANGE %]╚══════╩═══════════════════════════════════════╩═════════════════════════â...

    } elsif ($mode && $mode eq 'PETSCII') {
        # ─ ━ │ ┃ ┄ ┅ ┆ ┇ ┈ ┉ ┊ ┋ ┌ ┍ ┎ ┏ ┐ ┑ ┒ ┓ └ ┕ ┖ ┗ ┘ ┙ ┚ ┛ ├ ┝ ┞ ┟ ┠ ┡ ┢ ┣ ┤ ┥ ┦ ┧ ┨ ┩ ┪ ┫ ┬ ┭ ┮ ┯ ┰ ┱ ┲ ┳ ┴ ┵ ┶ ┷ ┸ ┹ ┺ ┻ ...
		# 🬀 🬁 🬂 🬃 🬄 🬅 🬆 🬇 🬈 🬉 🬊 🬋 🬌 🬍 🬎 🬏 🬐 🬑 🬒 🬓 🬔 🬕 🬖 🬗 🬘 🬙 🬚 🬛 🬜 🬝 🬞 🬟 🬠 🬡 🬢 🬣 🬤 🬥 🬦 🬧 🬨 🬩 🬪 🬫 🬬 🬭 🬮 🬯 🬰 ð...
		#  🭰 🭱 🭲 🭳 🭴 🭵 🭶 🭷 🭸 🭹 🭺 🭻 🭼 🭽 🭾 🭿 🮀 🮁 🮂 🮃 🮄 🮅 🮆 🮇 🮈 🮉 🮊 🮋 🮌 🮍 🮎 🮏 🮐 🮑 🮒 🮔 🮕 🮖 🮗 🮘 🮙 🮚 🮛 🮜 🮝 🮞 🮟 🮠 🮡 ...

lib/BBS/Universal.pm  view on Meta::CPAN

        $text .= '[% ORANGE %]â•‘[% RESET %] [% BLUE %]d8P  Y8 [% RESET                                           %][% BRIGHT WHITE %]                          8    8 8       8   8      8    " 8  8                        [% BLUE %]d8P  Y8 [% RESET %]...
        $text .= '[% ORANGE %]║[% RESET %] [% BLUE %]8P     🮅🮅🮅🭚[% RESET                                           %][% BRIGHT WHITE %]                       8eeee8 8eeee   8e  8eeeee 8e     8e 8e                       [% BLUE %]8P     ...
        $text .= '[% ORANGE %]║[% RESET %] [% BLUE %]8b     [% RED %][% REVERSE %]🮂🮂🮂[% RESET %][% RED %]🬿[% RESET %][% BRIGHT WHITE %]                       88     88      88      88 88     88 88                       [% BLUE %]8b     ...
        $text .= '[% ORANGE %]â•‘[% RESET %] [% BLUE %]Y8b  d8 [% RESET                                           %][% BRIGHT WHITE %]                          88     88      88  e   88 88   e 88 88                       [% BLUE %]Y8b  d8 [% RESET %]...
        $text .= '[% ORANGE %]â•‘[% RESET %] [% BLUE %]' . " `Y88P'" . '[% RESET                                 %][% BRIGHT WHITE %]                           88     88eee   88  8eee88 88eee8 88 88                       ' . "[% BLUE %] `Y88P'" . '[%...
        $text .= '[% ORANGE %]╠══════╦' . '═' x 50 . '╦' . '═' x 50 . '╣[% RESET %]' . "\n";
        $text .= '[% ORANGE %]â•‘[% BRIGHT YELLOW %] CHAR [% ORANGE %]â•‘[% BRIGHT YELLOW %] PETSCII TOKENS                                   [% ORANGE %]â•‘[% BRIGHT YELLOW %] DESCRIPTION                                      [% ORANGE %]â•‘[% RESET ...
        $text .= '[% ORANGE %]╠══════╬' . '═' x 50 . '╬' . '═' x 50 . '╣[% RESET %]' . "\n";

        foreach my $name (@pettkn) {
            $text .= '[% ORANGE %]â•‘[% RESET %]  ' . $self->{'petscii_meta'}->{$name}->{'unicode'} . '   [% ORANGE %]â•‘[% RESET %] ' . sprintf('%-48s %s %-48s %s', $name, '[% ORANGE %]â•‘[% RESET %]', $self->{'petscii_meta'}->{$name}->{'desc'}, '[%...
        }
        $text .= '[% ORANGE %]â•‘[% RESET %] ' . '[% HORIZONTAL BAR %]' x 4 . ' [% ORANGE %]â•‘[% RESET %] ' . sprintf('%-48s %s %-48s %s', 'HORIZONTAL RULE color', '[% ORANGE %]â•‘[% RESET %]', 'Horizontal rule in specified color', '[% ORANGE %]â•‘[...

        $text .= '[% ORANGE %]╚══════╩' . '═' x 50 . '╩' . '═' x 50 . '╝[% RESET %]' . "\n";

        $text =~ s/│ (WHITE)/│ \[\% BRIGHT WHITE \%\]$1\[\% RESET \%\]/g;
        $text =~ s/│ (YELLOW)/│ \[\% YELLOW \%\]$1\[\% RESET \%\]/g;
        $text =~ s/│ (CYAN)/│ \[\% CYAN \%\]$1\[\% RESET \%\]/g;
        $text =~ s/│ (GREEN)/│ \[\% GREEN \%\]$1\[\% RESET \%\]/g;
        $text =~ s/│ (PINK)/│ \[\% PINK \%\]$1\[\% RESET \%\]/g;

lib/BBS/Universal/ASCII.pm  view on Meta::CPAN

package BBS::Universal::ASCII;
BEGIN { our $VERSION = '0.003' };

sub ascii_initialize {
    my $self = shift;

    $self->{'debug'}->DEBUG(['Start ASCII Initialize']);
    $self->{'ascii_meta'} = {
        'RETURN'    => { 'out' => chr(13),           'unicode' => ' ', 'desc' => 'Carriage Return' },
        'LINEFEED'  => { 'out' => chr(10),           'unicode' => ' ', 'desc' => 'Linefeed' },
        'NEWLINE'   => { 'out' => chr(13) . chr(10), 'unicode' => ' ', 'desc' => 'Newline' },
        'BACKSPACE' => { 'out' => chr(8),            'unicode' => ' ', 'desc' => 'Backspace' },
        'TAB'       => { 'out' => chr(9),            'unicode' => ' ', 'desc' => 'Tab' },
        'DELETE'    => { 'out' => chr(127),          'unicode' => ' ', 'desc' => 'Delete' },
        'CLS'       => { 'out' => chr(12),           'unicode' => ' ', 'desc' => 'Clear Screen (Formfeed)' },
        'CLEAR'     => { 'out' => chr(12),           'unicode' => ' ', 'desc' => 'Clear Screen (Formfeed)' },
        'RING BELL' => { 'out' => chr(7),            'unicode' => ' ', 'desc' => 'Console Bell' },
    };
    $self->{'debug'}->DEBUG(['End ACSII Initialize']);
    return ($self);
} ## end sub ascii_initialize

sub ascii_output {
    my $self = shift;
    my $text = shift;

    $self->{'debug'}->DEBUG(['Start ASCII Output']);

lib/BBS/Universal/ATASCII.pm  view on Meta::CPAN

package BBS::Universal::ATASCII;
BEGIN { our $VERSION = '0.007'; }

sub atascii_initialize {
    my $self = shift;

    $self->{'debug'}->DEBUG(['Start ATASCII Initialize']);
    $self->{'atascii_meta'} = {
        # Control
        'ESC'                          => { 'out' => chr(27),  'unicode' => '␛', 'desc' => 'Escape', },
        'UP'                           => { 'out' => chr(28),  'unicode' => ' ', 'desc' => 'Move Cursor Up', },
        'DOWN'                         => { 'out' => chr(29),  'unicode' => ' ', 'desc' => 'Move Cursor Down', },
        'LEFT'                         => { 'out' => chr(30),  'unicode' => ' ', 'desc' => 'Move Cursor Left', },
        'RIGHT'                        => { 'out' => chr(31),  'unicode' => ' ', 'desc' => 'Move Cursor Right', },
        'CLEAR'                        => { 'out' => chr(125), 'unicode' => ' ', 'desc' => 'Clear Screen', },
        'BACKSPACE'                    => { 'out' => chr(126), 'unicode' => ' ', 'desc' => 'Backspace', },
        'TAB'                          => { 'out' => chr(127), 'unicode' => ' ', 'desc' => 'Tab', },
        'RETURN'                       => { 'out' => chr(155), 'unicode' => ' ', 'desc' => 'Carriage Return', },
        'DELETE LINE'                  => { 'out' => chr(156), 'unicode' => ' ', 'desc' => 'Delete Line', },
        'INSERT LINE'                  => { 'out' => chr(157), 'unicode' => ' ', 'desc' => 'Insert Line', },
        'CLEAR TAB STOP'               => { 'out' => chr(158), 'unicode' => ' ', 'desc' => 'Clear Tab Stop', },
        'SET TAB STOP'                 => { 'out' => chr(159), 'unicode' => ' ', 'desc' => 'Set Tab Stop', },
        'BUZZER'                       => { 'out' => chr(253), 'unicode' => ' ', 'desc' => 'Console Bell', },
        'RING BELL'                    => { 'out' => chr(253), 'unicode' => ' ', 'desc' => 'Console Bell', },
        'DELETE'                       => { 'out' => chr(254), 'unicode' => ' ', 'desc' => 'Delete', },
        'INSERT'                       => { 'out' => chr(255), 'unicode' => ' ', 'desc' => 'Insert', },

        # Normal

        'HEART'                        => { 'out' => chr(0),   'unicode' => '♥', 'desc' => 'Heart', },
        'VERTICAL BAR MIDDLE LEFT'     => { 'out' => chr(1),   'unicode' => '┣', 'desc' => 'Vertical Bar Middle Left', },
        'RIGHT VERTICAL BAR'           => { 'out' => chr(2),   'unicode' => '🮇', 'desc' => 'Right Vertical Bar', },
        'BOTTOM RIGHT CORNER'          => { 'out' => chr(3),   'unicode' => 'â”›', 'desc' => 'Bottom Right Corner', },
        'VERTICAL BAR MIDDLE RIGHT'    => { 'out' => chr(4),   'unicode' => '┫', 'desc' => 'Vertical Bar Middle Right', },
        'TOP RIGHT CORNER'             => { 'out' => chr(5),   'unicode' => '┓', 'desc' => 'Top Right Corner', },
        'LARGE FORWARD SLASH'          => { 'out' => chr(6),   'unicode' => '╱', 'desc' => 'Large Forward Slash', },
        'LARGE BACKSLASH'              => { 'out' => chr(7),   'unicode' => '╲', 'desc' => 'Large Backslash', },
        'TOP LEFT WEDGE'               => { 'out' => chr(8),   'unicode' => 'â—¢', 'desc' => 'Top Left Wedge', },
        'BOTTOM RIGHT BOX'             => { 'out' => chr(9),   'unicode' => 'â–—', 'desc' => 'Bottom Right Box', },
        'TOP RIGHT WEDGE'              => { 'out' => chr(10),  'unicode' => 'â—£', 'desc' => 'Top Right Wedge', },
        'TOP RIGHT BOX'                => { 'out' => chr(11),  'unicode' => '▝', 'desc' => 'Top Right Box', },
        'TOP LEFT BOX'                 => { 'out' => chr(12),  'unicode' => 'â–˜', 'desc' => 'Top Left Box', },
        'TOP HORIZONTAL BAR'           => { 'out' => chr(13),  'unicode' => '🮂', 'desc' => 'Top Horizontal Bar', },
        'BOTTOM HORIZONTAL BAR'        => { 'out' => chr(14),  'unicode' => 'â–‚', 'desc' => 'Bottom Horizontal Bar', },
        'BOTTOM LEFT BOX'              => { 'out' => chr(15),  'unicode' => 'â––', 'desc' => 'Bottom Left Box', },
        'CLUB'                         => { 'out' => chr(16),  'unicode' => '♣', 'desc' => 'Club', },
        'TOP LEFT CORNER'              => { 'out' => chr(17),  'unicode' => '┏', 'desc' => 'Top Left Corner', },
        'HORIZONTAL BAR'               => { 'out' => chr(18),  'unicode' => '━', 'desc' => 'Horizontal Bar', },
        'CROSS BAR'                    => { 'out' => chr(19),  'unicode' => 'â•‹', 'desc' => 'Cross Bar', },
        'CENTER DOT'                   => { 'out' => chr(20),  'unicode' => '⏺', 'desc' => 'Center Dot', },
        'BOTTOM BOX'                   => { 'out' => chr(21),  'unicode' => 'â–„', 'desc' => 'Bottom Box', },
        'LEFT VERTICAL BAR'            => { 'out' => chr(22),  'unicode' => 'â–Ž', 'desc' => 'Left Vertical Bar', },
        'HORIZONTAL BAR MIDDLE TOP'    => { 'out' => chr(23),  'unicode' => '┳', 'desc' => 'Horizontal Bar Middle Top', },
        'HORIZONTAL BAR MIDDLE BOTTOM' => { 'out' => chr(24),  'unicode' => 'â”»', 'desc' => 'Horizontal Bar Middle Bottom', },
        'LEFT VERTICAL BAR'            => { 'out' => chr(25),  'unicode' => '▌', 'desc' => 'Left Vertical Bar', },
        'BOTTOM LEFT CORNER'           => { 'out' => chr(26),  'unicode' => 'â”—', 'desc' => 'Botom Left Corner', },
        'UP ARROW'                     => { 'out' => chr(28),  'unicode' => '🡹', 'desc' => 'Up Arrow', },
        'DOWN ARROW'                   => { 'out' => chr(29),  'unicode' => '🡻', 'desc' => 'Down Arrow', },
        'LEFT ARROW'                   => { 'out' => chr(30),  'unicode' => '🡸', 'desc' => 'Left Arrow', },
        'RIGHT ARROW'                  => { 'out' => chr(31),  'unicode' => '🡺', 'desc' => 'Right Arrow', },
        'DIAMOND'                      => { 'out' => chr(96),  'unicode' => '♦', 'desc' => 'Diamond', },
        'SPADE'                        => { 'out' => chr(123), 'unicode' => 'â™ ', 'desc' => 'Spade', },
        'MIDDLE VERTICAL BAR'          => { 'out' => chr(124), 'unicode' => '|', 'desc' => 'Middle Vertical Bar', },
        'BACK ARROW'                   => { 'out' => chr(125), 'unicode' => '🢰', 'desc' => 'Back Arrow', },
        'LEFT TRIANGLE'                => { 'out' => chr(126), 'unicode' => 'â—€', 'desc' => 'Left Triangle', },
        'RIGHT TRIANGLE'               => { 'out' => chr(127), 'unicode' => 'â–¶', 'desc' => 'Right Triangle', },
    };

    my $inv = "\e[7m";
    my $ni  = "\e[27m";

	my @list = keys %{ $self->{'atascii_meta'} };
    foreach my $name (@list) {
		next if ($name =~ /^(ESC|UP|DOWN|LEFT|RIGHT|CLEAR|BACKSPACE|TAB|RETURN|NEWLINE|DELETE LINE|INSERT LINE|CLEAR TAB STOP|BUZZER|RING BELL|DELETE|INSERT)$/);
		$self->{'atascii_meta'}->{"REVERSED $name"}->{'unicode'} = $inv . $self->{'atascii_meta'}->{$name}->{'unicode'} . $ni;
        $self->{'atascii_meta'}->{"REVERSED $name"}->{'out'}     = chr(128 + ord($self->{'atascii_meta'}->{$name}->{'out'}));
        $self->{'atascii_meta'}->{"REVERSED $name"}->{'desc'}    = 'Reversed ' . $self->{'atascii_meta'}->{$name}->{'desc'};
    }

    $self->{'atascii_table'} = [
        # Normal
        '♥', '┣', '🮇', '┛', '┫', '┓', '╱', '╲', '◢', '▗', '◣', '🬁', '🬀', '▔', '▂', '▖', '♣', '┏', '━', '╋', '⏺', '▄', '▎', '┳', '┻', '▌', '┗', '␛', '🡹', '🡻', '🡸', '🡺',
        ' ', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?',
        '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', "\\", ']', '^', '_',
        '♦', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '♠', '|', '🢰', '◀', '▶',

lib/BBS/Universal/PETSCII.pm  view on Meta::CPAN


sub petscii_initialize {
    my $self = shift;

    $self->{'debug'}->DEBUG(['Start PETSCII Initialize']);

    my $inv = "\e[7m";
    my $ni  = "\e[27m";

    $self->{'petscii_meta'} = {
#       'NULL 0'                                  => { 'out' => chr(0),   'unicode' => ' ', 'desc' => 'NOP 0', },
#       'NULL 1'                                  => { 'out' => chr(1),   'unicode' => ' ', 'desc' => 'NOP 1', },
#       'NULL 2'                                  => { 'out' => chr(2),   'unicode' => ' ', 'desc' => 'NOP 2', },
        'STOP'                                    => { 'out' => chr(3),   'unicode' => ' ', 'desc' => 'PETSCII STOP', },
#       'NULL 4'                                  => { 'out' => chr(4),   'unicode' => ' ', 'desc' => 'NOP 4', },
        'WHITE'                                   => { 'out' => chr(5),   'unicode' => ' ', 'desc' => 'White text', },
        'RESET'                                   => { 'out' => chr(5),   'unicode' => ' ', 'desc' => 'Reset back to white text', },
#       'NULL 6'                                  => { 'out' => chr(6),   'unicode' => ' ', 'desc' => 'NOP 6', },
#       'NULL 7'                                  => { 'out' => chr(7),   'unicode' => ' ', 'desc' => 'NOP 7', },
        'DISABLE SHIFT'                           => { 'out' => chr(8),   'unicode' => ' ', 'desc' => 'Disable shift', },
        'ENABLE SHIFT'                            => { 'out' => chr(9),   'unicode' => ' ', 'desc' => 'Enable shift', },
#       'NULL 10'                                 => { 'out' => chr(10),  'unicode' => ' ', 'desc' => 'NOP 10', },
#       'NULL 11'                                 => { 'out' => chr(11),  'unicode' => ' ', 'desc' => 'NOP 11', },
#       'NULL 12'                                 => { 'out' => chr(12),  'unicode' => ' ', 'desc' => 'NOP 12', },
        'RETURN'                                  => { 'out' => chr(13),  'unicode' => ' ', 'desc' => 'Carriage Return', },
        'LOWERCASE'                               => { 'out' => chr(14),  'unicode' => ' ', 'desc' => 'Lowercase', },
#       'NULL 15'                                 => { 'out' => chr(15),  'unicode' => ' ', 'desc' => 'NOP 15', },
#       'NULL 16'                                 => { 'out' => chr(16),  'unicode' => ' ', 'desc' => 'NOP 16', },
        'DOWN'                                    => { 'out' => chr(17),  'unicode' => ' ', 'desc' => 'Cursor down', },
        'REVERSE ON'                              => { 'out' => chr(18),  'unicode' => ' ', 'desc' => 'Reverse on', },
        'HOME'                                    => { 'out' => chr(19),  'unicode' => ' ', 'desc' => 'Home', },
        'DELETE'                                  => { 'out' => chr(20),  'unicode' => ' ', 'desc' => 'Delete', },
#       'NULL 21'                                 => { 'out' => chr(21),  'unicode' => ' ', 'desc' => 'NOP 21', },
#       'NULL 22'                                 => { 'out' => chr(22),  'unicode' => ' ', 'desc' => 'NOP 22', },
#       'NULL 23'                                 => { 'out' => chr(23),  'unicode' => ' ', 'desc' => 'NOP 23', },
#       'NULL 24'                                 => { 'out' => chr(24),  'unicode' => ' ', 'desc' => 'NOP 24', },
#       'NULL 25'                                 => { 'out' => chr(25),  'unicode' => ' ', 'desc' => 'NOP 25', },
#       'NULL 26'                                 => { 'out' => chr(26),  'unicode' => ' ', 'desc' => 'NOP 26', },
#       'NULL 27'                                 => { 'out' => chr(27),  'unicode' => ' ', 'desc' => 'NOP 27', },
        'RED'                                     => { 'out' => chr(28),  'unicode' => ' ', 'desc' => 'Red', },
        'RIGHT'                                   => { 'out' => chr(29),  'unicode' => ' ', 'desc' => 'Cursor right', },
        'GREEN'                                   => { 'out' => chr(30),  'unicode' => ' ', 'desc' => 'Green', },
        'BLUE'                                    => { 'out' => chr(31),  'unicode' => ' ', 'desc' => 'Blue', },
#       'SPACE'                                   => { 'out' => ' ',      'unicode' => ' ', 'desc' => 'Space', },
#       'EXCLAMATION MARK'                        => { 'out' => '!',      'unicode' => '!', 'desc' => 'Exclamation mark', },
#       'DOUBLE QUOTE'                            => { 'out' => '"',      'unicode' => '"', 'desc' => 'Double quotation mark', },
#       'HASH'                                    => { 'out' => '#',      'unicode' => '#', 'desc' => 'Hash/pound', },
#       'DOLLAR'                                  => { 'out' => '$',      'unicode' => '$', 'desc' => 'Dollar sign', },
#       'PERCENT'                                 => { 'out' => '%',      'unicode' => '%', 'desc' => 'Percent sign', },
#       'AMPERSAND'                               => { 'out' => '&',      'unicode' => '&', 'desc' => 'Ampersand', },
#       'SINGLE QUOTE'                            => { 'out' => "'",      'unicode' => "'", 'desc' => 'Single quotation mark', },
#       'PARENTHESIS LEFT'                        => { 'out' => '(',      'unicode' => '(', 'desc' => 'Left parenthesis', },
#       'PARENTHESIS RIGHT'                       => { 'out' => ')',      'unicode' => ')', 'desc' => 'Right parenthesis', },
#       'ASTERISK'                                => { 'out' => '*',      'unicode' => '*', 'desc' => 'Asterisk', },
#       'PLUS'                                    => { 'out' => '+',      'unicode' => '+', 'desc' => 'Plus sign', },
#       'COMMA'                                   => { 'out' => ',',      'unicode' => ',', 'desc' => 'Comma', },
#       'HYPHEN'                                  => { 'out' => '-',      'unicode' => '-', 'desc' => 'Hyphen', },
#       'PERIOD'                                  => { 'out' => ',',      'unicode' => '.', 'desc' => 'Period', },
#       'FORWARD SLASH'                           => { 'out' => '/',      'unicode' => '/', 'desc' => 'Forward slash', },
#       'ZERO'                                    => { 'out' => '0',      'unicode' => '0', 'desc' => 'Zero', },
#       'ONE'                                     => { 'out' => '1',      'unicode' => '1', 'desc' => 'One', },
#       'TWO'                                     => { 'out' => '2',      'unicode' => '2', 'desc' => 'Two', },
#       'THREE'                                   => { 'out' => '3',      'unicode' => '3', 'desc' => 'Three', },
#       'FOUR'                                    => { 'out' => '4',      'unicode' => '4', 'desc' => 'Four', },
#       'FIVE'                                    => { 'out' => '5',      'unicode' => '5', 'desc' => 'Five', },
#       'SIX'                                     => { 'out' => '6',      'unicode' => '6', 'desc' => 'Six', },
#       'SEVEN'                                   => { 'out' => '7',      'unicode' => '7', 'desc' => 'Seven', },
#       'EIGHT'                                   => { 'out' => '8',      'unicode' => '8', 'desc' => 'Eight', },
#       'NINE'                                    => { 'out' => '9',      'unicode' => '9', 'desc' => 'Nine', },
#       'COLON'                                   => { 'out' => ':',      'unicode' => ':', 'desc' => 'Colon', },
#       'SEMICOLON'                               => { 'out' => ';',      'unicode' => ';', 'desc' => 'Semicolon', },
#       'LESS THAN'                               => { 'out' => '<',      'unicode' => '<', 'desc' => 'Less than', },
#       'EQUAL'                                   => { 'out' => '=',      'unicode' => '=', 'desc' => 'Equal sign', },
#       'GREATER THAN'                            => { 'out' => '>',      'unicode' => '>', 'desc' => 'Greater than', },
#       'QUESTION MARK'                           => { 'out' => '?',      'unicode' => '?', 'desc' => 'Question mark', },
#       'AT'                                      => { 'out' => '@',      'unicode' => '@', 'desc' => 'At symbol', },
#       'CHAR A'                                  => { 'out' => 'A',      'unicode' => 'A', 'desc' => 'A', },
#       'CHAR B'                                  => { 'out' => 'B',      'unicode' => 'B', 'desc' => 'B', },
#       'CHAR C'                                  => { 'out' => 'C',      'unicode' => 'C', 'desc' => 'C', },
#       'CHAR D'                                  => { 'out' => 'D',      'unicode' => 'D', 'desc' => 'D', },
#       'CHAR E'                                  => { 'out' => 'E',      'unicode' => 'E', 'desc' => 'E', },
#       'CHAR F'                                  => { 'out' => 'F',      'unicode' => 'F', 'desc' => 'F', },
#       'CHAR G'                                  => { 'out' => 'G',      'unicode' => 'G', 'desc' => 'G', },
#       'CHAR H'                                  => { 'out' => 'H',      'unicode' => 'H', 'desc' => 'H', },
#       'CHAR I'                                  => { 'out' => 'I',      'unicode' => 'I', 'desc' => 'I', },
#       'CHAR J'                                  => { 'out' => 'J',      'unicode' => 'J', 'desc' => 'J', },
#       'CHAR K'                                  => { 'out' => 'K',      'unicode' => 'K', 'desc' => 'K', },
#       'CHAR L'                                  => { 'out' => 'L',      'unicode' => 'L', 'desc' => 'L', },
#       'CHAR M'                                  => { 'out' => 'M',      'unicode' => 'M', 'desc' => 'M', },
#       'CHAR N'                                  => { 'out' => 'N',      'unicode' => 'N', 'desc' => 'N', },
#       'CHAR O'                                  => { 'out' => 'O',      'unicode' => 'O', 'desc' => 'O', },
#       'CHAR P'                                  => { 'out' => 'P',      'unicode' => 'P', 'desc' => 'P', },
#       'CHAR Q'                                  => { 'out' => 'Q',      'unicode' => 'Q', 'desc' => 'Q', },
#       'CHAR R'                                  => { 'out' => 'R',      'unicode' => 'R', 'desc' => 'R', },
#       'CHAR S'                                  => { 'out' => 'S',      'unicode' => 'S', 'desc' => 'S', },
#       'CHAR T'                                  => { 'out' => 'T',      'unicode' => 'T', 'desc' => 'T', },
#       'CHAR U'                                  => { 'out' => 'U',      'unicode' => 'U', 'desc' => 'U', },
#       'CHAR V'                                  => { 'out' => 'V',      'unicode' => 'V', 'desc' => 'V', },
#       'CHAR W'                                  => { 'out' => 'W',      'unicode' => 'W', 'desc' => 'W', },
#       'CHAR X'                                  => { 'out' => 'X',      'unicode' => 'X', 'desc' => 'X', },
#       'CHAR Y'                                  => { 'out' => 'Y',      'unicode' => 'Y', 'desc' => 'Y', },
#       'CHAR Z'                                  => { 'out' => 'Z',      'unicode' => 'Z', 'desc' => 'Z', },
#       'SQUARE BRACKET LEFT'                     => { 'out' => chr(91),  'unicode' => '[', 'desc' => 'Square left bracket', },
        'BRITISH POUND'                           => { 'out' => chr(92),  'unicode' => '£', 'desc' => 'British Pound', },
#       'SQUARE BRACKET RIGHT'                    => { 'out' => chr(93),  'unicode' => ']', 'desc' => 'Square right bracket', },
        'UP ARROW'                                => { 'out' => chr(94),  'unicode' => '↑', 'desc' => 'Up Arrow', },
        'LEFT ARROW'                              => { 'out' => chr(95),  'unicode' => '←', 'desc' => 'Left Arrow', },
        'HORIZONTAL BAR'                          => { 'out' => chr(96),  'unicode' => '─', 'desc' => 'Horizontal Bar', },
        'SPADE'                                   => { 'out' => chr(97),  'unicode' => 'â™ ', 'desc' => 'Spade', },
        'VERTICAL BAR CENTER'                     => { 'out' => chr(98),  'unicode' => '│', 'desc' => 'Giant Vertical Bar', },
        'HORIZONTAL BAR DUPLICATE'                => { 'out' => chr(99),  'unicode' => '─', 'desc' => 'Horizontal Bar', },
        'HORIZONTAL BAR SMALL UPPER BIAS'         => { 'out' => chr(100), 'unicode' => '🭸', 'desc' => 'Horizontal bar with a slight upper bias', },
        'HORIZONTAL BAR LARGE UPPER BIAS'         => { 'out' => chr(101), 'unicode' => '🭶', 'desc' => 'Horizontal bar with a strong upper bias', },
        'HORIZONTAL BAR SMALL LOWER BIAS'         => { 'out' => chr(102), 'unicode' => '🭺', 'desc' => 'Horizontal bar with a slight lower bias', },
        'VERTICAL BAR SMALL LEFT BIAS'            => { 'out' => chr(103), 'unicode' => ' ', 'desc' => 'Vertical bar with a slight left bias', },
        'VERTICAL BAR SMALL RIGHT BIAS'           => { 'out' => chr(104), 'unicode' => ' ', 'desc' => 'Vertical bar with a slight right bias', },
        'TOP RIGHT ROUNDED CORNER'                => { 'out' => chr(105), 'unicode' => 'â•®', 'desc' => 'Top Right Rounded Corner', },
        'BOTTOM LEFT ROUNDED CORNER'              => { 'out' => chr(106), 'unicode' => 'â•°', 'desc' => 'Bottom Left Rounded Corner', },
        'BOTTOM RIGHT ROUNDED CORNER'             => { 'out' => chr(107), 'unicode' => '╯', 'desc' => 'Bottom Right Rounded Corner', },
        'BOTTOM LEFT RIGHT ANGLE'                 => { 'out' => chr(108), 'unicode' => '⎿', 'desc' => 'Bottom left right angle', },
        'GIANT BACKSLASH'                         => { 'out' => chr(109), 'unicode' => '╲', 'desc' => 'Giant Backslash', },
        'GIANT FORWARD SLASH'                     => { 'out' => chr(110), 'unicode' => '╱', 'desc' => 'Giant Forward Slash', },
        'TOP LEFT RIGHT ANGLE'                    => { 'out' => chr(111), 'unicode' => '⎾', 'desc' => 'Top left right angle', },
        'TOP RIGHT RIGHT ANGLE'                   => { 'out' => chr(112), 'unicode' => ' ', 'desc' => 'Top right right angle', },
        'CENTER DOT'                              => { 'out' => chr(113), 'unicode' => '•', 'desc' => 'CENTER DOT', },
        'HORIZONTAL BAR LARGE LOWER BIAS'         => { 'out' => chr(114), 'unicode' => '🭻', 'desc' => 'Horizontal bar with a strong lower bias', },
        'HEART'                                   => { 'out' => chr(115), 'unicode' => '♥', 'desc' => 'Heart', },
        'VERTICAL BAR LARGE LEFT BIAS'            => { 'out' => chr(116), 'unicode' => ' ', 'desc' => 'Vertical bar with a strong left bias', },
        'TOP LEFT ROUNDED CORNER'                 => { 'out' => chr(117), 'unicode' => 'â•­', 'desc' => 'Top Left Rounded Corner', },
        'GIANT X'                                 => { 'out' => chr(118), 'unicode' => '╳', 'desc' => 'Giant X', },
        'THIN CIRCLE'                             => { 'out' => chr(119), 'unicode' => 'â—‹', 'desc' => 'Thin Circle', },
        'CLUB'                                    => { 'out' => chr(120), 'unicode' => '♣', 'desc' => 'Club', },
        'VERTICAL BAR LARGE RIGHT BIAS'           => { 'out' => chr(121), 'unicode' => ' ', 'desc' => 'Vertical bar with a strong right bias', },
        'DIAMOND'                                 => { 'out' => chr(122), 'unicode' => '♦', 'desc' => 'Diamond', },
        'CROSS BAR'                               => { 'out' => chr(123), 'unicode' => '┼', 'desc' => 'Cross Bar', },
        'SHADE LEFT'                              => { 'out' => chr(124), 'unicode' => '🮌', 'desc' => 'Shade left', },
        'VERTICAL BAR'                            => { 'out' => chr(125), 'unicode' => '┃', 'desc' => 'Vertical bar', },
        'PI'                                      => { 'out' => chr(126), 'unicode' => 'Ï€', 'desc' => 'Pi symbol', },
        'BOTTOM LEFT WEDGE'                       => { 'out' => chr(127), 'unicode' => 'â—¥', 'desc' => 'Bottom Left Wedge', },
#       'NULL 128'                                => { 'out' => chr(128), 'unicode' => ' ', 'desc' => 'NOP 128', },
        'ORANGE'                                  => { 'out' => chr(129), 'unicode' => ' ', 'desc' => 'Orange' },
#       'NULL 130'                                => { 'out' => chr(130), 'unicode' => ' ', 'desc' => 'NOP 130', },
        'RUN'                                     => { 'out' => chr(131), 'unicode' => ' ', 'desc' => 'Run key', },
#       'NULL 132'                                => { 'out' => chr(132), 'unicode' => ' ', 'desc' => 'NOP 132', },
#       'F1'                                      => { 'out' => chr(133), 'unicode' => ' ', 'desc' => 'F1', },
#       'F3'                                      => { 'out' => chr(134), 'unicode' => ' ', 'desc' => 'F3', },
#       'F5'                                      => { 'out' => chr(135), 'unicode' => ' ', 'desc' => 'F5', },
#       'F7'                                      => { 'out' => chr(136), 'unicode' => ' ', 'desc' => 'F7', },
#       'F2'                                      => { 'out' => chr(137), 'unicode' => ' ', 'desc' => 'F2', },
#       'F4'                                      => { 'out' => chr(138), 'unicode' => ' ', 'desc' => 'F4', },
#       'F6'                                      => { 'out' => chr(139), 'unicode' => ' ', 'desc' => 'F6', },
#       'F8'                                      => { 'out' => chr(140), 'unicode' => ' ', 'desc' => 'F8', },
        'SHIFT RETURN'                            => { 'out' => chr(141), 'unicode' => ' ', 'desc' => 'Shift-return', },
        'UPPERCASE'                               => { 'out' => chr(142), 'unicode' => ' ', 'desc' => 'Uppercase', },
#       'NULL 143'                                => { 'out' => chr(143), 'unicode' => ' ', 'desc' => 'NOP 143', },
        'BLACK'                                   => { 'out' => chr(144), 'unicode' => ' ', 'desc' => 'Black', },
        'UP'                                      => { 'out' => chr(145), 'unicode' => ' ', 'desc' => 'Cursor up', },
        'REVERSE OFF'                             => { 'out' => chr(146), 'unicode' => ' ', 'desc' => 'Reverse off', },
        'CLEAR'                                   => { 'out' => chr(147), 'unicode' => ' ', 'desc' => 'Clear', },
        'INSERT'                                  => { 'out' => chr(148), 'unicode' => ' ', 'desc' => 'Insert', },
        'BROWN'                                   => { 'out' => chr(149), 'unicode' => ' ', 'desc' => 'Brown', },
        'LIGHT RED'                               => { 'out' => chr(150), 'unicode' => ' ', 'desc' => 'Light/bright red', },
        'DARK GRAY'                               => { 'out' => chr(151), 'unicode' => ' ', 'desc' => 'Dark gray', },
        'MEDIUM GRAY'                             => { 'out' => chr(152), 'unicode' => ' ', 'desc' => 'Medium gray', },
        'LIGHT GREEN'                             => { 'out' => chr(153), 'unicode' => ' ', 'desc' => 'Light/bright green', },
        'LIGHT BLUE'                              => { 'out' => chr(154), 'unicode' => ' ', 'desc' => 'Light/bright blue', },
        'LIGHT GRAY'                              => { 'out' => chr(155), 'unicode' => ' ', 'desc' => 'Light gray', },
        'PURPLE'                                  => { 'out' => chr(156), 'unicode' => ' ', 'desc' => 'Purple', },
        'LEFT'                                    => { 'out' => chr(157), 'unicode' => ' ', 'desc' => 'Cursor left', },
        'YELLOW'                                  => { 'out' => chr(158), 'unicode' => ' ', 'desc' => 'Yellow', },
        'CYAN'                                    => { 'out' => chr(159), 'unicode' => ' ', 'desc' => 'Cyan', },
        'REVERSE SPACE'                           => { 'out' => chr(160), 'unicode' => "$inv $ni", 'desc' => 'Dithered Box Full', },
        'REVERSE LEFT HALF'                       => { 'out' => chr(161), 'unicode' => $inv . '▌' . $ni, 'desc' => 'Reversed Left Half', },
        'REVERSE BOTTOM BOX'                      => { 'out' => chr(162), 'unicode' => $inv . 'â–„' . $ni, 'desc' => 'Reversed Bottom Box', },
        'REVERSE TOP HORIZONTAL BAR'              => { 'out' => chr(163), 'unicode' => $inv . 'â–”' . $ni, 'desc' => 'Reversed Top Horizontal Bar', },
        'REVERSE BOTTOM HORIZONTAL BAR'           => { 'out' => chr(164), 'unicode' => $inv . '▁' . $ni, 'desc' => 'Reversed Bottom Horizontal Bar', },
        'REVERSE LEFT VERTICAL BAR'               => { 'out' => chr(165), 'unicode' => $inv . 'â–Ž' . $ni, 'desc' => 'Reversed Left Vertical Bar', },
        'REVERSE DITHERED BOX'                    => { 'out' => chr(166), 'unicode' => $inv . 'â–’' . $ni, 'desc' => 'Reversed Dithered Box', },
        'REVERSE RIGHT VERTICAL BAR'              => { 'out' => chr(167), 'unicode' => $inv . '🮈' . $ni, 'desc' => 'Reversed Right Vertical Bar', },
        'REVERSE DITHERED BOTTOM'                 => { 'out' => chr(168), 'unicode' => $inv . '🮏' . $ni, 'desc' => 'Reversed Dithered Left', },
        'REVERSE BOTTOM RIGHT WEDGE'              => { 'out' => chr(169), 'unicode' => $inv . 'â—¤' . $ni, 'desc' => 'Reversed Bottom Right Wedge', },
        'REVERSE VERTICAL BAR RIGHT'              => { 'out' => chr(170), 'unicode' => $inv . '🮈' . $ni, 'desc' => 'Reversed Vertical bar flushed right', },
        'REVERSE VERTICAL BAR MIDDLE LEFT'        => { 'out' => chr(171), 'unicode' => $inv . '├' . $ni, 'desc' => 'Reversed Vertical Bar Middle Left', },
        'REVERSE BOTTOM RIGHT BOX'                => { 'out' => chr(172), 'unicode' => $inv . 'â–—' . $ni, 'desc' => 'Reversed Bottom Right Box', },
        'REVERSE BOTTOM LEFT CORNER'              => { 'out' => chr(173), 'unicode' => $inv . 'â””' . $ni, 'desc' => 'Reversed Bottom Left Corner', },
        'REVERSE TOP RIGHT CORNER'                => { 'out' => chr(174), 'unicode' => $inv . '┐' . $ni, 'desc' => 'Reversed Top Right Corner', },
        'REVERSE HORIZONTAL BAR BOTTOM'           => { 'out' => chr(175), 'unicode' => $inv . 'â–‚' . $ni, 'desc' => 'Reversed Horizontal Bar Bottom', },
        'REVERSE TOP LEFT CORNER'                 => { 'out' => chr(176), 'unicode' => $inv . '┌' . $ni, 'desc' => 'Reversed Top Left Corner', },
        'REVERSE HORIZONTAL BAR MIDDLE BOTTOM'    => { 'out' => chr(177), 'unicode' => $inv . 'â”´' . $ni, 'desc' => 'Reversed Horizontal Bar Middle Bottom', },
        'REVERSE HORIZONTAL BAR MIDDLE TOP'       => { 'out' => chr(178), 'unicode' => $inv . '┬' . $ni, 'desc' => 'Reversed Horizontal Bar Middle Top', },
        'REVERSE VERTICAL BAR MIDDLE RIGHT'       => { 'out' => chr(179), 'unicode' => $inv . '┤' . $ni, 'desc' => 'Reversed Vertical Bar Middle Right', },
        'REVERSE VERTICAL BOX LEFT'               => { 'out' => chr(180), 'unicode' => $inv . '▍' . $ni, 'desc' => 'Reversed Vertical Box Left', },
        'REVERSE LEFT HALF BOX'                   => { 'out' => chr(181), 'unicode' => $inv . '▌' . $ni, 'desc' => 'Reversed Left Half Box', },
        'REVERSE RIGHT HALF BOX'                  => { 'out' => chr(182), 'unicode' => $inv . '🮈' . $ni, 'desc' => 'Reversed Right half box', },
        'REVERSE HORIZONTAL BAR TOP'              => { 'out' => chr(183), 'unicode' => $inv . '🮂' . $ni, 'desc' => 'Reversed Horizontal bar top', },
        'REVERSE HORIZONTAL BAR THICK TOP'        => { 'out' => chr(184), 'unicode' => $inv . '🮃' . $ni, 'desc' => 'Reversed Horizontal bar thick top', },
        'REVERSE HORIZONTAL BAR THICK BOTTOM'     => { 'out' => chr(185), 'unicode' => $inv . 'â–ƒ' . $ni, 'desc' => 'Reversed Horizontal bar thick bottom', },
        'REVERSE BOTTOM RIGHT RIGHT ANGLE'        => { 'out' => chr(186), 'unicode' => $inv . '🭿' . $ni, 'desc' => 'Reversed Bottom right right angle', },
        'REVERSE BOTTOM LEFT BOX'                 => { 'out' => chr(187), 'unicode' => $inv . 'â––' . $ni, 'desc' => 'Reversed Bottom Left Box', },
        'REVERSE TOP RIGHT BOX'                   => { 'out' => chr(188), 'unicode' => $inv . '▝' . $ni, 'desc' => 'Reversed Top Right Box', },
        'REVERSE BOTTOM RIGHT CORNER'             => { 'out' => chr(189), 'unicode' => $inv . '┘' . $ni, 'desc' => 'Reversed Bottom Right Corner', },
        'REVERSE TOP LEFT BOX'                    => { 'out' => chr(190), 'unicode' => $inv . 'â–˜' . $ni, 'desc' => 'Reversed Top Left Box', },
        'REVERSE TOP LEFT BOTTOM RIGHT BOX'       => { 'out' => chr(191), 'unicode' => $inv . 'â–š' . $ni, 'desc' => 'Reversed Top Left Bottom Right Box', },
        'REVERSE HORIZONTAL BAR'                  => { 'out' => chr(192), 'unicode' => $inv . '🭹' . $ni, 'desc' => 'Reversed Horizontal bar', },
#       'REVERSE SPADE DUPLICATE'                 => { 'out' => chr(193), 'unicode' => $inv . 'â™ ' . $ni, 'desc' => 'Reversed Spade duplicate', },
#       'REVERSE VERTICAL BAR CENTER DUPLICATE'   => { 'out' => chr(194), 'unicode' => $inv . '│' . $ni, 'desc' => 'Reversed Giant Vertical Bar duplicate', },
        'REVERSE HORIZONTAL BAR DUPLICATE'        => { 'out' => chr(195), 'unicode' => $inv . '─' . $ni, 'desc' => 'Reversed Horizontal Bar duplicate', },
        'REVERSE HORIZONTAL BAR SMALL UPPER BIAS' => { 'out' => chr(196), 'unicode' => $inv . '🭸' . $ni, 'desc' => 'Reversed Horizontal bar with a slight upper bias', },
        'REVERSE HORIZONTAL BAR LARGE UPPER BIAS' => { 'out' => chr(197), 'unicode' => $inv . '🭶' . $ni, 'desc' => 'Reversed Horizontal bar with a strong upper bias', },
        'REVERSE HORIZONTAL BAR SMALL LOWER BIAS' => { 'out' => chr(198), 'unicode' => $inv . '🭺' . $ni, 'desc' => 'Reversed Horizontal bar with a slight lower bias', },
        'REVERSE VERTICAL BAR SMALL LEFT BIAS'    => { 'out' => chr(199), 'unicode' => $inv . ' ' . $ni, 'desc' => 'Reversed Vertical bar with a slight left bias', },
        'REVERSE VERTICAL BAR SMALL RIGHT BIAS'   => { 'out' => chr(200), 'unicode' => $inv . ' ' . $ni, 'desc' => 'Reversed Vertical bar with a slight right bias', },
        'REVERSE TOP RIGHT ROUNDED CORNER'        => { 'out' => chr(201), 'unicode' => $inv . 'â•®' . $ni, 'desc' => 'Reversed Top Right Rounded Corner', },
        'REVERSE BOTTOM LEFT ROUNDED CORNER'      => { 'out' => chr(202), 'unicode' => $inv . 'â•°' . $ni, 'desc' => 'Reversed Bottom Left Rounded Corner', },
        'REVERSE BOTTOM RIGHT ROUNDED CORNER'     => { 'out' => chr(203), 'unicode' => $inv . '╯' . $ni, 'desc' => 'Reversed Bottom Right Rounded Corner', },
        'REVERSE BOTTOM LEFT RIGHT ANGLE'         => { 'out' => chr(204), 'unicode' => $inv . '⎿' . $ni, 'desc' => 'Reversed Bottom left right angle', },
        'REVERSE GIANT BACKSLASH'                 => { 'out' => chr(205), 'unicode' => $inv . '╲' . $ni, 'desc' => 'Reversed Giant Backslash', },
        'REVERSE GIANT FORWARD SLASH'             => { 'out' => chr(206), 'unicode' => $inv . '╱' . $ni, 'desc' => 'Reversed Giant Forward Slash', },
        'REVERSE TOP LEFT RIGHT ANGLE'            => { 'out' => chr(207), 'unicode' => $inv . '⎾' . $ni, 'desc' => 'Reversed Top left right angle', },
        'REVERSE TOP RIGHT RIGHT ANGLE'           => { 'out' => chr(208), 'unicode' => $inv . ' ' . $ni, 'desc' => 'Reversed Top right right angle', },
        'REVERSE CENTER DOT'                      => { 'out' => chr(209), 'unicode' => $inv . '•' . $ni, 'desc' => 'Reversed CENTER DOT', },
        'REVERSE HORIZONTAL BAR LARGE LOWER BIAS' => { 'out' => chr(210), 'unicode' => $inv . '🭻' . $ni, 'desc' => 'Reversed Horizontal bar with a strong lower bias', },
        'REVERSE HEART'                           => { 'out' => chr(211), 'unicode' => $inv . '♥' . $ni, 'desc' => 'Reversed Heart', },
        'REVERSE VERTICAL BAR LARGE LEFT BIAS'    => { 'out' => chr(212), 'unicode' => $inv . ' ' . $ni, 'desc' => 'Reversed Vertical bar with a strong left bias', },
        'REVERSE TOP LEFT ROUNDED CORNER'         => { 'out' => chr(213), 'unicode' => $inv . 'â•­' . $ni, 'desc' => 'Reversed Top Left Rounded Corner', },
        'REVERSE GIANT X'                         => { 'out' => chr(214), 'unicode' => $inv . '╳' . $ni, 'desc' => 'Reversed Giant X', },
        'REVERSE THIN CIRCLE'                     => { 'out' => chr(215), 'unicode' => $inv . 'â—‹' . $ni, 'desc' => 'Reversed Thin Circle', },
        'REVERSE CLUB'                            => { 'out' => chr(216), 'unicode' => $inv . '♣' . $ni, 'desc' => 'Reversed Club', },
        'REVERSE VERTICAL BAR LARGE RIGHT BIAS'   => { 'out' => chr(217), 'unicode' => $inv . ' ' . $ni, 'desc' => 'Reversed Vertical bar with a strong right bias', },
        'REVERSE DIAMOND'                         => { 'out' => chr(218), 'unicode' => $inv . '♦' . $ni, 'desc' => 'Reversed Diamond', },
        'REVERSE CROSS BAR'                       => { 'out' => chr(219), 'unicode' => $inv . '┼' . $ni, 'desc' => 'Reversed Cross Bar', },
        'REVERSE SHADE LEFT'                      => { 'out' => chr(220), 'unicode' => $inv . '🮌' . $ni, 'desc' => 'Reversed Shade left', },
        'REVERSE VERTICAL BAR'                    => { 'out' => chr(221), 'unicode' => $inv . '┃' . $ni, 'desc' => 'Reversed Vertical bar', },
        'REVERSE PI'                              => { 'out' => chr(222), 'unicode' => $inv . 'Ï€' . $ni, 'desc' => 'Reversed Pi symbol', },
        'REVERSE BOTTOM LEFT WEDGE'               => { 'out' => chr(223), 'unicode' => $inv . 'â—¥' . $ni, 'desc' => 'Reversed Bottom Left Wedge', },
#       'REVERSE SPACE 2'                         => { 'out' => chr(224), 'unicode' => $inv . ' ' . $ni, 'desc' => 'Reversed Dithered Box Full duplicate', },
#       'REVERSE LEFT HALF 2'                     => { 'out' => chr(225), 'unicode' => $inv . '▌' . $ni, 'desc' => 'Reversed Left Half duplicate', },
#       'REVERSE BOTTOM BOX 2'                    => { 'out' => chr(226), 'unicode' => $inv . 'â–„' . $ni, 'desc' => 'Reversed Bottom Box duplicate', },
#       'REVERSE TOP HORIZONTAL BAR 2'            => { 'out' => chr(227), 'unicode' => $inv . 'â–”' . $ni, 'desc' => 'Reversed Top Horizontal Bar duplicate', },
#       'REVERSE BOTTOM HORIZONTAL BAR 2'         => { 'out' => chr(228), 'unicode' => $inv . '▁' . $ni, 'desc' => 'Reversed Bottom Horizontal Bar duplicate', },
#       'REVERSE LEFT VERTICAL BAR 2'             => { 'out' => chr(229), 'unicode' => $inv . 'â–Ž' . $ni, 'desc' => 'Reversed Left Vertical Bar duplicate', },
#       'REVERSE DITHERED BOX 2'                  => { 'out' => chr(230), 'unicode' => $inv . 'â–’' . $ni, 'desc' => 'Reversed Dithered Box duplicate', },
#       'REVERSE RIGHT VERTICAL BAR 2'            => { 'out' => chr(231), 'unicode' => $inv . '🮈' . $ni, 'desc' => 'Reversed Right Vertical Bar duplicate', },
#       'REVERSE DITHERED BOTTOM 2'               => { 'out' => chr(232), 'unicode' => $inv . '🮏' . $ni, 'desc' => 'Reversed Dithered Left duplicate', },
#       'REVERSE BOTTOM RIGHT WEDGE 2'            => { 'out' => chr(233), 'unicode' => $inv . 'â—¤' . $ni, 'desc' => 'Reversed Bottom Right Wedge duplicate', },
#       'REVERSE VERTICAL BAR RIGHT 2'            => { 'out' => chr(234), 'unicode' => $inv . '🮈' . $ni, 'desc' => 'Reversed Vertical bar flushed right duplicate', },
#       'REVERSE VERTICAL BAR MIDDLE LEFT 2'      => { 'out' => chr(235), 'unicode' => $inv . '├' . $ni, 'desc' => 'Reversed Vertical Bar Middle Left duplicate', },
#       'REVERSE BOTTOM RIGHT BOX 2'              => { 'out' => chr(236), 'unicode' => $inv . 'â–—' . $ni, 'desc' => 'Reversed Bottom Right Box duplicate', },
#       'REVERSE BOTTOM LEFT CORNER 2'            => { 'out' => chr(237), 'unicode' => $inv . 'â””' . $ni, 'desc' => 'Reversed Bottom Left Corner duplicate', },
#       'REVERSE TOP RIGHT CORNER 2'              => { 'out' => chr(238), 'unicode' => $inv . '┐' . $ni, 'desc' => 'Reversed Top Right Corner duplicate', },
#       'REVERSE HORIZONTAL BAR BOTTOM 2'         => { 'out' => chr(239), 'unicode' => $inv . 'â–‚' . $ni, 'desc' => 'Reversed Horizontal Bar Bottom duplicate', },
#       'REVERSE TOP LEFT CORNER 2'               => { 'out' => chr(240), 'unicode' => $inv . '┌' . $ni, 'desc' => 'Reversed Top Left Corner duplicate', },
#       'REVERSE HORIZONTAL BAR MIDDLE BOTTOM 2'  => { 'out' => chr(241), 'unicode' => $inv . 'â”´' . $ni, 'desc' => 'Reversed Horizontal Bar Middle Bottom duplicate', },
#       'REVERSE HORIZONTAL BAR MIDDLE TOP 2'     => { 'out' => chr(242), 'unicode' => $inv . '┬' . $ni, 'desc' => 'Reversed Horizontal Bar Middle Top duplicate', },
#       'REVERSE VERTICAL BAR MIDDLE RIGHT 2'     => { 'out' => chr(243), 'unicode' => $inv . '┤' . $ni, 'desc' => 'Reversed Vertical Bar Middle Right duplicate', },
#       'REVERSE VERTICAL BOX LEFT 2'             => { 'out' => chr(244), 'unicode' => $inv . '▍' . $ni, 'desc' => 'Reversed Vertical Box Left duplicate', },
#       'REVERSE LEFT HALF BOX 2'                 => { 'out' => chr(245), 'unicode' => $inv . '▌' . $ni, 'desc' => 'Reversed Left Half Box duplicate', },
#       'REVERSE RIGHT HALF BOX 2'                => { 'out' => chr(246), 'unicode' => $inv . '🮈' . $ni, 'desc' => 'Reversed Right half box duplicate', },
#       'REVERSE HORIZONTAL BAR TOP 2'            => { 'out' => chr(247), 'unicode' => $inv . '🮂' . $ni, 'desc' => 'Reversed Horizontal bar top duplicate', },
#       'REVERSE HORIZONTAL BAR THICK TOP 2'      => { 'out' => chr(248), 'unicode' => $inv . '🮃' . $ni, 'desc' => 'Reversed Horizontal bar thick top duplicate', },
#       'REVERSE HORIZONTAL BAR THICK BOTTOM 2'   => { 'out' => chr(249), 'unicode' => $inv . 'â–ƒ' . $ni, 'desc' => 'Reversed Horizontal bar thick bottom duplicate', },
#       'REVERSE BOTTOM RIGHT RIGHT ANGLE 2'      => { 'out' => chr(250), 'unicode' => $inv . '🭿' . $ni, 'desc' => 'Reversed Bottom right right angle duplicate', },
#       'REVERSE BOTTOM LEFT BOX 2'               => { 'out' => chr(251), 'unicode' => $inv . 'â––' . $ni, 'desc' => 'Reversed Bottom Left Box duplicate', },
#       'REVERSE TOP RIGHT BOX 2'                 => { 'out' => chr(252), 'unicode' => $inv . '▝' . $ni, 'desc' => 'Reversed Top Right Box duplicate', },
#       'REVERSE BOTTOM RIGHT CORNER 2'           => { 'out' => chr(253), 'unicode' => $inv . '┘' . $ni, 'desc' => 'Reversed Bottom Right Corner duplicate', },
#       'REVERSE TOP LEFT BOX 2'                  => { 'out' => chr(254), 'unicode' => $inv . 'â–˜' . $ni, 'desc' => 'Reversed Top Left Box duplicate', },
#       'REVERSE PI 2'                            => { 'out' => chr(255), 'unicode' => $inv . 'Ï€' . $ni, 'desc' => 'Reversed Pi symbol duplicate', },
    };
    $self->{'debug'}->DEBUG(['End PETSCII Initialize']);
    return ($self);
} ## end sub petscii_initialize

sub petscii_output {
    my $self = shift;
    my $text = shift;

    $self->{'debug'}->DEBUG(['Start PETSCII Output']);

lib/BBS/Universal/SysOp.pm  view on Meta::CPAN

        $text .= "[% ORANGE %]║[% YELLOW  %]    ## ## ##          [% BRIGHT BLUE %]╔═══╗ ╒═╦═╕ ╔═══╗ ╔═══╗ ╔═══╕ ╒═╦═╕ ╒═╦═╕       [% YELLOW  %]    ## ## ##    [% ORANGE %]║[% ...
        $text .= "[% ORANGE %]║[% GREEN   %]    ## ## ##          [% BRIGHT BLUE %]║   ║   ║   ║   ║ ║   ╜ ║       ║     ║         [% GREEN   %]    ## ## ##    [% ORANGE %]║[% RESET %]\n";
        $text .= "[% ORANGE %]║[% CYAN    %]    ## ## ##          [% BRIGHT BLUE %]╠═══╣   ║   ╠═══╣ ╚═══╗ ║       ║     ║         [% CYAN    %]    ## ## ##    [% ORANGE %]║[% RESET %]\n";
        $text .= "[% ORANGE %]â•‘[% BLUE    %]  ###  ##  ###        [% BRIGHT BLUE %]â•‘   â•‘   â•‘   â•‘   â•‘ â•“   â•‘ â•‘       â•‘     â•‘         [% BLUE    %]  ###  ##  ###  [% ORANGE %]â•‘[% RESET %]\n";
        $text .= "[% ORANGE %]║[% MAGENTA %] ###   ##   ###       [% BRIGHT BLUE %]╜   ╙   ╙   ╜   ╙ ╚═══╝ ╚═══╛ ╘═╩═╛ ╘═╩═╛       [% MAGENTA %] ###   ##   ### [% ORANGE %]║[% RESET %]\n";
        $text .= '[% ORANGE %]╠══════╦' . '═' x 39 . '╦' . '═' x 39 . '╣[% RESET %]' . "\n";
        $text .= "[% ORANGE %]â•‘[% BRIGHT YELLOW %] CHAR [% ORANGE %]â•‘[% BRIGHT YELLOW %] ATASCII TOKENS                        [% ORANGE %]â•‘[% BRIGHT YELLOW %] DESCRIPTION                           [% ORANGE %]â•‘[% RESET %]\n";
        $text .= '[% ORANGE %]╠══════╬' . '═' x 39 . '╬' . '═' x 39 . '╣[% RESET %]' . "\n";

        foreach my $name (@atatkn) {
            $text .= '[% ORANGE %]â•‘[% RESET %]  ' . $self->{'atascii_meta'}->{$name}->{'unicode'} . '   [% ORANGE %]â•‘[% RESET %] ' . sprintf('%-37s %s %-37s %s', $name, '[% ORANGE %]â•‘[% RESET %]', $self->{'atascii_meta'}->{$name}->{'desc'}, '[%...
        }
		$text .= '[% ORANGE %]â•‘[% RESET %] ' . '[% HORIZONTAL BAR %]' x 4 . ' [% ORANGE %]â•‘[% RESET %] ' . sprintf('%-37s %s %-37s %s', 'HORIZONTAL RULE', '[% ORANGE %]â•‘[% RESET %]', 'Horizontal rule', '[% ORANGE %]â•‘[% RESET %]') . "\n";

        $text .= "[% ORANGE %]╚══════╩═══════════════════════════════════════╩═════════════════════════â...

    } elsif ($mode && $mode eq 'PETSCII') {
        # ─ ━ │ ┃ ┄ ┅ ┆ ┇ ┈ ┉ ┊ ┋ ┌ ┍ ┎ ┏ ┐ ┑ ┒ ┓ └ ┕ ┖ ┗ ┘ ┙ ┚ ┛ ├ ┝ ┞ ┟ ┠ ┡ ┢ ┣ ┤ ┥ ┦ ┧ ┨ ┩ ┪ ┫ ┬ ┭ ┮ ┯ ┰ ┱ ┲ ┳ ┴ ┵ ┶ ┷ ┸ ┹ ┺ ┻ ...
		# 🬀 🬁 🬂 🬃 🬄 🬅 🬆 🬇 🬈 🬉 🬊 🬋 🬌 🬍 🬎 🬏 🬐 🬑 🬒 🬓 🬔 🬕 🬖 🬗 🬘 🬙 🬚 🬛 🬜 🬝 🬞 🬟 🬠 🬡 🬢 🬣 🬤 🬥 🬦 🬧 🬨 🬩 🬪 🬫 🬬 🬭 🬮 🬯 🬰 ð...
		#  🭰 🭱 🭲 🭳 🭴 🭵 🭶 🭷 🭸 🭹 🭺 🭻 🭼 🭽 🭾 🭿 🮀 🮁 🮂 🮃 🮄 🮅 🮆 🮇 🮈 🮉 🮊 🮋 🮌 🮍 🮎 🮏 🮐 🮑 🮒 🮔 🮕 🮖 🮗 🮘 🮙 🮚 🮛 🮜 🮝 🮞 🮟 🮠 🮡 ...

lib/BBS/Universal/SysOp.pm  view on Meta::CPAN

        $text .= '[% ORANGE %]â•‘[% RESET %] [% BLUE %]d8P  Y8 [% RESET                                           %][% BRIGHT WHITE %]                          8    8 8       8   8      8    " 8  8                        [% BLUE %]d8P  Y8 [% RESET %]...
        $text .= '[% ORANGE %]║[% RESET %] [% BLUE %]8P     🮅🮅🮅🭚[% RESET                                           %][% BRIGHT WHITE %]                       8eeee8 8eeee   8e  8eeeee 8e     8e 8e                       [% BLUE %]8P     ...
        $text .= '[% ORANGE %]║[% RESET %] [% BLUE %]8b     [% RED %][% REVERSE %]🮂🮂🮂[% RESET %][% RED %]🬿[% RESET %][% BRIGHT WHITE %]                       88     88      88      88 88     88 88                       [% BLUE %]8b     ...
        $text .= '[% ORANGE %]â•‘[% RESET %] [% BLUE %]Y8b  d8 [% RESET                                           %][% BRIGHT WHITE %]                          88     88      88  e   88 88   e 88 88                       [% BLUE %]Y8b  d8 [% RESET %]...
        $text .= '[% ORANGE %]â•‘[% RESET %] [% BLUE %]' . " `Y88P'" . '[% RESET                                 %][% BRIGHT WHITE %]                           88     88eee   88  8eee88 88eee8 88 88                       ' . "[% BLUE %] `Y88P'" . '[%...
        $text .= '[% ORANGE %]╠══════╦' . '═' x 50 . '╦' . '═' x 50 . '╣[% RESET %]' . "\n";
        $text .= '[% ORANGE %]â•‘[% BRIGHT YELLOW %] CHAR [% ORANGE %]â•‘[% BRIGHT YELLOW %] PETSCII TOKENS                                   [% ORANGE %]â•‘[% BRIGHT YELLOW %] DESCRIPTION                                      [% ORANGE %]â•‘[% RESET ...
        $text .= '[% ORANGE %]╠══════╬' . '═' x 50 . '╬' . '═' x 50 . '╣[% RESET %]' . "\n";

        foreach my $name (@pettkn) {
            $text .= '[% ORANGE %]â•‘[% RESET %]  ' . $self->{'petscii_meta'}->{$name}->{'unicode'} . '   [% ORANGE %]â•‘[% RESET %] ' . sprintf('%-48s %s %-48s %s', $name, '[% ORANGE %]â•‘[% RESET %]', $self->{'petscii_meta'}->{$name}->{'desc'}, '[%...
        }
        $text .= '[% ORANGE %]â•‘[% RESET %] ' . '[% HORIZONTAL BAR %]' x 4 . ' [% ORANGE %]â•‘[% RESET %] ' . sprintf('%-48s %s %-48s %s', 'HORIZONTAL RULE color', '[% ORANGE %]â•‘[% RESET %]', 'Horizontal rule in specified color', '[% ORANGE %]â•‘[...

        $text .= '[% ORANGE %]╚══════╩' . '═' x 50 . '╩' . '═' x 50 . '╝[% RESET %]' . "\n";

        $text =~ s/│ (WHITE)/│ \[\% BRIGHT WHITE \%\]$1\[\% RESET \%\]/g;
        $text =~ s/│ (YELLOW)/│ \[\% YELLOW \%\]$1\[\% RESET \%\]/g;
        $text =~ s/│ (CYAN)/│ \[\% CYAN \%\]$1\[\% RESET \%\]/g;
        $text =~ s/│ (GREEN)/│ \[\% GREEN \%\]$1\[\% RESET \%\]/g;
        $text =~ s/│ (PINK)/│ \[\% PINK \%\]$1\[\% RESET \%\]/g;



( run in 2.198 seconds using v1.01-cache-2.11-cpan-cdf2f3d4e48 )