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


Redirecionando a saída padrão de erros



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).

Os processos podem enviar textos para o console por duas vias, a primeira é utilizando a saída padrão e, a segunda, a saída padrão de erros. Os dois caminhos separados são utilizados para diferenciar que tipo de mensagens são enviadas. Para a saída estândar (stdout) são emitidas informações úteis. Como veremos no paragrafo seguinte, o programa curl emite o arquivo recebido para a saída padrão salvo que indiquemos expressamente onde salva-lo. Pela saída padrão de erros(stderr) se emitem mensagens de estado, de advertência ou de erro. Curl aproveita esta saida para indicar o estado do download ou para informar um erro na conexão.

Nos concentramos mais em curl, se aplicarmos o parâmetro -#, o programa vai mostrando uma barra de progresso formada pelo símbolo # (almofadinha ou sustenido) e um indicador do tanto por cento baixado.

Gambas permite recolher o conteúdo tanto da saída padrão como da saída padrão de erros, se aplicarmos o flag FOR READ na hora de executa-lo.

Quando o processo filho envia uma cadeia pela saída padrão de erros (chamado de perror(), se for escrito em C), nosso programa Gambas receberá um evento Error() procedente da classe Process. A sintaxe deste evento é:

PUBLIC SUB Process_Error(sError AS String)

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

END

Na cadeia sError receberemos a mensagem de erro, a informação procedente do processo filho. Vamos agora modificar o programa para receber a porcentagem de downloads e representa-lo no Label no lugar da hélice.

PRIVATE hCancelar AS Boolean

PUBLIC SUB BtnCancelar_Click()

  hCancelar = TRUE

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
sUrl = "http://gambas.gnulinex.org/radiogambas/radiogambas-1.0.1.tar.gz"
hProc = EXEC ["curl", sUrl, "-o", User.home & "/RadioGambas.tar.gz", "-#"] 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

Nesta ocasião executamos o programa curl com o parâmetro adicional -#. cada vez que nosso programa recebe um evento Error de Process, este é tratado em nosso código: tomamos a cadeia e eliminamos com Trim() os  possíveis caracteres  especiais de controle que curl usa para manter o cursor sempre na mesma  linha, de modo  que da a  impressão que a barra de  progresso  avança (se trata dos chamados caracteres ANSI de controle), separamos a cadeia em várias sub cadeias, tomando o caracter de espaço como base e nós ficamos com a última sub cadeia, que é a que contém os dados de porcentagem, para representa-la no Label.







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)