manual FWH español

81
FWH FiveWin para Harbour / xHarbour © FiveTech Software 2006 www.fivetechsoft.com La documentación de Harbour es © El Proyecto Harbour www.harbour-project.org

Transcript of manual FWH español

Page 1: manual FWH español

FWHFiveWin para Harbour / xHarbour

© FiveTech Software 2006www.fivetechsoft.com

La documentación de Harbour es

© El Proyecto Harbourwww.harbour-project.org

Page 2: manual FWH español

Harbour FWH

Contenido

CONTENIDO ................................................................................... 1

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

INSTALACIÓN DE FIVEWIN PARA HARBOUR..............................................7USO DE FIVEWIN PARA HARBOUR.........................................................8DIRECTRICES PARA USUARIOS DE HARBOUR.............................................8

Recomendaciones importantes:............................................................................10DIRECTRICES PARA USUARIOS DE CLIPPER Y FIVEWIN...............................10

Adaptación de su código fuente C:.......................................................................12Utilización de los controles de Borland (Bwcc32.dll):...........................................12

UTILIZACIÓN DE ADVANTAGE LOCAL RDD CON HARBOUR:..........................12

ELEMENTOS DE HARBOUR ............................................................. 14

COMO ESTA COMPUESTO EL COMPILADOR..............................................14ESTRUCTURA JERÁRQUICA DE SUBDIRECTORIOS........................................14QUE ARCHIVOS COMPONEN HARBOUR ?................................................16PARA QUÉ SIRVEN CADA UNO DE LOS PROGRAMAS ?.................................17GENERACIÓN DEL COMPILADOR PARA 16 BITS: DOS, WIN3X......................19

Qué variables de entorno necesito ?.....................................................................19Qué programas necesito ?....................................................................................19Cómo se procesan los archivos ?..........................................................................20

GENERACIÓN DEL COMPILADOR PARA 32 BITS: WIN 9X, NT,......................22QUÉ VARIABLES DE ENTORNO NECESITO ?..............................................23

Qué programas necesito ?....................................................................................23Cómo se procesan los archivos ?..........................................................................23

PARA QUÉ SON FLEX Y BISON ?.........................................................23Flex....................................................................................................................... 24Bison..................................................................................................................... 24

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

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

El Arranque:..........................................................................................................26La Pila (stack):......................................................................................................27La tabla estática de símbolos:..............................................................................27

- 1 -

Page 3: manual FWH español

Harbour FWH

La tabla dinámica de símbolos..............................................................................27Variables estáticas y públicas:..............................................................................27La memoria:..........................................................................................................27El sistema extendido:...........................................................................................27Arrays Multidimensionales:...................................................................................27El motor de Objetos:.............................................................................................27El subsistema macro:...........................................................................................27El subsistema de areas de trabajo:.......................................................................27

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

DERECHOS (COPYRIGHT)..................................................................33LICENCIA.....................................................................................33GARANTÍA....................................................................................33MARCAS REGISTRADAS....................................................................33

HARBOUR .................................................................................... 34

QUÉ ES HARBOUR ?........................................................................34POR QUÉ DESARROLLAR HARBOUR ?....................................................34QUE PLATAFORMAS SON SOPORTADAS POR HARBOUR ?.............................35QUIÉN ESTA DESARROLLANDO HARBOUR ?.............................................35ESTADO ACTUAL DE HARBOUR...........................................................35CÓMO COMENZÓ EL PROYECTO HARBOUR ?............................................35A QUIÉN PERTENECE HARBOUR ?........................................................35

AYUDANDO A DESARROLLAR HARBOUR ......................................... 36

DÓNDE PUEDO COMENZAR ?..............................................................36QUÉ COMPILADOR DE C DEBERÍA USAR ?...............................................36QUÉ OTRAS HERRAMIENTAS NECESITO ?................................................37DÓNDE PUEDO ENCONTRAR LOS FUENTES ?............................................38EL ESTADO ACTUAL INESTABLE...........................................................38EL ESTADO ACTUAL ESTABLE.............................................................38ACCESO DIRECTO AL CVS................................................................38QUÉ ES EL CVS Y CÓMO PUEDO YO USARLO ?........................................38CÓMO PUEDO CONSTRUIR HARBOUR ?..................................................40SOBRE QUÉ SE NECESITA TRABAJAR ?...................................................40HAY ALGUN LINEAMIENTO DE DESARROLLO ?..........................................40ESTA BIEN EXTENDER EL LENGUAJE CON ALGUNAS CARACTERISTICAS ?...........41QUÉ CON TODAS ESAS EXTENSIONES AL LENGUAJE, ENTONCES ?...................41NO PUEDO PROGRAMAR EN C, CÓMO PUEDO AYUDAR EN EL DESARROLLO ?.....41TENGO MUCHO CÓDIGO CLIPPER, YO PUEDO DONARLO, QUE DEBO HACER ?.....41NO PUEDO ENVIAR CÓDIGO CLIPPER TAMPOCO, TODAVÍA PUEDO AYUDAR ?......42

