Como usar & (Macro) no Harbou 3.4?

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

Moderador: Moderadores

Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Como usar & (Macro) no Harbou 3.4?

Mensagem por clodoaldomonteiro »

Boas,

Estou convertendo meus fontes de xHarbour 1.00 para Harbour 3.4 e vi que este interpreta de uma forma diferente o uso de & (Macro).

Exemplo:

Código: Selecionar todos

      FOR i=1 TO FCOU()
         msg=FIEL(i)
          M->&msg = IF((fgrep .OR. reg_cop!=NIL).AND.!EMPT(rep[1]), rep[i], &msg.)
      NEXT

      /*
      inicializa campos de relacionamentos do com os campos do arquivo
      superior (pai)
      */
      FOR i=1 TO LEN(sistema[op_sis,O_CPRELA])
         msg=FIEL(VAL(SUBS(sistema[op_sis,O_ORDEM,1],i*3-2,3)))
          M->&msg. = &(sistema[op_sis,O_CPRELA,i])
      NEXT
Os comandos com & devem ser mudados para: M->&(msg), e pergunto o porque disso, se existe maneira de contornar?

Outra coisa, é que nas Framework que usava, tem muita comando com um "." (ponto) no final, tipo: "&msg.", que também está causando erro de syntax no Harbour, e pra falar a verdade nem sei para que serve esse Ponto no final.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Como usar & (Macro) no Harbou 3.4?

Mensagem por JoséQuintas »

O ponto era uma coisa do tempo do clipper, porque as vezes a macro pegava a continuação que não era pra pegar.
A indicação de memória ou campo faz parte da variável, então provavelmente colocar dentro da macro.

Código: Selecionar todos

&( "m->" + variável )
&( "field->" + variável )
&( "cliente->" + variável )
e se valer igual arquivo, tentar isto:

Código: Selecionar todos

m->( &( variável ) )
field->( &( variável ) )
cliente->( &( variável ) )
Nada diferente do que fazemos com outras coisas:

Código: Selecionar todos

cliente->( RecNo() )
cliente->( LastRec() )
cliente->( Eof() )
cliente->( dbSkip() )
Mas na prática eu evito macro ao máximo.
Prefiro digitar campo a campo do que FOR/NEXT.
É que se eu quiser procurar aonde mexe com um campo nota->ValorIcms, basta procurar nos fontes, e com macro é impossível.

Macro é mais lenta do que o campo direto, mas na maioria dos casos essa diferença nem dá pra perceber.
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/
Responder