• Olá Visitante, se gosta do forum e pretende contribuir com um donativo para auxiliar nos encargos financeiros inerentes ao alojamento desta plataforma, pode encontrar mais informações sobre os várias formas disponíveis para o fazer no seguinte tópico: leia mais... O seu contributo é importante! Obrigado.

Tutorial de Visual Basic Script

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Loop FOR



Loop FOR , o mais simples e habitual. Vemos sua sintaxe e um exemplo de seu funcionamento em VBScript .

Por Miguel Angel Alvarez - Tradução de JML




A sentença FOR é utilizada para os loops, quando sabemos o número de vezes que devemos executar o loop. Vejamos sua simples sintaxe:
FOR (iniciacao) TO (termo do loop) STEP (passo)
sentencas
........
NEXT


A sentença realiza uma repetição através da iniciação até o termo do loop. Para levar a conta se utiliza uma variável, já veremos no exemplo como se utiliza esta variável. Com cada execução do loop se executam umas sentenças. NEXT serve para delimitar o final do loop, quando se encontra com o NEXT volta-se outra vez ao princípio do FOR, assim até realizar o número de execuções determinado.

Existe um valor que serve para indicar o grande que se deseja realizar os saltos entre execução e execução, é o valor STEP. Um STEP 2 determinaria que entre execução e execução a variável incrementa-se em 2 unidades. No caso de não indicar nada realizam-se passos de 1 em 1. Também podemos realizar passos em valores negativos.

Um exemplo destes dados seria o seguinte:for i=0 to 6 step 2
msgbox(i)
next


Este exemplo apresentaria uma mensagem com um numero da variável i, utilizada para levar a conta das execuções do loop.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Loop FOR EACH



Um loop FOR especial, utilizado para percorrer os elementos de uma estrutura de dados. Explicamos seu funcionamento em VBScript.

Por Miguel Angel Alvarez - Tradução de JML




A estrutura de controle FOR EACH serve para mover-se pelos elementos de uma estrutura de dados, como poderia ser um vetor, e realizar ações para cada um dos elementos.

Vejamos com um exemplo esta estrutura de controle: No exemplo, primeiro criamos um vetor e preenchemos com números cada um de seus campos, com um loop FOR normal. Mais tarde utilizamos o loop FOR EACH para acessar a cada uma das posições deste vetor de números e escrever na página cada um destes números.
dim tor(20)
for i=0 to 20
tor(i) = i
next
for each i in tor
document.write (tor(i))
next

Observemos o segundo loop, indica-se que para cada i (i é o índice com o qual podemos nos mover no loop e na estrutura) dentro de tor (que é a estrutura, neste caso um vetor) faça um document.write(tor(i)). Com tor(i) acessamos ao campo atual e document.write() serve para escrever algo na página web. Conbinados, o que é escrito é o que existe na posição atual do vetor.



O.b.s.: Este exemplo não foi provado em Mozilla Firefox.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Loop WHILE WEND


Vemos a sintaxe deste loop while wend e um exemplo.

Por Miguel Angel Alvarez - Tradução de JML




O loop WHILE...WEND serve para realizar um tipo de loop muito utilizado em programação que é o loop Enquanto, que se executa enquanto se cumprir uma condição. A diferença do loop FOR é que este se utiliza quando não conhecemos o número de iterações que temos que realizar.

O loop funciona da seguinte maneira. Quando se vai executar, avalia uma expressão e comprova que esta dá resultados positivos. Se for assim, executa o corpo do loop (as sentenças que continuam até o WEND), em caso contrário se sai. Podemos ver a sintaxe a seguir. WHILE (condicao)
sentencas
....
WEND


