Problemas com #include

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

Moderador: Moderadores

tiagotarifa
Usuário Nível 1
Usuário Nível 1
Mensagens: 2
Registrado em: 01 Jan 2015 10:08
Localização: Tatui

Problemas com #include

Mensagem 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!
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Problemas com #include

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
tiagotarifa
Usuário Nível 1
Usuário Nível 1
Mensagens: 2
Registrado em: 01 Jan 2015 10:08
Localização: Tatui

Problemas com #include

Mensagem 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.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Problemas com #include

Mensagem 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.
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