Вы находитесь на странице: 1из 68

FWH

FiveWin para Harbour / xHarbour

© FiveTech Software 2006


www.fivetechsoft.com

La documentación de Harbour es
© El Proyecto Harbour
www.harbour-project.org
Harbour
FWH

Contenido
CONTENIDO.........................................................................................................1

¿QUE ES FIVEWIN PARA HARBOUR? ..................................................................7


INSTALACIÓN DE FIVEWIN PARA HARBOUR................................................7
USO DE FIVEWIN PARA HARBOUR............................................................8
DIRECTRICES PARA USUARIOS DE HARBOUR...............................................8
Recomendaciones importantes:........................................................................................10
DIRECTRICES PARA USUARIOS DE CLIPPER Y FIVEWIN...............................10
Adaptación de su código fuente C:....................................................................................12
Utilización de los controles de Borland (Bwcc32.dll):.........................................................12
UTILIZACIÓN DE ADVANTAGE LOCAL RDD CON HARBOUR:..........................12
ELEMENTOS DE HARBOUR ................................................................................ 14
COMO ESTA COMPUESTO EL COMPILADOR..................................................14
ESTRUCTURA JERÁRQUICA DE SUBDIRECTORIOS.........................................14
QUE ARCHIVOS COMPONEN HARBOUR ?...................................................16
PARA QUÉ SIRVEN CADA UNO DE LOS PROGRAMAS ?...................................17
GENERACIÓN DEL COMPILADOR PARA 16 BITS: DOS, WIN3X......................19
Qué variables de entorno necesito ?.................................................................................19
Qué programas necesito ?................................................................................................19
Cómo se procesan los archivos ?......................................................................................20
GENERACIÓN DEL COMPILADOR PARA 32 BITS: WIN 9X, NT,.......................22
QUÉ VARIABLES DE ENTORNO NECESITO ?................................................23
Qué programas necesito ?................................................................................................23
Cómo se procesan los archivos ?......................................................................................23
PARA QUÉ SON FLEX Y BISON ?.............................................................23
Flex.................................................................................................................................24
Bison...............................................................................................................................24

DISEÑO DEL COMPILADOR ...............................................................................26


CAMBIOS EN LA ESTRUCTURA INTERNA.....................................................26
ESTRUCTURA INTERNA DE HARBOUR.......................................................26
LA MÁQUINA VIRTUAL (VIRTUAL MACHINE Ó VM)....................................26
El Arranque:.....................................................................................................................26

-1-
Harbour
FWH
La Pila (stack):.................................................................................................................27
La tabla estática de símbolos:...........................................................................................27
La tabla dinámica de símbolos..........................................................................................27
Variables estáticas y públicas:..........................................................................................27
La memoria:....................................................................................................................27
El sistema extendido:.......................................................................................................27
Arrays Multidimensionales:...............................................................................................27
El motor de Objetos:........................................................................................................27
El subsistema macro:.......................................................................................................27
El subsistema de areas de trabajo:...................................................................................27

ASUNTOS LEGALES SOBRE LAS FAQ.................................................................33


DERECHOS (COPYRIGHT)......................................................................33
LICENCIA..........................................................................................33
GARANTÍA.........................................................................................33
MARCAS REGISTRADAS.........................................................................33
HARBOUR...........................................................................................................34
QUÉ ES HARBOUR ?.............................................................................34
POR QUÉ DESARROLLAR HARBOUR ?.......................................................34
QUE PLATAFORMAS SON SOPORTADAS POR HARBOUR ?...............................35
QUIÉN ESTA DESARROLLANDO HARBOUR ?...............................................35
ESTADO ACTUAL DE HARBOUR................................................................35
CÓMO COMENZÓ EL PROYECTO HARBOUR ?................................................35
A QUIÉN PERTENECE HARBOUR ?............................................................35
AYUDANDO A DESARROLLAR HARBOUR ..........................................................36
DÓNDE PUEDO COMENZAR ?..................................................................36
QUÉ COMPILADOR DE C DEBERÍA USAR ?..................................................36
QUÉ OTRAS HERRAMIENTAS NECESITO ?...................................................37
DÓNDE PUEDO ENCONTRAR LOS FUENTES ?...............................................38
EL ESTADO ACTUAL INESTABLE...............................................................38
EL ESTADO ACTUAL ESTABLE..................................................................38
ACCESO DIRECTO AL CVS.....................................................................38
QUÉ ES EL CVS Y CÓMO PUEDO YO USARLO ?............................................38
CÓMO PUEDO CONSTRUIR HARBOUR ?.....................................................40
SOBRE QUÉ SE NECESITA TRABAJAR ?......................................................40
HAY ALGUN LINEAMIENTO DE DESARROLLO ?............................................40
ESTA BIEN EXTENDER EL LENGUAJE CON ALGUNAS CARACTERISTICAS ?...........41

-2-
Harbour
FWH

QUÉ CON TODAS ESAS EXTENSIONES AL LENGUAJE, ENTONCES ?....................41


NO PUEDO PROGRAMAR EN C, CÓMO PUEDO AYUDAR EN EL DESARROLLO ?......41
TENGO MUCHO CÓDIGO CLIPPER, YO PUEDO DONARLO, QUE DEBO HACER ?.....41
NO PUEDO ENVIAR CÓDIGO CLIPPER TAMPOCO, TODAVÍA PUEDO AYUDAR ?.....42
LISTAS DE CORREO DE HARBOUR ....................................................................43
HAY UNA LISTA DE CORREO DE DESARROLLADORES ?..................................43
HAY UNA LISTA DE CORREO DE USUARIOS ?..............................................43
HAY UNA LISTA DE CORREO DE DISCUSIÓN GENERAL ?................................43
CÓMO REMOVERME DE LA LISTA DE CORREO ?............................................43
HAY ALGUNA REGLA EN LAS LISTAS ?......................................................44
ESTAN LAS LISTAS ARCHIVADAS EN ALGÚN LUGAR ?...................................44
HAY ALGÚN GRUPO DE NOTICIAS PARA HARBOUR ?....................................44
INSTALACIÓN DE HARBOUR .............................................................................45
DÓNDE PUEDO OBTENER BINARIOS PRE-CONSTRUIDOS ?.............................45
CÓMO PUEDO INSTALAR LOS ARCHIVOS BINARIOS PRE-CONSTRUIDOS ?..........45
CÓMO USAR HARBOUR A PARTIR DE LOS ARCHIVOS FUENTES ?.....................47
PREGUNTAS GENERALES DE HARBOUR ............................................................48
CUANDO SERÁ TERMINADO HARBOUR ?....................................................48
SON LAS APLICACIONES <ATRIBUTO> QUE EN CA-CLIPPER ?......................48
QUÉ VENTAJAS TIENE HARBOUR SOBRE OTROS COMPILADORES DE CLIPPER ?. .48
QUÉ VENTAJAS TIENEN OTROS COMPILADORES DE CLIPPER SOBRE HARBOUR?..48
SOPORTARÁ HARBOUR LOS PRODUCTOS DE TERCEROS EXISTENTES PARA CA-
CLIPPER ?.........................................................................................49
ES HARBOUR UNA HERRAMIENTA DE DESARROLLO PARA WINDOWS ?.............49
QUÉ PLATAFORMAS SON SOPORTADAS POR HARBOUR ?...............................49
PUNTEROS Y ENLACES......................................................................................50
ENLACES RELACIONADOS CON HARBOUR..................................................50
ARTÍCULOS SOBRE HARBOUR.................................................................50
ENLACES A HERRAMIENTAS DE DESARROLLO LIBRES (EN CUALQUIER SENTIDO DE
LA PALABRA)......................................................................................50
ENLACES RELACIONADOS CON CLIPPER....................................................50
ENLACES RELACIONADOS CON SOFTWARE LIBRE.........................................50
OTROS ENLACES ÚTILES........................................................................50
ASUNTOS LEGALES SOBRE SOFTWARE Y HARBOUR ........................................52

-3-
Harbour
FWH

QUE ES SOFTWARE LIBRE (FREE SOFTWARE) ?..........................................52


ENTONCES HARBOUR ES DEL DOMINIO PÚBLICO ?......................................52
QUÉ ES LA GPL ?...............................................................................52
POR QUÉ FUE LA GPL ELEGIDA COMO LA LICENCIA PARA HARBOUR ?.............52
QUÉ ES LA EXCEPCIÓN DE HARBOUR ?.....................................................52
SERÁN MIS APLICACIONES AFECTADAS POR LA GPL?..................................54
LICENCIA ACTUAL DEL PROYECTO HARBOUR..........................................55
Licencia Anterior del Proyecto HARBOUR..........................................................................55
GARANTÍA.........................................................................................55
MARCAS REGISTRADAS.........................................................................55
Glosario..............................................................................................................56

-4-
Harbour
FWH

Que es FiveWin para Harbour?

