Página 1 de 9

Converter de Clipper para Harbour

Enviado: 05 Fev 2015 14:15
por aprendiz_ce
Prezados,

Depois de converter os fontes de Clipper para Harbour, vou puder compila-los tanto para Windows 32/64 e para Linux i386/amd64?

Outra dúvida: Como faço para que o executável possa ficar "maximizado" ou "full screen" tanto no ambiente gráfico, prompt de comando (windows) ou terminal (linux)?

Grato a todos e aguardo qualquer ajuda.

Converter de Clipper para Harbour

Enviado: 05 Fev 2015 18:50
por Jairo Maia
Olá aprendiz_ce,

Todas essas questões já foram exaustivamente discutidas e esclarecidas neste fórum. Use o mecanismo de busca do fórum e tenha suas respostas. Acho mais fácil desta forma.

Converter de Clipper para Harbour

Enviado: 05 Fev 2015 19:08
por aprendiz_ce
Olá Jairo,

Na verdade eu já venho fazendo isso, ou seja, pesquisando e me virando com o que encontro aqui pelo fórum. O problema é que não achei nada especifico com relação a minha dúvida. Sempre encontro, mas geralmente são bem mais complexas e mais abrangentes que as coisas que procuro.

Será que o colega poderia pelo menos me informar sobre a questão de compilar para multiplataforma?

Grato pela sua atenção.

Converter de Clipper para Harbour

Enviado: 05 Fev 2015 22:19
por Jairo Maia
Olá aprendiz_ce,

Mas não é assim que funciona! Não trabalho com Linux, mas salvo se estou extremamente enganado, não existe como você criar um executável que funcione tanto em windows como em Linux.

Para qual plataforma seu sistema irá rodar você deve decidir quando for compilar, e se for o caso de no mesmo fonte pretender que seja multiplataforma, usar as condicionais #ifdef #endif para cada plataforma.

Por exemplo, se você usar em seu sistema para a plataforma Windows a GT WVG por exemplo, não será compatível em Linux. Entre muitas outras funções...

Linux e Windows, falam línguas diferentes.

[x]Harbour suportam multiplataformas, porém, não Pressupõe que os fontes podem ser os mesmos.

Converter de Clipper para Harbour

Enviado: 06 Fev 2015 10:02
por aprendiz_ce
Olá Jairo, Bom Dia!

Pois é, o meu aplicativo hoje em dia roda no Windows/32 normalmente e no Linux de forma emulada. Quero dar um "Up" no mesmo e com isso deixa-lo rodando no Windows/64 e se possível no Linux também, mas utilizando os mesmos fontes. Agora, se for para manter dos fontes distintos penso que para mim não seria viável, mas se o mesmo puder rodar no Linux de forma emulada, já me atenderia. Que emulador eu poderia usar, o colega saberia me dizer? Foi basicamente por essas questões e a tela "full screen" que decide pedir orientações aqui no fórum, visando conciliar as coisas e deixar tudo certinho.

Grato e se o colega tiver alguma coisa a mais acrescentar fico agradecido.

Forte abraço!

Converter de Clipper para Harbour

Enviado: 06 Fev 2015 12:05
por JoséQuintas
Acabo de pegar outro sistema em Clipper Summer pra converter pra Harbour.
Numa primeira etapa, isso significa apenas compilar com Harbour.

Acabo de pegar este erro:

Código: Selecionar todos

        @ 21,37 say str(NFNUMERO] 
Abre com parêntesis, e fecha com colchete.
Não sei como isso compilava no Clipper Summer.

Sobre a tela full screen, isso dá mais problema do que solução.
Qualquer programa que se abra vai atrapalhar o full screen.
O melhor é usar maximizado e pronto.
Se usar GTWVG ela configura o melhor fonte automaticamente, e o usuário ainda pode clicar no maximizar.

Converter de Clipper para Harbour

