Postagem em destaque
- Gerar link
- X
- Outros aplicativos
Protheus :: Advpl :: Duelo de Titãs :: Harbour x ADVPL
Vez em quando me pego fuçando o código e as Classes disponíveis no Harbour Project para verificar as novidades, acompanhar a evolução da linguagem e, por que não, aprender com os mestres e, durante esse processo, faço algumas descobertas interessantes. Na pasta ..\examples\hbxlsxml da instalação padrão deparei-me com três classes:
CLASS ExcelWriterXML :: xlsxml.prg CLASS ExcelWriterXML_Sheet :: xlsxml_s.prg CLASS ExcelWriterXML_Style :: xlsxml_y.prg |
Lendo a documentação no código fonte, percebi que essas três Classes foram originalmente escritas em PHP:
/* |
O grande “Fausto Di Creddo Trautwein” teve o trabalho de transcrever o código original em PHP para o Harbour e иαldσ dj (esse que vos escreve) assumiu o compromisso de torná-las utilizáveis em ADVPL.
Para isso vou usar um “Poderoso” recurso do ADVPL herdado do CA-Clipper e existente, também, no Compilador Harbour e em outras linguagens como C e C++:
O Pré-Processador.
Segundo Rick Spence (Clipper 5.2, pag.: 23) : “O Pré-Processador é um importante recurso (…). Imagine-o como um programa que executa antes do compilador. Ele lê seu programa como entrada e gera um arquivo pré-processado como saída. O arquivo de saída, então, serve como entrada para o compilador; o compilador não tem conhecimento e nem se importa com a ocorrência do pré-processamento.”
Vou usar “Constantes Simbólicas ou manifestas”, “Arquivos Includes”, “Macros do Compilador”, “Compilação Condicional” e “Comandos Definidos pelo usuário” além de funções “customizadas” para compatibilizar o código escrito usando a sintaxe e semântica do Harbour para o padrão e limitações (no que diz respeito a evolução natural da linguagem) do ADVPL.
Harbour possui muitos recursos interessantes, disponíveis nas maiorias das linguagens modernas de Alto Nível, mas, infelizmente, ainda não disponíveis em ADVPL, a saber: Hash de Array, sintaxe OOP nativa dentre outras.
A idéia e alterar minimamente o código Harbour de forma que ele possa ser compilado e executado em ambas plataformas.
O Desafio está lançado. Agora vamos ver o que essas classes fazem e acompanhar o processo de “Compatibilização”.
Os programas que serão compatibilizados são:
e os existentes no diretório \tests:
Compilando as classes no Harbour:
… “hbmk2: Criando biblioteca estáticas... libhbxlsxml.a”
agora vamos compilar os programas de teste e ver a saída:
Compilado e executando o exemplo.prg
que irá gerar o arquivo example.exe
que ao ser executado:
irá gerar, como saída, o arquivo example.xml
que, aberto pelo Excel, nos dará o seguinte resultado:
Para o exemplo1.prg:
Analisando o arquivo example.xml teremos:
Compilando e executando os demais exemplos teremos:
para o example2.prg
e, para o example3.prg
Analisando os resultados podemos concluir que as classes
CLASS ExcelWriterXML :: xlsxml.prg |
servem para gerar arquivos no padrão XML compatíveis com o Microsoft Excel.
Agora, vamos ao trabalho de “Compatibilização”.
Pontos de Atenção:
Analisando um fragmento da declaração da classe em Harbour identificamos as seguintes incompatibilidades:
- O arquivo de cabeçalho “hbclass.ch”;
- CREATE na declaração da Classe;
- INIT para inicializar as variáveis;
- O operador de Hash {=>} e;
Declaração dos Métodos da Classe. Uma forma interessante do Harbour resolver “Nomes Longos” na Classe é Prefixando a Classe ao Método. Teremos que resolver isso no Protheus também. Apesar de podermos criar, no Protheus, Classes com Nomes Longos, Herdando-as da LongClassName, o compilador ADVPL ainda considera o limite de 10 Caracteres para a comparação de Nomes.
FOR EACH não implementado em ADVPL
Funções exclusivas da Linguagem Harbour
Hash não implementado em Advpl.
Sintaxe OOP não implementada em ADVPL.
Ufa.. Bastantes compatibilizações a fazer. Melhor seria reescrever as Classes e os Exemplos usando apenas os Recursos do ADVPL (e cadê a graça). A idéia é manter a compatibilidade. O mesmo código deverá, com poucas alterações, compilar e executar tanto no Harbour quanto no Protheus; além do mais os “Recursos do Pré-Processador” fazem parte da linguagem ADVPL.
… Continua no Próximo “POST”
[]s
иαldσ dj
- Gerar link
- X
- Outros aplicativos
Comentários
Postagens mais visitadas
BlackTDN :: RLeg ~ Desvendando a Função ParamBox
- Gerar link
- X
- Outros aplicativos
Protheus :: Chamando Funções do Menu Diretamente e sem a Necessidade de Login
- Gerar link
- X
- Outros aplicativos
Caraca Naldo. Fodástico a descoberta. :)
ResponderExcluirParabéns pelo blog.
Parabéns pela curiosidade!
ResponderExcluir