<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CODARE &#187; Tcl-Tk</title>
	<atom:link href="http://codare.net/category/tcl-tk/feed/" rel="self" type="application/rss+xml" />
	<link>http://codare.net</link>
	<description>Programadores, uni-vos!</description>
	<lastBuildDate>Fri, 03 Dec 2010 21:34:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Tcl/Tk: sondagem do sistema com variáveis</title>
		<link>http://codare.net/2009/06/22/tcltk-sondagem-do-sistema-com-variaveis/</link>
		<comments>http://codare.net/2009/06/22/tcltk-sondagem-do-sistema-com-variaveis/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 12:00:34 +0000</pubDate>
		<dc:creator>LES</dc:creator>
				<category><![CDATA[Tcl-Tk]]></category>
		<category><![CDATA[argc]]></category>
		<category><![CDATA[argv]]></category>
		<category><![CDATA[env]]></category>
		<category><![CDATA[errorInfo]]></category>
		<category><![CDATA[Tcl/Tk]]></category>
		<category><![CDATA[tcl_patchLevel]]></category>
		<category><![CDATA[tcl_platform]]></category>
		<category><![CDATA[variáveis]]></category>

		<guid isPermaLink="false">http://codare.net/?p=465</guid>
		<description><![CDATA[Às vezes, ajuda muito poder examinar determinadas condições do sistema enquanto um programa/script é executado, mais ou menos como quem está voando e verifica as condições meteorológicas. Não só em procedimentos de depuração, embora eu ache que estes sejam os casos mais comuns. &#8230; <a href="http://codare.net/2009/06/22/tcltk-sondagem-do-sistema-com-variaveis/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Às vezes, ajuda muito poder examinar determinadas condições do sistema enquanto um programa/script é executado, mais ou menos como quem está voando e verifica as condições meteorológicas. Não só em procedimentos de depuração, embora eu ache que estes sejam os casos mais comuns.</p>
<p>Na dica anterior, eu falei de <a href="http://codare.net/2009/06/08/tcltk-introspeccao-com-comando-info/">introspecção com o comando [info]</a>. Agora, veja que informações importantes pode-se obter de determinadas variáveis. Assim como a linguagem Bash tem uma série de <a href="http://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html">variáveis reservadas</a> para informações de depuração, Tcl/Tk tem as suas.</p>
<ul>
<li><strong>env:</strong> contém um array com as variáveis de ambiente e seus respectivos valores. Tanto a forma quanto o conteúdo são muito parecidos com o que é retornado pelos comandos &#8216;env&#8217; e &#8216;printenv&#8217; em Bash. Para examinar um array, use o comando parray, e.g. [parray env].</li>
<li><strong>tcl_platform:</strong> outro array, este contém informações sobre a plataforma. O item mais valioso costuma ser $tcl_platform(platform), que indica se o ambiente é Windows, Linux/Unix ou Mac, <a href="http://wiki.tcl.tk/2420">entre outros</a>. Com esta informação, fica fácil adaptar um programa para que ele rode em diversas plataformas sem engasgar nem pedir ajuda ao usuário. Exemplos da minha máquina:
<pre>tcl_platform(platform)    = unix
tcl_platform(os)          = Linux
tcl_platform(osVersion)   = 2.6.24-23-generic
tcl_platform(machine)     = i686
tcl_platform(byteOrder)   = littleEndian</pre>
</li>
<li><strong>tcl_patchLevel:</strong> é uma variável escalar que contém o número exato da versão de Tcl/Tk que está sendo usada para executar o programa. Por exemplo, 8.5.4. Serve para gerar mensagens de erro e admoestar o usuário caso ele esteja usando uma versão muito antiga de Tcl/Tk. Muita coisa importante só foi incorporada a partir da versão 8.4.0 (setembro de 2002).</li>
<li><strong>errorInfo:</strong> variável escalar, contém o texto de erro do último erro registrado durante a execução do programa. A maioria das linguagens interrompe a execução do programa em caso de erro. Em Tcl/Tk, é muito fácil ajustar o programa para ignorar erros e seguir em frente. Neste caso, o último erro ocorrido fica registrado nesta variável.</li>
<li><strong>argv:</strong> variável escalar, contém a lista dos argumentos com que o programa foi executado. Informação indispensável para a execução da maioria dos scripts. Se o programa não for executado com nenhum argumento, argv retorna vazia.</li>
<li><strong>argc:</strong> variável escalar, contém o número de argumentos com que o programa foi executado. É o mesmo que [llength $argv]. Serve para confirmar se o programa foi executado com o número mínimo, máximo ou exato de argumentos que o programa exige. Se o programa não for executado com nenhum argumento, argc retorna o número 0.</li>
</ul>
<p>Mais informações em <a href="http://www.tcl.tk/man/tcl8.5/TclCmd/tclvars.htm">http://www.tcl.tk/man/tcl8.5/TclCmd/tclvars.htm</a></p>
]]></content:encoded>
			<wfw:commentRss>http://codare.net/2009/06/22/tcltk-sondagem-do-sistema-com-variaveis/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tcl/Tk: Introspecção com comando info</title>
		<link>http://codare.net/2009/06/08/tcltk-introspeccao-com-comando-info/</link>
		<comments>http://codare.net/2009/06/08/tcltk-introspeccao-com-comando-info/#comments</comments>
		<pubDate>Mon, 08 Jun 2009 12:00:04 +0000</pubDate>
		<dc:creator>LES</dc:creator>
				<category><![CDATA[Tcl-Tk]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[info]]></category>
		<category><![CDATA[Tcl/Tk]]></category>

		<guid isPermaLink="false">http://codare.net/?p=452</guid>
		<description><![CDATA[introspecção: [Do ingl. introspection.] S. f. 1. Observação da vida interior pelo próprio sujeito; exame que alguém faz dos próprios pensamentos e sentimentos. Dicionário Aurélio &#8211; Século XXI Às vezes, ajuda muito poder examinar TUDO que está acontecendo em um &#8230; <a href="http://codare.net/2009/06/08/tcltk-introspeccao-com-comando-info/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<blockquote><p>introspecção:<br />
[Do ingl. introspection.] S. f.<br />
1. Observação da vida interior pelo próprio sujeito; exame que alguém faz dos próprios pensamentos e sentimentos.<br />
Dicionário Aurélio &#8211; Século XXI</p></blockquote>
<p>Às vezes, ajuda muito poder examinar TUDO que está acontecendo em um programa/script em um determinado momento. Não só em procedimentos de depuração, embora eu ache que estes sejam os casos mais comuns.</p>
<p>O comando da introspecção em Tcl/Tk é [info]. Sozinho, ele não faz nada. Precisa de pelo menos um argumento. Existem mais de 20 possíveis, mas os mais comuns são:</p>
<ul>
<li><strong>[info vars]:</strong> retorna os nomes de todas as variáveis já criadas no programa até o momento em que [info vars] for executado. Se [info vars] estiver no fim do programa, vai revelar todas as variáveis. Se [info vars] estiver no meio programa, não revela as variáveis que forem criadas depois dele.</li>
<li><strong>[info exists "nome de variável"]:</strong> teste booleano que verifica se uma determinada variável existe, se já foi criada/declarada. É mais fácil fazer assim do que usar [info vars] e ficar procurando uma determinada variável na lista retornada.</li>
<li><strong>[info globals]:</strong> retorna os nomes de todas as variáveis globais.</li>
<li><strong>[info locals]:</strong> retorna os nomes de todas as variáveis locais, ou seja, que só existem no contexto de um procedimento (proc). Logo só faz sentido usar [info locals] dentro de um proc.</li>
<li><strong>[info procs]:</strong> retorna os nomes de todos os procs já criados no programa até o momento em que [info procs] for executado.</li>
<li><strong>[info body]:</strong> retorna todo o &#8220;corpo&#8221;, o código de um proc. É como uma radiografia do código fonte. Mostra tudo.</li>
<li><strong>[info commands]:</strong> retorna os nomes de todos os comandos existentes no programa, inclusive os procs. Também inclui os &#8220;<a href="http://codare.net/2009/03/30/tcltk-criar-varios-nomes-para-um-comando-alias/">apelidos</a>&#8220;. Isso inclui TODOS os comandos da linguagem Tcl/Tk, mas observe que alguns comandos <a href="http://codare.net/2009/03/20/tcltk-renomear-e-remover-comandos/">podem ter sido apagados</a>.</li>
</ul>
<p>É sempre mais interessante testar estes comandos no console <a href="http://tkcon.sourceforge.net">Tkcon</a>, mas é claro que eles podem ser testados em qualquer programa ou script em Tcl/Tk.</p>
<p>Não é muito interessante testar introspecção em scripts muito pequenos. Quanto maior for o programa, maior será a quantidade de informação a ser garimpada.</p>
]]></content:encoded>
			<wfw:commentRss>http://codare.net/2009/06/08/tcltk-introspeccao-com-comando-info/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tcl/Tk: Como copiar e colar (clipboard, área de transferência)</title>
		<link>http://codare.net/2009/06/01/tcltk-como-copiar-e-colar-clipboard-area-de-transferencia/</link>
		<comments>http://codare.net/2009/06/01/tcltk-como-copiar-e-colar-clipboard-area-de-transferencia/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 12:00:04 +0000</pubDate>
		<dc:creator>LES</dc:creator>
				<category><![CDATA[Tcl-Tk]]></category>
		<category><![CDATA[área de transferência]]></category>
		<category><![CDATA[clipboard]]></category>
		<category><![CDATA[copy]]></category>
		<category><![CDATA[paste]]></category>
		<category><![CDATA[Tcl/Tk]]></category>
		<category><![CDATA[tkcon]]></category>

		<guid isPermaLink="false">http://codare.net/?p=399</guid>
		<description><![CDATA[Podemos obter o conteúdo (texto) da área de transferência, mais conhecida por aí como &#8220;clipboard&#8221;, a mesma que é usada nas operações de copiar-e-colar do ambiente gráfico. Antes, é preciso carregar o pacote Tk. Você pode rodar estes testes com o executável &#8220;wish&#8221;, &#8230; <a href="http://codare.net/2009/06/01/tcltk-como-copiar-e-colar-clipboard-area-de-transferencia/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Podemos obter o conteúdo (texto) da área de transferência, mais conhecida por aí como &#8220;clipboard&#8221;, a mesma que é usada nas operações de copiar-e-colar do ambiente gráfico.</p>
<p>Antes, é preciso carregar o pacote Tk. Você pode rodar estes testes com o executável &#8220;wish&#8221;, que já tem Tk, ou apenas executar &#8220;tclsh&#8221; e carregar o Tk como um pacote qualquer:</p>
<pre>% package require Tk</pre>
<p>Pronto! Copie algum texto de um programa qualquer. A seguinte função/procedimento mostra o conteúdo da área de transferência:</p>
<pre>% proc clipLeitura {} {
       catch { set varclip [ selection get -selection CLIPBOARD ] } Texto
       return $Texto
}

% clipLeitura
Texto copiado</pre>
<p>Só é possível copiar texto. Se o conteúdo não for texto, a função retorna erro, por isso eu sempre uso o comando [catch] na primeira linha. Assim, o procedimento retorna uma string vazia, mas não faz o programa/script/comando morrer.</p>
<p>Não podemos só ler, também podemos escrever:</p>
<pre>% proc clipEscrita { Texto } {
       clipboard clear -displayof .
       clipboard append -displayof . $Texto
}

% clipEscrita "Um texto qualquer"</pre>
<p>Este comando coloca &#8220;Um texto qualquer&#8221; na área de transferência. Essa string estará pronta para ser &#8220;colada&#8221; em qualquer campo ou janela de qualquer programa do ambiente gráfico.</p>
<p>Este procedimento funciona bem com um script que crie pelo menos uma janela Tk e esteja devidamente preparado para lidar com interações do usuário. A maneira mais fácil é testar dentro do console <a href="http://tkcon.sourceforge.net">Tkcon</a>, uma espécie de console para ambiente gráfico que, em vez de shell, interpreta Tcl/Tk.</p>
]]></content:encoded>
			<wfw:commentRss>http://codare.net/2009/06/01/tcltk-como-copiar-e-colar-clipboard-area-de-transferencia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tcl/Tk: Reproduzir sons</title>
		<link>http://codare.net/2009/05/18/tcltk-reproduzir-sons/</link>
		<comments>http://codare.net/2009/05/18/tcltk-reproduzir-sons/#comments</comments>
		<pubDate>Mon, 18 May 2009 12:00:48 +0000</pubDate>
		<dc:creator>LES</dc:creator>
				<category><![CDATA[Tcl-Tk]]></category>
		<category><![CDATA[mp3]]></category>
		<category><![CDATA[play]]></category>
		<category><![CDATA[som]]></category>
		<category><![CDATA[sound]]></category>
		<category><![CDATA[Tcl/Tk]]></category>

		<guid isPermaLink="false">http://codare.net/?p=377</guid>
		<description><![CDATA[A primeira coisa a se fazer é carregar o pacote Snack: % package require sound 2.2 Se o número da versão do pacote for retornado, significa que ele está presente e foi carregado. Se não, é preciso verificar a instalação do &#8230; <a href="http://codare.net/2009/05/18/tcltk-reproduzir-sons/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A primeira coisa a se fazer é carregar o pacote Snack:</p>
<pre>% package require sound
2.2</pre>
<p>Se o número da versão do pacote for retornado, significa que ele está presente e foi carregado. Se não, é preciso verificar a instalação do seu sistema antes de prosseguir.</p>
<p>Em seguida, selecione o arquivo:</p>
<pre>% snack::sound s -file "/caminho/do/arquivo.wav"</pre>
<p>Daí, é só mandar tocar:</p>
<pre>% s play -block 1</pre>
<p>Exemplo de função:</p>
<pre>proc SomNaCaixa { arquivoDeSom } {
       package require sound
       snack::sound s -file "$arquivoDeSom"
       s play -block 1
}

SomNaCaixa "/caminho/do/arquivo.mp3"</pre>
<p>O Snack é multiplataforma e suporta os formatos WAV, AU, AIFF, MP3, CSL, SD, SMP e NIST/Sphere. Também reproduz streaming.</p>
<p>Mais informações:</p>
<ul>
<li><a href="http://www.speech.kth.se/snack/">http://www.speech.kth.se/snack/</a></li>
<li><a href="http://snackamp.sourceforge.net/">http://snackamp.sourceforge.net/</a></li>
<li><a href="http://wiki.tcl.tk/12619">http://wiki.tcl.tk/12619</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://codare.net/2009/05/18/tcltk-reproduzir-sons/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tcl/Tk: Expressões aritméticas sem &quot;expr&quot;</title>
		<link>http://codare.net/2009/04/09/tcltk-expressoes-aritmeticas-sem-expr/</link>
		<comments>http://codare.net/2009/04/09/tcltk-expressoes-aritmeticas-sem-expr/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 13:54:14 +0000</pubDate>
		<dc:creator>LES</dc:creator>
				<category><![CDATA[Tcl-Tk]]></category>
		<category><![CDATA[cálculo]]></category>
		<category><![CDATA[expr]]></category>
		<category><![CDATA[expressões]]></category>
		<category><![CDATA[matemática]]></category>
		<category><![CDATA[Tcl/Tk]]></category>
		<category><![CDATA[unknown]]></category>

		<guid isPermaLink="false">http://codare.net/?p=280</guid>
		<description><![CDATA[O comando [expr] é um dos que mais desagradam quem está começando a programar em Tcl, por causa da sintaxe: % puts "2 + 2 = [ expr {2+2} ]" 2 + 2 = 4 O comando [unknown], super versátil, &#8230; <a href="http://codare.net/2009/04/09/tcltk-expressoes-aritmeticas-sem-expr/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>O comando [expr] é um dos que mais desagradam quem está começando a programar em Tcl, por causa da sintaxe:</p>
<pre>% puts "2 + 2 = [ expr {2+2} ]"
2 + 2 = 4</pre>
<p>O comando [unknown], super versátil, permite-nos chutar o [expr] pra escanteio na grande maioria das situações. Normalmente, [unknown] é o comando acionado automaticamente pela linguagem em caso de erro de digitação ou comando desconhecido. Tudo que ele faz é retornar uma mensagem de erro. Exemplo:</p>
<pre>% 6*8+3*2+42
invalid command name "6*8+3*2+42"</pre>
<p>Mas ele pode ser alterado, como quase tudo em Tcl.</p>
<p>Antes, é mais prudente reservar o comando [unknown] original <a href="http://codare.net/2009/03/20/tcltk-renomear-e-remover-comandos/">dando-lhe outro nome</a>:</p>
<pre>% rename unknown MsgErro</pre>
<p>Agora, ele se chama [MsgErro]. Em seguida, criamos um novo comando [unknown]:</p>
<p>% proc  unknown  args  {<br />
if      { [ regexp  {^[-+/\*\.0-9 ()]+$}  $args ] }     {<br />
    return  [ expr $args ]<br />
}</p>
<p>uplevel 1 MsgErro $args<br />
}</p>
<p>Traduzindo: a cláusula &#8220;IF&#8221; usa Expressões Regulares para detectar se a linha de comando &#8220;incorreta&#8221; é uma expressão aritmética, inclusive parênteses. Assim, também podemos agrupar expressões. Se a cláusula &#8220;IF&#8221; não casar, o novo comando [unknown] retorna aquela função de erro original que foi transferida para o comando [MsgErro]. Não precisamos mais da sintaxe chata do [expr]:</p>
<pre>% 6*8+3*2+42
96

% 45+2*3+6-1
56

% (45+2)*(3+6)-1
422

% puts "Um dia tem 24 horas ou [24*60] minutos"
Um dia tem 24 horas ou 1440 minutos</pre>
]]></content:encoded>
			<wfw:commentRss>http://codare.net/2009/04/09/tcltk-expressoes-aritmeticas-sem-expr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tcl/Tk: Criar vários nomes para um comando (alias)</title>
		<link>http://codare.net/2009/03/30/tcltk-criar-varios-nomes-para-um-comando-alias/</link>
		<comments>http://codare.net/2009/03/30/tcltk-criar-varios-nomes-para-um-comando-alias/#comments</comments>
		<pubDate>Mon, 30 Mar 2009 12:00:18 +0000</pubDate>
		<dc:creator>LES</dc:creator>
				<category><![CDATA[Tcl-Tk]]></category>
		<category><![CDATA[alias]]></category>
		<category><![CDATA[apelido]]></category>
		<category><![CDATA[comando]]></category>
		<category><![CDATA[file exists]]></category>
		<category><![CDATA[foreach]]></category>
		<category><![CDATA[interp alias]]></category>
		<category><![CDATA[Tcl/Tk]]></category>

		<guid isPermaLink="false">http://codare.net/?p=236</guid>
		<description><![CDATA[Além de renomear comandos em Tcl/Tk, também é possível criar &#8220;apelidos&#8221; para os comandos com o [interp alias]. Por exemplo, o comando [file exists] verifica se um determinado arquivo existe: % if { [file exists "/caminho/do/arquivo.txt"] == 1 } { &#8230; <a href="http://codare.net/2009/03/30/tcltk-criar-varios-nomes-para-um-comando-alias/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Além de <a href="http://codare.net/2009/03/20/tcltk-renomear-e-remover-comandos/">renomear comandos em Tcl/Tk</a>, também é possível criar &#8220;apelidos&#8221; para os comandos com o [interp alias]. Por exemplo, o comando [file exists] verifica se um determinado arquivo existe:</p>
<pre>% if { [file exists "/caminho/do/arquivo.txt"] == 1 } {
       puts "O arquivo existe"
}</pre>
<p>Se você achar que &#8220;file exists&#8221; é muito longo e/ou tiver saudade do <a href="http://codare.net/category/shell/">Bash</a>, pode criar o apelido &#8220;-e&#8221;:</p>
<pre>% interp alias {} -e {} file exists

% if { [-e "/caminho/do/arquivo.txt"] == 1 } {
       puts "O arquivo existe."
}</pre>
<p>Todos os outros comandos -[letra] do Bash podem ser recriados e carregados no início do programa:</p>
<pre>interp alias {} -e {} file exists
interp alias {} -f {} file isfile
interp alias {} -d {} file isdirectory
interp alias {} -r {} file readable
interp alias {} -w {} file writable
interp alias {} -x {} file executable
interp alias {} -o {} file owned</pre>
<p>Apelido &#8220;@&#8221; para o foreach, se você sentir saudade de Perl:</p>
<pre>% interp alias {} @ {} foreach

% @ x "1 2 3" { puts $x }
1
2
3</pre>
<p>Para quem gosta muito de <a href="http://codare.net/category/php/">PHP</a>:</p>
<pre>% interp alias {} strtolower {} string tolower

% puts [strtolower "GRITARIA"]
gritaria</pre>
]]></content:encoded>
			<wfw:commentRss>http://codare.net/2009/03/30/tcltk-criar-varios-nomes-para-um-comando-alias/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tcl/Tk: Renomear e remover comandos</title>
		<link>http://codare.net/2009/03/20/tcltk-renomear-e-remover-comandos/</link>
		<comments>http://codare.net/2009/03/20/tcltk-renomear-e-remover-comandos/#comments</comments>
		<pubDate>Sat, 21 Mar 2009 00:53:04 +0000</pubDate>
		<dc:creator>LES</dc:creator>
				<category><![CDATA[Tcl-Tk]]></category>
		<category><![CDATA[comando]]></category>
		<category><![CDATA[remover]]></category>
		<category><![CDATA[renomear]]></category>
		<category><![CDATA[segurança]]></category>
		<category><![CDATA[Tcl/Tk]]></category>

		<guid isPermaLink="false">http://codare.net/?p=216</guid>
		<description><![CDATA[Tcl/Tk tem propriedades camaleônicas. Praticamente tudo pode ser modificado, o que pode resultar na criação de uma linguagem quase inteiramente nova. Por exemplo, se você não gostar do comando nativo [puts] porque está muito acostumado com &#8216;echo&#8217;, pode mudar o &#8230; <a href="http://codare.net/2009/03/20/tcltk-renomear-e-remover-comandos/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Tcl/Tk tem propriedades camaleônicas. Praticamente tudo pode ser modificado, o que pode resultar na criação de uma linguagem quase inteiramente nova. Por exemplo, se você não gostar do comando nativo [puts] porque está muito acostumado com &#8216;echo&#8217;, pode mudar o nome do comando:</p>
<pre>% puts "Alô, mamãe!"
Alô, mamãe!

% rename puts echo

% puts "Alô, mamãe!"
invalid command name "puts"

% echo "Alô, mamãe!"
Alô, mamãe!</pre>
<p>Se o segundo argumento de [rename] for a string vazia em vez de um nome novo para o comando a ser renomeado, o comando é apagado!</p>
<pre>% rename echo {}

% echo "Alô, mamãe!"
invalid command name "echo"</pre>
<p>Você pode querer &#8220;matar&#8221; alguns comandos em programas/scripts que aceitem dados digitados pelo usuário. Sem determinados comandos, o programa fica mais seguro.</p>
]]></content:encoded>
			<wfw:commentRss>http://codare.net/2009/03/20/tcltk-renomear-e-remover-comandos/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Tcl/Tk: Usar o valor do número Pi</title>
		<link>http://codare.net/2009/03/15/tcltk-usar-o-valor-do-numero-pi/</link>
		<comments>http://codare.net/2009/03/15/tcltk-usar-o-valor-do-numero-pi/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 02:51:50 +0000</pubDate>
		<dc:creator>LES</dc:creator>
				<category><![CDATA[Tcl-Tk]]></category>
		<category><![CDATA[cálculo]]></category>
		<category><![CDATA[número]]></category>
		<category><![CDATA[perímetro]]></category>
		<category><![CDATA[pi]]></category>
		<category><![CDATA[proc]]></category>
		<category><![CDATA[procedimento]]></category>
		<category><![CDATA[variável]]></category>

		<guid isPermaLink="false">http://codare.net/?p=208</guid>
		<description><![CDATA[Não existe comando nativo em Tcl/Tk que retorne o valor de Pi. Mas o valor de Pi está disponível em muitos lugares, logo é fácil registrar seu valor numa variável ou num procedimento e usá-lo sempre que quiser. Numa variável: &#8230; <a href="http://codare.net/2009/03/15/tcltk-usar-o-valor-do-numero-pi/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Não existe comando nativo em Tcl/Tk que retorne o valor de Pi. Mas o valor de Pi está disponível em muitos lugares, logo é fácil registrar seu valor numa variável ou num procedimento e usá-lo sempre que quiser.</p>
<p>Numa variável:</p>
<pre>set pi "3.141592653589793238462643383279502884197169399375105820
9749445923078164062862089986280348253421170679821480865132823066
4709384460955058223172535940812848111745028410270193852110555964
46229489549303820"</pre>
<p>Num procedimento:</p>
<pre>proc Pi {}  {
return 3.1415926535897932384626433832795028841971693993751058209
7494459230781640628620899862803482534211706798214808651328230664
7093844609550582231725359408128481117450284102701938521105559644
6229489549303820
}</pre>
<p>Como usar o valor de Pi em um cálculo:</p>
<pre>set raio 5
expr {2 * $pi * $raio}
;# retorna 31.41592653589793</pre>
<p>ou</p>
<pre>set raio 5
expr {2 * [Pi] * $raio}
;# retorna 31.41592653589793</pre>
<p>O uso do procedimento pode ser mais útil que o uso da variável, pois o procedimento pode conter instruções adicionais que ajustem o número de casas decimais antes ou depois de se retornar o valor.</p>
<p>Em Tcl/Tk, um procedimento tem praticamente o mesmo valor de um comando nativo. Podemos até modificar completamente a função de um comando nativo. Neste caso, seria criado o procedimento Pi, que passaria a ter o valor e o comportamento de um comando nativo novo. Falarei mais disso na próxima semana.</p>
]]></content:encoded>
			<wfw:commentRss>http://codare.net/2009/03/15/tcltk-usar-o-valor-do-numero-pi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tcl/Tk: Ler o conteúdo de um arquivo (texto)</title>
		<link>http://codare.net/2009/03/10/tcltk-ler-o-conteudo-de-um-arquivo-texto/</link>
		<comments>http://codare.net/2009/03/10/tcltk-ler-o-conteudo-de-um-arquivo-texto/#comments</comments>
		<pubDate>Wed, 11 Mar 2009 00:59:02 +0000</pubDate>
		<dc:creator>LES</dc:creator>
				<category><![CDATA[Tcl-Tk]]></category>
		<category><![CDATA[arquivo]]></category>
		<category><![CDATA[ler]]></category>
		<category><![CDATA[open]]></category>
		<category><![CDATA[ponteiro]]></category>
		<category><![CDATA[read]]></category>
		<category><![CDATA[texto]]></category>
		<category><![CDATA[variável]]></category>

		<guid isPermaLink="false">http://codare.net/?p=200</guid>
		<description><![CDATA[Para ler/extrair todo o conteúdo de um arquivo de texto, basta: criar um ponteiro para abrir o arquivo; ler o conteúdo *do ponteiro* com o parâmetro &#8220;r&#8221; (read); fechar o arquivo por meio do ponteiro; imprimir o conteúdo na tela &#8230; <a href="http://codare.net/2009/03/10/tcltk-ler-o-conteudo-de-um-arquivo-texto/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Para ler/extrair todo o conteúdo de um arquivo de texto, basta:</p>
<ol>
<li>criar um ponteiro para abrir o arquivo;</li>
<li>ler o conteúdo *do ponteiro* com o parâmetro &#8220;r&#8221; (read);</li>
<li>fechar o arquivo por meio do ponteiro;</li>
<li>imprimir o conteúdo na tela do terminal.</li>
</ol>
<pre>set _ponteiro [ open "/home/LES/codare.txt" "r" ]
set _conteúdo [ read $_ponteiro ]
close $_ponteiro
puts "$_conteúdo"</pre>
<p>Eu escolhi os nomes &#8220;_ponteiro&#8221; para a variável do ponteiro e &#8220;_conteúdo&#8221; para a variável do conteúdo, mas qualquer nome é válido. Use a sua imaginação como quiser. Veja que até acentos são permitidos nos nomes das variáveis. ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://codare.net/2009/03/10/tcltk-ler-o-conteudo-de-um-arquivo-texto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tcl/Tk: Configurar o encoding de scripts</title>
		<link>http://codare.net/2008/02/13/tcl-tk-configurar-o-encoding-de-scripts/</link>
		<comments>http://codare.net/2008/02/13/tcl-tk-configurar-o-encoding-de-scripts/#comments</comments>
		<pubDate>Wed, 13 Feb 2008 12:00:15 +0000</pubDate>
		<dc:creator>Lauro Cesar de Oliveira</dc:creator>
				<category><![CDATA[Tcl-Tk]]></category>
		<category><![CDATA[charset]]></category>
		<category><![CDATA[encoding]]></category>
		<category><![CDATA[iso8859-1]]></category>
		<category><![CDATA[utf-8]]></category>

		<guid isPermaLink="false">http://codare.wordpress.com/?p=179</guid>
		<description><![CDATA[Para determinar qual encoding seu script deve rodar, use na primeira linha: encoding system [tabela] Exemplo: encoding system utf-8 Para listar as tabelas disponíveis: encoding names Exemplo de listagem: foreach i [encoding names] { puts "A tabela $i está disponível &#8230; <a href="http://codare.net/2008/02/13/tcl-tk-configurar-o-encoding-de-scripts/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Para determinar qual encoding seu script deve rodar, use na primeira linha:</p>
<pre>encoding system [tabela]</pre>
<p>Exemplo:</p>
<pre>encoding system utf-8</pre>
<p>Para listar as tabelas disponíveis:</p>
<pre>encoding names</pre>
<p>Exemplo de listagem:</p>
<pre>
foreach i [encoding names] {
    puts "A tabela $i está disponível neste sistema"
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://codare.net/2008/02/13/tcl-tk-configurar-o-encoding-de-scripts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