- 2 -

Page 4: manual FWH español

Harbour FWH

LISTAS DE CORREO DE HARBOUR .................................................. 43

HAY UNA LISTA DE CORREO DE DESARROLLADORES ?................................43HAY UNA LISTA DE CORREO DE USUARIOS ?...........................................43HAY UNA LISTA DE CORREO DE DISCUSIÓN GENERAL ?...............................43CÓMO REMOVERME DE LA LISTA DE CORREO ?.........................................43HAY ALGUNA REGLA EN LAS LISTAS ?...................................................44ESTAN LAS LISTAS ARCHIVADAS EN ALGÚN LUGAR ?.................................44HAY ALGÚN GRUPO DE NOTICIAS PARA HARBOUR ?..................................44

INSTALACIÓN DE HARBOUR .......................................................... 45

DÓNDE PUEDO OBTENER BINARIOS PRE-CONSTRUIDOS ?.............................45CÓMO PUEDO INSTALAR LOS ARCHIVOS BINARIOS PRE-CONSTRUIDOS ?...........45CÓMO USAR HARBOUR A PARTIR DE LOS ARCHIVOS FUENTES ?....................47

PREGUNTAS GENERALES DE HARBOUR .......................................... 48

CUANDO SERÁ TERMINADO HARBOUR ?.................................................48SON LAS APLICACIONES <ATRIBUTO> QUE EN CA-CLIPPER ?......................48QUÉ VENTAJAS TIENE HARBOUR SOBRE OTROS COMPILADORES DE CLIPPER ?. . .48QUÉ VENTAJAS TIENEN OTROS COMPILADORES DE CLIPPER SOBRE HARBOUR?...48SOPORTARÁ HARBOUR LOS PRODUCTOS DE TERCEROS EXISTENTES PARA CA-CLIPPER ?....................................................................................49ES HARBOUR UNA HERRAMIENTA DE DESARROLLO PARA WINDOWS ?.............49QUÉ PLATAFORMAS SON SOPORTADAS POR HARBOUR ?.............................49

PUNTEROS Y ENLACES .................................................................. 50

ENLACES RELACIONADOS CON HARBOUR...............................................50ARTÍCULOS SOBRE HARBOUR.............................................................50ENLACES A HERRAMIENTAS DE DESARROLLO LIBRES (EN CUALQUIER SENTIDO DE LA PALABRA)................................................................................50ENLACES RELACIONADOS CON CLIPPER.................................................50ENLACES RELACIONADOS CON SOFTWARE LIBRE.......................................50OTROS ENLACES ÚTILES...................................................................50

ASUNTOS LEGALES SOBRE SOFTWARE Y HARBOUR ........................ 52

QUE ES SOFTWARE LIBRE (FREE SOFTWARE) ?........................................52ENTONCES HARBOUR ES DEL DOMINIO PÚBLICO ?....................................52QUÉ ES LA GPL ?..........................................................................52POR QUÉ FUE LA GPL ELEGIDA COMO LA LICENCIA PARA HARBOUR ?............52QUÉ ES LA EXCEPCIÓN DE HARBOUR ?..................................................52

- 3 -

Page 5: manual FWH español

Harbour FWH

SERÁN MIS APLICACIONES AFECTADAS POR LA GPL?................................54LICENCIA ACTUAL DEL PROYECTO HARBOUR........................................55

Licencia Anterior del Proyecto HARBOUR.............................................................55GARANTÍA....................................................................................55MARCAS REGISTRADAS....................................................................55

Glosario ....................................................................................... 56

- 4 -

Page 6: manual FWH español

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 -

Page 7: manual FWH español

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 -

Page 8: manual FWH español

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 :SINTAXif NOT EXIST %1.prg GOTO :NOEXIST

ECHO Compiling...

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

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

- 7 -

Page 9: manual FWH español

Harbour FWH