Enviado: 06 Fev 2015 12:45
por Jairo Maia
Olá Aprendiz,
aprendiz_ce escreveu:Quero dar um "Up" no mesmo e com isso deixa-lo rodando no Windows/64 e se possível no Linux também, mas utilizando os mesmos fontes. Agora, se for para manter dos fontes distintos penso que para mim não seria viável
Mas você não precisa manter fontes distintas. Se você precisa que o mesmo sistema rode em plataformas diferentes, basta você fazer a compilação para as respectivas plataformas. Se windows, compile em Windows, se para Linux, compile no Linux.
aprendiz_ce escreveu:Que emulador eu poderia usar
Nunca usei nenhum tipo de emulador para nenhuma situação. Mas no seu caso, acho que melhor do que usar emulador, seria compilar como eu disse acima, e dispensa uso de emulador.
aprendiz_ce escreveu:Foi basicamente por essas questões e a tela "full screen" que decide pedir orientações aqui no fórum
Quanto a tela cheia, acabei de postar em Contribuições, Dicas e Tutoriais um exemplo melhorado que já havia postado no fórum há algum tempo respondendo a um colega. Acho que pode ajudar, pois é compatível tanto em Window como Linux. Veja aqui: Tela Cheia Usando GTWVT com Windows ou Linux. Espero que ajude.

Olá José,
JoséQuintas escreveu:Se usar GTWVG ela configura o melhor fonte automaticamente, e o usuário ainda pode clicar no maximizar.
José, no caso deste tópico o interesse também é Linux, e a GTWVG não é compatível. Outrossim, uso a GTWVG, e faço o ajuste das telas calculando a resolução. Como seria fazer esse ajuste automaticamente? Já vi vários comandos sobre isso no arquivo .ch mas não consigo ter sucesso. Poderia dar uma dica?

Converter de Clipper para Harbour

Enviado: 06 Fev 2015 13:11
por JoséQuintas
Não percebi sobre rodar também em Linux.

Sobre GTWVG:
Acho que habilitaram a opção de maximizar, usando hb_gtInfo(), mas não é essa opção que uso.

A GTWVG já ajusta ao que considera ser o melhor fonte.
Eu simplesmente salvo a configuração em uso, e quando abrir já retorno pra ela.
Com isto, o usuário ajusta do jeito que quiser e vai estar do jeito que ele deixou.
E se por acaso trocar de monitor e a configuração não servir mais, a GTWVG já refaz o ajuste, e passa a valer a nova configuração.

Uso esta função pra salvar/restaurar no registro do Windows (o que vincula automaticamente ao terminal).
Uso Lucida Console como default.

Código: Selecionar todos

FUNCTION GtSetupFont( lSave )
   LOCAL cFontSize, cFontWidth, cFontWeight, cRootKey

   lSave := iif( lSave == NIL, .F., lSave )
   cRootKey := "HKCU\Software\JPA Tecnologia\"
   IF lSave
      Win_RegWrite( cRootKey + "FontSize", LTrim( Str( HB_GtInfo( HB_GTI_FONTSIZE ) ) ) )
      Win_RegWrite( cRootKey + "FontWidth", LTrim( Str( HB_GtInfo( HB_GTI_FONTWIDTH ) ) ) )
      Win_RegWrite( cRootKey + "FontWeight", LTrim( Str( HB_GtInfo( HB_GTI_FONTWEIGHT ) ) ) )
   ELSE
      hb_GtInfo( HB_GTI_FONTNAME, "Lucida Console" )
      IF Win_RegRead( cRootKey + "FontSize" ) != NIL
         cFontSize   := Win_RegRead( cRootKey + "FontSize" )
         cFontWidth  := Win_RegRead( cRootKey + "FontWidth" )
         cFontWeight := Win_RegRead( cRootKey + "FontWeight" )
         IF Val( cFontSize ) > 0 .AND. Val( cFontWidth ) > 0 .AND. Val( cFontWeight ) > 0
            hb_gtInfo( HB_GTI_FONTSIZE, Val( cFontSize ) )
            hb_gtInfo( HB_GTI_FONTWIDTH, Val( cFontWidth ) )
            hb_gtInfo( HB_GTI_FONTWEIGHT, Val( cFontWeight ) )
         ENDIF
      ENDIF
   ENDIF
   RETURN NIL

Converter de Clipper para Harbour

Enviado: 06 Fev 2015 13:14
por aprendiz_ce
Olá JoseQuintas,

Eu mencionei "full screen", mas pode ser "maximizado" sim. Nada contra! (rs) Destesto complicações, então o quanto mais prático e rápido eu puder fazer, melhor, pois o sistema está em produção e já roda a muitos anos, daí não posso criar nenhum descontentamento para os usuários e muito menos para a diretoria das empresas que utilizam meu aplicativo.

