Ajuda Migracao.

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

mraakkari
Usuário Nível 1
Usuário Nível 1
Mensagens: 8
Registrado em: 17 Mar 2011 18:48
Localização: sao paulo

Ajuda Migracao.

Mensagem por mraakkari »

Primeiramente gostaria de agecer por esta ferramenta de discussao.

Bom, nao entendo nada de harbour ou xharbour.

Tenho um prg em clipper summer que gostaria de converte-lo em harbour.

Esse prg tem base:dbf e indice:ntx, e gostaria de adapta-lo com base:dbf e indice:CDX.
Estrtura CDX:

produto.cdx

prodcod
proddescr
prodbarr
prodpreco


Segue codigo

Código: Selecionar todos

! cls
set exclusive off
set date british
set century on
use stkmaste 
do while .t.
   use basedados
   if ! file ('codbarra.ntx')
      set exclusive off
      use stkmaste
      index on cod_barra to codbarra
      close
   endif
vpreco1=0
set color to gr+/n
@ 00,00 clear to 09,79
@ 01,01 to 05,79 double
@ 06,01 to 24,79 double
@ 03,29 say 'TERMINAL DE CONSULTA'
@ 12,24 say 'Codigo de Barra'
@ 15,10 say 'Descricao'
@ 15,62 say 'Marca'
@ 19,29 say 'Preco R$:'
set color to
set color to w/n
vcod_barra=space(14)
vpreco1=0
vdescricao=space(50)
vmarca=space(9)

@ 12,40 get vcod_barra picture '99999999999999'
read
   
   if lastkey () = 27
      clear
      quit
   endif
set index to stkbarra
   find (vcod_barra)
   if eof ()
      set color to w/n*
      @ 09,27 say "Codigo Nao Encontrado..."
      set color to
      set color to r/n
      @ 16,10 say "Descricao nao encontrada!                        "
      @ 16,62 say "N/E      "
      @ 19,39 say "      0.00"
      set color to
*      inkey (0)
*      inkey (4)
      close
      loop
      set color to
   endif
   vdescricao=descricao
   vmarca=marca
   vpreco1=prvvmn_v
   @ 16,10 say vdescricao picture "@!"
   @ 16,62 say vmarca picture "@!"
   @ 19,39 say vpreco1 picture"999,999.99"
*   inkey(0)
   vcod_barra=space(14)
   close
   @ 00,00 clear to 06,79
   goto top
enddo
close all
return

alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: Ajuda Migracao.

Mensagem por alxsts »

Olá!

Seja bem-vindo ao fórum, caro mraakkari!
mraakkari escreveu:Bom, nao entendo nada de harbour ou xharbour.
Não sei se você é programador ou apenas usuário deste aplicativo. De qualquer forma, disponho-me a ajudá-lo nesta migração.

Notei, no código postado, a abertura de duas tabelas: stkmaste e basedados. Você informou a estrutura de qual tabela? Basedados?
Para que serve a primeira? Existe tambem uma referência confusa a um arquivo de índice:

Código: Selecionar todos

set index to stkbarra
.
Poderia esclarecer? Informe as tabelas corretas, com os respectivos layouts e índices.

Essa é uma aplicação típica de supermercados, o chamado terminal de consulta (acho que alguns o chamam de São Tomé). Qual o tipo de monitor onde será executada esta aplicação?

Você terá que fazer um programa para converter a base de NTX para CDX e converter o teu aplicativo. Se for difícil para você baixar o compilador xHarbour, e em se tratando de uma aplicação pequena, poderei compilar e te enviar por e-mail. Farei alguns ajustes no código, se você permitir, que serão publicados aqui neste fórum,
[]´s
Alexandre Santos (AlxSts)
mraakkari
Usuário Nível 1
Usuário Nível 1
Mensagens: 8
Registrado em: 17 Mar 2011 18:48
Localização: sao paulo

Re: Ajuda Migracao.

Mensagem por mraakkari »

obrigado pela resposta.

é somente uma dbf, onde esta stkmaste, favor ler se BASEDADOS, pois esqueci de altera-lo, e ja postei a estrutura cdx.

