:TITLE: Mudando Diretório de Trabalho - cd, pwd
;#
;# RCSID: $Header: /home/clif/CVS_ROOT/TclTutor/Tcl35.lsn,v 1.7 2000/04/24 16:17:52 clif Exp $
;# Copyright (c) 1995 Clif Flynt
;# 9300 Fleming Rd.
;# Dexter, MI  48130
;# clif@cflynt.com
;# Veja o arquivo "AVISO" com os termos da licença.
;#
;#*********************************************************
;# Portuguese translation: Lucio Agostinho Rocha
;# E-mail: outrosdiasvirao@yahoo.com.br
;# Last update: 16/01/2006
;#*********************************************************
::CMD:: if {([info exists tcl_platform])} {
  switch $tcl_platform(platform) {
    unix        {
                set Tutor(lsn.codeMod) {
                    {regsub TEMPDIR $line "/bin /usr/bin /usr/local/bin]" line}
                }
        }
    windows     {
                set Tutor(lsn.codeMod) {
                    {regsub TEMPDIR $line "C:/windows C:/windows/system C:/temp C:/foo " line}
                }         
        }
    mac         {
                set Tutor(lsn.codeMod) {
                    {regsub TCL_INTERP $line "$tutorGlobals(bindir):$tutorGlobals(interpreter)" line}
		    {regsub "wish" $line "tclsh" line}
		}
                }
    default     {
                puts "I don't recognize the platform: $tcl_platform(platform)"
                puts "Can't set platform specific parameters"
                }
    } 
  }

:LESSON_TEXT_START_LEVEL 0:
Tcl também suporta comandos para mudar e exibir o diretório atual 
de trabalho.
<P>
Eles são:
<DL>
<B><DT>cd</B> <I>?nomeDir?</I>
<DD>Muda o diretório atual para <I>nomeDir</I> se <I>nomeDir</I> for
dado, ou para o diretório <B>$HOME</B> se <I>nomeDir</I> não for dado.
Se <I>nomeDir</I> for um til (<B>~</B>), <CODE>cd</CODE> muda o diretório de
trabalho para o diretório home dos usuários. Se <I>nomeDir</I> inicia com um
til, então o resto dos caracteres são tratados como um id de login, e
<CODE>cd</CODE> muda o diretório de trabalho para aquele $HOME do usuário.
<B><DT>pwd</B>
<DD>Retorna o diretório atual.
</DL>
:TEXT_END:

:LESSON_TEXT_START_LEVEL 1:
Tcl também suporta comandos para mudar e exibir o diretório atual 
de trabalho.
<P>
Eles são:
<DL>
<B><DT>cd</B> <I>?nomeDir?</I>
<DD>Muda o diretório atual para <I>nomeDir</I> se <I>nomeDir</I> for
dado, ou para o diretório <B>$HOME</B> se <I>nomeDir</I> não for dado.
Se <I>nomeDir</I> for um til (<B>~</B>), <CODE>cd</CODE> muda o diretório de
trabalho para o diretório home dos usuários. Se <I>nomeDir</I> inicia com um
til, então o resto dos caracteres são tratados como um id de login, e
<CODE>cd</CODE> muda o diretório de trabalho para aquele $HOME do usuário.
<B><DT>pwd</B>
<DD>Retorna o diretório atual.
</DL>
:TEXT_END:

:LESSON_TEXT_START_LEVEL 2:
A maioria dos sistemas operacionais modernos suportam uma estrutura
de diretórios baseada em árvore, de forma que um dado diretório pode
ter numerosos subdiretórios, os quais podem também ter subdiretórios.
<P>
O caminho para um dado arquivo ou subdiretório pode ser arbitrariamente
longo, e pode ser difícil trabalhar com ele. Portanto, é conveniente
mudar o diretório de trabalho para um que contém os arquivos que o
programa está acessando.
<P>
Tcl também suporta comandos para mudar e exibir o diretório atual 
de trabalho.
<P>
Eles são:
<DL>
<B><DT>cd</B> <I>?nomeDir?</I>
<DD>Muda o diretório atual para <I>nomeDir</I> se <I>nomeDir</I> for
dado, ou para o diretório <B>$HOME</B> se <I>nomeDir</I> não for dado.
Se <I>nomeDir</I> for um til (<B>~</B>), <CODE>cd</CODE> muda o diretório de
trabalho para o diretório home dos usuários. Se <I>nomeDir</I> inicia com um
til, então o resto dos caracteres são tratados como um id de login, e
<CODE>cd</CODE> muda o diretório de trabalho para aquele $HOME do usuário.
<B><DT>pwd</B>
<DD>Retorna o diretório atual.
</DL>
<P>
O exemplo de código poderia ser também escrito como:
<PRE>
foreach dir $dirs {
  set arquivosInicioC [glob $dir/c*]
  
  foreach nome $arquivosInicioC {
    puts "[format "%-15s  %-20s " [file tail $nome] $dir ]"
    }
  }
</PRE>
Adicionar o nome do diretório ao comando <CODE>glob</CODE> também adiciona
aquele caminho de diretório a cada nome na lista. Dependendo do seu programa
você pode querer ou não aquela informação em cada nome.
:TEXT_END:

:CODE_START:
set dirs [list TEMPDIR]


puts "[format "%-15s  %-20s " "ARQUIVO" "DIRETÓRIO"]"

foreach dir $dirs {
  catch {cd $dir}
  set arquivosInicioC [glob -nocomplain c*]

  foreach nome $arquivosInicioC {
    puts "[format "%-15s  %-20s " $nome [pwd]]"
    }
  }

:TEXT_END:

