164 lines
5.7 KiB
Perl
164 lines
5.7 KiB
Perl
#!/usr/bin/perl -w
|
|
# $XTermId: nrcs.pl,v 1.10 2013/09/08 19:46:07 tom Exp $
|
|
# -----------------------------------------------------------------------------
|
|
# this file is part of xterm
|
|
#
|
|
# Copyright 2013 by Thomas E. Dickey
|
|
#
|
|
# All Rights Reserved
|
|
#
|
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
# copy of this software and associated documentation files (the
|
|
# "Software"), to deal in the Software without restriction, including
|
|
# without limitation the rights to use, copy, modify, merge, publish,
|
|
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
# permit persons to whom the Software is furnished to do so, subject to
|
|
# the following conditions:
|
|
#
|
|
# The above copyright notice and this permission notice shall be included
|
|
# in all copies or substantial portions of the Software.
|
|
#
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
# IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
|
|
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
#
|
|
# Except as contained in this notice, the name(s) of the above copyright
|
|
# holders shall not be used in advertising or otherwise to promote the
|
|
# sale, use or other dealings in this Software without prior written
|
|
# authorization.
|
|
# -----------------------------------------------------------------------------
|
|
# This is a more direct way of exercising character sets than vttest.
|
|
|
|
use strict;
|
|
use File::Temp qw/ tempdir /;
|
|
|
|
our $prepare_GL = "\x1bo"; # Invoke the G3 Character Set as GL (LS3).
|
|
our $prepare_GR = "\x1b|"; # Invoke the G3 Character Set as GR (LS3R).
|
|
our $restore_GL = "\017"; # Invoke the G1 Character Set as GR (LS1R).
|
|
our $restore_GR = "\x1b~"; # Invoke the G1 Character Set as GR (LS1R).
|
|
our $enable_NRC = "\x1b[?42h";
|
|
|
|
our $dummy;
|
|
our %level;
|
|
our %suffix;
|
|
our %short_name;
|
|
our %long_name;
|
|
|
|
sub select_G3() {
|
|
printf "\x1b+%s", shift;
|
|
}
|
|
|
|
sub show_charset($) {
|
|
my $alias = shift;
|
|
my $suffix = $suffix{$alias};
|
|
return if not $suffix;
|
|
printf $enable_NRC;
|
|
|
|
&select_G3($suffix);
|
|
printf $prepare_GL;
|
|
printf $prepare_GR;
|
|
|
|
printf "GL:\n";
|
|
for my $n ( 32 .. 126 ) {
|
|
print chr($n);
|
|
printf "\n" if ( ( ( $n + 1 ) % 32 ) == 0 );
|
|
}
|
|
printf "\nGR:\n";
|
|
for my $n ( 160 .. 255 ) {
|
|
print chr($n);
|
|
printf "\n" if ( ( ( $n + 1 ) % 32 ) == 0 );
|
|
}
|
|
|
|
do {
|
|
$dummy = `sh -c 'read dummy; echo "\$dummy"'`;
|
|
chomp $dummy;
|
|
} until $dummy =~ /^\s*$/;
|
|
|
|
printf $restore_GL;
|
|
printf $restore_GR;
|
|
}
|
|
|
|
sub list_charset($$$$) {
|
|
my $level = shift;
|
|
my $suffix = shift;
|
|
my $short_name = shift;
|
|
my $long_name = shift;
|
|
my $alias = lc $short_name;
|
|
$level{$alias} = $level;
|
|
$suffix{$alias} = $suffix;
|
|
$short_name{$alias} = $short_name;
|
|
$long_name{$alias} = $long_name;
|
|
}
|
|
|
|
sub initialize() {
|
|
&list_charset( 1, '0', "graphic", "DEC Line Drawing Set" );
|
|
&list_charset( 2, '<', "supp", "DEC Supplementary" );
|
|
&list_charset( 3, '%5', "supp_graphic", "DEC Supplementary Graphics" );
|
|
&list_charset( 3, '>', "technical", "DEC Technical" );
|
|
&list_charset( 3, 'A', "latin_1", "United Kingdom (UK)" );
|
|
&list_charset( 1, 'B', "ascii", "United States (USASCII)" );
|
|
&list_charset( 2, '4', "dutch", "Dutch" );
|
|
&list_charset( 2, '5', "finnish", "Finnish" );
|
|
&list_charset( 2, 'C', "finnish2", "Finnish" );
|
|
&list_charset( 2, 'R', "french", "French" );
|
|
&list_charset( 2, 'f', "french2", "French" );
|
|
&list_charset( 2, 'Q', "canadian", "French Canadian " );
|
|
&list_charset( 2, '9', "canadian2", "French Canadian " );
|
|
&list_charset( 2, 'K', "german", "German" );
|
|
&list_charset( 2, 'Y', "italian", "Italian" );
|
|
&list_charset( 3, '`', "danish", "Norwegian/Danish " );
|
|
&list_charset( 2, 'E', "danish2", "Norwegian/Danish" );
|
|
&list_charset( 2, '6', "danish3", "Norwegian/Danish" );
|
|
&list_charset( 3, '%6', "portuguese", "Portuguese " );
|
|
&list_charset( 2, 'Z', "spanish", "Spanish" );
|
|
&list_charset( 2, '7', "swedish", "Swedish" );
|
|
&list_charset( 2, 'H', "swedish2", "Swedish" );
|
|
&list_charset( 2, '=', "swiss", "Swiss" );
|
|
}
|
|
|
|
sub show_dialog() {
|
|
my $dir = tempdir( CLEANUP => 1 );
|
|
my $in_file = "$dir/input";
|
|
my $out_file = "$dir/output";
|
|
my $exe_file = "$dir/script";
|
|
my $rc_file = "$dir/status";
|
|
my $output = "";
|
|
my $status;
|
|
do {
|
|
open( FP, ">$in_file" ) || die("cannot create $in_file");
|
|
print FP "#!/bin/sh\n";
|
|
print FP "dialog";
|
|
printf FP "\\\n\t--default-item \"%s\"", $output if ( $output ne "" );
|
|
print FP "\\\n\t--menu \"Select a character set\" 0 0 0 ";
|
|
|
|
foreach my $key ( sort keys %short_name ) {
|
|
printf FP "\\\n\t%s \"VT%d00: %s\"", $short_name{$key},
|
|
$level{$key},
|
|
$long_name{$key};
|
|
}
|
|
printf FP "\\\n 2>$out_file\n";
|
|
printf FP "echo \$? >$rc_file\n";
|
|
close FP;
|
|
chmod 0700, $in_file;
|
|
system("$in_file");
|
|
$output = `cat $out_file`;
|
|
$status = `cat $rc_file`;
|
|
chomp $output;
|
|
chomp $status;
|
|
&show_charset($output) if ( $status == 0 );
|
|
} while ( $status ne "" and $status == 0 );
|
|
}
|
|
|
|
&initialize;
|
|
if ( $#ARGV >= 0 ) {
|
|
while ( $#ARGV >= 0 ) {
|
|
&show_charset( shift @ARGV );
|
|
}
|
|
}
|
|
else {
|
|
&show_dialog;
|
|
}
|