Como criar LIB de funções usando a IDE HMG 3

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
jartos
Usuário Nível 1
Usuário Nível 1
Mensagens: 14
Registrado em: 18 Dez 2014 12:34
Localização: sp-sp

Como criar LIB de funções usando a IDE HMG 3

Mensagem por jartos »

Bom dia aos mestres. Coloquei esta função apenas como exemplo Pablo. apesar de que, lendo os tópicos fiquei encorajado que o harbour seria 100% compatível com o cenário em que meus sistemas foram produzidos em clipper 5.3, independentemente se as funções utilizam interrupções antigas. Estou tentando recompilar em HMG primeiro os sistemas sem fazer alterações, em modo texto, para depois começar a fazer atualizações. Tenho outras funções de lib escritas em "C" e meu objetivo era saber como se coloca funções escritas em "C" na lib, se através dos fontes .c ou de objs. Parece que está difícil.


Sds,
Clipeiro a mais de 30 anos.Ainda chamando Harbour de "Senhor". Meu perfil no linkedin ->https://br.linkedin.com/pub/jarbas-torelli/29/691/ba9
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Como criar LIB de funções usando a IDE HMG 3

Mensagem por Claudio Soto »

jartos escreveu:Boa tarde mestres, preciso de vossa ajuda para colocar funções criadas em "C" em minha lib .a

Como devo proceder?
tenho os .obj e os fontes em "C"

EX:
#include "extend.h"
#include "bios.h"

CLIPPER l_isprn(void);

CLIPPER l_isprn()
{
unsigned dados;
_retl(_bios_printer(_PRINTER_STATUS,_parni(1)-1,dados)==0x90);
}
En forma muy general se hace así.

Código: Selecionar todos

Function Main

   ? Mi_Suma (9, 24)   // retorna 33 

Return Nil 


#pragma BEGINDUMP    // Comienzo del código en C

#include "hbapi.h"

HB_FUNC ( MI_SUMA ) // atención el nombre de la función en C debe estar siempre en mayúsculas
{
   int Num1 = hb_parni (1);
   int Num2 = hb_parni (2);

   hb_retni ( Num1 + Num2 );
}

#pragma ENDDUMP    // Fin del código en C
Todo el código, puede ir adentro de un mismo archivo PRG.
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Como criar LIB de funções usando a IDE HMG 3

Mensagem por Claudio Soto »

jartos escreveu:Bom dia aos mestres. Coloquei esta função apenas como exemplo Pablo. apesar de que, lendo os tópicos fiquei encorajado que o harbour seria 100% compatível com o cenário em que meus sistemas foram produzidos em clipper 5.3, independentemente se as funções utilizam interrupções antigas. Estou tentando recompilar em HMG primeiro os sistemas sem fazer alterações, em modo texto, para depois começar a fazer atualizações. Tenho outras funções de lib escritas em "C" e meu objetivo era saber como se coloca funções escritas em "C" na lib, se através dos fontes .c ou de objs. Parece que está difícil.


Sds,
Harbour es 100% compatible con Clipper, pero el uso de código a abajo nivel para acceder al hardware depende del sistema operativo no de Clipper, Harbour o de cualquier otro lenguaje, por ejemplo, en DOS era muy frecuente utilizar las interrupciones de software y de hardware para crear programas residentes en memoria, leer el teclado, crear timers, hacer animaciones gráficas, etc, pero en Windows esto no es posible, para ello hay que utilizar las funciones apropiadas del API.
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar do usuário
jartos
Usuário Nível 1
Usuário Nível 1
Mensagens: 14
Registrado em: 18 Dez 2014 12:34
Localização: sp-sp

Como criar LIB de funções usando a IDE HMG 3

Mensagem por jartos »

Sou agradecido Claudio, pelas suas explicações. Como ficaria essa função que coloquei no exemplo em Harbour? Assim?

Código: Selecionar todos


#pragma BEGINDUMP
#include "hbapi.h"

