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 <[email protected]> > > > 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 <[email protected] <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 > > //\ [email protected] <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]
