Migrar Clipper para Harbour.
Moderador: Moderadores
Migrar Clipper para Harbour.
Consegui ativar o mouse também...
O sistema esta funcionando, consigo incluir dados, filtrar, modificar, apagar e recuperar registros, montar janelas e emitir relatórios. Consigo imprimir em impressoras windows e até mesmo em impressoras ligadas a rede.
Mas parece praga né? Sempre tem uma coisa mais para fazer. Agora, em determinadas consultas com janela (J), dá um erro, ESPORADICAMENTE, apresentando um "erro BASE 1003". Outras vezes, a mesma consulta opera corretamente.
Mas encontrei o erro no arquivo de funções (xxx_func.prg), especialmente neste ponto:
nm = ASCAN(tb,{|ve_a| tecl_p = ve_a[1]}) // verifica se tecla esta
IF nm != 0 // no vetor de teclas programadas
st_pesq := "" // limpa pesq por palavra
IF tb[nm,2]!=NIL // em caso afirmativo,
faca:=.T.
IF SELECT()=2
IF (2->ITEM)=0 // esta variável,item não estava
faca:=.F. // definida em lugar nenhum. Foi só definir 6 linhas acima e pronto.
ENDIF // Tudo agora funciona corretamente.
ENDIF
IF faca
EVAL(tb[nm,2]) // executa a funcao definida para
ENDI
ENDI // a tecla
ELSE ...
Walterley :%
O sistema esta funcionando, consigo incluir dados, filtrar, modificar, apagar e recuperar registros, montar janelas e emitir relatórios. Consigo imprimir em impressoras windows e até mesmo em impressoras ligadas a rede.
Mas parece praga né? Sempre tem uma coisa mais para fazer. Agora, em determinadas consultas com janela (J), dá um erro, ESPORADICAMENTE, apresentando um "erro BASE 1003". Outras vezes, a mesma consulta opera corretamente.
Mas encontrei o erro no arquivo de funções (xxx_func.prg), especialmente neste ponto:
nm = ASCAN(tb,{|ve_a| tecl_p = ve_a[1]}) // verifica se tecla esta
IF nm != 0 // no vetor de teclas programadas
st_pesq := "" // limpa pesq por palavra
IF tb[nm,2]!=NIL // em caso afirmativo,
faca:=.T.
IF SELECT()=2
IF (2->ITEM)=0 // esta variável,item não estava
faca:=.F. // definida em lugar nenhum. Foi só definir 6 linhas acima e pronto.
ENDIF // Tudo agora funciona corretamente.
ENDIF
IF faca
EVAL(tb[nm,2]) // executa a funcao definida para
ENDI
ENDI // a tecla
ELSE ...
Walterley :%
Migrar Clipper para Harbour.
Compilei meu primeiro programa em Harbour a cerca de um mês... Tudo funcionou corretamente.
Resolví melhorar algumas rotinas que estavam pendentes e utilizei o Gaspro40 que estava instalado em uma máquina antiga, que estava prestes a ir para a sucata e nada mais funcionou, o programa deu toda espécie de erros e as consultas com janelas (J), não atualizava a janela inferior, aparecia com bastante frequência um erro ao trocar as janelas, informando que uma variável ITEM, não estava disponível etc etc...
Apanhei muito e descobri que o problema estava no arquivo xxx_func.prg, onde muitas linhas estavam diferentes. Usei o programa Winmerge¹ para comparar a versão anterior, que estava funcionando e a nova... Mas, para resumir, a versão GAS-Pro v4.0i não gera um programa funcional, sendo necessário atualizar o gerador para a versão GAS-Pro v4.0o... ¹(http://winmerge.org)
Se desejarem, poderei enviar ambos os xxx_func.prg para os colegas examinarem e compreenderem as diferenças.
Saudações
Walterley. :%
Resolví melhorar algumas rotinas que estavam pendentes e utilizei o Gaspro40 que estava instalado em uma máquina antiga, que estava prestes a ir para a sucata e nada mais funcionou, o programa deu toda espécie de erros e as consultas com janelas (J), não atualizava a janela inferior, aparecia com bastante frequência um erro ao trocar as janelas, informando que uma variável ITEM, não estava disponível etc etc...
Apanhei muito e descobri que o problema estava no arquivo xxx_func.prg, onde muitas linhas estavam diferentes. Usei o programa Winmerge¹ para comparar a versão anterior, que estava funcionando e a nova... Mas, para resumir, a versão GAS-Pro v4.0i não gera um programa funcional, sendo necessário atualizar o gerador para a versão GAS-Pro v4.0o... ¹(http://winmerge.org)
Se desejarem, poderei enviar ambos os xxx_func.prg para os colegas examinarem e compreenderem as diferenças.
Saudações
Walterley. :%
-
prmuller
- Usuário Nível 3

- Mensagens: 122
- Registrado em: 11 Nov 2008 12:25
- Localização: Vila Velha - ES
Migrar Clipper para Harbour.
Walterley,
Seria bem interessante que você postasse os arquivos.
Paulo Muller
Seria bem interessante que você postasse os arquivos.
Paulo Muller
Migrar Clipper para Harbour.
Boa tarde pessoal!!!
A empresa que trabalho trocou os micros de 32 bits para 64 bits fazendo com que meus pequenos aplicativos em clipper parassem de funcionar.
Resolvi instalar o harbour para tentar contornar esse problema.
Instalei o harbour na pasta hb30.
Rodei o hbide, carreguei meu PRG e tentei compilar, e deu o erro abaixo:
----------------------------------------------------------------------------------------------------
Project [ C:/backup/Ltace/ltace.prg ] Launch [ No ] Rebuild [ Yes ] Started [ 12:32:31 ]
----------------------------------------------------------------------------------------------------
Batch File Exists => C:\Users\lamorim\AppData\Local\Temp\zkuo9a.bat
Batch File Contents =>
hbmk2 -q -trace -info -lang=en -width=0 -rebuild -s C:\backup\Ltace\ltace.prg
Command => C:\windows\system32\cmd.exe
Arguments => /C C:\Users\lamorim\AppData\Local\Temp\zkuo9a.bat
----------------------------------------------------------------------------------------------------
CurDir() => hb30\bin Starting in => C:\backup\Ltace\
C:\backup\Ltace>hbmk2 -q -trace -info -lang=en -width=0 -rebuild -s C:\backup\Ltace\ltace.prg
'hbmk2' n╞o é reconhecido como um comando interno
ou externo, um programa operável ou um arquivo em lotes.
----------------------------------------------------------------------------------------------------
Exit Code [ 1 ] Exit Status [ 0 ] Finished at [ 12:32:31 ] Done in [ 0.08 Secs ]
Como resolver isso?
A empresa que trabalho trocou os micros de 32 bits para 64 bits fazendo com que meus pequenos aplicativos em clipper parassem de funcionar.
Resolvi instalar o harbour para tentar contornar esse problema.
Instalei o harbour na pasta hb30.
Rodei o hbide, carreguei meu PRG e tentei compilar, e deu o erro abaixo:
----------------------------------------------------------------------------------------------------
Project [ C:/backup/Ltace/ltace.prg ] Launch [ No ] Rebuild [ Yes ] Started [ 12:32:31 ]
----------------------------------------------------------------------------------------------------
Batch File Exists => C:\Users\lamorim\AppData\Local\Temp\zkuo9a.bat
Batch File Contents =>
hbmk2 -q -trace -info -lang=en -width=0 -rebuild -s C:\backup\Ltace\ltace.prg
Command => C:\windows\system32\cmd.exe
Arguments => /C C:\Users\lamorim\AppData\Local\Temp\zkuo9a.bat
----------------------------------------------------------------------------------------------------
CurDir() => hb30\bin Starting in => C:\backup\Ltace\
C:\backup\Ltace>hbmk2 -q -trace -info -lang=en -width=0 -rebuild -s C:\backup\Ltace\ltace.prg
'hbmk2' n╞o é reconhecido como um comando interno
ou externo, um programa operável ou um arquivo em lotes.
----------------------------------------------------------------------------------------------------
Exit Code [ 1 ] Exit Status [ 0 ] Finished at [ 12:32:31 ] Done in [ 0.08 Secs ]
Como resolver isso?
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Migrar Clipper para Harbour.
pelo erro,seu problema deve ser de PATH, veja primeiro se localiza o arquivo hbmk2.exe, e depois veja se o caminho dele está no PATH do Windows.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
Migrar Clipper para Harbour.
Aí sim hein!!!
Obrigado sygecom.
Entrei nas varíaveis de ambiente no painel de controle, editei o path colocando todos os locais que pudessem ter algum aplicativo para compilar e linkar.
E funcionou. Gerou o executável sem problemas.
----------------------------------------------------------------------------------------------------
Project [ C:/backup/Ltace/ltace.prg ] Launch [ Yes ] Rebuild [ Yes ] Started [ 14:10:38 ]
----------------------------------------------------------------------------------------------------
Batch File Exists => C:\Users\lamorim\AppData\Local\Temp\thntgl.bat
Batch File Contents =>
hbmk2 -q -trace -info -lang=en -width=0 -rebuild -hbexe C:\backup\Ltace\ltace.prg
Command => C:\windows\system32\cmd.exe
Arguments => /C C:\Users\lamorim\AppData\Local\Temp\thntgl.bat
----------------------------------------------------------------------------------------------------
CurDir() => hb30\bin Starting in => C:\backup\Ltace\
C:\backup\Ltace>hbmk2 -q -trace -info -lang=en -width=0 -rebuild -hbexe C:\backup\Ltace\ltace.prg
hbmk2: Autodetected platform: win
hbmk2: Autodetected C compiler: bcc
hbmk2: Using Harbour: c:\hb30\bin c:\hb30\include c:\hb30\lib\win\bcc c:\hb30\bin
hbmk2: Using C compiler: c:\bcc55\bin\bcc32.exe
hbmk2: Compiling Harbour sources...
hbmk2: Harbour compiler command (embedded):
(c:\hb30\bin\harbour.exe) -n2 C:\backup\Ltace\ltace.prg -q -o.hbmk\win\bcc\ -ic:\bcc55\Include -ic:\hb30\include -undef:.ARCH. -D__PLATFORM__WINDOWS -D__LITTLE_ENDIAN__ -D__ARCH32BIT__
Harbour 3.0.0 (Rev. 16951)
Copyright (c) 1999-2011, http://harbour-project.org/
hbmk2: Compiling...
hbmk2: C/C++ compiler command:
bcc32.exe -c -q -d -6 -O2 -OS -Ov -Oi -Oc -tWM -w -Q -w-sig- -n.hbmk\win\bcc -Ic:\bcc55\Include -Ic:\hb30\include .hbmk\win\bcc\ltace.c
.hbmk\win\bcc\ltace.c:
hbmk2: Linking... ltace.exe
hbmk2: Linker command:
ilink32.exe @C:\Users\lamorim\AppData\Local\Temp\qus1yv.lnk
hbmk2: Linker script:
-Gn -Tpe -Lc:\bcc55\Lib;c:\bcc55\Lib\PSDK;c:\hb30\lib\win\bcc;c:\hb30\bin -ap c0x32.obj .hbmk\win\bcc\ltace.obj, ltace.exe, nul, hbextern.lib hbdebug.lib hbvm.lib hbrtl.lib hblang.lib hbcpage.lib gtcgi.lib gtpca.lib gtstd.lib gtwin.lib gtwvt.lib gtgui.lib hbrdd.lib hbuddall.lib hbusrrdd.lib rddntx.lib rddcdx.lib rddnsx.lib rddfpt.lib hbrdd.lib hbhsx.lib hbsix.lib hbmacro.lib hbcplr.lib hbpp.lib hbcommon.lib kernel32.lib user32.lib gdi32.lib advapi32.lib ws2_32.lib winspool.lib comctl32.lib comdlg32.lib shell32.lib uuid.lib ole32.lib oleaut32.lib mpr.lib winmm.lib mapi32.lib imm32.lib msimg32.lib wininet.lib hbpcre.lib hbzlib.lib cw32mt.lib import32.lib, ,
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
----------------------------------------------------------------------------------------------------
Exit Code [ 0 ] Exit Status [ 0 ] Finished at [ 14:10:42 ] Done in [ 3.32 Secs ]
----------------------------------------------------------------------------------------------------
Detected executable => C:\backup\Ltace\ltace.exe
Launching application [ C:\backup\Ltace\ltace.exe ]
Obrigado
Obrigado sygecom.
Entrei nas varíaveis de ambiente no painel de controle, editei o path colocando todos os locais que pudessem ter algum aplicativo para compilar e linkar.
E funcionou. Gerou o executável sem problemas.
----------------------------------------------------------------------------------------------------
Project [ C:/backup/Ltace/ltace.prg ] Launch [ Yes ] Rebuild [ Yes ] Started [ 14:10:38 ]
----------------------------------------------------------------------------------------------------
Batch File Exists => C:\Users\lamorim\AppData\Local\Temp\thntgl.bat
Batch File Contents =>
hbmk2 -q -trace -info -lang=en -width=0 -rebuild -hbexe C:\backup\Ltace\ltace.prg
Command => C:\windows\system32\cmd.exe
Arguments => /C C:\Users\lamorim\AppData\Local\Temp\thntgl.bat
----------------------------------------------------------------------------------------------------
CurDir() => hb30\bin Starting in => C:\backup\Ltace\
C:\backup\Ltace>hbmk2 -q -trace -info -lang=en -width=0 -rebuild -hbexe C:\backup\Ltace\ltace.prg
hbmk2: Autodetected platform: win
hbmk2: Autodetected C compiler: bcc
hbmk2: Using Harbour: c:\hb30\bin c:\hb30\include c:\hb30\lib\win\bcc c:\hb30\bin
hbmk2: Using C compiler: c:\bcc55\bin\bcc32.exe
hbmk2: Compiling Harbour sources...
hbmk2: Harbour compiler command (embedded):
(c:\hb30\bin\harbour.exe) -n2 C:\backup\Ltace\ltace.prg -q -o.hbmk\win\bcc\ -ic:\bcc55\Include -ic:\hb30\include -undef:.ARCH. -D__PLATFORM__WINDOWS -D__LITTLE_ENDIAN__ -D__ARCH32BIT__
Harbour 3.0.0 (Rev. 16951)
Copyright (c) 1999-2011, http://harbour-project.org/
hbmk2: Compiling...
hbmk2: C/C++ compiler command:
bcc32.exe -c -q -d -6 -O2 -OS -Ov -Oi -Oc -tWM -w -Q -w-sig- -n.hbmk\win\bcc -Ic:\bcc55\Include -Ic:\hb30\include .hbmk\win\bcc\ltace.c
.hbmk\win\bcc\ltace.c:
hbmk2: Linking... ltace.exe
hbmk2: Linker command:
ilink32.exe @C:\Users\lamorim\AppData\Local\Temp\qus1yv.lnk
hbmk2: Linker script:
-Gn -Tpe -Lc:\bcc55\Lib;c:\bcc55\Lib\PSDK;c:\hb30\lib\win\bcc;c:\hb30\bin -ap c0x32.obj .hbmk\win\bcc\ltace.obj, ltace.exe, nul, hbextern.lib hbdebug.lib hbvm.lib hbrtl.lib hblang.lib hbcpage.lib gtcgi.lib gtpca.lib gtstd.lib gtwin.lib gtwvt.lib gtgui.lib hbrdd.lib hbuddall.lib hbusrrdd.lib rddntx.lib rddcdx.lib rddnsx.lib rddfpt.lib hbrdd.lib hbhsx.lib hbsix.lib hbmacro.lib hbcplr.lib hbpp.lib hbcommon.lib kernel32.lib user32.lib gdi32.lib advapi32.lib ws2_32.lib winspool.lib comctl32.lib comdlg32.lib shell32.lib uuid.lib ole32.lib oleaut32.lib mpr.lib winmm.lib mapi32.lib imm32.lib msimg32.lib wininet.lib hbpcre.lib hbzlib.lib cw32mt.lib import32.lib, ,
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
----------------------------------------------------------------------------------------------------
Exit Code [ 0 ] Exit Status [ 0 ] Finished at [ 14:10:42 ] Done in [ 3.32 Secs ]
----------------------------------------------------------------------------------------------------
Detected executable => C:\backup\Ltace\ltace.exe
Launching application [ C:\backup\Ltace\ltace.exe ]
Obrigado
Problemas com variáveis de ambiente?
Bem... ei tinha conseguido compilar meu Clipper com o Harbour, tendi instalado-o, conforme orientação do tópico,, em C:\HB32. Cheguei a postar o resultado - positivo - num outro tópico, que transcrevo abaixo:
Boa tarde a todos. E lendo o tópico, está dando certinho para mim.
Segui a receita de bolo, do tópico "Migrar Clipper para Harbour.":
FUNCTION MAIN() no primeiro programa, desativei is SET PROC TO, criei um sudoku.hbp adaptado daqui, ficou assim:
-osudoku
-inc
-compr=yes
-quiet
-lxhb
-lhbwin
-lhbct
-gui
ARQUIVOS.PRG
CASAS.PRG
IMPORTA.PRG
JOGAR.PRG
LANGS.PRG
NOTAS.PRG
PRIMJOGO.PRG
PROCESSA.PRG
SUDOKU.PRG
TELAS.PRG
Fiz uma pequena modificação: acrescentei a linha "setmode(25,80)", que no Clipper não era necessária (aqui ficou gozado, que as mensagens de alert() ficavam muito abaixo das telas), e... tudo bem: ou seja, estou cheio de dúvidas, rs...
Abri o IDE do HMG 3.4.0 mas não encontro onde carregar meus .PRGS.
Outra coisa: Além de acrescentar set path=C:\hb32\bin;C:\hb32\comp\mingw\bin; e set HB_COMPILER=mingw nas configurações avançadas das propriedades do "Meu Computador", nas variáveis de ambiente (uso nesse note o Win7), acrescentei também, por minha conta, um path para C:\hmg.3.4.0\HARBOUR\bin; porque foi lá que encontrei o HBMK2.EXE e creio que foi isso que me salvou a pele.
Dois aspectos me chamam a atenção: 1) Vc pode fechar a janela no X superior direito sem receber a famigerada mensagems de que está tentando forçar a saída do sistema e 2) o processador mantém-se 99% ou até 100% idle, mesmo com a aplicação aberta.
Mas além, da dúvida crucial que é como faço para ver meus PRGs, também estou encucado com o seguinte: esse complilador (ou linkeditor ou os dois), HBMK2... como é que ele "sabe" que LIBs estou usando? Ou será que ele carrega TODAS as libs que tiver disponíveis (o novo exe tem quase o dobro do tamanho daquele, feito com o Clipper)?! Será? E o mouse, como fazer para usá-lo?
Gostaria que alguém comentasse o que digo e, se possível, postasse uns PRGs feitos através HMG.
'Brigado!
Buscando, porém solução para planejamento de telas gráficas, instalei também o HMG 3.4. E verificando, que tanto em C:\HB32 quanto em C:\hmg.3.4.0\HARBOUR há os mesmos arquivos, deletei C:\HB32 e mudei, nas variáveis de ambiente, o PATH, retirando "c:\hb32\bin;c:\\hb32\comp\mingw\bin;" e colocando "C:\hmg.3.4.0\HARBOUR\bin". O gozado é que, da forma anterior, com as variáveis de ambiente apontando para os diretórios do Clipper (SET LIB, SET INCLUDE, etc, tinha funcionado... E agora, mesmo tendo mudado o path de HBMK2.EXE, não apenas não compila mas nada quanto... olha só a mensagem que retorna:
"C:\Arquivos de programas\sudoku>hbmk2 sudoku.hbp
hbmk2: Processando opções do ambiente: -comp=mingw
hbmk2[sudoku]: Erro: Executando compilador C/C++. -1"
Tenho a impressão de que devo tirar aquelas vaiáveis de ambeinte do Clipper todas mas... quais colocar em seu lugar?
Boa tarde a todos. E lendo o tópico, está dando certinho para mim.
Segui a receita de bolo, do tópico "Migrar Clipper para Harbour.":
FUNCTION MAIN() no primeiro programa, desativei is SET PROC TO, criei um sudoku.hbp adaptado daqui, ficou assim:
-osudoku
-inc
-compr=yes
-quiet
-lxhb
-lhbwin
-lhbct
-gui
ARQUIVOS.PRG
CASAS.PRG
IMPORTA.PRG
JOGAR.PRG
LANGS.PRG
NOTAS.PRG
PRIMJOGO.PRG
PROCESSA.PRG
SUDOKU.PRG
TELAS.PRG
Fiz uma pequena modificação: acrescentei a linha "setmode(25,80)", que no Clipper não era necessária (aqui ficou gozado, que as mensagens de alert() ficavam muito abaixo das telas), e... tudo bem: ou seja, estou cheio de dúvidas, rs...
Abri o IDE do HMG 3.4.0 mas não encontro onde carregar meus .PRGS.
Outra coisa: Além de acrescentar set path=C:\hb32\bin;C:\hb32\comp\mingw\bin; e set HB_COMPILER=mingw nas configurações avançadas das propriedades do "Meu Computador", nas variáveis de ambiente (uso nesse note o Win7), acrescentei também, por minha conta, um path para C:\hmg.3.4.0\HARBOUR\bin; porque foi lá que encontrei o HBMK2.EXE e creio que foi isso que me salvou a pele.
Dois aspectos me chamam a atenção: 1) Vc pode fechar a janela no X superior direito sem receber a famigerada mensagems de que está tentando forçar a saída do sistema e 2) o processador mantém-se 99% ou até 100% idle, mesmo com a aplicação aberta.
Mas além, da dúvida crucial que é como faço para ver meus PRGs, também estou encucado com o seguinte: esse complilador (ou linkeditor ou os dois), HBMK2... como é que ele "sabe" que LIBs estou usando? Ou será que ele carrega TODAS as libs que tiver disponíveis (o novo exe tem quase o dobro do tamanho daquele, feito com o Clipper)?! Será? E o mouse, como fazer para usá-lo?
Gostaria que alguém comentasse o que digo e, se possível, postasse uns PRGs feitos através HMG.
'Brigado!
Buscando, porém solução para planejamento de telas gráficas, instalei também o HMG 3.4. E verificando, que tanto em C:\HB32 quanto em C:\hmg.3.4.0\HARBOUR há os mesmos arquivos, deletei C:\HB32 e mudei, nas variáveis de ambiente, o PATH, retirando "c:\hb32\bin;c:\\hb32\comp\mingw\bin;" e colocando "C:\hmg.3.4.0\HARBOUR\bin". O gozado é que, da forma anterior, com as variáveis de ambiente apontando para os diretórios do Clipper (SET LIB, SET INCLUDE, etc, tinha funcionado... E agora, mesmo tendo mudado o path de HBMK2.EXE, não apenas não compila mas nada quanto... olha só a mensagem que retorna:
"C:\Arquivos de programas\sudoku>hbmk2 sudoku.hbp
hbmk2: Processando opções do ambiente: -comp=mingw
hbmk2[sudoku]: Erro: Executando compilador C/C++. -1"
Tenho a impressão de que devo tirar aquelas vaiáveis de ambeinte do Clipper todas mas... quais colocar em seu lugar?
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Migrar Clipper para Harbour.
Está chamando o compilador de C, mas não está encontrando.
Procure aí se tem, pelo que mencionou deve ser a pasta C:\hmg.3.4.0\mingw\bin
Confirme o nome, e coloque também no path.
Procure aí se tem, pelo que mencionou deve ser a pasta C:\hmg.3.4.0\mingw\bin
Confirme o nome, e coloque também no path.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Migrar Clipper para Harbour.
Acertei tudo, caro José Quintas e está tudo funcionando.
Mas meus programas, como se pode observar, são pouco mais do que dBase compilado. Como já falei aqui, parei profissionalmente um pouco depois do lançamento do Clipper 5.2d. Mesmo assim, graças à ajuda de todos aqui, estou compilando-os com o Harbour com ganho extraordinário em velocidade de execução, já que apenas agora tomo contato com evoluções da Harbour em relação à Clipper. Aos poucos pretendo conhecê-las...
Um dessas evoluções me veio como descoberta inesperada: Na saída do sistema, escrito como se fosse para Clipper, há um "alert()": "Quer mesmo sair?", ou algo assim. E qual não foi minha surpresa ao descobrir que clicando com o mouse, botão esquerdo, em não... o sistema não fecha mesmo. E se clicar em "Sim", claro, fecha. Ora, então mesmo tendo sido escrito para Clipper, o mouse sabe não só que botão foi pressionado mas a posição do pressionamento, mesmo sem eu ter escrito uma linha para isso. Claro que essa interceptação do "inkey()" pelo mouse está no "alert()" da biblioteca do Harbour mas eu não encontrei o fonte dessa "alert()"... E por enquanto estou conseguindo escapara de qualquer "@...get" + "read", o que, acredito, deve ajudar...
Há, nas telas do sistema, diversos momentos em que digo, por exemplo, "Tecla PgUp para ver o registro anterior" ou "Tecle ENTER para aceitar os dados que estão na tela, nesse momento." O programa, tanto quanto com o "alert()", nesses momentos, está parado num "inkey()".
Como faço para que o mouse funcione nesses casos? Se tiver uma "receita de bolo", ok, mas eu gostaria de saber também onde há informação sobre isso, do mouse, se não for estrovar-lhe.
Um exemplo:
Tem como eu buscar o próximo registro apenas clicando como esquerdo sobre a frase em linha 11, coluna 10? Na extensão toda da frase? Ou só em 11,10 mesmo? O que eu devo acrescentar no fonte?
Outra surpresa foi que o "X" no canto superior direito da janela em que se abre a tela do sistema, fecha o sistema sem perguntar "Confirma saída?" ou chame algum alert() associado a um inkey() = 27 ou coisa assim...
Se você tiver paciência e quiser, o que estou fazendo, um programa para jogar ou criar Sudoku, ainda está em construção mas já dá para tem uma ideia do que digo sobre como se daria esse bypass nos inkeys da vida... Além dos pontos em que há mensagens do tipo "PgUp - Proximo registro" há as próprias células do tabuleiro do Sudoku, que é o que estou "xeretando"...
Grato.
P.S.: Toda crítica será bem vinda! Grato novamente!
Mas meus programas, como se pode observar, são pouco mais do que dBase compilado. Como já falei aqui, parei profissionalmente um pouco depois do lançamento do Clipper 5.2d. Mesmo assim, graças à ajuda de todos aqui, estou compilando-os com o Harbour com ganho extraordinário em velocidade de execução, já que apenas agora tomo contato com evoluções da Harbour em relação à Clipper. Aos poucos pretendo conhecê-las...
Um dessas evoluções me veio como descoberta inesperada: Na saída do sistema, escrito como se fosse para Clipper, há um "alert()": "Quer mesmo sair?", ou algo assim. E qual não foi minha surpresa ao descobrir que clicando com o mouse, botão esquerdo, em não... o sistema não fecha mesmo. E se clicar em "Sim", claro, fecha. Ora, então mesmo tendo sido escrito para Clipper, o mouse sabe não só que botão foi pressionado mas a posição do pressionamento, mesmo sem eu ter escrito uma linha para isso. Claro que essa interceptação do "inkey()" pelo mouse está no "alert()" da biblioteca do Harbour mas eu não encontrei o fonte dessa "alert()"... E por enquanto estou conseguindo escapara de qualquer "@...get" + "read", o que, acredito, deve ajudar...
Há, nas telas do sistema, diversos momentos em que digo, por exemplo, "Tecla PgUp para ver o registro anterior" ou "Tecle ENTER para aceitar os dados que estão na tela, nesse momento." O programa, tanto quanto com o "alert()", nesses momentos, está parado num "inkey()".
Como faço para que o mouse funcione nesses casos? Se tiver uma "receita de bolo", ok, mas eu gostaria de saber também onde há informação sobre isso, do mouse, se não for estrovar-lhe.
Um exemplo:
Código: Selecionar todos
whil .t.
@ 10,10 say "PgDn para proximo registro"
@ 11,10 say "PgUp para registro anterior"
tecla := inkey(0)
if tecla = 3 // PgDn
skip
elseif tecla = 18 // PgDn
skip -1
else
loop
endi
endd
Outra surpresa foi que o "X" no canto superior direito da janela em que se abre a tela do sistema, fecha o sistema sem perguntar "Confirma saída?" ou chame algum alert() associado a um inkey() = 27 ou coisa assim...
Se você tiver paciência e quiser, o que estou fazendo, um programa para jogar ou criar Sudoku, ainda está em construção mas já dá para tem uma ideia do que digo sobre como se daria esse bypass nos inkeys da vida... Além dos pontos em que há mensagens do tipo "PgUp - Proximo registro" há as próprias células do tabuleiro do Sudoku, que é o que estou "xeretando"...
Grato.
P.S.: Toda crítica será bem vinda! Grato novamente!
Migrar Clipper para Harbour.
Para adaptação do click do mouse, siga esta dica:
Este código já dá para se ter uma ideia de como o mouse funciona.
Boa sorte!
Código: Selecionar todos
whil .t.
@ 10,10 say "PgDn para proximo registro"
@ 11,10 say "PgUp para registro anterior"
tecla := inkey(0)
**************** AQUI É O TRATAMENTO DO MOUSE *****************
if MLeftDown()=.t. .and. mRow()=10.and.mCol()>=10 .and. mCol()<=36
tecla = 3
elseif MLeftDown()=.t. .and. mRow()=11.and.mCol()>=10 .and. mCol()<=36
tecla = 18
endif
***
if tecla = 3 // PgDn
skip
elseif tecla = 18 // PgDn
skip -1
else
loop
endi
endd
Boa sorte!
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Migrar Clipper para Harbour.
Além de boa sorte, que é como caldo de galinha, "nunca faz mal", vou precisar de uma dose gigante de perseverança (que também é como caldo de galinha, rs...). Se você compilou o Sudoku, viu que na primeira tela do jogo - aquela logo após o anúncio da criação dos arquivos e do primeiro jogo - há relativamente poucas possibilidades: PgUp, PgDn (que "nascem desabilitadas" porque nesse início, o programa cria apenas um jogo) , ENTER para optar por jogar este jogo (como se outros houvesse, rs...), DEL para deletá-lo, INS para chamar a rotina de criação de novos jogos, ESC, óbvio, e o "intruso" Alt-X, que resseta o tabuleiro. Ah! E o TAB, caso a pessoa precise ler anotações mais para baixo do que cabe naquela janelinha. Digo "intruso" porque Alt-X creio que irá, desta tela de escolha, para a tela de jogar mesmo. É que Alt-X faz mais sentido, a meu ver, por lá mesmo: ressetar um jogo é fazer algo com um jogo já escolhido.
Mas falei de perseverança porque pretendo usar o mouse, além das opções da outra tela, em que se joga, (por exemplo, a temporária Alt-Z para voltar uma jogada, que deve mudar, como em todo programa "normal" para Ctrl-Z, "desfazer"), também para posicionar o cursor piscante que indica uma das 81 casas do tabuleiro... no mínimo, só para essa parte, mais 1 "if" e mais 80 "elseifs", e dos grandes. E já que é para trabalhar, usar, em mais 81 "ifs e elseifs" o botão direito do mouse para chamar a rotina que mostra os candidatos das casas vazias. Hoje, do jeito que está, vc se posiciona numa dessas casas vazias e tecla "Alt-B" (de "bizu", "dica") para chamar essa rotina. Serão, só nesse brincadeira, uma cadeia de 2 "if" e 160 elseifs... Imagino que o botão direito seja o MRightDown(), mas ainda vou xeretar o manual, quando conseguir encontrar um... Se souber de algum, por favor, me indique.
Por hora agradeço as dicas mas ainda fico com uma dúvida: se eu posicionar o ponteiro do mouse fora da janela 0,0,24,79, exatamente no "X" superior direito da janela que, lembremo-nos, quem criou não fui eu e sim o próprio Windows, como submeter um clique ali a um alert() para confirmar a saída do sistema? Hoje, a pessoa pode muito bem fechar a janela antes de repassar o que está na memória para o disco... Estou imaginando que eu mesmo posso ordenar a abertura da janela, do tamanho que quiser, com os botões que eu quiser, passando por cima do Windows... Mas, sendo isso, aumentam em muito as possibilidades, hein?
É... esse Harbour está sendo mesmo uma grande e grata surpresa. Por último mesmo... será que há uma CLD.LIB para Harbour? Pergunto porque uso a CLD direto para depurar passo-a-passo os programas que escrevo. Mas se eu mudar muito o código... será que ainda assim consigo compilá-lo no velho Clipper só para depurá-lo com essa CLD?
Mas falei de perseverança porque pretendo usar o mouse, além das opções da outra tela, em que se joga, (por exemplo, a temporária Alt-Z para voltar uma jogada, que deve mudar, como em todo programa "normal" para Ctrl-Z, "desfazer"), também para posicionar o cursor piscante que indica uma das 81 casas do tabuleiro... no mínimo, só para essa parte, mais 1 "if" e mais 80 "elseifs", e dos grandes. E já que é para trabalhar, usar, em mais 81 "ifs e elseifs" o botão direito do mouse para chamar a rotina que mostra os candidatos das casas vazias. Hoje, do jeito que está, vc se posiciona numa dessas casas vazias e tecla "Alt-B" (de "bizu", "dica") para chamar essa rotina. Serão, só nesse brincadeira, uma cadeia de 2 "if" e 160 elseifs... Imagino que o botão direito seja o MRightDown(), mas ainda vou xeretar o manual, quando conseguir encontrar um... Se souber de algum, por favor, me indique.
Por hora agradeço as dicas mas ainda fico com uma dúvida: se eu posicionar o ponteiro do mouse fora da janela 0,0,24,79, exatamente no "X" superior direito da janela que, lembremo-nos, quem criou não fui eu e sim o próprio Windows, como submeter um clique ali a um alert() para confirmar a saída do sistema? Hoje, a pessoa pode muito bem fechar a janela antes de repassar o que está na memória para o disco... Estou imaginando que eu mesmo posso ordenar a abertura da janela, do tamanho que quiser, com os botões que eu quiser, passando por cima do Windows... Mas, sendo isso, aumentam em muito as possibilidades, hein?
É... esse Harbour está sendo mesmo uma grande e grata surpresa. Por último mesmo... será que há uma CLD.LIB para Harbour? Pergunto porque uso a CLD direto para depurar passo-a-passo os programas que escrevo. Mas se eu mudar muito o código... será que ainda assim consigo compilá-lo no velho Clipper só para depurá-lo com essa CLD?
Migrar Clipper para Harbour.
Trabalhar com mouse em modo texto dá "trabalho" mesmo, vai ter que mapear todos os pontos de clique do mouse, criar as "ações" etc. Talvez o melhor no seu caso, como é pouca parte de interface tentar usar uma LIB gráfica, alguns anos atrás testei a Hwgui e gostei por achá-la mais simples. Ela tem uma IDE que facilita criar os botões em modo visual.
Para ativar o Debug no Harbour basta colocar na linkagem o parâmetro -b.
Até+
Para ativar o Debug no Harbour basta colocar na linkagem o parâmetro -b.
Até+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Migrar Clipper para Harbour.
Baixei a Hwgui daqui: http://sourceforge.net/projects/hwgui/, na versão 2.19.b5.src.zip e a descompactei.
Lendo a documentação, vi que não precisa instalar nada. Então eu copiei a pasta para dentro do diretório onde já havia o HB32, ficando assim:
C:\hb32\hwgui
O próximo passo seria, pelo que entendi, criar as LIBs da Hwgui e daqui não estou conseguindo prosseguir. Diz o manual:
Xeretando a documentação do Hwgui, em "C:\hb32\hwgui\doc\hwgdoc.html" também não estou conseguindo descobrir nada. O que eu gostaria, antes de prosseguir no modo texto (que demandaria centenas de if's, elseifs e endifs só para o mouse), gostaria de tentar o modo gráfico. Na verdade tentei o HMG, no começo da história toda, abri o "C:\Arquivos de programas\sudoku\sudoku.hbp" como projeto, cliquei no "play" mas depois de aproximadamente duas garrafas térmicas de café sem nenhum sinal de atividade, desisti. Gozado que o "Hello World!" que vem como sample foi rapidinho... Só não estou certo de ter gerado um executável que rode independente do HMG, que depois da travada que deu tentando abrir meu programeta...
Onde será que estou errando em ajustar um ambiente (paths, arquivos, libs, header files .chs etc...) adequado para migrar esse meu desimportante Sudoku do vetusto Clipper para o Harbour?
Gratíssimo!
Não sei se ajuda mas, em todo caso eis o conteúdo do diretório C:\HB32...
Lendo a documentação, vi que não precisa instalar nada. Então eu copiei a pasta para dentro do diretório onde já havia o HB32, ficando assim:
C:\hb32\hwgui
O próximo passo seria, pelo que entendi, criar as LIBs da Hwgui e daqui não estou conseguindo prosseguir. Diz o manual:
Não posso fazer isso porque não há um "C:\HARBOUR". No máximo há aqui um "C:\hb32\bin", mas esse já está no path. Tento, mesmo assim, e...2.2. How to build HwGUI library
Before building the library you need to set the HB_PATH environment variable, it should point to the directory where your copy of Harbour or xHarbour is. You may set it on your Windows environment or in the appropriate command ( .bat ) file, including there a line:
SET HB_PATH=c:\harbour
Then run one of command files depending of the C compiler you use ( make_b32.bat for Borland C, make_pc.bat for Pelles C, make_vc.bat for MSVC, make_w32.bat for Open Watcom C, makemngw.bat for Mingw ) - this will build four libraries - hwgui.lib, procmisc.lib, hwg_qhtm.lib and hbxml.lib. That's all !
Procurei pelo disco todo em em nenhum lugar encontrei o mingw32-make.exe. Mas bastou apenas a instalação indicada pelo Toledo no 2o. post desse tópico para eu estar conseguido compilar e link-editar meus fontes, graças, creio, ao hbmk2.exe que está em C:\hb32. A propósito, nessa pasta há, por exemplo, um harbour.exe... De toda forma, o que o makemngw.bat chama não é o Harbour.exe, é o mingw32-make.exe...C:\hb32\hwgui>path
PATH=C:\hb32\bin;C:\hb32\comp\mingw\bin;D:\CLIPPER\BIN;D:\CLIPPER\NG;D:\CLIPPER\
click203;C:\Arquivos de programas\Windows Resource Kits\Tools\;C:\WINDOWS\system
32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Arquivos de programas\QuickTime\QTSyst
em\;
C:\hb32\hwgui>dir makemngw.*
O volume na unidade C não tem nome.
O número de série do volume é 10A0-2DDB
Pasta de C:\hb32\hwgui
22/06/2015 13:01 535 makemngw.bat
1 arquivo(s) 535 bytes
0 pasta(s) 265.642.962.944 bytes disponíveis
C:\hb32\hwgui>makemngw
'mingw32-make.exe' não é reconhecido como um comando interno
ou externo, um programa operável ou um arquivo em lotes.
Xeretando a documentação do Hwgui, em "C:\hb32\hwgui\doc\hwgdoc.html" também não estou conseguindo descobrir nada. O que eu gostaria, antes de prosseguir no modo texto (que demandaria centenas de if's, elseifs e endifs só para o mouse), gostaria de tentar o modo gráfico. Na verdade tentei o HMG, no começo da história toda, abri o "C:\Arquivos de programas\sudoku\sudoku.hbp" como projeto, cliquei no "play" mas depois de aproximadamente duas garrafas térmicas de café sem nenhum sinal de atividade, desisti. Gozado que o "Hello World!" que vem como sample foi rapidinho... Só não estou certo de ter gerado um executável que rode independente do HMG, que depois da travada que deu tentando abrir meu programeta...
Onde será que estou errando em ajustar um ambiente (paths, arquivos, libs, header files .chs etc...) adequado para migrar esse meu desimportante Sudoku do vetusto Clipper para o Harbour?
Gratíssimo!
Não sei se ajuda mas, em todo caso eis o conteúdo do diretório C:\HB32...
Migrar Clipper para Harbour.
Quando usei a HwGui não criei ela, já usei uma versão compilada, então não posso ajudar nessa questão de como compilá-la e mesmo por que estou agora com outro PC e não tenho mais nada dela aqui. Talvez tenha dentro do diretório onde instalou os arquivos dela, o diretório do compilador no seu caso Mingw se achar esse arquivo lá, acrescente na sua variável path esse caminho também.
Ate+
Ate+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Migrar Clipper para Harbour.
Só agora pude testar sua rotina, Andril... ou me falta alguma coisa, talvez o que, no seu exemplo, você chama de "aqui é o tratamento do mouse" ou... o clique do mouse, seja onde for, em que botão for, não interrompe o status de espera do inkey(), cara.
Um clique de mouse, então, não é considerado, pelo Harbour, como uma digitação. Pelo menos do jeito em que o exemplo está...
Dei uma adaptada e... em se teclando PgDn seguidas vezes, enquanto se passea com o mouse pela tela, é possi´vel notar que mRow() e mCol() vão mudando.
Mas clique algum está interrompendo a espera de inkey(). Olha como ficou:
Um clique de mouse, então, não é considerado, pelo Harbour, como uma digitação. Pelo menos do jeito em que o exemplo está...
Dei uma adaptada e... em se teclando PgDn seguidas vezes, enquanto se passea com o mouse pela tela, é possi´vel notar que mRow() e mCol() vão mudando.
Mas clique algum está interrompendo a espera de inkey(). Olha como ficou:
Código: Selecionar todos
function main
ttt()
return nil
func ttt()
set colo to
cls
whil .t.
@ 10,10 say "PgDn para proximo registro"
@ 11,10 say "PgUp para registro anterior"
tecla := inkey(0)
**************** AQUI É O TRATAMENTO DO MOUSE *****************
if MLeftDown()=.t. .and. mRow()=10.and.mCol()>=10 .and. mCol()<=36
tecla = 3
elseif MLeftDown()=.t. .and. mRow()=11.and.mCol()>=10 .and. mCol()<=36
tecla = 18
endif
***
if tecla = 3 // PgDn
@ 10,40 say "3"
elseif tecla = 18 // PgDn
@ 11,40 say "18"
elseif tecla = 27
exit
endi
inkey(0)
@ 10,40 say " "
@ 11,40 say " "
@ 15,10 say mRow()
@ 16,10 say mCol()
endd