HB_FUNC L_ISPRN(void);

{
unsigned dados;
_retl(_bios_printer(_PRINTER_STATUS,_parni(1)-1,dados)==0x90);
}

#pragma ENDDUMP

Clipeiro a mais de 30 anos.Ainda chamando Harbour de "Senhor". Meu perfil no linkedin ->https://br.linkedin.com/pub/jarbas-torelli/29/691/ba9
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Como criar LIB de funções usando a IDE HMG 3

Mensagem por Claudio Soto »

jartos escreveu:Sou agradecido Claudio, pelas suas explicações. Como ficaria essa função que coloquei no exemplo em Harbour? Assim?

Código: Selecionar todos


#pragma BEGINDUMP
#include "hbapi.h"

HB_FUNC L_ISPRN(void);

{
unsigned dados;
_retl(_bios_printer(_PRINTER_STATUS,_parni(1)-1,dados)==0x90);
}

#pragma ENDDUMP

La función anterior quedaría así:

Código: Selecionar todos

#pragma BEGINDUMP
#include "hbapi.h"

HB_FUNC ( L_ISPRN )
{
   unsigned dados = 0;
   hb_retl ( _bios_printer (_PRINTER_STATUS, hb_parni(1)-1, dados) == 0x90 );
}
#pragma ENDDUMP
Pero atención, la función _bios_printer() no es soportada por Windows.
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Como criar LIB de funções usando a IDE HMG 3

Mensagem por microvolution »

Olá clippeiros, ou melhor harboueiros rsrrs, bom dia!

Achei esse tópico procurando o contrário de criar uma MINHALIB.a, pois estou na verdade querendo abrir/editar algumas LIBs originais da HMG 3.0.xx; fazer as alterações necessárias e depois recompilá-las.

É possível isso ser feito?
Onde estão os fontes das LIBs da paasta HMG\LIB?

Vlw!
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Como criar LIB de funções usando a IDE HMG 3

Mensagem por Toledo »

Amigo, tanto o Harbour, como a MiniGui e HMG são de código aberto, então você pode alterar e compilar novamente. No caso da MiniGui, os códigos fontes estão na seguinte pasta:

HMG Oficial:
C:\hmg.3.0.35\SOURCE
ou na versão mais recente:
C:\hmg.3.4.0\SOURCE

Para compilar use o arquivo BuildAllLib.bat que está na pasta principal da HMG.

MiniGui Extended:
C:\MiniGUI_2_4_6\SOURCE

Para compilar use o arquivo MakeAllLibs.bat que está na pasta C:\MiniGUI_2_4_6\SOURCE.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Como criar LIB de funções usando a IDE HMG 3

Mensagem por microvolution »

OBRIGADO pela tão rápida resposta.
Então, um exemplo:
O arquivo LIBHMG.A da pasta HMG\LIB é qual ou são quais da pasta HMG\SOURCE que V.Sa. se refere para que possa compilá-lo novamente?
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Como criar LIB de funções usando a IDE HMG 3

Mensagem por Toledo »