FiveWin para Harbour (FWH) es un conjunto de comandos, clases y funciones creadas con el
objetivo de obtener la mayor potencia del entorno de Microsoft Windows en unión con Harbour,
el compilador de código abierto compatible Clipper (http://www.harbour-project.org).

FWH es una librería que puede lincar con su aplicación en Harbour facilitando el uso de todas
esas functionalidades.

Esta versión de FWH ha sido construida usando El compilador gratuito Borland C/C++5.5
(http://www.borland.com/bcppbuilder/freecompiler) compilador que tambien ha sido utilizado
para construir Harbour. Actualmente FWH tambien soporta el compilador de Microsoft Visual C+
+.

FWH ha sido desarrollado para mantener una completa compatibilidad con la libreria FiveWin
para Clipper original. FiveTech así ofrece verdadera compatibilidad entre 16 y 32 bits. Debido a
este nivel de compatibilidad ambos productos comparten el mismo manual y los ejemplos
proporcionados.

El conjunto de clases de FWH son completamente autocontenidas. FWH facilita las clases
necesarias para crear ventanas standard, diálogos, nenús y barras de botones con el estilo de
Microsoft Office , etc. Las razones por la que FWH ha sido desarrollada con su propio grupo de
GUI clases son las siguientes:

Total soporte de recursos de Windows estandar: FWH le permite utilizar herramientas estandar
para diseñar diálogos, como Microsoft Visual Studio o Borland Resource Workshop, posibilitando
el diseño visual tal como hacen los programadores profesionales con C y C++. De este modo,
diseñando sus propios diálogos le permitirá tener total independencia entre el diseño gráfico del
interface y el codico fuente de sus aplicaciones. Podrá modificar facilmente sus diálogos sin
necesidad de alterar o modificar el correspondiente código fuente.

FWH utiliza las propias librerías de importación de Borland C/C++ 5.5 (ó de Microsoft Visual C+
+, en adelante MSVC) para acceder al API de Windows por lo que no se necesita el equivalente
WinApi.lib de FiveWin para Clipper.Simple y facil de usar: Los comandos y el conjunto de clases
de FiveWin para Harbour han sido especialmente diseñadas para ofrecer una gran facilidad de
uso y requerir una mínima formación. FiveWin ha sido siempre muy popular por su potencia y
facilidad de uso.

-5-
Harbour
FWH

Estas razones demuestran lo importante que es usar FWH para migrar sus actuales aplicaciones
de Clipper y FiveWin a 32 bits. FWH le dará un control total sobre el entorno Microsoft Windows
y es indispensable para cualquier empresa de programación profesional ya que permite entregar
aplicaciones bajo Windows que ofrecen soluciones de gestión modernas y actualizadas.

Instalación de FiveWin para Harbour

FWH está diseñado para ser usado con Harbour, el compilador compatible Clipper de codigo
abierto disponible en www.harbour-project.org. Aunque puede bajarse la ultima versión de
Harbour de esta web nosotros le recomendamos que utilice la que le entregamos ya que ha sido
probada y construida conteniendo sus archivos ejecutables (harbour.exe) listos para usar. Solo
haga click en el icono de instalación de Harbour y éste se instalará automaticamente.

FWH incorpora un proceso de instalacion automático por lo que solo necesita seleccionar el icono
de instalación y completar algunos detalles para conocer el path de destino y los componentes
que desea instalar.

Como FWH ha sido especificamente construido para ser usado con el compilador gratuito Borland
C/C++ 5.5 se requiere también la instalación del compilador Borland en su ordenador. El
compilador gratuito Borland C/C++ 5.5 puede descargarlo desde
http://www.borland.com/bcppbuilder/freecompiler (requiere registro de usuario) o desde
http://bcc55.bizland.com (descarga directa). La instalación de Borland C es un proceso
automático, una vez completado, deberá crear los siguientes archivos ascii: bcc32.cfg y
ilink32.cfg e instalarlos en c:\Su_Borland_path\bin con el siguiente contenido:

bcc32.cfg
-I"c:\Su_Borland_path\include"
-L"c:\Su_Borland_path\lib"

ilink32.cfg
-L"c:\ Su_Borland_path \lib"

El fichero readme de Borland también explica estos requisitos claramente.

Uso de FiveWin para Harbour

-6-
Harbour
FWH
Una vez instalado Harbour, FWH y el compilador gratuito Borland C/C++, simplemente vaya al
directorio c:\FWH\SAMPLES y revise los paths definidos en BuildH.bat para asegurarse que
coinciden con los paths seleccionado en la instalación de Harbour y Borland Luego escriba:
BuildH.bat tutor01

Esto hará que Harbour.exe compile tutor01.prg, llame a bcc32.exe para generar el OBJ
requerido, brc32.exe genere si existe el fichero de recursos RES y por último ilink32.exe
construya el EXE. Todo el proceso es realizado de un modo automático desde BuildH.bat.

Una primera ventana tipo 'Hello World!' mostrará un pequeño dialogo en la pantalla. Si no es así,
por favor revise de nuevo los paths dentro BuildH.bat para asegurarse que son los que ha
seleccionado para la instalación de Harbour y del compilador Borland.

Le recomendamos continuar probando los diferentes ejemplos que encontrará en dicho


directorio.
Para adaptar sus ficheros 'make' relizados en FiveWin y Clipper, simplemente necesita hacer unas
modificaciones dentro de los mismos como muestra el fichero SAMPLES\BuildH.bat

Directrices para usuarios de Harbour

FWH está compuesta por dos librerías FiveH.lib y FiveHC.lib. Junto a ellas , FWH proporciona un
gran conjunto de ficheros de cabecera (extensión .CH) que incluye todos los comandos de XBase
requeridos para crear y manejar los diferenter objetos de Windows.

En nuestros directorio de ejemplos '\samples', proporcionamos el fichero 'BuildH.bat'. Este fichero


muestra el modo correcto de lincar las aplicaciones desarrolladas con Harbour y FWH.

BuildH.bat:

if A%1 == A GOTO :SINTAX


if NOT EXIST %1.prg GOTO :NOEXIST

ECHO Compiling...

set hdir=c:\harbour\harbour
set bcdir=c:\bcc55\bin

%hdir%\bin\b32\harbour %1 /n /i..\include;%hdir%\include /p %2 %3 > clip.log


@type clip.log
IF ERRORLEVEL 1 PAUSE
IF ERRORLEVEL 1 GOTO EXIT

echo -O2 -e%1.exe -I%hdir%\include -tW %1.c > b32.bc


%bcdir%\bcc32 -M -c @b32.bc

-7-
Harbour
FWH

:ENDCOMPILE

IF EXIST %1.rc %bcdir%\brc32 -r %1

echo c0w32.obj + > b32.bc


echo %1.obj, + >> b32.bc
echo %1.exe, + >> b32.bc
echo %1.map, + >> b32.bc
echo ..\lib\FiveH.lib ..\lib\FiveHC.lib + >> b32.bc
echo %hdir%\lib\b32\rtl.lib + >> b32.bc
echo %hdir%\lib\b32\vm.lib + >> b32.bc
echo %hdir%\lib\b32\gtwin.lib + >> b32.bc
echo %hdir%\lib\b32\lang.lib + >> b32.bc
echo %hdir%\lib\b32\macro.lib + >> b32.bc
echo %hdir%\lib\b32\rdd.lib + >> b32.bc
echo %hdir%\lib\b32\dbfntx.lib + >> b32.bc
echo %hdir%\lib\b32\debug.lib + >> b32.bc
echo %hdir%\lib\b32\common.lib + >> b32.bc
echo %hdir%\lib\b32\pp.lib + >> b32.bc
echo %bcdir%\lib\cw32.lib + >> b32.bc
echo %bcdir%\lib\import32.lib, >> b32.bc
IF EXIST %1.res echo %1.res >> b32.bc
%bcdir%\ilink32 -aa -Tpe @b32.bc

IF ERRORLEVEL 1 GOTO LINKERROR


ECHO * Application successfully built
ECHO

:LINKERROR
%1
rem if exist meminfo.txt notepad meminfo.txt
rem PAUSE * Linking errors *
GOTO EXIT

:SINTAX
ECHO SYNTAX: Build [Program] {-- No especifiques la extensi¢n PRG
ECHO {-- Don't specify .PRG extension
GOTO EXIT

:NOEXIST
ECHO Not exist the specified PRG

:EXIT

Recomendaciones importantes:

-8-
Harbour
FWH
Observe el uso del Borland bcc32.exe (compilador Borland C/C++ compiler), después de llamar
al propio Harbour, para generar los OBJs necesarios para luego ser lincados con Borland
ilink32.exe (también gratuito).

No utilice Borland Resource WorkShop para guardar sus DLLs de 32 bits, pueden corromperse.
Guarde sus recursos como un fichero '.RC' (ASCII), y luego podrá utilizar el compilador de
recursos 'BRC32.exe' para convertir el fichero '.RC' en una DLL de 32 bugs usando la utilidad que
proporcionamos DLL\rc2dll32.bat.

Si mantiene todos sus recursos en una DLL, será muy fácil guardarlas en un fichero '. RC'
directamente desde Resource Workshop, luego utilice ese '.RC' para lincarlo directamente en su
'.EXE'.

Directrices para usuarios de Clipper y FiveWin

Todo lo que se necesita para pasar sus aplicaciones a 32 bits es reemplazar Clipper.exe y
Blinker.exe por sus equivalentes en 32 bits: Harbour.exe, bcc32.exe e ilink32.exe como se hace
en SAMPLES\BuildH.bat. El fichero de cabecera FiveWin.ch automaticamente detecta el uso de
Harbour y realiza las conversiones necesarias. El compilador Harbour.exe es compatible con la
mayoría de los parámetros de ejecución de Clipper.exe.

El nivel de compatibilidad del código fuente de FiveWin con el nuevo FWH es practicamente del
100%.

if A%1 == A GOTO :SINTAX


if NOT EXIST %1.prg GOTO :NOEXIST

ECHO Compiling...

set hdir=c:\harbour\harbour
set bcdir=c:\bcc55\bin

%hdir%\bin\b32\harbour %1 /n /i..\include;%hdir%\include /p %2 %3 > clip.log


@type clip.log
IF ERRORLEVEL 1 PAUSE
IF ERRORLEVEL 1 GOTO EXIT
echo -O2 -e%1.exe -I%hdir%\include -tW %1.c > b32.bc
%bcdir%\bcc32 -M -c @b32.bc
:ENDCOMPILE
IF EXIST %1.rc %bcdir%\brc32 -r %1
echo c0w32.obj + > b32.bc
echo %1.obj, + >> b32.bc

-9-
Harbour
FWH
echo %1.exe, + >> b32.bc
echo %1.map, + >> b32.bc
echo ..\lib\FiveH.lib ..\lib\FiveHC.lib + >> b32.bc
echo %hdir%\lib\b32\rtl.lib + >> b32.bc
echo %hdir%\lib\b32\vm.lib + >> b32.bc
echo %hdir%\lib\b32\gtwin.lib + >> b32.bc
echo %hdir%\lib\b32\lang.lib + >> b32.bc
echo %hdir%\lib\b32\macro.lib + >> b32.bc
echo %hdir%\lib\b32\rdd.lib + >> b32.bc
echo %hdir%\lib\b32\dbfntx.lib + >> b32.bc
echo %hdir%\lib\b32\debug.lib + >> b32.bc
echo %hdir%\lib\b32\common.lib + >> b32.bc
echo %hdir%\lib\b32\pp.lib + >> b32.bc
echo %bcdir%\lib\cw32.lib + >> b32.bc
echo %bcdir%\lib\import32.lib, >> b32.bc
IF EXIST %1.res echo %1.res >> b32.bc
%bcdir%\ilink32 -aa -Tpe @b32.bc
IF ERRORLEVEL 1 GOTO LINKERROR
ECHO * Application successfully built
ECHO

:LINKERROR
%1
rem if exist meminfo.txt notepad meminfo.txt
rem PAUSE * Linking errors *
GOTO EXIT

:SINTAX
ECHO SYNTAX: Build [Program] {-- No especifiques la extensi¢n PRG
ECHO {-- Don't specify .PRG extension
GOTO EXIT

:NOEXIST
ECHO Not exist the specified PRG

:EXIT

Adaptación de su código fuente C:

Harbour necesita realizar pequeños cambios en sus ficheros de desarrollo C. Proporcionamos una
utilidad llamada TOOLS\Clp2Harb.exe que realiza automáticamente dichos cambios.

- 10 -
Harbour
FWH
Clp2Harb.exe es una pequeña aplicacion de Harbour (se proporcionan sus fuentes). Clp2Harb.exe
se debe ejecutar antes de compilar sus fichero C:

Clp2Harb.exe <YourFile.c> temp\<YourFile.c>

Clp2harb.exe crea un fichero de salida con el nombre dado como segundo parámetro, con los
cambios ya realizados. Después ejecute bcc32.exe de Borlando con la instrucción siguiente:

bcc32 -c TEMP\<YourFile.c>

Utilización de los controles de Borland (Bwcc32.dll):

En vez de hacer una llamada a la función LoadLibray("Bwcc.dll") como en Fivewin 16 bits, deberá
hacer los siguiente:

BWCCRegister( GetResources() )

Y colocar el siguiente código al final de su PRG principal:

DLL32 FUNCTION BWCCRegister( hInst AS LONG ) AS WORD PASCAL LIB "BWCC32.DLL"

Utilización de Advantage local RDD con Harbour:

Actualmente puede usar el kit cliente de Advantage para 32 bits con Harbour para acceder por
acceso remoto o local a cualquier fichero DBF. El acceso remoto se basa en el famoso servidor
Advantage Xbase el cual esta también disponible para los usuarios de Clipper (16 bits), pero el
driver local es nuevo para todos los usuarios de Clipper ya que no existe en 16 bits. El driver
local funciona como una RDD estandar con los ficheros DBF, por eso puede usarlo para
desarrollar sus propias aplicaciones con Harbour. El RDD de Advantage soporta los formatos CDX
y NTX.

Las DLLs del driver local de Advantage se presentan en un software gratuito publicado por
Extended Systems en su Web y Fivewin para Harbour incluye las librerias necesarias para acceder
a esas DLLs.

El link dodnde puede encontrar todas esas DLLs esenciales es en


http://solutions.advantagedatabase.com/as/advantage_solutions.exe/login, en la seccion de
desarrolladores de recursos. Una vez allí, necesitará registrarse para más tarde acceder a la web
de Advantage Solutions.

- 11 -
Harbour
FWH
Diríjase al area "download" y seleccione la sección 5.7/2.7 release, haga click y descargue el
archivo arc.exe. Este software incluye todas las librerias necesarias que son:

 ACE23.DLL: Motor Advatange cliente de 32 bits.


 AXCWS32.DLL: La capa de comunicaciones con el módulo cliente.
 ADSLOC32.DLL: El motor Advantage en modo local.
 EXTEND.CHR: Secuencia de ordenación OEM. Este fichero será necesario si requiere el
uso del juego de caracteres OEM para uso con Advantage Local Server.
 ANSI.CHR: Secuencia de ordenación ANSI. Este fichero será necesario si requiere el uso
del juego de caracteres ANSI para uso con Advantage Local Server.
 ADSLOCAL.CFG: El archivo de configuración del Advantage local server.

Todos estos ficheros se deben colocar en el directorio \WINDOWS\SYSTEM . si usted ya posee un


servidor Advantage Database soló necesitará ACE32.DLL y AXCWS32.DLL.

Para usar la RDD de Advantage desde sus aplicaciones Harbour tendrá que hacer referencia al
fichero 'ADS.CH' en sus ficheros PRG cuando sea necesario. Incluir en el fichero .LNK las librerías
rddads.lib y ace32.lib que están incluidos en el paquete de Fivewin para Harbour y Requerir
('REQUEST') la RDD de Advantage RDD al principio de su aplicación.

Este es un pequeño ejemplo

// FiveWin ADS use sample

#include "FiveWin.ch"
#include "ads.ch"

REQUEST _ADS

//­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­//

function Main()

   rddRegister( "ADS", 1 ) 
   rddsetdefault( "ADS" ) 
   SET SERVER LOCAL
   SET FILETYPE TO CDX
   
   USE Clientes // Open any DBF
   OrdSetFocus("DIRECCION") // Second Tag on Clientes.cdx
   Gotop()
   Browse() // Quick browse!!! 

- 12 -
Harbour
FWH
   USE

return nil

//­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­// 

Recomendamos el uso de Advantage remote Xbase Server de Extended Systems

La siguiente documentación ha sido desarrollada por el equipo de Harbour, y no es


imprescindible su lectura y comprensión para usar Harbour y FWH, sin embargo es una
información valiosa que puede interesarle.

- 13 -
Harbour
FWH

- 14 -
Elementos de Harbour

Como esta compuesto el compilador

A continuación he escrito una pequeña guía que sirva para entender como se instala y crea el
compilador Harbour para los que quieren ser desarrolladores, sea de Harbour mismo o de
utilidades y librerías para el.
Ejemplificaremos la tarea suponiendo que se va a generar utilizando un entorno D.O.S. (uno de
los más conocidos y populares).
Primero se debe descargar el archivo compactado para la plataforma que va a utilizar. Que será:
- -archivo.zip para plataformas DOS y Winn 3.x, 9x, NTx
-archivo.tar.gz para plataformas Un*x yy Linux.
Cuando se descomprime el archivo compactado para la plataforma que va a utilizar se crean una
serie de subdirectorios que van a colgar del subdirectorio raíz elegido, por ej hb-dev:

Estructura jerárquica de subdirectorios


\hb-dev\include
\source\bin
\common
\compiler
\config
\contrib
\debug
\lang
\macro
\pp
\rdd\dbfcdx
\dbfntx
\nulsys

\rtl\gtdos
\gtwin
\gtos2
\gtstd
\gtcrs
\gtsln
\gtpca

69
Harbour
FWH
\vm

\utils\hbrun
\hbtest
\hbdoc

\lib\b16
\b32
\..

\obj\b16
\b32

\bin\b16
\b32

\tests
\samples

El proyecto está desarrollado casi en su totalidad en lenguaje "C", sólohay un par de


archivos.asm para la tabla de símbolos.

SUBDIRECTORIOS:
Como se podrá ver, los subdirectorios están separados en unidades lógicasó componentes con
una funcionalidad, que le es propia.
hb-dev\include
--------------
Contiene los headers ó archivos de cabecera, tanto los archivos.h (utilizados desde lenguaje C)
como los archivos.ch usados por Clipper/ Harbour.
hb-dev\source
-------------
Desde aqui cuelgan los subdirectorios que contienen los archivos fuentes (archivos.c y
archivos.prg) que componen el compilador y la RTL, como se puede ver arriba.
hb-dev\source\common
--------------------
Harbour tiene un directorio "common", para archivos de uso común y aquellas funciones que son
compartidas por el compilador y la RTL.Puede haber alguna redundancia, pero éste es el
contexto históricopor el que esta hecho de esta forma.Por ejemplo hb_strupr() y otras deberían
estar aqui
hb-dev\source\compiler
----------------------
Contiene archivos propios del compilador.

14
Harbour
FWH

hb-dev\source\debug
--------------------
Contiene archivos del debugger ó depurador.

hb-dev\source\macro
-------------------
Contiene archivos del compilador de macros

hb-dev\source\pp
----------------
Contiene archivos del pre-procesador

hb-dev\source\rdd\
------------------
Contiene archivos de drivers de bases de datos reemplazables

hb-dev\source\rtl\gt
--------------------
Contiene archivos de la Run Time Library (librerías)

Que archivos componen Harbour ?


El paquete del compilador de Harbour en la version 0.34 está compuesto por los siguientes
archivos (Note que éstos pueden cambiar en un futuro). Esto es para que sirva como guia sobre
como está compuesto el paquete. Si Ud. descarga de alguno de los sitios web de Harbour un
paquete binario (compactado) Ud. obtendrá los archivos:
a) Ejecutables:
1 - harbour.exe
2 - hbpp.exe
3 - hbrun.exe
4 - hbtest.exe
5 - hbdoc.exe
b) Librerías:
- vm
- macro
- pp
- common
- debug
- rtl
- dbfcdx
- dbfntx
- nulsys

15
Harbour
FWH
- gtdos
- gtwin \
- gtos2 \
- gtstd | para otras
- gtcrs | plataformas
- gtsln /
- gtpca /
- rdd
- tools
Para qué sirven cada uno de los programas ?

Primero que nada quiero hacer la salvedad que la extensión de los archivos exe (por ejecutable),
lib (por librería), están históricamente ligados a un entorno DOS y que esto puede no aplicarse
(de hecho no lo hace) en otras plataformas como linux. Pero en este caso (plataforma DOS) sirve
para entender mejor su uso.
a) Ejecutables:
1 - harbour.exe
===============
Es el compilador generado, es el equivalente a CLIPPER.EXE.
Recibe como entrada archivos.prg y puede obtenerse como salida archivos .ppo, archivos.c,
archivos.hrb ú otros (ver documentación).
Actualmente Harbour carece de un linker o enlazador para construir los archivos.exe finales, pero
se está trabajando activamente en ello.
2 - hbpp.exe
============
Es el pre-procesador de Harbour, realiza las mismas tareas que el pre procesador de Clipper.
3 - hbrun.exe
=============
Es un intérprete de p-code, producto intermedio entre un archivo.prg y un archivo ejecutable.
Tiene similitud con el intérprete de p-code java.
4 - hbtest.exe
===============
Ejecutable final, que contiene archivos.prg que se utilizan como test, que se compilan a archivos
fuente de lenguaje C y luego se enlazan con laslibrerías de Harbour para generar un ejecutable
con propósito de testeo.
5 - hbdoc.exe
=============
Es un programa para generar documentación de Harbour en distintos formatos y
empaquetamientos: norton guides (ng), rich tech format (rtf), man pages, todo a partir de
simples archivos de texto.

16
Harbour
FWH
Para ello utiliza una plantilla, basada en el diseño Nanforum de documentación, que es la
habitualmente usada por los desarrolladores de clipper de todo el mundo.
b) Librerías: (principales, no exhaustivo!)
- vm.lib
- macro.lib
- pp.lib
- common.lib
- debug.lib
- rtl.lib
- dbfcdx.lib
- dbfntx.lib
- nulsys.lib
- gtdos
- rdd
- tools
1 - vm.lib
Librería dónde se encuentran las funciones que componen la "Virtual Machine", o máquina virtual
de Harbour.
2 - macro.lib
Librería dónde se encuentran las funciones del compilador de las macros de Clipper.
3 - pp.lib
Librería dónde se encuentran las funciones del pre-procesador.
4 - common.lib
Librería dónde se encuentran funciones comunes del compilador independiente y el compilador
de macros, optimizador de expresiones, etc.
5 - debug.lib
Librería dónde se encuentran las funciones del depurador de Harbour, el equivalente al ALTD.exe
de Clipper.
6 - rtl
Librería dónde se encuentran las funciones de la Run-Time Library (librería de ejecución, el
equivalente a clipper.lib y extend.lib
7 - dbfcdx.lib
Librería dónde se encuentran las funciones del controlador de índices CDX.
8 - dbfntx.lib
Librería dónde se encuentran las funciones del controlador de índices NTX.
9 - gtdos
Librería donde se encuentran las funciones del controlador de terminal, el equivalente de clipper
a terminal.lib para DOS.
10 - rdd
Librería donde se encuentran las funciones del controlador reemplazable de bases de datos
(RDD)
11 - tools

17
Harbour
FWH
Librería donde se encuentran funciones externas de propósito general, el equivalente de Clipper
de una librería de terceras partes.
NOTA Esta es una lista general, no pretende ser exaustiva sino darle un mayor entendimiento
sobre cómo esta construido Harbour.
Si Ud. en cambio descarga los archivos fuentes, podrá construir los ejecutables y las librerías
citadas Ud. mismo, y si se siente capaz de hacerlo nosotros lo alentamos a que lo haga.
De esa forma podrá colaborar con las distintas etapas.

Generación del compilador para 16 bits: DOS, Win3x

Qué variables de entorno necesito ?

Antes de empezar debe tener seteadas distintas variables de entorno para el correcto desarrollo
del proyecto:
SET HB_ARCHITECTURE=dos
SET HB_COMPILER=bcc16
SET HB_GT_LIB=gtdos
SET HB_HOMEDRIVE=D
SET HOME=D:\HB33
SET HOMEPATH=/HB33/
SET C_USR=-DHARBOUR_USE_DOS_GTAPI
REM SET BISON_SIMPLE=C:\BATCH\BISON.SIMPLE

Qué programas necesito ?

A) Compilador de lenguaje C, con su componentes (make, linker, libs, etc)


B) Analizador Léxico (flex)
C) Analizador Gramatical (bison)
make_b16.bat
makefile.bc

