"Fossies" - the Fresh Open Source Software Archive 
Member "xterm-379/vttests/query-fonts.pl" (19 May 2019, 4532 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 "query-fonts.pl" see the
Fossies "Dox" file reference documentation.
1 #!/usr/bin/env perl
2 # $XTermId: query-fonts.pl,v 1.8 2019/05/19 08:57:31 tom Exp $
3 # -----------------------------------------------------------------------------
4 # this file is part of xterm
5 #
6 # Copyright 2010-2018,2019 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 # Test the font-query features of xterm.
35
36 # TODO:
37 # test relative vs absolute font numbering
38 # test all font-slots
39 # test selection
40 # test bold / wide / widebold
41 # test actual fontname vs nominal
42 # extend "CSI > Ps; Ps T" to query fontname in hex
43
44 use strict;
45 use warnings;
46
47 use Getopt::Std;
48 use IO::Handle;
49
50 our ( $opt_a, $opt_r, $opt_s );
51
52 $Getopt::Std::STANDARD_HELP_VERSION = 1;
53 &getopts('ars') || die(
54 "Usage: $0 [options]\n
55 Options:\n
56 -a test using absolute numbers
57 -r test using relative numbers
58 -s use ^G rather than ST
59 "
60 );
61
62 our $ST = $opt_s ? "\007" : "\x1b\\";
63
64 sub get_reply($) {
65 open TTY, "+</dev/tty" or die("Cannot open /dev/tty\n");
66 autoflush TTY 1;
67 my $old = `stty -g`;
68 system "stty raw -echo min 0 time 5";
69
70 print TTY @_;
71 my $reply = <TTY>;
72 close TTY;
73 system "stty $old";
74 if ( defined $reply ) {
75 die("^C received\n") if ( "$reply" eq "\003" );
76 }
77 return $reply;
78 }
79
80 sub query_font($) {
81 my $param = $_[0];
82 my $reply;
83 my $n;
84 my $st = $opt_s ? qr/\007/ : qr/\x1b\\/;
85 my $osc = qr/\x1b]50/;
86 my $match = qr/${osc}.*${st}/;
87
88 $reply = get_reply( "\x1b]50;?" . $param . $ST );
89
90 printf "query{%s}%*s", $param, 3 - length($param), " ";
91
92 if ( defined $reply ) {
93 printf "%2d ", length($reply);
94 if ( $reply =~ /${match}/ ) {
95
96 $reply =~ s/^${osc}//;
97 $reply =~ s/^;//;
98 $reply =~ s/${st}$//;
99 }
100 else {
101 printf "? ";
102 }
103
104 my $result = "";
105 for ( $n = 0 ; $n < length($reply) ; ) {
106 my $c = substr( $reply, $n, 1 );
107 if ( $c =~ /[[:print:]]/ ) {
108 $result .= $c;
109 }
110 else {
111 my $k = ord substr( $reply, $n, 1 );
112 if ( ord $k == 0x1b ) {
113 $result .= "\\E";
114 }
115 elsif ( $k == 0x7f ) {
116 $result .= "^?";
117 }
118 elsif ( $k == 32 ) {
119 $result .= "\\s";
120 }
121 elsif ( $k < 32 ) {
122 $result .= sprintf( "^%c", $k + 64 );
123 }
124 elsif ( $k > 128 ) {
125 $result .= sprintf( "\\%03o", $k );
126 }
127 else {
128 $result .= chr($k);
129 }
130 }
131 $n += 1;
132 }
133
134 printf "{%s}", $result;
135 }
136 printf "\n";
137 }
138
139 if ($opt_r) {
140 my $n;
141 query_font("-");
142 foreach $n ( 0 .. 5 ) {
143 query_font( sprintf "-%d", $n );
144 }
145 query_font("+");
146 foreach $n ( 0 .. 5 ) {
147 query_font( sprintf "+%d", $n );
148 }
149 }
150 if ($opt_a) {
151 my $n;
152 foreach $n ( 0 .. 5 ) {
153 query_font( sprintf "%d", $n );
154 }
155 }
156 if ( not $opt_a and not $opt_r ) {
157 query_font("");
158 }