Exibir um menu com simbolos ASCII

1. Exibir um menu com simbolos ASCII

Marco Capella
MarcoC

(usa Outra)

Enviado em 09/07/2020 - 23:24h

Boas a todos.
Pessoal na década de 80 lembro vagamente que fiz um pequeno aplicativo ou rotina (não lembro se foi em MS-DOS 3, ou num pequeno micro TK 85 que era ligado a TV e somente permitia o uso do basic puro) para calcular o salário de funcionários, voce tinha algumas opções para escolher que ficavam dentro de um retângulo feitos com símbolos ASCII,.

Para fazer esse retângulo lembro que o comando era tipo "print at 218", (218 = numero decimal de curva) print at  196 (196 = numero decimal de linha) e por ai vai.

Em shell Script tem como fazer isso, tipo " echo algum código " ?

Estou tentando fazer apenas para estudo, uma aplicação em shell script, apesar de ter feito em dialog e whiptail, gostaria de conseguir como antigamente, apenas em tela negra e codigo, tem como ?
Desde já, muito obrigado pela atenção.

P. S.
Estou tentando fazer essa aplicação num RPi 4 com Raspbian (Debian) buster.


  


2. Re: Exibir um menu com simbolos ASCII

Paulo
paulo1205

(usa Ubuntu)

Enviado em 11/07/2020 - 07:20h

Vai depender do tipo de terminal que você tem, os recursos que ele oferece, e as fontes tipográficas que estão disponíveis e em uso, que teriam de ter os símbolos necessários.

Terminais compatíveis com o DEC VT-100 podem usar as sequências de escape "\33(0" e "\33(B" (onde "\33" é uma representação do código do caráter de controle ESC do ASCII, cujo índice na tabela de caracteres é 27, e que é obtido nos nossos teclados através da tecla ESC ou de Control-[) para, respectivamente, ativar e desativar um modo de exibição que comuta os caracteres na faixa que inclui as letras minúsculas do ASCII (96 até 126, que inclui alguns outros símbolos, além das letras minúsculas, com 31 caracteres ao todo) para símbolos gráficos que incluem molduras com linha simples, sinais matemáticos e alguns outros símbolos.

O exemplo abaixo usa as letras j, k, l e m para desenhar uma caixinha, usando apenas os caracteres correspondentes aos quatro cantos de um quadro (a marcação “^[” é, na verdade, a forma como o shell representa o caráter ESC, e você pode obtê-lo na linha de comando digitando Control-V seguido ou da tecla ESC ou de Control-[).
echo "^[(0lk^[(Blk"; echo "^[(0mj^[(Bmj" 


Você pode encontrar a tabela com esses caracteres em vários lugares, tais como em https://en.wikipedia.org/wiki/DEC_Special_Graphics.

Se o seu terminal aceitar Unicode e a fonte que você usa contiver os símbolos que você quer usar, você pode inseri-los diretamente no código fonte do seu programa. Possivelmente não ai conseguir digitá-los no teclado, mas pode usar uma aplicação de mapa de caracteres para selecionar os caracteres desejados e copiá-los, e depois colá-los no seu programa, conforme as figura anexas mostram.

Note novamente as variáveis envolvidas. Usar Unicode dá mais flexibilidade, pois dispõe de um número muito maior de símbolos. No entanto, você tem de ter todas as características certas para que funcione: SO que aceite, terminal que saiba trabalhar com ela, configuração correta de conjunto e codificação de caracteres e fonte que possua tais símbolos. Nem todo sistema tem todas as características ao mesmo tempo; sistemas mais antigos ou versões comerciais de UNIX, além do próprio Windows, estão provavelmente no campo de menos chance de isso funcionar. Se tais características não estiverem presentes e você mandar imprimir de qualquer jeito, este método tem grandes chances de produzir uma saída completamente estranha, pois cada símbolo gráfico pode ser composto por até três bytes e, dependendo da configuração, cada um desses bytes pode vir a ocupar uma posição diferente na tela.

Por outro lado, as sequências de escape costumam funcionar mesmo em sistemas mais antigos e nos comerciais, pois quase todos os emuladores de terminal e mesmo alguns consoles têm compatibilidade com VT-100 (o Windows, de novo, pode ser uma exceção importante), mas tem a desvantagem de oferecer um número muito menor de símbolos gráficos para uso. Caso o terminal não suporte os símbolos gráficos, geralmente a perturbação visual é menor do que com o caso anterior, uma vez que cada símbolo ocupa apenas uma posição na tela, e a consequência de uma falha de representação não costum ser mais grave do que uma moldura formada por letras, em vez de linhas.

EDIT: Nenhum desses caracteres é ASCII. Os do VT-100 substituem símbolos do ASCII com outros, e os do Unicode têm índices que estão fora da faixa de 0 a 127, cujos símbolos coincidem com os do ASCII com mesmo índice. Dessa forma, o título do tópico traz consigo um erro, pois tenta limitar a resposta a um escopo onde a resposta não tem como existir.


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts