Artigos Técnicos
Dicas para Migração de Clipper para Harbour

Embora o compilador Harbour seja na maioria das vezes compatível com o Clipper e com a grande maioria de seus recursos, alguns detalhes mecerem nossa atenção na hora de migrarmos um aplicativo legado para o novo compilador. O objetivo deste artigo será apresentar algumas dicas sobre os principais detalhes envolvidos na migração de aplicativos Clipper para Harbour.
Dicas para Migração
Estas dicas foram compartilhadas por várias pessoas em alguns fóruns na internet que comentaram sobre suas experiências e dificuldades encontradas ao migrarem seus aplicativos de Clipper para Harbour. As principais alterações necessárias em seu código fonte são:
FUNCTION MAIN()
O seu módulo principal deve conter uma função chamada MAIN() e seu projeto deve ser compilado com a opção /N. A função MAIN() é importante porque ela indica ao Harbour qual arquivo .PRG é o principal do seu projeto.
dDay := Date()
@ 2, 2 SAY "Date:"
@ 2, 8 GET dDay ;
VALID !Empty( dDay )
READ
return
FUNCTION Main()
dDay := Date()
@ 2, 2 SAY "Date:"
@ 2, 8 GET dDay ;
VALID !Empty( dDay )
READ
RETURN nil
Além disto todos outros módulos .PRG do seu projeto devem iniciar explicitamente com uma function ou procedure. Para estes casos, o nome desta rotina pode ter qualquer nome ou até ser igual ao nome do próprio arquivo .PRG.
DO <idProcedure> [WITH <lista argumentos>]
Dependendo da versão do seu compilador será necessário revisar o comando DO e em todos os lugares onde você o executava para chamar um outro arquivo PRG, você deverá alterar o código removendo a declaração e chamando-o diretamente como se fosse uma função.
DO MEUCADAS WITH Parm1, Parm2
MEUCADAS( Parm1, Parm2 )
FUNCTION / RETURN
Lembre-se que uma função sempre deve retornar algum valor. Quando estiver revisando seu código ou quando criar novas funções, insira sempre um comando RETURN com algum valor ou então com NIL. Se desejar omitir realmente um valor de retorno ao invés de uma FUNCTION utilize uma PROCEDURE para implementar o código.
NOMES LONGOS PARA IDENTIFICADORES
Um cuidado muito importante a ser tomado na hora da migração é com a utilização de nomes longos em variáveis, functions e procedures que você usa em seu sistema. O Clipper considera apenas os dez primeiros caracteres no nome de uma variável ou função. Veja um exemplo deste problema:
LOCAL cMinhasVariaveis := "nome no plural"
/*
* A Linha abaixo em Clipper irá alterar o valor da
* variavel declarada como LOCAL logo acima, pois o
* Clipper considera APENAS os dez primeiros bytes
* utilizados nos nomes de variáveis e funções.
*/
cMinhasVariavel := "o clipper só olha" +;
"os dez primeiros caracteres."
/* A linha abaixo gerará um erro em Harbour */
ALERT(cMinhasVariaveus)
O Harbour aceita até 63 caracteres no nome de variáveis, functions e procedures. É por isto que o exemplo acima geraria um erro de executado ao ser gerado em Harbour - mas não com Clipper!
Fique atento à isto, pois este detalhe incômodo pode lhe trazer vários transtornos com comandos tais como SAVE TO e REST FROM.
A regra para nomes de campos nos arquivos DBFs continuam as mesmas iguais ao Clipper: limite de 10 caracteres não podendo conter espaços e/ou caracteres acentuados.
PADRONIZAR NOMES DE ARQUIVOS
Uma sugestão adicional é que você padronize os nomes de arquivos de sua aplicação e converta-os tudo para letras minúsculas, o que vai lhe ajudar a evitar alguns transtornos ao tentar acessá-los. Esta dica é útil especialmente se você pretende no futuro, migrar seu aplicativo para outro sistema operacional tal como Mac ou Linux, que diferenciam letras maiúsculas e minúsculas nos nomes de arquivos.
Para converter todos os arquivos de um mesmo diretório para letras minúsculas de uma única vez utilize o programa LOWER. Este utilitário muito útil foi encontrado na seção de arquivos do desativado grupo HarbourBr e está disponível em nossa seção de Downloads.
Considerações Finais
Esta página não visa de modo algum conter todos os detalhes e/ou macetes envolvidos no processo de migração de um aplicativo em Clipper para Harbour, mas fornece algumas dicas e sugestões importantes relatadas inclusive por vários profissionais que já enfrentaram tal situação. Sucesso à todos e até a próxima!