Agora vamos ver um pequeno exemplo sobre este loop, que realiza uma conta número a número até chegar ao 13. Em cada iteração do loop mostra em uma janelinha o número atual e oferece a possibilidade de altera-lo, já que a janelinha é uma janela Input, que oferece a oportunidade de mudar o valor e devolve esse valor, mudado ou não. Como dizíamos, se deixarmos o exemplo sem tocar nada, contará até 13, mas se introduzirmos um número no inputbox continuará a conta pelo número introduzido. Se o número introduzido for maior que 13 também sairá do loop. option explicit
dim a
a = 0
WHILE (a < 13)
a = a + 1
a = inputbox("Dá-me um valor inteiro, please","Petição de número",a,200,100)
WEND
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Loop DO LOOP



Este é o loop mais potente que se pode encontrar em VBS, contamos a sintaxe e oferecemos alguns exemplos de loops um pouco mais complexos.

Por Miguel Angel Alvarez - Tradução de JML




O loop DO...LOOP é muito versátil. Com ele se pode criar grande variedade de loops diferentes, loops que comprovem uma condição antes de executar o loop uma vez, depois da primeira execução e com combinações com enquanto (WHILE) que se cumpre uma condição ou até (UNTIL) que essa condição se cumpra. A sintaxe desta estrutura é a seguinte: DO [WHILE | UNTIL (condicao)]
Sentencas
.....
LOOP [WHILE | UNTIL (condicao)]


Vamos tratar de explicar esta sentença de maneira pausada para que seja mais fácil de entender. O que sempre tenderemos nesses loops é o DO e o LOOP, entre estes dois colocaremos as sentenças que queremos executar em cada Iteração do loop. O loops têm que avaliar entre cada iteração se continuam se executando ou não, para isso avaliam uma condição. O versátil deste loop é que a condição se pode expressar de muitas maneiras distintas.

Condição expressada ao lado do DO: neste caso a condição se avalia antes de começar a se executar o loop.
Condição expressada ao lado do LOOP: neste caso a condição se avalia depois de se executar o loop. Tem como diferença principal frente ao outro método que neste caso o loop se executará pelo menos uma vez.

Além de poder expressar a condição nesse dois sites também se pode construir a condição com um enunciado enquanto (WHILE) ou um enunciado até (UNTIL). As diferenças semânticas destas duas possibilidades se transferem também a sua maneira de funcionar.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Veremos dois exemplos deste loop para compreender seu funcionamento. O exemplo pede constantemente o nome do autor da página e não pára até que o nome seja "migue". O usuário também tem a possibilidade de escrever "out", nesse caso, comprovado com um enunciado IF, se sai do loop rompendo com a sentença EXIT DO, utilizada para romper loops. Dim entrada
entrada = ""
DO WHILE (entrada <> "migue")
entrada = inputbox ("Diga o nome do autor","seguraca","migue",2,3)
if (entrada = "out") then
msgbox "saia pela porta dos fundos"
exit do
end if
LOOP



O seguinte exemplo realiza uma conta e entre conta e conta se mostra o valor da conta atual em uma janelinha onde sai um botão de Tentar outra vez e outro de Cancelar. Se clicar em Tentar outra vez, continua se executando o loop e se clicar Cancelar sai pela porta de trás, de maneira parecida a como se saia no exemplo anterior, com EXIT DO.
option explicit
dim cont
dim resposta
cont = 0
DO
cont = cont +1
respuesta = msgbox (cont,69,"Variavel do loop, com valor 6 se sair")
if (resposta = 2) then
msgbox "Conta Cancelada",16,"Cancelou!"
exit do
end if
LOOP UNTIL (cont = 6)
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Arrays em VBScript



Descrição do uso e sintaxe dos Arrays ou matrizes em Visual Basic Script (VBScript).

Por Miguel Angel Alvarez - Tradução de JML





Os Arrays ou matrizes são umas estruturas de dados muito utilizadas em Qualquer linguagem. Trata-se de variáveis, porém que estão preparadas para Salvar uma quantidade maior de elementos. É como uma variável que tem vários compartimentos para salvar a informação e a cada um desses compartimentos há que acessar como um índice.

Antes de utilizar um array devemos declara-lo de maneira obrigatória, para isso utilizamos a palavra chave DIM, deste modo.

