My favorites | Sign in
Project Home Downloads Wiki Issues Source
Checkout   Browse   Changes    
 
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
# ----------------------------------------------------------------------------
# Mostra a tabela ASCII com todos os caracteres imprimíveis (32-126,161-255).
# O formato utilizando é: <decimal> <hexa> <octal> <ascii>.
# O número de colunas e a largura da tabela são configuráveis.
# Uso: zzascii [colunas] [largura]
# Ex.: zzascii
# zzascii 4
# zzascii 7 100
#
# Autor: Aurelio Marinho Jargas, www.aurelio.net
# Desde: 2002-12-06
# Licença: GPL
# Requisitos: zzseq
# ----------------------------------------------------------------------------
zzascii ()
{
zzzz -h ascii "$1" && return

local referencias decimais decimal hexa octal caractere
local num_colunas="${1:-5}"
local largura="${2:-78}"
local max_colunas=20
local max_largura=500
local linha=0

# Verificações básicas
if (
! zztool testa_numero "$num_colunas" ||
! zztool testa_numero "$largura" ||
test "$num_colunas" -eq 0 ||
test "$largura" -eq 0)
then
zztool uso ascii
return 1
fi
if test $num_colunas -gt $max_colunas
then
echo "O número máximo de colunas é $max_colunas"
return 1
fi
if test $largura -gt $max_largura
then
echo "A largura máxima é de $max_largura"
return 1
fi

# Estamos em um terminal UTF-8?
if zztool terminal_utf8
then
decimais=$(zzseq 32 126)
else
# Se o sistema for ISO-8859-1, mostra a tabela extendida,
# com caracteres acentuados
decimais=$(zzseq 32 126 ; zzseq 161 255)
fi

# Cálculos das dimensões da tabela
local colunas=$(zzseq 0 $((num_colunas - 1)))
local largura_coluna=$((largura / num_colunas))
local num_caracteres=$(echo "$decimais" | sed -n '$=')
local num_linhas=$((num_caracteres / num_colunas + 1))

# Mostra as dimensões
echo $num_caracteres caracteres, $num_colunas colunas, $num_linhas linhas, $largura de largura

# Linha a linha...
while [ $linha -lt $num_linhas ]
do
linha=$((linha+1))

# Extrai as referências (número da linha dentro do $decimais)
# para cada caractere que será mostrado nesta linha da tabela.
# É montado um comando Sed com eles: 5p; 10p; 13p;
referencias=''
for col in $colunas
do
referencias="$referencias $((num_linhas * col + linha))p;"
done

# Usando as referências coletadas, percorre cada decimal
# que será usado nesta linha da tabela
for decimal in $(echo "$decimais" | sed -n "$referencias")
do
hexa=$( printf '%X' $decimal)
octal=$(printf '%03o' $decimal) # NNN
caractere=$(printf "\x$hexa")

# Mostra a célula atual da tabela
printf "%${largura_coluna}s" "$decimal $hexa $octal $caractere"
done
echo
done
}

Change log

r710 by aureliojargas on Mar 29, 2012   Diff
SEGURANÇA: $1 colocado entre aspas na
chamada padrão zzzz -h de todas as
funções.
Go to: 
Sign in to write a code review

Older revisions

r709 by aureliojargas on Mar 29, 2012   Diff
SEGURANÇA: aspas ao redor de
variáveis.
r668 by aureliojargas on Mar 28, 2012   Diff
lint: removendo espaços inúteis.
r655 by aureliojargas on Mar 23, 2012   Diff
s/Aurélio/Aurelio/ *
All revisions of this file

File info

Size: 2590 bytes, 93 lines
Powered by Google Project Hosting