Commit 7d456a3f0eeba77f90cdf44690b54695bc6c2f5b

Authored by Edmar Moretti
1 parent b117ff29

Incluída opção para plicar um SLD em um layer do mapa

aplicmap/dados/testeestados.sld 0 → 100644
... ... @@ -0,0 +1,225 @@
  1 +<StyledLayerDescriptor version="1.0.0" xmlns="http://www.opengis.net/sld" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd">
  2 +<NamedLayer>
  3 +<Name>estados</Name>
  4 +<UserStyle>
  5 +<FeatureTypeStyle>
  6 +<Rule>
  7 +<Name>AC</Name>
  8 +<PolygonSymbolizer>
  9 +<Fill>
  10 +<CssParameter name="fill">#ed279e</CssParameter>
  11 +<CssParameter name="fill-opacity">1.00</CssParameter>
  12 +</Fill>
  13 +</PolygonSymbolizer>
  14 +</Rule>
  15 +<Rule>
  16 +<Name>AL</Name>
  17 +<PolygonSymbolizer>
  18 +<Fill>
  19 +<CssParameter name="fill">#4e0a61</CssParameter>
  20 +<CssParameter name="fill-opacity">1.00</CssParameter>
  21 +</Fill>
  22 +</PolygonSymbolizer>
  23 +</Rule>
  24 +<Rule>
  25 +<Name>AM</Name>
  26 +<PolygonSymbolizer>
  27 +<Fill>
  28 +<CssParameter name="fill">#618dfb</CssParameter>
  29 +<CssParameter name="fill-opacity">1.00</CssParameter>
  30 +</Fill>
  31 +</PolygonSymbolizer>
  32 +</Rule>
  33 +<Rule>
  34 +<Name>BA</Name>
  35 +<PolygonSymbolizer>
  36 +<Fill>
  37 +<CssParameter name="fill">#9d7c5b</CssParameter>
  38 +<CssParameter name="fill-opacity">1.00</CssParameter>
  39 +</Fill>
  40 +</PolygonSymbolizer>
  41 +</Rule>
  42 +<Rule>
  43 +<Name>CE</Name>
  44 +<PolygonSymbolizer>
  45 +<Fill>
  46 +<CssParameter name="fill">#1f9317</CssParameter>
  47 +<CssParameter name="fill-opacity">1.00</CssParameter>
  48 +</Fill>
  49 +</PolygonSymbolizer>
  50 +</Rule>
  51 +<Rule>
  52 +<Name>DF</Name>
  53 +<PolygonSymbolizer>
  54 +<Fill>
  55 +<CssParameter name="fill">#0317c2</CssParameter>
  56 +<CssParameter name="fill-opacity">1.00</CssParameter>
  57 +</Fill>
  58 +</PolygonSymbolizer>
  59 +</Rule>
  60 +<Rule>
  61 +<Name>ES</Name>
  62 +<PolygonSymbolizer>
  63 +<Fill>
  64 +<CssParameter name="fill">#98648b</CssParameter>
  65 +<CssParameter name="fill-opacity">1.00</CssParameter>
  66 +</Fill>
  67 +</PolygonSymbolizer>
  68 +</Rule>
  69 +<Rule>
  70 +<Name>GO</Name>
  71 +<PolygonSymbolizer>
  72 +<Fill>
  73 +<CssParameter name="fill">#da3ada</CssParameter>
  74 +<CssParameter name="fill-opacity">1.00</CssParameter>
  75 +</Fill>
  76 +</PolygonSymbolizer>
  77 +</Rule>
  78 +<Rule>
  79 +<Name>MA</Name>
  80 +<PolygonSymbolizer>
  81 +<Fill>
  82 +<CssParameter name="fill">#c2a8ec</CssParameter>
  83 +<CssParameter name="fill-opacity">1.00</CssParameter>
  84 +</Fill>
  85 +</PolygonSymbolizer>
  86 +</Rule>
  87 +<Rule>
  88 +<Name>MG</Name>
  89 +<PolygonSymbolizer>
  90 +<Fill>
  91 +<CssParameter name="fill">#d28d2a</CssParameter>
  92 +<CssParameter name="fill-opacity">1.00</CssParameter>
  93 +</Fill>
  94 +</PolygonSymbolizer>
  95 +</Rule>
  96 +<Rule>
  97 +<Name>MS</Name>
  98 +<PolygonSymbolizer>
  99 +<Fill>
  100 +<CssParameter name="fill">#7c232f</CssParameter>
  101 +<CssParameter name="fill-opacity">1.00</CssParameter>
  102 +</Fill>
  103 +</PolygonSymbolizer>
  104 +</Rule>
  105 +<Rule>
  106 +<Name>MT</Name>
  107 +<PolygonSymbolizer>
  108 +<Fill>
  109 +<CssParameter name="fill">#a3af5f</CssParameter>
  110 +<CssParameter name="fill-opacity">1.00</CssParameter>
  111 +</Fill>
  112 +</PolygonSymbolizer>
  113 +</Rule>
  114 +<Rule>
  115 +<Name>PA</Name>
  116 +<PolygonSymbolizer>
  117 +<Fill>
  118 +<CssParameter name="fill">#c32b3d</CssParameter>
  119 +<CssParameter name="fill-opacity">1.00</CssParameter>
  120 +</Fill>
  121 +</PolygonSymbolizer>
  122 +</Rule>
  123 +<Rule>
  124 +<Name>PB</Name>
  125 +<PolygonSymbolizer>
  126 +<Fill>
  127 +<CssParameter name="fill">#0d528d</CssParameter>
  128 +<CssParameter name="fill-opacity">1.00</CssParameter>
  129 +</Fill>
  130 +</PolygonSymbolizer>
  131 +</Rule>
  132 +<Rule>
  133 +<Name>PE</Name>
  134 +<PolygonSymbolizer>
  135 +<Fill>
  136 +<CssParameter name="fill">#c3c52a</CssParameter>
  137 +<CssParameter name="fill-opacity">1.00</CssParameter>
  138 +</Fill>
  139 +</PolygonSymbolizer>
  140 +</Rule>
  141 +<Rule>
  142 +<Name>PI</Name>
  143 +<PolygonSymbolizer>
  144 +<Fill>
  145 +<CssParameter name="fill">#bde029</CssParameter>
  146 +<CssParameter name="fill-opacity">1.00</CssParameter>
  147 +</Fill>
  148 +</PolygonSymbolizer>
  149 +</Rule>
  150 +<Rule>
  151 +<Name>PR</Name>
  152 +<PolygonSymbolizer>
  153 +<Fill>
  154 +<CssParameter name="fill">#54e477</CssParameter>
  155 +<CssParameter name="fill-opacity">1.00</CssParameter>
  156 +</Fill>
  157 +</PolygonSymbolizer>
  158 +</Rule>
  159 +<Rule>
  160 +<Name>RJ</Name>
  161 +<PolygonSymbolizer>
  162 +<Fill>
  163 +<CssParameter name="fill">#5ec2f1</CssParameter>
  164 +<CssParameter name="fill-opacity">1.00</CssParameter>
  165 +</Fill>
  166 +</PolygonSymbolizer>
  167 +</Rule>
  168 +<Rule>
  169 +<Name>RN</Name>
  170 +<PolygonSymbolizer>
  171 +<Fill>
  172 +<CssParameter name="fill">#5a5059</CssParameter>
  173 +<CssParameter name="fill-opacity">1.00</CssParameter>
  174 +</Fill>
  175 +</PolygonSymbolizer>
  176 +</Rule>
  177 +<Rule>
  178 +<Name>RO</Name>
  179 +<PolygonSymbolizer>
  180 +<Fill>
  181 +<CssParameter name="fill">#2bf095</CssParameter>
  182 +<CssParameter name="fill-opacity">1.00</CssParameter>
  183 +</Fill>
  184 +</PolygonSymbolizer>
  185 +</Rule>
  186 +<Rule>
  187 +<Name>SC</Name>
  188 +<PolygonSymbolizer>
  189 +<Fill>
  190 +<CssParameter name="fill">#58922d</CssParameter>
  191 +<CssParameter name="fill-opacity">1.00</CssParameter>
  192 +</Fill>
  193 +</PolygonSymbolizer>
  194 +</Rule>
  195 +<Rule>
  196 +<Name>SE</Name>
  197 +<PolygonSymbolizer>
  198 +<Fill>
  199 +<CssParameter name="fill">#576abf</CssParameter>
  200 +<CssParameter name="fill-opacity">1.00</CssParameter>
  201 +</Fill>
  202 +</PolygonSymbolizer>
  203 +</Rule>
  204 +<Rule>
  205 +<Name>SP</Name>
  206 +<PolygonSymbolizer>
  207 +<Fill>
  208 +<CssParameter name="fill">#6c6a59</CssParameter>
  209 +<CssParameter name="fill-opacity">1.00</CssParameter>
  210 +</Fill>
  211 +</PolygonSymbolizer>
  212 +</Rule>
  213 +<Rule>
  214 +<Name>TO</Name>
  215 +<PolygonSymbolizer>
  216 +<Fill>
  217 +<CssParameter name="fill">#ff8b01</CssParameter>
  218 +<CssParameter name="fill-opacity">1.00</CssParameter>
  219 +</Fill>
  220 +</PolygonSymbolizer>
  221 +</Rule>
  222 +</FeatureTypeStyle>
  223 +</UserStyle>
  224 +</NamedLayer>
  225 +</StyledLayerDescriptor>