dim meuArray(20)

Despois da palavra DIM devemos indicar o nome do array e a seguir, entre parênteses, coloca-se o número de posição máxima do array, neste caso 20.

Os arrays em ASP começam desde a posição 0, ou seja, o primeiro elemento de um array está na posição 0. Portanto, se o array foi definido com 20 campos, como no exemplo, terá 21 elementos, primeira posição será a 0 e a última posição seria a 20.

Para atribuir um valor a um array se realiza igual que uma variável, porém acessando com o índice da posição que queremos escrever.

meuArray(0) = 234

Para utilizar o conteúdo de um array devemos faze-lo indicando o índice ao que se deseja acessar. Por exemplo, se quiséssemos imprimir na página a primeira posição de nosso Array o faríamos desta maneira.

document.write(meuArray(0))

Agora vamos ver um exemplo sobre como utilizar os arrays, onde vamos realizar dois percorridos, um para escrever nele e o outro para ler a informação e escreve-la na página.

dim matriz (10)
for i=0 to 10
matriz(i)=100 * i
next

for i=0 to 10
document.writeln("Posicao " & i & ": " & matriz(i) & "<br>")
next



Este exemplo escreveria na página as posições do array, que contém variáveis numéricas que correspondem de multiplicar seu índice por 100.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Arrays multidimensionais em VBScript

Podem-se construir matrizes multidimensionais, ou seja, que nos permitam criar matrizes de várias coordenadas. Para trabalhar com eles utiliza-se uma vírgula que separa os dois índices. Por exemplo, podemos definir uma matriz de 8x8 desta maneira.

dim meuArray2Dimensoes (7,7)

Como o array é de 8 campos, utilizamos um 7 e suas posições serão as 8 que vão desde o 0 ao 7. Para escrever e ler do Array podemos utilizar a vírgula de maneira similar a como se declara. Por exemplo, para colocar dados na posição 0,2 faríamos o seguinte:

meuArray2Dimensoes (0,2) = "texto posicao 0,2"

Redimensionar arrays

Podemos declarar também arrays que mudem o número de campos que têm segundo se necessite em tempo de execução. Este tipo de arrays redimensionais se chama array dinâmico. Para criar este tipo de arrays podemos utilizar a sentença dim (como criávamos os anteriores) ou a sentença redim, com a particularidade que não lhe colocamos nenhum valor entre parênteses onde antes indicávamos o número de campos do array.

dim meu_array()
redim meu_outro_array()

Quando usamos arrays dinâmicos podemos utilizar a sentença redim para indicar o número de dimensões e a quantidade de campos de cada dimensão.

Com esta sentença estamos indicando que meu_array deve ter o tamanho 10. Campos desde 0 até a 10.

redim meu_array(10)

Se indicamos a chave "preserve" estamos garantindo que o conteúdo dos campos que havia previamente no array se mantém.

redim preserve meu_array(20)

Por último, se em qualquer momento reduzimos o número de campos perderemos o que possa ter sido salvo nos campos que se eliminaram.

No seguinte exemplo criamos um array dinâmico e o redimensionamos inicialmente a tamanho 3. Preenchemos e mostramos seus distintos valores. Posteriormente o redimensionamos outra vez para que chegue até a posição 7, salvando os valores antigos. Para acabar preenchendo os campos que criamos novos e mostramos todos os valores do array.

dim frutas()
redim frutas(3)

frutas(0) = "Pêra"
frutas(1) = "Uva"
frutas(2) = "Maçã"
frutas(3) = "Melão"

for each fruta in frutas
document.write fruta & "<br>"
next

redim preserve frutas(7)

frutas(4) = "Melancia"
frutas(5) = "Laranja"
frutas(6) = "Banana"
frutas(7) = "Tangerina"

for each fruta in frutas
document.write fruta & "<br>"
next
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Nota:

Os arrays de mais de uma dimensão também podem se redimensionar, porém só se pode alterar a última dimensão.