Segue abaixo a lista de arquivos que geram a libhmg.a:
source/ErrorSys.prg
source/h_browse.prg
source/h_button.prg
source/h_checkbox.prg
source/h_combo.prg
source/h_controlmisc.prg
source/h_datepicker.prg
source/h_dialogs.prg
source/h_editbox.prg
source/h_error.prg
source/h_font.prg
source/h_frame.prg
source/h_grid.prg
source/h_help.prg
source/h_hotkey.prg
source/h_image.prg
source/h_init.prg
source/h_ipaddress.prg
source/h_label.prg
source/h_listbox.prg
source/h_media.prg
source/h_menu.prg
source/h_monthcal.prg
source/h_msgbox.prg
source/h_progressbar.prg
source/h_radio.prg
source/h_richeditbox.prg
source/h_rptgen.prg
source/h_slider.prg
source/h_spinner.prg
source/h_status.prg
source/h_tab.prg
source/h_textbox.prg
source/h_timer.prg
source/h_tole.prg
source/h_toolbar.prg
source/h_tree.prg
source/h_winapimisc.prg
source/h_windows.prg
source/c_browse.c
source/c_button.c
source/c_checkbox.c
source/c_combo.c
source/c_controlmisc.c
source/c_datepicker.c
source/c_dialogs.c
source/c_editbox.c
source/c_font.c
source/c_frame.c
source/c_grid.c
source/c_help.c
source/c_hotkey.c
source/c_image.c
source/c_ipaddress.c
source/c_label.c
source/c_listbox.c
source/c_media.c
source/c_menu.c
source/c_monthcal.c
source/c_msgbox.c
source/c_progressbar.c
source/c_radio.c
source/c_resource.c
source/c_richeditbox.c
source/c_slider.c
source/c_spinner.c
source/c_status.c
source/c_tab.c
source/c_textbox.c
source/c_timer.c
source/c_tole.c
source/c_toolbar.c
source/c_tree.c
source/c_winapimisc.c
source/c_windows.c
microvolution escreveu:para que possa compilá-lo novamente?
Toledo escreveu:Para compilar use o arquivo BuildAllLib.bat que está na pasta principal da HMG.
Após fazer as suas alterações, para criar a libhmg.a novamente, basta executar o arquivo BuildAllLib.bat

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Como criar LIB de funções usando a IDE HMG 3

Mensagem por microvolution »

legal Toledo...
percebi que os arquivos HMG.HBP e HMG.HBC são os responsáveis pela LIBHMG.

Agora esse arquivo BUILDallLIB.BAT não existe em nenhum lugar da HMG 3.0.35. Ele somente existe na HMG 3.0.46 (são as 2 versões que possuo aqui).

Outra coisa, como o próprio nome já diz tudo 'buildALLlib.bat' irá recompilar todas as LIBS originais da HMG 3.0.46.

Então, como só quero a LIBHMG.A recompilada, criei uma cópia do BUILDALLLIB.BAT, eliminei a maioria de suas linhas, renomeei-o para BUILDLIBHMG.BAT.
As dúvidas são:
1 - o HMG.HBP tá legal (aparentemente no meu pouco conhecimento) e o HMG.HBC parece-me que está se referindo à todas as LIBs;
2 - esse tal BUILDHMGLIB.BAT nos testes que fiz aqui de recompilação funciona na HMG 3.0.46, mas, na 3.0.35 ele não gera a LIBHMG.A.

Seguem os códigos de cada um dos 3 arquivos aqui referidos, para que V.Sa. (Toledo) ou quaisquer dos "ninjas" vejam o que está errado:
BUILDHMG.BAT

Código: Selecionar todos

@echo off
@ECHO RECOMPILANDO A 'LIBHMG.A'
SET HMGPATH=%~dp0
SET PATH=%HMGPATH%\harbour\bin;%HMGPATH%\mingw\bin;%PATH%
hbmk2 hmg.hbp
HMG.HBP

Código: Selecionar todos

-hblib
-inc
-olib/hmg

-Iinclude

-D__HBIDE__

-w0 -es2