gostaria muito das suas alteracoes e favor posta-lo aqui, pois pretendo aprender a compilar essa linguagem.

sou programador OPP em Java e estou apanhando nessa estruturada, pois acho que já é uma linguagem em desuso.


abraços...
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Ajuda Migracao.

Mensagem por Pablo César »

sou programador OPP em Java e estou apanhando nessa estruturada, pois acho que já é uma linguagem em desuso
Desuso ? O Clipper realmente está sendo deixado de lado, mas com [x]Harbour e GUI libs está ganhando forças novamente.

Se você tiver interesse na linguagem xBase, não desmerecendo o esforço do colega que se dispõe em fazer para você, em migrar de forma rápida e fácil em modo console, leia esta mensagem: https://pctoledo.org/forum/viewto ... 543#p66474 Neste tópico encontra-se um arquivo .doc que dá todas as dicas para uma migração rápida em modo console. A IDE HMG 3.0.35 é uma ferramenta com mais fácil comprensão para os que estão migrando do Clipper e teremos a HMG versão 4 que é baseado na tecnologia QT, multiplataforma e mais voltada a OPP (ja que você é programador Java).
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
mraakkari
Usuário Nível 1
Usuário Nível 1
Mensagens: 8
Registrado em: 17 Mar 2011 18:48
Localização: sao paulo

Re: Ajuda Migracao.

Mensagem por mraakkari »

Pablo, obrigado pela resposta...

Antes, eu disse que "achava" que era uma linguagem em desuso, mas pelo visto me enganei, pois ainda nao tinha ouvido falar harbour, e so o conheci pela busca na internet.

Li o artigo e acho que nao me servirá, pois tem esse trecho:"HMG: Um compilador Harbour com baterias inclusas. Se você não está interessado em Linux ou Mac-OS e quer apenas que a sua aplicação seja instalado tudo que precisa. Um Compilador C, binarios e arquivo bat com muitos exemplos. Cada programa criado é chamado de "Harbour MiniGUI" ou apenas "HMG" abreviado."