Ud. debe tener correctamente instalado un compilador de lenguaje C para la plataforma en la


cual desea generar el compilador y sus librerías. Asi necesitará tantos compiladores como
plataformas a desarrollar. Supondremos para simplificar que Ud. tiene instalado un compilador
para D.O.S. que podria ser uno de B*rland, por ej BCC 4.5 (los nombres de los programas
invocados van a cambiar segun el compilador y la plataforma en cuestion).

Existen archivos BATCH que simplifican la tarea configurando algunos parámetros y llamando a
los programas apropiados en el orden adecuado Existen tambien archivos de configuración para
esos programas, que estan en los distintos subdirectorios que cuelgan de ..\config para cada una
de las plataformas elegidas.

18
Harbour
FWH

En nuestro caso el proyecto se inicia al invocar el archivo make_b16.bat, que es el que


corresponde a la plataforma DOS de 16 bits y está en el subdirectorio principal (hb-dev).
make_b16.bat se puede invocar con el parámetro:

parametro - CLEAN
Si existen...
Borra todo los ejecutables del subdir \bin\b16
Borra todo los archivos.tds del subdir \bin\b16
Borra todo los archivos.map del subdir \bin\b16
Borra todo los archivos.lib del subdir \lib\b16
Borra todo los archivos.bak del subdir \lib\b16
Borra todo los archivos.obj del subdir \obj\b16
Borra todo los archivos.c del subdir \obj\b16
Borra todo los archivos.h del subdir \obj\b16
Borra el archivo make_b16.log del subdirectorio principal del proyecto, que hemos elegido(hb-
dev)
Este último es un archivo hacia donde se redireccionan los errores ocurridos durante las distintas
etapas en el proceso de generación del compilador.

sin parámetros
Invoca al programa ejecutable make.exe (puede variar su nombre según el compilador en
cuestión) que forma parte del paquete del compilador.
Este ejecutable make, a su vez llama al compilador de lenguaje C (de línea de comandos, no de
entorno de ventanas) bcc.exe y a otros ejecutables que son tasm.exe flex.exe, bison.exe, tlib.exe
de acuerdo a las dependencias que existan en un archivo makefile.[bc]
Los llama cada vez que observa que la hora y fecha del archivo fuente.c no se corresponden con
la hora y fecha del archivo.obj (archivo binario producto de la compilación del anterior).
Este ejecutable make.exe recibe distintos parámetros de configuración, y ya estan seteados..
Si ocurre algún error durante el funcionamiento de estos ejecutables, estos errores se
redireccionan al archivo "make_b16.log" para poder ser revisados posteriormente.

Cómo se procesan los archivos ?


La utilidad make (recuerde que puede tener otro nombre, segun el compilador y la plataforma:
gmake, nmake, etc) utiliza como entrada un archivo donde están los nombres de los ejecutables
a invocar y sobre que archivos van a actuar y qué dependencias entre ellos va a existir.
Como funcionan estos ejecutables invocados ?
Por una cuestion de lógica de ordenamiento y para mayor claridad se ha modificado el orden
físico en el cual se genera los archivos.
Por la acción de tasm.exe se genera el siguiente archivo.obj:
symbols.asm -> symbols.obj
Por la acción de flex.exe se generan los siguientes archivos.c:

19
Harbour
FWH
harbour.l -> harbourl.c
macro.l -> macrol.c
Por la acción de bison.exe se generan los siguientes archivos.c:
macro.y -> macroy.c
harbour.y -> harboury.c
Por la acción de bcc.exe se generan los siguientes archivos.obj:
harbour.obj
harboury.obj * producto de bison
harbourl.obj * producto de flex
cmdcheck.obj
hbusage.obj
hbgenerr.obj
hbpcode.obj
genc.obj
genobj32.obj
genjava.obj
genhrb.obj
expropta.obj
exproptb.obj
exproptc.obj
hbfunchk.obj

Posterior generacion de HARBOUR.EXE a partir de estos archivos.obj por la acción de tlink.exe


invocado internamente por bcc.exe

Por la acción de bcc.exe se generan los siguientes archivos.obj


hbrun.c -> hbrun.obj
exttools.c -> exttools.obj

Posterior generación de HBRUN.EXE a partir de estos archivos.obj por la acción de tlink.exe


invocado internamente por bcc.exe

Por la acción de tlib.exe se genera MACRO.LIB a partir de varios .obj:


macroy.obj
macrol.obj
macroa.obj
macrob.obj
macroc.obj

Por la acción de tlib.exe se genera PP.LIB a partir de los archivos.obj:


ppcore.obj
ppcomp.obj

20
Harbour
FWH
pplib.obj
pptable.obj

Por la acción de tlib.exe se genera MACRO.LIB a partir de los archivos.obj:


macroy.obj
macrol.obj
macroa.obj
macrob.obj
macroc.obj

Por la acción de tlib.exe se genera DEBUG.LIB a partir de los archivos.obj:


dbgmenu.obj
dbgtmenu.obj
dbgtwin.obj
debugger.obj
tbrwtext.obj

Por la acción de tlib.exe se genera VM.LIB a partir de los archivos.obj:


arrays.obj
arrayshb.obj
break.obj
classes.obj
cmdarg.obj
codebloc.obj
debug.obj
dynsym.obj
extend.obj
fm.obj
hvm.obj
initexit.obj
initsymb.obj
itemapi.obj
macro.obj
maindll.obj
mainstd.obj
mainwin.obj
memvars.obj
memvclip.obj
pcount.obj
proc.obj
pvalue.obj
runner.obj

21
Harbour
FWH
symbols.obj
harbinit.obj

Por la acción de tlib.exe se genera RTL.LIB a partir de los archivos.obj:


<... muchos archivos obj ...>
common.lib
dbfcdx.lib
dbfntx.lib
nulsys.lib
rdd.lib
rtl.lib
tools.lib

Luego si todo el proceso de generación fue correcto se copian:


Los archivos ejecutables.exe del subdiirectorio ..\bin\b16 (plataforma elegida) al
subdirectorio ..\bin.
Los archivos de librerías.lib del subddir ..\lib\b16 al subdir ..\lib Desde donde se supone que se
van a utilizar.
Si el proceso de generación del compilador y las librerías no fue satisfactorio se edita el archivo
de error y se muestran los errores ocurridos.

Generación del compilador para 32 bits: Win 9x, NT,...


Si el proceso de generación del compilador y librerías se realiza para la plataforma windows 32
(Win 9x, Win ME, NT 3.x, 4.x, Win 2K, etc), cambian los subdirectorios de destino .
Si se utiliza el compilador de Borland 5.5 (gratuito!) los subdirectorios de destino ahora son
..\b32 La generación de archivos.obj cambia de 16 bits a 32 bits para lo cual
se invoca a tasm32.exe y bcc32.exe, flex y bison son los mismos. En el proceso final de
enlazado de los archivos.obj es realizado por la acción de ilink32.exe (linker) invocado
internamente por bcc32.exe La cantidad de ejecutables y librerías generadas para el compilador
es el mismo excepto que ahora son de 32 bits.

Qué variables de entorno necesito ?


Antes de empezar debe tener seteadas distintas variables de entorno para el correcto desarrollo
del proyecto:

SET HB_ARCHITECTURE=w32
SET HB_COMPILER=bcc32
SET HB_GT_LIB=gtwin
SET HB_HOMEDRIVE=C
SET HOME=C:\hb-dev

22
Harbour
FWH
SET HOMEPATH=/hb-dev/
SET C_USR=-DHARBOUR_USE_WIN_GTAPI
SET BISON_SIMPLE=C:\BATCH\BISON.SIMPLE
PATH=c:\windows\command;c:\bcc55\bin;c:\ssh;c:\cvs;c:\flex;c:\batch;
c:\hb-dev\bin

Qué programas necesito ?

A) Compilador de lenguaje C, con su componentes (make, linker, libs, etc)


B) Analizador Léxico (flex)C) Analizador Gramatical (bison) make_b32.bat makefile.bc

Cómo se procesan los archivos ?


El proceso es idéntico al utilizado para generar el compilador de 16 bits.Se utilizan los
programas: Make, tasm32.exe y bcc32.exe, flex y bison.
TODO: Queda por hacer un guía para Linux y OS/2.
Para qué son Flex y Bison ?
Los compiladores de archivos.prg como Clipper o Harbour, lo que hacen es analizar la estructura
del archivo.prg para:
- identificar los tokens (símbolos, palaabras claves, palabras reservadas, identificadores, etc) que
conforman el lenguaje de programación.
- poder chequear la sintaxis de dicho leenguaje y comprobar si las funciones que se invocan son
adecuadas.
Un compilador lo que hace es leer un archivo fuente para tratar de descubrir su estructura. La
tarea de descubrir la estructura es descompuesta en 2 tareas:
1. Separar el archivo fuente.prg en tokens (flex).
2. Encontrar la estructura jerárquica del programa. (bison)
En principio uno podría escribir todo desde cero, rutinas para analisis de los tokens ó como se
relacionan estos para conformar el lenguaje. Pero hay dos valiosas herramientas que vienen a
nuestra ayuda, ya estan probadas a traves de los años y simplifican nuestra tarea, ellas son: Flex
y Bison.

Flex
Flex es una herramienta para generar programas exploradores ó "scanners": programas que
reconocen patrones léxicos en el texto. Flex lee el archivo de entrada provisto (en nuestro caso
harbour.l y macro.l), o el archivo estandar si no se da otro, por una descripción de un explorador
a generar.
La descripción es en forma de pares de expresiones regulares y código de lenguaje C, llamadas
"reglas".Flex genera como salida un archivo fuente de lenguaje C por cada archivo de entrada
(que en nuestro caso son harbourl.c y macrol.c ), el cual define una rutina "yylex()".Este archivo
es compilado y enlazado con una librería para producir un ejecutable.Cuando el ejecutable esta
corriendo, analiza su entrada en busca de expresiones regulares. Cuando encuentra alguna

23
Harbour
FWH
ejecuta el correspondiente código C.La terminación de los archivos.l se debe a que el programa
original que los generaba se llamaba LEX, en cambio flex (Fast LEX) es un proyecto GNU.
Mayor información sobre flex puede ser encontrada en el sitio: www.gnu.org
Bison
Bison es un generador de "parsers" o analizadores (de propósito general) que convierte una
descripción gramatical para una gramática de libre contexto en un programa de lenguaje C, para
analizar esa gramática.
En el caso de Harbour el archivo de entrada es "harbour.y" Bison genera como salida un archivo
fuente de lenguaje C llamado "harboury.c" La terminación de los archivos.y se debe a que el
programa original que los generaba se llamaba YACC, bison es un proyecto GNU.
Cuando Ud. corre Bison, Ud. le esta dando un archivo de gramática como entrada. La salida es
un archivo fuente en "C" que analiza el lenguaje descripto por la gramática. Este archivo es
llamado el analizador Bison. Tenga en mente que la utilidad Bison y el analizador bison son dos
programas distintos: El ejecutable ó utilidad Bison es un programa cuya salida es el analizador
Bison que formará parte del compilador.
El trabajo del analizador Bison es agrupar tokens en conjuntos de acuerdo a las reglas
gramaticales.Por ejemplo para construir identificadores y operadores dentro de expresiones. A
medida que hace esto, el ejecuta las acciones para las reglas gramaticales que el usa.
Los tokens vienen desde una función llamada el analizador léxico que Ud. debe aportar de alguna
forma (como ser escribirlo en C).El analizador Bison llama al analizador léxico cada vez que el
necesita un nuevo token. Este no sabe que hay "dentro" de los tokens (aunque sus valores
semánticos pueden reflejar esto).

Tipicamente el analizador léxico hace los tokens analizando caracteres de texto, pero Bison no
depende de esto. vea la función yylex().

El analizador Bison es código C, el cual define una función llamada yyparse(), la cual implementa
aquella gramática. Esta función no constituye un programa C completo: Ud. debe aportar algunas
funciones adicionales. Una es el analizador léxico, otra es una función de reporte de errores a la
cual el analizador llama para reportar un error. En adición un programa C completo debe
comenzar con una función llamada main(), Ud. debe proveer esto, y arreglar para que esta llame
a la función yyparse() ó el analizador no correrá nunca.

