shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Script simulando screensaver


From: Valtoir Jardim
Subject: Re: [shell-script] Script simulando screensaver
Date: Wed, 16 Sep 2009 09:56:59 -0300

Olá, Arkanon.

Dá uma olhada no script abaixo:

http://www.vivaolinux.com.br/script/feet.sh-pseudo-screensaver-em-bash

Já testei fazer o que queres duplicando a linha que chama a função feet:

.....
44 feet &
45 feet &                      <----- rodando uma "segunda instância" da
função
46 read -rs -n 1
47 echo -e "\e[m"
48 setterm -reset
49 clear
50 pkill feet

Mas o resultado é "meia boca", vez em quando alguns caracteres são escritos
na posição errada. Se achares uma solução melhor, poste aqui.

T+

Valtoir


2009/9/15 Arkanon <address@hidden>

>
>
> Boa tarde.
>
> Em 1993, no CESUP (Centro de Super Computacao) da UFRGS havia uma sala
> com alguns computadores (Mac e 486 com DOS) a disposicao de eventuais
> usuarios. Havia tambem um terminal preto e branco sempre rodando um
> screensaver em modo texto que era (pelo que lembro) um conjunto de
> caracteres cuja tonalidade ficava variando aleatoriamente.
>
> Muitas vezes ja procurei um screensaver para terminal equivalente, mas
> como nunca soube o nome do original, nem a linguagem em que foi feito
> ou mesmo o SO em que rodava, todas as minhas buscas foram em vao.
>
> Hoje, pensando novamente no assunto, resolvi tentar produzir algo
> semelhante em shell script, supondo que a complexidade nao deva ser
> muito grande.
>
> O mais perto que consegui chegar foi o resultado abaixo.
>
> Se eu executar o algoritmo para UM UNICO caracter (quant=1), funciona
> satisfatoriamente. O problema aparece quando tento por mais de um
> simultaneamente na tela, que eh o que realmente deve acontecer.
>
> Como as variacoes de tonalidade dos varios caracteres deve ser
> independente, aparentemente acontece em alguns momentos de 2 ou mais
> caracteres tentarem ser reescritos ao mesmo tempo e o cursor "se
> perder" na tentativa e um deles acabar sendo reescrito ao lado do
> outro caracter, e nao na posicao original. Isso acaba com a sequencia
> de variacao de tom daquele caracter, e, ao fim do loop, ele acaba
> "sobrando" na tela, ao inves de ser escrito em preto (= apagado).
>
> Alguem tem alguma ideia de procedimento para lancar varios processos
> independentes de escrita em tempos aleatorios que possam sofrer esse
> tipo de concorrencia (escrita na tela em posicoes diferentes ao mesmo
> tempo)?
>
> Eu poderia fazer um loop onde eu fosse controlando em arrays
> aleatoriamente os caracteres e sequencialmente suas tonalidades, mas
> isso so se nao houver uma forma mais magica (tipo com named pipes ;-p)
>
> Valeu.
>
> [BOT]
> #!/bin/bash
>
> clear
> tput civis # torna o cursor invisivel
> set -o noglo # desabilita o caracter coringa *
>
> quant=3 # quantidade de caracteres simultaneamente na tela
> maxwait=1.25 # maximo tempo de espera entre as variacoes de
> tonalidade da cor do texto
> charset=(* O o + - : .) # caracteres a serem pegos aleatoriamente
>
> black=0
> white=7
> L=`tput lines` # numero de linhas do terminal
> C=`tput cols` # numero de colunas do terminal
>
> write()
> {
> tput sgr0 # restaura os atributos do texto
> tput $5 # estilo do texto \ variacao da tonalidade
> tput setf $4 # cor de frente do texto / da cor do texto
> tput cup $2 $3 # move cursor para (linha,coluna)
> echo -n "$1" # escreve o caracter
> sleep `echo "$RANDOM%$maxwait" | bc` # espera uma quantidade
> aleatoria de tempo entre 0 e maxwait
> }
>
> seq $quant | while read
> do
> (
> s=${charset[$[$RANDOM%${#charset[*]}]]} # escolhe aletoriamente um
> caracter de charset
> l=$[$RANDOM%$L] # escolhe uma linha aleatoria entre 0 e a
> altura do terminal
> c=$[$RANDOM%$C] # escolhe uma coluna aleatoria entre 0 e a
> largura do terminal
> write $s $l $c $white bold
> write $s $l $c $white dim
> write $s $l $c $black bold
> write $s $l $c $black dim
> ) &
> done
>
> read # espera um enter para restaurar as condicoes originais do terminal
>
> set +o noglob # habilita o caracter coringa *
> tput cnorm # torna o cursor visivel
> tput sgr0
> [EOT]
>
> --
> (o_ ------------------ __o
> //\ address@hidden <arkanon%40lsd.org.br> _`\<,
> V_/_ --- www.lsd.org.br (_)/(_)
> ---------------------------------
>  
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]