/usr/bin/showchar is in psutils 1.17-31.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | #!/bin/sh
# showchar: show character with information
# usage:
# showchar Font-Name Char-Name | lpr -Pprinter
if [ $# != 2 ]; then
echo "Usage: `basename $0` Font-Name Char-Name" >&2
exit 1
fi
cat <<EOF
%!
% Get character metrics and bounding box for $1
/ns 30 string def
/fname /$1 def
/cname /$2 def
/fn fname findfont 1000 scalefont def
/thin 0.7 def
/reduction 2.0 def
/sn { ns cvs show } def
/sc { (\()show exch sn (,)show sn (\))show } def
/Times-Roman findfont 10 scalefont setfont
72 242 translate % one inch in, 3 1/2 inch up
newpath 0 0 moveto
gsave % print character name
0 468 rmoveto
($2 from font $1 displayed on `date` by `basename $0` 1.00 (C) AJCD 1991)
show
grestore
gsave
thin setlinewidth % cross hairs
-9 0 rmoveto 18 0 rlineto
-9 -9 rmoveto 0 18 rlineto
stroke % position info
-9 -9 moveto ((0,0)) stringwidth pop neg 0 rmoveto
((0,0)) show
grestore
% create encoding with a single character at all positions
/MyEncoding 256 array def
0 1 255 { % fill out with notdefs
MyEncoding exch cname put
} for
fn dup length dict begin
{1 index /FID ne {def} {pop pop} ifelse} forall
/Encoding MyEncoding def
currentdict
end /newfont exch definefont
/fn exch def
/en MyEncoding def
gsave % draw character (enlarged)
.75 setgray
fn 1 reduction div scalefont setfont
(\000) show
grestore
% show character info
fn /Metrics known {
dup fn /Metrics get exch get
dup type /arraytype eq {
dup length 2 eq
{1 get 0} {dup 2 get exch 3 get} ifelse
} {
round 0
} ifelse
} {
gsave
fn setfont (\000) stringwidth round exch round exch
grestore
} ifelse
gsave % show width
thin setlinewidth
2 copy
reduction div exch reduction div exch rlineto
gsave
1 1 rmoveto sc
grestore
-4 -3 rlineto 0 6 rmoveto 4 -3 rlineto
stroke
grestore
gsave
gsave % get bounding box
fn setfont
(\000) true charpath flattenpath pathbbox
grestore
thin setlinewidth
3 index reduction div % put coords on top of stack
3 index reduction div
3 index reduction div
3 index reduction div
3 index 3 index moveto
gsave % llx lly
0 -9 rmoveto 7 index 7 index sc
grestore
1 index 3 index lineto
gsave % urx lly
0 -9 rmoveto 5 index 7 index sc
grestore
1 index 1 index lineto
gsave % urx ury
0 9 rmoveto 5 index 5 index sc
grestore
3 index 1 index lineto
gsave % llx ury
0 9 rmoveto 7 index 5 index sc
grestore
closepath stroke
grestore
showpage
EOF
|