#source/ErrorSys.prg
source/h_browse.prg
source/h_button.prg
source/h_checkbox.prg
source/h_combo.prg
source/h_controlmisc.prg
source/h_datepicker.prg
source/h_dialogs.prg
source/h_editbox.prg
source/h_error.prg
source/h_font.prg
source/h_frame.prg
source/h_grid.prg
source/h_help.prg
source/h_hotkey.prg
source/h_image.prg
source/h_init.prg
source/h_ipaddress.prg
source/h_label.prg
source/h_listbox.prg
source/h_media.prg
source/h_menu.prg
source/h_monthcal.prg
source/h_msgbox.prg
source/h_progressbar.prg
source/h_radio.prg
source/h_richeditbox.prg
source/h_rptgen.prg
source/h_slider.prg
source/h_spinner.prg
source/h_status.prg
source/h_tab.prg
source/h_textbox.prg
source/h_timer.prg
source/h_tole.prg
source/h_toolbar.prg
source/h_tree.prg
source/h_winapimisc.prg
source/h_windows.prg
source/c_browse.c
source/c_button.c
source/c_checkbox.c
source/c_combo.c
source/c_controlmisc.c
source/c_datepicker.c
source/c_dialogs.c
source/c_editbox.c
source/c_font.c
source/c_frame.c
source/c_grid.c
source/c_help.c
source/c_hotkey.c
source/c_image.c
source/c_ipaddress.c
source/c_label.c
source/c_listbox.c
source/c_media.c
source/c_menu.c
source/c_monthcal.c
source/c_msgbox.c
source/c_progressbar.c
source/c_radio.c
source/c_resource.c
source/c_richeditbox.c
source/c_slider.c
source/c_spinner.c
source/c_status.c
source/c_tab.c
source/c_textbox.c
source/c_timer.c
source/c_tole.c
source/c_toolbar.c
source/c_tree.c
source/c_winapimisc.c
source/c_windows.c
HMG.HBC

Código: Selecionar todos

# paths

incpaths=/.
incpaths=include
libpaths=lib

# main hmg libs

libs=hmg
libs=crypt
libs=edit
libs=editex
libs=graph
libs=hfcl
libs=ini
libs=report

# system libs

libs=msvfw32
libs=vfw32

# harbour contrib libs

libs=hbct
libs=hbwin
libs=hbmzip
libs=minizip
libs=hbmemio
libs=hbmisc
libs=hbmysql
libs=mysql
libs=hbtip
libs=sqlite3
libs=hbsqlit3
libs=sddodbc
libs=rddsql
libs=sddmy
libs=hbodbc
libs=odbc32
libs=hbhpdf
libs=hbfimage
libs=hbpgsql
libs=hbnetio
libs=xhb
libs=png
libs=libhpdf
libs=hbvpdf

# link compiled resources

sources=${hb_curdir}_temp.o
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Como criar LIB de funções usando a IDE HMG 3

Mensagem por microvolution »

OPA... mais uma informação:

1 - dentro do arquivo HMG.HBP (que copiei da HMG 3.0.46, pois na 3.0.35 também ele não existia), faz referência ao arquivo H_TOLE.PRG que não existe na HMG 3.0.35,somente existe na 3.0.46.

2 - comentei-o assim: #source\h_tole.prg
3 - excluí a pasta .HBMK;
4 - apareceram um montão de mensagens de erro de HB_FUN_XXXXXXXXXX, char *, himl, e outras que subiram na telado CMD.EXE ao executar o arquivo BUILDlibHMG.BAT (que fiz). São muitos anos que não mexo com MSDOS que não me lembro mais como fazer com que (nesse caso do .BAT) a gente possa rolar a tela e ver o que já passou.

Espero que alguém me apresente outra solução, pois explico o que pretendo com essa recompilação da LIBHMG.A:

O arquivo PCTERROR.PRG baixado e que está funcionando perfeitamente do tópico original (SUA TELA ERROSYS TE ASSUSTA?) quero substituí-lo pelo ERRORSYS.PRG da referida lib gráfica.

Pois se eu colocar no meu MAIN.PRG o #INCLUDE 'HMG.CH' o HMG 3.0.xx informa uma duplicidade de ERRORSYS.
Então, quero recompilar a LIBHMG.A sem a ERRORSYS.PRG original ou substituí-la pela PCTERROR.PRG.

Pois percebo que a ERRORSYS.PRG original da lib gráfica HMG.CH (LIBHMG) tem uma aparência de modo gráfico e, fuçando aqui, pude perceber que é possível ter em MODO CONSOLE, rotinas internas do nosso aplicativo funcionalidades ou telas em MODO GRÁFICO.
Vejam um exemplo no seguinte tópico:
https://pctoledo.org/forum/viewto ... 717#p96717

