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