Por exemplo, em um array de duas dimensões meuarray(2,4), se poderia redimensionar a segunda dimensão redim meuarray(2,8). Ou em um array de 3 dimensões, onde também poderíamos mudar somente a última dimensão.

Um exemplo de código que faz isto é:

dim dados_prova()
redim dados_prova(1,0)

dados_prova(0,0)=12
dados_prova(1,0)="ola!"

redim preserve dados_prova(1,1)

dados_prova(0,1)=133
dados_prova(1,1)="segunda campo"

for i=0 to ubound(dados_prova)
document.write dados_prova(0,i) & "-" & dados_prova(1,i) & "<br>"
next
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Obter o número de campos de um array

Um dos dados típicos que necessitamos extrair de um array é seu número de posições, útil, por exemplo, para fazer um percorrido a um array, desde a primeira até o último campo. Para isso, utilizamos a função uBound() de VBScript.

uBound() recebe o array do que queremos obter seu número de posições e devolve a posição mais alta do array. Por exemplo:

dim cidades(5)
document.write ubound (cidades)

Escreveria na página o número do campo mais alto do array cidades, neste caso 5.

Ademais, se por acaso algum dia necessitamos, também temos a nossa disposição a função lBound(), que devolve o número da posição com índice menor do array.

document.write lbound (cidades)

A última linha sobre nosso array de cidades definido anteriormente escreveria um 0 na página web, visto que o array começa na posição zero.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Procedimentos e funções


Descrição dos sub e function de Visual Basic Script, diferenças e usos dos dois tipos de sub-rotinas.

Por Miguel Angel Alvarez - Tradução de JML





Os procedimentos ou funções são muito interessantes e úteis na programação. Servem para realizar uma tarefa concreta que provavelmente se executará várias vezes ao longo da vida da página. Esta tarefa se especifica em um bloco de código de maneira independente e quando se desejam realizar as ações do procedimento chama-se ao procedimento ou à função. Uma vez realizadas as ações pertinentes devolve-se o fluxo do programa ao lugar desde onde se embocou esse procedimento ou função.

O primeiro que devemos fazer ao criar um procedimento é pensar as coisas que se desejam fazer dentro da função, a informação que necessitaremos (e que teremos que receber como parâmetros) e a informação que devolverá. Com estas idéias claras se podem construir os procedimentos e funções sem muita dificuldade, seguindo estas estruturas.

Para um procedimento

Sub nome (parametro1, parametro2...)
... Código do procedimento
end Sub

Para uma função

Function nome (parametro1, parametro2...)
... Código da função
end Function
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Procedimentos. SUB


Vemos detalhadamente os procedimentos em VBScript e algum exemplo de seu uso.

Por Miguel Angel Alvarez - Tradução de JML





Dizíamos que um procedimento era uma sub-rotina que se chamava e realizava ações, mas que não devolvia nenhum valor e portanto, não era possível utiliza-la dentro de uma expressão.

Vejamos algum exemplo de procedimento. É uma sub-rotina que escreve na barra de estado uma mensagem. Não é muito complicada, porém tal como a apresentamos aqui não se deveria fazer, visto que utilizamos um loop vazio para que o navegador esteja um pouco mais lento e o texto saia pouco a pouco. Ao invés desse loop deveríamos utilizar uma função chamada setTimeout, porém, não desejamos introduzi-la agora. sub mostraAbaixo(texto)
dim i
for i=0 to len(texto)
dim actual
actual = left(texto,i)
window.status = actual
dim j
'loop para frear o navegador deveria utilizar-se a função setTimeOut
for j=0 to 20000
j = j
next
next
end sub




Este exemplo utiliza ademais várias funções de cadeias de caracteres, esperamos que não represente muito problema para entende-lo. Basicamente, é um loop que vai percorrendo toda a cadeia de caracteres que recebe por parâmetro. À medida que se realiza o loop vai criando uma sub-cadeia de caracteres da parte esquerda da cadeia original, que cada vez é mais longa. Logo, imprime-se essa cadeia na barra de estado do navegador. Entre execução e execução do loop se realiza um atraso, no segundo loop for que deveria se realizar com um setTimeout.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Podemos ver a seguir como se colocaria um botão na página que chamasse a este procedimento.