Aparte de los nombres de los tipos de tokens y los símbolos en las acciones que Ud. escriba, todo
los nombres de variables y funciones usadas en el analizador Bison empiezan con 'yy' o 'YY'. Esto
incluye funciones de interfaz como el analizador léxico yylex, la función de reporte de errores
yyerror() y la función analizadora misma yyparse(). Esto también incluye numerosos
identificadores usados para propósitos internos. Entonces Ud. debería evitar usar identificadores
de C que comiencen con "yy" o "YY" en el archivo de gramática Bison excepto por los ya
comentados.
Mayor información sobre Bison puede ser encontrada en el
sitio:www.gnu.org/software/bison/bison.html

24
Harbour
FWH

Por la acción de flex.exe se generan los siguientes archivos.c:


harbour.l -> harbourl.c
macro.l -> macrol.c
Por la acción de bison.exe se generan los siguientes archivos.c:
macro.y -> macroy.c
harbour.y -> harboury.c
A través de las funciones contenidas en harbourl.c y harboury.c y luego de generado
harbour.exe,
El compilador analiza el codigo fuente del usuario (.PRG), y se geneneran archivos en lenguaje C
que contienen llamados a las funciones a las que hace referencia el prg, sean de la rtl, ú otras
librerías.

Estado actual En el estado actual Harbour, al compilar un archivo no produce como salida un
archivo de tipo obj, sino que genera un archivo.c que es transformado en archivo.obj por acción
del compilador de C y en ejecutable por efecto del linkeditor que acompaña al compilador de C
(en nuestros ejemplos, Borland). Luego de terminar la funcionalidad básica y alcanzar la versión
1.0 de Harbour el equipo de Harbour espera poder satisfacer esta falta.

25
Harbour
FWH

DISEÑO DEL COMPILADOR

Cambios en la estructura interna


Harbour esta diseñado internamente para ser tan compatible como sea posible con Clipper, pero
debido a que Harbour es multiplataforma, ha sido preciso cambiar algunas partes.
Asimismo con fines de mejorar algunos problemas y/o deficiencias de Clipper el equipo de
Harbour ha rediseñado algunas funciones y partes extendiendo su funcionalidad.
Estructura Interna de Harbour
Esta sección esta bajo desarrollo
La Máquina Virtual (Virtual Machine ó VM)
La VM es un bucle de ejecución infinita mientras se ejecute el programa. La VM esta formada por
el bucle principal de ejecución y varios subsistemas, cada uno de los cuales puede ser
teóricamente reemplazado, suponiendo que Ud. respete la interfaz de cada subsistema.

El bucle principal de ejecución esta definido en una función de C llamada VirtualMachine(), la cual
recibe 2 parametros: la intrucciones pcode para ejecutar y la tabla local de simbolos (una porción
de la tabla de simbolos OBJs (estatica) ) usada para ese pcode: por favor revise hbpcode.h para
la implementación actual de los opcodes pcode.

VM( pcode, local symbols ) La VM puede invocar a la VM de nuevo (a si misma). Esto permite al
lenguaje Clipper acceder a funciones y metodos Clipper y funciones externas en lenguaje C una
vez y otra vez. La VM organiza estos multiples accesos en una forma ordenada y totalmente
controlada e implementa servicios para acceder a esos múltiples niveles de ejecución
(ProcName(), ProcLine(), depuración y acceso a las variables de la pila ).

Los subsistemas VM estan continuamente usados por el bucle principal de ejecución. Vamos a
revisar esos subsistemas VM.
 El Arranque
 La Pila (stack)
 La tabla estática de símbolos
 La tabla dinámica de símbolos
 Variables estáticas y públicas
 La memoria
 El sistema extendido
 Arrays Multidimensionales
 El motor de Objetos
 El subsistema macro
 El subsistema de áreas de trabajo

26
Harbour
FWH

El Arranque:
Controla la inicialización de los diferentes subsistemas de la VM, esta es invocada al principio de
la aplicación. Esta también controla la salida de la aplicación.
La Pila (stack):
La VM No usa la pila de la computadora directamente, esta usa en su lugar su propia pila para
manipular valores (parámetros, valores retornados y símbolos) como lo hace la pila de hardware.
La tabla estática de símbolos :
Es creada por el compilador en tiempo de compilación y agrupada por el enlazador (linker) en los
OBJs, Este subsistema es responsable por un inmediato acceso a la ubicación de las funciones y
esta altamente relacionada a la tabla dinámica de símbolos en tiempo de ejecución. Esta tabla
contiene muchos símbolos duplicados que serán optimizados por la tabla dinámica de símbolos.
La tabla dinámica de símbolos.
Es dinámicamente generada desde el subsistema de inicio al principio de la aplicación. Esta
organiza en una forma eficiente la tabla estática de símbolos creando un índice alfabético que
permite una búsqueda dicotómica de los símbolos. Este subsistema es responsable por el rápido
acceso a los símbolos (funciones, variables, campos y alias de las areas de trabajo).
Variables estáticas y públicas:
Responsable por el almacenamiento de variables públicas y estáticas.
La memoria:
Responsable por la ubicación, reubicación, bloqueo, desbloqueo y liberación de memoria.
El sistema extendido:
Define la interfaz (_parc(), ..., _retc() ) desde un bajo nivel (lenguaje C) hasta un alto nivel
(lenguaje Clipper). Este subsistema es responsable por conectar en una forma adecuada las
funciones en lenguaje C a la aplicación entera.
Arrays Multidimensionales:
Este subsistema permite la creación de arrays, y los servicios para manipular estos en todas sus
formas. Los arrays son extensivamente usados por el lenguaje Clipper y también ellos son la
fundación de los Objetos (los Objetos son sólo arrays referidos a una Clase específica).
El motor de Objetos:
Responsable por la creación de Clases y Objetos. Este también define la forma de acceso a un
método específico de clase para ser invocados por la VM y provee todo tipo de información de
clases que pueden ser requeridos al tiempo de la ejecución.
El subsistema macro:
Este implementa un compilador reducido que puede ser usado en tiempo de ejecución para
generar pcodes para ser usados por la aplicación. En efecto ésta es una parte de la
especificaciones de yacc (Bison) para Harbour.
El subsistema de areas de trabajo:
Responsable por el manejo de las bases de datos. Este subsistema define la ubicación donde las
áreas de trabajos serán almacenadas y provee todas las funciones de acceso a esas áreas de
trabajo. Este también implementa la interfaz para el controlador de base de datos reemplazable.

27
Harbour
FWH
Los opcodes de Harbour imitarán a los de Clipper ?, habrá una relación 1:1 entre ellos ?Si es así,
están los opcodes de Clipper descriptos en algún lado ?.
Clipper language pcode opcodes
DEFINE NAME VALOR BYTES
#define NOP 0x00 1
#define PUSHC 0x01 3 + literal
#define PUSHN 0x05 3
#define POPF 0x06 3
#define POPM 0x07 3
#define POPQF 0x08 3
#define PUSHA 0x09 3
#define PUSHF 0x0A 3
#define PUSHM 0x0B 3
#define PUSHMR 0x0C 3
#define PUSHP 0x0D 3
#define PUSHQF 0x0E 3
#define PUSHV 0x0F 3
#define SFRAME 0x10 3
#define SINIT 0x11 3
#define SYMBOL 0x12 3
#define SYMF 0x13 3
#define BEGIN_SEQ0x19 3
#define JDBG 0x1A 3
#define JF 0x1B 3
#define JFPT 0x1C 3
#define JISW 0x1D 3
#define JMP 0x1E 3
#define JNEI 0x1F 3
#define JT 0x20 3
#define JTPF 0x21 3
#define PUSHBL 0x23 3
#define ARRAYATI 0x24 3
#define ARRAYPUTI 0x25 3
#define CALL 0x26 3
#define DO 0x27 3
#define FRAME 0x28 3
#define FUNC 0x29 3
#define LINE 0x2A 3
#define MAKEA 0x2B 3
#define MAKELA 0x2C 3
#define PARAMS 0x2D 3
#define POPFL 0x2E 3

28
Harbour
FWH
#define POPL 0x2F 3
#define POPS 0x30 3
#define PRIVATES 0x31 3
#define PUBLICS 0x33 3
#define PUSHFL 0x34 3
#define PUSHFLR 0x35 3
#define PUSHI 0x36 3
#define PUSHL 0x37 3
#define PUSHLR 0x38 3
#define PUSHS 0x39 3
#define PUSHSR 0x3A 3
#define PUSHW 0x3B 3
#define SEND 0x3C 3
#define XBLOCK 0x3D 3
#define MPOPF 0x4A 5
#define MPOPM 0x4B 5
#define MPOPQF 0x4C 5
#define MPUSHA 0x4D 5
#define MPUSHF 0x4E 5
#define MPUSHM 0x4F 5
#define MPUSHMR 0x50 5
#define MPUSHP 0x51 5
#define MPUSHQF 0x52 5
#define MPUSHV 0x53 5
#define MSYMBOL 0x54 5
#define MSYMF 0x55 5
#define ABS 0x56 1
#define AND 0x57 1
#define ARRAYAT 0x58 1
#define ARRAYPUT 0x59 1
#define BREAK 0x5A 1
#define DEC 0x5B 1
#define DIVIDE 0x5C 1
#define DOOP 0x5D 1
#define EEQ 0x5E 1
#define ENDBLOCK 0x5F 1
#define ENDPROC 0x60 1
#define END_SEQ 0x61 1
#define EQ 0x62 1
#define EVENTS 0x63 1
#define FALSE 0x64 1
#define GE 0x65 1

29
Harbour
FWH
#define GT 0x66 1
#define INC 0x67 1
#define LE 0x68 1
#define LT 0x69 1
#define MINUS 0x6A 1
#define MULT 0x6B 1
#define NE 0x6C 1
#define NEGATE 0x6E 1
#define NOP2 0x6F 1
#define NOT 0x70 1
#define NULL 0x71 1
#define ONE1 0x72 1
#define OR 0x73 1
#define PCOUNT 0x74 1
#define PLUS 0x75 1
#define POP 0x76 1
#define PUSHRV 0x77 1
#define QSELF 0x78 1
#define SAVE_RET 0x79 1
#define TRUE 0x7A 1
#define UNDEF 0x7B 1
#define ZER0 0x7C 1
#define ZZBLOCK 0x7D 1
#define AXPRIN 0x7E 1
#define AXPROUT 0x7F 1
#define BOF 0x80 1
#define DELETED 0x81 1
#define EOF 0x82 1
#define FCOUNT 0x83 1
#define FIELDNAME 0x84 1
#define FLOCK 0x85 1
#define FOUND 0x86 1
#define FSELECT0 0x87 1
#define FSELECT1 0x88 1
#define LASTREC 0x89 1
#define LOCK 0x8A 1
#define RECNO 0x8B 1
#define BNAMES 0x8C 1
#define LNAMES 0x8D 1
#define SNAMES 0x8E 1
#define SRCNAME 0x8F 1
#define TYPE 0x90 1

30
Harbour
FWH
#define WAVE 0x91 1
#define WAVEA 0x92 1
#define WAVEF 0x93 1
#define WAVEL 0x94 1
#define WAVEP 0x95 1
#define WAVEPOP 0x96 1
#define WAVEPOPF 0x97 1
#define WAVEPOPQ0x98 1
#define WAVEQ 0x99 1
#define WSYMBOL 0x9A 1
#define AADD 0x9B 1
#define ASC 0x9C 1
#define AT 0x9D 1
#define CDOW 0x9E 1
#define CHR 0x9F 1
#define CMONTH 0xA0 1
#define CTOD 0xA1 1
#define DATE 0xA2 1
#define DAY 0xA3 1
#define DOW 0xA4 1
#define DTOC 0xA5 1
#define DTOS 0xA6 1
#define EMPTY 0xA7 1
#define QEXP 0xA8 1
#define EXPON 0xA9 1
#define INSTR 0xAA 1
#define INT 0xAB 1
#define LEFT 0xAC 1
#define LEN 0xAD 1
#define LOGQ 0xAE 1
#define LOWER 0xAF 1
#define LTRIM 0xB0 1
#define MAX 0xB1 1
#define MIN 0xB2 1
#define MODULUS 0xB3 1
#define MONTH 0xB4 1
#define REPLICATE 0xB5 1
#define ROUND 0xB6 1
#define SECONDS 0xB7 1
#define SPACE 0xB8 1
#define QSQRT 0xB9 1
#define STR1 0xBA 1

31
Harbour
FWH
#define STR2 0xBB 1
#define STR3 0xBC 1
#define SUB2 0xBD 1
#define SUB3 0xBE 1
#define TIME 0xBF 1
#define TRIM 0xC0 1
#define UPPER 0xC1 1
#define VAL 0xC2 1
#define VALTYPE 0xC3 1
#define WORD 0xC4 1
#define YEAR 0xC5 1
#define TRANS 0xC6 1
#define COL 0xC7 1
#define DEVPOS 0xC8 1
#define INKEY0 0xC9 1
#define INKEY1 0xCA 1
#define PCOL 0xCB 1
#define PROW 0xCC 1
#define ROW 0xCD 1
#define SETPOS 0xCE 1
#define SETPOSBS 0xCF 1

Harbour no implementará todos ellos porque nosotros queremos proveer la mayor libertad a los
programadores para extender y modificar Harbour tanto como se necesite.

Por ejemplo: El lenguaje Clipper usa opcodes para Row(), Col(), Upper(), Space(), Replicate(),
InKey(), Year(), Month(), etc... dónde nosotros sólo queremos llamar a una función estándar de
lenguaje C, que use el sistema extendido estándar y que pueda ser fácilmente modificada.

Así Harbour usará muchos menos opcodes que el lenguaje Clippper. Esto ayudará a tener un
compilador y una VM más simple y fácil de mantener.

He visto que, por ejemplo Clipper tiene un opcode llamado "PUSHWORD"(06), mientras Valkyrie
lo llama "PUSHW"(3B): Diferentes nombres, diferentes códigos. No es deseable que el pCode de
Harbour sea binario-compatible con Clipper ?. Si fuera así la VM de Harbour podría interpretar
código de Clipper y viceversa.

Los opcodes de Harbour están definidos en hbpcode.h Nosotros estamos tratando de usar
mnemónicos muy fáciles, así PUSHWORD parece más fácil que PUSHW. Los valores de los
opcodes son de poco valor porque ellos son sólo usados por una sentencia switch del lenguaje C
(en realidad hay una poderosa optimización la cual es usar el mismo pcode de los opcodes como

32
Harbour
FWH
un índice al array de punteros de las funciones de la VM, así la velocidad de ejecución de la VM
puede incrementarse. Clipper usa esto).

Nosotros no estamos implementando totalmente el modelo de OBJs del lenguaje Clipper (por ej.
para proveer identificadores de nombre de longitud mayor a 10 caracteres) así los OBJ de
Harbour no serán soportados por Clipper y viceversa.

33
Harbour
FWH

Asuntos Legales sobre las FAQ

Derechos (Copyright)

Este documento esta basado en las FAQs de David A. Pearson copyrighted (c) 1999, 2000, 2001
(con su autorización). Este compendio de preguntas más frecuentes (de sus siglas en inglés,
FAQ), es una evolución de distintos documentos en español hacia una sincronización multi-
idiomática, para mejor servir a su propósito.Algunas porciones del documento pueden ser
copyright de otros autores individuales.

Advertencia: Esta FAQ trata de estar sincronizada con la FAQ en inglés

(idioma oficial del Proyecto Harbour) aunque esto no


siempre es posible :) Alejandro de Gárate

