1a5ae21e4Smrg#!/usr/bin/perl -w 204b94745Smrg# $XTermId: nrcs.pl,v 1.10 2013/09/08 19:46:07 tom Exp $ 3a5ae21e4Smrg# ----------------------------------------------------------------------------- 4a5ae21e4Smrg# this file is part of xterm 5a5ae21e4Smrg# 6a5ae21e4Smrg# Copyright 2013 by Thomas E. Dickey 7a5ae21e4Smrg# 8a5ae21e4Smrg# All Rights Reserved 9a5ae21e4Smrg# 10a5ae21e4Smrg# Permission is hereby granted, free of charge, to any person obtaining a 11a5ae21e4Smrg# copy of this software and associated documentation files (the 12a5ae21e4Smrg# "Software"), to deal in the Software without restriction, including 13a5ae21e4Smrg# without limitation the rights to use, copy, modify, merge, publish, 14a5ae21e4Smrg# distribute, sublicense, and/or sell copies of the Software, and to 15a5ae21e4Smrg# permit persons to whom the Software is furnished to do so, subject to 16a5ae21e4Smrg# the following conditions: 17a5ae21e4Smrg# 18a5ae21e4Smrg# The above copyright notice and this permission notice shall be included 19a5ae21e4Smrg# in all copies or substantial portions of the Software. 20a5ae21e4Smrg# 21a5ae21e4Smrg# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 22a5ae21e4Smrg# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 23a5ae21e4Smrg# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 24a5ae21e4Smrg# IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY 25a5ae21e4Smrg# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 26a5ae21e4Smrg# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 27a5ae21e4Smrg# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 28a5ae21e4Smrg# 29a5ae21e4Smrg# Except as contained in this notice, the name(s) of the above copyright 30a5ae21e4Smrg# holders shall not be used in advertising or otherwise to promote the 31a5ae21e4Smrg# sale, use or other dealings in this Software without prior written 32a5ae21e4Smrg# authorization. 33a5ae21e4Smrg# ----------------------------------------------------------------------------- 34a5ae21e4Smrg# This is a more direct way of exercising character sets than vttest. 35a5ae21e4Smrg 36a5ae21e4Smrguse strict; 37a5ae21e4Smrguse File::Temp qw/ tempdir /; 38a5ae21e4Smrg 39a5ae21e4Smrgour $prepare_GL = "\x1bo"; # Invoke the G3 Character Set as GL (LS3). 40a5ae21e4Smrgour $prepare_GR = "\x1b|"; # Invoke the G3 Character Set as GR (LS3R). 41a5ae21e4Smrgour $restore_GL = "\017"; # Invoke the G1 Character Set as GR (LS1R). 42a5ae21e4Smrgour $restore_GR = "\x1b~"; # Invoke the G1 Character Set as GR (LS1R). 43a5ae21e4Smrgour $enable_NRC = "\x1b[?42h"; 44a5ae21e4Smrg 45a5ae21e4Smrgour $dummy; 46a5ae21e4Smrgour %level; 47a5ae21e4Smrgour %suffix; 48a5ae21e4Smrgour %short_name; 49a5ae21e4Smrgour %long_name; 50a5ae21e4Smrg 51a5ae21e4Smrgsub select_G3() { 52a5ae21e4Smrg printf "\x1b+%s", shift; 53a5ae21e4Smrg} 54a5ae21e4Smrg 55a5ae21e4Smrgsub show_charset($) { 56a5ae21e4Smrg my $alias = shift; 57a5ae21e4Smrg my $suffix = $suffix{$alias}; 58a5ae21e4Smrg return if not $suffix; 59a5ae21e4Smrg printf $enable_NRC; 60a5ae21e4Smrg 61a5ae21e4Smrg &select_G3($suffix); 62a5ae21e4Smrg printf $prepare_GL; 63a5ae21e4Smrg printf $prepare_GR; 64a5ae21e4Smrg 65a5ae21e4Smrg printf "GL:\n"; 66a5ae21e4Smrg for my $n ( 32 .. 126 ) { 67a5ae21e4Smrg print chr($n); 68a5ae21e4Smrg printf "\n" if ( ( ( $n + 1 ) % 32 ) == 0 ); 69a5ae21e4Smrg } 70a5ae21e4Smrg printf "\nGR:\n"; 71a5ae21e4Smrg for my $n ( 160 .. 255 ) { 72a5ae21e4Smrg print chr($n); 73a5ae21e4Smrg printf "\n" if ( ( ( $n + 1 ) % 32 ) == 0 ); 74a5ae21e4Smrg } 75a5ae21e4Smrg 76a5ae21e4Smrg do { 77a5ae21e4Smrg $dummy = `sh -c 'read dummy; echo "\$dummy"'`; 78a5ae21e4Smrg chomp $dummy; 79a5ae21e4Smrg } until $dummy =~ /^\s*$/; 80a5ae21e4Smrg 81a5ae21e4Smrg printf $restore_GL; 82a5ae21e4Smrg printf $restore_GR; 83a5ae21e4Smrg} 84a5ae21e4Smrg 85a5ae21e4Smrgsub list_charset($$$$) { 86a5ae21e4Smrg my $level = shift; 87a5ae21e4Smrg my $suffix = shift; 88a5ae21e4Smrg my $short_name = shift; 89a5ae21e4Smrg my $long_name = shift; 90a5ae21e4Smrg my $alias = lc $short_name; 91a5ae21e4Smrg $level{$alias} = $level; 92a5ae21e4Smrg $suffix{$alias} = $suffix; 93a5ae21e4Smrg $short_name{$alias} = $short_name; 94a5ae21e4Smrg $long_name{$alias} = $long_name; 95a5ae21e4Smrg} 96a5ae21e4Smrg 97a5ae21e4Smrgsub initialize() { 98a5ae21e4Smrg &list_charset( 1, '0', "graphic", "DEC Line Drawing Set" ); 99a5ae21e4Smrg &list_charset( 2, '<', "supp", "DEC Supplementary" ); 100a5ae21e4Smrg &list_charset( 3, '%5', "supp_graphic", "DEC Supplementary Graphics" ); 101a5ae21e4Smrg &list_charset( 3, '>', "technical", "DEC Technical" ); 102a5ae21e4Smrg &list_charset( 3, 'A', "latin_1", "United Kingdom (UK)" ); 103a5ae21e4Smrg &list_charset( 1, 'B', "ascii", "United States (USASCII)" ); 104a5ae21e4Smrg &list_charset( 2, '4', "dutch", "Dutch" ); 105a5ae21e4Smrg &list_charset( 2, '5', "finnish", "Finnish" ); 106a5ae21e4Smrg &list_charset( 2, 'C', "finnish2", "Finnish" ); 107a5ae21e4Smrg &list_charset( 2, 'R', "french", "French" ); 108a5ae21e4Smrg &list_charset( 2, 'f', "french2", "French" ); 109a5ae21e4Smrg &list_charset( 2, 'Q', "canadian", "French Canadian " ); 110a5ae21e4Smrg &list_charset( 2, '9', "canadian2", "French Canadian " ); 111a5ae21e4Smrg &list_charset( 2, 'K', "german", "German" ); 112a5ae21e4Smrg &list_charset( 2, 'Y', "italian", "Italian" ); 113a5ae21e4Smrg &list_charset( 3, '`', "danish", "Norwegian/Danish " ); 114a5ae21e4Smrg &list_charset( 2, 'E', "danish2", "Norwegian/Danish" ); 115a5ae21e4Smrg &list_charset( 2, '6', "danish3", "Norwegian/Danish" ); 116a5ae21e4Smrg &list_charset( 3, '%6', "portuguese", "Portuguese " ); 117a5ae21e4Smrg &list_charset( 2, 'Z', "spanish", "Spanish" ); 118a5ae21e4Smrg &list_charset( 2, '7', "swedish", "Swedish" ); 119a5ae21e4Smrg &list_charset( 2, 'H', "swedish2", "Swedish" ); 120a5ae21e4Smrg &list_charset( 2, '=', "swiss", "Swiss" ); 121a5ae21e4Smrg} 122a5ae21e4Smrg 123a5ae21e4Smrgsub show_dialog() { 124a5ae21e4Smrg my $dir = tempdir( CLEANUP => 1 ); 125a5ae21e4Smrg my $in_file = "$dir/input"; 126a5ae21e4Smrg my $out_file = "$dir/output"; 127a5ae21e4Smrg my $exe_file = "$dir/script"; 128a5ae21e4Smrg my $rc_file = "$dir/status"; 129a5ae21e4Smrg my $output = ""; 130a5ae21e4Smrg my $status; 131a5ae21e4Smrg do { 132a5ae21e4Smrg open( FP, ">$in_file" ) || die("cannot create $in_file"); 133a5ae21e4Smrg print FP "#!/bin/sh\n"; 134a5ae21e4Smrg print FP "dialog"; 135a5ae21e4Smrg printf FP "\\\n\t--default-item \"%s\"", $output if ( $output ne "" ); 136a5ae21e4Smrg print FP "\\\n\t--menu \"Select a character set\" 0 0 0 "; 137a5ae21e4Smrg 138a5ae21e4Smrg foreach my $key ( sort keys %short_name ) { 139a5ae21e4Smrg printf FP "\\\n\t%s \"VT%d00: %s\"", $short_name{$key}, 140a5ae21e4Smrg $level{$key}, 141a5ae21e4Smrg $long_name{$key}; 142a5ae21e4Smrg } 143a5ae21e4Smrg printf FP "\\\n 2>$out_file\n"; 144a5ae21e4Smrg printf FP "echo \$? >$rc_file\n"; 145a5ae21e4Smrg close FP; 146a5ae21e4Smrg chmod 0700, $in_file; 147a5ae21e4Smrg system("$in_file"); 148a5ae21e4Smrg $output = `cat $out_file`; 149a5ae21e4Smrg $status = `cat $rc_file`; 150a5ae21e4Smrg chomp $output; 151a5ae21e4Smrg chomp $status; 152a5ae21e4Smrg &show_charset($output) if ( $status == 0 ); 153a5ae21e4Smrg } while ( $status ne "" and $status == 0 ); 154a5ae21e4Smrg} 155a5ae21e4Smrg 156a5ae21e4Smrg&initialize; 157a5ae21e4Smrgif ( $#ARGV >= 0 ) { 158a5ae21e4Smrg while ( $#ARGV >= 0 ) { 159a5ae21e4Smrg &show_charset( shift @ARGV ); 160a5ae21e4Smrg } 161a5ae21e4Smrg} 162a5ae21e4Smrgelse { 163a5ae21e4Smrg &show_dialog; 164a5ae21e4Smrg} 165