<HTML>
<HEAD>
<TITLE>Procedimentos em VBS</TITLE>
<script language=vbscript>
option explicit
sub mostraAbaixo(texto)
dim i
for i=0 to len(texto)
dim actual
actual = left(texto,i)
window.status = actual
dim j
for j=0 to 20000
j = j
next
next
end sub
</script>
</HEAD>
<BODY>
<h1>Procedimentos em VBS</h1>

<P>
<form>
<input type="button" name=b value=colocarAbaixo!
onclick="mostrarAbaixo('Abraços de Miguel')" language=vbscript>
</form>
</P>
</BODY>
</HTML>
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Funções. Function
As funções se caracterizam por que devolvem algum valor. Damos um exemplo sobre como fazer uma calculadora em VBScript.

Por Miguel Angel Alvarez - Tradução de JML


Já vimos o que consistia uma função, que não é mais do que um pedaço de código que opera para devolver um valor. Agora veremos detalhadamente um exemplo de seu uso.

Vamos definir uma função que realize um cálculo matemático e devolva o resultado do mesmo. Vamos extrair os operandos de um formulário. O exemplo pode ser agora mesmo um pouco complexo, por tratar com formulários -que ainda não vimos- porém, podemos ver o código da função e termos uma idéia exata de seu uso, que afinal de contas é o que nos importa.

O código da função será o seguinte:
function operar (operador,op1,op2)
select case operador
case "+":
operar = op1 + op2
case "-":
operar = op1 - op2
case "*":
operar = op1 * op2
case else:
operar = op1 / op2
end select
end function



Vemos que a função recebe três parâmetros, o primeiro é um operador, que não é mais do que um texto com o sinal da operação a realizar. Os dois seguintes parâmetros são os operadores que há que tratar.

A função realiza uma operação matemática dependendo do operador e devolve em cada caso o resultado conveniente. Observemos que para devolver um valor, deve-se realizar uma atribuição do nome da função ao valor que se deseja devolver.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Não implica nenhuma complicação maior. Vamos ver agora o código que poderíamos utilizar para fazer a chamada à função.
meuOperador="+"
meuOperando1=221
meuOperando2=32
resultado = operar(meuOperador,meuOperando1,meuOperando2)



No final de todas estas sentenças a variável resultado terá como valor 253.

Vejamos o exemplo completo, que consistia em uma calculadora feita com um formulário, que usa esta função para obter os resultados.

<HTML>
<HEAD>
<link rel=stylesheet type=text/css href=estiloglobal.css>
<TITLE>Funções em VBS</TITLE>
</HEAD>
<h1>Funções em VBS</h1>
<script language=vbscript>
function operar (operador,op1,op2)
select case operador
case "+":
operar = op1 + op2
case "-":
operar = op1 - op2
case "*":
operar = op1 * op2
case else:
operar = op1 / op2
end select
end function

sub opera ()
dim res
operador = document.forms(0).operacion.value
operando1 = cint(document.forms(0).op1.value)
operando2 = cint(document.forms(0).op2.value)
res = operar (operador,operando1,operando2)
document.forms(0).result.value = res
end sub
</script>
<BODY>
<form>
Operando 1
<input name=op1 >
<br>
Operando 2
<input name=op2 >
<br>
operacao:
<select name=operacao>
<option value="+" selected>+
<option value="-">-
<option value="*">*
<option value="/">/
</select>
<input type=button name=b value="realizar operacao"
onclick=opera language=vbscript>
<br>
Resultado:
<input name=result >
</BODY>
</HTML>


Tivemos que utilizar um procedimento de apoio para fazer o exercício, já que se não utilizássemos a função se tornaria um pouco mais complexa. Poderemos entender tudo já que não implica muita complicação e os procedimentos foram vistos no capítulo anterior.