Como faço isso? Qual a melhor forma? Como você já mencionou que é o terceiro sistema em SUMMER que está convertendo, logo posso pensar que o colega já está bem experiente nesse tipo de experiência. Então, que passo devo seguir? No meu caso os fontes estão 70% no padrão para CLIPPER 5 utilizando bolsa de indices de DBFs (DBF/CDX).

Grato pela sua atenção e aguardo qualquer orientação.

Converter de Clipper para Harbour

Enviado: 06 Fev 2015 13:54
por JoséQuintas
No tempo do Windows 98 já era chato trabalhar com telas full screen.
Nessa época já existia o messenger, pra troca de mensagens, e também outros programas que mostravam mensagens na tela.
Deixando o sistema em full screen, qualquer mensagem nova fazia a tela desaparecer.
Desde aquela época acostumei a não usar full screen, assim o usuário usa tranquilamente tudo.

Sobre passar de Clipper pra Harbour....
Eu já comentei várias vezes como eu faço:
Mantenha seu sistema Clipper funcionando
Faça testes compilando com Harbour, veja do que ele reclama, e ajuste os fontes para que funcione tanto em Clipper como em Harbour.
Assim que estiver tudo funcionando, pode assumir o Harbour, e vai poder mexer à vontade.

Isso de criar versões diferentes muitas vezes atrapalha, porque o sistema pode ser muito grande, e não vai dar pra ficar atualizando fontes diferentes.

E se precisar, pode usar os #define pra ajudar, porque também funcionam em Clipper.

Exemplo:

Código: Selecionar todos

#define HARBOUR
#ifdef HARBOUR
// fonte pra Harbour
#ELSE
// fonte pra Clipper
#ENDIF
Só tome cuidado pra não abusar do #ifdef, pra não deixar os fontes confusos.
O que eu fazia era agrupar as diferenças em um único fonte, pra não encher os fontes disso aí, usando função aonde não tinha outro jeito.
Na época o Inkey() era diferente, então eu usava MyInkey() nos fontes, e somente num fonte Ze_XHARBOUR eu tinha o MyInkey() diferente pra Clipper ou Harbour, usando o #ifdef HARBOUR.
Assim, bastava alterar uma única linha pra trocar o compilador.
Também é bom pra rotinas específicas do Harbour, ou pra ter o mesmo fonte Linux/Windows, ou pra testar LIBs gráficas diferentes.
O nome ZE_ não é apenas por eu ser José, mas porque em ordem alfabética fica no final da lista.

Também não é bom querer ir logo pra uma LIB gráfica, porque não é tão fácil como se pensa, e pode acabar não tendo o programa em Harbour tão cedo.

Voltando um pouco às diferenças:
Na conversão do Clipper Summer, por usar apenas recursos básicos do Clipper, na maior parte é somente ajuste de sintaxe, pelo Clipper Summer aceitar coisa escrita errada.

Acabei de topar com erro de compilação no Harbour:

Código: Selecionar todos

@ 1, 1 SAY variavel ]
Parece que o Clipper Summer não se importava com colchetes no fonte....

Nota:
São vários EXEs, então estou pegando um por vez.

Converter de Clipper para Harbour

Enviado: 06 Fev 2015 14:02
por aprendiz_ce
Jairo,

Antes para mais muito obrigado pelas suas orientações, pois as mesma estão me ajudando bastante.

Sobre a questão dos fontes: Era realmente isso que eu queria, ou seja, compilar no Windows para Windows ou compilar no Linux para Linux. Só que antes eu pensei que houvesse algum tipo de recurso que com uma única compilação o aplicativo pudesse rodar em ambos os sistemas operacionais (multiplataforma). Dúvida: E como é que fica a questão de pasta ("Windows - C:\pasta", "Linux - /pasta"), já que isso é bem diferente de OS para OS? HARBOUR sabe tratar isso de forma transparente?

Mais uma vez muito obrigado pela sua pronta atenção.

Converter de Clipper para Harbour

Enviado: 06 Fev 2015 14:29
por aprendiz_ce
Olá JoséQuintas, Boa Tarde!

Essa questão de usar "DEFINE" é uma coisa bem legal. Gostei!

