Академический Документы
Профессиональный Документы
Культура Документы
La documentación de Harbour es
© El Proyecto Harbour
www.harbour-project.org
Harbour
FWH
Contenido
CONTENIDO.........................................................................................................1
-1-
Harbour
FWH
La Pila (stack):.................................................................................................................27
La tabla estática de símbolos:...........................................................................................27
La tabla dinámica de símbolos..........................................................................................27
Variables estáticas y públicas:..........................................................................................27
La memoria:....................................................................................................................27
El sistema extendido:.......................................................................................................27
Arrays Multidimensionales:...............................................................................................27
El motor de Objetos:........................................................................................................27
El subsistema macro:.......................................................................................................27
El subsistema de areas de trabajo:...................................................................................27
-2-
Harbour
FWH
-3-
Harbour
FWH
-4-
Harbour
FWH
FiveWin para Harbour (FWH) es un conjunto de comandos, clases y funciones creadas con el
objetivo de obtener la mayor potencia del entorno de Microsoft Windows en unión con Harbour,
el compilador de código abierto compatible Clipper (http://www.harbour-project.org).
FWH es una librería que puede lincar con su aplicación en Harbour facilitando el uso de todas
esas functionalidades.
Esta versión de FWH ha sido construida usando El compilador gratuito Borland C/C++5.5
(http://www.borland.com/bcppbuilder/freecompiler) compilador que tambien ha sido utilizado
para construir Harbour. Actualmente FWH tambien soporta el compilador de Microsoft Visual C+
+.
FWH ha sido desarrollado para mantener una completa compatibilidad con la libreria FiveWin
para Clipper original. FiveTech así ofrece verdadera compatibilidad entre 16 y 32 bits. Debido a
este nivel de compatibilidad ambos productos comparten el mismo manual y los ejemplos
proporcionados.
El conjunto de clases de FWH son completamente autocontenidas. FWH facilita las clases
necesarias para crear ventanas standard, diálogos, nenús y barras de botones con el estilo de
Microsoft Office , etc. Las razones por la que FWH ha sido desarrollada con su propio grupo de
GUI clases son las siguientes:
Total soporte de recursos de Windows estandar: FWH le permite utilizar herramientas estandar
para diseñar diálogos, como Microsoft Visual Studio o Borland Resource Workshop, posibilitando
el diseño visual tal como hacen los programadores profesionales con C y C++. De este modo,
diseñando sus propios diálogos le permitirá tener total independencia entre el diseño gráfico del
interface y el codico fuente de sus aplicaciones. Podrá modificar facilmente sus diálogos sin
necesidad de alterar o modificar el correspondiente código fuente.
FWH utiliza las propias librerías de importación de Borland C/C++ 5.5 (ó de Microsoft Visual C+
+, en adelante MSVC) para acceder al API de Windows por lo que no se necesita el equivalente
WinApi.lib de FiveWin para Clipper.Simple y facil de usar: Los comandos y el conjunto de clases
de FiveWin para Harbour han sido especialmente diseñadas para ofrecer una gran facilidad de
uso y requerir una mínima formación. FiveWin ha sido siempre muy popular por su potencia y
facilidad de uso.
-5-
Harbour
FWH
Estas razones demuestran lo importante que es usar FWH para migrar sus actuales aplicaciones
de Clipper y FiveWin a 32 bits. FWH le dará un control total sobre el entorno Microsoft Windows
y es indispensable para cualquier empresa de programación profesional ya que permite entregar
aplicaciones bajo Windows que ofrecen soluciones de gestión modernas y actualizadas.
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"
-6-
Harbour
FWH
Una vez instalado Harbour, FWH y el compilador gratuito Borland C/C++, simplemente vaya al
directorio c:\FWH\SAMPLES y revise los paths definidos en BuildH.bat para asegurarse que
coinciden con los paths seleccionado en la instalación de Harbour y Borland Luego escriba:
BuildH.bat tutor01
Esto hará que Harbour.exe compile tutor01.prg, llame a bcc32.exe para generar el OBJ
requerido, brc32.exe genere si existe el fichero de recursos RES y por último ilink32.exe
construya el EXE. Todo el proceso es realizado de un modo automático desde BuildH.bat.
Una primera ventana tipo 'Hello World!' mostrará un pequeño dialogo en la pantalla. Si no es así,
por favor revise de nuevo los paths dentro BuildH.bat para asegurarse que son los que ha
seleccionado para la instalación de Harbour y del compilador Borland.
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.
BuildH.bat:
ECHO Compiling...
set hdir=c:\harbour\harbour
set bcdir=c:\bcc55\bin
-7-
Harbour
FWH
:ENDCOMPILE
:LINKERROR
%1
rem if exist meminfo.txt notepad meminfo.txt
rem PAUSE * Linking errors *
GOTO EXIT
:SINTAX
ECHO SYNTAX: Build [Program] {-- No especifiques la extensi¢n PRG
ECHO {-- Don't specify .PRG extension
GOTO EXIT
:NOEXIST
ECHO Not exist the specified PRG
:EXIT
Recomendaciones importantes:
-8-
Harbour
FWH
Observe el uso del Borland bcc32.exe (compilador Borland C/C++ compiler), después de llamar
al propio Harbour, para generar los OBJs necesarios para luego ser lincados con Borland
ilink32.exe (también gratuito).
No utilice Borland Resource WorkShop para guardar sus DLLs de 32 bits, pueden corromperse.
Guarde sus recursos como un fichero '.RC' (ASCII), y luego podrá utilizar el compilador de
recursos 'BRC32.exe' para convertir el fichero '.RC' en una DLL de 32 bugs usando la utilidad que
proporcionamos DLL\rc2dll32.bat.
Si mantiene todos sus recursos en una DLL, será muy fácil guardarlas en un fichero '. RC'
directamente desde Resource Workshop, luego utilice ese '.RC' para lincarlo directamente en su
'.EXE'.
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%.
ECHO Compiling...
set hdir=c:\harbour\harbour
set bcdir=c:\bcc55\bin
-9-
Harbour
FWH
echo %1.exe, + >> b32.bc
echo %1.map, + >> b32.bc
echo ..\lib\FiveH.lib ..\lib\FiveHC.lib + >> b32.bc
echo %hdir%\lib\b32\rtl.lib + >> b32.bc
echo %hdir%\lib\b32\vm.lib + >> b32.bc
echo %hdir%\lib\b32\gtwin.lib + >> b32.bc
echo %hdir%\lib\b32\lang.lib + >> b32.bc
echo %hdir%\lib\b32\macro.lib + >> b32.bc
echo %hdir%\lib\b32\rdd.lib + >> b32.bc
echo %hdir%\lib\b32\dbfntx.lib + >> b32.bc
echo %hdir%\lib\b32\debug.lib + >> b32.bc
echo %hdir%\lib\b32\common.lib + >> b32.bc
echo %hdir%\lib\b32\pp.lib + >> b32.bc
echo %bcdir%\lib\cw32.lib + >> b32.bc
echo %bcdir%\lib\import32.lib, >> b32.bc
IF EXIST %1.res echo %1.res >> b32.bc
%bcdir%\ilink32 -aa -Tpe @b32.bc
IF ERRORLEVEL 1 GOTO LINKERROR
ECHO * Application successfully built
ECHO
:LINKERROR
%1
rem if exist meminfo.txt notepad meminfo.txt
rem PAUSE * Linking errors *
GOTO EXIT
:SINTAX
ECHO SYNTAX: Build [Program] {-- No especifiques la extensi¢n PRG
ECHO {-- Don't specify .PRG extension
GOTO EXIT
:NOEXIST
ECHO Not exist the specified PRG
:EXIT
Harbour necesita realizar pequeños cambios en sus ficheros de desarrollo C. Proporcionamos una
utilidad llamada TOOLS\Clp2Harb.exe que realiza automáticamente dichos cambios.
- 10 -
Harbour
FWH
Clp2Harb.exe es una pequeña aplicacion de Harbour (se proporcionan sus fuentes). Clp2Harb.exe
se debe ejecutar antes de compilar sus fichero C:
Clp2harb.exe 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>
En vez de hacer una llamada a la función LoadLibray("Bwcc.dll") como en Fivewin 16 bits, deberá
hacer los siguiente:
BWCCRegister( GetResources() )
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.
- 11 -
Harbour
FWH
Diríjase al area "download" y seleccione la sección 5.7/2.7 release, haga click y descargue el
archivo arc.exe. Este software incluye todas las librerias necesarias que son:
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.
// FiveWin ADS use sample
#include "FiveWin.ch"
#include "ads.ch"
REQUEST _ADS
////
function Main()
rddRegister( "ADS", 1 )
rddsetdefault( "ADS" )
SET SERVER LOCAL
SET FILETYPE TO CDX
USE Clientes // Open any DBF
OrdSetFocus("DIRECCION") // Second Tag on Clientes.cdx
Gotop()
Browse() // Quick browse!!!
- 12 -
Harbour
FWH
USE
return nil
////
- 13 -
Harbour
FWH
- 14 -
Elementos de Harbour
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:
\rtl\gtdos
\gtwin
\gtos2
\gtstd
\gtcrs
\gtsln
\gtpca
69
Harbour
FWH
\vm
\utils\hbrun
\hbtest
\hbdoc
\lib\b16
\b32
\..
\obj\b16
\b32
\bin\b16
\b32
\tests
\samples
SUBDIRECTORIOS:
Como se podrá ver, los subdirectorios están separados en unidades lógicasó componentes con
una funcionalidad, que le es propia.
hb-dev\include
--------------
Contiene los headers ó archivos de cabecera, tanto los archivos.h (utilizados desde lenguaje C)
como los archivos.ch usados por Clipper/ Harbour.
hb-dev\source
-------------
Desde aqui cuelgan los subdirectorios que contienen los archivos fuentes (archivos.c y
archivos.prg) que componen el compilador y la RTL, como se puede ver arriba.
hb-dev\source\common
--------------------
Harbour tiene un directorio "common", para archivos de uso común y aquellas funciones que son
compartidas por el compilador y la RTL.Puede haber alguna redundancia, pero éste es el
contexto históricopor el que esta hecho de esta forma.Por ejemplo hb_strupr() y otras deberían
estar aqui
hb-dev\source\compiler
----------------------
Contiene archivos propios del compilador.
14
Harbour
FWH
hb-dev\source\debug
--------------------
Contiene archivos del debugger ó depurador.
hb-dev\source\macro
-------------------
Contiene archivos del compilador de macros
hb-dev\source\pp
----------------
Contiene archivos del pre-procesador
hb-dev\source\rdd\
------------------
Contiene archivos de drivers de bases de datos reemplazables
hb-dev\source\rtl\gt
--------------------
Contiene archivos de la Run Time Library (librerías)
15
Harbour
FWH
- gtdos
- gtwin \
- gtos2 \
- gtstd | para otras
- gtcrs | plataformas
- gtsln /
- gtpca /
- rdd
- tools
Para qué sirven cada uno de los programas ?
Primero que nada quiero hacer la salvedad que la extensión de los archivos exe (por ejecutable),
lib (por librería), están históricamente ligados a un entorno DOS y que esto puede no aplicarse
(de hecho no lo hace) en otras plataformas como linux. Pero en este caso (plataforma DOS) sirve
para entender mejor su uso.
a) Ejecutables:
1 - harbour.exe
===============
Es el compilador generado, es el equivalente a CLIPPER.EXE.
Recibe como entrada archivos.prg y puede obtenerse como salida archivos .ppo, archivos.c,
archivos.hrb ú otros (ver documentación).
Actualmente Harbour carece de un linker o enlazador para construir los archivos.exe finales, pero
se está trabajando activamente en ello.
2 - hbpp.exe
============
Es el pre-procesador de Harbour, realiza las mismas tareas que el pre procesador de Clipper.
3 - hbrun.exe
=============
Es un intérprete de p-code, producto intermedio entre un archivo.prg y un archivo ejecutable.
Tiene similitud con el intérprete de p-code java.
4 - hbtest.exe
===============
Ejecutable final, que contiene archivos.prg que se utilizan como test, que se compilan a archivos
fuente de lenguaje C y luego se enlazan con laslibrerías de Harbour para generar un ejecutable
con propósito de testeo.
5 - hbdoc.exe
=============
Es un programa para generar documentación de Harbour en distintos formatos y
empaquetamientos: norton guides (ng), rich tech format (rtf), man pages, todo a partir de
simples archivos de texto.
16
Harbour
FWH
Para ello utiliza una plantilla, basada en el diseño Nanforum de documentación, que es la
habitualmente usada por los desarrolladores de clipper de todo el mundo.
b) Librerías: (principales, no exhaustivo!)
- vm.lib
- macro.lib
- pp.lib
- common.lib
- debug.lib
- rtl.lib
- dbfcdx.lib
- dbfntx.lib
- nulsys.lib
- gtdos
- rdd
- tools
1 - vm.lib
Librería dónde se encuentran las funciones que componen la "Virtual Machine", o máquina virtual
de Harbour.
2 - macro.lib
Librería dónde se encuentran las funciones del compilador de las macros de Clipper.
3 - pp.lib
Librería dónde se encuentran las funciones del pre-procesador.
4 - common.lib
Librería dónde se encuentran funciones comunes del compilador independiente y el compilador
de macros, optimizador de expresiones, etc.
5 - debug.lib
Librería dónde se encuentran las funciones del depurador de Harbour, el equivalente al ALTD.exe
de Clipper.
6 - rtl
Librería dónde se encuentran las funciones de la Run-Time Library (librería de ejecución, el
equivalente a clipper.lib y extend.lib
7 - dbfcdx.lib
Librería dónde se encuentran las funciones del controlador de índices CDX.
8 - dbfntx.lib
Librería dónde se encuentran las funciones del controlador de índices NTX.
9 - gtdos
Librería donde se encuentran las funciones del controlador de terminal, el equivalente de clipper
a terminal.lib para DOS.
10 - rdd
Librería donde se encuentran las funciones del controlador reemplazable de bases de datos
(RDD)
11 - tools
17
Harbour
FWH
Librería donde se encuentran funciones externas de propósito general, el equivalente de Clipper
de una librería de terceras partes.
NOTA Esta es una lista general, no pretende ser exaustiva sino darle un mayor entendimiento
sobre cómo esta construido Harbour.
Si Ud. en cambio descarga los archivos fuentes, podrá construir los ejecutables y las librerías
citadas Ud. mismo, y si se siente capaz de hacerlo nosotros lo alentamos a que lo haga.
De esa forma podrá colaborar con las distintas etapas.
Antes de empezar debe tener seteadas distintas variables de entorno para el correcto desarrollo
del proyecto:
SET HB_ARCHITECTURE=dos
SET HB_COMPILER=bcc16
SET HB_GT_LIB=gtdos
SET HB_HOMEDRIVE=D
SET HOME=D:\HB33
SET HOMEPATH=/HB33/
SET C_USR=-DHARBOUR_USE_DOS_GTAPI
REM SET BISON_SIMPLE=C:\BATCH\BISON.SIMPLE
Existen archivos BATCH que simplifican la tarea configurando algunos parámetros y llamando a
los programas apropiados en el orden adecuado Existen tambien archivos de configuración para
esos programas, que estan en los distintos subdirectorios que cuelgan de ..\config para cada una
de las plataformas elegidas.
18
Harbour
FWH
parametro - CLEAN
Si existen...
Borra todo los ejecutables del subdir \bin\b16
Borra todo los archivos.tds del subdir \bin\b16
Borra todo los archivos.map del subdir \bin\b16
Borra todo los archivos.lib del subdir \lib\b16
Borra todo los archivos.bak del subdir \lib\b16
Borra todo los archivos.obj del subdir \obj\b16
Borra todo los archivos.c del subdir \obj\b16
Borra todo los archivos.h del subdir \obj\b16
Borra el archivo make_b16.log del subdirectorio principal del proyecto, que hemos elegido(hb-
dev)
Este último es un archivo hacia donde se redireccionan los errores ocurridos durante las distintas
etapas en el proceso de generación del compilador.
sin parámetros
Invoca al programa ejecutable make.exe (puede variar su nombre según el compilador en
cuestión) que forma parte del paquete del compilador.
Este ejecutable make, a su vez llama al compilador de lenguaje C (de línea de comandos, no de
entorno de ventanas) bcc.exe y a otros ejecutables que son tasm.exe flex.exe, bison.exe, tlib.exe
de acuerdo a las dependencias que existan en un archivo makefile.[bc]
Los llama cada vez que observa que la hora y fecha del archivo fuente.c no se corresponden con
la hora y fecha del archivo.obj (archivo binario producto de la compilación del anterior).
Este ejecutable make.exe recibe distintos parámetros de configuración, y ya estan seteados..
Si ocurre algún error durante el funcionamiento de estos ejecutables, estos errores se
redireccionan al archivo "make_b16.log" para poder ser revisados posteriormente.
19
Harbour
FWH
harbour.l -> harbourl.c
macro.l -> macrol.c
Por la acción de bison.exe se generan los siguientes archivos.c:
macro.y -> macroy.c
harbour.y -> harboury.c
Por la acción de bcc.exe se generan los siguientes archivos.obj:
harbour.obj
harboury.obj * producto de bison
harbourl.obj * producto de flex
cmdcheck.obj
hbusage.obj
hbgenerr.obj
hbpcode.obj
genc.obj
genobj32.obj
genjava.obj
genhrb.obj
expropta.obj
exproptb.obj
exproptc.obj
hbfunchk.obj
20
Harbour
FWH
pplib.obj
pptable.obj
21
Harbour
FWH
symbols.obj
harbinit.obj
SET HB_ARCHITECTURE=w32
SET HB_COMPILER=bcc32
SET HB_GT_LIB=gtwin
SET HB_HOMEDRIVE=C
SET HOME=C:\hb-dev
22
Harbour
FWH
SET HOMEPATH=/hb-dev/
SET C_USR=-DHARBOUR_USE_WIN_GTAPI
SET BISON_SIMPLE=C:\BATCH\BISON.SIMPLE
PATH=c:\windows\command;c:\bcc55\bin;c:\ssh;c:\cvs;c:\flex;c:\batch;
c:\hb-dev\bin
Flex
Flex es una herramienta para generar programas exploradores ó "scanners": programas que
reconocen patrones léxicos en el texto. Flex lee el archivo de entrada provisto (en nuestro caso
harbour.l y macro.l), o el archivo estandar si no se da otro, por una descripción de un explorador
a generar.
La descripción es en forma de pares de expresiones regulares y código de lenguaje C, llamadas
"reglas".Flex genera como salida un archivo fuente de lenguaje C por cada archivo de entrada
(que en nuestro caso son harbourl.c y macrol.c ), el cual define una rutina "yylex()".Este archivo
es compilado y enlazado con una librería para producir un ejecutable.Cuando el ejecutable esta
corriendo, analiza su entrada en busca de expresiones regulares. Cuando encuentra alguna
23
Harbour
FWH
ejecuta el correspondiente código C.La terminación de los archivos.l se debe a que el programa
original que los generaba se llamaba LEX, en cambio flex (Fast LEX) es un proyecto GNU.
Mayor información sobre flex puede ser encontrada en el sitio: www.gnu.org
Bison
Bison es un generador de "parsers" o analizadores (de propósito general) que convierte una
descripción gramatical para una gramática de libre contexto en un programa de lenguaje C, para
analizar esa gramática.
En el caso de Harbour el archivo de entrada es "harbour.y" Bison genera como salida un archivo
fuente de lenguaje C llamado "harboury.c" La terminación de los archivos.y se debe a que el
programa original que los generaba se llamaba YACC, bison es un proyecto GNU.
Cuando Ud. corre Bison, Ud. le esta dando un archivo de gramática como entrada. La salida es
un archivo fuente en "C" que analiza el lenguaje descripto por la gramática. Este archivo es
llamado el analizador Bison. Tenga en mente que la utilidad Bison y el analizador bison son dos
programas distintos: El ejecutable ó utilidad Bison es un programa cuya salida es el analizador
Bison que formará parte del compilador.
El trabajo del analizador Bison es agrupar tokens en conjuntos de acuerdo a las reglas
gramaticales.Por ejemplo para construir identificadores y operadores dentro de expresiones. A
medida que hace esto, el ejecuta las acciones para las reglas gramaticales que el usa.
Los tokens vienen desde una función llamada el analizador léxico que Ud. debe aportar de alguna
forma (como ser escribirlo en C).El analizador Bison llama al analizador léxico cada vez que el
necesita un nuevo token. Este no sabe que hay "dentro" de los tokens (aunque sus valores
semánticos pueden reflejar esto).
Tipicamente el analizador léxico hace los tokens analizando caracteres de texto, pero Bison no
depende de esto. vea la función yylex().
El analizador Bison es código C, el cual define una función llamada yyparse(), la cual implementa
aquella gramática. Esta función no constituye un programa C completo: Ud. debe aportar algunas
funciones adicionales. Una es el analizador léxico, otra es una función de reporte de errores a la
cual el analizador llama para reportar un error. En adición un programa C completo debe
comenzar con una función llamada main(), Ud. debe proveer esto, y arreglar para que esta llame
a la función yyparse() ó el analizador no correrá nunca.
Aparte de los nombres de los tipos de tokens y los símbolos en las acciones que Ud. escriba, todo
los nombres de variables y funciones usadas en el analizador Bison empiezan con 'yy' o 'YY'. Esto
incluye funciones de interfaz como el analizador léxico yylex, la función de reporte de errores
yyerror() y la función analizadora misma yyparse(). Esto también incluye numerosos
identificadores usados para propósitos internos. Entonces Ud. debería evitar usar identificadores
de C que comiencen con "yy" o "YY" en el archivo de gramática Bison excepto por los ya
comentados.
Mayor información sobre Bison puede ser encontrada en el
sitio:www.gnu.org/software/bison/bison.html
24
Harbour
FWH
Estado actual En el estado actual Harbour, al compilar un archivo no produce como salida un
archivo de tipo obj, sino que genera un archivo.c que es transformado en archivo.obj por acción
del compilador de C y en ejecutable por efecto del linkeditor que acompaña al compilador de C
(en nuestros ejemplos, Borland). Luego de terminar la funcionalidad básica y alcanzar la versión
1.0 de Harbour el equipo de Harbour espera poder satisfacer esta falta.
25
Harbour
FWH
El bucle principal de ejecución esta definido en una función de C llamada VirtualMachine(), la cual
recibe 2 parametros: la intrucciones pcode para ejecutar y la tabla local de simbolos (una porción
de la tabla de simbolos OBJs (estatica) ) usada para ese pcode: por favor revise hbpcode.h para
la implementación actual de los opcodes pcode.
VM( pcode, local symbols ) La VM puede invocar a la VM de nuevo (a si misma). Esto permite al
lenguaje Clipper acceder a funciones y metodos Clipper y funciones externas en lenguaje C una
vez y otra vez. La VM organiza estos multiples accesos en una forma ordenada y totalmente
controlada e implementa servicios para acceder a esos múltiples niveles de ejecución
(ProcName(), ProcLine(), depuración y acceso a las variables de la pila ).
Los subsistemas VM estan continuamente usados por el bucle principal de ejecución. Vamos a
revisar esos subsistemas VM.
El Arranque
La Pila (stack)
La tabla estática de símbolos
La tabla dinámica de símbolos
Variables estáticas y públicas
La memoria
El sistema extendido
Arrays Multidimensionales
El motor de Objetos
El subsistema macro
El subsistema de áreas de trabajo
26
Harbour
FWH
El Arranque:
Controla la inicialización de los diferentes subsistemas de la VM, esta es invocada al principio de
la aplicación. Esta también controla la salida de la aplicación.
La Pila (stack):
La VM No usa la pila de la computadora directamente, esta usa en su lugar su propia pila para
manipular valores (parámetros, valores retornados y símbolos) como lo hace la pila de hardware.
La tabla estática de símbolos :
Es creada por el compilador en tiempo de compilación y agrupada por el enlazador (linker) en los
OBJs, Este subsistema es responsable por un inmediato acceso a la ubicación de las funciones y
esta altamente relacionada a la tabla dinámica de símbolos en tiempo de ejecución. Esta tabla
contiene muchos símbolos duplicados que serán optimizados por la tabla dinámica de símbolos.
La tabla dinámica de símbolos.
Es dinámicamente generada desde el subsistema de inicio al principio de la aplicación. Esta
organiza en una forma eficiente la tabla estática de símbolos creando un índice alfabético que
permite una búsqueda dicotómica de los símbolos. Este subsistema es responsable por el rápido
acceso a los símbolos (funciones, variables, campos y alias de las areas de trabajo).
Variables estáticas y públicas:
Responsable por el almacenamiento de variables públicas y estáticas.
La memoria:
Responsable por la ubicación, reubicación, bloqueo, desbloqueo y liberación de memoria.
El sistema extendido:
Define la interfaz (_parc(), ..., _retc() ) desde un bajo nivel (lenguaje C) hasta un alto nivel
(lenguaje Clipper). Este subsistema es responsable por conectar en una forma adecuada las
funciones en lenguaje C a la aplicación entera.
Arrays Multidimensionales:
Este subsistema permite la creación de arrays, y los servicios para manipular estos en todas sus
formas. Los arrays son extensivamente usados por el lenguaje Clipper y también ellos son la
fundación de los Objetos (los Objetos son sólo arrays referidos a una Clase específica).
El motor de Objetos:
Responsable por la creación de Clases y Objetos. Este también define la forma de acceso a un
método específico de clase para ser invocados por la VM y provee todo tipo de información de
clases que pueden ser requeridos al tiempo de la ejecución.
El subsistema macro:
Este implementa un compilador reducido que puede ser usado en tiempo de ejecución para
generar pcodes para ser usados por la aplicación. En efecto ésta es una parte de la
especificaciones de yacc (Bison) para Harbour.
El subsistema de areas de trabajo:
Responsable por el manejo de las bases de datos. Este subsistema define la ubicación donde las
áreas de trabajos serán almacenadas y provee todas las funciones de acceso a esas áreas de
trabajo. Este también implementa la interfaz para el controlador de base de datos reemplazable.
27
Harbour
FWH
Los opcodes de Harbour imitarán a los de Clipper ?, habrá una relación 1:1 entre ellos ?Si es así,
están los opcodes de Clipper descriptos en algún lado ?.
Clipper language pcode opcodes
DEFINE NAME VALOR BYTES
#define NOP 0x00 1
#define PUSHC 0x01 3 + literal
#define PUSHN 0x05 3
#define POPF 0x06 3
#define POPM 0x07 3
#define POPQF 0x08 3
#define PUSHA 0x09 3
#define PUSHF 0x0A 3
#define PUSHM 0x0B 3
#define PUSHMR 0x0C 3
#define PUSHP 0x0D 3
#define PUSHQF 0x0E 3
#define PUSHV 0x0F 3
#define SFRAME 0x10 3
#define SINIT 0x11 3
#define SYMBOL 0x12 3
#define SYMF 0x13 3
#define BEGIN_SEQ0x19 3
#define JDBG 0x1A 3
#define JF 0x1B 3
#define JFPT 0x1C 3
#define JISW 0x1D 3
#define JMP 0x1E 3
#define JNEI 0x1F 3
#define JT 0x20 3
#define JTPF 0x21 3
#define PUSHBL 0x23 3
#define ARRAYATI 0x24 3
#define ARRAYPUTI 0x25 3
#define CALL 0x26 3
#define DO 0x27 3
#define FRAME 0x28 3
#define FUNC 0x29 3
#define LINE 0x2A 3
#define MAKEA 0x2B 3
#define MAKELA 0x2C 3
#define PARAMS 0x2D 3
#define POPFL 0x2E 3
28
Harbour
FWH
#define POPL 0x2F 3
#define POPS 0x30 3
#define PRIVATES 0x31 3
#define PUBLICS 0x33 3
#define PUSHFL 0x34 3
#define PUSHFLR 0x35 3
#define PUSHI 0x36 3
#define PUSHL 0x37 3
#define PUSHLR 0x38 3
#define PUSHS 0x39 3
#define PUSHSR 0x3A 3
#define PUSHW 0x3B 3
#define SEND 0x3C 3
#define XBLOCK 0x3D 3
#define MPOPF 0x4A 5
#define MPOPM 0x4B 5
#define MPOPQF 0x4C 5
#define MPUSHA 0x4D 5
#define MPUSHF 0x4E 5
#define MPUSHM 0x4F 5
#define MPUSHMR 0x50 5
#define MPUSHP 0x51 5
#define MPUSHQF 0x52 5
#define MPUSHV 0x53 5
#define MSYMBOL 0x54 5
#define MSYMF 0x55 5
#define ABS 0x56 1
#define AND 0x57 1
#define ARRAYAT 0x58 1
#define ARRAYPUT 0x59 1
#define BREAK 0x5A 1
#define DEC 0x5B 1
#define DIVIDE 0x5C 1
#define DOOP 0x5D 1
#define EEQ 0x5E 1
#define ENDBLOCK 0x5F 1
#define ENDPROC 0x60 1
#define END_SEQ 0x61 1
#define EQ 0x62 1
#define EVENTS 0x63 1
#define FALSE 0x64 1
#define GE 0x65 1
29
Harbour
FWH
#define GT 0x66 1
#define INC 0x67 1
#define LE 0x68 1
#define LT 0x69 1
#define MINUS 0x6A 1
#define MULT 0x6B 1
#define NE 0x6C 1
#define NEGATE 0x6E 1
#define NOP2 0x6F 1
#define NOT 0x70 1
#define NULL 0x71 1
#define ONE1 0x72 1
#define OR 0x73 1
#define PCOUNT 0x74 1
#define PLUS 0x75 1
#define POP 0x76 1
#define PUSHRV 0x77 1
#define QSELF 0x78 1
#define SAVE_RET 0x79 1
#define TRUE 0x7A 1
#define UNDEF 0x7B 1
#define ZER0 0x7C 1
#define ZZBLOCK 0x7D 1
#define AXPRIN 0x7E 1
#define AXPROUT 0x7F 1
#define BOF 0x80 1
#define DELETED 0x81 1
#define EOF 0x82 1
#define FCOUNT 0x83 1
#define FIELDNAME 0x84 1
#define FLOCK 0x85 1
#define FOUND 0x86 1
#define FSELECT0 0x87 1
#define FSELECT1 0x88 1
#define LASTREC 0x89 1
#define LOCK 0x8A 1
#define RECNO 0x8B 1
#define BNAMES 0x8C 1
#define LNAMES 0x8D 1
#define SNAMES 0x8E 1
#define SRCNAME 0x8F 1
#define TYPE 0x90 1
30
Harbour
FWH
#define WAVE 0x91 1
#define WAVEA 0x92 1
#define WAVEF 0x93 1
#define WAVEL 0x94 1
#define WAVEP 0x95 1
#define WAVEPOP 0x96 1
#define WAVEPOPF 0x97 1
#define WAVEPOPQ0x98 1
#define WAVEQ 0x99 1
#define WSYMBOL 0x9A 1
#define AADD 0x9B 1
#define ASC 0x9C 1
#define AT 0x9D 1
#define CDOW 0x9E 1
#define CHR 0x9F 1
#define CMONTH 0xA0 1
#define CTOD 0xA1 1
#define DATE 0xA2 1
#define DAY 0xA3 1
#define DOW 0xA4 1
#define DTOC 0xA5 1
#define DTOS 0xA6 1
#define EMPTY 0xA7 1
#define QEXP 0xA8 1
#define EXPON 0xA9 1
#define INSTR 0xAA 1
#define INT 0xAB 1
#define LEFT 0xAC 1
#define LEN 0xAD 1
#define LOGQ 0xAE 1
#define LOWER 0xAF 1
#define LTRIM 0xB0 1
#define MAX 0xB1 1
#define MIN 0xB2 1
#define MODULUS 0xB3 1
#define MONTH 0xB4 1
#define REPLICATE 0xB5 1
#define ROUND 0xB6 1
#define SECONDS 0xB7 1
#define SPACE 0xB8 1
#define QSQRT 0xB9 1
#define STR1 0xBA 1
31
Harbour
FWH
#define STR2 0xBB 1
#define STR3 0xBC 1
#define SUB2 0xBD 1
#define SUB3 0xBE 1
#define TIME 0xBF 1
#define TRIM 0xC0 1
#define UPPER 0xC1 1
#define VAL 0xC2 1
#define VALTYPE 0xC3 1
#define WORD 0xC4 1
#define YEAR 0xC5 1
#define TRANS 0xC6 1
#define COL 0xC7 1
#define DEVPOS 0xC8 1
#define INKEY0 0xC9 1
#define INKEY1 0xCA 1
#define PCOL 0xCB 1
#define PROW 0xCC 1
#define ROW 0xCD 1
#define SETPOS 0xCE 1
#define SETPOSBS 0xCF 1
Harbour no implementará todos ellos porque nosotros queremos proveer la mayor libertad a los
programadores para extender y modificar Harbour tanto como se necesite.
Por ejemplo: El lenguaje Clipper usa opcodes para Row(), Col(), Upper(), Space(), Replicate(),
InKey(), Year(), Month(), etc... dónde nosotros sólo queremos llamar a una función estándar de
lenguaje C, que use el sistema extendido estándar y que pueda ser fácilmente modificada.
Así Harbour usará muchos menos opcodes que el lenguaje Clippper. Esto ayudará a tener un
compilador y una VM más simple y fácil de mantener.
He visto que, por ejemplo Clipper tiene un opcode llamado "PUSHWORD"(06), mientras Valkyrie
lo llama "PUSHW"(3B): Diferentes nombres, diferentes códigos. No es deseable que el pCode de
Harbour sea binario-compatible con Clipper ?. Si fuera así la VM de Harbour podría interpretar
código de Clipper y viceversa.
Los opcodes de Harbour están definidos en hbpcode.h Nosotros estamos tratando de usar
mnemónicos muy fáciles, así PUSHWORD parece más fácil que PUSHW. Los valores de los
opcodes son de poco valor porque ellos son sólo usados por una sentencia switch del lenguaje C
(en realidad hay una poderosa optimización la cual es usar el mismo pcode de los opcodes como
32
Harbour
FWH
un índice al array de punteros de las funciones de la VM, así la velocidad de ejecución de la VM
puede incrementarse. Clipper usa esto).
Nosotros no estamos implementando totalmente el modelo de OBJs del lenguaje Clipper (por ej.
para proveer identificadores de nombre de longitud mayor a 10 caracteres) así los OBJ de
Harbour no serán soportados por Clipper y viceversa.
33
Harbour
FWH
Derechos (Copyright)
Este documento esta basado en las FAQs de David A. Pearson copyrighted (c) 1999, 2000, 2001
(con su autorización). Este compendio de preguntas más frecuentes (de sus siglas en inglés,
FAQ), es una evolución de distintos documentos en español hacia una sincronización multi-
idiomática, para mejor servir a su propósito.Algunas porciones del documento pueden ser
copyright de otros autores individuales.
Licencia
Este documento debe ser considerado como software libre, distribuido bajo los términos de la
Licencia Pública General, GNU version 2. Por detalles consulte el archivo COPYING.
Garantía
"Este programa es distribuido con la esperanza que le pueda ser útil, pero SIN NINGUNA
GARANTIA; aún sin la garantía implícita de COMERCIALIZACION O DESTINO PARA ALGÚN
PROPÓSITO PARTICULAR." Vea la Licencia Pública General, GNU para mayores detalles.
Marcas Registradas
Esta documentación hace a varias Marcas Registradas, que sólo son usadas con propósito de
referencia.
34
Harbour
FWH
Harbour
Qué es Harbour ?
Harbour es un compilador libre (gratis !) inter-plataforma para el lenguaje xBase, a menudo
referido como Clipper (el lenguaje que es implementado por el compilador CA-Clipper).
Especificamente Harbour esta diseñado para ser tan cercano al 100% de compatibilidad con CA-
Clipper (MR) como sea humanamente posible.La versión que se eligió para lograr tal
compatibilidad es la versión 5.2e internacional.
Esto no quiere decir que los agregados encontrados en la versión 5.3 no se pondrán dentro de
Harbour, esto simplemente refleja el hecho que muchos programadores de Clipper ven a la
versión 5.2e como la "última mejor" implementación de Clipper.
De ahora en más siempre que se haga referencia a CA-Clipper (MR) y no se indique otra cosa
estaremos hablando de esta versión (C52).Aunque se han agregado algunas funciones básicas
pertenecientes a la versión 5.3, que no alteran el diseño del compilador y que ya estaban
disponibles en lenguaje C y eran ampliamente utilizadas. Si las extensiones al lenguaje son
importantes para Ud. por favor siéntase libre para contribuir al proyecto.
El compilador de Harbour cumple la misma función que CLIPPER.EXE (MR).Tiene la ventaja que
puede generar código de lenguaje C, siendo así virtualmente compatible con miles de librerías y
programas. Se está trabajando en la opción de generar ejecutables para cada una de las
plataformas.Convierte archivos PRG ---> archivos "C"---------> archivos ejecutables archivos PRG
------------------------------> archivos ejecutables
Viene acompañado de librerías que contienen funciones equivalentes a las que acompañan a CA-
Clipper 5.2e Inernacional. Harbour se entrega con todo el codigo fuente (99% ANSI C) y archivos
make, y bat, así todo lo que se necesita hacer para tenerlo corriendo en su plataforma, es
construirlo y conectarlo a la interfaz correcta.
Hay archivos binarios precompilados si Ud. desea testear el compilador y no ir a través de los
pasos para construirlo.
Por qué desarrollar Harbour ?
CA-Clipper (MR) ha sido desde sus comienzos la herramienta preferida por miles de
programadores. Hay probablemente más razones para desarrollar harbour que los
desarrolladores que hay de Harbour.Para obtener un mejor entendimiento sobre por qué el
software libre es desarrollado Ud. podría querer leer "The Cathedral and the Bazaar" (en inglés
unicamente).Algunas de las causas que motivaron el desarrollo de Harbour fueron:
La desaparición de la posibilidad de nuevas versiones de CA-Clipper por discontinuación del
producto.
La dificultad de una migración fácil desde CA-Clipper bajo D.O.S. hacia un entorno windows.
Las distintas empresas que ofrecen alternativas de migración, han adaptado el lenguaje de
manera tal que se hace necesario el aprendizaje de práctimente un nuevo lenguaje de
programación.
35
Harbour
FWH
La falta de soporte real de la compañia propietaria ante conocidos bugs.
Que plataformas son soportadas por Harbour ?
Actualmente, Harbour no esta aún terminado, pero creará ejecutables para correr en forma
nativa en las siguientes plataformas:
Linux (todas las distribuciones)
DOS
Win 3.x
Win 9x, Win ME
Win NT 4.x, 5.x, Win 2000
OS/2
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".
Para más información acerca del estado actual del proyecto harbour o si Ud. desea unirse para
su desarrollo, chequee en el sitio Web http://harbour-project.org (en inglés) el cual tiene
información actualizada acerca de los últimos cambios.
La idea de un compilador de Clipper gratis y con código fuente disponible había estado flotando
por ahí por un largo tiempo.El tema a menudo se planteaba en el grupo de discusión:
comp.lang.clipper.El actual trabajo se inicio a principios de 1999 cuando Antonio Linares
comenzo una tarea para discutir algunas ideas acerca de desarrollar una gramática Clipper
usando Lex y YaccEl resto como se dice "es historia..."
36
Harbour
FWH
Nadie es propietario de Harbour, pero mucha gente tiene el copyright sobre porciones de
Harbour.
37
Harbour
FWH
DOS 16bit
Borland C/C++ 3.1
GNU/Linux
GCC (varias versiones).
OS/2
GCC ( EMX)
IBM C++
Macintosh
MPW
Instrucciones sobre cómo construir harbour con los compiladores de arriba deberían residir en el
directorio doc del árbol fuente de Harbour. Si esa documentación esta desaparecida por favor
considere preguntar acerca de ella en la lista de correo de desarrolladores y, una vez que Ud.
tenga la información, formatee y póngala en el directorio doc para ayudar a otros quienes
pueden desear preguntar lo mismo.
38
Harbour
FWH
39
Harbour
FWH
Un cliente CVS para su plataforma. Por favor vea la seccion FAQ titulada Qué es el CVS y cómo
puedo yo usarlo ? para más detalles sobre la obtención del cliente CVS para su entorno.
Dónde puedo encontrar los fuentes ?
Hay 3 métodos de obtener las fuentes para Harbour, cual método Ud. use dependerá cuan
actualizado sienta Ud. que lo necesita.
El estado actual inestable
Un archivo de todos los fuentes del CVS está disponible diariamente a través del Servidor CVS de
SourceForge
Bajar desde: http://cvs.sourceforge.net/cvstarballs/Harbour-project-cvsroot.tar.gz .or favor este
advertido que esta es una versión inestable. Usando este código fuente podrían pasar toda clase
de cosas terribles, esto puede aún no compilar.Ud. ha sido advertido.
También note que lo de arriba es el backup de todos los archivos del CVS, esto incluye registros
de todos los cambios hechos al código fuente desde el principio del proyecto! Por favor note que
el archivo es un archivo "tar gzipeado" que contiene archivos de texto en formato Unix (los
fuentes). Esto no significa que no pueda trabajar en otras plataformas, lo hará es simple código
fuente, pero no se sorprenda si el código fuente luce divertido cuando use un editor de texto no
apropiado.Menos frecuente una copia de los fuentes (no un backup del CVS) está disponible en el
sitio Web de Harbour. Si Ud, sólo desea los fuentes y no una copia de backup de todo el CVS,
esto es lo que Ud. debería descargar.
El estado actual estable
Cada cierto tiempo, el estado actual de Harbour es hecho disponible desde la página de descarga
del sitio web del proyecto Harbour . Estos estados son referidos como liberaciones o "releases" y
son considerados estables, en el sentido que los fuentes compilan y que no hay errores
conocidos en el compilador, máquina virtual ó librería de ejecución.
Si Ud. gusta de jugar con software de calidad alfa, pero quiere sentirse seguro haciendolo,
entonces la liberación estable es para Ud.
Acceso Directo al CVS
El mejor y más directo método de obtener el código fuente es desde el servidor CVS. Este es
donde los desarrolladores de Harbour trabajan sobre los fuentes de Harbour (actualmente, todos
ellos trabajan en sus propias máquinas, este servidor les da a ellos, en efecto un directorio virtual
compartido).
Si Ud. intenta trabajar con Harbour construido desde el CVS mismo, Ud. debería realmente
considerar suscribirse a la lista de correo del desarrolladores .
Por favor note que si Ud. quiere ayudar a desarrollar Harbour entonces la última opción es la
mejor (y, a largo plazo, la única opción útil para todo lo concerniente).
Qué es el CVS y cómo puedo yo usarlo ?
Antes de proceder Ud. debería darle una buena leída a la introducción al CVS por Jim Blandy Leer
este documento podría ahorrarle a Ud. un montón de confusión más tarde.Para usar el servidor
CVS, Ud. primero necesita obtener una copia del software cliente CVS para su sistema operativo:
40
Harbour
FWH
Microsoft Windows Vea http://www.cyclic.com/cvs/windows.html para más detalles.
DOS 16bit/32bitVea la seccion DOS en http://www.cyclic.com/cvs/other.html.
GNU/Linux Muchas distribuciones vienen con el cliente cvs empaquetado como parte de la
distribucion. Si Ud. no lo tiene instalado chequee sus CDs de instalación ó chequee el sitio ftp
para la distribución en cuestion.
OS/2 http://www.cyclic.com/cvs/os2.html
ftp://ftp.leo.org/pub/comp/os/os2/leo/gnu/devtools/cvs110.zip
Macintosh Vea http://www.cyclic.com/cvs/mac.html para más detalles.
Otros Si Ud. esta construyendo harbour con un sistema operativo no listado, entonces por favor
contacte al mantenedor de las FAQ, con detalles completos así esta lista puede ser actualizada.
Una vez que Ud tenga su cliente CVS instalado, Ud. puede ganar acceso anónimo al servidor CVS
de Harbour. Dependiendo de la plataforma, la primera cosa que Ud. necesita hacer es setear la
variable de entorno CVSROOT a:
:pserver:anonymous@cvs.harbour-project.sourceforge.net:/cvsroot/harbour-
project
En adición a lo de arriba algunos entornos pueden requerir información extra. Por ejemplo, en
DOS, windows y OS/2, los clientes CVS necesitan de dos variables de entorno extras,
HOMEDRIVE y HOMEPATH .Estas 2 variables de entorno le dicen al cliente CVS donde estará el
código fuente localmente. Por ejemplo, si su directorio de desarrollo Harbour esta en
S:\FREESOFT\HARBOUR
Ud. ha seteado:
SET HOMEDRIVE=S
SET HOMEPATH=\FREESOFT\HARBOUR\
Usuarios de cliente para windows han reportado que la variable de entorno HOMEPATH debe
comenzar y terminar con una barra de separación de directorio (/). Usuarios del cliente DOS han
reportado que la variable de entorno HOMEDRIVE debe comenzar y terminar con una barra de
separación de directorio (/).Usuarios del cliente DOS han reportado que la variable de entorno
HOMEDRIVE debe terminar con un punto y coma (;) segúrese que su directorio esta creado y
cámbiese dentro de él. Entonces ejecute: cvs login
y presione <Enter> cuando sea preguntado por una password. Ahora ejecute:
para obtener una copia del repositorio del CVS de Harbour (usuarios del cliente DOS han
reportado que no tienen el comando extract y que el comando checkout debe ser usado en su
lugar).
Nota: Los comandos CVS y los directorios son sensitivos a mayúsculas: harbour debe estar en
todos en minúsculas (también note que en SourceForge Harbour es conocido como "harbour-
project".
41
Harbour
FWH
Luego, cuando Ud. desea obtener los cambios del CVS, Ud. puede hacer una de las dos cosas:
Repetir el comando extract desde su directorio de Harbour.
Desde su directorio Harbour ejecutar cvs update .
Si Ud. tiene problemas después de leer lo de arriba por favor considere leer Introducción al CVS y
también la documentación para el cliente CVS que Ud. ha instalado. Si, después de leer ambos
documentos, Ud. esta todavía teniendo problemas Ud. debería enviar un mensaje pulido a la lista
de correo de los desarrolladores detallando su plataforma, entorno, todas las etapas que Ud.
realizó y la exacta naturaleza del problema.
42
Harbour
FWH
43
Harbour
FWH
no-compilador específica pero que sea inter-plataforma y que pueda beneficiar a los
programadores usando alguna de las implementaciones de compiladores de Clipper?
44
Harbour
FWH
45
Harbour
FWH
harbourtalk (discusion)
List-Unsubscribe:
http://www.matrixlist.com/mailman/listinfo/harbourtalk ,
mailto:harbourtalk-request@lists.harbour-project.org?
subject=unsubscribe
No importa en que lista de correo este Ud., es siempre una buena idea no subscribirse nunca a
menos que Ud. sepa como de-subscribirse. Esto puede ser tan simple como conservar el mensaje
de confirmación que muchas listas envian (ellas a menudo incluyen información sobre cómo de-
subscribirse).
46
Harbour
FWH
No, no hay ningún grupo de noticias (newsgroups) para Harbour. Sin embargo, Harbour es un
compilador compatible con Clipper lo cual significa que Harbour esta en tema para el grupo
Usenet comp.lang.clipper.
47
Harbour
FWH
Instalación de Harbour
Mientras Harbour todavía esta en desarrollo el método preferido para la obtención de un binario
de Harbour es descargar el código fuente y construirlo Ud. mismo porque esto ayuda al
desarrollo Sin embargo, los desarrolladores de Harbour también aprecian los esfuerzos de la
gente quien no quiere desarrollar Harbour pero desean testearlo y reportar defectos.
Para esto algún alma bondadosa mantiene los binarios de Harbour que están listos para ser
instalados. Por favor tenga en mente que el siguiente puede no ser el último corte de Harbour
(Harbour cambia cada hora mientras esta en esta fase temprana de desarrollo) y que algunas
plataforms pueden ser mejor soportadas que otras.
La página de descarga en el sitio web de Harbour contiene un número de binarios construidos
con la última versión estable.
David G. Holm esta manteniendo un repositorio de binarios construidos de estables (y algunas
veces, en paralelo inestables) liberaciones en http://www.jsd-llc.com/Harbour-Project/.
Si Ud. no puede encontrar binarios para su entorno via los links de arriba entonces esto significa
que alguien no está contribuyendo para su entorno, quizás Ud. pueda ocuparse de esta parte y
llenar ese vacío ?
48
Harbour
FWH
- djgpp (Delorie GNU C, DOS 32-bit)
- rxs32 (EMX/RSXNT/DOS GNU C, DOS 32-bit)
- watcom (Watcom C++ 9.x, 10.x, 11.x, DOS 32-bit)
Cuando HB_ARCHITECTURE=w32
- bcc32 (Borland C++ 4.x, 5.x, Windows 32-bit)
- gcc (Cygnus/Cygwin GNU C, Windows 32-bit)
- mingw32 (Cygnus/Mingw32 GNU C, Windows 32-bit)
- rxsnt (EMX/RSXNT/Win32 GNU C, Windows 32-bit)
- icc (IBM Visual Age C++, Windows 32-bit)
- msvc (Microsoft Visual C++, Windows 32-bit)
Cuando HB_ARCHITECTURE=linux
- gcc (GNU C, 32-bit)
Cuando HB_ARCHITECTURE=os2
- gcc (EMX GNU C, OS/2 32-bit)
- icc (IBM Visual Age C++ 3.0, OS/2 32-bit)
Poner en este BAT una referencia a los archivos ejecutables de harbour: harbour.exe,
hbpp.exe,
hbrun.exe, etc, en la variable de entorno PATH
por ej: PATH=c:\dos;c:\hb034\bin
Poner una referencia a los archivos header (*.CH) de Harbour (igual que Clipper) en la
variable de entorno
INCLUDE
Se pueden usar otras variables de entorno para configurar aún más el los procesos de
compilación y linkedición.
Por ej. Setear la variable C_USR para indicar que terminal de video va a usar el usuario.
PRG_USR Opciones adicionales para el compilador Harbour
C_USR Opciones adicionales para el compilador de C
L_USR Opciones adicionales para el linker
Entonces el archivo (por ejemplo) hb_16bit.bat quedaría:
49
Harbour
FWH
----------------------------------------------------------
SET INCLUDE=c:\tu_compilador_de_c\include;c:\hb034\include
SET LIB=C:\tu_compilador_de_c\lib;
SET HB_ARCHITECTURE=dos
SET HB_COMPILER=djgpp
SET C_USR=-DHARBOUR_USE_DOS_GTAPI
PATH =C:\WINDOWS;c:\tu_compilador_de_c\bin,c:\hb034\bin;
----------------------------------------------------------
La compilación directa de *.PRG a archivos ejecutables recién está en una etapa inicial, hay
algunos ejemplos que funcionan, pero todavía falta trabajo. Además los archivos de índices
todavía no funcionan a pleno, no existe todavía soporte para índices NTX, pero sí para CDX,
aunque parcial.
50
Harbour
FWH
51
Harbour
FWH
"Cuando esté terminado". Seriamente, Harbour estará terminado cuando este terminado. Si la
velocidad de desarrollo de Harbour no es suficientemente rápida para Ud., Ud. puede siempre
puede contribuir con algo al proyecto para que vaya más rápido. Esas contribuciones pueden ser
código, documentación, máquias más rápidas para los desarrolladores claves (aunque sospecho
que una provisión gratis de pizza podría ser más bienvenida) ó aún una oferta de empleo para
uno ó más desarrolladores para trabajar en Harbour todo el tiempo.
O, para ponerlo de otra forma, podrán ser sus aplicaciones más grandes, pequeñas, lentas,
rápidas, sexies, etc... Generalmente, al menos en esta etapa de la vida de Harbour, cualquier
pedazo de código dado que puede ser compilado con Harbour y con CA-Clipper, sobre la misma
máquina y con el mismo entorno (no podría hacerse una comparación de otra manera, no es
cierto?) correrá más lento y probablemente sea "más grande" cuando es compilado con Harbour.
Lo mismo es probablemente cierto cuando comparamos código compilado con Harbour con otros
compiladores compatibles con Clipper.
Las razones para esto son muchas y variadas y, como son señaladas en muchos lugares en este
documento, Harbour esta todavía en una etapa temprana de su vida y el continuo desarollo y la
compatibilidad con Clipper son de la mayor importancia. La cuestión de "performance" será
tratada cuando sea más apropiado hacerlo, y cuando la gente este disponible para dedicarse a
ello.
Como siempre, si la perfomance de Harbour es un problema para Ud. ahora y Ud. desea ver que
Harbour cumple con sus espectativas entonces, las contribuciones hablan más fuerte que los test
de velocidad.
La principal ventaja de Harbour sobre otros compiladores de Clipper es que éste es software
libre. Harbour también intenta remover algunas de las limitaciones impuestas por la
implementación de base, pero el alcance de esto dependerá de la plataforma elegida por Ud.
Los desarrolladores de Harbour no hacen ninguna exclamación acerca si Harbour es mejor ó peor
que alguna otra implementación del lenguaje, sin embargo, al mismo tiempo, cada desarrollador
individual probablemente puede cantar loas dependiendo del area de Harbour donde él haya
estado trabajando.
52
Harbour
FWH
Más importante, pruebe Harbour, decida por sí mismo por qué este tiene ventajas para Usted.
Qué ventajas tienen otros compiladores de Clipper sobre Harbour?
Actualmente las ventajas que otros compiladores de Clipper tienen sobre Harbour son:
Ellos estan disponibles y funcionando (para distintos valores de "funcionando").
Ellos son soportados.
Ellos estan documentados.
Ellos, en algún grado, le dan a Ud. alguien a quien quejarse.
A medida que transcurre el tiempo la mayoría de las ventajas de arriba se irán acortando, Note
que el proceso de documentación esta bien encaminado y que el soporte es simplemente un
envio a comp.lang.clipper. La única ventaja que será difícil de superar es la última de la lista.
Estoy seguro que los usuarios de otros compiladores, sin mencionar algunos de sus autores,
sienten que hay también otras ventajas. Esto es correcto. Harbour no es un ejercicio para
remover ó reemplazar esos compiladores. Harbour es un esfuerzo para complementar la lista de
compiladores de Clipper con una oferta de software libre.
No, pero la de arriba es la pregunta equivocada para hacerse. La pregunta a hacerse es "existirán
productos de terceras para CA-Clipper que soporten Harbour ?", esa es la pregunta que Ud.
debería hacer al autor del producto.
Vea el sitio web de Harbour para detalles de qué productos de terceros esta siendo desarrollados
actualmente para Harbour ó intentan soportar harbour en un futuro cercano.
No, Harbour es compilador multi-plataforma CA-Clipper compatible, este puede ser usado para
desarrollo en cualquier plataforma soportada.
No hay una lista definitiva de las plataformas soportadas debido a que cualquier plataforma
puede ser soportada si alguien es para hacer que Harbour funcione en él. Al tiempo de escribir
esto, Harbour compila y se ejecuta en las siguientes plataformas: - MS-DOS y Win 3.x
53
Harbour
FWH
(temporariamente fuerra de servicio) - MS-Windows 9x, NT 3,5x, 4.0, Win ME, WWin 2000 -
OS/2 - GNU/Linux (todos las distribuciones) <
54
Harbour
FWH
Punteros y Enlaces
La siguiente es una coleción aleatoria de punteros y enlaces que tratan temas conectados con
Harbour y el desarrollo de Harbour recolectados por Dave Pearson. Los enlaces no aparecen en
ningún orden particular y ninguno de los enlaces es en modo alguno una aprobación al sitio de
destino por el equipo de desarrollo de Harbour.
55
Harbour
FWH
En general el término software libre es una frase para describir software que viene con ciertas
libertades, el libre no habla acerca del precio, esto habla acerca de sus libertades para usar el
software. Una sugerencia común es que Ud. piense en "libertad de palabra" en lugar de "cerveza
libre".
Vea http://www.gnu.org/philosophy/free-sw.html para obtener la definición de "programa libre"
de la FSF (Free Software Foundation) Fundación para el software libre. Un término relacionado es
"OpenSource", algo así como código fuente disponible, Ud. puede encontrar más acerca de la
idea de OpenSource en Ud. pudo también notar que la FSF no considera "OpenSource" y "Free
Software" que sean la misma cosa, vea http://www.gnu.org/philosophy/free-software-for-
freedom.html para más detalles.
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.
56
Harbour
FWH
"La excepción es que, si Ud. enlaza (link) la Librerías de Harbour con otros archivos
para producir un ejecutable, esto por sí mismo no causa que el ejecutable resultante
sea cubierto por la Licencia Pública General GNU.
El uso de ese ejecutable por parte suya no esta en ninguna forma restringido, en
cuenta del enlazado del código de librería de Harbour dentro de él.
Esta excepción sin embargo, no invalida algunas otras razones por las cuales el archivo
ejecutable podría estar cubierto por la Licencia Pública General GNU.
Esta excepción se aplica: solamente al código liberado por el Proyecto Harbour bajo
el nombre "Harbour". Si Ud. copia código desde otro Proyecto Harbour ó desde
alguna liberación de la Fundación de Software Libre, dentro de una copia de Harbour,
tal como la Licencia Pública General lo permite, la excepción no se
aplica al código que Ud. agrega de esta forma.
Para evitar engañosa alguien con el estado de estos archivos modificados, Ud. debe
borrar el aviso de excepción de ellos.
Si Ud. escribe modificaciones de su propia creación para Harbour, es su elección,
cuándo permitir que esta excepción se aplique a sus modificaciones. Si Ud. no desea
eso, borre el aviso de excepción."
57
Harbour
FWH
Por favor note que la escritura original de la excepción estaba basada en una versión anterior de
la excepción de guile. Aquella versión de la excepción usaba menos palabras y era menos clara.
Las palabras de aquella versión eran:
"La excepción es que si Ud. enlaza (link) la Librería de Ejecución Harbour (HRL =
Harbour Runtime Library) y/o la Máquina Virtual Harbour (HVM = Harbour Virtual
Machine) con otros archivos para producir un ejecutable, esto por sí mismo no causa
que el ejecutable resultante sea cubierto por la Licencia Pública General (GNU). Su uso
de ese ejecutable no esta en ninguna forma restringido en cuenta del enlazado de la
HRL y/o del código HVM dentro de él."
Los fuentes de Harbour están siendo convertidos a la nueva excepción a medida que las personas
que mantienen derechos de autor sobre esos fuentes, hagan los cambios. La intención es que
cada porción de los fuentes que haga uso de la excepción de harbour use la versión más
explicativa.
Como se señaló anteriormente, el enunciado de la excepción de la elección actual de la licencia
puede cambiar en algún punto en el futuro.
8.6 Entonces por qué Uds. no usan la LGPL ?
Dada la situación de arriba puede ser razonable preguntar por qué los desarrolladores de
Harbour no eligieron usar la LGPL en su lugar ?. a razón simplemente viene de los requerimientos
de la LGPL y que pueden ser razonablemente preguntado a cualquiera quien desee hacer uso de
Harbour.
La LGPL requiere que cualquier distribución binaria del código LGPLd (en otras palabras, una
aplicación compilada con Harbour y enlazada contra la HVM y RTL) debería ser distribuido en un
método que permita al usuario re-enlazar (re-link) la aplicación contra diferentes y/o copias
posteriores del código bajo la LGPL. Este es un requerimiento irrazonable e impracticable tanto
que los desarrolladores de Harbour estan preocupados. Para la mayor parte, esto podría estar
bién en plataformas donde una aplicación puede ser enlazada contra una versión dinámica de la
VM y la RTL pero algunas plataformas que no soportan el enlazado dinámico (PC/MS/DR/
Open/Free-DOS por ejemplo) podrían efectivamente ser impedidos del uso de Harbour. Los
desarrolladores de Harbour consideran que esto es una reducción a la libertad y esto no es
aceptable para el software libre.
58
Harbour
FWH
Si Ud. advierte que esto ha pasado, hágalo saber a los desarrolladores y esto será
corregido.Este seguro que no es la intención de los desarrrolladores de Harbour que sus
aplicaciones tengan que ser liberadas como software libre. El soporte de software libre podría ser
la cosa correcta a hacer pero los desarrrolladores de Harbour han decidido no insistir con esto.
Nosotros pensamos que es más util en esta situación establecer la licencia final para que ellos no
pongan ninguna condicion sobre el estado de su trabajo que use Harbour.
Por favor recuerde que la GLP realmente sólo lo afecta a Ud. cuando Ud. distribuye versiones
binarias del código GPLd, en este caso, La HVM y la RTL son enlazados dentro de su aplicación.
Esto es así porque Harbour no esta ni siquiera en la etapa beta, Ud. no debería considerar la idea
de distribuir aplicaciones compiladas con Harbour.
En resumen, Harbour usará post-beta una licencia que no afectará en ninguna forma sus
aplicaciones. Por el momento esta podría afectar sus aplicaciones si y sólo si Ud. las
distribuye como binarios que han sido compilados con Harbour. Esto debe verse como
una característica y no como un defecto. Aún entonces, Ud, puede ayudar revisando la licencia y
reportando a los desarrolladores cualquier ambiguedad que Ud. Detecte
Como siempre, no acepte la palabra de cualquiera en esta materia, cuando esté en duda, lea la
licencia. Si Ud.todavía esta en duda pague a alguien quien sepa lo que esta haciendo para que
lea la licencia por Ud.
Garantía
59
Harbour
FWH
Actualmente la sentencia de garantía esta provista por la GPL: "Este programa es distribuido con
la esperanza que le pueda ser útil, pero SIN NINGUNA GARANTIA; aún sin la garantía implícita de
COMERCIALIZACION O DESTINO PARA ALGÚN PROPÓSITO PARTICULAR."
Marcas Registradas
Esta documentación hace a varias Marcas Registradas, que sólo son usadas con propósito de
referencia.
60
Harbour
FWH
Glosario
A
ADS:
Acrónimo de Advanced Database Server. Solución cliente / servidor.
B
BISON:
Es un generador de analisis de propósito general que convierte una descripción de
gramatica para una gramática de libre-contexto LALR en un programa en lenguaje C
para analizar esa gramática.Una vez que Ud. es hábil con con Bison, Ud. puede usarlo
para desarrollar un amplio rango de analizadores de lenguaje, desde aquellos usados en
simples calculadoras de escritorio hasta complejos lenguajes de programación. Bison
tiene compatibilidad hacia arriba con Yacc: toda gramática Yacc apropiadamente-escrita
debe trabajar con Bison, sin hacer ningún cambio. Cualquiera familiarizado con Yacc
debería ser capaz de usar Bison con pocos problemas. Ud necesita ser avanzado
programador de C como condicion para usar Bison. Un manual en-linea esta disponible
en www.gnu.org/manual/bison/index.html
Branch:
Rama, bifurcacion en la versión del proyecto.
C
Cygnus:
Cygnus es una empresa que se hizo popular por el port de las herramientas GNU para
Un*x al ambiente MS-Windows. Posteriormente fue comprada por Red Hat y sigue
operando como parte de esta.
Cygwin:
GNU + Cygnus + Windows = Cygwin Las herramientas Cygwin son una migracion de la
populares herramientas y utilidades GNU al entorno de desarrollo para Windows 95, 98,
y NTEllas funcionan usando la librería Cywin la cual provee una API simil-UNIX en el
tope de Win32Cygwin fue originalmente diseñado e implementado por Steve
Chamberlain cuando el trabajaba para Cygnus. Actualmente el grupo Cygwin en Red
Hat, Inc. consiste primariamente de tres personas: Christopher Faylor (encargado),
Corinna Vinschen (ingeniera senior), DJ Delorie (ingeniero senior, voluntario interno del
grupo gcc). a página principal del proyecto Cygwin esta en: http://cygwin.com/ Ud. puede
encontrar documentación pararramientas individuales GNUen:http://www.fsf.org/manual/
CVS:
61
Harbour
FWH
Acrónimo de Current Version System, Sistema de Control de Versiones Sistema
compuesto por una serie de programas que permite a los desarrolladores mantener el
control sobre los distintos archivos y las modificaciones que se realizan a ellos.
D
Diff:
Diferencias entre una versión y otra del software.
E
F
Flex:
Flex es una herramienta para generar exploradores: programas cuales reconocen
patrones lexicos en un texto. flex lee los archivos de entrada provistos, o su entrada
estandar si no se da ningun nombre de archivo, para una descripcion del explorador a
generar. La descripcion es en la forma de pares de expresiones regulares y código C
llamado reglas.
Flex genera como salida un archivo fuente en C, llamado "lex.yy.c" el cual define a una
rutina "yylex()".Este archivo es compilado y enlazado con la librería "-lfl" para producir
un ejecutable. Cuando el ejecutable esta corriendo, este analiza sus entradas en
búsqueda de ocurrencias de expresiones regulares.Cuando encuentra una, este ejecuta
el código C correspondiente.
FSF:
Acrónimo de Free Software Foundation ó Fundacíon para el software libre
G
GCC:
Acrónimo de GNU C Compiler, compilador de lenguaje C de libre distribución, bajo
licencia GNU. Actualmente el término debe leerse como GNU Compiler Collection.
Nota:
EGCS fué una etapa experimental en el desarrollo de GCC, (el compilador de C GNU),
una rama que se excindio debido a la discrepancia de sus integrantes. Consulte el sitio
web gcc/egcs para más información: http://gcc.gnu.org Alrededor de Abril de 1999 el
proyecto GCC de la FSF, fue unificado con EGCS y el resultado es la version gcc-2.95
liberado el 31 de Julio de 1999. l proyecto ha sido renombrado Gnu Compiler Colection
ó GCC ó Colección de compiladores GNU. El resultado de todo esto es que, lo que era
egcs-1.2 esencialmente se convirtió en gcc-2.95. Los términos Cygwin, Mingw32, EGCS,
UWIN se refieren a distintos enfoques en la migración de GCC a la plataforma x86-
win32 (intel).Enfoques en el sentido que ellos comparten casi todo el backend, y usan el
mismo formato de ejecutable y el subyacente sistema operativo windows32, excepto que
el entorno de ejecución es radicalmente distinto.
zGPL:
62
Harbour
FWH
Licencia Pública General GNU (GPL)
GT - GT System:
Acrónimo de General Terminal (sistema de Terminal de uso General)Clipper posee un
sistema multinivel para controlar la pantalla y el teclado. El GT constituye el nivel
superior del sistema de Entrada / Salida de Clipper. En un nivel inferior se encuentra el
controlador de terminal.
H
Harbour:
Compilador de XBase, similar a CA-Clipper (MR), diseñado para trabajar en distintas
plataformas: DOS, Win 95, 98, ME, NT 3.5x, 4.0, W2K, OS/2, Linux, etc
I
IDEA:
Algoritmo de encriptación ampliamente usado.
J
JAVA:
Lenguaje de programación multiplataforma desarrollado por SUN Systems basado en bytecodes
como Harbour.
K
Kernel: (núcleo)
1. La parte esencial de Unix u otro sistema operativo, responsable de la adjudicación de recursos,
interfaz de bajo-nivel con el hardware, seguridad, etc.
2. Una parte esencial de un lenguaje de programación, en términos de la cual otras
construcciones son (ó podrían ser) definidas.
L
Lex:
Lex es una herramienta para generar exploradores.Consulte FLex.
M
Mingw:
MinGW: Acrónimo de Minimalist GNU for Windows.MinGW es un conjunto de archivos
include y librerías import que permiten que un programa en modo-consola pueda usar la
librería de ejecución estándar de C, MSVCRT.DLL (disponible para todos los sistemas
NT y versiones de Windows posteriores a 95 (para la cual hay una versión diferente).
Usando esta librería básica en tiempo de ejecución, Ud. puede escribir programas ANSI
compatible en modo consola, usando GCC y usando usando alguna de las extensiones
ofrecidas por la librería MS C runtime, pero no pueden usarse las características
provistas por la API Windows32.
N
63
Harbour
FWH
O
OOP:
Acrónimo de Object Oriented Programming. ó Programación Orientada a Objetos.
P
Patch:
Parche, programa utilizado para actualizar otro programa a una version actualizada.
Q
R
RDD:
Acrónimo de Replaceble Database Driver (Controlador de Bases de Datos
Reemplazable). Los más usados son el RDD para archivos NTX, CDX, MDX, etc
RTL: (RTL = RunTime Library) o la Librería de Ejecución de Harbour, la cual contiene
funciones equivalentes a CLIPPER.LIB, EXTEND.LIB, etc.
S
snapshot:
Instantánea del CVS. Todos los archivos que forman parte del proyecto en un momento dado.
SSH:
Abreviatura de Secure SHell . (entorno seguro).Es un programa ejecutable para logonearse a otra
computadora sobre una red, para ejecutar comandos en una máquina remota, para borrar,
mover, etc, archivos desde una máquina a otra. Este programa provee confiable autenticación y
comunicaciones seguras sobre canales inseguros como internet. Para ello toda la sesión de
conexión (login), incluyendo la transmisión de la password, es encriptada haciendo casi imposible
para un hacker obtener nuestra password. El programa puede utilizar los algoritmos 'DES', 'IDEA',
'3DES', 'RSA', etc.El programa SSH está disponible para Windows, Unix, Macintosh, y OS/2 y se lo
puede obtener en forma gratuita.
T
Terminal:
También llamado controlador Terminal, esta formado por un controlador de pantalla y de teclado
que se comunica con el dispositivo de Entrada / Salida a través del Sistema Operativo, ó
directamente con el hardware (si el sistema operativo lo permite). Con C52 vienen 4
controladores de terminal: TERMINAL, ANSITERM, NOVTERM, y PCBIOS. Por defecto C52 enlaza
automáticamente con cada programa TERMINAL.LIB (terminal diseñado para trabajar con
ordenadores IBM y ordenadores 100% compatibles) si no se especifica un controlador
alternativo.
U
V
64
Harbour
FWH
VM:
Abreviatura de Virtual Machine (Máquina Virtual). (HVM = Harbour Virtual Machine) ó
Máquina Virtual de Harbour.
W
Wrapper: (envoltura)
El término tipicamente se utiliza para funciones ó procedimientos. "wrapper function" ó función
de envoltura.
Codigo, el cual es combinado con otra pieza de codigo para determinar como ese codigo es
ejecutado. La envoltura actúa como una interfaz entre el llamador y el codigo envuelto. sto
puede ser hecho por compatibilidad. Por ej. si el codigo envuelto es en un lenguaje de
programación diferente ó usa diferentes convenciones de llamada ó por seguridad por ej. para
evitar que el programa llamador ejecute ciertas funciones. Esto implica que ese codigo envuelto
solamente puede ser accedido via la envoltura ó "wrapper"
X
X Windows:
Sistema gráfico de ventanas para la plataforma Un*x. Este entorno gráfico es
independiente del sistema operativo y su instalación es opcional. Es de bajo nivel y
sobre él corren los administradores de escritorio como GTK+, y Enlightning.
Y
Yacc:
Es un generador de analisis de propósito general que convierte una descripción de
gramatica para una gramática de libre-contexto LALR en un programa en lenguaje C
para analizar esa gramática. Yacc lee la especificación de la gramática del archivo
"filename" y genera un LR(1) analizador para el. Los analizadores consisten en un set de
LALR(1) tablas de analisis y una rutina controladora escrita en el lenguale de
programación C. Yacc normalmente escribe las tablas de analisis y la rutina controladora
al archivo y.tab.c. El programa Yacc ha ido siendo reemplazado por Bison.
Z
ZLIB:
Librería de compresión de archivos que utiliza el popular formato zip.
CA-Clipper © es Marca Registrada de Computer Associates Inc. Unix © es Marca Registrada de Unixware Co. Cygwin ©
es Marca Registrada de Red Hat Inc. Windows © es Marca Registrada de Microsoft Corporation.
65