CAPÍTULO 4
Programação visual com Software Livre
EDIT LIN EDITORIAL S.L,  dos autores  Daniel Campos Fernández e José Luis Redrejo.  Prólogo de Benoit Minisini



Redireção da saída padrão 



Se estivermos familiarizado com a linguagem C, as mensagens são enviadas a saída padrão com a função printf() e na saída padrão de erros mediante perror(), ambas incluída na biblioteca padrão de C (glibc no sistema GNU/Linux).

Suponhamos agora que não desejamos guardar um arquivo, e sim mostra-lo diretamente seu conteúdo na tela. Por exemplo, URL http://www.gnu.org/licenses/gpl.txt, dispomos de um arquivo que é um texto plano, contem a licença GPL original em inglês.

A primeira opção seria salvar o arquivo e, uma vez finalizado o processo lê-lo e representa-lo na tela, mas deste modo complicamos o código já que teríamos que criar um arquivo em algum local (por exemplo, /temp), lê-lo e logo apaga-lo para não deixar restos no disco rígido. Como indicamos no parágrafo anterior, o conteúdo da saída padrão também pode ser lido e curl envia o arquivo a saída padrão salvo que, como em nosso exemplos anteriores, especificamos um arquivo onde depositar os dados recebidos. A sintaxe do evento gerado para a recepção de dados procedentes da saída padrão de processo, é diferente a dos erros ou informativos que vimos antes:

PUBLIC SUB
Process_Read()

      . . . . . . . . . . . .

END

Neste caso não há nenhuma cadeia para receber a informação, pelo contrário, cada objeto Process se comporta como um fluxo ou estream, o que em outras palavras significa que podemos trabalhar do mesmo modo que faríamos com arquivos aberto  com OPEN, podendo utilizar, por tanto, READ ou LINE INPUT.

Temos que recordar também que Gambas provê uma palavra chave, LAST, que dentro do evento represente de forma genérica o objeto que o gerou. Podemos, no entanto, ler o conteúdo da saída padrão do processo utilizando LAST, como parâmetros das instruções relacionadas com leitura e escrita de processos. Por exemplo, para ler uma linha completa faríamos:

PUBLIC SUB Process_Read()

DIM sCad AS String

LINE INPUT #LAST, sCad

PRINT  sCad

END

Para nosso programa, adicionaremos uma caixa de texto (TextArea), chamada TxtLicenca, com seu texto inicial em branco e nela ponhemos o conteúdo do arquivo gpl.txt, conforme o recebemos.

O código é o seguinte:
Figura 3
Figura 3. Cixa de texto TxtLicenca.


PRIVATE hCancelar AS Boolean

PUBLIC SUB BtnCancelar_Click()

hCancelar = TRUE

END


PUBLIC SUB Process_Read()

DIM sCad AS String

LINE INPUT #LAST, sCad

TextLicenca.Text = TextLicenca.Text & sCad & "\n"

END


PUBLIC SUB Process_Error(Err AS String)

DIM sCad AS String[ ]

Err = Trim(Err)

sCad = Split(Err, " ")

LblInfo.Text = sCad[sCad.Count - 1]

END

 
PUBLIC SUB BtnDownloads_Click()

DIM hProc AS Process

DIM sUrl AS String

hCancelar = FALSE

BtnCancelar.Enabled = TRUE

hProc = EXEC ["curl", "http://www.gnu.org/licenses/gpl.txt", "-#"] FOR READ


DO WHILE hProc.State = Process.Running

WAIT 0.1

IF hCancelar = TRUE THEN

hProc.Kill()

message.Warning("Processo Cancelado")

LblInfo.Text = "Inativo"

BtnCancelar.Enabled = FALSE

RETURN

END IF

LOOP


LblInfo.Text = "Inativo"

Message.Info("Download Finalizado")

END

No evento Read() lemos uma  linha e adicionamos ao conteúdo  prévio  de  TextLicenca, mais um retorno do carro para separar cada linha.






HOME







Cópia literal

Extraído do livro “GAMBAS, programação visual com software Livre”, da editora EDIT LIN EDITORIAL S.L,  dos autores  Daniel Campos Fernández e José Luis Redrejo. Prólogo de Benoit Minisini

LICENSA DESTE DOCUMENTO


É permitido a cópia e distribuição da totalidade ou parte desta obra sem fins lucrativo. Toda cópia total ou parcial devera expressar o nome do autor e da editora e incluir esta mesma licença, adicionando se é uma cópia literal “Cópia literal”. Se é autorizada a modificação e tradução da obra  sem fins lucrativo sempre se deve constar na obra resultante  a modificação o nome da obra original o autor da obra original e o nome da editora e a obra resultante também deverá ser livremente reproduzida, distribuída, ao publico e transformada em termos similares ao exposto nesta licença.

Tradução

Cientista
 (Antonio Sousa)