Página 3 de 3

Sintaxe...

Enviado: 22 Set 2004 12:30
por gransoft
ARAGUARI-MG, 22 de setembro de 2004.

Prezado Marcos,

Marquei com "***":

Código: Selecionar todos

*** 
*        VCODC=0; VNOM=SPACE(3 
         VCODC=0; VNOM=SPACE(3) 
*** 

/*
         @20,13 SAY "Nome Vazio e [ENTER], Consulta por C¢digo"@18,14 GET VNOM PICTURE "@!" 
*/

*** 
            @20,13 SAY "Nome Vazio e [ENTER], Consulta por C¢digo" 
            @18,14 GET VNOM PICTURE "@!" 
*** 
Sugestão - acesse:
https://pctoledo.org/forum/viewtopic.php?t=703

e baixe o "modelo.zip", conforme o tópico.

Trabalho com o TBrowse, e o exemplo em "CADEND.PRG" pode ser útil.

Atenciosamente,
Janis Peters Grants.

http://www.gransoft.com.br
gransoft@zipmail.com.br

Meu código.

Enviado: 22 Set 2004 12:43
por Marcos
Janis o meu código está assim:

FUNCTION TESTE
PARAMETERS st
lk=LASTKEY()
DO WHILE .T.
DO CASE
CASE lk=-4
telaTes:= savenv(15,10,22,72)
Win(15, 10, 21, 70, "Procurar")
SETCOLOR( "N*/W,N+*/W+*" )
VCODC=0
VNOM=SPACE(30)
CLEAR GETS
SET CURSOR ON
DO WHILE .T.
@17,12 to 19,68
@18,55 SAY "³"
@17,13 SAY " Nome "
@17,56 SAY " C¢digo "
@20,13 SAY "Nome Vazio e [ENTER], Consulta por C¢digo" COLOR "R+*/W+*"
@18,14 GET VNOM PICTURE "@!"
READ
IF LASTKEY()=27;EXIT;ENDIF
IF EMPTY(VNOM)
@18,57 GET VCODC PICTURE "999999"
READ
IF LASTKEY()=27;EXIT;ENDIF
IF EMPTY(VCODC);LOOP;ENDIF
dbsetorder(1)
SET SOFTSEEK ON
SEEK VCODC
SET SOFTSEEK OFF
IF .NOT. FOUND()
ENDIF
EXIT
ENDIF
dbsetorder(2)
SET SOFTSEEK ON
SEEK TRIM(VNOM)
SET SOFTSEEK OFF
IF .NOT. FOUND()
ENDIF
EXIT
ENDDO
rstenv(telaTes)
SET CURSOR OFF
EXIT
CASE st=0
st=1
EXIT
CASE st=1
TONE(2500,1)
SET CURSOR OFF
st=2
EXIT
CASE st=2
TONE(2500,1)
SET CURSOR OFF
st=2
EXIT
CASE st=3
aJan := Nbox( 12, 20, 14, 59, "w+/r" )
@13,21 SAY PADC( "Arquivo Vazio", 38 ) Color "w+/r"
INKEY(02)
KEYBOARD(CHR(27))
EXIT
CASE st=4
IF lk=27 .OR. lk=-9 .OR. lk=13 .OR. lk= -8 .OR. lk= 22
st=0
ENDIF
EXIT
CASE lk=27
KEYBOARD(CHR(27))
st=0
EXIT
ENDCASE
ENDDO
RETURN st

Re: Clipper x xHarbour (BLINKER, Make, HBmake)

Enviado: 22 Set 2004 14:33
por Maligno
Solicito seu auxílio, conforme sua disponibilidade, para tentarmos padronizar um processo de compilação para CLIPPER 5.2E e xHarbour 0.99, SEM ter que alterar TODOS os fontes.
Não entendi muito bem de que tipo de padronização você está querendo criar. Poderia explicar melhor, por favor?
Ok. Vou acessar esse link hoje à noite e verificar. Se der tempo, respondo na próxima madrugada. Senão, certamente, no dia seguinte.

[]'s
Maligno
http://www.buzinello.com/prg

Re: Código.

Enviado: 22 Set 2004 15:04
por Maligno
Marcos escreveu:A linha do erro só contém este codigo.

(...)
enddo
Msgbox1("Estado nÆo Cadastrado!")
Return(.f.)
********************************************
FUNCTION TESTE // Esta é a linha 1244 que está dando o erro.
Marcos,
Copiei seu código para meu editor, alinhei-o e compilei-o. O Clipper não acusou erro algum. Mas o erro não está de fato na linha 1244, como o Clipper informa. Às vezes o erro, por ter origem numa estrutura, está num determinado número de linha, mas o Clipper só dá conta dele quando a estrutura deve ser "fechada". E isso pode acontecer dezenas de linhas adiante. E muitas vezes, pode até passar para uma função seguinte, como é o que eu acho que aconteceu.
Verifique as estruturas IF/ENDIF, DO/ENDDO e CASE/ENDCASE anteriores à linha 1244. Mas não poste o arquivo todo aqui, por favor. É muito grande. :-)
Agora, se não conseguir encontrar o erro, e não tiver problema para você, me envie o arquivo todo, sem mexer nada, para que eu possa analisá-lo pra você.