Licencia

Este documento debe ser considerado como software libre, distribuido bajo los términos de la
Licencia Pública General, GNU version 2. Por detalles consulte el archivo COPYING.

Garantía

"Este programa es distribuido con la esperanza que le pueda ser útil, pero SIN NINGUNA
GARANTIA; aún sin la garantía implícita de COMERCIALIZACION O DESTINO PARA ALGÚN
PROPÓSITO PARTICULAR." Vea la Licencia Pública General, GNU para mayores detalles.

Marcas Registradas

Esta documentación hace a varias Marcas Registradas, que sólo son usadas con propósito de
referencia.

34
Harbour
FWH

Harbour

Qué es Harbour ?
Harbour es un compilador libre (gratis !) inter-plataforma para el lenguaje xBase, a menudo
referido como Clipper (el lenguaje que es implementado por el compilador CA-Clipper).
Especificamente Harbour esta diseñado para ser tan cercano al 100% de compatibilidad con CA-
Clipper (MR) como sea humanamente posible.La versión que se eligió para lograr tal
compatibilidad es la versión 5.2e internacional.
Esto no quiere decir que los agregados encontrados en la versión 5.3 no se pondrán dentro de
Harbour, esto simplemente refleja el hecho que muchos programadores de Clipper ven a la
versión 5.2e como la "última mejor" implementación de Clipper.
De ahora en más siempre que se haga referencia a CA-Clipper (MR) y no se indique otra cosa
estaremos hablando de esta versión (C52).Aunque se han agregado algunas funciones básicas
pertenecientes a la versión 5.3, que no alteran el diseño del compilador y que ya estaban
disponibles en lenguaje C y eran ampliamente utilizadas. Si las extensiones al lenguaje son
importantes para Ud. por favor siéntase libre para contribuir al proyecto.
El compilador de Harbour cumple la misma función que CLIPPER.EXE (MR).Tiene la ventaja que
puede generar código de lenguaje C, siendo así virtualmente compatible con miles de librerías y
programas. Se está trabajando en la opción de generar ejecutables para cada una de las
plataformas.Convierte archivos PRG ---> archivos "C"---------> archivos ejecutables archivos PRG
------------------------------> archivos ejecutables
Viene acompañado de librerías que contienen funciones equivalentes a las que acompañan a CA-
Clipper 5.2e Inernacional. Harbour se entrega con todo el codigo fuente (99% ANSI C) y archivos
make, y bat, así todo lo que se necesita hacer para tenerlo corriendo en su plataforma, es
construirlo y conectarlo a la interfaz correcta.
Hay archivos binarios precompilados si Ud. desea testear el compilador y no ir a través de los
pasos para construirlo.
Por qué desarrollar Harbour ?
CA-Clipper (MR) ha sido desde sus comienzos la herramienta preferida por miles de
programadores. Hay probablemente más razones para desarrollar harbour que los
desarrolladores que hay de Harbour.Para obtener un mejor entendimiento sobre por qué el
software libre es desarrollado Ud. podría querer leer "The Cathedral and the Bazaar" (en inglés
unicamente).Algunas de las causas que motivaron el desarrollo de Harbour fueron:
La desaparición de la posibilidad de nuevas versiones de CA-Clipper por discontinuación del
producto.
La dificultad de una migración fácil desde CA-Clipper bajo D.O.S. hacia un entorno windows.
Las distintas empresas que ofrecen alternativas de migración, han adaptado el lenguaje de
manera tal que se hace necesario el aprendizaje de práctimente un nuevo lenguaje de
programación.

35
Harbour
FWH
La falta de soporte real de la compañia propietaria ante conocidos bugs.
Que plataformas son soportadas por Harbour ?

Actualmente, Harbour no esta aún terminado, pero creará ejecutables para correr en forma
nativa en las siguientes plataformas:
Linux (todas las distribuciones)
DOS
Win 3.x
Win 9x, Win ME
Win NT 4.x, 5.x, Win 2000
OS/2

Quién esta desarrollando Harbour ?

Mucha gente. Hay un pequeño grupo de personas quienes pueden ser llamados el "equipo de
desarrollo del núcleo de Harbour", (graciosamente llamada la tripulación) pero la cantidad de
personas que esta contribuyendo al proyecto esta aumentando continuamente.Cualquiera que lo
desee puede unirse al equipo de desarrollo y, si Ud. tiene algo que ofrecer al proyecto será más
que bienvenido. Cualquiera que desee consultar la lista de desarrolladores lo puede hacer en el
sitio Web de Harbour y mirar en "tripulación".

Estado actual de Harbour

Para más información acerca del estado actual del proyecto harbour o si Ud. desea unirse para
su desarrollo, chequee en el sitio Web http://harbour-project.org (en inglés) el cual tiene
información actualizada acerca de los últimos cambios.

Cómo comenzó el proyecto harbour ?

La idea de un compilador de Clipper gratis y con código fuente disponible había estado flotando
por ahí por un largo tiempo.El tema a menudo se planteaba en el grupo de discusión:
comp.lang.clipper.El actual trabajo se inicio a principios de 1999 cuando Antonio Linares
comenzo una tarea para discutir algunas ideas acerca de desarrollar una gramática Clipper
usando Lex y YaccEl resto como se dice "es historia..."

A quién pertenece Harbour ?

36
Harbour
FWH

Nadie es propietario de Harbour, pero mucha gente tiene el copyright sobre porciones de
Harbour.

37
Harbour
FWH

Ayudando a desarrollar Harbour

Dónde puedo comenzar ?


La primera cosa que Ud. debería hacer es unirse a la lista de correo de los desarrolladores y leer
los mail por unos pocos días para tener una idea de que como van las cosas. Ud puede también
querer echar un vistazo a los archivos.
Qué compilador de C debería usar ?
Cual compilador de C Ud. desea usar ?Los desarrolladores de Harbour consideran GNU GCC es el
compilador soportado del proyecto Harbour, el uso del GCC para su plataforma elegida es
alentado.Sin embargo, Si Ud. desea usar un diferente compilador de C su contribución haría que
su trabajo sea más que bienvenido. Actualmente los siguientes compiladores y combinaciones de
plataforma son soportados por alguien en el equipo de desarrollo:
Microsoft Windows
GCC (CYGWIN)
GCC ( MINGW32)
Borland C/C++ 4/5/Builder
Microsoft Visual C++ 10/11/12
IBM Visual Age para C++
DOS 32bit
GCC ( DJGPP)
Watcom C/C++

DOS 16bit
Borland C/C++ 3.1
GNU/Linux
GCC (varias versiones).

OS/2
GCC ( EMX)
IBM C++

Macintosh
MPW
Instrucciones sobre cómo construir harbour con los compiladores de arriba deberían residir en el
directorio doc del árbol fuente de Harbour. Si esa documentación esta desaparecida por favor
considere preguntar acerca de ella en la lista de correo de desarrolladores y, una vez que Ud.
tenga la información, formatee y póngala en el directorio doc para ayudar a otros quienes
pueden desear preguntar lo mismo.

38
Harbour
FWH

Qué otras herramientas necesito ?


Para construir Harbour Ud. necesita las siguientes herramientas:
Un compilador de C. Por favor vea la seccion de FAQ titulada Qué compilador de C debería usar ?
para más detalles sobre cómo elegir un compilador de C.
Una utilidad make. La mayoría de las plataformas/compiladores dentro de Harbour hacen uso del
GNU make, algunos desarrolladores usan otras utilidades make, Ud. necesitará hablar con ellos si
Ud. desea ignorar el sistema de archivos make.Ud. debería ser capaz de encontrar el GNU make
en:
Microsoft Windows TODO: Proveer enlace.
DOS
ftp://ftp.cdrom.com/pub/simtelnet/gnu/djgpp/v2gnu/mak379b.zip
GNU/Linux
La mayoría (si no todos) las distribuciones GNU/Linux vienen con el GNU make. Si Ud. no puede
encontrar la utilidad make en sus sistema Ud. debería mirar en sus CDs de instalación y/o en el
sitio ftp de su distribución.
OS/2
ftp://ftp.leo.org/pub/comp/os/os2/leo/gnu/devtools/gnumake.zip
Macintosh
TODO: Proveer enlace
Una copia de flex:
Windows
Vea la página de descarga de harbour (en Otras descargas)
DOS
La distribucion DJGPP de herramientas GNU para DOS incluyen una copia de flex para DOS.
GNU/Linux La mayoría de las distribuciones GNU/Linux vienen con una copia de flex. Si Ud. no la
tiene instalada, Ud. debe instalarla desde el medio de destribución (floppy, CDROM, etc..).
OS/2
TODO: Proveer enlace
Macintosh
TODO: Proveer enlace
Una copia de bison:
Windows
Vea la página de descarga de harbour (en Otras descargas)
DOS
La distribucion DJGPP de herramientas GNU para DOS incluyen una copia de bison para DOS.
GNU/Linux La mayoría de las distribuciones GNU/Linux vienen con una copia de bison. Si Ud. no
la tiene instalada, Ud. debe instalarla desde el medio de destribución (floppy, CDROM, etc..).
OS/2
TODO: Proveer enlace
Macintosh
TODO: Proveer enlace

39
Harbour
FWH
Un cliente CVS para su plataforma. Por favor vea la seccion FAQ titulada Qué es el CVS y cómo
puedo yo usarlo ? para más detalles sobre la obtención del cliente CVS para su entorno.
Dónde puedo encontrar los fuentes ?
Hay 3 métodos de obtener las fuentes para Harbour, cual método Ud. use dependerá cuan
actualizado sienta Ud. que lo necesita.
El estado actual inestable
Un archivo de todos los fuentes del CVS está disponible diariamente a través del Servidor CVS de
SourceForge
Bajar desde: http://cvs.sourceforge.net/cvstarballs/Harbour-project-cvsroot.tar.gz .or favor este
advertido que esta es una versión inestable. Usando este código fuente podrían pasar toda clase
de cosas terribles, esto puede aún no compilar.Ud. ha sido advertido.
También note que lo de arriba es el backup de todos los archivos del CVS, esto incluye registros
de todos los cambios hechos al código fuente desde el principio del proyecto! Por favor note que
el archivo es un archivo "tar gzipeado" que contiene archivos de texto en formato Unix (los
fuentes). Esto no significa que no pueda trabajar en otras plataformas, lo hará es simple código
fuente, pero no se sorprenda si el código fuente luce divertido cuando use un editor de texto no
apropiado.Menos frecuente una copia de los fuentes (no un backup del CVS) está disponible en el
sitio Web de Harbour. Si Ud, sólo desea los fuentes y no una copia de backup de todo el CVS,
esto es lo que Ud. debería descargar.
El estado actual estable
Cada cierto tiempo, el estado actual de Harbour es hecho disponible desde la página de descarga
del sitio web del proyecto Harbour . Estos estados son referidos como liberaciones o "releases" y
son considerados estables, en el sentido que los fuentes compilan y que no hay errores
conocidos en el compilador, máquina virtual ó librería de ejecución.
Si Ud. gusta de jugar con software de calidad alfa, pero quiere sentirse seguro haciendolo,
entonces la liberación estable es para Ud.
Acceso Directo al CVS
El mejor y más directo método de obtener el código fuente es desde el servidor CVS. Este es
donde los desarrolladores de Harbour trabajan sobre los fuentes de Harbour (actualmente, todos
ellos trabajan en sus propias máquinas, este servidor les da a ellos, en efecto un directorio virtual
compartido).
Si Ud. intenta trabajar con Harbour construido desde el CVS mismo, Ud. debería realmente
considerar suscribirse a la lista de correo del desarrolladores .
Por favor note que si Ud. quiere ayudar a desarrollar Harbour entonces la última opción es la
mejor (y, a largo plazo, la única opción útil para todo lo concerniente).
Qué es el CVS y cómo puedo yo usarlo ?
Antes de proceder Ud. debería darle una buena leída a la introducción al CVS por Jim Blandy Leer
este documento podría ahorrarle a Ud. un montón de confusión más tarde.Para usar el servidor
CVS, Ud. primero necesita obtener una copia del software cliente CVS para su sistema operativo:

40
Harbour
FWH
Microsoft Windows Vea http://www.cyclic.com/cvs/windows.html para más detalles.
DOS 16bit/32bitVea la seccion DOS en http://www.cyclic.com/cvs/other.html.
GNU/Linux Muchas distribuciones vienen con el cliente cvs empaquetado como parte de la
distribucion. Si Ud. no lo tiene instalado chequee sus CDs de instalación ó chequee el sitio ftp
para la distribución en cuestion.
OS/2 http://www.cyclic.com/cvs/os2.html
ftp://ftp.leo.org/pub/comp/os/os2/leo/gnu/devtools/cvs110.zip
Macintosh Vea http://www.cyclic.com/cvs/mac.html para más detalles.
Otros Si Ud. esta construyendo harbour con un sistema operativo no listado, entonces por favor
contacte al mantenedor de las FAQ, con detalles completos así esta lista puede ser actualizada.
Una vez que Ud tenga su cliente CVS instalado, Ud. puede ganar acceso anónimo al servidor CVS
de Harbour. Dependiendo de la plataforma, la primera cosa que Ud. necesita hacer es setear la
variable de entorno CVSROOT a:
:pserver:anonymous@cvs.harbour-project.sourceforge.net:/cvsroot/harbour-
project
En adición a lo de arriba algunos entornos pueden requerir información extra. Por ejemplo, en
DOS, windows y OS/2, los clientes CVS necesitan de dos variables de entorno extras,
HOMEDRIVE y HOMEPATH .Estas 2 variables de entorno le dicen al cliente CVS donde estará el
código fuente localmente. Por ejemplo, si su directorio de desarrollo Harbour esta en
S:\FREESOFT\HARBOUR
Ud. ha seteado:

SET HOMEDRIVE=S
SET HOMEPATH=\FREESOFT\HARBOUR\

Usuarios de cliente para windows han reportado que la variable de entorno HOMEPATH debe
comenzar y terminar con una barra de separación de directorio (/). Usuarios del cliente DOS han
reportado que la variable de entorno HOMEDRIVE debe comenzar y terminar con una barra de
separación de directorio (/).Usuarios del cliente DOS han reportado que la variable de entorno
HOMEDRIVE debe terminar con un punto y coma (;) segúrese que su directorio esta creado y
cámbiese dentro de él. Entonces ejecute: cvs login
y presione <Enter> cuando sea preguntado por una password. Ahora ejecute:

cvs extract -P harbour

para obtener una copia del repositorio del CVS de Harbour (usuarios del cliente DOS han
reportado que no tienen el comando extract y que el comando checkout debe ser usado en su
lugar).

