"Fossies" - the Fresh Open Source Software Archive 
Member "xterm-379/vttests/under-latin.pl" (31 Jan 2020, 3554 Bytes) of package /linux/misc/xterm-379.tgz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Perl source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
For more information about "under-latin.pl" see the
Fossies "Dox" file reference documentation.
1 #!/usr/bin/env perl
2 # $XTermId: under-latin.pl,v 1.6 2020/01/31 00:16:52 tom Exp $
3 # -----------------------------------------------------------------------------
4 # this file is part of xterm
5 #
6 # Copyright 2020 by Thomas E. Dickey
7 #
8 # All Rights Reserved
9 #
10 # Permission is hereby granted, free of charge, to any person obtaining a
11 # copy of this software and associated documentation files (the
12 # "Software"), to deal in the Software without restriction, including
13 # without limitation the rights to use, copy, modify, merge, publish,
14 # distribute, sublicense, and/or sell copies of the Software, and to
15 # permit persons to whom the Software is furnished to do so, subject to
16 # the following conditions:
17 #
18 # The above copyright notice and this permission notice shall be included
19 # in all copies or substantial portions of the Software.
20 #
21 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
24 # IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
25 # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
26 # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
27 # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 #
29 # Except as contained in this notice, the name(s) of the above copyright
30 # holders shall not be used in advertising or otherwise to promote the
31 # sale, use or other dealings in this Software without prior written
32 # authorization.
33 # -----------------------------------------------------------------------------
34 # Print a text-test pattern using Latin-1 characters that have these features:
35 # a) accents
36 # b) descenders
37 # c) underlining
38
39 use strict;
40 use warnings;
41
42 use Getopt::Std;
43 use Term::ReadKey;
44
45 $| = 1;
46
47 our ( $opt_b, $opt_i, $opt_u );
48
49 our $ROWS = 24;
50 our $COLS = 4;
51
52 our @sample;
53
54 sub underlined($$) {
55 my $text = shift;
56 my $code = shift;
57 $text = sprintf "\033[4m%s\033[24m", $text if ($code);
58 return $text;
59 }
60
61 sub print_row($) {
62 my $y = shift;
63 my $cells = $y * 5;
64 for my $x ( 0 .. $COLS ) {
65 printf "%s",
66 &underlined( $sample[ $cells % 2 ], ( $cells % 4 ) > 1 ? 1 : 0 );
67 ++$cells;
68 }
69 }
70
71 sub main::HELP_MESSAGE() {
72 printf STDERR <<EOF
73 Usage: $0 [options]
74
75 Options:
76
77 -b write a pattern in bold-text
78 -i write a pattern in italic-text
79 -u write text in UTF-8
80 EOF
81 ;
82 exit;
83 }
84
85 $Getopt::Std::STANDARD_HELP_VERSION = 1;
86 &getopts('biu') || &main::HELP_MESSAGE;
87
88 if ( -t 0 ) {
89 my $size = `stty size`;
90 chomp $size;
91 if ( $size =~ /^\d+\s+\d+$/ ) {
92 my @size = split /\s+/, $size;
93 $ROWS = $size[0];
94 $COLS = $size[1] - 4;
95 $COLS /= 2 if ( $opt_b or $opt_i );
96 $COLS /= 7;
97 $COLS = int($COLS) - 1;
98 }
99 }
100
101 binmode( STDOUT, ":utf8" ) if ($opt_u);
102
103 $sample[0] = sprintf "%c%c%c%c%c%c%c", 192, 193, 194, 195, 196, 197, 198;
104 $sample[1] = sprintf "gjpqy%c%c", 199, 255;
105
106 for my $y ( 0 .. ( $ROWS - 1 ) ) {
107 printf "%3d ", $y + 1;
108 printf "\033[1m" if ( $opt_b and $opt_i );
109 &print_row($y);
110 printf "\033[22m" if ( $opt_b and $opt_i );
111 if ( $opt_b or $opt_i ) {
112 printf "\033[%dm", $opt_i ? 3 : 1;
113 &print_row($y);
114 printf "\033[%dm", $opt_i ? 23 : 22;
115 }
116 printf "\n" unless ( $y + 1 >= $ROWS );
117 }
118
119 if ( -t 1 ) {
120 printf "\033[m";
121 ReadMode 'cbreak';
122 my $key = ReadKey(30);
123 ReadMode 'normal';
124 }
125 printf "\n";
126
127 1;