Do Clipper pa ra o FlagShip
Dicas preciosas para converter códigos para o Linux
Alexandre de Alexandri
alexandre@inso.com.br
Claudio Zamana
zamana@inso.com.br
Milton Mizuki
milton@inso.com.br
Muitos programadores de Clipper que estão migrando, ou que pensam em migrar para o Linux, desejam ter em mãos algo como um kit de emergência para as principais dificuldades que terão ao migrar seus códigos para o FlagShip. A Inso Informática, que distribui o produto no Brasil, preparou uma "receita de bolo" que esclarece as principais adaptações a serem introduzidas em códigos Clipper, antes da compilação pelo FlagShip. Todas as dicas apresentadas aqui e muitas outras podem ser encontradas com mais detalhes no manual do programa e no site da Inso em www.inso.com.br.
1. Copiando os arquivos .PRG
Copie os programas Clipper (.prg) do seu aplicativo, inclusive os programas da sua biblioteca para um diretório do Linux. Os fontes de uma biblioteca convertidos com utilitários do tipo "Valkyrie" devem ser analisados e testados. Nem sempre esses utilitários convertem corretamente as funções da biblioteca. O FlagShip possui um módulo com as funções do CA-Tools (não disponível nas versões Demo). Inclua no programa principal a diretiva:
#INCLUDE "fspreset.fh"
2. Criando o Makefile
O Makefile é um script de compilação equivalente ao
.rmk/.lnk do Clipper. Para criar um Makefile siga o exemplo:
FS=FlagShip
FS_FLAGS=-Mprg1 -omeu_programa
C_FILES=prg1.o prg2.o prg3.o prg4.o prg5.o
all:$(C_FILES)
<tab>
$(FS) $(C_FILES) $(FS_FLAGS)
clean:
<tab> rm *.o
..SUFFIXES: .prg .o
..prg.o:
<tab> $(FS) -c -m $<
<tab> rm $*.c
|
Caso utilize o parâmetro /N no Clipper, utilize o parâmetro -na no FlagShip. Se o programa principal inicia com a função ou procedure Main(), coloque o parâmetro -Mmain. Exemplo: FS_FLAGS=-Mmain -oexemplo
Nota: utilize a tecla TAB onde estiver <tab>.
Caso tenha alguma dificuldade em criar, solicite em www.inso.com.br o script do makemake que cria automaticamente o Makefile com todos os programas do diretório. No diretório /usr/local/bin/ descompacte-o com o comando: # unzip makemake.zip.
3. Alterar, nos programas, os comandos do DOS para comandos Linux.
Todos os comandos DOS utilizados no Clipper devem ser alterados para comandos compatíveis do Linux. O comando de impressão do Clipper também deve ser alterado, pois no DOS a impressão é diretamente na porta da impressora, enquanto que no Linux é criado um spool de impressão.
4. Copiando os arquivos .DBF e .DBT
Copie todos os arquivos .dbf para o diretório do Linux via ftp ou através das ferramentas mtools (mcopy a:*.db*, por exemplo).
Reindexe os arquivos com o comando Index On.
O FlagShip vai criar os arquivos índices com o sufixo .IDX, equivalente ao .NTX do Clipper, mas que possui um algoritmo muito mais otimizado. Não tente acessar com o FoxPro ou Clipper com a sintaxe "DBFIDX", pois são algoritmos distintos. Caso queira utilizar os arquivos compatíveis com "DBFCDX", veja no manual fsman do FlagShip como utilizar codebase. Também é importante ressaltar que no ambiente Linux todos os arquivos devem ter direitos de leitura e gravação para os usuários do sistema.
5. Compilando os programas
Para compilar os programas no FlagShip, digita-se make no prompt do Linux em que se encontra o Makefile.
O FlagShip converte automaticamente todos os fontes
num programa intermediário em C, compila e linkedita, criando um executável em C puro, nativo do seu sistema operacional Linux. Você pode compilar diretamente na linha de comando como o Clipper o faz no ambiente DOS, mas ao se incorporarem vários fontes, recomenda-se o uso de make. Ao compilar diretamente na linha de comando um fonte de nome "primeiro.prg", cujo nome do executável será "primo", digite:
# FlagShip -o primo primeiro.prg
ou
# FlagShip primeiro.prg -o primo
|
6. Executando o programa
No Linux, para executar o programa que se encontra no próprio diretório, digite:
# ./nome_do_executável
7. Problemas com caracteres de formação de telas
Para corrigir esses problemas, deve-se incluir no /etc/profile, as variáveis de ambiente abaixo:
export FSTERM=fslinux
export FSTERMINFO=/usr/share/terminfo
export TERM=linux
|
O TERM=linux é default do sistema. Para ativar as mudanças saia com logout e execute um novo login no sistema.
Se for executar em um terminal no ambiente gráfico, digite: # newfswin ./nome_do_executável
8. Restrições do FlagShip
Telas com mais de 25 linhas
No ambiente Unix/Linux, a forma de tratamento do número de linhas do Clipper (DOS) não terá efeito, ou seja, a função setmode (43,80) não funciona. Para se obter o mesmo efeito do ambiente DOS, utilize a função FS_SET ("setenvir"). Veja no fsman as funções SETMODE e FS_SET ("setenvir").
Problemas com RestScreen()
No DOS a tela é capturada como caracter e Unix/Linux é capturada como imagem. No ambiente Linux/Unix não é possível recuperar parte da tela salva pelo SaveScreen(). Veja no fsman as restrições das funções SaveScreen() e
RestScreen().
Comandos do DOS
Todos os comandos do DOS utilizados nos programas devem ser substituídos por comandos Unix/Linux.
9. Como acessar o manual on-line do FlagShip
Digite no prompt do Linux:
# fsman
10. FS-CGI
Esse é um módulo que você também pode utilizar para desenvolver aplicações para ambiente Web, e cuja cópia demo pode ser encontrada no site da Inso. Este módulo (LIB) gratuito é composto de uma série de funções facilitadoras para desenvolvimento de aplicações em ambiente Web.
Na verdade o Flagship permite a construção de CGI e ao incorporar o FS-CGI você terá uma grande redução de código no seu desenvolvimento.
11. Conversão de arquivos DOS para Linux
O FlagShip vem com um utilitário para conversão de textos em formato DOS para formato Unix, chamado "dos2unix". Porém, tal conversão não é necessária, uma vez que o próprio pre-processador do FlagShip trata desse detalhe. Nota: dos2unix deve ser usado somente nos arquivos fontes, e jamais sobre os DBFs ou arquivos compactados.
12. Impressão em Linux
Analise o seguinte código e converta o seu código fonte original para imprimir no Linux. Crie este programa com o nome "t.prg".
/*
* Para compilar: FlagShip t.prg -na -ot
*
* Para executar: ./t
*
* Arquivo de spool: "file..."
*
*/
function main()
local cOutraImp := "deskjet"
/* Esta função gera um nome de arquivo temporário
* Veja fsmanÆFUNÆtempfilename
*/
local cTempFile := tempfilename()
/* Direcionando a saída para o arquivo */
set printer on
set console off
set printer to (cTempFile)
/* Imprimindo ( para o arquivo ) */
qout( "Teste de impressao" )
qout( "Teste de impressao" )
qout( "Teste de impressao" )
qout( "Teste de impressao" )
/* Desabilitando a saída para o arquivo */
set printer off
set console on
/* Imprimindo na impressora default ( geralmente "lp" )
*/
run( "lpr " + cTempFile )
/* Imprimindo numa outra impressora */
/* run( "lpr -P" + cOutraImp + " " + cTempFile ) */
return( nil )
|
Conclusão
Embora a curva de aprendizado para o FlagShip seja praticamente nula para os programadores Clipper que venham do ambiente DOS, um aprofundamento na documentação do Linux e do próprio FlagShip é indispensável, como os leitores puderam conferir nas dicas acima. Logo ao compilar seus primeiros códigos esses programadores usarão esse kit básico de dicas aqui apresentadas, e poderão avaliar o enorme ganho de plataforma em suas aplicações. Em outro artigo serão apresentadas outras dicas e tratado o acesso a banco de dados relacionais, como Interbase, CA-Ingres e Oracle.