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: Julio C. Neves
Subject: Re: [shell-script] Script simulando screensaver
Date: Wed, 16 Sep 2009 22:10:28 -0300

Procure no histórico da lista que vc achará um screensaver que fiz, imitando
o Matrix. Creio que se usar matrix como palavra chave vc achará.

Abraços,
Julio
Cursos de Shell e Zenity em 2 fins de semana?
- Em SP ligue (11) 2125-4747;
- Em DF ligue (61) 3223-3000;
- No RJ ligue (21) 2561-0867;
- Turmas fechadas em outras cidades ligue (21) 8112-9988.


2009/9/16 Valtoir Jardim <address@hidden>

>
>
> 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 <arkanon%40lsd.org.br>>
>
> >
> >
> > 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> <arkanon%40lsd.org.br>
> _`\<,
> > V_/_ --- www.lsd.org.br (_)/(_)
> > ---------------------------------
> >
> >
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>


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



reply via email to

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