Nota: Los comandos CVS y los directorios son sensitivos a mayúsculas: harbour debe estar en
todos en minúsculas (también note que en SourceForge Harbour es conocido como "harbour-
project".

41
Harbour
FWH
Luego, cuando Ud. desea obtener los cambios del CVS, Ud. puede hacer una de las dos cosas:
Repetir el comando extract desde su directorio de Harbour.
Desde su directorio Harbour ejecutar cvs update .
Si Ud. tiene problemas después de leer lo de arriba por favor considere leer Introducción al CVS y
también la documentación para el cliente CVS que Ud. ha instalado. Si, después de leer ambos
documentos, Ud. esta todavía teniendo problemas Ud. debería enviar un mensaje pulido a la lista
de correo de los desarrolladores detallando su plataforma, entorno, todas las etapas que Ud.
realizó y la exacta naturaleza del problema.

Cómo puedo construir Harbour ?


El método usado para construir Harbour puede diferir de plataforma a plataforma y aún de un
juego de herramientas, a otro juego de herramientas.Por favor haga una buena lectura de los
archivos en el directorio DOC de las fuentes de Harbour.

Sobre qué se necesita trabajar ?


Una lista TO-DO (PARA-HACER, PENDIENTE)Vea todo.txt en el directorio raíz de los fuentes de
Harbour.Seriamente, la única cosa que los desarrolladores de Harbour estan extrañando en este
momento es algún tipo de sistema para rastrear las tareas que necesitan terminarse y las que
han sido terminadas. Algunos esfuerzos han sido hechos para documentar cuáles funciones
estandar han sido implementadas
Si Ud. esta realmente mirando para adherirse a algún desarrollo de Harbour, Ud. haría bien en
suscribirse a la lista de correo de los desarrolladores de Harbour , Permanecer allí por unos pocos
días hasta obtener una idea de que es lo que esta pasando y entonces comenzar contribuyendo
con la fijación de errores (siempre es una buena forma de empezar) ó anunciar su intención de
trabajar en una entrada en la lista TODO ó simplemente preguntar qué necesita hacerse.

Hay algun lineamiento de desarrollo ?


No, tal como eso no. Pero si ud. esta yendo a preparar algo de código para Harbour Ud. puede
considerar las siguientes observaciones:
Harbour esta escrito en ambos C y en si mismo. Tanto como sea posible nosotros permanecemos
con ANSI C (algun código no ANSI C, debería ser guardado con directivas de pre-procesador )
Demasiados comentarios son mejor que demasiado pocos.
Una onza de testeo puede salvar toneladas de depuración. Por favor asegurese que, cuando Ud.
cambia código, Ud puede compilar y usar Harbour, antes de enviar cambios.
El idioma Inglés es lo más cerca que nosotros tenemos a un lenguaje común. Donde sea posible
por favor, codifique, comente y documente en Inglés.
Por favor no haga uso de código, que Ud. no tenga derecho de usar. Por ejemplo no copie los
archivos de encabezados (header) de CA-Clipper para hacer archivos de encabezados de
Harbour.
Diviértase.

42
Harbour
FWH

Esta bien extender el lenguaje con algunas caracteristicas ?


Como regla, no. Como establecimos antes Harbour esta diseñado, tanto como sea posible, para
ser compatible con el compilador CA-Clipper 5.2e (con algo de 5.3 puesto donde tenga sentido).
Hasta que sea el tiempo donde todo este hecho en el frente de la compatibilidad, los
desarrolladores de Harbour podrían preferir mantener el lenguaje tan "puro" como sea posible.Si
Ud. tiene una idea, para algo que Ud. piensa que debe ser agregado al lenguaje por favor
siéntase libre de hacerlo, en lista de correo de los desarrolladores de Harbour.
Por favor note que emails que siguen la linea de "Yo quiero la característica X porque me gusta
tenerla ".Esto se puede decir que "no corta mucho hielo", ó no tiene mucha aceptación.Emails al
efecto que actualmente ofrecen un linea de trabajo pudieran "cortar un poco de hielo".
Preferiblemente Ud. vendrá a la lista con un caso bien pensado y documentado para la adición de
una nueva extensión al lenguaje y Ud. será bien recibido para discutir la propuesta.También no
se ofusque si éste es rechazado, esto es software libre después de todo, si Ud. realmente siente
que la extensión es necesaria para Ud., puede mantener un patch en paralelo ó, si Ud. realmente
debe (aunque nosotros preferimos que Ud. no lo haga), podría mantener una distribución
separada de Harbour.

Qué con todas esas extensiones al lenguaje, entonces ?


Hey, no venga con esa, no son tántas ! Seriamente ?, OK, Ud tiene todos los derechos. Harbour
incluye algunas extensiones al "estandar" Clipper pero Ud. notará que esas extensiones son, en
un todo, algún reemplazo para "cosas que debe tener", de aditamentos de terceras partes que la
gente usaba en CA-Clipper,o ellas son una característica que es nativa a otras implementaciones
del compilador de Clipper.

No puedo programar en C, cómo puedo ayudar en el desarrollo ?


Qué hay acerca de hacer algo de codificación en Clipper ?(el lenguaje) Partes de Harbour han
sido escritas en sí mismo. Por qué no mirar en qué necesita hacerse en la librería de ejecución y
ver que puede ser codificado usando código normal de Clipper.No se preocupe acerca de la
velocidad por el momento, las chances son que las funciones en las que Ud. esta pensando no
son críticas en cuanto a velocidad, más aún, alguien puede venir y usando su implementación
como diseño de base, lo re-codifique en C para obtener velocidad extra (si re-codificándolo ello
lo hará más rápido).
Tengo mucho código Clipper, yo puedo donarlo, Que debo hacer ?
Harbour no es un proyecto para crear un repositorio de código Clipper libre, a menos que su
código directamente implemente una función de libreria de ejecución del núcleo de Clipper, ésta
probabemente no sea de mucho uso en Harbour.Sin embargo, no deje que su código se
desperdicie, por qué no considerar comenzar una librería de software libre para Clipper, que sea

43
Harbour
FWH
no-compilador específica pero que sea inter-plataforma y que pueda beneficiar a los
programadores usando alguna de las implementaciones de compiladores de Clipper?

No puedo enviar código Clipper tampoco, todavía puedo ayudar ?


Ud. puede ayudar en un sinnúmero de formas. La documentación es un area donde los
voluntarios son necesitados (es un trabajo sucio pero alguien tiene que hacerlo). Tal vez Ud.
pueda ayudar a crear y mantener la lista TODO (PORHACER) ?Qué tal acerca de crear y
mantener vistazos binarios de cada una de las liberaciones ?Para ponerlo simple, si Ud.
realmente quiere ayudar al desarrollo de Harbour , Ud. encontrará la forma.

44
Harbour
FWH

Listas de correo de Harbour

Hay una lista de correo de desarrolladores ?


Sí, ella se encuentra en harbour@lists.harbour-project.org. Pero es únicamente en idioma inglés.
Para subscribirse a la lista de correo de desarrolladores simplemente envíe un email a harbour-
request@lists.harbour-project.org y en el email ponga "subscribe". Alternativamente Ud. puede
subscribirse via la World Wide Web en http://www.matrixlist.com/mailman/listinfo/harbour/.

Hay una lista de correo de usuarios ?


Si, ella se encuentra en harbourusers@lists.harbour-project.org. Pero es únicamente en idioma
inglés Para subscribirse a la lista de correo de usuarios de Harbour simplemente envíe un email a
harbourusers-request@lists.harbour-project.org y en el email ponga "subscribe".
Alternativamente Ud. puede subscribirse via la World Wide Web en
http://www.matrixlist.com/mailman/listinfo/harbourusers/ .

Hay una lista de correo de discusión general ?


Si, ella se encuentra en harbourtalk@lists.harbour-project.org. Pero es únicamente en idioma
inglés Para subscribirse a la lista de correo de discusion de Harbour simplemente envíe un email
a harbourtalk-request@lists.harbour-project.org y en el email ponga "subscribe".
Alternativamente Ud. puede subscribirse via la World Wide Web en
http://www.matrixlist.com/mailman/listinfo/harbourtalk/ .

Cómo removerme de la lista de correo ?


Cada email que viene desde las listas de correo de Harbour contiene instrucciones para de-
subscribirse. La información se encuentra en el encabezado del email. Para aquellas personas con
MUAs que no les permiten leer esa vital información aqui estan los encabezados al momento de
escribir esto:
harbour (desarrolladores)
List-Unsubscribe:
http://www.matrixlist.com/mailman/listinfo/harbour,
mailto:harbour-request@lists.harbour-project.org?
subject=unsubscribe
harbourusers (usuarios)
List-Unsubscribe:
http://www.matrixlist.com/mailman/listinfo/harbourusers ,
mailto:harbourusers-request@lists.harbour-project.org?
subject=unsubscribe

45
Harbour
FWH
harbourtalk (discusion)
List-Unsubscribe:
http://www.matrixlist.com/mailman/listinfo/harbourtalk ,
mailto:harbourtalk-request@lists.harbour-project.org?
subject=unsubscribe
No importa en que lista de correo este Ud., es siempre una buena idea no subscribirse nunca a
menos que Ud. sepa como de-subscribirse. Esto puede ser tan simple como conservar el mensaje
de confirmación que muchas listas envian (ellas a menudo incluyen información sobre cómo de-
subscribirse).

Hay alguna regla en las listas ?


No hay reglas como tales pero Ud. podría considerar los siguientes lineamientos:
Trate de mantenerse en el tema. La developer's list es para el diseño de Harbour y cuestiones de
desarrollo, la user's list es para discusión del uso de harbour y la discussion list es para discusión
general acerca de Harbour.
Trate de no enviar binarios. Algunas veces es necesario en la lista de desarrollo, de ser así, trate
de mantener el tamaño reducido, la lista de desarrolladores tiene Mucho movimiento.
Apéguese a un email formateado como texto pleno, desactive cualquier "característica" HTML, el
contenido es con mucho más importante que la forma en las listas de Harbour.
Apéguese al Inglés. Esto no es una cuestión alrededor de UK/US/AU es sólo que el Inglés es más
ampliamente comprendido que cualquier otro idioma disponible en las listas. Si Ud. usa el Inglés
Ud. será leido por un mayor número de personas.
No use el tema (subject) como el mensaje. Mensajes de lineas unicas donde el mensaje esta en
el tema no contienen demasiada información. Sea explicativo. Ud. tendrá mejores chances de ser
entendido.
Use el tema para dar una idea del mensaje. Un tema descriptivo es más adecuado para atraer la
atención del ojo de la persona a la cual Ud. desea llegar.
Lo de arriba no es una lista exhaustiva de lineamientos, Ninguna de las reglas de arriba
actualmente es "obligatoria" (aunque Ud. podria encontrar uno ó dos personas sugieriendo
cortesmente que considere Ud. ajustarse a ellas). Generalmente hablando las reglas en las listas
de Harbour son aquellas que se aplican a la buena composicion en general

Estan las listas archivadas en algún lugar ?


Ud. puede acceder a la lista de desarrolladores en http://www.matrixlist.com/pipermail/harbour/,
la lista de usarios en http://www.matrixlist.com/pipermail/harbourusers/ y la lista de discusión
general en http://www.matrixlist.com/pipermail/harbourtalk/.

Hay algún grupo de noticias para Harbour ?

46
Harbour
FWH
No, no hay ningún grupo de noticias (newsgroups) para Harbour. Sin embargo, Harbour es un
compilador compatible con Clipper lo cual significa que Harbour esta en tema para el grupo
Usenet comp.lang.clipper.

47
Harbour
FWH

Instalación de Harbour

Dónde puedo obtener binarios pre-construidos ?

Mientras Harbour todavía esta en desarrollo el método preferido para la obtención de un binario
de Harbour es descargar el código fuente y construirlo Ud. mismo porque esto ayuda al
desarrollo Sin embargo, los desarrolladores de Harbour también aprecian los esfuerzos de la
gente quien no quiere desarrollar Harbour pero desean testearlo y reportar defectos.
Para esto algún alma bondadosa mantiene los binarios de Harbour que están listos para ser
instalados. Por favor tenga en mente que el siguiente puede no ser el último corte de Harbour
(Harbour cambia cada hora mientras esta en esta fase temprana de desarrollo) y que algunas
plataforms pueden ser mejor soportadas que otras.
La página de descarga en el sitio web de Harbour contiene un número de binarios construidos
con la última versión estable.
David G. Holm esta manteniendo un repositorio de binarios construidos de estables (y algunas
veces, en paralelo inestables) liberaciones en http://www.jsd-llc.com/Harbour-Project/.
Si Ud. no puede encontrar binarios para su entorno via los links de arriba entonces esto significa
que alguien no está contribuyendo para su entorno, quizás Ud. pueda ocuparse de esta parte y
llenar ese vacío ?

Cómo puedo instalar los archivos binarios pre-construidos ?


1. Descargar los archivos binarios correspondientes a la arquitectura (plataforma)
deseada.

2. Deszipear los archivos a sus respectivos subdirectorios.

3. Crear un archivo.BAT para el seteado de variables necesarias para Harbour y así


automatizar el proceso.

Setear la variable de entorno HB_ARCHITECTURE de acuerdo a la plataforma elegida


en alguna de las siguientes:
- dos
- w32
- linux
- os2
Setear la variable de entorno HB_COMPILER de acuerdo a la plataforma elegida en
alguna de las siguientes:
Cuando HB_ARCHITECTURE=dos
- bcc16 (Borland C++ 3.x, 4.x, 5.0x, DOS 16-bit)

48
Harbour
FWH
- djgpp (Delorie GNU C, DOS 32-bit)
- rxs32 (EMX/RSXNT/DOS GNU C, DOS 32-bit)
- watcom (Watcom C++ 9.x, 10.x, 11.x, DOS 32-bit)
Cuando HB_ARCHITECTURE=w32
- bcc32 (Borland C++ 4.x, 5.x, Windows 32-bit)
- gcc (Cygnus/Cygwin GNU C, Windows 32-bit)
- mingw32 (Cygnus/Mingw32 GNU C, Windows 32-bit)
- rxsnt (EMX/RSXNT/Win32 GNU C, Windows 32-bit)
- icc (IBM Visual Age C++, Windows 32-bit)
- msvc (Microsoft Visual C++, Windows 32-bit)
Cuando HB_ARCHITECTURE=linux
- gcc (GNU C, 32-bit)
Cuando HB_ARCHITECTURE=os2
- gcc (EMX GNU C, OS/2 32-bit)
- icc (IBM Visual Age C++ 3.0, OS/2 32-bit)

La variable de entorno HB_GT_LIB es automaticamente seteada cuando se elige la


arquitectura

- gtstd (Standard streaming) (para todas arquitecturas)


- gtdos (DOS console) (para arquitectura dos )
- gtwin (Win32 console) (para arquitectura w32 )
- gtos2 (OS/2 consola) (para arquitectura os2 )
- gtpca (PC ANSI console) (para todas arquitecturas)
- gtcrs (Curses console) (para linux, arquitectura 32)
- gtsln (Slang console) (para linux, arquitectura 32)

Poner en este BAT una referencia a los archivos ejecutables de harbour: harbour.exe,
hbpp.exe,
hbrun.exe, etc, en la variable de entorno PATH
por ej: PATH=c:\dos;c:\hb034\bin
Poner una referencia a los archivos header (*.CH) de Harbour (igual que Clipper) en la
variable de entorno

INCLUDE
Se pueden usar otras variables de entorno para configurar aún más el los procesos de
compilación y linkedición.
Por ej. Setear la variable C_USR para indicar que terminal de video va a usar el usuario.
PRG_USR Opciones adicionales para el compilador Harbour
C_USR Opciones adicionales para el compilador de C
L_USR Opciones adicionales para el linker
Entonces el archivo (por ejemplo) hb_16bit.bat quedaría:

49
Harbour
FWH
----------------------------------------------------------
SET INCLUDE=c:\tu_compilador_de_c\include;c:\hb034\include
SET LIB=C:\tu_compilador_de_c\lib;
SET HB_ARCHITECTURE=dos
SET HB_COMPILER=djgpp
SET C_USR=-DHARBOUR_USE_DOS_GTAPI
PATH =C:\WINDOWS;c:\tu_compilador_de_c\bin,c:\hb034\bin;
----------------------------------------------------------

4. Grabar el archivo.bat y probar si encuentra al compilador tecleando: harbour <Enter>


Debe verse una pantalla similar a cuando tecleas: clipper <Enter>
5. Cambiar al subdirectorio C:\donde_resida_harbour\tests
Teclea run_prg ac_test <Enter>
Se ejecutara el archivo ac_test.prg, ejemplo de achoice que esta en ese
subdirectorio, nótese que no se ha creado un archivo.exe sino que se crea un archivo
de opcodes.hrb al invocar al compilador harbour.exe con el parametro /gh que es
interpretado posteriormente por el intérprete
hbrun.exe
6. Para generar un ejecutable deberá estar perfectamente configurado el compilador de
lenguaje C (se aconseja probarlo por separado).
7. Finalmente se puede generar el ejecutable ac_test.exe (si todo esta correcto
tecleando:
bld ac_test <Enter>
Nota:
El compilador Harbour todavía esta en una etapa alfa, ni siquiera entróen fase beta. Esta aún en
etapa de desarrollo y por tanto no es apta para aplicaciones comerciales.

Hay dos formas de usar Harbour:

 Compilando los *.PRG a archivos de lenguaje C y luego usando un compilador de C y un


linkeador, convertirlos en ejecutables.
 b) Compilando los *.PRG a un formato de pcodes (*.HRB ) y luego con un programa que
hace de intérprete (HRBRUN.EXE) ejecutar las instrucciones de este archivo. Aunque
este intérprete no funciona en todas las plataformas (tiene algunos bugs).

La compilación directa de *.PRG a archivos ejecutables recién está en una etapa inicial, hay
algunos ejemplos que funcionan, pero todavía falta trabajo. Además los archivos de índices
todavía no funcionan a pleno, no existe todavía soporte para índices NTX, pero sí para CDX,
aunque parcial.

Cómo usar Harbour a partir de los archivos fuentes ?

50
Harbour
FWH

Consulte Elementos de Harbour

51
Harbour
FWH

Preguntas generales de Harbour

Cuando será terminado Harbour ?

"Cuando esté terminado". Seriamente, Harbour estará terminado cuando este terminado. Si la
velocidad de desarrollo de Harbour no es suficientemente rápida para Ud., Ud. puede siempre
puede contribuir con algo al proyecto para que vaya más rápido. Esas contribuciones pueden ser
código, documentación, máquias más rápidas para los desarrolladores claves (aunque sospecho
que una provisión gratis de pizza podría ser más bienvenida) ó aún una oferta de empleo para
uno ó más desarrolladores para trabajar en Harbour todo el tiempo.

Son las aplicaciones <atributo> que en CA-Clipper ?

O, para ponerlo de otra forma, podrán ser sus aplicaciones más grandes, pequeñas, lentas,
rápidas, sexies, etc... Generalmente, al menos en esta etapa de la vida de Harbour, cualquier
pedazo de código dado que puede ser compilado con Harbour y con CA-Clipper, sobre la misma
máquina y con el mismo entorno (no podría hacerse una comparación de otra manera, no es
cierto?) correrá más lento y probablemente sea "más grande" cuando es compilado con Harbour.
Lo mismo es probablemente cierto cuando comparamos código compilado con Harbour con otros
compiladores compatibles con Clipper.
Las razones para esto son muchas y variadas y, como son señaladas en muchos lugares en este
documento, Harbour esta todavía en una etapa temprana de su vida y el continuo desarollo y la
compatibilidad con Clipper son de la mayor importancia. La cuestión de "performance" será
tratada cuando sea más apropiado hacerlo, y cuando la gente este disponible para dedicarse a
ello.
Como siempre, si la perfomance de Harbour es un problema para Ud. ahora y Ud. desea ver que
Harbour cumple con sus espectativas entonces, las contribuciones hablan más fuerte que los test
de velocidad.

Qué ventajas tiene Harbour sobre otros compiladores de Clipper ?

La principal ventaja de Harbour sobre otros compiladores de Clipper es que éste es software
libre. Harbour también intenta remover algunas de las limitaciones impuestas por la
implementación de base, pero el alcance de esto dependerá de la plataforma elegida por Ud.
Los desarrolladores de Harbour no hacen ninguna exclamación acerca si Harbour es mejor ó peor
que alguna otra implementación del lenguaje, sin embargo, al mismo tiempo, cada desarrollador
individual probablemente puede cantar loas dependiendo del area de Harbour donde él haya
estado trabajando.

52
Harbour
FWH
Más importante, pruebe Harbour, decida por sí mismo por qué este tiene ventajas para Usted.
Qué ventajas tienen otros compiladores de Clipper sobre Harbour?

Actualmente las ventajas que otros compiladores de Clipper tienen sobre Harbour son:
Ellos estan disponibles y funcionando (para distintos valores de "funcionando").
Ellos son soportados.
Ellos estan documentados.
Ellos, en algún grado, le dan a Ud. alguien a quien quejarse.
A medida que transcurre el tiempo la mayoría de las ventajas de arriba se irán acortando, Note
que el proceso de documentación esta bien encaminado y que el soporte es simplemente un
envio a comp.lang.clipper. La única ventaja que será difícil de superar es la última de la lista.
Estoy seguro que los usuarios de otros compiladores, sin mencionar algunos de sus autores,
sienten que hay también otras ventajas. Esto es correcto. Harbour no es un ejercicio para
remover ó reemplazar esos compiladores. Harbour es un esfuerzo para complementar la lista de
compiladores de Clipper con una oferta de software libre.

Soportará Harbour los productos de terceros existentes para CA-Clipper


?

No, pero la de arriba es la pregunta equivocada para hacerse. La pregunta a hacerse es "existirán
productos de terceras para CA-Clipper que soporten Harbour ?", esa es la pregunta que Ud.
debería hacer al autor del producto.
Vea el sitio web de Harbour para detalles de qué productos de terceros esta siendo desarrollados
actualmente para Harbour ó intentan soportar harbour en un futuro cercano.

Es Harbour una herramienta de desarrollo para Windows ?

No, Harbour es compilador multi-plataforma CA-Clipper compatible, este puede ser usado para
desarrollo en cualquier plataforma soportada.

Qué plataformas son soportadas por Harbour ?

No hay una lista definitiva de las plataformas soportadas debido a que cualquier plataforma
puede ser soportada si alguien es para hacer que Harbour funcione en él. Al tiempo de escribir
esto, Harbour compila y se ejecuta en las siguientes plataformas: - MS-DOS y Win 3.x

53
Harbour
FWH
(temporariamente fuerra de servicio) - MS-Windows 9x, NT 3,5x, 4.0, Win ME, WWin 2000 -
OS/2 - GNU/Linux (todos las distribuciones) <

54
Harbour
FWH

Punteros y Enlaces
La siguiente es una coleción aleatoria de punteros y enlaces que tratan temas conectados con
Harbour y el desarrollo de Harbour recolectados por Dave Pearson. Los enlaces no aparecen en
ningún orden particular y ninguno de los enlaces es en modo alguno una aprobación al sitio de
destino por el equipo de desarrollo de Harbour.

Enlaces relacionados con Harbour


Página principal de Harbour ,Archivo de la lista de correo de desarrollo de Harbour ,Archivo de la
lista de correo de usuarios de Harbour ,Archivo de la lista de correo de discusión de
Harbour ,Página del Proyecto Harbour de David G. Holm (incluye archivos fuentes y binarios de
las recientes construcciones de Harbour) ,Página de Harbour de Dave Pearson ,Página de
Harbour de Alejandro de Gárate (en español)
Artículos sobre Harbour
Una gentil introdución a la implementación de fuentes abiertos del lenguaje Clipper.

Enlaces a Herramientas de desarrollo libres (en cualquier sentido de la


palabra)
GCC ,DJGPP - GCC para DOS ,CYGWIN - GCC para MS-Windows ,EMX - GCC para OS/2 ,Apple
MPW tools,GNU make ,GNU make para DOS ,GNU make para OS/2 ,Compilador C/C++ gratis de
Borland
Enlaces relacionados con Clipper
comp.lang.clipper ,The Oasis ,Otras implementacioes de compiladores de Clipper ,x2c - Summer
'87 compatible compiler ,FlagShip - Compilador Clipper 5.x compatible para uso en Un*x ,Xbase+
+ - Compilador Clipper 5.x compatible para uso en Windows y OS/2 .Xbase - librería C++ gratis
para manejo de archivos DBF. ,
Enlaces relacionados con software libre.
The Free Software Foundation ,El Proyecto GNU ,OpenSource ,La Catedral y el
Bazaar ,Homesteading the Noosphere ,The Magic Cauldron ,Copyleft ,Definición de software libre
de la Free Software Foundation (FSF) ,The GPL ,Lesser GPL,Razones para no usar la LGPL ,Lista
de licencias de software libre / código fuente abierto ,OpenSources ,SourceForge ,,

Otros enlaces útiles


comp.lang.c FAQ
CVS
Introduccióon al CVS por Jim Blandy ,CVS Bubbles, ,CVS--Concurrent Versions System .

55
Harbour
FWH

Asuntos Legales sobre Software y Harbour

Que es software libre (free software) ?

En general el término software libre es una frase para describir software que viene con ciertas
libertades, el libre no habla acerca del precio, esto habla acerca de sus libertades para usar el
software. Una sugerencia común es que Ud. piense en "libertad de palabra" en lugar de "cerveza
libre".
Vea http://www.gnu.org/philosophy/free-sw.html para obtener la definición de "programa libre"
de la FSF (Free Software Foundation) Fundación para el software libre. Un término relacionado es
"OpenSource", algo así como código fuente disponible, Ud. puede encontrar más acerca de la
idea de OpenSource en Ud. pudo también notar que la FSF no considera "OpenSource" y "Free
Software" que sean la misma cosa, vea http://www.gnu.org/philosophy/free-software-for-
freedom.html para más detalles.

Entonces Harbour es del dominio público ?


No, Harbour no es del dominio público. Harbour es un trabajo registrado con derechos de autor y
Ud. debería respetar esos derechos de autor como Ud. lo haría con otros derechos (copyright).
Cada uno de los autores de Harbour ha puesto su código bajo la licencia elegida por Harbour,
actualmente esta licencia es la GPL y/o con la excepción de Harbour.

Qué es la GPL ?
La GPL es la licencia del sistema GNU, esta es una licencia de software libre. Ud. pudo también
escuchar de ella referida como Copyleft. La GPL es actualmente la licencia bajo la cual las partes
de Harbour son liberadas, otras partes de Harbour estan bajo la GPL más la excepción de
Harbour.

Por qué fue la GPL elegida como la licencia para Harbour ?


Esta es realmente una cuestión que debe ser preguntada a cada uno de las personas que tienen
derechos (copyright) sobre Harbour. Una respuesta simple podría ser que la licencia GPL esta
vista como una de las licencias más restrictivas del software libre y por esta razón más que por
otra, esta parece dar la máxima libertad y al mismo tiempo el grado correcto de control sobre el
uso y distribución.
Por favor note que la licencia final elegida por el equipo de Harbour puede diferir de la actual
elección (cualquier cambio en la licencia será bién discutido y publicitado), Por favor también
tenga en mente que cualquier cambio no será una licencia "un-free", solamente una licencia que
mantenga a Harbour libre pero que no impacte sobre el código compilado con Harbour.

56
Harbour
FWH

Qué es la excepción de Harbour ?


Hay una pequeña estratagema en lo que se refiere al uso de la GPL como la licencia para
Harbour.Harbour viene en varias partes, estas pueden ser bien descriptas como: el compilador
(incluyendo el pre-procesador), la máquina virtual y la librería de ejecución. La GPL dictamina
que:
 Cualquiera distribuyendo versiones binarias del código GPLd debe hacer una oferta de
proveer la fuente.
 El código enlazado contra el código GPLd debe también caer bajo la licencia GPL.
El incumplimiento de esto es una infracción a la licencia. En términos de Harbour esto significa
diferentes cosas dependiendo sobre cual porción de Harbour Ud. esta considerando.El compilador
en sí mismo puede estar bajo la GPL, esto no es (actualmente) parte de la ejecución y así no es
un problema.
Esto NO es cierto para la VM y la RTL porque ellas son enlazadas dentro de su aplicación y así
podría requerir que su código sea distribuido bajo una licencia compatible. Mientras los
desarrolladores de Harbour les gustaría verlo a Ud. desarrollar software libre ellos han decidido
que sea Ud. quien tome esta decisión. Para resolver este problema los desarrolladores han
empleado la "Excepción Harbour".Esta idea viene de la excepcion a la GPL usada por el programa
guile. En efecto, la excepción establece que Ud. debe observar la GPL excepto cuando el código
en cuestión esta siendo usado como la la VM y la RTL de una aplicación compilada con Harbour.
El enunciado de la excepción actualmente dice:

"La excepción es que, si Ud. enlaza (link) la Librerías de Harbour con otros archivos
para producir un ejecutable, esto por sí mismo no causa que el ejecutable resultante
sea cubierto por la Licencia Pública General GNU.
El uso de ese ejecutable por parte suya no esta en ninguna forma restringido, en
cuenta del enlazado del código de librería de Harbour dentro de él.
Esta excepción sin embargo, no invalida algunas otras razones por las cuales el archivo
ejecutable podría estar cubierto por la Licencia Pública General GNU.
Esta excepción se aplica: solamente al código liberado por el Proyecto Harbour bajo
el nombre "Harbour". Si Ud. copia código desde otro Proyecto Harbour ó desde
alguna liberación de la Fundación de Software Libre, dentro de una copia de Harbour,
tal como la Licencia Pública General lo permite, la excepción no se
aplica al código que Ud. agrega de esta forma.
Para evitar engañosa alguien con el estado de estos archivos modificados, Ud. debe
borrar el aviso de excepción de ellos.
Si Ud. escribe modificaciones de su propia creación para Harbour, es su elección,
cuándo permitir que esta excepción se aplique a sus modificaciones. Si Ud. no desea
eso, borre el aviso de excepción."

57
Harbour
FWH
Por favor note que la escritura original de la excepción estaba basada en una versión anterior de
la excepción de guile. Aquella versión de la excepción usaba menos palabras y era menos clara.
Las palabras de aquella versión eran:

"La excepción es que si Ud. enlaza (link) la Librería de Ejecución Harbour (HRL =
Harbour Runtime Library) y/o la Máquina Virtual Harbour (HVM = Harbour Virtual
Machine) con otros archivos para producir un ejecutable, esto por sí mismo no causa
que el ejecutable resultante sea cubierto por la Licencia Pública General (GNU). Su uso
de ese ejecutable no esta en ninguna forma restringido en cuenta del enlazado de la
HRL y/o del código HVM dentro de él."

