Está en la página 1de 69

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?...................................................5


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

-1-
Harbour
FWH
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: ...................................................................... 28
ASUNTOS LEGALES SOBRE LAS FAQ...............................................34
DERECHOS (COPYRIGHT )..........................................................................34
LICENCIA............................................................................................34
GARANTÍA...........................................................................................34
MARCAS REGISTRADAS ...........................................................................34
HARBOUR .....................................................................................35
QUÉ ES HARBOUR ? ..............................................................................35
POR QUÉ DESARROLLAR HARBOUR ? ............................................................35
QUE PLATAFORMAS SON SOPORTADAS POR HARBOUR ? .......................................36
QUIÉN ESTA DESARROLLANDO HARBOUR ? .....................................................36
ESTADO ACTUAL DE HARBOUR ....................................................................36
CÓMO COMENZÓ EL PROYECTO HARBOUR ? ......................................................36
A QUIÉN PERTENECE HARBOUR ? ................................................................37
AYUDANDO A DESARROLLAR HARBOUR..........................................38
DÓNDE PUEDO COMENZAR ? ......................................................................38
QUÉ COMPILADOR DE C DEBERÍA USAR ? .......................................................38
QUÉ OTRAS HERRAMIENTAS NECESITO ? .........................................................39
DÓNDE PUEDO ENCONTRAR LOS FUENTES ? .....................................................40
EL ESTADO ACTUAL INESTABLE ....................................................................40
EL ESTADO ACTUAL ESTABLE ......................................................................40
ACCESO DIRECTO AL CVS .......................................................................40
QUÉ ES EL CVS Y CÓMO PUEDO YO USARLO ? .................................................40
CÓMO PUEDO CONSTRUIR HARBOUR ? ..........................................................42
SOBRE QUÉ SE NECESITA TRABAJAR ? ...........................................................42
HAY ALGUN LINEAMIENTO DE DESARROLLO ? ...................................................42
ESTA BIEN EXTENDER EL LENGUAJE CON ALGUNAS CARACTERISTICAS ? .......................43
QUÉ CON TODAS ESAS EXTENSIONES AL LENGUAJE , ENTONCES ? ..............................43
NO PUEDO PROGRAMAR EN C, CÓMO PUEDO AYUDAR EN EL DESARROLLO ? .................43

-2-
Harbour
FWH

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

-3-
Harbour
FWH

QUÉ ES LA GPL ? ................................................................................57


POR QUÉ FUE LA GPL ELEGIDA COMO LA LICENCIA PARA HARBOUR ? ......................57
QUÉ ES LA EXCEPCIÓN DE HARBOUR ? ..........................................................58
SERÁN MIS APLICACIONES AFECTADAS POR LA GPL? .........................................59
LICENCIA ACTUAL DEL PROYECTO HARBOUR ...............................................60
Licencia Anterior del Proyecto HARBOUR..............................................................60
GARANTÍA ..........................................................................................61
MARCAS REGISTRADAS ...........................................................................61
GLOSARIO ....................................................................................62

-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

-7-
Harbour
FWH
@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
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

-8-
Harbour
FWH

Recomendaciones importantes:

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

-9-
Harbour
FWH
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

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

- 10 -
Harbour
FWH
automáticamente dichos cambios. 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

- 12 -
Harbour
FWH
OrdSetFocus("DIRECCION") // Second Tag on Clientes.cdx
Gotop()
Browse() // Quick browse!!!
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

70
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
- gtdos
- gtwin \

15
Harbour
FWH
- 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.
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

16
Harbour
FWH
- 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
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.

17
Harbour
FWH
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.

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

18
Harbour
FWH
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:
harbour.l -> harbourl.c

19
Harbour
FWH
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
pplib.obj
pptable.obj

20
Harbour
FWH
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
symbols.obj
harbinit.obj

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


<... muchos archivos obj ...>

21
Harbour
FWH
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
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

22
Harbour
FWH

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

23
Harbour
FWH
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

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


harbour.l -> harbourl.c

24
Harbour
FWH
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

26
Harbour
FWH
• El motor de Objetos
• El subsistema macro
• El subsistema de áreas de trabajo
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:

27
Harbour
FWH
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.
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_SEQ 0x19 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

28
Harbour
FWH
#define FUNC 0x29 3
#define LINE 0x2A 3
#define MAKEA 0x2B 3
#define MAKELA 0x2C 3
#define PARAMS 0x2D 3
#define POPFL 0x2E 3
#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 ARRAYAT0x58 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_SEQ0x61 1

29
Harbour
FWH
#define EQ 0x62 1
#define EVENTS 0x63 1
#define FALSE 0x64 1
#define GE 0x65 1
#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

30
Harbour
FWH
#define SRCNAME 0x8F 1
#define TYPE 0x90 1
#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 WAVEPOPQ 0x98 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 un índice al array de punteros de las

32
Harbour
FWH
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.

35
Harbour
FWH
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.
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..."

36
Harbour
FWH

A quién pertenece Harbour ?

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

39
Harbour
FWH
TODO: Proveer enlace
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 ?

40
Harbour
FWH
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:
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).

41
Harbour
FWH

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

42
Harbour
FWH
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.

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

43
Harbour
FWH
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 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 ,

45
Harbour
FWH
mailto:harbourusers-request@lists.harbour-project.org?
subject=unsubscribe
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/.

46
Harbour
FWH

Hay algún grupo de noticias para Harbour ?


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.

52
Harbour
FWH
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.
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.

53
Harbour
FWH

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 (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

55
Harbour
FWH
CVS
Introduccióon al CVS por Jim Blandy ,CVS Bubbles, ,CVS--Concurrent Versions
System .

56
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",

57
Harbour
FWH
solamente una licencia que mantenga a Harbour libre pero que no impacte sobre el
código compilado con Harbour.

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.

58
Harbour
FWH
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."

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

59
Harbour
FWH
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.
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.

60
Harbour
FWH
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
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.

61
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:

62
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:

63
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
O

64
Harbour
FWH
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
VM:

65
Harbour
FWH
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.

66