Pois é, é como falei anteriormente... quando mais simples e mais prático para mim, melhor! Se o aplicativo puder rodar "maximizado" sem problemas, já estará de bom tamanho. Não penso em fazer grandes mudanças nos fontes não, somente o que for necessário para compilar no HARBOUR e muito menos penso em mexer com essa parte gráfica, só se for extremamente necessário. Se eu conseguir uma sobrevida para o mesmo e manter a compatibilidade com os novos sistemas operacionais da Microsoft (Win7, Win8, Win8,1), penso que estarei com a missão cumprida.

Outra coisa: Seu trabalho de conversão, como você está cobrando? Hora programada ou o serviço pronto? Teria com o colega me dar um noção de valores para que eu possa ver como é que eu vou fazer no meu caso.

Mais uma vez muito obrigado pela sua valiosa atenção.

Forte abraço!

Converter de Clipper para Harbour

Enviado: 06 Fev 2015 15:15
por Itamar M. Lins Jr.
Ola!
O mesmo fonte vc compila no Windows/32 e 64 e no Linux/32 e 64. Para compilar é preciso ter o Harbour(binário/executável) p/ cada plataforma.
Quanto as coisinhas extras do linux o Harbour tem algumas funções para este SO(sistema operacional) . Olhe os fontes do hbmk2.prg por exemplo:
hb_eol(), hb_ps(), hb_osPathListSeparator() esse hb_ps() é a barra "/" Linux ou "\" windows.

Código: Selecionar todos

      #if   defined( __PLATFORM__WINDOWS )
         IF hb_osIs64bit() .AND. hb_DirExists( cBasePath + hb_ps() + "binnt64" )
            hb_SetEnv( "PATH", ;
               cBasePath + hb_ps() + "binnt64" + hb_osPathListSeparator() + ;
               cBasePath + hb_ps() + "binnt" + hb_osPathListSeparator() + ;
               GetEnv( "PATH" ) )
         ELSE
            hb_SetEnv( "PATH", ;
               cBasePath + hb_ps() + "binnt" + hb_osPathListSeparator() + ;
               cBasePath + hb_ps() + "binw" + hb_osPathListSeparator() + ;
               GetEnv( "PATH" ) )
         ENDIF
      #elif defined( __PLATFORM__OS2 )
         hb_SetEnv( "PATH", cBasePath + hb_ps() + "binp" + hb_osPathListSeparator() + cBasePath + hb_ps() + "binw" + hb_osPathListSeparator() + GetEnv( "PATH" ) )
      #elif defined( __PLATFORM__DOS )
         hb_SetEnv( "PATH", cBasePath + hb_ps() + "binw" + hb_osPathListSeparator() + GetEnv( "PATH" ) )
      #elif defined( __PLATFORM__LINUX )
         hb_SetEnv( "PATH", cBasePath + hb_ps() + "binl" + hb_osPathListSeparator() + GetEnv( "PATH" ) )
      #endif
Saudações,
Itamar M. Lins Jr.

Converter de Clipper para Harbour

Enviado: 06 Fev 2015 15:29
por aprendiz_ce
Olá Itamar,

Poxa, que legal! Vou ver se consigo fazer algo que atenda as minhas necessidade com as suas informações.

Grato pela sua atenção.

Converter de Clipper para Harbour

Enviado: 06 Fev 2015 15:39
por Jairo Maia
Olá Apendiz,

Parece que sua dúvida sobre a tela é recorrente, porém, isso já está resolvido alguns postes acima, acho que passou batido. Basta acrescentar em seu sistema o seguinte:

Código: Selecionar todos

REQUEST HB_GT_WVT_DEFAULT  // coloque antes de Function Main()

Function Main()

 // Variaveis locais se houver...
 
 HB_GtInfo( HB_GTI_FONTNAME, "Lucida Console" )  // fonte
 HB_GtInfo( HB_GTI_WINTITLE, "Título da Tela" )  // titulo da tela
 
 HB_GtInfo( HB_GTI_CLOSABLE, .F. )   // não permite fechar pelo X
 HB_GtInfo( HB_GTI_RESIZABLE, .F. )  // não permite alterar a tela pelo quadradinho (só funciona no XP)
 
 Set ScoreBoard Off    // usa a linha 0
 SetMode( 25, 85 )     // usa a largura total da tela
 
 HB_GtInfo( HB_GTI_MAXIMIZED, .T. )

 // restante da função Main()...