Temos um formulário onde podemos ver campos para os operadores, uma caixa de seleção para o operando e um último campo para o resultado. É interessante também o botão de realizar operação, que é o que coloca tudo em funcionamento graças a seu administrador de evento onclick, que quer dizer que quando se clica sobre o botão se realiza uma ação. Neste caso é uma chamada ao procedimento opera.

No procedimento opera podemos ver várias sentenças para extrair a informação do formulário e também a chamada à função que realiza os cálculos. Por último, se introduz no campo resultado o que a função devolvia como resultado de realizar as operações.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Mais sobre procedimentos e funções



Temos alguns dados pendentes para falar a respeito das sub-rotinas. Como chamá-las, call, e sair delas à força.

Por Miguel Angel Alvarez - Tradução de JML




Agora veremos mais algumas coisas sobre sub-rotinas que faltaram ser ditas.

Chamadas a sub-rotinas

No Visual Basic Script as funções se utilizam como partes de expressões e os procedimentos como se fosse uma sentença independente.

A chamada a uma função, se for utilizada como parte de uma expressão deve ser chamada utilizando parênteses.

meuResultado = soma(1,2)

Se não se utiliza como parte de uma expressão, não tem porquê utilizar os parênteses, porém, o resultado da função (o que devolve) se perderá.

soma 1,2

Call

É uma chamada a uma sub-rotina, utilizada para transferir o fluxo da aplicação para uma sub-rotina. É necessário utilizar parêntesis quando se utiliza. Ademais, se se utiliza com uma função se perderá o resultado que devolva.

call soma(1,2)

Saída de uma sub-rotina

Podemos sair de um procedimento ou função em qualquer momento, independentemente de que a função tenha terminado ou não. O enunciado para escapar de uma função é EXIT, que se pode utilizar em qualquer lugar do procedimento ou função. A palavra exit deve ir acompanhada do tipo de sub-rotina da que se deseja sair, sendo assim, se deverá utilizar exit function ou então, exit sub.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Imprimir uma página sem ver o diálogo de impressão



Script em VBScript que serve para imprimir uma página web na impressora pré-determinada, sem que se chegue a mostrar a janela de diálogo de impressão de um documento.

Por Darwin Manuel Díaz Garrampié



Neste artigo, eminentemente prático, veremos como imprimir uma página web sem que se peça confirmação ao usuário e sem visualizar a janela prévia de impressão. Neste caso, logicamente, a impressão se realizaria na impressora configurada como pré-determinada no sistema cliente e com as opções definidas por padrão para essa impressora.

É um script na linguagem VBScript, que como provavelmente saibamos só será compatível com Internet Explorer. Se alguém souber como pode ser feito isso com Javascript (se é que isso é possível), para que seja compatível com todos os navegadores, por favor, peço que inclua um comentário ao artigo para compartilhar a informação.

O código está comentado para que se possa entender cada passo que se realiza.

<html>
<head>

<script language="VBScript">
SUB Print()
OLECMDID_PRINT = 6
OLECMDEXECOPT_DONTPROMPTUSER = 2
OLECMDEXECOPT_PROMPTUSER = 1
'ACA no caso de usar frames,
'enfocamos o frame a imprimir:

'window.parent.frames.main.document.body.focus()
window.document.body.focus()

'Chamamos ao comando de Impressão Print

on error resume next
call IEWB.ExecWB (OLECMDID_PRINT, -1)

if err.number <> 0 then
alert "Não se pode imprimir"
end if

END SUB
</script>

</head>
<body>

<object id="IEWB" width="0" height="0" classid="clsid:8856F961-340A-11D0-A96B-00C04FD705A2" VIEWASTEXT></object>

Esta é uma prova de uma página que será impressa, clicando no link abaixo, sem pedir confirmação ao usuário.

<a href="javascript:print ();">Imprimir</a>

</body>
</html>
 
Topo