Bom, espero que tenham entendido minhas tentativas de melhoria da aparência do meu aplicativo que está migrado em modo console.

rsrs...
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Como criar LIB de funções usando a IDE HMG 3

Mensagem por Toledo »

Amigo, meu primeiro conselho é que você faça uma cópia total desta sua pasta da HMG 3.0.35, por medida de segurança, caso ocorra algum problema na compilação da lib e também para preservar os códigos fontes originais da HMG. Assim, se as alterações que você fizer no código da HMG não derem certos, os arquivos originais estarão salvos.

Outro detalhe importante, sempre que você for instalar uma versão da HMG, de preferência, procure fazer a instalação na pasta default, que geralmente é direto na unidade raiz e na pasta HMG, por exemplo: C:\hmg.3.0.35 ou C:\hmg.3.0.46, etc.

ATENÇÃO: então os passos seguintes é presumindo que a sua HMG esteja instalada na pasta C:\hmg.3.0.35
microvolution escreveu:percebi que os arquivos HMG.HBP e HMG.HBC são os responsáveis pela LIBHMG.
Na versão 3.0.35 original não existe estes arquivos HMG.HBP e HMG.HBC, então se você copiou estes arquivos de uma outra versão, delete os arquivos da pasta da hmg.3.0.35, pois eles não serão utilizados com esta versão 3.0.35.
microvolution escreveu:criei uma cópia do BUILDALLLIB.BAT, eliminei a maioria de suas linhas, renomeei-o para BUILDLIBHMG.BAT

Não precisa disto, delete estes arquivos também.

Mantenha os arquivos originais da versão 3.0.35, qualquer outro que você tenha copiado de outras versão, delete.
microvolution escreveu:como só quero a LIBHMG.A recompilada
Neste caso, faça o seguinte:

Lembrando: os passos abaixo é referente aos arquivos originais da versão 3.0.35 considerando que ela esteja instalado na pasta original c:\hmg.3.0.35

1 - Editar o arquivo makehmg.bat que está na pasta c:\hmg.3.0.35\source, procure por:

set HmgPath=c:\hmg

e troque por:

set HmgPath=c:\hmg.3.0.35

Obs.: depois de editado, salve e feche o arquivo.

2 - Editar o arquivo makefile.gcc que está na pasta c:\hmg.3.0.35\source, procure por:

HRB_DIR = c:/hmg/harbour
INC_DIR = c:/hmg/include
OBJ_DIR = c:/hmg/obj
LIB_DIR = c:/hmg/lib
SRC_DIR = c:/hmg/source


e troque por:

HRB_DIR = c:/hmg.3.0.35/harbour
INC_DIR = c:/hmg.3.0.35/include
OBJ_DIR = c:/hmg.3.0.35/obj
LIB_DIR = c:/hmg.3.0.35/lib
SRC_DIR = c:/hmg.3.0.35/source


Também salve e feche o arquivo.

3 - Para compilar a libhmg novamente, pelo prompt do DOS, entre na pasta c:\hmg.3.0.35\source e digite:

makehmg

Se tudo estiver correto, os arquivos originais, a pasta de instalação default e também as alterações que você fizer no código fonte, se tudo isto estiver sem erros, com o comando acima a libhmg deverá ser criada e gravada na pasta c:\hmg.3.0.35\lib.

Bom, qualquer problema que venha a ocorrer, basta restaurar os arquivos originais da HMG que foram salvos por medida de segurança.

Outra coisa muito importante: dependendo das alterações feitas na código fonte original da HMG, pode comprometer a libhmg de funcionar corretamente em modo gráfico, tome muito cuidado com isto.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Como criar LIB de funções usando a IDE HMG 3

Mensagem por microvolution »

oBRIGADOOOOOOOOOOOOO!

Deu tudo certo!
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Responder