... ...
aplicmap/ogcws.map
... ... @@ -7,6 +7,7 @@ MAP
7 7 IMAGECOLOR 255 255 255
8 8 SIZE 450 450
9 9 STATUS ON
  10 + CONFIG "MS_NONSQUARE" "YES"
10 11 OUTPUTFORMAT
11 12 NAME "png"
12 13 MIMETYPE "image/png"
... ...
classesjs/classe_arvoredecamadas.js
... ... @@ -775,6 +775,7 @@ i3GEO.arvoreDeCamadas = {
775 775 i3GEO.arvoreDeCamadas.adicionaOpcaoTema($trad("t42"),$trad("t42"),'i3GEO.tema.dialogo.cortina(\"'+ltema.name+'\")',node);
776 776 }
777 777 i3GEO.arvoreDeCamadas.adicionaOpcaoTema($trad("t38"),$trad("t39"),'i3GEO.tema.dialogo.sld(\"'+ltema.name+'\")',node);
  778 + i3GEO.arvoreDeCamadas.adicionaOpcaoTema($trad("t43"),$trad("t43"),'i3GEO.tema.dialogo.aplicarsld(\"'+ltema.name+'\")',node);
778 779 if(ltema.editorsql == "sim" || ltema.editorsql == "SIM")
779 780 {i3GEO.arvoreDeCamadas.adicionaOpcaoTema($trad("t40"),$trad("t41"),'i3GEO.tema.dialogo.editorsql(\"'+ltema.name+'\")',node);}
780 781  
... ...
classesjs/classe_tema.js
... ... @@ -505,13 +505,26 @@ i3GEO.tema = {
505 505  
506 506 Parametros:
507 507  
508   - idtema - id ue identifica o tema no map file.
  508 + idtema - id que identifica o tema no map file.
509 509 */
510 510 sld: function(idtema){
511 511 i3GEO.mapa.ativaTema(idtema);
512 512 i3GEO.janela.cria("500px","350px",i3GEO.configura.locaplic+"/classesphp/mapa_controle.php?funcao=tema2sld&tema="+idtema+"&g_sid="+i3GEO.configura.sid,"","","SLD <a class=ajuda_usuario target=_blank href='"+i3GEO.configura.locaplic+"/ajuda_usuario.php?idcategoria=5&idajuda=41' >&nbsp;&nbsp;&nbsp;</a>");
513 513 },
514 514 /*
  515 + Function: aplicarsld
  516 +
  517 + Fax o upload de um arquivo SLD (xml) e aplica ao tema
  518 +
  519 + Parametros:
  520 +
  521 + idtema - id que identifica o tema no map file.
  522 + */
  523 + aplicarsld: function(idtema){
  524 + i3GEO.mapa.ativaTema(idtema);
  525 + if(typeof(i3GEOF.download) === 'undefined')
  526 + {i3GEO.util.dialogoFerramenta("i3GEO.tema.dialogo.aplicarsld()","aplicarsld","aplicarsld");} },
  527 + /*
515 528 Function: editorsql
516 529  
517 530 Abre a janela de diálogo da ferramenta editorsql
... ...
classesjs/dicionario.js
... ... @@ -721,7 +721,7 @@ it:&quot;Exporta a legenda para o padrão SLD.&quot;
721 721 }],
722 722 "t39":[
723 723 {
724   -pt:"SLD...",
  724 +pt:"Exportar SLD...",
725 725 en:"SLD...",
726 726 es:"SLD...",
727 727 it:"SLD..."
... ... @@ -735,7 +735,7 @@ it:&quot;Abre a ferramenta que permite alterar o SQL de acesso aos dados&quot;
735 735 }],
736 736 "t41":[
737 737 {
738   -pt:"SQL...",
  738 +pt:"Editar SQL...",
739 739 en:"SQL...",
740 740 es:"SQL...",
741 741 it:"SQL..."
... ... @@ -747,6 +747,13 @@ en:&quot;Curtain...&quot;,
747 747 es:"Cortina...",
748 748 it:"Tenda..."
749 749 }],
  750 +"t43":[
  751 +{
  752 +pt:"Aplicar SLD...",
  753 +en:"Aplicar SLD...",
  754 +es:"Aplicar SLD...",
  755 +it:"Aplicar SLD..."
  756 +}],
750 757 //guia adiciona
751 758 "a1":[
752 759 {
... ...
classesjs/dicionario_ajuda.js
... ... @@ -770,6 +770,14 @@ g_traducao_ajuda = {
770 770 complemento:"",
771 771 tela:"",
772 772 apijs:"i3GEO.tema.dialogo.cortina()"
  773 + },
  774 + "91": {
  775 + titulo: "Aplicar SLD",
  776 + diretorio:"i3geo/classesjs/classe_tema.js",
  777 + categoria:"5",
  778 + pt:"Aplica um arquivo XML, no formato SLD, ao tema ativo.",
  779 + complemento:"SLD é um formato padrão que permite definir filtros e simbologia. Vários softwraes permitem criar arquivos nesse padrão.",
  780 + apijs:"i3GEO.tema.dialogo.aplicarsld()"
773 781 }
774 782 }
775 783 };
... ...
classesphp/funcoes_gerais.php
... ... @@ -618,6 +618,7 @@ function gravaDados($dados,$arq)
618 618 {
619 619 fwrite($fp,$dado."\n");
620 620 }
  621 + fclose($fp);
621 622 }
622 623 /*
623 624 Function: listaTrueType
... ...
ferramentas/aplicarsld/index.js.php 0 → 100644
... ... @@ -0,0 +1,133 @@
  1 +<?php error_reporting(0);if(extension_loaded('zlib')){ob_start('ob_gzhandler');} header("Content-type: text/javascript"); ?>
  2 +/*jslint plusplus:false,white:false,undef: false, rhino: true, onevar: true, evil: true */
  3 +/*
  4 +Title: aplicarsld
  5 +
  6 +Envia para o servidor um arquivo no formato SLD local e aplica ao tema ativo.
  7 +
  8 +Veja:
  9 +
  10 +<i3GEO.tema.dialogo.aplicarsld>
  11 +
  12 +Arquivo:
  13 +
  14 +i3geo/ferramentas/aplicarsld/index.js.php
  15 +
  16 +Licenca:
  17 +
  18 +GPL2
  19 +
  20 +I3Geo Interface Integrada de Ferramentas de Geoprocessamento para Internet
  21 +
  22 +Direitos Autorais Reservados (c) 2006 Ministério do Meio Ambiente Brasil
  23 +Desenvolvedor: Edmar Moretti edmar.moretti@mma.gov.br
  24 +
  25 +Este programa é software livre; você pode redistribuí-lo
  26 +e/ou modificá-lo sob os termos da Licença Pública Geral
  27 +GNU conforme publicada pela Free Software Foundation;
  28 +tanto a versão 2 da Licença.
  29 +Este programa é distribuído na expectativa de que seja útil,
  30 +porém, SEM NENHUMA GARANTIA; nem mesmo a garantia implícita
  31 +de COMERCIABILIDADE OU ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA.
  32 +Consulte a Licença Pública Geral do GNU para mais detalhes.
  33 +Você deve ter recebido uma cópia da Licença Pública Geral do
  34 +GNU junto com este programa; se não, escreva para a
  35 +Free Software Foundation, Inc., no endereço
  36 +59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  37 +*/
  38 +
  39 +
  40 +if(typeof(i3GEOF) === 'undefined'){
  41 + i3GEOF = [];
  42 +}
  43 +/*
  44 +Classe: i3GEOF.aplicarsld
  45 +*/
  46 +i3GEOF.aplicarsld = {
  47 + /*
  48 + Variavel: aguarde
  49 +
  50 + Estilo do objeto DOM com a imagem de aguarde existente no cabeçalho da janela.
  51 + */
  52 + aguarde: "",
  53 + /*
  54 + Function: inicia
  55 +
  56 + Inicia a ferramenta. É chamado por criaJanelaFlutuante
  57 +
  58 + Parametro:
  59 +
  60 + iddiv {String} - id do div que receberá o conteudo HTML da ferramenta
  61 + */
  62 + inicia: function(iddiv){
  63 + try{
  64 + $i(iddiv).innerHTML += i3GEOF.aplicarsld.html();
  65 + new YAHOO.widget.Button(
  66 + "i3GEOaplicarsldbotao1",
  67 + {onclick:{fn: i3GEOF.aplicarsld.submete}}
  68 + );
  69 + }
  70 + catch(erro){alert(erro);}
  71 + },
  72 + /*
  73 + Function: html
  74 +
  75 + Gera o código html para apresentação das opções da ferramenta
  76 +
  77 + Retorno:
  78 +
  79 + String com o código html
  80 + */
  81 + html:function(){
  82 + var ins = '<form id=i3GEOaplicarsldf target="i3GEOaplicarsldiframe" action="'+i3GEO.configura.locaplic+'/ferramentas/aplicarsld/upload.php?tema='+i3GEO.temaAtivo+'" method="post" ENCTYPE="multipart/form-data">' +
  83 + '<p class="paragrafo" >Arquivo SLD: <br><input class=digitar type="file" size=42 name="i3GEOaplicarsld" style="top:0px;left:0px;cursor:pointer;"></p>' +
  84 + '<br><p class="paragrafo" ><input id=i3GEOaplicarsldbotao1 type="button" value="Aplicar" size=12 name="submit">' +
  85 + '<input type=hidden name=g_sid value="'+i3GEO.configura.sid+'" >' +
  86 + '<input type="hidden" name="MAX_FILE_SIZE" value="100000">' +
  87 + '</form>' +
  88 + '<br><iframe name=i3GEOaplicarsldiframe style="text-align:left;" width="98%" height="60px"></iframe>';
  89 + return ins;
  90 + },
  91 + /*
  92 + Function: criaJanelaFlutuante
  93 +
  94 + Cria a janela flutuante para controle da ferramenta.
  95 + */
  96 + criaJanelaFlutuante: function(){
  97 + var janela,divid,temp,titulo,cabecalho,minimiza;
  98 + cabecalho = function(){};
  99 + minimiza = function(){
  100 + i3GEO.janela.minimiza("i3GEOF.aplicarsld");
  101 + };
  102 + titulo = "Aplicar SLD <a class=ajuda_usuario target=_blank href='" + i3GEO.configura.locaplic + "/ajuda_usuario.php?idcategoria=5&idajuda=91' >&nbsp;&nbsp;&nbsp;</a>";
  103 + janela = i3GEO.janela.cria(
  104 + "320px",
  105 + "280px",
  106 + "",
  107 + "",
  108 + "",
  109 + titulo,
  110 + "i3GEOF.aplicarsld",
  111 + false,
  112 + "hd",
  113 + cabecalho,
  114 + minimiza
  115 + );
  116 + divid = janela[2].id;
  117 + $i("i3GEOF.aplicarsld_corpo").style.backgroundColor = "white";
  118 + i3GEOF.aplicarsld.aguarde = $i("i3GEOF.aplicarsld_imagemCabecalho").style;
  119 + i3GEOF.aplicarsld.inicia(divid);
  120 + },
  121 + /*
  122 + Function: submete
  123 +
  124 + Submete o arquivo ao servidor.
  125 + */
  126 + submete: function(){
  127 + if(i3GEOF.aplicarsld.aguarde.visibility==="visible")
  128 + {return;}
  129 + i3GEOF.aplicarsld.aguarde.visibility="visible";
  130 + $i("i3GEOaplicarsldf").submit();
  131 + }
  132 +};
  133 +<?php error_reporting(0);if(extension_loaded('zlib')){ob_end_flush();}?>
... ...
ferramentas/aplicarsld/upload.php 0 → 100644
... ... @@ -0,0 +1,80 @@
  1 +<?php
  2 +require_once("../../classesphp/pega_variaveis.php");
  3 +require_once("../../classesphp/funcoes_gerais.php");
  4 +include_once ("../../classesphp/carrega_ext.php");
  5 +error_reporting(E_ALL);
  6 +session_name("i3GeoPHP");
  7 +if (isset($g_sid))
  8 +{session_id($g_sid);}
  9 +session_start();
  10 +foreach(array_keys($_SESSION) as $k)
  11 +{eval("\$".$k."='".$_SESSION[$k]."';");}
  12 +$postgis_mapa = $_SESSION["postgis_mapa"];
  13 +?>
  14 +<html>
  15 +<head>
  16 +<link rel="stylesheet" type="text/css" href="../../css/geral.css" />
  17 +<title></title>
  18 +</head>
  19 +<body name="ancora" bgcolor="white" style="background-color:white;text-align:left;">
  20 +<p>
  21 +<?php
  22 +if (isset($_FILES['i3GEOaplicarsld']['name']))
  23 +{
  24 + //$ndir = dirname($filen);
  25 + require_once ("../../ms_configura.php");
  26 + $mapa = ms_newMapObj($map_file);
  27 + echo "<p class='paragrafo' >Carregando o arquivo...</p>";
  28 + $dirmap = dirname($map_file);
  29 + //verifica nomes
  30 + verificaNome($_FILES['i3GEOaplicarsld']['name']);
  31 + //sobe arquivo
  32 + $Arquivo = $_FILES['i3GEOaplicarsld']['tmp_name'];
  33 + $status = move_uploaded_file($Arquivo,$dirmap."/".$_FILES['i3GEOaplicarsld']['name']);
  34 +
  35 + if($status != 1)
  36 + {echo "<p class='paragrafo' >Ocorreu um erro no envio do arquivo SLD";paraAguarde();exit;}
  37 + if($status == 1)
  38 + {
  39 + echo "<p class='paragrafo' >Arquivo enviado. Aplicando SLD...$tema</p>";
  40 + $layer = $mapa->getlayerbyname($tema);
  41 + $arq = $dirmap."/".$_FILES['i3GEOaplicarsld']['name'];
  42 + $abre = fopen($arq, "r");
  43 + $buffer = fread($abre, filesize($arq));
  44 + fclose($abre);
  45 + $layer->applySLD($buffer);
  46 + $layer->setmetadata("cache","");
  47 + $salvo = $mapa->save($map_file);
  48 + echo "<p class='paragrafo' >Aplicado!!! Redesenhando o mapa.";
  49 + echo "<script>window.parent.i3GEO.atualiza();window.parent.i3GEO.Interface.atualizaTema('',window.parent.i3GEO.temaAtivo);</script>";
  50 + }
  51 + else
  52 + {
  53 + echo "<p class='paragrafo' >Erro ao enviar o arquivo.</p>";
  54 + paraAguarde();
  55 + exit;
  56 + }
  57 +}
  58 +else
  59 +{
  60 + echo "<p class='paragrafo' >Erro ao enviar o arquivo. Talvez o tamanho do arquivo seja maior do que o permitido.</p>";
  61 +}
  62 +paraAguarde();
  63 +function paraAguarde(){
  64 + echo "<script>window.parent.i3GEOF.aplicarsld.aguarde.visibility='hidden';</script>";
  65 +}
  66 +function verificaNome($nome)
  67 +{
  68 + $nome = strtolower($nome);
  69 + $lista = explode(".",$nome);
  70 + $extensao = $lista[count($lista) - 1];
  71 + if($extensao != "xml" && $extensao != "sld")
  72 + {
  73 + echo "Nome de arquivo inválido.";
  74 + paraAguarde();
  75 + exit;
  76 + }
  77 +}
  78 +?>
  79 +</body>
  80 +</html>
0 81 \ No newline at end of file
... ...