Página 1 de 1

Problemas com #include

Enviado: 01 Jan 2015 11:05
por tiagotarifa
Ola pessoal.
Acredito que minha duvida é bem primaria mas não encontro a solução em lugar algum.
Sou iniciante em clipper e estou estudando clipper/xHarbour. Estudando a parte "grafica" fazendo menus com o @...PROMPT, molduras com o @...BOX, e está sendo bem legal.
O problema é que estou querendo dividir o programa em .PRGs, mas na hora de colocar o #include dá problema. Se coloco o codigo todos juntos no mesmo .PRG funciona perfeitamente, se tento fazer pelo #include não. Por exemplo:

color.prg

Código: Selecionar todos

PROCEDURE corDaTela(corTela)
	IF corTela=1
    	 SET COLOR TO gr+/b,r+/n
	ELSEIF corTela=2
    	 SET COLOR TO b/gr+,n/r+
	ELSE
	 ? "Deu erro!"
	ENDIF
RETURN 


menu.prg

Código: Selecionar todos

#include "color.prg"
FUNCTION MAIN()
        LOCAL nChoice:=1
        SET WRAP ON
        SET MESSAGE TO 23 CENTER
        CLEAR SCREEN
        corDaTela(2)
        @ 03,08 PROMPT "TESTE1" MESSAGE "Fazendo testes..."
        @ 04,08 PROMPT "Teste2" MESSAGE "outra vez testando"
        MENU TO nChoice
RETURN NIL
Ele compila certinho mas na hora de executar o "menu.exe" aparece a mensagem "Deu erro" do cor.prg. Se copio o conteúdo do cor.prg e colo abaixo do RETURN NIL da FUNCTION MAIN() dentro do menu.prg o programa funciona. A impressão que tenho é que na hora de compilar o xHarbour acha que o cor.prg é o principal e não o menu.prg.

Eu tenho um livro (na verdade 3 deles) do Antonio Geral da Rocha Vidal, Clipper 5.0 Linguagem Comandos, e nele diz que para compilar o arquivo que contenha o "Procedimento Principal" é necessário colocar o /N como parâmetro no compilador.
Eu pesquisei a respeito no xHarbour e não encontrei nada. No Harbour eu encontrei um texto explicando que eu posso definir o nome da function/procedure main através do -main=<nomedamain>, mas por padrão ele pega como Main().

Fiz testes colocando a function/procedure main como:
FUNCTION MAIN()
FUNCTION Main()
FUNCTION MAIN
FUNCTION Main
com a PROCEDURE fiz o mesmo teste.

Desculpem estar postando no tópico Harbour, sei que hoje ele superior ao xHarbour e que o correto era estudar por ele agora, mas infelizmente o xHarbour é uma premissa.

Alguém tem uma dica, ideia, algum texto explicativo que mostre onde estou errando?

Obs.: Meu conhecimento é quase nulo em relação a parte de compilação do xHarbour. Eu uso 2 arquivos .bat que um colega passou. Um "seta" as variáveis e outro compila o programa.

Desde já agradeço.

Feliz ano novo!

Problemas com #include

Enviado: 01 Jan 2015 11:25
por Itamar M. Lins Jr.
O include usamos para outros tipos de arquivos não usamos para PRG
Tire a linha do INCLUDE.
No seu caso tem que LINKAR (LIGAR) os dois PRG´s, estude a parte de como ligar dois ou mais arquivos PRG
Com o harbour apenas colocamos no arquivo HBP (projeto)
ou c:\>hbmk2 arquivo1.prg arquivo2.prg
com hbmake talvez seja aquivo1.prg+arquivo2.prg não sei, quem te passou o BAT pode ensinar melhor, por isso é bom usar ferramentas universais.
Desculpem estar postando no tópico Harbour, sei que hoje ele superior ao xHarbour e que o correto era estudar por ele agora, mas infelizmente o xHarbour é uma premissa.
Aqui é para postar as dúvidas, erros, etc dos dois mesmo e essa superioridade talvez para alguns usuários seja relativa.


Saudações,
Itamar M. Lins Jr.

Problemas com #include

Enviado: 02 Jan 2015 12:54
por tiagotarifa
Obrigado pela resposta Itamar.
Eu usei o include porque nesse livro que mensionei tem um exercício que mostra fazendo o include de um arquivo.prg. Mas não sei o que pode ser esse arquivo, porque esse arquivo era um dos programas que vinham no disquete de 5" 1/4 que acompanhava o livro. Mas depois que você deu a dica eu pesquisei e vi que realmente não é assim, é para arquivos de cabeçalho (acho que é isso).

Falei que hoje o Harbour é melhor porque o xHarbour parece estar abandonado, não acho documentação e quando acho está com link quebrado. O Harbour parece estar muito melhor documentado e ativo que o xHarbour. E no meu caso é um diferencial.
Com o harbour apenas colocamos no arquivo HBP (projeto)
ou c:\>hbmk2 arquivo1.prg arquivo2.prg
com hbmake talvez seja aquivo1.prg+arquivo2.prg não sei, quem te passou o BAT pode ensinar melhor, por isso é bom usar ferramentas universais.
Legal sua dica!
Pelo .bat eu faço pelo Windows, mas como meu amigo não sabe ao certo como o .bat funciona eu fiz uma instalação do xHarbour no Gentoo Linux e fiz seguinte teste com xhbmk arquivo1.prg arquivo2.prg e deu certo. Muito provavelmente o .bat não está configurado para fazer dessa forma.
...estude a parte de como ligar dois ou mais arquivos PRG
Itamar, você tem ou sabe algum link de alguma documentação, apostila, livro que explique como funciona? Eu era de suporte e estou migrando para a area de desenvolvimento e gostaria de aprender essa parte basica da programação, mas não faço ideia quais os termos técnicos para procurar.

Problemas com #include

Enviado: 02 Jan 2015 13:07
por JoséQuintas
#include nada mais é do que "incluir" todo texto do outro arquivo dentro do atual.
Se é apenas pra testes, uma opção é mover o #include para o final do PRG e não no início, lembrando que isso não é o normal.

Mas vamos lá:

No início disse "estou estudando clipper/harbour".

Está testando no Clipper ou no Harbour?

Se for no Clipper precisa adicionar -n na compilação.

Sem o -n, o primeiro programa da lista será o inicial. (default no Clipper)
Com o -n, aí sim será usado Main() como inicial. (default no Harbour)

(Com o seu #include, o outro fonte passou a ser o primeiro programa).

Além disso, há a opção de compilar os fontes em separado e depois linqueditar tudo, sem precisar do include.

clipper menu -m -n
clipper color -m -n
rtlink fi menu,color

ou no harbour

hbmk2 menu.prg color.prg -m

Então ficou assim, opções:

1) Mover o #include para o final (opção válida pra teste)
2) Compilar usando -n se for Clipper (opção comum)
3) Compilar um de cada vez e juntar (opção comum pra vários PRGs)

Faltou mencionar:
o -m é obrigatório quando se compila separado.
Sem o -m, ao compilar um fonte, tudo que for chamado é acrescentado automaticamente, como se fosse um #include.
Senão poderia passar a ter erro de módulos duplicados.