[]'s
Maligno
http://www.buzinello.com/prg

Padronizar compilação Clipper x xHarbour

Enviado: 22 Set 2004 15:07
por gransoft
ARAGUARI-MG, 22 de setembro de 2004.

Prezado Malígno,

Muito obrigado pela atenção.

No clipper é simples elaborar um *.bat e um *.lnk para a compilação, sem o utilitário RMAKE, conforme exemplos no "modelo.zip".

Já no xHarbour, compilar c/HARBOUR e linkar c/BLD_B32 não segue o mesmo critério, necessitando (?) do HBMAKE ou outra forma, conforme você mencionou em outro POST.

Por gentileza, ao analisar "COMPILA2.BAT" e "CORBLINK.LNK", verifique como é simples e funcional o encadeamento dos *.prg's.

Minha solicitação é a orientação para gerar um script para xHarbour tão simples quanto, sem a preocupação de "recompilar somente o necessário".

Conforme citação anterior, o problema ocorre na fragmentação para diminuir o tamanho dos *.prg's em Clipper, e onde o uso de sintaxes como

DO ROTINA
Rotina()
#include "rotina.prg"

devem ser mais criteriosas para xHarbour.

Eu não estou encontrando outra forma para viabilizar o mesmo fonte para CLIPPER e xHARBOUR senão incluir explicitamente em cada *.prg os comandos

FUNCTION Funcao()
RETURN NIL

A padronização a que me referi seria esta.

Atenciosamente,
Janis Peters Grants.

http://www.gransoft.com.br
gransoft@zipmail.com.br[/url]

Enviado: 22 Set 2004 19:00
por Maligno
No clipper é simples elaborar um *.bat e um *.lnk para a compilação, sem o utilitário RMAKE, conforme exemplos no "modelo.zip".
Realmente não acho uma boa idéia dispensar uma ferramenta como o RMake ou Make.
Já no xHarbour, compilar c/HARBOUR e linkar c/BLD_B32 não segue o mesmo critério, necessitando (?) do HBMAKE ou outra forma, conforme você mencionou em outro POST.
Mas se for para dispensar o Make no Clipper, pode-se igualmente dispensá-lo também no caso do XHarbour. Mas também não é uma boa idéia.
Por gentileza, ao analisar "COMPILA2.BAT" e "CORBLINK.LNK", verifique como é simples e funcional o encadeamento dos *.prg's.
Como eu disse, verei seu ZIP hoje à noite.
Minha solicitação é a orientação para gerar um script para xHarbour tão simples quanto, sem a preocupação de "recompilar somente o necessário".
Da forma como eu entendo sua colocação, você quer apenas usar batch para compilar, sem a preocupação de "recompilar somente o necessário". Como eu disse: não acho isso uma boa idéia, principalmente para quem tem, como eu, sistemas com mais de 200 fontes. Compilar tudo por causa da alteração ocorrida em apenas um fonte? Realmente essa idéia não é nada atraente. O Make é uma ferramenta excelente e, se a dominarmos, com ela só temos a ganhar. A minha reclamação anterior foi com relação ao script gerado pelo HBMake, que é horrível. Fiz na unha e consegui um script plenamente funcional, com um terço do tamanho, e bem mais inteligível. Pode-se fazer, e até lhe dou a idéia, um novo HBMake, mais enxuto, que consiga gerar scripts melhores. Ou pelo menos mais direcionados.
Agora, se eu entendi errado sua solicitação, por favor, me explique melhor.
Eu não estou encontrando outra forma para viabilizar o mesmo fonte para CLIPPER e xHARBOUR senão incluir explicitamente em cada *.prg os comandos

FUNCTION Funcao()
RETURN NIL

A padronização a que me referi seria esta.
Agora eu entendi. Mas veja bem, Janis. Seu problema se divide em dois: primeiro, pelo que entendi, é o FUNCTION na primeira linha de cada fonte; e segundo: a troca da forma DO PROG WITH <X1>,... pela forma PROG(<X1>,...).
O primeiro problema é fácil de resolver e nem consumirá muito tempo, mesmo que se trate de um grande volume de fontes. Basta ir à primeira linha de cada fonte e inserir um simples nome. Dá trabalho, mas o esforço compensa. Além do que, convenhamos, a declaração FUNCTIONé a forma mais correta de iniciar um bloco de código.
O segundo problema não deixa de ser fácil de resolver também, principalmente se você usar um editor de texto como o UltraEdit, por exemplo. Você pode pesquisar todas as ocorrências de uma determinada string. Encontrando, você só precisará trocá-las pela forma correta. Nota: o próprio NG do Clipper não recomenda o uso do comando DO.
Ainda assim, e até para ficar mais fácil ainda, você pode manter esses comandos DO e criar um comando simples de tradução, e trocar pelo #command que já existe no STD.CH do Clipper. Seria algo como:

Código: Selecionar todos

#command DO <proc> [ WITH <list,...> ] => <proc>([<list>])
Não sei se vai funcionar. Como acabei de escrevê-lo pode ter algum erro de sintaxe. Por isso, teste antes num programa qualquer. Se estiver certo, você verá no PPO substituições do tipo:

Código: Selecionar todos

Comando original              Substituído por
-------------------------     -------------------------
DO MEUPROG                    MEUPROG()
DO MEUPROG WITH .F.           MEUPROG(.F.)
DO MEUPROG WITH 1,2,"TST"     MEUPROG(1,2,"TST")
Isso evita que você tenha que alterar todos os seus fontes. O Clipper não tem esse #command. Mas o XHarbour deveria ter. Não sei. Tem? Se não tiver, inclua-o no header que substitui o STD.CH, seja lá que nome tiver.

Particularmente não gosto desta solução, até porquê, já não uso DO há pelo menos uns 12 anos. Mas essa substituição vai resolver seu problema com um mínimo de esforço. Se lhe servir, ótimo.

[]'s
Maligno
http://www.buzinello.com/prg

HBmake, Rmake, Make

Enviado: 23 Set 2004 08:00
por gransoft
Maligno escreveu:Fiz na unha e consegui um script plenamente funcional, com um terço do tamanho, e bem mais inteligível.
ARAGUARI-MG, 23 de setembro de 2004.

Prezado Malígno,

Novamente, muito obrigado pela atenção.

Solicito então, um exemplo deste script. Imagino poder usá-lo com pequenas adaptações para compilar/linkar os mesmos fontes em Clipper e xHarbour.

Quanto à sintaxe e ao uso do comando "DO", revisarei todos os fontes, substituindo-o pelo nome da respectiva função.

Atenciosamente,
Janis Peters Grants.

http://www.gransoft.com.br
gransoft@zipmail.com.br

Códigos Estranhos.

Enviado: 23 Set 2004 09:59
por Marcos
Maligno descobri o erro daquele PRG meu, troquei o nome da Função e deu certo.
Sinistro não.
Marcos

Chaves para a compilação...

Enviado: 23 Set 2004 12:51
por gransoft
ARAGUARI-MG, 22 de setembro de 2004.

Prezado Marcos,

Dentro de um arquivo *.prg somente poderá haver uma função com nome semelhante ao do arquivo se você compilar assim:

clipper teste /n

* TESTE.PRG

FUNCTION Teste()
(***)
RETURN NIL

caso contrário, irá gerar a mensagem de erro "Redefinição de Function ou Procedure".

Como você renomeou a função, resolveu o problema.

Atenciosamente,
Janis Peters Grants.

http//www.gransoft.com.br
gransoft@zipmail.com.br

ERRO NO MAKE

Enviado: 23 Ago 2005 17:27
por toocsys
tambem estou tendo o mesmo problema :(

MEU MAKE
erp.exe: erp.obj \
ftatti02.obj

cls
blinker @erp2.lnk
.prg.obj:
cls
echo ------------------------------
echo Clipper $& $(OPT) -d$(COMP)
Clipper $& $(OPT) -d$(COMP)



MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
Error erp.mak 4: Command syntax error
Error erp.mak 5: Command syntax error
Error erp.mak 7: Command syntax error
Error erp.mak 8: Command syntax error
Error erp.mak 9: Command syntax error
Error erp.mak 10: Command syntax error
*** 6 errors during make ***
ECHO est  ativado.
*****************************************************

Enviado: 23 Ago 2005 17:51
por Marcos
Qual problema vc está tendo?
Marcos.

Enviado: 23 Ago 2005 20:55
por culik
Maligno

Me diga onde que o hbmake gera um script dificil de manter.
O .bc gerado dele teve como base inicial o .mak Gerado pelo borland cbuilder 1.0

Alem do mais qualquer alteracao no makefile pode ser feito usando o proprio hbmake com a opcao -ex e escolhendo a opcao de editar o makefile gerado

[]s
Luiz

Enviado: 24 Ago 2005 09:29
por Sandro R R Freire
Amigos, o hbmake, não é complexo, nem uma porcaria, pelo contrario, tem mais pontos a favor.
O minimo que se espera de um "Clipeiro" é saber montar um makefile, com o uso do rmake, mas o hbmake, faz isso automaticamente, e bem intuitivo.
Agora, o programador que se confunde com makefiles, que não sabe diferenças de constantes e variáveis, sinceramente acho melhor pendurar a chuteira.