Los fuentes de Harbour están siendo convertidos a la nueva excepción a medida que las personas
que mantienen derechos de autor sobre esos fuentes, hagan los cambios. La intención es que
cada porción de los fuentes que haga uso de la excepción de harbour use la versión más
explicativa.
Como se señaló anteriormente, el enunciado de la excepción de la elección actual de la licencia
puede cambiar en algún punto en el futuro.
8.6 Entonces por qué Uds. no usan la LGPL ?
Dada la situación de arriba puede ser razonable preguntar por qué los desarrolladores de
Harbour no eligieron usar la LGPL en su lugar ?. a razón simplemente viene de los requerimientos
de la LGPL y que pueden ser razonablemente preguntado a cualquiera quien desee hacer uso de
Harbour.
La LGPL requiere que cualquier distribución binaria del código LGPLd (en otras palabras, una
aplicación compilada con Harbour y enlazada contra la HVM y RTL) debería ser distribuido en un
método que permita al usuario re-enlazar (re-link) la aplicación contra diferentes y/o copias
posteriores del código bajo la LGPL. Este es un requerimiento irrazonable e impracticable tanto
que los desarrolladores de Harbour estan preocupados. Para la mayor parte, esto podría estar
bién en plataformas donde una aplicación puede ser enlazada contra una versión dinámica de la
VM y la RTL pero algunas plataformas que no soportan el enlazado dinámico (PC/MS/DR/
Open/Free-DOS por ejemplo) podrían efectivamente ser impedidos del uso de Harbour. Los
desarrolladores de Harbour consideran que esto es una reducción a la libertad y esto no es
aceptable para el software libre.

