Commit b6052a0c517d1163226c57bcc6e2a65e5738a6e5
1 parent
2f527742
Exists in
master
and in
7 other branches
Inclusão do fluxo de processamento na documentação
Showing
1 changed file
with
158 additions
and
94 deletions
Show diff stats
ms_criamapa.php
| 1 | 1 | <?php |
| 2 | 2 | /* |
| 3 | -Title: Inicializa o I3Geo via URL | |
| 3 | +Title: Inicializa o I3Geo via URL ms_criamapa.php | |
| 4 | 4 | |
| 5 | 5 | Cria os diretórios temporários para o I3Geo e o mapfile inicial. |
| 6 | 6 | |
| ... | ... | @@ -54,42 +54,56 @@ About: Exemplo |
| 54 | 54 | |
| 55 | 55 | http://localhost/i3geo/ms_criamapa.php?temasa=estadosl |
| 56 | 56 | */ |
| 57 | -// | |
| 58 | -//verifica se o debug deve ser ativado, checando a variável debug | |
| 59 | -// | |
| 57 | +/* | |
| 58 | +Section: Fluxo do código | |
| 59 | +*/ | |
| 60 | +/* | |
| 61 | +Note: Verifica se o debug deve ser ativado, checando a variável debug | |
| 62 | +*/ | |
| 60 | 63 | if (!isset($debug)) |
| 61 | 64 | {error_reporting(0);$debug="nao";} |
| 62 | 65 | else |
| 63 | 66 | {error_reporting(E_ALL);$debug="sim";} |
| 64 | -// | |
| 65 | -//verifica se a variável $caminho está definida | |
| 66 | -// | |
| 67 | +/* | |
| 68 | +Note: Verifica se a variável $caminho está definida | |
| 69 | + | |
| 70 | +Essa variável deve ser definida em programas que utilizam o ms_criamapa.php via include | |
| 71 | +indica onde está o diretório i3geo para que os includes seguintes possam ser localizados | |
| 72 | +*/ | |
| 73 | +if (!file_exists($caminho."classesphp/carrega_ext.php")) | |
| 74 | +{echo "<b> Nao foi possivel localizar o diretório classephp. Provavelmente vc precisara definir a variavel $camino";exit;} | |
| 67 | 75 | if (isset($_GET["caminho"])) |
| 68 | 76 | {$caminho = $_GET["caminho"];} |
| 69 | 77 | if (!isset($caminho)){$caminho = "";} |
| 70 | -// | |
| 71 | -//carrega as extensões | |
| 72 | -// | |
| 78 | +/* | |
| 79 | +Note: Carrega as extensões, geralmente necessário nas instalações windows | |
| 80 | +*/ | |
| 73 | 81 | require_once ($caminho."classesphp/carrega_ext.php"); |
| 74 | -// | |
| 75 | -//carrega as funções adicionais | |
| 76 | -// | |
| 82 | +/* | |
| 83 | +Note: Carrega as funções adicionais | |
| 84 | + | |
| 85 | +Inclui os programas php com funções necessárias | |
| 86 | +*/ | |
| 77 | 87 | require_once ($caminho."classesphp/pega_variaveis.php"); |
| 78 | 88 | require_once ($caminho."classesphp/funcoes_gerais.php"); |
| 79 | 89 | require_once ($caminho."ms_configura.php"); |
| 80 | -// | |
| 81 | -//monta a apresentação do aguarde | |
| 82 | -// | |
| 90 | +/* | |
| 91 | +Note: Monta a apresentação do aguarde | |
| 92 | + | |
| 93 | +Aqui é necessário verificar se $executa está definido | |
| 94 | +isso pq algumas aplicações podem ser prejudicadas caso o aguarde seja mostrado | |
| 95 | +*/ | |
| 83 | 96 | if (!isset($executa)) |
| 84 | 97 | {mostraAguarde();} |
| 85 | -// | |
| 86 | -//define a variável $mapext que define a extensão geográfica do mapa | |
| 87 | -// | |
| 98 | +/* | |
| 99 | +Note: Define a variável $mapext que especifica a extensão geográfica do mapa | |
| 100 | +*/ | |
| 88 | 101 | if (!isset($mapext)){$mapext="";} |
| 89 | -// | |
| 90 | -//prepara as variáveis que serão incluidas na sessão | |
| 91 | -//as variáveis vêm do arquivo ms_configura | |
| 92 | -// | |
| 102 | +/* | |
| 103 | +Note: Prepara as variáveis que serão incluidas na seção | |
| 104 | + | |
| 105 | +As variáveis vêm do arquivo ms_configura | |
| 106 | +*/ | |
| 93 | 107 | $dir_tmp_ = $dir_tmp; |
| 94 | 108 | $temasdir_ = $temasdir; |
| 95 | 109 | $temasaplic_ = $temasaplic; |
| ... | ... | @@ -111,20 +125,17 @@ if ((isset($navegadoresLocais)) && ($navegadoresLocais != "")) |
| 111 | 125 | $navegadoresLocais_ = "sim"; |
| 112 | 126 | else |
| 113 | 127 | $navegadoresLocais_ = "nao"; |
| 114 | -// | |
| 115 | -//inicia a sessão | |
| 116 | -// | |
| 128 | +/* | |
| 129 | +Note: Inicia a seção | |
| 130 | + | |
| 131 | +O i3geo inicia uma seção específica no servidor, denominada i3GeoPHP. | |
| 132 | +Se já houver uma seção aberta, em função de outro browser estar ativo, cria uma nova. Faz a cópia das variáveis definidas para itens da seção. | |
| 133 | +*/ | |
| 117 | 134 | session_name("i3GeoPHP"); |
| 118 | 135 | session_start(); |
| 119 | -// | |
| 120 | -//se já houver uma sessão aberta, em funçaõ de outro browser estar ativo, cria uma nova | |
| 121 | -// | |
| 122 | 136 | if (!isset($g_sid)){$g_sid="";} |
| 123 | 137 | if(isset($_SESSION["map_file"]) || $g_sid!="") |
| 124 | 138 | {session_regenerate_id();} |
| 125 | -// | |
| 126 | -//copia as variáveis para a sessão | |
| 127 | -// | |
| 128 | 139 | $_SESSION["dir_tmp"] = $dir_tmp_; |
| 129 | 140 | $_SESSION["temasdir"] = $temasdir_; |
| 130 | 141 | $_SESSION["temasaplic"] = $temasaplic_; |
| ... | ... | @@ -144,14 +155,16 @@ $_SESSION["perfil"] = $perfil_; |
| 144 | 155 | $_SESSION["navegadoresLocais"] = $navegadoresLocais_; |
| 145 | 156 | $_SESSION["utilizacgi"] = $utilizacgi_; |
| 146 | 157 | // |
| 147 | -//pega todas as variáveis da sessão | |
| 158 | +//pega todas as variáveis da sessão, mesmo as que foram definidas anteriormente | |
| 148 | 159 | // |
| 149 | 160 | foreach(array_keys($_SESSION) as $k) |
| 150 | 161 | {eval("\$".$k."='".$_SESSION[$k]."';");} |
| 162 | +/* | |
| 163 | +Note: Define os arquivos .map conforme o tipo de sistema operacional. | |
| 151 | 164 | |
| 152 | -// | |
| 153 | -//define os arquivos .map conforme o tipo de sistema operacional | |
| 154 | -// | |
| 165 | +Os arquivos .map de inicialização são fixos e são armazenados em i3geo/aplicmap. | |
| 166 | +O arquivo é lido conforma a característica do sistema operacional. | |
| 167 | +*/ | |
| 155 | 168 | if (strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) |
| 156 | 169 | { |
| 157 | 170 | if (!isset($base)){$base = "geral1windows";} |
| ... | ... | @@ -166,9 +179,9 @@ if (file_exists($base)) |
| 166 | 179 | {$mapdefault = ms_newMapObj($base);} |
| 167 | 180 | else |
| 168 | 181 | {$mapdefault = ms_newMapObj($temasaplic."/".$base.".map");} |
| 169 | -// | |
| 170 | -//pega os parâmetros para a inicialização se os mesmos não forem passados pela URL | |
| 171 | -// | |
| 182 | +/* | |
| 183 | +Note: Define os parâmetros para a inicialização se os mesmos não forem passados pela URL. | |
| 184 | +*/ | |
| 172 | 185 | if (!isset($mapext)) |
| 173 | 186 | {$mapext = $mapdefault->extent->minx." ".$mapdefault->extent->miny." ".$mapdefault->extent->maxx." ".$mapdefault->extent->maxy;} |
| 174 | 187 | if (!isset ($map_reference_image)) //arquivo com a imagem de referência |
| ... | ... | @@ -177,19 +190,19 @@ if (!isset ($map_reference_extent)) //extens&atilde;o geogr&aacute;fica da image |
| 177 | 190 | {$map_reference_extent = $mapdefault->reference->extent->minx." ".$mapdefault->reference->extent->miny." ".$mapdefault->reference->extent->maxx." ".$mapdefault->reference->extent->maxy;} |
| 178 | 191 | if (!isset($interface)) |
| 179 | 192 | {$interface = "geral.htm";} |
| 180 | -// | |
| 181 | -//cria os diretórios temporários | |
| 182 | -// | |
| 193 | +/* | |
| 194 | +Note: Cria os diretórios temporários que serão utilizados pelo i3geo para armazenar as imagens e outros dados | |
| 195 | +*/ | |
| 183 | 196 | $diretorios = criaDirMapa($dir_tmp); |
| 184 | 197 | $_SESSION["mapdir"] = $diretorios[1]; |
| 185 | 198 | $_SESSION["imgdir"] = $diretorios[2]; |
| 186 | -// | |
| 187 | -//cria arquivos para impedir a leitura dos diretórios temporários | |
| 188 | -// | |
| 199 | +/* | |
| 200 | +Note: Cria arquivos para impedir a leitura dos diretórios temporários diretamente no browser | |
| 201 | +*/ | |
| 189 | 202 | criaIndex(); |
| 190 | -// | |
| 191 | -//cria os objetos map | |
| 192 | -// | |
| 203 | +/* | |
| 204 | +Note: Cria os objetos map que serão processados | |
| 205 | +*/ | |
| 193 | 206 | ms_ResetErrorList(); |
| 194 | 207 | if (file_exists($base)) |
| 195 | 208 | { |
| ... | ... | @@ -208,13 +221,10 @@ while($error && $error->code != MS_NOERR) |
| 208 | 221 | $error = $error->next(); |
| 209 | 222 | } |
| 210 | 223 | ms_ResetErrorList(); |
| 211 | -// | |
| 212 | -//verifica a lista de temas da inicializacao, adicionando-os se necessário | |
| 213 | -// | |
| 224 | +/* | |
| 225 | +Note: Verifica a lista de temas da inicializacao, adicionando-os se necessário | |
| 226 | +*/ | |
| 214 | 227 | incluiTemasIniciais(); |
| 215 | -// | |
| 216 | -//verifica erros | |
| 217 | -// | |
| 218 | 228 | $error = ms_GetErrorObj(); |
| 219 | 229 | while($error && $error->code != MS_NOERR) |
| 220 | 230 | { |
| ... | ... | @@ -222,13 +232,10 @@ while($error && $error->code != MS_NOERR) |
| 222 | 232 | $error = $error->next(); |
| 223 | 233 | } |
| 224 | 234 | ms_ResetErrorList(); |
| 225 | -// | |
| 226 | -//liga os temas definidos em $layers | |
| 227 | -// | |
| 235 | +/* | |
| 236 | +Note: Liga os temas definidos em $layers | |
| 237 | +*/ | |
| 228 | 238 | ligaTemas(); |
| 229 | -// | |
| 230 | -//verifica erros | |
| 231 | -// | |
| 232 | 239 | $error = ms_GetErrorObj(); |
| 233 | 240 | while($error && $error->code != MS_NOERR) |
| 234 | 241 | { |
| ... | ... | @@ -236,9 +243,9 @@ while($error && $error->code != MS_NOERR) |
| 236 | 243 | $error = $error->next(); |
| 237 | 244 | } |
| 238 | 245 | ms_ResetErrorList(); |
| 239 | -// | |
| 240 | -//aplica ao mapa os parâmetros passados pela URL | |
| 241 | -// | |
| 246 | +/* | |
| 247 | +Note: Aplica ao mapa os parâmetros passados pela URL | |
| 248 | +*/ | |
| 242 | 249 | if (isset($map_reference_image)) |
| 243 | 250 | {$mapn->reference->set("image",$map_reference_image);} |
| 244 | 251 | $extr = $mapn->reference->extent; |
| ... | ... | @@ -273,9 +280,11 @@ while($error && $error->code != MS_NOERR) |
| 273 | 280 | $error = $error->next(); |
| 274 | 281 | } |
| 275 | 282 | ms_ResetErrorList(); |
| 276 | -// | |
| 277 | -//configura os endereços corretos | |
| 278 | -// | |
| 283 | +/* | |
| 284 | +Note: Configura os endereços corretos no mapfile para acessar os diretórios temporários. | |
| 285 | + | |
| 286 | +Altera as propriedades imagepath e imageurl | |
| 287 | +*/ | |
| 279 | 288 | $protocolo = explode("/",$_SERVER['SERVER_PROTOCOL']); |
| 280 | 289 | $w = $mapn->web; |
| 281 | 290 | $atual = $w->imagepath; |
| ... | ... | @@ -285,9 +294,12 @@ $w->set("imageurl",$atual.$diretorios[2]."/"); |
| 285 | 294 | $salvo = $mapn->save($diretorios[0]); |
| 286 | 295 | $_SESSION["imgurl"] = $protocolo[0]."://".$_SERVER['HTTP_HOST'].$atual.$diretorios[2]."/"; |
| 287 | 296 | $_SESSION["tmpurl"] = $protocolo[0]."://".$_SERVER['HTTP_HOST'].$atual; |
| 288 | -// | |
| 289 | -//faz o include de um programa se tiver sido passado pela URL | |
| 290 | -// | |
| 297 | +/* | |
| 298 | +Note: Faz o include de um programa se tiver sido passado pela URL (parâmetro &executa) | |
| 299 | + | |
| 300 | +Nessa altura do processo, a variável $tmpfname guarda o nome do mapfile que será utilizado pelo i3geo. | |
| 301 | +Esse mapfile pode ser modificado pelo programa que será incluido. | |
| 302 | +*/ | |
| 291 | 303 | $tmpfname = $diretorios[0]; |
| 292 | 304 | $_SESSION["map_file"] = $diretorios[0]; |
| 293 | 305 | $_SESSION["mapext"] = $mapext; |
| ... | ... | @@ -305,9 +317,9 @@ while($error && $error->code != MS_NOERR) |
| 305 | 317 | $error = $error->next(); |
| 306 | 318 | } |
| 307 | 319 | ms_ResetErrorList(); |
| 308 | -// | |
| 309 | -//inclui pontos via url | |
| 310 | -// | |
| 320 | +/* | |
| 321 | +Note: Inclui uma camada de pontos utilizando os parâmetros passados pela URL | |
| 322 | +*/ | |
| 311 | 323 | if (isset($pontos)) |
| 312 | 324 | {inserePontosUrl();} |
| 313 | 325 | $error = ms_GetErrorObj(); |
| ... | ... | @@ -317,9 +329,9 @@ while($error && $error->code != MS_NOERR) |
| 317 | 329 | $error = $error->next(); |
| 318 | 330 | } |
| 319 | 331 | ms_ResetErrorList(); |
| 320 | -// | |
| 321 | -//inclui linhas via url | |
| 322 | -// | |
| 332 | +/* | |
| 333 | +Note: Inclui uma camada de linhas utilizando os parâmetros passados pela URL | |
| 334 | +*/ | |
| 323 | 335 | if (isset($linhas)) |
| 324 | 336 | {insereLinhasUrl();} |
| 325 | 337 | $error = ms_GetErrorObj(); |
| ... | ... | @@ -329,9 +341,9 @@ while($error && $error->code != MS_NOERR) |
| 329 | 341 | $error = $error->next(); |
| 330 | 342 | } |
| 331 | 343 | ms_ResetErrorList(); |
| 332 | -// | |
| 333 | -//inclui pontos via url | |
| 334 | -// | |
| 344 | +/* | |
| 345 | +Note: Inclui uma camada de polígonos utilizando os parâmetros passados pela URL | |
| 346 | +*/ | |
| 335 | 347 | if (isset($poligonos)) |
| 336 | 348 | {inserePoligonosUrl();} |
| 337 | 349 | $error = ms_GetErrorObj(); |
| ... | ... | @@ -345,9 +357,11 @@ ms_ResetErrorList(); |
| 345 | 357 | //se vc quiser parar o script aqui, para verificar erros, descomente a linha abaixo |
| 346 | 358 | // |
| 347 | 359 | //exit; |
| 348 | -// | |
| 349 | -//verifica os dados de cada layer | |
| 350 | -// | |
| 360 | +/* | |
| 361 | +Note: Adapta os dados de cada layer. | |
| 362 | + | |
| 363 | +Faz alterações em cada layer caso sejam necessárias. | |
| 364 | +*/ | |
| 351 | 365 | $mapa = ms_newMapObj($tmpfname); |
| 352 | 366 | $path = $mapa->shapepath; |
| 353 | 367 | for($i=0;$i<($mapa->numlayers);$i++) |
| ... | ... | @@ -370,14 +384,18 @@ for($i=0;$i<($mapa->numlayers);$i++) |
| 370 | 384 | {$layer->set("status",MS_OFF);} |
| 371 | 385 | } |
| 372 | 386 | $mapa->save($tmpfname); |
| 373 | -// | |
| 374 | -//obtem o IP do usuário e registra no banco de dados | |
| 375 | -//essa função pode ser comentada sem prejuízos ao funcionamento do I3Geo | |
| 387 | +/* | |
| 388 | +Note: Obtem o IP do usuário e registra no banco de dados. | |
| 389 | + | |
| 390 | +Essa função pode ser comentada sem prejuízos ao funcionamento do I3Geo. | |
| 391 | +Só opera corretamente se a rotina de registro tiver sido configurada corretamente. | |
| 392 | +*/ | |
| 376 | 393 | require_once($caminho."ms_registraip.php"); |
| 377 | -// | |
| 378 | -// gera a url para abrir o mapa | |
| 379 | -// interface = arquivo html que será aberto | |
| 380 | -// | |
| 394 | +/* | |
| 395 | +Note: Gera a url para abrir o mapa | |
| 396 | + | |
| 397 | +interface = arquivo html que será aberto | |
| 398 | +*/ | |
| 381 | 399 | if ($interface != "mashup") |
| 382 | 400 | { |
| 383 | 401 | if (count(explode(".php",$interface)) > 1) |
| ... | ... | @@ -401,7 +419,12 @@ if ($interface != "mashup") |
| 401 | 419 | ////////////////////////////////////////////////////////////////////////////// |
| 402 | 420 | //funções |
| 403 | 421 | ///////////////////////////////////////////////////////////////////////////// |
| 422 | +/* | |
| 423 | +Function: ligaTemas | |
| 404 | 424 | |
| 425 | +Liga os temas definidos na variável $layers | |
| 426 | + | |
| 427 | +*/ | |
| 405 | 428 | function ligaTemas() |
| 406 | 429 | { |
| 407 | 430 | global $layers,$mapn; |
| ... | ... | @@ -419,13 +442,19 @@ function ligaTemas() |
| 419 | 442 | } |
| 420 | 443 | } |
| 421 | 444 | } |
| 445 | +/* | |
| 446 | +Function: incluiTemasIniciais | |
| 422 | 447 | |
| 448 | +Inclui os temas definidos na variável $temasa | |
| 449 | + | |
| 450 | +*/ | |
| 423 | 451 | function incluiTemasIniciais() |
| 424 | 452 | { |
| 425 | 453 | global $temasa,$estadosl,$temasaplic,$temasdir,$mapn; |
| 426 | 454 | if (!isset($temasa)){$temasa = $estadosl;} |
| 427 | 455 | $temasa = str_replace(','," ",$temasa); |
| 428 | 456 | $alayers = explode(" ",$temasa); |
| 457 | + $existeraster = false; | |
| 429 | 458 | foreach ($alayers as $arqt) |
| 430 | 459 | { |
| 431 | 460 | $arqtemp = ""; |
| ... | ... | @@ -454,6 +483,8 @@ function incluiTemasIniciais() |
| 454 | 483 | for($i=0;$i<($maptemp->numlayers);$i++) |
| 455 | 484 | { |
| 456 | 485 | $layern = $maptemp->getLayer($i); |
| 486 | + if($layern->type == MS_LAYER_RASTER) | |
| 487 | + {$existeraster = true;} | |
| 457 | 488 | $layern->setmetadata("NOMEORIGINAL",$layern->name); |
| 458 | 489 | if ($layern->name == "estadosl") |
| 459 | 490 | {$layern->set("data",$temasaplic."/dados/estados.shp");} |
| ... | ... | @@ -462,8 +493,21 @@ function incluiTemasIniciais() |
| 462 | 493 | } |
| 463 | 494 | } |
| 464 | 495 | } |
| 496 | + // | |
| 497 | + //muda para RGB para melhorar o desenho da imagem raster | |
| 498 | + // | |
| 499 | + if($existeraster) | |
| 500 | + { | |
| 501 | + $of = &$mapn->outputformat; | |
| 502 | + $of->set("imagemode",MS_IMAGEMODE_RGB); | |
| 503 | + } | |
| 465 | 504 | } |
| 505 | +/* | |
| 506 | +Function: criaIndex | |
| 466 | 507 | |
| 508 | +Cria os arquivos vazios index.htm e index.html nos diretórios temporários | |
| 509 | + | |
| 510 | +*/ | |
| 467 | 511 | function criaIndex() |
| 468 | 512 | { |
| 469 | 513 | global $dir_tmp,$diretorios; |
| ... | ... | @@ -488,7 +532,12 @@ function criaIndex() |
| 488 | 532 | exit; |
| 489 | 533 | } |
| 490 | 534 | } |
| 535 | +/* | |
| 536 | +Function: MostraAguarde | |
| 537 | + | |
| 538 | +Mostra a mensagem de aguarde | |
| 491 | 539 | |
| 540 | +*/ | |
| 492 | 541 | function mostraAguarde() |
| 493 | 542 | { |
| 494 | 543 | global $interface,$caminho,$mensagemInicia; |
| ... | ... | @@ -503,7 +552,12 @@ function mostraAguarde() |
| 503 | 552 | echo '<BODY bgcolor="white" style="background-color:white">'; |
| 504 | 553 | } |
| 505 | 554 | } |
| 555 | +/* | |
| 556 | +Function: inserePontosUrl | |
| 557 | + | |
| 558 | +Insere um novo tema com os pontos definidos na variável $pontos | |
| 506 | 559 | |
| 560 | +*/ | |
| 507 | 561 | function inserePontosUrl() |
| 508 | 562 | { |
| 509 | 563 | global $pontos,$nometemapontos,$dir_tmp,$imgdir,$tmpfname,$locaplic; |
| ... | ... | @@ -560,9 +614,14 @@ function inserePontosUrl() |
| 560 | 614 | $cor->setRGB(255,0,0); |
| 561 | 615 | $salvo = $mapa->save($tmpfname); |
| 562 | 616 | } |
| 563 | -// | |
| 564 | -//as linhas devem ter os pontos separados por espaços e cada linha separada por vírgula | |
| 565 | -// | |
| 617 | +/* | |
| 618 | +Function: insereLinhasUrl | |
| 619 | + | |
| 620 | +Insere um novo tema com as linhas definidas na variável $linhas | |
| 621 | + | |
| 622 | +As linhas devem ter os pontos separados por espaços e cada linha separada por vírgula | |
| 623 | + | |
| 624 | +*/ | |
| 566 | 625 | function insereLinhasUrl() |
| 567 | 626 | { |
| 568 | 627 | global $linhas,$nometemalinhas,$dir_tmp,$imgdir,$tmpfname,$locaplic; |
| ... | ... | @@ -629,9 +688,14 @@ function insereLinhasUrl() |
| 629 | 688 | $cor->setRGB(255,0,0); |
| 630 | 689 | $salvo = $mapa->save($tmpfname); |
| 631 | 690 | } |
| 632 | -// | |
| 633 | -//os polígonos devem ter os pontos separados por espaços e cada polígono separado por vírgula | |
| 634 | -// | |
| 691 | +/* | |
| 692 | +Function: inserePoligonosUrl | |
| 693 | + | |
| 694 | +Insere um novo tema com os poligonos definidas na variável $poligonos | |
| 695 | + | |
| 696 | +Os polígonos devem ter os pontos separados por espaços e cada polígono separado por vírgula | |
| 697 | + | |
| 698 | +*/ | |
| 635 | 699 | function inserePoligonosUrl() |
| 636 | 700 | { |
| 637 | 701 | global $poligonos,$nometemapoligonos,$dir_tmp,$imgdir,$tmpfname,$locaplic; | ... | ... |