@type clip.logIF ERRORLEVEL 1 PAUSEIF 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.bcecho %1.obj, + >> b32.bcecho %1.exe, + >> b32.bcecho %1.map, + >> b32.bcecho ..\lib\FiveH.lib ..\lib\FiveHC.lib + >> b32.bcecho %hdir%\lib\b32\rtl.lib + >> b32.bcecho %hdir%\lib\b32\vm.lib + >> b32.bcecho %hdir%\lib\b32\gtwin.lib + >> b32.bcecho %hdir%\lib\b32\lang.lib + >> b32.bcecho %hdir%\lib\b32\macro.lib + >> b32.bcecho %hdir%\lib\b32\rdd.lib + >> b32.bcecho %hdir%\lib\b32\dbfntx.lib + >> b32.bcecho %hdir%\lib\b32\debug.lib + >> b32.bcecho %hdir%\lib\b32\common.lib + >> b32.bcecho %hdir%\lib\b32\pp.lib + >> b32.bcecho %bcdir%\lib\cw32.lib + >> b32.bcecho %bcdir%\lib\import32.lib, >> b32.bcIF EXIST %1.res echo %1.res >> b32.bc%bcdir%\ilink32 -aa -Tpe @b32.bc

IF ERRORLEVEL 1 GOTO LINKERRORECHO * Application successfully builtECHO

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