Serán mis aplicaciones afectadas por la GPL?


Posiblemente
Creo que no es la respuesta que Ud. estaba esperando. Pero no se preocupe tampoco es la
respuesta que los desarrolladores de Harbour desean. La respuesta actual ó, mejor aún la
respuesta pretendida es no. Harbour está todavía bajo desarrollo y hay posibilidades que algún
item del código pueda no haber sido licenciado correctamente y, que en teoría pueda tener
implicaciones para Ud. y su software.

58
Harbour
FWH
Si Ud. advierte que esto ha pasado, hágalo saber a los desarrolladores y esto será
corregido.Este seguro que no es la intención de los desarrrolladores de Harbour que sus
aplicaciones tengan que ser liberadas como software libre. El soporte de software libre podría ser
la cosa correcta a hacer pero los desarrrolladores de Harbour han decidido no insistir con esto.
Nosotros pensamos que es más util en esta situación establecer la licencia final para que ellos no
pongan ninguna condicion sobre el estado de su trabajo que use Harbour.
Por favor recuerde que la GLP realmente sólo lo afecta a Ud. cuando Ud. distribuye versiones
binarias del código GPLd, en este caso, La HVM y la RTL son enlazados dentro de su aplicación.
Esto es así porque Harbour no esta ni siquiera en la etapa beta, Ud. no debería considerar la idea
de distribuir aplicaciones compiladas con Harbour.
En resumen, Harbour usará post-beta una licencia que no afectará en ninguna forma sus
aplicaciones. Por el momento esta podría afectar sus aplicaciones si y sólo si Ud. las
distribuye como binarios que han sido compilados con Harbour. Esto debe verse como
una característica y no como un defecto. Aún entonces, Ud, puede ayudar revisando la licencia y
reportando a los desarrolladores cualquier ambiguedad que Ud. Detecte
Como siempre, no acepte la palabra de cualquiera en esta materia, cuando esté en duda, lea la
licencia. Si Ud.todavía esta en duda pague a alguien quien sepa lo que esta haciendo para que
lea la licencia por Ud.

Licencia Actual del Proyecto HARBOUR


Licencia Anterior del Proyecto HARBOUR
Durante un cierto tiempo va a permanecer aquí, la versión anterior de la licencia, previa a las
modificaciones realizadas al texto de la licencia de Harbour (principalmente aclaraciones).
Este programa es software libre; Ud. puede redistribuirlo y/o modificarlo bajo los términos de la
Licencia Pública General (GNU) como fué publicada por la Fundación de Software Libre; sea la
versión 2 de la Licencia, ó (a su opción) alguna versión posterior, con una excepción:
La excepción es que si Ud. enlaza (link) la Librería de Ejecución Harbour (HRL = Harbour
Runtime Library) y/o la Máquina Virtual Harbour (HVM = Harbour Virtual Machine) con otros
archivos para producir un ejecutable, esto por sí mismo no causa que el ejecutable resultante sea
cubierto por la Licencia Pública General (GNU).
Su uso de ese ejecutable no esta en ninguna forma restringido en cuenta del enlazado de la HRL
y/o del código HVM dentro de él. Este programa es distribuido con la esperanza que le pueda ser
útil, pero SIN NINGUNA GARANTIA; aún sin la garantía implícita de COMERCIO O DESTINO PARA
ALGÚN PROPÓSITO PARTICULAR.
Consulte la License Pública General (GNU) para mayores detalles.
Ud. debería haber recibido una copia de la Licencia Pública General (GNU) junto con este
programa; si no, escriba a la Fundación de Software Libre Free Software Foundation, Inc.,675
Mass Ave Cambridge, MA 02139, USA (o visite su sitio Web en http://www.gnu.org/).

Garantía

59
Harbour
FWH
Actualmente la sentencia de garantía esta provista por la GPL: "Este programa es distribuido con
la esperanza que le pueda ser útil, pero SIN NINGUNA GARANTIA; aún sin la garantía implícita de
COMERCIALIZACION O DESTINO PARA ALGÚN PROPÓSITO PARTICULAR."

Marcas Registradas
Esta documentación hace a varias Marcas Registradas, que sólo son usadas con propósito de
referencia.

60
Harbour
FWH

Glosario

A
ADS:
Acrónimo de Advanced Database Server. Solución cliente / servidor.

B
BISON:
Es un generador de analisis de propósito general que convierte una descripción de
gramatica para una gramática de libre-contexto LALR en un programa en lenguaje C
para analizar esa gramática.Una vez que Ud. es hábil con con Bison, Ud. puede usarlo
para desarrollar un amplio rango de analizadores de lenguaje, desde aquellos usados en
simples calculadoras de escritorio hasta complejos lenguajes de programación. Bison
tiene compatibilidad hacia arriba con Yacc: toda gramática Yacc apropiadamente-escrita
debe trabajar con Bison, sin hacer ningún cambio. Cualquiera familiarizado con Yacc
debería ser capaz de usar Bison con pocos problemas. Ud necesita ser avanzado
programador de C como condicion para usar Bison. Un manual en-linea esta disponible
en www.gnu.org/manual/bison/index.html

Branch:
Rama, bifurcacion en la versión del proyecto.
C
Cygnus:
Cygnus es una empresa que se hizo popular por el port de las herramientas GNU para
Un*x al ambiente MS-Windows. Posteriormente fue comprada por Red Hat y sigue
operando como parte de esta.

Cygwin:
GNU + Cygnus + Windows = Cygwin Las herramientas Cygwin son una migracion de la
populares herramientas y utilidades GNU al entorno de desarrollo para Windows 95, 98,
y NTEllas funcionan usando la librería Cywin la cual provee una API simil-UNIX en el
tope de Win32Cygwin fue originalmente diseñado e implementado por Steve
Chamberlain cuando el trabajaba para Cygnus. Actualmente el grupo Cygwin en Red
Hat, Inc. consiste primariamente de tres personas: Christopher Faylor (encargado),
Corinna Vinschen (ingeniera senior), DJ Delorie (ingeniero senior, voluntario interno del
grupo gcc). a página principal del proyecto Cygwin esta en: http://cygwin.com/ Ud. puede
encontrar documentación pararramientas individuales GNUen:http://www.fsf.org/manual/
CVS:

61
Harbour
FWH
Acrónimo de Current Version System, Sistema de Control de Versiones Sistema
compuesto por una serie de programas que permite a los desarrolladores mantener el
control sobre los distintos archivos y las modificaciones que se realizan a ellos.
D
Diff:
Diferencias entre una versión y otra del software.
E
F
Flex:
Flex es una herramienta para generar exploradores: programas cuales reconocen
patrones lexicos en un texto. flex lee los archivos de entrada provistos, o su entrada
estandar si no se da ningun nombre de archivo, para una descripcion del explorador a
generar. La descripcion es en la forma de pares de expresiones regulares y código C
llamado reglas.
Flex genera como salida un archivo fuente en C, llamado "lex.yy.c" el cual define a una
rutina "yylex()".Este archivo es compilado y enlazado con la librería "-lfl" para producir
un ejecutable. Cuando el ejecutable esta corriendo, este analiza sus entradas en
búsqueda de ocurrencias de expresiones regulares.Cuando encuentra una, este ejecuta
el código C correspondiente.

FSF:
Acrónimo de Free Software Foundation ó Fundacíon para el software libre
G
GCC:
Acrónimo de GNU C Compiler, compilador de lenguaje C de libre distribución, bajo
licencia GNU. Actualmente el término debe leerse como GNU Compiler Collection.
Nota:
EGCS fué una etapa experimental en el desarrollo de GCC, (el compilador de C GNU),
una rama que se excindio debido a la discrepancia de sus integrantes. Consulte el sitio
web gcc/egcs para más información: http://gcc.gnu.org Alrededor de Abril de 1999 el
proyecto GCC de la FSF, fue unificado con EGCS y el resultado es la version gcc-2.95
liberado el 31 de Julio de 1999. l proyecto ha sido renombrado Gnu Compiler Colection
ó GCC ó Colección de compiladores GNU. El resultado de todo esto es que, lo que era
egcs-1.2 esencialmente se convirtió en gcc-2.95. Los términos Cygwin, Mingw32, EGCS,
UWIN se refieren a distintos enfoques en la migración de GCC a la plataforma x86-
win32 (intel).Enfoques en el sentido que ellos comparten casi todo el backend, y usan el
mismo formato de ejecutable y el subyacente sistema operativo windows32, excepto que
el entorno de ejecución es radicalmente distinto.
zGPL:

62
Harbour
FWH
Licencia Pública General GNU (GPL)
GT - GT System:
Acrónimo de General Terminal (sistema de Terminal de uso General)Clipper posee un
sistema multinivel para controlar la pantalla y el teclado. El GT constituye el nivel
superior del sistema de Entrada / Salida de Clipper. En un nivel inferior se encuentra el
controlador de terminal.
H
Harbour:
Compilador de XBase, similar a CA-Clipper (MR), diseñado para trabajar en distintas
plataformas: DOS, Win 95, 98, ME, NT 3.5x, 4.0, W2K, OS/2, Linux, etc
I
IDEA:
Algoritmo de encriptación ampliamente usado.
J
JAVA:
Lenguaje de programación multiplataforma desarrollado por SUN Systems basado en bytecodes
como Harbour.
K
Kernel: (núcleo)
1. La parte esencial de Unix u otro sistema operativo, responsable de la adjudicación de recursos,
interfaz de bajo-nivel con el hardware, seguridad, etc.
2. Una parte esencial de un lenguaje de programación, en términos de la cual otras
construcciones son (ó podrían ser) definidas.
L
Lex:
Lex es una herramienta para generar exploradores.Consulte FLex.
M
Mingw:
MinGW: Acrónimo de Minimalist GNU for Windows.MinGW es un conjunto de archivos
include y librerías import que permiten que un programa en modo-consola pueda usar la
librería de ejecución estándar de C, MSVCRT.DLL (disponible para todos los sistemas
NT y versiones de Windows posteriores a 95 (para la cual hay una versión diferente).
Usando esta librería básica en tiempo de ejecución, Ud. puede escribir programas ANSI
compatible en modo consola, usando GCC y usando usando alguna de las extensiones
ofrecidas por la librería MS C runtime, pero no pueden usarse las características
provistas por la API Windows32.
N

63
Harbour
FWH

O
OOP:
Acrónimo de Object Oriented Programming. ó Programación Orientada a Objetos.
P
Patch:
Parche, programa utilizado para actualizar otro programa a una version actualizada.
Q
R
RDD:
Acrónimo de Replaceble Database Driver (Controlador de Bases de Datos
Reemplazable). Los más usados son el RDD para archivos NTX, CDX, MDX, etc
RTL: (RTL = RunTime Library) o la Librería de Ejecución de Harbour, la cual contiene
funciones equivalentes a CLIPPER.LIB, EXTEND.LIB, etc.
S
snapshot:
Instantánea del CVS. Todos los archivos que forman parte del proyecto en un momento dado.
SSH:
Abreviatura de Secure SHell . (entorno seguro).Es un programa ejecutable para logonearse a otra
computadora sobre una red, para ejecutar comandos en una máquina remota, para borrar,
mover, etc, archivos desde una máquina a otra. Este programa provee confiable autenticación y
comunicaciones seguras sobre canales inseguros como internet. Para ello toda la sesión de
conexión (login), incluyendo la transmisión de la password, es encriptada haciendo casi imposible
para un hacker obtener nuestra password. El programa puede utilizar los algoritmos 'DES', 'IDEA',
'3DES', 'RSA', etc.El programa SSH está disponible para Windows, Unix, Macintosh, y OS/2 y se lo
puede obtener en forma gratuita.
T
Terminal:
También llamado controlador Terminal, esta formado por un controlador de pantalla y de teclado
que se comunica con el dispositivo de Entrada / Salida a través del Sistema Operativo, ó
directamente con el hardware (si el sistema operativo lo permite). Con C52 vienen 4
controladores de terminal: TERMINAL, ANSITERM, NOVTERM, y PCBIOS. Por defecto C52 enlaza
automáticamente con cada programa TERMINAL.LIB (terminal diseñado para trabajar con
ordenadores IBM y ordenadores 100% compatibles) si no se especifica un controlador
alternativo.

U
V

64
Harbour
FWH
VM:
Abreviatura de Virtual Machine (Máquina Virtual). (HVM = Harbour Virtual Machine) ó
Máquina Virtual de Harbour.
W
Wrapper: (envoltura)
El término tipicamente se utiliza para funciones ó procedimientos. "wrapper function" ó función
de envoltura.
Codigo, el cual es combinado con otra pieza de codigo para determinar como ese codigo es
ejecutado. La envoltura actúa como una interfaz entre el llamador y el codigo envuelto. sto
puede ser hecho por compatibilidad. Por ej. si el codigo envuelto es en un lenguaje de
programación diferente ó usa diferentes convenciones de llamada ó por seguridad por ej. para
evitar que el programa llamador ejecute ciertas funciones. Esto implica que ese codigo envuelto
solamente puede ser accedido via la envoltura ó "wrapper"
X
X Windows:
Sistema gráfico de ventanas para la plataforma Un*x. Este entorno gráfico es
independiente del sistema operativo y su instalación es opcional. Es de bajo nivel y
sobre él corren los administradores de escritorio como GTK+, y Enlightning.
Y
Yacc:
Es un generador de analisis de propósito general que convierte una descripción de
gramatica para una gramática de libre-contexto LALR en un programa en lenguaje C
para analizar esa gramática. Yacc lee la especificación de la gramática del archivo
"filename" y genera un LR(1) analizador para el. Los analizadores consisten en un set de
LALR(1) tablas de analisis y una rutina controladora escrita en el lenguale de
programación C. Yacc normalmente escribe las tablas de analisis y la rutina controladora
al archivo y.tab.c. El programa Yacc ha ido siendo reemplazado por Bison.
Z
ZLIB:
Librería de compresión de archivos que utiliza el popular formato zip.

CA-Clipper © es Marca Registrada de Computer Associates Inc. Unix © es Marca Registrada de Unixware Co. Cygwin ©
es Marca Registrada de Red Hat Inc. Windows © es Marca Registrada de Microsoft Corporation.

65

Вам также может понравиться