O que eu quero é justamento o contrário, que meu prg seja executado em LINUX, pois meu servidor foi trocado de NOVELL para LINUX, o programa foi modificado. Quero acoplar esse sisteminha de busca, como era antigamente, só que agora o programa trabalha com DBF e CDX (antes, DBF e NTX (era usado muitos NTXs para um mesmo dbf, e agora é somente um CDX pra 1 unico dbf, como mencionei a estrutura no primeiro post).

Acho que consegui detalhar melhor o que preciso.

Obrigado
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: Ajuda Migracao.

Mensagem por alxsts »

Olá!

Segue uma possível solução:

Código: Selecionar todos

#include "box.ch"
#include "inkey.ch"
   
REQUEST DBFCDX

FUNCTION Main()

   LOCAL cCodBarra, nCod, GetList := {}

   SetColor( "N/W,B+/W*" )

   RddSetDefault( "DBFCDX" )
   
   SET SCOREBOARD OFF
   SET OPTIMIZE ON
   
   SET AUTOPEN ON
   SET AUTORDER TO 1
   SET DELETED ON

   // Criei e populei uma tabela, para efeito de testes - favor retirar depois...
   If .Not. File( "stkmaste.Dbf" )
      DbCreate( "stkmaste", { { "prodcod",   "N",  6, 0 }, ;
                              { "proddescr", "C", 50, 0 }, ;
                              { "prodbarr",  "C", 14, 0 }, ;
                              { "prodpreco", "N",  9, 2 }  ;
                            } ;
              )  

      USE stkmaste EXCLUSIVE NEW

      For nCod := 1 To 100
         stkmaste->( DbAppend() )
         stkmaste->prodcod   := nCod
         stkmaste->proddescr := "Produto " + Str( nCod,,,.T. )
         stkmaste->prodbarr  := PadL( nCod, 14, "0" ) 
         stkmaste->prodpreco := HB_Random( 1, 999999 ) / 1000
      Next
      stkmaste->( DbCloseArea() ) 
   Endif
   //--------------------

   USE stkmaste SHARED NEW

   If .Not. File( "stkmaste" + IndexExt() )
      INDEX ON prodbarr TAG codbarra TO stkmaste
   Endif

   DispBox( 0, 0, 5, 79, B_DOUBLE + " " )
   DispBox( 6, 0,24,79, B_DOUBLE + " " )
   @ 03,1 Say PadC( "TERMINAL DE CONSULTAS", 78 ) Color "B+/W"

   While LastKey() != K_ESC

      cCodBarra := Space(14)
      @ 12,24 Say "Codigo de Barras" ;
              Get cCodBarra ;
             Pict "99999999999999"

      READ

      If LastKey() != K_ESC
         If stkmaste->( DbSeek( cCodBarra ) )
            @ 12,24 say "Descricao: " + stkmaste->proddescr Color "B+/W"
            @ 14,24 say "Marca    : " + "<marca>" Color "B+/W" 
            @ 16,24 say "Preco R$ : " + Transform( stkmaste->prodpreco, "@E 999,999.99" ) Color "B+/W"
            Inkey(3)
         Else
            Alert( "Codigo Nao Encontrado..." )
         Endif
      Endif  
   EndDo

   DbCloseAll()

   RETURN NIL
//------------------------------------------------------------------------------
Favor testar e me dar um retorno.
[]´s
Alexandre Santos (AlxSts)
mraakkari
Usuário Nível 1
Usuário Nível 1
Mensagens: 8
Registrado em: 17 Mar 2011 18:48
Localização: sao paulo

Re: Ajuda Migracao.

Mensagem por mraakkari »

Alexandre muito obrigado pela ajuda, o codigo estava quase perfeito, tive que alterar algumas coisinhas.

Agora to sofrendo na compilação, pois compilei com o HMG IDE, ele cria o exe com um icone do windows, tentei executá-lo em ms-dos 6.22 e nao rodou, pois requer SO windows. Segui os passos para compilaçao em modo console com o HMG tambem nao deu.

obrigado e mais uma vez agradeço pela colaboração.
mraakkari
Usuário Nível 1
Usuário Nível 1
Mensagens: 8
Registrado em: 17 Mar 2011 18:48
Localização: sao paulo

Re: Ajuda Migracao.

Mensagem por mraakkari »

esqueci


quero roda-lo em modo console no linux.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Ajuda Migracao

Mensagem por Pablo César »

mraakkari escreveu:O que eu quero é justamento o contrário, que meu prg seja executado em LINUX
Talvez você não tenha notado a minha citação:
teremos a HMG versão 4 que é baseado na tecnologia QT, multiplataforma e mais voltada a OPP (ja que você é programador Java)
Veja este artigo: http://hmglights.wordpress.com/2010/09/ ... -ao-final/

Como eu disse, se tiver interesse...

Apenas quis apresentar o HMG 3 que é de fácil digestão e aquele comentário citado refere-se a versão 3 não 4. Você anunciou a vontade de converter para Harbour e a utilização da IDE HMG é um caminho. Agora se você escolherá utilizar a versão 4 ou 3 ao início é apenas mais uma opção.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: Ajuda Migracao.

Mensagem por alxsts »

Olá!

As alterações são normais pois eu não tinha todos os detalhes.

Veja se consegue compilar com o xHarbour no Linux com o script que segue:

Código: Selecionar todos

#GCC
!ifndef CC_DIR
CC_DIR = $(MAKE_DIR)
!endif

!ifndef HB_DIR
HB_DIR = $(HARBOUR_DIR)
!endif
 
RECURSE= NO 
 
SHELL = 
COMPRESS = NO
EXTERNALLIB = NO
XFWH = NO
FILESTOADD =  5
WARNINGLEVEL =  0
USERDEFINE = 
USERINCLUDE = 
USERLIBS = 
EDITOR = mcedit
GUI = NO
MT = NO
PROJECT = tirateima.xhb $(PR) 
OBJFILES = $(OB) 
PRGFILES = $(PS)
OBJCFILES = $(OBC) 
CFILES = $(CF)
RESFILES = 
RESDEPEN = 
TOPMODULE = 
LIBFILES = -Wl,--start-group -lvm -lrtl -lpcrepos -lgtcrs -llang -lrdd -lrtl -lvm -lmacro -lpp -ldbfntx -ldbfcdx -ldbffpt -lhsx -lhbsix -lcommon -lcodepage -lgtnul -Wl,--end-group -lncurses -lslang -lgpm  -lpthread -lm
EXTLIBFILES =
DEFFILE = 
HARBOURFLAGS =  -w0
CFLAG1 = $(SHELL) -I/usr/include/xharbour -c -Wall 
CFLAG2 = -L$(HB_LIB_INSTALL)
RFLAGS = 
LFLAGS =  $(CFLAG2) 
IFLAGS = 
LINKER = gcc
 
ALLOBJ = $(OBJFILES)  $(OBJCFILES)
ALLRES = $(RESDEPEN) 
ALLLIB = $(USERLIBS) $(LIBFILES) 
.autodepend
 
#DEPENDS
 
#COMMANDS
.cpp.o:
gcc $(CFLAG1) $(CFLAG2) -o$* $**
 
.c.o:
gcc -I/usr/include/xharbour $(CFLAG1) $(CFLAG2) -I. -g -o$* $**
 
.prg.o:
harbour -D__EXPORT__  -n  -go -I/usr/include/xharbour $(HARBOURFLAGS) -I.  -o$* $**
 
#BUILD
 
$(PROJECT): $(CFILES) $(OBJFILES) $(RESDEPEN) $(DEFFILE)
    $(LINKER) @&&!
    $(PROJECT) 
    $(ALLOBJ)  
    $(LFLAGS)  
    $(ALLLIB)  
!
No prompt de comando do Linux digite hbmake tirateima.bc. Para executar, digite tirateima.xhb.
[]´s
Alexandre Santos (AlxSts)
mraakkari
Usuário Nível 1
Usuário Nível 1
Mensagens: 8
Registrado em: 17 Mar 2011 18:48
Localização: sao paulo

Re: Ajuda Migracao.

Mensagem por mraakkari »

Alexandre,

antes um probleminha:

voce esta criando um cdx : INDEX ON prodbarr TAG codbarra TO stkmaste
eu gostaria de usar um ja criado, no clipper eu usava SET INDEX, tentei e nao deu certo, voce pode me ajudar?

Quanto ao linux, so vou poder testar na segunda-feira, pois não o tenho instalado em casa. Alias nem o harbour no linux la tem. Quanto a isso vou procurar como instalar.

mais uma vez, obrigado...
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: Ajuda Migracao.

Mensagem por alxsts »

Olá!

Quando você usa DBFCDX, pode configurar a abertura automática dos índices quando abre a tabela de dados. Pode ainda determinar a ordem ativa. Foi o que fiz no fonte que postei:

Código: Selecionar todos

   SET AUTOPEN ON 
   SET AUTORDER TO 1 
Quando você abre a tabela, o índice 1 já vem aberto. No caso só tem um índice mas, poderia ser qualquer um que exista.
[]´s
Alexandre Santos (AlxSts)
mraakkari
Usuário Nível 1
Usuário Nível 1
Mensagens: 8
Registrado em: 17 Mar 2011 18:48
Localização: sao paulo

Re: Ajuda Migracao.

Mensagem por mraakkari »

entendi essa parte.

mas no meu diretorio existem varios arquivos cdx correspondentes a outras tabelas, como faço para abrir somente o cdx que eu quero, tentei de varias formas e nada.

depois dessa linha: USE itens SHARED NEW
quero abrir um cdx ja existente, tentei usar esse comando e nao deu certo: set index to arquivo.cdx
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: Ajuda Migracao.

Mensagem por alxsts »

Olá!

O Arquivo CDX tem que ter o mesmo nome da tabela principal. Entendeu?
Dentro desta "bolsa de ordens", que é o CDX, você cria várias ordens (tags), cada uma com um nome.
Quando você usa DBFCDX e AUTOPEN está ativo, o comando USE procura um CDX com o mesmo nome da tabela que você etá abrindo e o abre. Não há necessidade de abrir outro CDX.

Você disse antes que o arquivo só tinha uma ordem. Por que está querendo abrir outro CDX?
Se precisar de outra ordem, crie uma nova TAG no arquivo CDX que já existe. Por exemplo:

Código: Selecionar todos

INDEX ON proddescr TAG descricao TO stkmaste

Segue uma versão melhorada do programa. Retirei o Alert(), que requer a digitação de algo antes de prosseguir, e troquei por uma mensagem temporizada. Afinal, é um terminal de consulta onde o usuário não terá um teclado à disposição.

Código: Selecionar todos

#include "box.ch"
#include "inkey.ch"
#include "setcurs.ch"
   
REQUEST DBFCDX

FUNCTION Main()

   LOCAL cCodBarra, nCod, cScreen, GetList := {}

   SetColor( "N/W,B+/W*" )

   RddSetDefault( "DBFCDX" )
   
   SET SCOREBOARD OFF
   SET OPTIMIZE ON
   
   SET AUTOPEN ON
   SET AUTORDER TO 1
   SET DELETED ON

   // Criei e populei uma tabela, para efeito de testes - favor retirar depois...
   If .Not. File( "stkmaste.Dbf" )
      DbCreate( "stkmaste", { { "prodcod",   "N",  6, 0 }, ;
                              { "proddescr", "C", 50, 0 }, ;
                              { "prodbarr",  "C", 14, 0 }, ;
                              { "prodpreco", "N",  9, 2 }  ;
                            } ;
              )  

      USE stkmaste EXCLUSIVE NEW

      For nCod := 1 To 100
         stkmaste->( DbAppend() )
         stkmaste->prodcod   := nCod
         stkmaste->proddescr := "Produto " + Str( nCod,,,.T. )
         stkmaste->prodbarr  := PadL( nCod, 14, "0" ) 
         stkmaste->prodpreco := HB_Random( 1, 999999 ) / 1000
      Next
      stkmaste->( DbCloseArea() ) 
   Endif
   //--------------------

   USE stkmaste SHARED NEW

   If .Not. File( "stkmaste" + IndexExt() )
      INDEX ON prodbarr TAG codbarra TO stkmaste
   Endif

   DispBox( 0, 0, 5, 79, B_DOUBLE + " ", "W+/W" )

   @ 03,1 Say PadC( "TERMINAL DE CONSULTAS", 78 ) Color "B+/W"

   While LastKey() != K_ESC
      DispBox( 6, 0,24,79, B_DOUBLE + " ", "W+/W" )
      cCodBarra := Space(14)

      SetCursor( SC_NORMAL )

      @ 12,24 Say "Codigo de Barras" ;
              Get cCodBarra ;
             Pict "99999999999999"

      READ

      SetCursor( SC_NONE )

      If LastKey() != K_ESC
         If stkmaste->( DbSeek( cCodBarra ) )
            @ 12,24 say "Descricao: " + Left( stkmaste->proddescr, 40 ) Color "B+/W"
            @ 14,24 say "Marca    : " + "[falta campo no cadastro]" Color "B+/W" 
            @ 16,24 say "Preco R$ : " + Transform( stkmaste->prodpreco, "@E 999,999.99" ) Color "B+/W"
            Inkey(3)
         Else

            cScreen := SaveScreen( 12, 24, 16, 54 )
            DispBox( 12, 24, 16, 54, B_DOUBLE + " ", "N/GR*" )  
            @ 14, 26 Say "Produto nao encontrado..." Color "N/GR*"
            Inkey(3)
            RestScreen( 12, 24, 16, 54, cScreen ) 
         Endif
      Endif  
   EndDo

   DbCloseAll()

   RETURN NIL
//------------------------------------------------------------------------------
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 376
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC

Re: Ajuda Migracao.

Mensagem por Alexandre Silva »

Vi bastante material aqui..
Eu só quero usar o Harbour console..
Instalei um aplicativo que criou as pastas
hmg e hmg4.0 com todas aquelas subpastas bin lib etc
Tb instalai BCC55 (complilador C)
Tb baixei o Hbmake
Tudo nos path certinho

Chego até a fazer o makefile.lnk
mas nao consigo linkar e gerar executavel
quero trabalhar tudo com comandos do Prompt do msdos(CMD)

Como seria a sequencia para fazer o classico Oi Mundo ??

oi.prg
function main()
cls
@ 10,10 say 'Oi Mundo..'
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
Responder