:SINTAXECHO SYNTAX: Build [Program] {-- No especifiques la extensi¢n PRGECHO {-- Don't specify .PRG extensionGOTO EXIT

:NOEXISTECHO Not exist the specified PRG

:EXIT

- 8 -

Page 10: manual FWH español

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 :SINTAXif NOT EXIST %1.prg GOTO :NOEXIST

ECHO Compiling...

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

%hdir%\bin\b32\harbour %1 /n /i..\include;%hdir%\include /p %2 %3 > clip.log@type clip.logIF ERRORLEVEL 1 PAUSEIF ERRORLEVEL 1 GOTO EXITecho -O2 -e%1.exe -I%hdir%\include -tW %1.c > b32.bc%bcdir%\bcc32 -M -c @b32.bc:ENDCOMPILEIF EXIST %1.rc %bcdir%\brc32 -r %1

- 9 -

Page 11: manual FWH español

Harbour FWH

echo c0w32.obj + > b32.bcecho %1.obj, + >> b32.bcecho %1.exe, + >> b32.bcecho %1.map, + >> b32.bcecho ..\lib\FiveH.lib ..\lib\FiveHC.lib + >> b32.bcecho %hdir%\lib\b32\rtl.lib + >> b32.bcecho %hdir%\lib\b32\vm.lib + >> b32.bcecho %hdir%\lib\b32\gtwin.lib + >> b32.bcecho %hdir%\lib\b32\lang.lib + >> b32.bcecho %hdir%\lib\b32\macro.lib + >> b32.bcecho %hdir%\lib\b32\rdd.lib + >> b32.bcecho %hdir%\lib\b32\dbfntx.lib + >> b32.bcecho %hdir%\lib\b32\debug.lib + >> b32.bcecho %hdir%\lib\b32\common.lib + >> b32.bcecho %hdir%\lib\b32\pp.lib + >> b32.bcecho %bcdir%\lib\cw32.lib + >> b32.bcecho %bcdir%\lib\import32.lib, >> b32.bcIF EXIST %1.res echo %1.res >> b32.bc%bcdir%\ilink32 -aa -Tpe @b32.bcIF ERRORLEVEL 1 GOTO LINKERRORECHO * Application successfully builtECHO

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

:SINTAXECHO SYNTAX: Build [Program] {-- No especifiques la extensi¢n PRGECHO {-- Don't specify .PRG extensionGOTO EXIT

:NOEXISTECHO Not exist the specified PRG

:EXIT

Adaptación de su código fuente C:

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

- 10 -

Page 12: manual FWH español

Harbour FWH

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 -

Page 13: manual FWH español

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

- 12 -

Page 14: manual FWH español

Harbour FWH

USE Clientes // Open any DBF 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 -

Page 15: manual FWH español

Harbour FWH

- 14 -

Page 16: manual FWH español

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

Page 17: manual FWH español

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ó compo-nentes 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 funcio-nes 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. hb-dev\source\debug

14

Page 18: manual FWH español

Harbour FWH

--------------------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 si-guientes archivos (Note que éstos pueden cambiar en un futuro). Esto es para que sir -va 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 \ - gtos2 \

15

Page 19: manual FWH español

Harbour FWH

- 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 es -to 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, ar-chivos.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 eje-cutable. 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 em-paquetamientos: 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 - macro.lib

16

Page 20: manual FWH español

Harbour FWH

- pp.lib - common.lib - debug.lib - rtl.lib - dbfcdx.lib - dbfntx.lib - nulsys.lib - gtdos - rdd - tools 1 - vm.libLibrería dónde se encuentran las funciones que componen la "Virtual Machine", o má-quina virtual de Harbour. 2 - macro.libLibrería dónde se encuentran las funciones del compilador de las macros de Clipper. 3 - pp.libLibrería dónde se encuentran las funciones del pre-procesador. 4 - common.libLibrería dónde se encuentran funciones comunes del compilador independiente y el compilador de macros, optimizador de expresiones, etc. 5 - debug.libLibrería dónde se encuentran las funciones del depurador de Harbour, el equivalente al ALTD.exe de Clipper. 6 - rtlLibrería dónde se encuentran las funciones de la Run-Time Library (librería de ejecu-ción, el equivalente a clipper.lib y extend.lib 7 - dbfcdx.libLibrería dónde se encuentran las funciones del controlador de índices CDX. 8 - dbfntx.libLibrería dónde se encuentran las funciones del controlador de índices NTX. 9 - gtdosLibrería donde se encuentran las funciones del controlador de terminal, el equivalente de clipper a terminal.lib para DOS.10 - rddLibrería donde se encuentran las funciones del controlador reemplazable de bases de datos (RDD)11 - toolsLibrerí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 enten-dimiento sobre cómo esta construido Harbour.Si Ud. en cambio descarga los archivos fuentes, podrá construir los ejecutables y las librerías citadas Ud. mismo, y si se siente capaz de hacerlo nosotros lo alentamos a que lo haga.

17

Page 21: manual FWH español

Harbour FWH

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=dosSET HB_COMPILER=bcc16SET HB_GT_LIB=gtdosSET HB_HOMEDRIVE=DSET HOME=D:\HB33SET HOMEPATH=/HB33/SET C_USR=-DHARBOUR_USE_DOS_GTAPIREM 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.batmakefile.bc

Ud. debe tener correctamente instalado un compilador de lenguaje C para la platafor -ma en la cual desea generar el compilador y sus librerías. Asi necesitará tantos com-piladores 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 platafor-ma 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).make_b16.bat se puede invocar con el parámetro:

18

Page 22: manual FWH español

Harbour FWH

parametro - CLEANSi existen...Borra todo los ejecutables del subdir \bin\b16Borra todo los archivos.tds del subdir \bin\b16Borra todo los archivos.map del subdir \bin\b16Borra todo los archivos.lib del subdir \lib\b16Borra todo los archivos.bak del subdir \lib\b16Borra todo los archivos.obj del subdir \obj\b16Borra todo los archivos.c del subdir \obj\b16Borra todo los archivos.h del subdir \obj\b16Borra 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ámetrosInvoca al programa ejecutable make.exe (puede variar su nombre según el compila-dor 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 coman-dos, 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 corres-ponden con la hora y fecha del archivo.obj (archivo binario producto de la compila-ción del anterior).Este ejecutable make.exe recibe distintos parámetros de configuración, y ya estan se-teados..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 nom-bres de los ejecutables a invocar y sobre que archivos van a actuar y qué dependen-cias 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.objPor la acción de flex.exe se generan los siguientes archivos.c: harbour.l -> harbourl.c macro.l -> macrol.cPor la acción de bison.exe se generan los siguientes archivos.c:

19

Page 23: manual FWH español

Harbour FWH

macro.y -> macroy.c harbour.y -> harboury.cPor 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

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

20

Page 24: manual FWH español

Harbour FWH

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 ...> common.lib dbfcdx.lib

21

Page 25: manual FWH español

Harbour FWH

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 sub-directorio ..\bin.Los archivos de librerías.lib del subddir ..\lib\b16 al subdir ..\lib Desde donde se su -pone 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 cualse 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) invo -cado 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=w32SET HB_COMPILER=bcc32SET HB_GT_LIB=gtwinSET HB_HOMEDRIVE=CSET HOME=C:\hb-devSET HOMEPATH=/hb-dev/SET C_USR=-DHARBOUR_USE_WIN_GTAPISET BISON_SIMPLE=C:\BATCH\BISON.SIMPLEPATH=c:\windows\command;c:\bcc55\bin;c:\ssh;c:\cvs;c:\flex;c:\batch; c:\hb-dev\bin

Qué programas necesito ?

22

Page 26: manual FWH español

Harbour FWH

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, identificado-res, 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 es-tructura. 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 herra-mientas que vienen a nuestra ayuda, ya estan probadas a traves de los años y simpli -fican nuestra tarea, ellas son: Flex y Bison.

Flex Flex es una herramienta para generar programas exploradores ó "scanners": progra-mas que reconocen patrones léxicos en el texto. Flex lee el archivo de entrada provis-to (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 produ-cir 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 genera-ba se llamaba LEX, en cambio flex (Fast LEX) es un proyecto GNU. Mayor información sobre flex puede ser encontrada en el sitio: www.gnu.org Bison Bison es un generador de "parsers" o analizadores (de propósito general) que convier-te una descripción gramatical para una gramática de libre contexto en un programa de lenguaje C, para analizar esa gramática.

23

Page 27: manual FWH español

Harbour FWH

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 pro-grama 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 expre-siones. 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 apor-tar 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 anali-zador 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 em-piezan con 'yy' o 'YY'. Esto incluye funciones de interfaz como el analizador léxico yy-lex, la función de reporte de errores yyerror() y la función analizadora misma yy-parse(). Esto también incluye numerosos identificadores usados para propósitos inter-nos. 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 macro.l -> macrol.cPor la acción de bison.exe se generan los siguientes archivos.c: macro.y -> macroy.c

24

Page 28: manual FWH español

Harbour FWH

harbour.y -> harboury.cA 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 ar-chivo.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

Page 29: manual FWH español

Harbour FWH

DISEÑO DEL COMPILADOR

Cambios en la estructura internaHarbour esta diseñado internamente para ser tan compatible como sea posible con Clipper, pero debido a que Harbour es multiplataforma, ha sido preciso cambiar algu-nas partes.Asimismo con fines de mejorar algunos problemas y/o deficiencias de Clipper el equi-po de Harbour ha rediseñado algunas funciones y partes extendiendo su funcionali-dad.

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 cua-les 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 VirtualMa-chine(), la cual recibe 2 parametros: la intrucciones pcode para ejecutar y la tabla lo -cal 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 pco-de.

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 exter -nas 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 va-riables 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

Page 30: manual FWH español

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 (li -nker) en los OBJs, Este subsistema es responsable por un inmediato acceso a la ubica -ció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 opti -mizados 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 aplica-ción. Esta organiza en una forma eficiente la tabla estática de símbolos creando un ín-dice alfabético que permite una búsqueda dicotómica de los símbolos. Este subsiste-ma 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 me-moria. 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 ac-ceso 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

Page 31: manual FWH español

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

Page 32: manual FWH español

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

Page 33: manual FWH español

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

Page 34: manual FWH español

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

Page 35: manual FWH español

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 li -bertad a los programadores para extender y modificar Harbour tanto como se necesi-te. Por ejemplo: El lenguaje Clipper usa opcodes para Row(), Col(), Upper(), Space(), Re-plicate(), 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), mien-tras Valkyrie lo llama "PUSHW"(3B): Diferentes nombres, diferentes códigos. No es de-seable 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 valo-res 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

32

Page 36: manual FWH español

Harbour FWH

mismo pcode de los opcodes como un índice al array de punteros de las funciones de la VM, así la velocidad de ejecución de la VM puede incrementarse. Clipper usa esto).

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

33

Page 37: manual FWH español

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 porcio-nes 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érmi-nos de la Licencia Pública General, GNU version 2. Por detalles consulte el archivo CO-PYING.

Garantía

"Este programa es distribuido con la esperanza que le pueda ser útil, pero SIN NINGUNA GA-RANTIA; 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 re-ferencia.

34

Page 38: manual FWH español

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 compatibili -dad con CA-Clipper (MR) como sea humanamente posible.La versión que se eligió pa-ra 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 compi-lador 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 contri-buir 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 ejecu-tables para cada una de las plataformas.Convierte archivos PRG ---> archivos "C"---------> archivos ejecutables archivos PRG ------------------------------> archivos ejecu-tables Viene acompañado de librerías que contienen funciones equivalentes a las que acom-pañ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 tra -vé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 de-sarrolladores 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 Ba-zaar" (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 discontinua-ción del producto. La dificultad de una migración fácil desde CA-Clipper bajo D.O.S. hacia un entorno windows.

35

Page 39: manual FWH español

Harbour FWH

Las distintas empresas que ofrecen alternativas de migración, han adaptado el len-guaje 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 in-glé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 esta-do 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 desarro-llar una gramática Clipper usando Lex y YaccEl resto como se dice "es historia..."

36

Page 40: manual FWH español

Harbour FWH

A quién pertenece Harbour ?

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

37

Page 41: manual FWH español

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 desarrolla-dores y leer los mail por unos pocos días para tener una idea de que como van las co-sas. 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 plata-forma 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 si -guientes 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 de-sarrolladores y, una vez que Ud. tenga la información, formatee y póngala en el direc-torio doc para ayudar a otros quienes pueden desear preguntar lo mismo.

38

Page 42: manual FWH español

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 de-berí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 ha-cen uso del GNU make, algunos desarrolladores usan otras utilidades make, Ud. nece-sitará 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.zipGNU/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 enlaceUna 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 (flo -ppy, CDROM, etc..).OS/2 TODO: Proveer enlaceMacintoshTODO: Proveer enlaceUna copia de bison: Windows Vea la página de descarga de harbour (en Otras descargas) DOSLa distribucion DJGPP de herramientas GNU para DOS incluyen una copia de bison pa-ra 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 (flo -ppy, CDROM, etc..).OS/2 TODO: Proveer enlaceMacintosh

39

Page 43: manual FWH español

Harbour FWH

TODO: Proveer enlaceUn 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 Ser-vidor 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 po-drían pasar toda clase de cosas terribles, esto puede aún no compilar.Ud. ha sido ad-vertido.También note que lo de arriba es el backup de todos los archivos del CVS, esto inclu-ye registros de todos los cambios hechos al código fuente desde el principio del pro-yecto! Por favor note que el archivo es un archivo "tar gzipeado" que contiene archi -vos 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 Har-bour. 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 li-beraciones 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 hacien -dolo, 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 real -mente considerar suscribirse a la lista de correo del desarrolladores .Por favor note que si Ud. quiere ayudar a desarrollar Harbour entonces la última op-ció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

Page 44: manual FWH español

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 tar -de.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 ó che -quee 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, enton-ces 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. ne-cesita hacer es setear la variable de entorno CVSROOT a::pserver:[email protected]:/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 en-torno extras, HOMEDRIVE y HOMEPATH .Estas 2 variables de entorno le dicen al clien-te CVS donde estará el código fuente localmente. Por ejemplo, si su directorio de de-sarrollo Harbour esta en S:\FREESOFT\HARBOURUd. ha seteado: SET HOMEDRIVE=SSET HOMEPATH=\FREESOFT\HARBOUR\

Usuarios de cliente para windows han reportado que la variable de entorno HOMEPA-TH 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

Page 45: manual FWH español

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 Introduc-ció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 pla-taforma, entorno, todas las etapas que Ud. realizó y la exacta naturaleza del proble-ma.

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 es-tan 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 implementadasSi 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 en-tonces comenzar contribuyendo con la fijación de errores (siempre es una buena for-ma 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 per-manecemos 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

Page 46: manual FWH español

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 cam-bios. 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 en-cabezados 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 po-sible, 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 lengua-je tan "puro" como sea posible.Si Ud. tiene una idea, para algo que Ud. piensa que de-be 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 pen -sado 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 adita-mentos de terceras partes que la gente usaba en CA-Clipper,o ellas son una caracte-rí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 Har -bour han sido escritas en sí mismo. Por qué no mirar en qué necesita hacerse en la li-brería de ejecución y ver que puede ser codificado usando código normal de Clippe-

43

Page 47: manual FWH español

Harbour FWH

r.No se preocupe acerca de la velocidad por el momento, las chances son que las fun-ciones 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 so-ftware libre para Clipper, que sea no-compilador específica pero que sea inter-plata-forma y que pueda beneficiar a los programadores usando alguna de las implementa-ciones 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. encon-trará la forma.

44

Page 48: manual FWH español

Harbour FWH

Listas de correo de Harbour

Hay una lista de correo de desarrolladores ? Sí, ella se encuentra en [email protected]. Pero es únicamente en idioma inglés. Para subscribirse a la lista de correo de desarrolladores simplemente envíe un email a [email protected] y en el email ponga "subs-cribe". 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 [email protected]. Pero es únicamente en idioma inglés Para subscribirse a la lista de correo de usuarios de Harbour simple -mente envíe un email a [email protected] 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 [email protected]. Pero es únicamente en idioma inglés Para subscribirse a la lista de correo de discusion de Harbour simple -mente envíe un email a [email protected] 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 pa-ra 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:[email protected]?subject=unsubscribe harbourusers (usuarios) List-Unsubscribe: http://www.matrixlist.com/mailman/listinfo/harbourusers, mailto:[email protected]?subject=unsubscribe

45

Page 49: manual FWH español

Harbour FWH

harbourtalk (discusion) List-Unsubscribe: http://www.matrixlist.com/mailman/listinfo/harbourtalk, mailto:[email protected]?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 in-cluyen 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 dis-cussion 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 Mu-cho movimiento. Apéguese a un email formateado como texto pleno, desactive cualquier "característi -ca" 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 In-glés es más ampliamente comprendido que cualquier otro idioma disponible en las lis -tas. 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 mensa-je 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 pa-ra 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 arri -ba actualmente es "obligatoria" (aunque Ud. podria encontrar uno ó dos personas su-gieriendo cortesmente que considere Ud. ajustarse a ellas). Generalmente hablando las reglas en las listas de Harbour son aquellas que se aplican a la buena composicion en general

Estan las listas archivadas en algún lugar ? Ud. puede acceder a la lista de desarrolladores en http://www.matrixlist.com/pipermail/harbour/, la lista de usarios en http://www.matrixlist.com/pipermail/harbourusers/ y la lista de discusión general en http://www.matrixlist.com/pipermail/harbourtalk/.

Hay algún grupo de noticias para Harbour ?

46

Page 50: manual FWH español

Harbour FWH

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

47

Page 51: manual FWH español

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 apre-cian los esfuerzos de la gente quien no quiere desarrollar Harbour pero desean tes-tearlo 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 es-to significa que alguien no está contribuyendo para su entorno, quizás Ud. pueda ocu-parse 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 (platafor-

ma) 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 platafor-ma elegida en alguna de las siguientes: - dos - w32 - linux - os2Setear la variable de entorno HB_COMPILER de acuerdo a la plataforma elegi-da en alguna de las siguientes:Cuando HB_ARCHITECTURE=dos - bcc16 (Borland C++ 3.x, 4.x, 5.0x, DOS 16-bit)

48

Page 52: manual FWH español

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 eli-ge 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: har-bour.exe, hbpp.exe, hbrun.exe, etc, en la variable de entorno PATH por ej: PATH=c:\dos;c:\hb034\binPoner una referencia a los archivos header (*.CH) de Harbour (igual que Cli-pper) en la variable de entorno

INCLUDESe pueden usar otras variables de entorno para configurar aún más el los pro-cesos 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 linkerEntonces el archivo (por ejemplo) hb_16bit.bat quedaría: ----------------------------------------------------------

49

Page 53: manual FWH español

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 para-metro /gh que es interpretado posteriormente por el intérprete hbrun.exe

6. Para generar un ejecutable deberá estar perfectamente configurado el com-pilador 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 pro-grama que hace de intérprete (HRBRUN.EXE) ejecutar las instrucciones de es-te 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 ini-cial, hay algunos ejemplos que funcionan, pero todavía falta trabajo. Además los ar-chivos 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

Page 54: manual FWH español

Harbour FWH

Consulte Elementos de Harbour

51

Page 55: manual FWH español

Harbour FWH

Preguntas generales de Harbour

Cuando será terminado Harbour ?

"Cuando esté terminado". Seriamente, Harbour estará terminado cuando este termi-nado. 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 Har -bour, 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 Har-bour con otros compiladores compatibles con Clipper. Las razones para esto son muchas y variadas y, como son señaladas en muchos luga-res 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. de-sea 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 impues-tas por la implementación de base, pero el alcance de esto dependerá de la platafor -ma elegida por Ud.

52

Page 56: manual FWH español

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 pa-ra 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 acor-tando, 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 su-perar 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 cer-cano.

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

Page 57: manual FWH español

Harbour FWH

Qué plataformas son soportadas por Harbour ?

No hay una lista definitiva de las plataformas soportadas debido a que cualquier pla -taforma 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

Page 58: manual FWH español

Harbour FWH

Punteros y Enlaces

La siguiente es una coleción aleatoria de punteros y enlaces que tratan temas conec-tados con Harbour y el desarrollo de Harbour recolectados por Dave Pearson. Los en-laces no aparecen en ningún orden particular y ninguno de los enlaces es en modo al-guno 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 Har-bour ,Archivo de la lista de correo de usuarios de Harbour ,Archivo de la lista de co-rreo 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 ,Compi-lador 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 pa-ra no usar la LGPL ,Lista de licencias de software libre / código fuente abier-to ,OpenSources ,SourceForge ,,

Otros enlaces útiles comp.lang.c FAQ CVS

55

Page 59: manual FWH español

Harbour FWH

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

56

Page 60: manual FWH español

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 li -bertades 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 "progra-ma libre" de la FSF (Free Software Foundation) Fundación para el software libre. Un término relacionado es "OpenSource", algo así como código fuente disponible, Ud. puede encontrar más acerca de la idea de OpenSource en Ud. pudo también notar que la FSF no considera "OpenSource" y "Free Software" que sean la misma cosa, vea http://www.gnu.org/philosophy/free-software-for-freedom.html para más detalles.

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

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

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

57

Page 61: manual FWH español

Harbour FWH

Qué es la excepción de Harbour ? Hay una pequeña estratagema en lo que se refiere al uso de la GPL como la licencia para Harbour.Harbour viene en varias partes, estas pueden ser bien descriptas como: el compilador (incluyendo el pre-procesador), la máquina virtual y la librería de ejecu-ció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 consi-derando.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 aplica-ció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 pro -blema 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 co-mo la la VM y la RTL de una aplicación compilada con Harbour. El enunciado de la ex-cepció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 restringi-do, 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 Har -bour bajo el nombre "Harbour". Si Ud. copia código desde otro Proyecto Harbour ó desde alguna liberación de la Fundación de Software Libre, dentro de una copia de Harbour, tal como la Licencia Pública General lo permite, la excepción no se aplica al código que Ud. agrega de esta forma.Para evitar engañosa alguien con el estado de estos archivos modificados, Ud. debe borrar el aviso de excepción de ellos.Si Ud. escribe modificaciones de su propia creación para Harbour, es su elec-ción, cuándo permitir que esta excepción se aplique a sus modificaciones. Si Ud. no desea eso, borre el aviso de excepción."

58

Page 62: manual FWH español

Harbour FWH

Por favor note que la escritura original de la excepción estaba basada en una versión anterior de la excepción de guile. Aquella versión de la excepción usaba menos pala-bras 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 res-tringido 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 cam-bios. 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 pala-bras, 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 requeri -miento 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 al -gunas 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 desarrolla-dores 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? PosiblementeCreo 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 ó, me-jor aún la respuesta pretendida es no. Harbour está todavía bajo desarrollo y hay po-sibilidades 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.

59

Page 63: manual FWH español

Harbour FWH

Si Ud. advierte que esto ha pasado, hágalo saber a los desarrolladores y esto será co-rregido.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 li-bre podría ser la cosa correcta a hacer pero los desarrrolladores de Harbour han deci-dido no insistir con esto. Nosotros pensamos que es más util en esta situación esta-blecer 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 den -tro 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. DetecteComo 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 es-ta haciendo para que lea la licencia por Ud.

Licencia Actual del Proyecto HARBOUR Licencia Anterior del Proyecto HARBOURDurante un cierto tiempo va a permanecer aquí, la versión anterior de la licencia, pre-via 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ér-minos 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 poste-rior, con una excepción: La excepción es que si Ud. enlaza (link) la Librería de Ejecución Harbour (HRL = Har-bour Runtime Library) y/o la Máquina Virtual Harbour (HVM = Harbour Virtual Machi-ne) 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 espe-ranza que le pueda ser útil, pero SIN NINGUNA GARANTIA; aún sin la garantía implícita de COMERCIO O DESTINO PARA ALGÚN PROPÓSITO PARTICULAR. Consulte la License Pública General (GNU) para mayores detalles. Ud. debería haber recibido una copia de la Licencia Pública General (GNU) junto con este programa; si no, escriba a la Fundación de Software Libre Free Software Founda-tion, Inc.,675 Mass Ave Cambridge, MA 02139, USA (o visite su sitio Web en http://www.gnu.org/).

60

Page 64: manual FWH español

Harbour FWH

Garantía Actualmente la sentencia de garantía esta provista por la GPL: "Este programa es dis-tribuido 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 PAR-TICULAR."

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

61

Page 65: manual FWH español

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 gra-matica 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 sim-ples 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 ope-rando 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 to-pe de Win32Cygwin fue originalmente diseñado e implementado por Steve Chamberlain cuando el trabajaba para Cygnus. Actualmente el grupo Cygwin en Red Hat, Inc. consis-te primariamente de tres personas: Christopher Faylor (encargado), Corinna Vinschen (ingeniera senior), DJ Delorie (ingeniero senior, voluntario interno del grupo gcc). a pági-na principal del proyecto Cygwin esta en: http://cygwin.com/ Ud. puede encontrar docu-mentación pararramientas individuales GNUen:http://www.fsf.org/manual/ CVS:

62

Page 66: manual FWH español

Harbour FWH

Acrónimo de Current Version System, Sistema de Control de Versiones Sistema com-puesto 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 patro-nes 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 licen-cia 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 pro-yecto GCC de la FSF, fue unificado con EGCS y el resultado es la version gcc-2.95 libe-rado 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 en-torno de ejecución es radicalmente distinto. zGPL:

63

Page 67: manual FWH español

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 supe-rior del sistema de Entrada / Salida de Clipper. En un nivel inferior se encuentra el con-trolador de terminal.

H Harbour: Compilador de XBase, similar a CA-Clipper (MR), diseñado para trabajar en distintas pla-taformas: 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 provis-tas por la API Windows32.

N

64

Page 68: manual FWH español

Harbour FWH

O OOP: Acrónimo de Object Oriented Programming. ó Programación Orientada a Objetos.

P Patch: Parche, programa utilizado para actualizar otro programa a una version actualizada.

Q R RDD: Acrónimo de Replaceble Database Driver (Controlador de Bases de Datos Reemplaza-ble). 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 momen-to dado. SSH: Abreviatura de Secure SHell . (entorno seguro).Es un programa ejecutable para logo-nearse 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 co-mo 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

65

Page 69: manual FWH español

Harbour FWH

V VM: Abreviatura de Virtual Machine (Máquina Virtual). (HVM = Harbour Virtual Machine) ó Máquina Virtual de Harbour.

W Wrapper: (envoltura) El término tipicamente se utiliza para funciones ó procedimientos. "wrapper function" ó función de envoltura.Codigo, el cual es combinado con otra pieza de codigo para determinar como ese co-digo 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 indepen-diente del sistema operativo y su instalación es opcional. Es de bajo nivel y sobre él co-rren 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 gra-matica 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.ta-b.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 Corpo-ration.

66