2010-02-20 22:09 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* debian/dirs
* doc/en/Makefile
* harbour.spec
! "en-EN" -> "en"
- examples/hbdoc/examples
- Deleted outdated docs.
This commit is contained in:
@@ -17,6 +17,15 @@
|
||||
past entries belonging to author(s): Viktor Szakats.
|
||||
*/
|
||||
|
||||
2010-02-20 22:09 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
|
||||
* debian/dirs
|
||||
* doc/en/Makefile
|
||||
* harbour.spec
|
||||
! "en-EN" -> "en"
|
||||
|
||||
- examples/hbdoc/examples
|
||||
- Deleted outdated docs.
|
||||
|
||||
2010-02-20 21:19 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
|
||||
+ doc/en
|
||||
- doc/en-EN
|
||||
|
||||
@@ -3,4 +3,4 @@ usr/bin
|
||||
usr/lib/harbour
|
||||
usr/include/harbour
|
||||
usr/share/doc/harbour
|
||||
usr/share/doc/harbour/en-EN
|
||||
usr/share/doc/harbour/en
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
ROOT := ../../
|
||||
|
||||
DOC_SUBDIR := /en-EN
|
||||
DOC_SUBDIR := /en
|
||||
|
||||
DOC_FILES := \
|
||||
array.txt \
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
!name: Harbour Version 0.37 (c) reference Guide
|
||||
!credits: Harbour Version 0.37 (c) http://www.harbour-project.org
|
||||
08/06/2001 build By Luiz Rafael Culik
|
||||
Functions Documented by:
|
||||
Chen Kedem, Luiz Rafael Culik,Brian Hays
|
||||
|
||||
!menu: Reference
|
||||
Functions funcam.ngo
|
||||
Command comm.ngo
|
||||
Tools Tools.ngo
|
||||
OOP Commands oopcom.ngo
|
||||
!menu: Harbour
|
||||
Information informat.ngo
|
||||
Runtime Error Error.ngo
|
||||
@@ -1,47 +0,0 @@
|
||||
array.txt
|
||||
binnum.txt
|
||||
browse.txt
|
||||
command.txt
|
||||
datetime.txt
|
||||
dbdelim.txt
|
||||
dbsdf.txt
|
||||
dbstrux.txt
|
||||
diskspac.txt
|
||||
dir.txt
|
||||
error.txt
|
||||
file.txt
|
||||
hvm.txt
|
||||
input.txt
|
||||
license.txt
|
||||
math.txt
|
||||
memo.txt
|
||||
menu.txt
|
||||
misc.txt
|
||||
nation.txt
|
||||
objfunc.txt
|
||||
rdd.txt
|
||||
rdddb.txt
|
||||
rddord.txt
|
||||
rddmisc.txt
|
||||
readme.txt
|
||||
set.txt
|
||||
string.txt
|
||||
tclass.txt
|
||||
terminal.txt
|
||||
tgetlist.txt
|
||||
tlabel.txt
|
||||
treport.txt
|
||||
var.txt
|
||||
subcodes.txt
|
||||
harbext.txt
|
||||
gnulice.txt
|
||||
compiler.txt
|
||||
lang.txt
|
||||
setmode.txt
|
||||
eval.txt
|
||||
sayget.txt
|
||||
strotype.txt
|
||||
garbage.txt
|
||||
idle.txt
|
||||
cmdline.txt
|
||||
tbrowse.txt
|
||||
@@ -1,6 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
Launch with this command:
|
||||
..\..\hbdoc -htm genhtm.lnk genhtm.rsp
|
||||
@@ -1,663 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2000 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de:
|
||||
* ARRAY(), AADD(), ASIZE(), ATAIL(), ASIZE(),
|
||||
* AINS(), ADEL(), ADEL(), AFILL(), ASCAN()
|
||||
* AEVAL(), ACOPY(), ACLONE(), ASORT()
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* ARRAY()
|
||||
* $CATEGORY$
|
||||
* ARRAY
|
||||
* $ONELINER$
|
||||
* Crea un array sin inicializar de la longitud especificada
|
||||
* $SYNTAX$
|
||||
* ARRAY( <nElementos> [, <nElementos>...] ) --> aArray
|
||||
* $ARGUMENTS$
|
||||
* <nElementos> es el n£mero de elementos de la dimensi¢n especificada.
|
||||
* $RETURNS$
|
||||
* Un array con las dimensiones especificadas.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n retorna un array sin inicializar de tama¤o <nElementos>
|
||||
* Si par metros <nElementos> adicionales son especificados se crea
|
||||
* un array anidado multidimensional sin inicializar dentro de la misma
|
||||
* referencia del array.
|
||||
* Crear una variable de memoria con el mismo nombre que el array puede
|
||||
* destruir el array original y liberar el contenido entero del array.
|
||||
* Esto depende, por supuesto del tipo de almacenamiento de ambos: del
|
||||
* array y la variable con el mismo nombre que el array.
|
||||
* $EXAMPLES$
|
||||
* * El siguiente ejemplo crea un array de diez elementos iniciales,
|
||||
* luego en cada elemento de ese array, va creando submatrices
|
||||
* lineales con la funci¢n ARRAY(). Cada una con la misma cantidad
|
||||
* de items que la posici¢n que ocupa en aArray. Finalmente lo
|
||||
* muestra.
|
||||
*
|
||||
* LOCAL aArray := Array(10)
|
||||
* LOCAL i := 1, j
|
||||
*
|
||||
* FOR i = 1 to LEN( aArray )
|
||||
* aArray [i] := Array(i)
|
||||
* NEXT
|
||||
*
|
||||
* FOR i = 1 to LEN( aArray )
|
||||
* ? i
|
||||
* FOR j = 1 to LEN( aArray [i] )
|
||||
* ?? " ", aArray [i][j]
|
||||
* NEXT
|
||||
* NEXT
|
||||
*
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es CA-Cl*pper Compatible en todos los casos, excepto que
|
||||
* los arrays en Harbour pueden tener un n£mero ilimitado de elementos
|
||||
* mientras que Clipper tiene un l¡mite de 4096 elementos por dimensi¢n.
|
||||
* Los arrays en Harbour pueden tener un n£mero ilimitado de dimensiones
|
||||
* $FILES$
|
||||
* El c¢digo fuente est en source\vm\arrays.c
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* AADD(),ADEL(),AFILL(),AINS()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
* $DOC$
|
||||
* $FUNCNAME$
|
||||
* AADD()
|
||||
* $CATEGORY$
|
||||
* ARRAY
|
||||
* $ONELINER$
|
||||
* Agrega din micamente un nuevo elemento al final de un array
|
||||
* $SYNTAX$
|
||||
* AADD(<aDestino>, <xValor>) --> Valor
|
||||
* $ARGUMENTS$
|
||||
* <aDestino> es el array al cual se agrega un nuevo elemento.
|
||||
*
|
||||
* <xValor> es el valor asignado al nuevo elemento.
|
||||
* $RETURNS$
|
||||
* AADD() eval£a <xValor> y retorna su valor. Si <xValor> no esta
|
||||
* especificado, AADD() retorna NIL.
|
||||
* $DESCRIPTION$
|
||||
* AADD() es una funci¢n que din micamente incrementa la longitud actual
|
||||
* del array destino en un elemento y asigna el valor <xValor> al reci‚n
|
||||
* creado elemento del array.
|
||||
* <xValor> puede ser un puntero de referencia a otro array, el cual
|
||||
* puede ser asignado a la posici¢n sub¡ndice.
|
||||
*
|
||||
* Es £til para construir listas din micas o colas (queues).
|
||||
* Cada vez que se ejecuta un comando @...GET, el sistema usa AADD()
|
||||
* para agregar un nuevo elemento al final del array GetList, y entonces
|
||||
* asignar un nuevo objeto Get al nuevo elemento.
|
||||
* $EXAMPLES$
|
||||
* * Este ejemplo muestra el efecto de m£ltiples llamadas de la funci¢n
|
||||
* AADD() a un array, donde va agrgando un nuevo elemento cada vez.
|
||||
*
|
||||
* LOCAL aArray := {}
|
||||
* FOR x:= 1 to 10
|
||||
* AADD( aArray, x)
|
||||
* NEXT
|
||||
*
|
||||
* * Este ejemplo crea un array multidemensional
|
||||
* LOCAL aArray := {} // Resultado: aArray es un array vac¡o
|
||||
* AADD( aArray, {10, 10122734 }) // Resultado: aArray es {10, 10122734}
|
||||
* AADD( aArray, {11, 13173645 }) // Resultado: aArray es
|
||||
* { { 10, 10122734 }, { 11, 13173645 } }
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas las plataformas
|
||||
* $FILES$
|
||||
* El c¢digo fuente est en source\vm\arrays.c
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* AINS(), ASIZE()
|
||||
* $END$
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* ASIZE()
|
||||
* $CATEGORY$
|
||||
* ARRAY
|
||||
* $ONELINER$
|
||||
* Ajusta (aumenta ¢ decrementa) el tama¤o de un array
|
||||
* $SYNTAX$
|
||||
* ASIZE(<aDestino>, <nLongitud>) --> aDestino
|
||||
* $ARGUMENTS$
|
||||
* <aDestino> es el nombre del array a ser din micamente alterado
|
||||
*
|
||||
* <nLongitud> es el valor Num‚rico del nuevo tama¤o de <aDestino>
|
||||
* $RETURNS$
|
||||
* ASIZE() retorna una referencia al array <aDestino>.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n din micamente incrementa ¢ decrementa el tama¤o del
|
||||
* array <aDestino> ajustando la longitud del array a <nLongitud>
|
||||
* posiciones.
|
||||
*
|
||||
* Si la longitud del array <aDestino> is acortada, aquellos elementos
|
||||
* al final se pierden. Si la longitud del array es alargada un valor
|
||||
* NIL es asignado a los elementos en las nuevas posiciones.
|
||||
* $EXAMPLES$
|
||||
* * El siguiente ejemplo crea un array con un s¢lo elemento, luego lo
|
||||
* agranda y luego lo vuelve al tama¤o original.
|
||||
*
|
||||
* aArray := { 1 } // Resultado: aArray es { 1 }
|
||||
* ASIZE( aArray, 3) // Resultado: aArray es { 1, NIL, NIL }
|
||||
* ASIZE( aArray, 1) // Resultado: aArray es { 1 }
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Si HB_COMPAT_C53 es definido, la funci¢n genera un Error, de otro
|
||||
* modo retornar el mismo array.
|
||||
* $FILES$
|
||||
* El c¢digo fuente est en source\vm\arrays.c
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* AADD(), ADEL(), AFILL(), AINS()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* ATAIL()
|
||||
* $CATEGORY$
|
||||
* ARRAY
|
||||
* $ONELINER$
|
||||
* Retorna el £ltimo elemento de un array
|
||||
* $SYNTAX$
|
||||
* ATAIL( <aArray> ) --> Elemento
|
||||
* $ARGUMENTS$
|
||||
* <aArray> es el nombre del array a usar
|
||||
* $RETURNS$
|
||||
* ATAIL() retorna <Elemento> que puede ser un valor ¢ una referencia
|
||||
* contenida en el £ltimo elemento en el array.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n devuelve el £ltimo elemento en el array llamado <aArray>
|
||||
* No modifica el tama¤o del array ni el valor de ning£n sub¡ndice.
|
||||
* $EXAMPLES$
|
||||
* * El siguiente ejemplo crea un array unidimensional y devuelve el
|
||||
* £ltimo elemento.
|
||||
*
|
||||
* aArray := { "Cu l", "es el", "futuro", "de xBase ?", "Harbour!" }
|
||||
* ? ATAIL( aArray )
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* $FILES$
|
||||
* El c¢digo fuente est en source\vm\arrays.c
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* LEN(),ARRAY(),ASIZE(),AADD()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* AINS()
|
||||
* $CATEGORY$
|
||||
* ARRAY
|
||||
* $ONELINER$
|
||||
* Inserta un elemento NIL en una posici¢n del array
|
||||
* $SYNTAX$
|
||||
* AINS( <aArray>, <nPos> ) --> aDestino
|
||||
* $ARGUMENTS$
|
||||
* <aArray> es el nombre del array al que se va a insertar un item
|
||||
*
|
||||
* <nPos> es la posici¢n en el <aArray>
|
||||
* $RETURNS$
|
||||
* AINS() retorna una referencia al array destino, <aDestino>
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n inserta un valor NIL en el array llamado <aArray>
|
||||
* en la posicion <nPos>.
|
||||
*
|
||||
* Todos los elementos del array comenzando con la <nPos> ser n
|
||||
* desplazados hacia arriba una posici¢n y el £ltimo item en el array
|
||||
* ser removido completamente. En otras palabras, si se va a insertar
|
||||
* un item en la quinta posici¢n de un array de diez elementos, el
|
||||
* elemento que previamente estaba en la quinta posici¢n ahora ser
|
||||
* reubicado a la sexta posici¢n. El elemento reci‚n agregado ser de
|
||||
* tipo NIL y el £ltimo elemento es descartado. La longitud del array
|
||||
* <aArray> permanece sin cambios.
|
||||
* $EXAMPLES$
|
||||
* * El siguiente ejemplo crea un array lineal, al cual se inserta un
|
||||
* elemento en la quinta posici¢n, perdi‚ndose el £ltimo.
|
||||
*
|
||||
* LOCAL aArray:= { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
|
||||
* AINS( aArray, 5)
|
||||
*
|
||||
* Resultado: aArray es { 1, 2, 3, 4, NIL, 5, 6, 7, 8, 9 }
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* $FILES$
|
||||
* El c¢digo fuente est en source\vm\arrays.c
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* AADD(), ACOPY(), ADEL(), AEVAL(), AFILL(), ASIZE()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* ADEL()
|
||||
* $CATEGORY$
|
||||
* ARRAY
|
||||
* $ONELINER$
|
||||
* Borra un elemento del array
|
||||
* $SYNTAX$
|
||||
* ADEL(<aDestino>, <nPos>) --> aDestino
|
||||
* $ARGUMENTS$
|
||||
* <aDestino> es el nombre del array cuyo elemento ser removido.
|
||||
*
|
||||
* <nPos> es la posici¢n del elemento a borrar
|
||||
* $RETURNS$
|
||||
* ADEL() retorna una referencia al array destino, <aDestino>
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n borra el elemento que se encuentra en la posici¢n <nPos>
|
||||
* en el array <aDestino>. Todos los elementos en el array <aDestino>
|
||||
* m s all de la posici¢n dada <nPos> ser n movidos hacia abajo una
|
||||
* posici¢n en el array.
|
||||
* En otras palabras, si se borra un item de la quinta posici¢n de un
|
||||
* array de diez elementos, el elemento que estaba en la sexta posici¢n
|
||||
* ahora ser reubicado a la quinta posici¢n.
|
||||
* La longitud del array <aDestino> permanece sin cambios y el £ltimo
|
||||
* elemento en el array toma el valor NIL.
|
||||
* $EXAMPLES$
|
||||
* * El siguiente ejemplo crea un array lineal, del cual se borra el
|
||||
* elemento en la quinta posici¢n.
|
||||
*
|
||||
* LOCAL aArray:= { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
|
||||
* ADEL( aArray, 5)
|
||||
*
|
||||
* Resultado: aArray es { 1, 2, 3, 4, 6, 7, 8, 9, NIL }
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* $FILES$
|
||||
* El c¢digo fuente est en source\vm\arrays.c
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* ACOPY(), AINS(), AFILL()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* AFILL()
|
||||
* $CATEGORY$
|
||||
* ARRAY
|
||||
* $ONELINER$
|
||||
* Rellena un array con un valor especificado
|
||||
* $SYNTAX$
|
||||
* AFILL( <aDestino>, <xValor>, [<nInicio>], [<nContador>]) --> aDestino
|
||||
* $ARGUMENTS$
|
||||
* <aDestino> es el nombre del array a rellenar
|
||||
*
|
||||
* <xValor> es la expresi¢n con la que ser rellenado <aDestino>
|
||||
*
|
||||
* <nInicio> es la posici¢n de comienzo, sub¡ndice del array
|
||||
*
|
||||
* <nContador> es el n£mero de elementos que se van a rellenar
|
||||
* $RETURNS$
|
||||
* AFILL() retorna una referencia al array destino, <aDestino>
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n rellena cada elemento del array llamado <aDestino> con
|
||||
* el valor <xValor>. Si es especificado, <nInicio> marca el elemento
|
||||
* de inicio para continuar rellenando por <nContador> posiciones.
|
||||
* Si no es especificado, el valor de <nInicio> ser 1, y el valor de
|
||||
* <nContador> ser el valor de LEN(<aDestino>); y todos las posiciones
|
||||
* del array <aDestino> ser n llenadas con la expresi¢n de <xValor>.
|
||||
*
|
||||
* Advertencia !:
|
||||
* Esta funci¢n s¢lo trabaja en una sola dimensi¢n de <aDestino>.
|
||||
* Si hay punteros de referencia a otros arrays dentro de un sub¡ndice
|
||||
* de <aDestino> estos valores se perder n, porque esta funci¢n los
|
||||
* sobreescribe con los nuevos valores.
|
||||
* $EXAMPLES$
|
||||
* * El siguiente ejemplo crea un array con valores asignados, luego
|
||||
* lo rellena con el valor cinco.
|
||||
*
|
||||
* LOCAL aTest := { NIL, 0, 1, 2 }
|
||||
* Afill( aTest, 5) // Resultado aTest es { 5, 5, 5, 5 }
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* $FILES$
|
||||
* El c¢digo fuente est en source\vm\arrays.c
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* AADD(), AEVAL(), DBSTRUCT(), DIRECTORY()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* ASCAN()
|
||||
* $CATEGORY$
|
||||
* ARRAY
|
||||
* $ONELINER$
|
||||
* Busca en un array por un valor o hasta que el block devuelva .T.
|
||||
* $SYNTAX$
|
||||
* ASCAN( <aDestino>, <xBuscar>,
|
||||
* [<nInicio>], [<nContador>] ) --> nParadoEn
|
||||
* $ARGUMENTS$
|
||||
* <aDestino> es el nombre del array a examinar
|
||||
*
|
||||
* <xBuscar > es la expresi¢n a encontrar en <aDestino>
|
||||
*
|
||||
* <nInicio> es la posici¢n a la cual comenzar la b£squeda
|
||||
*
|
||||
* <nContador> es el n£mero de elementos a examinar
|
||||
* $RETURNS$
|
||||
* ASCAN() retorna un valor num‚rico <nParadoEn>, de la posici¢n donde
|
||||
* <xBuscar> fu‚ encontrada.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n examina el contenido de un array llamado <aDestino> en
|
||||
* busca del valor de <xBuscar>. El valor devuelto es la posici¢n en el
|
||||
* array <aDestino> en el cual <xBuscar> fue encontrada.
|
||||
* Si esta expresi¢n no es encontrada el valor retornado es cero.
|
||||
*
|
||||
* Si es especificada, la posici¢n de inicio al cual comenzar la
|
||||
* b£squeda puede ser establecida con el valor pasado en <nInicio>.
|
||||
* Por defecto es uno.
|
||||
*
|
||||
* Si es especificado, el n£mero de elementos del array a examinar puede
|
||||
* ser establecido con el valor pasado en <nContador>. Por defecto es
|
||||
* el n£mero total de elementos en el array <aDestino>.
|
||||
*
|
||||
* Si <xBuscar> es un bloque de c¢digo, la operaci¢n de la funci¢n es
|
||||
* ligeramente diferente. Cada referencia del subindice del array es
|
||||
* pasada al bloque de c¢digo para ser evaluada. La rutina de b£squeda
|
||||
* continuar hasta que el valor obtenido del bloque de c¢digo sea
|
||||
* verdadero (.T.) ¢ hasta que el final del array haya sido alcanzado.
|
||||
* $EXAMPLES$
|
||||
* * El siguiente ejemplo utiliza una funci¢n de biblioteca para llenar
|
||||
* el array aDir con los nombres de archivos en el directorio actual.
|
||||
* Posteriormente, busca si entre ellos esta presente el archivo
|
||||
* test.prg, devuelve cero si no esta, ¢ mayor de cero si est .
|
||||
*
|
||||
* LOCAL aDir := DIRECTORY( "*.*")
|
||||
* ? ASCAN( aDir,,,{|x,y| x[1] == "test.prg" } )
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n no es compatible con CA-Cl*pper . La funci¢n ASCAN() de
|
||||
* Clipper es afectada por la condici¢n SET EXACT ON/OFF
|
||||
* $FILES$
|
||||
* El c¢digo fuente est en source\vm\arrays.c
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* AEVAL(), EVAL()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* AEVAL()
|
||||
* $CATEGORY$
|
||||
* ARRAY
|
||||
* $ONELINER$
|
||||
* Ejecuta un bloque de c¢digo por cada elemento en el array
|
||||
* $SYNTAX$
|
||||
* AEVAL(<aArray>, <bBlock>, [<nInicio>], [<nContador>]) --> aArray
|
||||
* $ARGUMENTS$
|
||||
* <aArray> es el array a ser evaluado.
|
||||
*
|
||||
* <bBloque> es el bloque de c¢digo a evaluar para cada elemento
|
||||
* procesado
|
||||
* <nInicio> es el elemento de inicio del array a evaluar.
|
||||
*
|
||||
* <nContador> es el n£mero de elementos a procesar desde <nInicio>
|
||||
* hasta el final del array <aArray>
|
||||
* $RETURNS$
|
||||
* AEVAL() retorna una referencia a <aArray>
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n eval£a y procesa los elementos en <aArray>.
|
||||
* Un bloque de c¢digo pasado como <bBloque> define la operacion a ser
|
||||
* ejecutada sobre cada elemento del array. Todos los elementos en
|
||||
* <aArray> ser n evaluados a menos que sea especificada la posici¢n de
|
||||
* comienzo en <nInicio> por <nContador> elementos.
|
||||
* Por defecto <nInicio> es uno.
|
||||
*
|
||||
* Dos par metros son pasados al bloque de c¢digo <bBloque>. Los
|
||||
* elementos individuales en el array son el primer par metro y su
|
||||
* posici¢n en el array es el segundo.
|
||||
*
|
||||
* AEVAL() no reemplaza al bucle FOR...NEXT para procesar arrays.
|
||||
* Si un array es una unidad aut¢noma, AEVAL() es apropiado. Si el array
|
||||
* va a ser alterado ¢ si los elementos van a ser reevaluados, un
|
||||
* bucle FOR...NEXT es m s apropiado.
|
||||
* $EXAMPLES$
|
||||
*
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* $FILES$
|
||||
* El c¢digo fuente est en source\vm\arrays.c
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* EVAL(),DBEVAL()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* ACOPY()
|
||||
* $CATEGORY$
|
||||
* ARRAY
|
||||
* $ONELINER$
|
||||
* Copia elementos de un array a otro
|
||||
* $SYNTAX$
|
||||
* ACOPY( <aOrigen>, <aDestino>, [<nInicio>], [<nContador>],
|
||||
* [<nPosDestino>] )--> aDestino
|
||||
* $ARGUMENTS$
|
||||
* <aOrigen> es el array desde el que se copian los elementos.
|
||||
*
|
||||
* <aDestino> es el array al que se copian los elementos.
|
||||
*
|
||||
* <nInicio> es la posici¢n desde donde se inicia la copia en
|
||||
* <aOrigen>. Por defecto es uno.
|
||||
* <nContador> es el n£mero de elementos a copiar comenzando en la
|
||||
* posici¢n <nInicio>
|
||||
*
|
||||
* <nPosDestino> es la posici¢n de inicio en el array <aDestino> hacia
|
||||
* donde se copian los elementos. Por defecto es uno.
|
||||
* $RETURNS$
|
||||
* ACOPY() retorna una referencia al array <aDestino>
|
||||
* $DESCRIPTION$
|
||||
* ACOPY() copia elementos desde el array <aOrigen> hacia el array
|
||||
* <aDestino>. Esta funci¢n copia todo tipo de datos.
|
||||
*
|
||||
* Si un elemento en el array <aOrigen> es un puntero de referencia a
|
||||
* otro array (submatriz), esa referencia ser copiada al array
|
||||
* <aDestino> pero no todas las dimensiones ser n copiadas de un array
|
||||
* al otro. Esto debe ser realizado via funci¢n ACLONE().
|
||||
*
|
||||
* Note
|
||||
* Si el array <aOrigen> es mayor que <aDestino>, los elementos en el
|
||||
* array comienzan a ser copiados en <nPosDestino> y continuan
|
||||
* copiandose hasta que el final del array <aDestino> es alcanzado, los
|
||||
* elementos que sobran en <aOrigen> se descartan.
|
||||
* La funci¢n ACOPY() no agrega posiciones al array destino, el tama¤o
|
||||
* del array <aDestino> permanece constante.
|
||||
* $EXAMPLES$
|
||||
* * El ejemplo siguiente copia un array sobre otro.
|
||||
*
|
||||
* LOCAL nContador := 2, nInicio := 1, aUltimo, aPrimero
|
||||
* aUltimo := { "HARBOUR", " es el ", "Heredero" }
|
||||
* aPrimero := { "CLIPPER", " fue el ", "Pionero" }
|
||||
* ACOPY( aUltimo, aPrimero, nInicio, nContador)
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* $FILES$
|
||||
* El c¢digo fuente est en source\vm\arrays.c
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* ACLONE(),ADEL(),AEVAL(),AFILL(),AINS(),ASORT()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* ACLONE()
|
||||
* $CATEGORY$
|
||||
* ARRAY
|
||||
* $ONELINER$
|
||||
* Duplica un array anidado ¢ multidimensional
|
||||
* $SYNTAX$
|
||||
* ACLONE( <aOrigen> ) --> aDuplicado
|
||||
* $ARGUMENTS$
|
||||
* <aOrigen> es el nombre del array a ser clonado.
|
||||
* $RETURNS$
|
||||
* ACLONE() retorna <aDuplicate> un nueva referencia a otro array
|
||||
* exactamente igual al original.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n realiza una copia completa del array llamado <aOrigen>.
|
||||
* Crea todas las dimensiones en el array <aDestino> que existen en el
|
||||
* array original y luego llena cada dimensi¢n con los mismos valores
|
||||
* de los elementos en el original.
|
||||
* Ambos arrays coexisten como entidades distintas.
|
||||
* $EXAMPLES$
|
||||
* * El ejemplo siguiente crea un array bidimensional y lo duplica.
|
||||
* Se muestra que son copiadas ambas dimensiones.
|
||||
*
|
||||
* LOCAL aOrigen, aDestino
|
||||
* aOrigen := { {1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10} }
|
||||
* aDestino := ACLONE( aOrigen )
|
||||
*
|
||||
* * primera dimensi¢n
|
||||
* ? "Impares son: " // Resultado: es {1, 3, 5, 7, 9}
|
||||
* FOR n := 1 TO LEN( aDestino)
|
||||
* ?? aDestino [n][1]
|
||||
* NEXT
|
||||
*
|
||||
* * segunda dimensi¢n
|
||||
* ? "Pares son: " // Resultado: es {2, 4, 6, 8, 10}
|
||||
* FOR n := 1 TO LEN( aDestino)
|
||||
* ?? aDestino [n][2]
|
||||
* NEXT
|
||||
*
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Clipper retorna NIL si el par metro no es un array.
|
||||
* $FILES$
|
||||
* El c¢digo fuente est en source\vm\arrays.c
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* ACOPY(),ADEL(),AINS(),ASIZE()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* ASORT()
|
||||
* $CATEGORY$
|
||||
* ARRAY
|
||||
* $ONELINER$
|
||||
* Ordena un array
|
||||
* $SYNTAX$
|
||||
* ASORT( <aDestino>, [<nInicio>], [<nContador>],
|
||||
* [<bOrden>] ) --> aDestino
|
||||
* $ARGUMENTS$
|
||||
* <aDestino> es el nombre del array a ser ordenado.
|
||||
*
|
||||
* <nInicio> es el primer elemento para comenzar el ordenamiento.
|
||||
* Por defecto es uno.
|
||||
*
|
||||
* <nContador> es el n£mero de elementos a ordenar comenzando en la
|
||||
* posici¢n <nInicio>. Por defecto son todos los elementos
|
||||
*
|
||||
* <bOrden> es el bloque de c¢digo para el orden de ordenamiento,
|
||||
* por defecto es en orden ascendente {| x, y | x < y }.
|
||||
* El bloque de c¢digo debe recibir dos elementos del array
|
||||
* como parametros y debe retornar .T. si el orden es el
|
||||
* correcto, .F. en caso contrario.
|
||||
* $RETURNS$
|
||||
* ASORT() retorna una referencia al reciente array ordenado <aDestino>
|
||||
* ¢ NIL si el par metro <aDestino> no es un array.
|
||||
* $DESCRIPTION$
|
||||
* Esta funcion ordena todo ¢ parte de un array dado. Si <bOrden> es
|
||||
* omitido, la funci¢n espera que <aDestino> sea un array unidimensional
|
||||
* conteniendo un solo tipo de datos (uno de: CHARACTER, DATE, LOGICAL,
|
||||
* NUMERIC) y ordena este array en orden ascendente: los caracteres son
|
||||
* ordenados por su valor ASCII, las fechas son ordenadas
|
||||
* cronologicamente el valor l¢gico .F. va antes de .T. y los valores
|
||||
* num‚ricos son ordenados por su valor.
|
||||
*
|
||||
* Si <bOrden> es especificado este es usado para manejar la forma de
|
||||
* ordenamiento. Cada vez que el bloque es evaluado, dos elementos del
|
||||
* array son pasados al bloque de c¢digo, y el bloque debe retornar un
|
||||
* valor l¢gico que define si esos elementos estan en orden (.T.) ¢ no
|
||||
* (.F.). Usando este bloque se puede ordenar arrays multidimensionales
|
||||
* hacer un ordenamiento descendente ¢ a£n (pero para que querria Ud.
|
||||
* hacerlo) ordenar un array que contenga diferentes tipo de datos.
|
||||
* $EXAMPLES$
|
||||
* * El siguiente ejemplo ordena valores numericos en orden ascendente
|
||||
*
|
||||
* ASORT( { 3, 1, 4, 42, 5, 9 }) // Resultado: { 1, 3, 4, 5, 9, 42}
|
||||
*
|
||||
* * El siguiente ejemplo ordena cadenas en orden descendente
|
||||
* LOCAL aKeys := { "Ctrl", "Alt", "Delete" }, n
|
||||
* LOCAL bOrden := {| x, y | UPPER( x ) > UPPER( y ) }
|
||||
* ASORT( aKeys,,, bOrden )
|
||||
* FOR n = 1 TO LEN( aKeys )
|
||||
* ? aKeys [n] // Resultado: { "Delete", "Ctrl", "Alt"}
|
||||
* NEXT
|
||||
*
|
||||
* * El siguiente ejemplo ordena dos arrays bidimensionales de acuerdo
|
||||
* al segundo elemento de cada par.
|
||||
*
|
||||
* LOCAL aPair := { {"Sun",8}, {"Mon",1}, {"Tue",57}, {"Wed",-6} }
|
||||
* ASORT( aPair,,, {| x, y | x[2] < y[2] } )
|
||||
*
|
||||
* FOR n = 1 TO LEN( aPair )
|
||||
* ? aPair [n][1], aPair [n][2]
|
||||
* NEXT
|
||||
* // Resultado: { {"Wed",-6}, {"Mon",1}, {"Sun",8}, {"Tue",57} }
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* La frecuencia de llamada al bloque de c¢digo y el orden difiere de
|
||||
* Clipper debido a que Harbour usa un algoritmo distinto (m s r pido)
|
||||
* de ordenamiento (quicksort).
|
||||
* $FILES$
|
||||
* El c¢digo fuente est en source\vm\arrays.c
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* ASCAN(),EVAL(),SORT
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,495 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2000 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de:
|
||||
* BIN2W(), BIN2I(), BIN2L(), BIN2U(), I2BIN(),
|
||||
* W2BIN(), L2BIN(), U2BIN()
|
||||
*
|
||||
* Copyright 2000 Chen Kedem <niki@actcom.co.il>
|
||||
* Documentaci¢n en Ingl‚s de: BIN2W(), BIN2I(), BIN2L(), BIN2U(), I2BIN(),
|
||||
* W2BIN(), L2BIN(), U2BIN()
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* BIN2W()
|
||||
* $CATEGORY$
|
||||
* Conversi¢n binaria
|
||||
* $ONELINER$
|
||||
* Convierte 2 bytes de un entero corto sin signo en un n£mero
|
||||
* $SYNTAX$
|
||||
* BIN2W( <cBuffer> ) --> nNumero
|
||||
* $ARGUMENTS$
|
||||
* <cBuffer> es una cadena de caracteres que contiene un entero corto
|
||||
* sin signo codificado en 16 bits (byte menos significativo
|
||||
* primero). Los primeros dos bytes son tenidos en cuenta,
|
||||
* si hay m s son ignorados.
|
||||
* $RETURNS$
|
||||
* BIN2W() retorna un n£mero entero (¢ cero si <cBuffer> no es una
|
||||
* cadena).
|
||||
* $DESCRIPTION$
|
||||
* BIN2W() es una de las funciones de conversi¢n binaria, de bajo nivel.
|
||||
* Estas funciones convierten entre un valor num‚rico en Harbour y una
|
||||
* representaci¢n de cadena de un valor num‚rico dado.
|
||||
* BIN2W() toma dos bytes de un entero corto sin signo codificado en 16
|
||||
* bits y los convierte en un valor num‚rico estandar de Harbour.
|
||||
*
|
||||
* Ud podr¡a preguntarse cual es la necesidad de este tipo de funciones,
|
||||
* bueno, primero de todo esta permite leer/escribir informaci¢n desde/
|
||||
* hacia un archivo binario (como extraer informaci¢n de la cabecera de
|
||||
* un archivo DBF), es tambi‚n una forma £til de compartir informaci¢n
|
||||
* desde otra fuente distinta a Harbour (lenguaje C por ejemplo).
|
||||
* BIN2W() es la inversa de W2BIN()
|
||||
* $EXAMPLES$
|
||||
* <fixed>
|
||||
* // Muestra la longitud de la cabecera de un DBF
|
||||
* FUNCTION main()
|
||||
* LOCAL nHandle, cBuffer := SPACE( 2 )
|
||||
* nHandle := FOPEN( "test.dbf" )
|
||||
*
|
||||
* IF nHandle > 0
|
||||
* FSEEK( nHandle, 8 )
|
||||
* FREAD( nHandle, @cBuffer, 2 )
|
||||
* ? "Longitud de la cabecera del DBF en bytes:", BIN2W( cBuffer )
|
||||
* FCLOSE( nHandle )
|
||||
* ELSE
|
||||
* ? "No puedo abrir el archivo..."
|
||||
* ENDIF
|
||||
* RETURN NIL
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* BIN2W() funciona exactamente como la funci¢n de CA-Cl*pper, BIN2W()
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* BIN2I(),BIN2L(),BIN2U(),I2BIN(),W2BIN(),WORD()*,U2BIN(),FREAD()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* BIN2I()
|
||||
* $CATEGORY$
|
||||
* Conversi¢n binaria
|
||||
* $ONELINER$
|
||||
* Convierte 2 bytes de un entero con signo en un n£mero en Harbour
|
||||
* $SYNTAX$
|
||||
* BIN2I( <cBuffer> ) --> nNumero
|
||||
* $ARGUMENTS$
|
||||
* <cBuffer> es una cadena de caracteres que contiene un entero corto
|
||||
* con signo codificado en 16 bits (byte menos significativo
|
||||
* primero). Los primeros dos bytes son tenidos en cuenta,
|
||||
* si hay m s son ignorados.
|
||||
* $RETURNS$
|
||||
* BIN2I() retorna un n£mero entero (¢ cero si <cBuffer> no es una
|
||||
* cadena).
|
||||
* $DESCRIPTION$
|
||||
* BIN2I() es una de las funciones de conversi¢n binaria, de bajo nivel.
|
||||
* Estas funciones convierten entre un valor num‚rico en Harbour y una
|
||||
* representaci¢n de cadena de un valor num‚rico dado.
|
||||
* BIN2I() toma dos bytes de un entero corto con signo codificado en 16
|
||||
* bits y los convierte en un valor num‚rico est ndar de Harbour.
|
||||
*
|
||||
* Ud podr¡a preguntarse cual es la necesidad de este tipo de funciones,
|
||||
* bueno, primero de todo esta permite leer/escribir informaci¢n desde/
|
||||
* hacia un archivo binario (como extraer informaci¢n de la cabecera de
|
||||
* un archivo DBF), es tambien una forma £til de compartir informaci¢n
|
||||
* desde otra fuente distinta a Harbour (lenguaje C por ejemplo).
|
||||
* BIN2I() es la inversa de I2BIN()
|
||||
* $EXAMPLES$
|
||||
* <fixed>
|
||||
* // Muestra la fecha de la £ltima actualizaci¢n del DBF
|
||||
* FUNCTION main()
|
||||
* LOCAL nHandle, cAno, cMes, cDia
|
||||
* nHandle := FOPEN( "test.dbf" )
|
||||
*
|
||||
* IF nHandle > 0
|
||||
* FSEEK( nHandle, 1 )
|
||||
* cAno := cMes := cDia := " "
|
||||
* FREAD( nHandle, @cAno, 1 )
|
||||
* FREAD( nHandle, @cMes, 1 )
|
||||
* FREAD( nHandle, @cDia, 1 )
|
||||
* ? "Fecha de actualizaci¢n:", BIN2I( cAno ), BIN2I( cMes ), ;
|
||||
* BIN2I( cDia )
|
||||
* FCLOSE( nHandle )
|
||||
* ELSE
|
||||
* ? "No puedo abrir el archivo..."
|
||||
* ENDIF
|
||||
*
|
||||
* RETURN NIL
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* BIN2I() funciona exactamente como la funci¢n de CA-Cl*pper, BIN2I()
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* BIN2L(),BIN2U(),BIN2W(),I2BIN(),W2BIN(),WORD()*,U2BIN(),FREAD()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* BIN2L()
|
||||
* $CATEGORY$
|
||||
* Conversi¢n binaria
|
||||
* $ONELINER$
|
||||
* Convierte 4 bytes de un entero largo con signo en un n£mero
|
||||
* $SYNTAX$
|
||||
* BIN2L( <cBuffer> ) --> nNumero
|
||||
* $ARGUMENTS$
|
||||
* <cBuffer> es una cadena de caracteres que contiene un entero largo
|
||||
* con signo codificado en 32 bits (byte menos significativo
|
||||
* primero). Los primeros cuatro bytes son tenidos en cuenta,
|
||||
* si hay m s son ignorados.
|
||||
* $RETURNS$
|
||||
* BIN2L() retorna un n£mero entero (¢ cero si <cBuffer> no es una
|
||||
* cadena).
|
||||
* $DESCRIPTION$
|
||||
* BIN2L() es una de las funciones de conversi¢n binaria, de bajo nivel.
|
||||
* Estas funciones convierten entre un valor num‚rico en Harbour y una
|
||||
* representaci¢n de cadena de un valor num‚rico dado.
|
||||
* BIN2L() toma cuatro bytes de un entero largo con signo codificado en
|
||||
* 32 bits y los convierte en un valor num‚rico est ndar de Harbour.
|
||||
*
|
||||
* Ud podr¡a preguntarse cual es la necesidad de este tipo de funciones,
|
||||
* bueno, primero de todo esta permite leer/escribir informaci¢n desde/
|
||||
* hacia un archivo binario (como extraer informaci¢n de la cabecera de
|
||||
* un archivo DBF), es tambien una forma £til de compartir informaci¢n
|
||||
* desde otra fuente distinta a Harbour (lenguaje C por ejemplo).
|
||||
* BIN2L() es la inversa de L2BIN()
|
||||
* $EXAMPLES$
|
||||
* <fixed>
|
||||
* // Muestra el n£mero de registros en el DBF
|
||||
* FUNCTION main()
|
||||
* LOCAL nHandle, cBuffer := SPACE( 4 )
|
||||
* nHandle := FOPEN( "test.dbf" )
|
||||
*
|
||||
* IF nHandle > 0
|
||||
* FSEEK( nHandle, 4 )
|
||||
* FREAD( nHandle, @cBuffer, 4 )
|
||||
* ? "n£mero de registros en el archivo:", BIN2L( cBuffer )
|
||||
* FCLOSE( nHandle )
|
||||
* ELSE
|
||||
* ? "No puedo abrir el archivo..."
|
||||
* ENDIF
|
||||
*
|
||||
* RETURN NIL
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* BIN2L() funciona exactamente como la funci¢n de CA-Cl*pper, BIN2L()
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* BIN2I(),BIN2U(),BIN2W(),I2BIN(),L2BIN(),W2BIN(),WORD()*,U2BIN()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* BIN2U()
|
||||
* $CATEGORY$
|
||||
* Conversi¢n binaria
|
||||
* $ONELINER$
|
||||
* Convierte 4 bytes de un entero largo sin signo en un n£mero
|
||||
* $SYNTAX$
|
||||
* BIN2U( <cBuffer> ) --> nNumero
|
||||
* $ARGUMENTS$
|
||||
* <cBuffer> es una cadena de caracteres que contiene un entero largo
|
||||
* sin signo codificado en 32 bits (byte menos significativo
|
||||
* primero). Los primeros cuatro bytes son tenidos en cuenta,
|
||||
* si hay m s son ignorados.
|
||||
* $RETURNS$
|
||||
* BIN2U() retorna un n£mero entero (¢ cero si <cBuffer> no es una
|
||||
* cadena).
|
||||
* $DESCRIPTION$
|
||||
* BIN2U() es una de las funciones de conversi¢n binaria, de bajo nivel.
|
||||
* Estas funciones convierten entre un valor num‚rico en Harbour y una
|
||||
* representaci¢n de cadena de un valor num‚rico dado.
|
||||
* BIN2U() toma cuatro bytes de un entero largo sin signo codificado en
|
||||
* 32 bits y los convierte en un valor num‚rico est ndar de Harbour.
|
||||
*
|
||||
* Ud podr¡a preguntarse cual es la necesidad de este tipo de funciones,
|
||||
* bueno, primero de todo esta permite leer/escribir informaci¢n desde/
|
||||
* hacia un archivo binario (como extraer informaci¢n de la cabecera de
|
||||
* un archivo DBF), es tambien una forma util de compartir informaci¢n
|
||||
* desde otra fuente distinta a Harbour (lenguaje C por ejemplo).
|
||||
* BIN2U() es la inversa de U2BIN()
|
||||
* $EXAMPLES$
|
||||
* <fixed>
|
||||
* // Muestra el n£mero de registros en el DBF
|
||||
* FUNCTION main()
|
||||
* LOCAL nHandle, cBuffer := SPACE( 4 )
|
||||
* nHandle := FOPEN( "test.dbf" )
|
||||
*
|
||||
* IF nHandle > 0
|
||||
* FSEEK( nHandle, 4 )
|
||||
* FREAD( nHandle, @cBuffer, 4 )
|
||||
* ? "N£mero de registros en el archivo:", BIN2U( cBuffer )
|
||||
* FCLOSE( nHandle )
|
||||
* ELSE
|
||||
* ? "No puedo abrir el archivo..."
|
||||
* ENDIF
|
||||
*
|
||||
* RETURN NIL
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* BIN2U() es una funci¢n de compatibilidad con Xbase++ y no existe como
|
||||
* una funci¢n est ndar en CA-Cl*pper 5.x
|
||||
* Esta funci¢n es solamente visible si el archivo source/rtl/binnum.c
|
||||
* fue compilado con la bandera HB_COMPAT_XPP.
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* BIN2I(),BIN2L(),BIN2W(),I2BIN(),W2BIN(),WORD()*,U2BIN(),FREAD()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* I2BIN()
|
||||
* $CATEGORY$
|
||||
* Conversi¢n binaria
|
||||
* $ONELINER$
|
||||
* Convierte un n£mero en 2 bytes de un entero corto con signo.
|
||||
* $SYNTAX$
|
||||
* I2BIN( <nNumero> ) --> cBuffer
|
||||
* $ARGUMENTS$
|
||||
* <nNumero> es un valor num‚rico a convertir (los digitos decimales
|
||||
* son ignorados).
|
||||
* $RETURNS$
|
||||
* I2BIN() retorna una cadena de caracteres de dos bytes que
|
||||
* contienen un entero corto con signo, codificado en 16 bits (byte
|
||||
* menos significativo primero).
|
||||
* $DESCRIPTION$
|
||||
* I2BIN() es una de las funciones de conversi¢n binaria, de bajo nivel.
|
||||
* Estas funciones convierten entre un valor num‚rico en Harbour y una
|
||||
* representaci¢n de cadena de un valor num‚rico dado.
|
||||
* I2BIN() toma un valor num‚rico y lo convierte en dos bytes de
|
||||
* un entero corto con signo, codificado en 16 bits.
|
||||
*
|
||||
* Ud podr¡a preguntarse cual es la necesidad de este tipo de funciones,
|
||||
* bueno, primero de todo esta permite leer/escribir informaci¢n desde/
|
||||
* hacia un archivo binario (como extraer informaci¢n de la cabecera de
|
||||
* un archivo DBF), es tambien una forma util de compartir informaci¢n
|
||||
* desde otra fuente distinta a Harbour (lenguaje C por ejemplo).
|
||||
* I2BIN() es la inversa de BIN2I()
|
||||
* $EXAMPLES$
|
||||
* <fixed>
|
||||
* // El ejemplo cambia la "fecha de ultima actualizaci¢n" del DBF
|
||||
* #include "fileio.ch"
|
||||
* FUNCTION main()
|
||||
* LOCAL nHandle, cAno, cMes, cDia
|
||||
*
|
||||
* USE test
|
||||
* ? "La fecha original de actualizaci¢n es:", LUPDATE()
|
||||
* CLOSE
|
||||
* nHandle := FOPEN( "test.dbf", FO_READWRITE )
|
||||
*
|
||||
* IF nHandle > 0
|
||||
* FSEEK( nHandle, 1, )
|
||||
* cAno := I2BIN( 68 )
|
||||
* cMes := I2BIN( 8 )
|
||||
* cDia := I2BIN( 1 )
|
||||
* FWRITE( nHandle, cAno , 1 ) // escribe solo el primer byte
|
||||
* FWRITE( nHandle, cMes, 1 )
|
||||
* FWRITE( nHandle, cDia, 1 )
|
||||
* FCLOSE( nHandle )
|
||||
* USE test
|
||||
* ? "La nueva fecha de actualizaci¢n es:", LUPDATE()
|
||||
* CLOSE
|
||||
* ELSE
|
||||
* ? "No puedo abrir el archivo..."
|
||||
* ENDIF
|
||||
*
|
||||
* RETURN NIL
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* I2BIN() funciona exactamente como la funci¢n de CA-Cl*pper, I2BIN()
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* BIN2I(),BIN2L(),BIN2U(),BIN2W(),W2BIN(),WORD()*,U2BIN(),FWRITE()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* W2BIN()
|
||||
* $CATEGORY$
|
||||
* Conversi¢n binaria
|
||||
* $ONELINER$
|
||||
* Convierte un n£mero en 2 bytes de un entero corto sin signo
|
||||
* $SYNTAX$
|
||||
* W2BIN( <nNumero> ) --> cBuffer
|
||||
* $ARGUMENTS$
|
||||
* <nNumero> es un valor num‚rico a convertir (los digitos decimales
|
||||
* son ignorados).
|
||||
* $RETURNS$
|
||||
* W2BIN() retorna una cadena de caracteres de dos bytes que
|
||||
* contienen un entero corto sin signo, codificado en 16 bits (byte
|
||||
* menos significativo primero).
|
||||
* $DESCRIPTION$
|
||||
* W2BIN() es una de las funciones de conversi¢n binaria, de bajo nivel.
|
||||
* Estas funciones convierten entre un valor num‚rico en Harbour y una
|
||||
* representaci¢n de cadena de un valor num‚rico dado.
|
||||
* W2BIN() toma un valor num‚rico y lo convierte en dos bytes de
|
||||
* un entero corto sin signo, codificado en 16 bits.
|
||||
*
|
||||
* Ud podr¡a preguntarse cual es la necesidad de este tipo de funciones,
|
||||
* bueno, primero de todo esta permite leer/escribir informaci¢n desde/
|
||||
* hacia un archivo binario (como extraer informaci¢n de la cabecera de
|
||||
* un archivo DBF), es tambien una forma util de compartir informaci¢n
|
||||
* desde otra fuente distinta a Harbour (lenguaje C por ejemplo).
|
||||
* W2BIN() es la inversa de BIN2W()
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* W2BIN() es una funci¢n de compatibilidad con Xbase++ y no existe como
|
||||
* una funci¢n estandar en CA-Cl*pper 5.x
|
||||
* Esta funci¢n es solamente visible si el archivo source/rtl/binnum.c
|
||||
* fue compilado con la bandera HB_COMPAT_XPP.
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* BIN2I(),BIN2L(),BIN2U(),BIN2W(),I2BIN(),WORD()*,U2BIN(),FWRITE()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* L2BIN()
|
||||
* $CATEGORY$
|
||||
* Conversi¢n binaria
|
||||
* $ONELINER$
|
||||
* Convierte un n£mero en 4 bytes de un entero largo con signo
|
||||
* $SYNTAX$
|
||||
* L2BIN( <nNumero> ) --> cBuffer
|
||||
* $ARGUMENTS$
|
||||
* <nNumero> es un valor num‚rico a convertir (los digitos decimales
|
||||
* son ignorados).
|
||||
* $RETURNS$
|
||||
* L2BIN() retorna una cadena de caracteres de cuatro bytes que
|
||||
* contienen un entero largo con signo, codificado en 32 bits (byte
|
||||
* menos significativo primero).
|
||||
* $DESCRIPTION$
|
||||
* L2BIN() es una de las funciones de conversi¢n binaria, de bajo nivel.
|
||||
* Estas funciones convierten entre un valor num‚rico en Harbour y una
|
||||
* representaci¢n de cadena de un valor num‚rico dado.
|
||||
* L2BIN() toma un valor num‚rico y lo convierte en cuatro bytes de
|
||||
* un entero largo con signo, codificado en 32 bits.
|
||||
*
|
||||
* Ud podr¡a preguntarse cual es la necesidad de este tipo de funciones,
|
||||
* bueno, primero de todo esta permite leer/escribir informaci¢n desde/
|
||||
* hacia un archivo binario (como extraer informaci¢n de la cabecera de
|
||||
* un archivo DBF), es tambien una forma £til de compartir informaci¢n
|
||||
* desde otra fuente distinta a Harbour (lenguaje C por ejemplo).
|
||||
* L2BIN() es la inversa de BIN2L()
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* L2BIN() funciona exactamente como la funci¢n de CA-Cl*pper, L2BIN()
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* BIN2I(),BIN2L(),BIN2U(),BIN2L(),W2BIN(),WORD()*,U2BIN(),FWRITE()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* U2BIN()
|
||||
* $CATEGORY$
|
||||
* Conversi¢n binaria
|
||||
* $ONELINER$
|
||||
* Convierte un n£mero en 4 bytes de un entero largo sin signo
|
||||
* $SYNTAX$
|
||||
* U2BIN( <nNumero> ) --> cBuffer
|
||||
* $ARGUMENTS$
|
||||
* <nNumero> es un valor num‚rico a convertir (los digitos decimales
|
||||
* son ignorados).
|
||||
* $RETURNS$
|
||||
* U2BIN() retorna una cadena de caracteres de cuatro bytes que
|
||||
* contienen un entero largo sin signo, codificado en 32 bits (byte
|
||||
* menos significativo primero).
|
||||
* $DESCRIPTION$
|
||||
* U2BIN() es una de las funciones de conversi¢n binaria, de bajo nivel.
|
||||
* Estas funciones convierten entre un valor num‚rico en Harbour y una
|
||||
* representaci¢n de cadena de un valor num‚rico dado.
|
||||
* U2BIN() toma un valor num‚rico y lo convierte en cuatro bytes de
|
||||
* un entero largo sin signo, codificado en 32 bits.
|
||||
*
|
||||
* Ud podr¡a preguntarse cual es la necesidad de este tipo de funciones,
|
||||
* bueno, primero de todo esta permite leer/escribir informaci¢n desde/
|
||||
* hacia un archivo binario (como extraer informaci¢n de la cabecera de
|
||||
* un archivo DBF), es tambien una forma £til de compartir informaci¢n
|
||||
* desde otra fuente distinta a Harbour (lenguaje C por ejemplo).
|
||||
* U2BIN() es la inversa de BIN2U()
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* U2BIN() es una funci¢n de compatibilidad con Xbase++ y no existe como
|
||||
* una funci¢n est ndar en CA-Cl*pper 5.x
|
||||
* Esta funci¢n es solamente visible si el archivo source/rtl/binnum.c
|
||||
* fue compilado con la bandera HB_COMPAT_XPP.
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* BIN2I(),BIN2L(),BIN2U(),I2BIN(),L2BIN(),W2BIN(),WORD()*,FWRITE()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* WORD()*
|
||||
* $CATEGORY$
|
||||
* Conversi¢n binaria
|
||||
* $ONELINER$
|
||||
* Convierte par metros de doble precisi¢n del mandato CALL a enteros
|
||||
* $SYNTAX$
|
||||
* WORD( <nDoble> ) --> <nEntero>
|
||||
* $ARGUMENTS$
|
||||
* <nDoble> es un valor num‚rico de doble precisi¢n.
|
||||
* $RETURNS$
|
||||
* WORD() retorna un entero en el rango: -32767 a +32767
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n convierte valores de doble precisi¢n a enteros, para
|
||||
* ser usados con el mandato CALL.
|
||||
* $EXAMPLES$
|
||||
* <fixed>
|
||||
* // Utiliza WORD() como argumento del mandato CALL
|
||||
* CALL INVENT WITH WORD(75300)
|
||||
*
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* La NG de Clipper NG establece que WORD() funcionar solamente cuando
|
||||
* sea usada en la lista de par metros del comando CALL, de otra manera
|
||||
* devolver NIL, en Harbour esta funcionar donde sea.
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* CALL
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,400 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2000 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de: BROWSE(), DBEDIT(), TBROWSEDB(), DBSKIPPER()
|
||||
*
|
||||
* Copyright 1999 Chen Kedem <niki@actcom.co.il>
|
||||
* Documentaci¢n en Ingl‚s de: BROWSE(), DBEDIT(), TBROWSEDB(), DBSKIPPER()
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* DBEDIT()*
|
||||
* $CATEGORY$
|
||||
* Entrada y salida de datos
|
||||
* $ONELINER$
|
||||
* Despliega registros en una tabla
|
||||
* $SYNTAX$
|
||||
* DBEDIT( [<nSup>], [<nIzq>], [<nInf>], [<nDer>], [<acColumnas>], ;
|
||||
* [<xFuncionUsuario>], [<xColumnSayPictures>], ;
|
||||
* [<xCabeceraColumna>], ;
|
||||
* [<xSeparadorCabecera>], [<xSeparadorColumna>], ;
|
||||
* [<xSeparadorPie>], [<xPieColumna>] ) --> lExito
|
||||
* $ARGUMENTS$
|
||||
* <nSup> coordenada para la fila Superior de visualizaci¢n. El rango
|
||||
* para <nSup> va de cero a MAXROW(), por defecto es cero.
|
||||
*
|
||||
* <nIzq> coordenada para la columna izquierda de visualizaci¢n. El
|
||||
* rango para <nIzq> va de cero a MAXCOL(), por defecto es cero.
|
||||
*
|
||||
* <nInf> coordenada para la fila inferior de visualizaci¢n. El rango
|
||||
* para <nInf> va de cero a MAXROW(), por defecto es MAXROW().
|
||||
*
|
||||
* <nDer> coordenada para la columna derecha de visualizaci¢n. El rango
|
||||
* para <nDer> va de cero a MAXCOL(), por defecto es MAXCOL().
|
||||
*
|
||||
* <acColumnas> es un array de expresiones de caracteres que contienen
|
||||
* los nombres de los campos de la base de datos, ¢ expresiones para la
|
||||
* visualizaci¢n en cada columna.
|
||||
* Si no es especificada, por defecto es la visualizaci¢n de todos los
|
||||
* campos de la base de datos en el rea de trabajo actual.
|
||||
*
|
||||
* <xFuncionUsuario> es el nombre de una funci¢n ¢ un bloque de c¢digo
|
||||
* que podr¡a ser llamado cada vez que una tecla no reconocida ha sido
|
||||
* presionada ¢ cuando no hay m s teclas para ser procesadas y DBEDIT()
|
||||
* va al modo inactivo. Si <xFuncionUsuario> es una cadena de caracteres
|
||||
* ‚sta debe contener el nombre de una funci¢n de usuario definida, que
|
||||
* sea v lida y sin par‚ntesis.
|
||||
* Ambos la funci¢n definida por el usuario ¢ el bloque de c¢digo
|
||||
* deber n aceptar dos par metros: nModo y nActualColumna.
|
||||
* Ambos deber¡an devolver un valor num‚rico que corresponda a uno de
|
||||
* los c¢digos de retorno esperados.
|
||||
* (Vea la tabla m s abajo con la lista de nModo y los c¢digos de
|
||||
* retorno).
|
||||
*
|
||||
* <xColumnSayPictures> es un molde (picture) opcional.
|
||||
* Si <xColumnSayPictures> es una cadena de caracteres, todas las
|
||||
* columnas pueden usar el mismo valor como cadena de molde (picture).
|
||||
* Si <xColumnSayPictures> es un array, cada elemento debe ser una
|
||||
* cadena de caracteres que corresponde a la cadena (picture) usada de
|
||||
* molde para la columna con el mismo ¡ndice. Vea la ayuda para @...SAY
|
||||
* para tener m s informaci¢n acerca de los valores de molde (picture).
|
||||
*
|
||||
* <xCabeceraColumna> contiene los t¡tulos de cabecera para cada columna
|
||||
* si ‚ste es una cadena de caracteres, todas las columnas tendr n el
|
||||
* mismo encabezado, si ‚ste es un array, cada elemento es una cadena
|
||||
* de caracteres que contienen el titulo de cabecera para cada campo.
|
||||
* La cabecera puede ser dividido en m s de una l¡nea al poner un punto
|
||||
* y coma (;) en los lugares donde Ud. desea romper la l¡nea.
|
||||
* Si es omitida el valor por defecto para cada cabecera de columna es
|
||||
* tomado de <acColumnas> ¢ el nombre del campo de la base de datos, si
|
||||
* <acColumnas> no fue especificado
|
||||
*
|
||||
* <xSeparadorCabecera> es un array que contiene caracteres que dibujan
|
||||
* las l¡neas que separan las cabeceras y los datos de los campos .
|
||||
* En lugar de un array Ud. puede usar una cadena de caracteres que
|
||||
* podr¡a ser usada para la visualizaci¢n de la misma l¡nea para todos
|
||||
* los campos.
|
||||
* El valor por defecto es una l¡nea doble.
|
||||
*
|
||||
* <xSeparadorColumna> es un array que contiene caracteres que dibujan
|
||||
* las l¡neas que separan las columnas visualizadas. En lugar de un
|
||||
* array Ud. puede usar una cadena de caracteres que podria ser usada
|
||||
* para la visualizaci¢n de la misma l¡nea para todos los campos.
|
||||
* El valor por defecto es una l¡nea simple.
|
||||
*
|
||||
* <xSeparadorPie> es un array que contiene caracteres que dibujan
|
||||
* las l¡neas que separan el rea de datos de los campos y el pie.
|
||||
* En lugar de un array Ud. puede usar una cadena de caracteres que
|
||||
* podr¡a ser usada para la visualizaci¢n de la misma l¡nea para todos
|
||||
* los campos. El valor por defecto es ning£n separador de pie.
|
||||
*
|
||||
* <xPieColumna> contiene el pie para ser visualizado al final de
|
||||
* cada columna, si este es una cadena de caracteres, todas las columnas
|
||||
* tendr n el mismo pie, si este es un array, cada elemento es una
|
||||
* cadena de caracteres que contienen el pie para cada campo. El pie
|
||||
* puede ser dividido en m s de una l¡nea al poner un punto y coma (;)
|
||||
* en los lugares donde Ud. desea romper la l¡nea. Si es omitido, ning£n
|
||||
* pie es visualizado.
|
||||
* $RETURNS$
|
||||
* DBEDIT() retorna .F. si no hay una base de datos abierta en ese rea
|
||||
* de trabajo, ¢ si el n£mero de columnas para la visualizaci¢n es cero,
|
||||
* en caso contrario DBEDIT() devuelve .T.
|
||||
* $DESCRIPTION$
|
||||
* DBEDIT() visualiza y permite editar registros de una ¢ m s reas de
|
||||
* trabajo en una grilla en pantalla. Cada columna es definida por los
|
||||
* elementos de <acColumnas> y es el equivalente de un campo.
|
||||
* Cada fila es el equivalente de un registro de la base de datos.
|
||||
*
|
||||
*
|
||||
* A Continuaci¢n estan las teclas manejadas por DBEDIT(): </par>
|
||||
* -------------------------------------------------------
|
||||
*
|
||||
* Tecla Significado
|
||||
*
|
||||
* Izquierda Mueve una columna a la izquierda (campo previo)
|
||||
* Derecha Mueve una columna a la derecha (proximo campo)
|
||||
* Arriba Mueve arriba una fila (registro previo)
|
||||
* Abajo Mueve abajo una fila (proximo registro)
|
||||
* Pag-Arriba Mueve a la pantalla previa
|
||||
* Pag-Abajo Mueve a la pantalla pr¢xima
|
||||
* Ctrl Pag-Arriba Mueve al inicio del archivo
|
||||
* Ctrl Pag-Abajo Mueve al final del archivo
|
||||
* Inicio Mueve a la columna visible m s a la izquierda
|
||||
* Fin Mueve a la columna visible m s a la derecha
|
||||
* Ctrl Izquierda Desplaza una columna a la izquierda
|
||||
* Ctrl Derecha Desplaza una columna a la deecha
|
||||
* Ctrl Inicio Mueve a la columna m s a la izquierda
|
||||
* Ctrl Fin Mueve a la columna m s a la derecha
|
||||
*
|
||||
*
|
||||
* Cuando <xFuncionUsuario> es omitida, dos teclas m s estan activas:
|
||||
*
|
||||
* Tecla significado
|
||||
*
|
||||
* Esc Termina BROWSE()
|
||||
* Enter Termina BROWSE()
|
||||
*
|
||||
*
|
||||
* Cuando DBEDIT() ejecuta <xFuncionUsuario> le pasa los siguientes
|
||||
* argumentos:
|
||||
* nModo y el ¡ndice del registro actual en <acColumnas>.
|
||||
* Si <acColumnas> es omitido, el n£mero de ¡ndice es n£mero de FIELD()
|
||||
* de la estructura de la base de datos abierta.
|
||||
*
|
||||
*
|
||||
* Valores de los Modos en DBEDIT() : </par>
|
||||
* ---------------------------------
|
||||
*
|
||||
* Dbedit.ch Valor Significado
|
||||
*
|
||||
* DE_IDLE 0 DBEDIT() esta inactivo, todas la teclas de
|
||||
* movimiento han sido procesadas.
|
||||
* DE_HITTOP 1 Intento de mover el cursor m s alla de la parte
|
||||
* superior del archivo
|
||||
* DE_HITBOTTOM 2 Intento de mover el cursor despues del final
|
||||
* del archivo.
|
||||
* DE_EMPTY 3 No hay registros en el rea de trabajo, la base
|
||||
* de datos est vacia.
|
||||
* DE_EXCEPT 4 Interrupci¢n de teclado
|
||||
*
|
||||
*
|
||||
*
|
||||
* La funci¢n definida por el usuario ¢ el bloque de c¢digo debe
|
||||
* retornar un valor que le indique a DBEDIT() que hacer a continuaci¢n.
|
||||
*
|
||||
*
|
||||
* C¢digos de retorno de la Funci¢n del Usuario: </par>
|
||||
* --------------------------------------------
|
||||
*
|
||||
* Dbedit.ch Valor Significado
|
||||
*
|
||||
* DE_ABORT 0 Aborta DBEDIT().
|
||||
* DE_CONT 1 Continua DBEDIT() como ahora.
|
||||
* DE_REFRESH 2 Fueza relectura/revisualizaci¢n en pantalla de
|
||||
* todas las filas de datos
|
||||
*
|
||||
*
|
||||
* La funci¢n del usuario es llamada una vez en cada uno de los
|
||||
* siguientes casos:
|
||||
* - La base de datos esta vac¡a.
|
||||
* - El usuario trata de mover m s alla de la parte superior ¢ de la
|
||||
* parte inferior del archivo.
|
||||
* - Interrupci¢n de teclado, el usuario ha presionado una tecla que no
|
||||
* puede ser manejada por DBEDIT().
|
||||
* - El buffer de teclado esta vac¡o ¢ un refresco de pantalla acaba
|
||||
* de ocurrir.
|
||||
*
|
||||
* Nota Importante:
|
||||
* ---------------
|
||||
* DBEDIT() es una funci¢n de compatibilidad, esta fu‚ superada por la
|
||||
* clase TBrowse y no es recomendada para nuevas aplicaciones.
|
||||
* $EXAMPLES$
|
||||
* <fixed>
|
||||
* // Despliega un archivo DBF usando valores por defecto
|
||||
* USE Test
|
||||
* DBEDIT()
|
||||
* </fixed>
|
||||
*
|
||||
* $STATUS$
|
||||
* S
|
||||
* $COMPLIANCE$
|
||||
* <xFuncionUsuario> puede ser tambi‚n un bloque de c¢digo, esta es una
|
||||
* extensi¢n de Harbour.
|
||||
*
|
||||
* CA-Cl*pper lanzar un error si no hay una base de datos abierta
|
||||
* Harbour puede retornar .F.
|
||||
*
|
||||
* Clipper es inconsistente y lanzar un error si el n£mero de columnas
|
||||
* es cero. Harbour puede retornar .F.
|
||||
* Las NG de CA-Cl*pper 5.2 indican que el valor devuelto es NIL,
|
||||
* esto es err¢neo y deber¡a ser un valor l¢gico.
|
||||
*
|
||||
* Hay un c¢digo de retorno (3) indocumentado para las funciones
|
||||
* definidas por el usuario en Clipper (ambos 87 and 5.x). este es un
|
||||
* Modo de agregado (Append) el cual:
|
||||
* "Divide la pantalla para permitir m s que datos sean agregados en el
|
||||
* rea de la ventana".
|
||||
* Este modo no es soportado por Harbour.
|
||||
* $FILES$
|
||||
* Los archivos de cabecera son dbedit.ch, inkey.ch
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* @...SAY,BROWSE(),TBrowse class,TRANSFORM()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* BROWSE()*
|
||||
* $CATEGORY$
|
||||
* Entrada y salida de datos
|
||||
* $ONELINER$
|
||||
* Despliega un archivo de base de datos
|
||||
* $SYNTAX$
|
||||
* BROWSE( [<nSup>, <nIzq>, <nInf>, <nDer>] ) --> lExito
|
||||
* $ARGUMENTS$
|
||||
* <nSup> coordenada de la fila Superior de visualizaci¢n.
|
||||
*
|
||||
* <nIzq> coordenada de la columna izquierda de visualizaci¢n.
|
||||
*
|
||||
* <nInf> coordenada de la fila inferior de visualizaci¢n.
|
||||
*
|
||||
* <nDer> coordenada de la columna derecha de visualizaci¢n.
|
||||
* $RETURNS$
|
||||
* BROWSE() retorna .F. si no hay una base de datos abierta en ese rea
|
||||
* de trabajo, en caso contrario devuelve .T.
|
||||
* $DESCRIPTION$
|
||||
* BROWSE() es un visualizador de bases de datos de prop¢sito general,
|
||||
* sin demasiado trabajo ud. puede desplegar un archivo DBF con las
|
||||
* siguientes teclas:
|
||||
*
|
||||
*
|
||||
* Tecla Significado
|
||||
*
|
||||
* Izquierda Mueve una columna a la izquierda (campo previo)
|
||||
* Derecha Mueve una columna a la derecha (proximo campo)
|
||||
* Arriba Mueve arriba una fila (registro previo)
|
||||
* Abajo Mueve abajo una fila (proximo registro)
|
||||
* Pag-Arriba Mueve a la pantalla previa
|
||||
* Pag-Abajo Mueve a la pantalla proxima
|
||||
* Ctrl Pag-Arriba Mueve al inicio del archivo
|
||||
* Ctrl Pag-Abajo Mueve al final del archivo
|
||||
* Inicio Mueve a la columna visible m s a la izquierda
|
||||
* Fin Mueve a la columna visible m s a la derecha
|
||||
* Ctrl Izquierda Desplaza una columna a la izquierda
|
||||
* Ctrl Derecha Desplaza una columna a la deecha
|
||||
* Ctrl Inicio Mueve a la columna m s a la izquierda
|
||||
* Ctrl Fin Mueve a la columna m s a la derecha
|
||||
* Esc Termina el BROWSE()
|
||||
*
|
||||
*
|
||||
*
|
||||
* En la parte superior de la pantalla ud. ve una l¡nea de estado con
|
||||
* la siguiente indicaci¢n:
|
||||
*
|
||||
*
|
||||
* Registro ###/### N£mero registro actual / N£mero Total de registros.
|
||||
* <none> No hay registros, el archivo esta vacio.
|
||||
* <new> Ud.esta en modo de Agregado al final del archivo.
|
||||
* <Deleted> El registro actual esta borrado.
|
||||
* <bof> Ud. esta en el comienzo del archivo.
|
||||
*
|
||||
*
|
||||
* Ud. deber¡a pasar las cuatro coordenadas validas, si menos de cuatro
|
||||
* par metros son pasados al BROWSE() las coordenadas por defecto son:
|
||||
* 1, 0, MAXROW(), MAXCOL().
|
||||
* $EXAMPLES$
|
||||
* <fixed>
|
||||
* // muestra como desplegar una base de datos
|
||||
* USE Test
|
||||
* BROWSE()
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* S
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* DBEDIT()*,TBrowse class
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* TBrowseDB()
|
||||
* $CATEGORY$
|
||||
* Clase TBrowse
|
||||
* $ONELINER$
|
||||
* Crea un nuevo objeto TBrowse para ser usado con una base de datos.
|
||||
* $SYNTAX$
|
||||
* TBrowseDB( [<nSup>], [<nIzq>], [<nInf>], [<nDer>] ) --> oBrowse
|
||||
* $ARGUMENTS$
|
||||
* <nSup> coordenada de la fila superior de visualizaci¢n.
|
||||
*
|
||||
* <nIzq> coordenada de la columna izquierda de visualizaci¢n.
|
||||
*
|
||||
* <nInf> coordenada de la fila inferior de visualizaci¢n.
|
||||
*
|
||||
* <nDer> coordenada de la columna derecha de visualizaci¢n.
|
||||
* $RETURNS$
|
||||
* TBrowseDB() retorna un nuevo objeto TBrowse con unas coordenadas
|
||||
* espec¡ficas y un :SkipBlock, :GoTopBlock y :GoBottomBlock por defecto
|
||||
* para desplegar una base de datos.
|
||||
* $DESCRIPTION$
|
||||
* TBrowseDB() es una forma r pida de crear un objeto TBrowse junto con
|
||||
* el soporte m¡nimo para desplegar una base de datos.
|
||||
* Note que el objeto TBrowse devuelto no contiene objetos TBColumn y
|
||||
* Ud. necesita agregar una columna para cada campo por Ud. mismo
|
||||
* $EXAMPLES$
|
||||
* <fixed>
|
||||
* Para un buen ejemplo, mire en el c¢digo fuente de la funci¢n BROWSE()
|
||||
* en el subdirectorio ../source/rtl/browse.prg
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* S
|
||||
* $COMPLIANCE$
|
||||
* TBrowseDB() funciona exactamente como la funci¢n de CA-Cl*pper
|
||||
* TBrowseDB().
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* BROWSE()*,TBColumn class,TBrowse class,TBrowseNew()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* dbSkipper()
|
||||
* $CATEGORY$
|
||||
* Base de datos
|
||||
* $ONELINER$
|
||||
* Funci¢n para ayudar a saltar registros en la base de datos
|
||||
* $SYNTAX$
|
||||
* dbSkipper( <nRecs> ) --> nSkipped
|
||||
* $ARGUMENTS$
|
||||
* <nRecs> es el n£mero de registros a saltar relativos al registro
|
||||
* actual. N£meros positivos tratan de mover el puntero de registro
|
||||
* hacia adelante y N£meros negativos tratan de mover el puntero de
|
||||
* registro hacia atr s <nRecs> registros.
|
||||
* $RETURNS$
|
||||
* dbSkipper() retorna el n£mero actual de registros saltados.
|
||||
* $DESCRIPTION$
|
||||
* dbSkipper() es una funci¢n de ayuda usada en el mecanismo de
|
||||
* despliegue para saltar un n£mero de registros mientras le da al
|
||||
* llamador una indicaci¢n del n£mero actual de registros saltados.
|
||||
* $EXAMPLES$
|
||||
* <fixed>
|
||||
* // Abre un archivo y chequea si tenemos suficientes registros en el
|
||||
* USE ventas
|
||||
* IF dbSkipper( 100 ) == 100
|
||||
* ? "Buen trabajo!, debes irte de fiesta"
|
||||
* ELSE
|
||||
* ? "Muy mal, Ud. deber¡a realmente trabajar m s duro"
|
||||
* ENDIF
|
||||
* CLOSE
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* dbSkipper() es una funci¢n de compatibilidad con Xbase++ y no existe
|
||||
* como una funci¢n est ndar en CA-Cl*pper 5.x
|
||||
* Esta funci¢n es solamente visible si el archivo:
|
||||
* ../source/rtl/browdb.prg fue compilado con la bandera HB_COMPAT_XPP.
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* DBSKIP(),SKIP
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,90 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2001 Ron Pinkas
|
||||
* Documentaci¢n en Ingl‚s
|
||||
*
|
||||
* Copyright 2001 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Traducci¢n al Espa¤ol de clipper.txt
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
Este documento intenta describir las caracter¡sticas que separan
|
||||
Harbour de Clipper.
|
||||
|
||||
/* TODO: @FuncPointer(), y todas las otras extensiones de Harbour. */
|
||||
|
||||
|
||||
El Compilador de Macros de Harbour
|
||||
----------------------------------
|
||||
El Compilador de Macros de Harbour ofrece dos capas adicionales de
|
||||
funcionalidad por medio de la funci¢n HB_SETMACRO()*, no disponible
|
||||
en Clipper.
|
||||
|
||||
HB_SETMACRO( HB_SM_HARBOUR, TRUE ) habilitar compilaci¢n de macros
|
||||
y evaluaci¢n de expresiones complejas, no soportadas por Clipper como:
|
||||
|
||||
- exp++, exp--, var += exp, (exp), etc..
|
||||
- bloques de c¢digo (codeblocks) anidados.
|
||||
- Expresiones m s largas de 254 caracteres.
|
||||
|
||||
|
||||
HB_SETMACRO( HB_SM_XBASE, TRUE ) habilitar compilaci¢n de macros
|
||||
y evaluaci¢n de listas separadas por comas, en todos los contextos
|
||||
donde las listas son aceptadas por Clipper*, incluyendo:
|
||||
|
||||
- { &cMacro } // Literal de la lista de elementos de un array.
|
||||
- SomeArray[ &cMacro ]// Lista de indices de un array.
|
||||
- SomeFun( &cMacro ) // Lista de Argumentos de una funci¢n.
|
||||
- ( &cMacro ) // Lista de expresiones parentizada.
|
||||
|
||||
*Clipper s¢lo soporta lista de macros dentro del contexto de bloques
|
||||
de c¢digo (codeblocks).
|
||||
|
||||
Ambas capas extras estan activadas por defecto.
|
||||
|
||||
* Vea tambi‚n el switch -k del Compilador
|
||||
|
||||
|
||||
Comando LIST
|
||||
------------
|
||||
|
||||
LIST &cMacro
|
||||
|
||||
LIST en clipper soporta [superficialmente] macros de listas de
|
||||
expresiones.
|
||||
Ning£n error ser producido, y todas las expresiones en la lista ser n
|
||||
evaluadas, pero *solamente* la *£ltima* expresion ser visualizada.
|
||||
Esto no est documentado ni en el comando LIST, ni en la descripci¢n
|
||||
del operador Macro (&), pero es el comportamiento por defecto en
|
||||
todas las versiones de Clipper 5.x
|
||||
|
||||
Harbour en su lugar, no s¢lo eval£a todas las expresiones en esa
|
||||
lista de macros, sino que tambi‚n visualiza todos aquellos valores.
|
||||
Este comportamiento por defecto de Harbour, puede ser deshabilitado
|
||||
HB_SETMACRO( HB_SM_XBASE, .F. )*
|
||||
|
||||
* Vea tambi‚n el switch -k del Compilador
|
||||
|
||||
|
||||
INIT/EXIT y procedimientos de inicio
|
||||
------------------------------------
|
||||
|
||||
En Clipper el procedimiento de inicio es siempre el primer procedimiento
|
||||
/funci¢n del modulo principal, a£n si ese s¡mbolo es el s¡mbolo INIT
|
||||
¢ EXIT. En tal caso el programa nunca ejecutar el s¡mbolo "main".
|
||||
En Harbour el primer s¡mbolo que no sea INIT/EXIT, ser ejecutado como
|
||||
el s¡mbolo "main" despu‚s que todos los procedimientos INIT hayan sido
|
||||
ejecutados.
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,142 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2001
|
||||
* Documentación en Ingl‚s de: cmdline.txt
|
||||
*
|
||||
* Copyright 2002 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de: cmdline.txt
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* Linea de Comandos
|
||||
* $CATEGORY$
|
||||
* Documento
|
||||
* $ONELINER$
|
||||
* Opciones del Compilador
|
||||
* $DESCRIPTION$
|
||||
* Esta especificaci¢n sirve para CLIPPERCMD, HARBOURCMD, el compilador
|
||||
* Harbour y las directivas #pragma en el c¢digo fuente.
|
||||
*
|
||||
* La l¡nea de comando siempre predomina sobre las variables de entorno.
|
||||
*
|
||||
* Note que algunos switches no son aceptados en variables de entorno,
|
||||
* y algunos otros en #pragmas.
|
||||
*
|
||||
* Primero el analizador (parser) deber¡a comenzar saltando a trav‚s
|
||||
* de todos los tokens en la cadena separadas por espacios en blanco.
|
||||
* (¢ solo ir a trav‚s de todos los argv[])
|
||||
*
|
||||
* 1.) Si el token comienza con "-", este debe ser tratado como un
|
||||
* un nuevo estilo de switch .
|
||||
*
|
||||
* Uno ¢ m s caracteres switch pueden seguir a ‚ste. El signo "-"
|
||||
* dentro del token apaga el switch.
|
||||
*
|
||||
* Si el switch tiene un argumento, todos los caracteres siguientes son
|
||||
* tratados como parte del argumento:
|
||||
*
|
||||
* El signo "/" n tiene significado especial aqui.
|
||||
*
|
||||
* <table>
|
||||
* Switch Opci¢n resultante
|
||||
*
|
||||
* -wn ( W N )
|
||||
* -w-n ( !W N )
|
||||
* -wi/harbour/include/ ( W I=/harbour/include/ )
|
||||
* -wi/harbour/include/n ( W I=/harbour/include/n )
|
||||
* -wes0n ( W ES=0 N )
|
||||
* -wen ( W [invalid switch: e] N )
|
||||
* -wesn ( W ES=default(0) N )
|
||||
* -wses ( W S ES=default(0) )
|
||||
* -wess ( W ES=default(0) S )
|
||||
* - ( [invalid switch] )
|
||||
* -w-n-p ( !W !N P )
|
||||
* -w-n-p- ( !W !N !P )
|
||||
* -w- -w -w- ( finally: !W )
|
||||
* </table>
|
||||
*
|
||||
*
|
||||
* 2.) Si el token comienza con "/", este debe ser tratado como un
|
||||
* switch de compatibilidad.
|
||||
*
|
||||
* El analizador revisa el token por el pr¢ximo signo "/", o EOS
|
||||
* (End Of String = fin de linea) y trata la cadena resultante
|
||||
* como un s¢lo switch.
|
||||
*
|
||||
* Esto significa que si un switch con un argumento conteniendo el
|
||||
* signo "/" tiene algunas limitaciones.
|
||||
* Esto puede ser resuelto permitiendo el uso de caracteres comillas.
|
||||
* Esto es mayormente un problema en sistemas que usan "/" como un
|
||||
* separador de path.
|
||||
*
|
||||
*
|
||||
* El signo "-" n tiene significado especial aqu¡, ‚ste no puede ser
|
||||
* usado para deshabilitar un switch.
|
||||
*
|
||||
* <table>
|
||||
* Switch Opci¢n resultante
|
||||
*
|
||||
* /w/n ( W N )
|
||||
* /wo/n ( [invalid switch: wo] N )
|
||||
* /ihello/world/ ( I=hello [invalid switch: world]
|
||||
* [invalid switch: /] )
|
||||
* /i"hello/world/"/w ( I=hello/world/ W )
|
||||
* /ihello\world\ ( I=hello\world\ )
|
||||
* </table>
|
||||
*
|
||||
*
|
||||
* 3.) Si el token comienza con otra cosa, ‚ste deber¡a ser saltado.
|
||||
*
|
||||
* Los switches de Harbour son siempre insensibles a las mayúsculas.
|
||||
*
|
||||
* En la l¡nea de comandos de Harbour los dos estilos pueden ser usados
|
||||
* conjuntamente:
|
||||
*
|
||||
* harbour -wnes2 /gc0/q0 -iC:\hello
|
||||
*
|
||||
* Excepciones:
|
||||
*
|
||||
* - El manejo del switch indocumentado /CREDIT en la l¡nea de comandos
|
||||
* de Harbour es inusual, revise el c¢digo actual por esto.
|
||||
*
|
||||
* - El analisis de los par metros en la l¡nea de comandos de CLIPPER,
|
||||
* HARBOUR y aplicaciones de Harbour, son cosas distintas, vea
|
||||
* cmdarg.c por una nota.
|
||||
*
|
||||
* Notas:
|
||||
*
|
||||
* - En toda ocurrencia donde el path es aceptado, Harbour deber¡a
|
||||
* manejar el caracter doble comillas (") para especificar un path
|
||||
* conteniendo espacios, signo negativo, barras u otros caracteres
|
||||
* con un significado especial.
|
||||
*
|
||||
* /i"C:/hello/" </par>
|
||||
* -i"C:/hello-n" </par>
|
||||
* /i"C:/Program Files/" </par>
|
||||
* -i"C:/Program Files/" </par>
|
||||
*
|
||||
* <fixed>
|
||||
* S¢lo algunos ejemplos para las varias formas aceptadas:
|
||||
* //F20 == /F20 == F20 == F:20 == F20X
|
||||
* //TMPPATH:C:\hello
|
||||
* F20//TMPPATH:/temp///F:30000000 NOIDLE
|
||||
* F0NOIDLEX10
|
||||
* SQUAWKNOIDLE
|
||||
* </fixed>
|
||||
* "//" siempre deber¡an ser usados en la l¡nea de comandos.
|
||||
* $SEEALSO$
|
||||
* Opciones Compilador
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,183 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2001 Ryszard Glab <rglab@imid.med.pl>
|
||||
* Documentaci¢n en Ingl‚s de codeblock.txt
|
||||
*
|
||||
* Copyright 2001 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Traducci¢n al Espa¤ol de codeblock.txt
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
Implementaci¢n de Harbour de codeblocks (bloques de c¢digo)
|
||||
===========================================================
|
||||
|
||||
Compilaci¢n de un codeblock
|
||||
Durante el tiempo de Compilaci¢n, el codeblock es almacenado en la
|
||||
siguiente forma:
|
||||
- la cabecera
|
||||
- la ristra de bytes de pcodes
|
||||
|
||||
La cabecera almacena informaci¢n acerca de variables locales
|
||||
referenciadas.
|
||||
+0: el byte pcode para _PUSHBLOCK
|
||||
+1: el n£mero de bytes que definen a un codeblock
|
||||
+3: el n£mero de par metros codeblock (declarados entre || en el codeblock)
|
||||
+5: n£mero de variables locales usadas declaradas en el procedimiento /
|
||||
funci¢n donde el codeblock es creado.
|
||||
+7: La lista de las posiciones de variables locales de los procedimientos /
|
||||
funciones, en la pila eval del procedimiento / funci¢n. Cada variable
|
||||
local usada en un codeblock usa 2 bytes en esta lista. Cuando son
|
||||
usados codeblocks anidados, entonces esta lista es creada solamente
|
||||
en el codeblock m s externo.
|
||||
+x: La ristra de bytes pcode, siguiendo a la cabecera.
|
||||
+y: El byte pcode para _ENDBLOCK
|
||||
|
||||
|
||||
Creaci¢n de un codeblock
|
||||
========================
|
||||
Cuando el opcode HB_P_PUSHBLOCK es ejecutado entonces la estructura
|
||||
HB_ITEM es creada y puesta en la pila de evaluaci¢n. El tipo de item
|
||||
es IT_BLOCK.
|
||||
El valor de este item es un puntero a la estructura HB_CODEBLOCK.
|
||||
Adicionalmente este item almacena la base de las variables est ticas
|
||||
definidas para el procedimiento/funci¢n actual. - esto es usado durante
|
||||
la evaluaci¢n de un codeblock cuando la evaluaci¢n es llamada desde
|
||||
c¢digo desde otro m¢dulo PRG. Tambi‚n el n£mero de par metros esperados
|
||||
es almacenado.
|
||||
|
||||
La estructura HB_CODEBLOCK almacena un puntero a la ristra (stream)
|
||||
de pcodes que es ejecutada durante la evaluaci¢n de un codeblock.
|
||||
Este almacena tambi‚n el puntero a la tabla con referencia a variables
|
||||
locales. Valores de todas las variables locales definidas en un
|
||||
procedimiento y usadas en un codeblock son reemplazadas con una
|
||||
referencia a un valor almacenado en un pool de variables de memoria
|
||||
global. Esto permite el correcto acceso a variables locales aisladas
|
||||
en un codeblock devuelto desde ‚sta funci¢n (sea directamente en una
|
||||
sentencia RETURN ¢ indirectamente por asignarlo ‚ste a una variable
|
||||
est tica ¢ MEMVAR).
|
||||
Este reemplazo autom tico e incondicional es requerido porque no hay
|
||||
un m‚todo seguro de encontrar si un codeblock ser accedido desde
|
||||
fuera de una funci¢n d¢nde ‚ste es creado.
|
||||
|
||||
Cuando son usados codeblocks anidados, solamente el codeblock m s
|
||||
externo crea la tabla - todo codeblock interno usa esta tabla.
|
||||
Esto permite compartir la tabla entre codeblocks anidados - , la
|
||||
tabla es borrada si no hay m s referencias a ella.
|
||||
Esto es causado por el hecho que un codeblock interno puede ser
|
||||
creado durante la evaluaci¢n del codeblock exterior cuando las
|
||||
variables locales no existen como en este ejemplo:
|
||||
|
||||
PROCEDURE MAIN()
|
||||
PRIVATE foo, bar
|
||||
|
||||
Test()
|
||||
EVAL( foo )
|
||||
EVAL( bar )
|
||||
|
||||
RETURN
|
||||
|
||||
PROCEDURE Test()
|
||||
LOCAL a:='FOO', b:='BAR'
|
||||
|
||||
foo ={ || a + ( bar:=EVAL( {|| b} ) ) }
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
Evaluaci¢n de un codeblock
|
||||
==========================
|
||||
Los par metros pasados a un codeblock son puestos en la pila de
|
||||
evaluaci¢n antes de la evaluaci¢n del codeblock. Ellos son accedidos
|
||||
exactamente igual que cualquier par metro de funci¢n. Cuando un
|
||||
par metro de codeblock es referenciado, entonces su posici¢n en
|
||||
la pila de evaluaci¢n es usada.
|
||||
Cuando una variable local de un procedimiento es referenciada
|
||||
entonces el ¡ndice dentro de la tabla de posiciones de variables
|
||||
locales (copiada de la cabecera) es usada. El valor negativo es
|
||||
usado como un ¡ndice para distinguirlo de la referencia a un
|
||||
par metro del codeblock.
|
||||
|
||||
|
||||
Incompatibilidad con Clipper
|
||||
============================
|
||||
|
||||
1) Variables locales aisladas pasadas por referencia
|
||||
-------------------------------------------------
|
||||
Hay una peque¤a diferencia entre el manejo de las variables pasadas
|
||||
por referencia en un codeblock.
|
||||
El siguiente c¢digo lo explica (gracias a David G. Holm)
|
||||
|
||||
Function Main()
|
||||
Local nTest
|
||||
Local bBlock1 := MakeBlock()
|
||||
Local bBlock2 := {|| DoThing( @nTest ), qout("From Main: ", nTest ) }
|
||||
|
||||
eval( bBlock1 )
|
||||
eval( bBlock2 )
|
||||
|
||||
Return( NIL )
|
||||
|
||||
Function MakeBlock()
|
||||
Local nTest
|
||||
Return( {|| DoThing( @nTest ), qout("From MakeBlock: ", nTest ) } )
|
||||
|
||||
|
||||
Function DoThing( n )
|
||||
n := 42
|
||||
Return( NIL )
|
||||
|
||||
|
||||
En Clipper esto produce:
|
||||
Desde MakeBlock = NIL
|
||||
Desde Main = 42
|
||||
|
||||
En Harbour esta produce: (esta es la salida correcta, en mi opini¢n )
|
||||
Desde MakeBlock = 42
|
||||
Desde Main = 42
|
||||
|
||||
|
||||
2) Alcance de variables sin declarar
|
||||
---------------------------------
|
||||
Considere el siguiente c¢digo:
|
||||
|
||||
PROCEDURE MAIN()
|
||||
LOCAL cb
|
||||
cb :=Detach()
|
||||
? EVAL( cb, 10 )
|
||||
|
||||
RETURN
|
||||
|
||||
FUNCTION Detach()
|
||||
LOCAL b:={|x| x+a}
|
||||
LOCAL a:=0
|
||||
RETURN b
|
||||
|
||||
En Clipper la variable 'a' en un codeblock tiene alcance *local* ,
|
||||
sin embargo en Harbour la variable 'a' tiene un alcance *privado*.
|
||||
Como resultado de ello, en Clipper este c¢digo imprimir 10 y en
|
||||
Harbour este producir "error de argumento" en la operaci¢n '+'.
|
||||
Esto ser cierto cuando la variable 'a' sea declarada como PRIVATE.
|
||||
|
||||
PROCEDURE MAIN()
|
||||
LOCAL cb
|
||||
PRIVATE a
|
||||
cb := Detach()
|
||||
? EVAL( cb, 10 )
|
||||
RETURN
|
||||
|
||||
El c¢digo de arriba tambi‚n produce 10 en Clipper (a£n si es
|
||||
compilado con el switch -a ¢ -v).
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,225 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/* Note los siguientes comentarios que podemos usar en cualquier lugar
|
||||
|
||||
NOTE: Notas
|
||||
TODO: Algo que deber¡a ser agregado aqu¡
|
||||
TOFIX: Algo que necesita ser corregido
|
||||
OBSOLETE: Algo que podr¡a ser removido de aqu¡
|
||||
QUESTION: Yo tuve algunas dudas en este punto pero Yo podr¡a no tener
|
||||
una respuesta.
|
||||
OPT: Algo es comentado para mejorar la performance
|
||||
|
||||
como un ejemplo: */
|
||||
|
||||
|
||||
Est ndar de Codificaci¢n de Harbour
|
||||
===================================
|
||||
(basado mayormente en los est ndares de codificaci¢n de PHP)
|
||||
|
||||
|
||||
Implementaci¢n de C¢digo
|
||||
------------------------
|
||||
|
||||
[0] Documente su c¢digo en los archivos fuentes y en los archivos de texto
|
||||
que van a constituir el manual. [tm]
|
||||
|
||||
[1] Funciones que reciben punteros a recursos no deber¡an liberar a ‚stos.
|
||||
por ejemplo, la funci¢n int mail( char *to, char *from) NO deber¡a
|
||||
liberar la memoria a la que apuntan los punteros "to" y "from".
|
||||
Excepciones:
|
||||
|
||||
- Las funciones dise¤adas para liberar aquel recurso.
|
||||
por ejemplo, hb_xfree()
|
||||
|
||||
- La funci¢n que recibe un argumento booleano, que controla cuando la
|
||||
funci¢n puede liberar sus argumentos (si es cierto - la funci¢n
|
||||
debe liberar sus argumentos, si es falso - no debe hacerlo).
|
||||
|
||||
[2] Funciones que est n estrechamente ligadas ¢ integradas con otras
|
||||
funciones dentro del mismo m¢dulo, y conf¡an en ese comportamiento
|
||||
poco trivial entre una y otra, deber¡an ser documentadas como tal y
|
||||
declaradas 'static'. Ellas deber¡an ser evitadas de ser posible.
|
||||
|
||||
[3] Use definciones y macros cuando sea posible, as¡ estas constantes
|
||||
tienen nombres significativos y pueden ser f cilmente manipulados.
|
||||
Use TRUE en lugar de 1 (en un contexto booleano)
|
||||
Use FALSE en lugar de 0 (en un contexto booleano)
|
||||
Use NULL en lugar de 0 (en un contexto de un puntero)
|
||||
Siempre use el prefijo 'HB_' para definiciones de nuevos tipos
|
||||
de datos y macros.
|
||||
Use ¢ bi‚n el prefijo 'PHB_' ¢ el sufijo '_PTR' para tipos de datos
|
||||
que son punteros.
|
||||
|
||||
por ejemplo:
|
||||
HB_ITEM
|
||||
PHB_ITEM
|
||||
HB_ITEM_PTR
|
||||
|
||||
[4] Cuando escriba funciones que traten con cadenas, aseg£rese de recordar
|
||||
que Harbour mantiene la propiedad del tama¤o de cada cadena, y que
|
||||
esta no deber¡a ser calculada con strlen(). Escriba sus funciones de
|
||||
forma tal que estas tomen ventaja de la propiedad tama¤o ¢ longitud,
|
||||
tanto por eficiencia, como para que sean seguras en el tratamiento
|
||||
de cadenas binarias.
|
||||
Funciones que cambien cadenas y obtengan sus nuevas longitudes mientras
|
||||
hacen esto, deber¡an devolver esa nueva longitud, as¡ no tienen que
|
||||
recalcularlas con strlen().
|
||||
|
||||
[5] NUNCA USE strncat(). Si Ud. est absolutamente seguro de lo que est
|
||||
haciendo, chequee este documento de nuevo, y reci‚n entonces considere
|
||||
usarlo, y a£n as¡ trate de evitarlo.
|
||||
|
||||
[6] Use assert(). No solamente buenos assert encuentran errores, sino
|
||||
que tambi‚n ayuda con la legibilidad del c¢digo fuente.
|
||||
- No use assert para el manejo de errores. Use assert solamente para
|
||||
la condici¢n que debe ser siempre cierta.
|
||||
- No use asignaciones en condiciones assert. Si Ud. asigna dentro
|
||||
de una condici¢n assert, Ud. se arriesga a un evasivo error que
|
||||
podr¡a ser muy dif¡cil de encontrar en una contruccion de depuraci¢n
|
||||
debido al efecto lateral de la asignaci¢n.
|
||||
Llamadas a funciones en condiciones assert tambi‚n pueden causar
|
||||
este problema, si ellos modifican uno de sus argumentos ¢ variables
|
||||
globales.
|
||||
|
||||
[7] Cuando desee inactivar c¢digo coment ndolo, utilice una sentencia #if
|
||||
y NO utilice #if 0 solamente. En su lugar use "<cvs username here>_0"
|
||||
Por ejemplo #if FOO_0, donde FOO es su nombre de usuario del CVS.
|
||||
Esto permite un seguimiento m s f cil del por qu‚ el c¢digo fu‚ anulado
|
||||
al ser comentado, especialmente en librer¡as empaquetadas.
|
||||
|
||||
[8] Use hb_xgrab()/hb_xalloc(), hb_xfree(), hb_xrealloc(), hb_xsize()
|
||||
para manejar la asignaci¢n de memoria. Estas funciones implementan
|
||||
un mecanismo interno "safety-net" que asegura la des-asignaci¢n de
|
||||
cualquier memoria no liberada al final de la aplicaci¢n.
|
||||
Ellas proveen tambi‚n valiosa informaci¢n sobre asignaci¢n y
|
||||
desbordamiento, mientras se ejecutan en modo depuraci¢n (debug mode).
|
||||
|
||||
|
||||
Convenci¢n para los Nombres
|
||||
---------------------------
|
||||
|
||||
[1] Los nombres de funciones para nivel-de-usuario definidas en el c¢digo
|
||||
fuente en C deber¡an ser encerradas dentro de la macro HB_FUNC().
|
||||
Ellas deber¡an estar en may£sculas.
|
||||
El nombre deber¡a ser prefijado con HB_' si esta funci¢n es una extensi¢n
|
||||
al conjunto de funciones definidas en Clipper.
|
||||
Las abreviaturas en el nombre no deber¡an ser usadas cuando ellas
|
||||
disminuyan la legibilidad ¢ el significado de la funci¢n.
|
||||
|
||||
[2] Los nombres de variables deben ser significativos. Los nombres de
|
||||
variables de una letra deben ser evitados, excepto para lugares donde
|
||||
la variable no tiene un real significado ¢ tiene un significado trivial
|
||||
(por ej. for (i=0; i<100; i++) ...).
|
||||
|
||||
[3] Los nombres de variables deber¡an usar la as¡ llamada notaci¢n H£ngara.
|
||||
Use letras en min£sculas y no use el gui¢n inferior '_' (underscore)
|
||||
para separar entre palabras.
|
||||
|
||||
Bien:
|
||||
pMemoryPtr
|
||||
|
||||
Mal:
|
||||
p_memory_ptr
|
||||
|
||||
[4] Variables est ticas deben ser prefijadas con 's_'
|
||||
|
||||
[5] Variables Globales (variables compartidas entre m¢dulos) deber¡an ser
|
||||
prefijadas con 'hb_<module_prefix>' por ej. hb_vm_bDebug, hb_gc_pStart
|
||||
|
||||
|
||||
Sintaxis e Indentaci¢n
|
||||
----------------------
|
||||
|
||||
[1] Nunca use comentarios estilo C++ (por ej. // comentario).
|
||||
Siempre use comentarios estilo C en su lugar.
|
||||
Harbour est escrito en C, y el prop¢sito es compilarlo bajo cualquier
|
||||
compilador ANSI-C compatible. Aunque piense que muchos compiladores
|
||||
aceptan comentarios estilo C++ el c¢digo C, Ud. tiene que asegurarse
|
||||
que su c¢digo pueda compilarse en otros compiladores tambi‚n.
|
||||
|
||||
[2] No use el estilo K&R (Kerningham y Ritchie). por supuesto nosotros no
|
||||
podemos y no queremos forzar a nadie a usar un estilo que el/ella no
|
||||
use, pero al final, cuando su c¢digo vaya dentro de la parte principal
|
||||
de Harbour ¢ de uno de sus m¢dulos est ndares, por favor no use el
|
||||
estilo K&R. Esto se aplica a todo, comenzando con los estilos de
|
||||
indentaci¢n y comentarios hasta la sintaxis de la declaraci¢n de la
|
||||
funci¢n.
|
||||
|
||||
Vea tambi‚n
|
||||
http://www.tuxedo.org/~esr/jargon/html/entry/indent-style.html
|
||||
|
||||
[3] Sea generoso con los espacios en blanco y las llaves.
|
||||
Siempre es preferible:
|
||||
|
||||
if( cualquier_cosa )
|
||||
{
|
||||
bar;
|
||||
}
|
||||
|
||||
a esto:
|
||||
|
||||
if(cualquier_cosa)bar;
|
||||
|
||||
y a esto:
|
||||
|
||||
if( cualquier_cosa )
|
||||
bar;
|
||||
|
||||
Mantenga una l¡nea vac¡a entre la secci¢n de declaraci¢n de variables y
|
||||
las sentencias de un block, as¡ como tambi‚n entre grupos de sentencias
|
||||
de un block.
|
||||
|
||||
[4] Cuando indente, use tres espacios (NO use tabs). Es importante mantener
|
||||
consistencia en la indentaci¢n as¡ las definiciones, comentarios y
|
||||
estructuras de control permanecen correctamente alineados.
|
||||
|
||||
|
||||
Documentaci¢n
|
||||
-------------
|
||||
|
||||
[1] Siempre que le sea posible documente Ud. mismo las funciones que
|
||||
desarrolle.
|
||||
Generalmente es dif¡cil entender el c¢digo escrito por otra persona,
|
||||
m s a£n cuando involucra algoritmos fuera de lo c¢mun, atributos
|
||||
y variables del sistema ¢ datos que el documentador no dispone.
|
||||
Esto es particularmente evidente en funciones de bajo nivel.
|
||||
|
||||
[2] Transcurrido un cierto tiempo, se dificulta la tarea de Documentaci¢n
|
||||
debido a que es necesario leer y releer el c¢digo varias veces (aunque
|
||||
la tarea la haga el propio desarrollador). Esto es evidente cuando no
|
||||
se utilizan variables con un nombre adecuado para la tarea que realizan
|
||||
(s¢lo se utilizan letras).
|
||||
Por eso se pide encarecidamente que NO se dejen funciones ¢
|
||||
procedimientos sin documentar.
|
||||
|
||||
[3] Si la funci¢n ¢ procedimiento que se est tratando de documentar, hace
|
||||
a su vez llamados a funciones no documentadas del sistema y el
|
||||
desarrollador original no est disponible, podr¡a ser muy dif¡cil ¢ tal
|
||||
vez imposible de documentar.
|
||||
|
||||
[4] Rastrear cuales funciones est n documentadas y cuales no y si est n
|
||||
total ¢ parcialmente documentadas es un malgasto de recursos adicional
|
||||
en tiempo y en gente.
|
||||
|
||||
[5] Si Ud. es el desarrollador de la funci¢n, No se preocupe por la
|
||||
narrativa. Es m s importante saber qu‚ hace la funci¢n qu‚ argumentos
|
||||
recibe, para qu‚ sirven y especialmente qu‚ dato/s se devuelven.
|
||||
|
||||
[6] Si Ud. es el desarrollador de la funci¢n, y utiliza variables ¢
|
||||
funciones no documentadas del sistema, por favor expliquelas tanto como
|
||||
sea posible.
|
||||
Si utiliza alg£n algoritmo raro, explique brevemente qu‚ hace y como
|
||||
funciona.
|
||||
|
||||
[7] Las aclaraciones ¢ explicaciones que ponga en el cuerpo de la funci¢n
|
||||
enci‚rrelas entre el par /* */ por favor no utilice la doble barra //
|
||||
para comentarios porque disminuye su portabilidad.
|
||||
|
||||
[8] Recuerde... el proceso de documentaci¢n consume mucho tiempo, usualmente
|
||||
lleva m s tiempo escribir la documentaci¢n de una funci¢n que la funci¢n
|
||||
propiamente dicha.
|
||||
|
||||
|
||||
@@ -1,765 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2000 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de los comandos OOP
|
||||
*
|
||||
* Copyright 2000 Brian Hays <bhays@abacuslaw.com>
|
||||
* Documentaci¢n en Ingl‚s de los comandos OOP
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $COMMANDNAME$
|
||||
* CLASS
|
||||
* $CATEGORY$
|
||||
* Comando OOP
|
||||
* $ONELINER$
|
||||
* Define una Clase para la Programacion Orientada a Objetos (OOP).
|
||||
* $SYNTAX$
|
||||
* CLASS <NombreClase> [ <FROM, INHERIT> <SuperClase> ]
|
||||
* $ARGUMENTS$
|
||||
* <NombreClase> Nombre de la clase a definir. Por tradici¢n, las
|
||||
* clases en Harbour comienzan con "T" (algo com£n en el
|
||||
* mundo OOP) para evitar colisiones con clases creadas
|
||||
* por el usuario.
|
||||
* <SuperClase> La clase padre para usar la herencia.
|
||||
* $DESCRIPTION$
|
||||
* CLASS crea una clase desde la cual se pueden crear objetos.
|
||||
* Cada clase es definida en un archivo.prg separado para este prop¢sito
|
||||
* No se puede crear m s de una clase en un archivo.prg
|
||||
* Despu‚s del mandato CLASS comienza la definici¢n, luego los elementos
|
||||
* DATA (tambien conocidos como variables de instancia) y luego
|
||||
* los METHODS de la clase (el equivalente a las funciones en la
|
||||
* Programacion tradicional)
|
||||
*
|
||||
* Las Clases pueden heredar desde una clase sola <SuperClass>, pero la
|
||||
* cadena de herencia puede extenderse a muchos niveles
|
||||
*
|
||||
* Un program usa una clase llamando al Constructor de la clase, el
|
||||
* m‚todo New() para crear el objeto. Ese objeto es usualmente asignado
|
||||
* a una variable, la cual es usada para acceder a los elementos DATA
|
||||
* y a los m‚todos
|
||||
* $EXAMPLES$
|
||||
* <fixed>
|
||||
* CLASS TBColumn
|
||||
*
|
||||
* DATA Block // Codeblock para recuperar datos para la Columna
|
||||
* DATA Cargo // Variable definida por el usuario
|
||||
* DATA ColorBlock // Codeblock que determina el color de los items
|
||||
* DATA ColSep // Caracter separador de la Columna
|
||||
* DATA DefColor // Array de ¡ndices num‚ricos a la tabla de color
|
||||
* DATA Footing // Pie de Columna
|
||||
* DATA FootSep // Caracter separador del Pie
|
||||
* DATA Heading // Encabezado de la Columna
|
||||
* DATA HeadSep // Caracter separador de la cabecera
|
||||
* DATA Width // Ancho de la Columna
|
||||
* DATA ColPos // Posici¢n temporaria de la columna en pantalla
|
||||
*
|
||||
* METHOD New() // Constructor
|
||||
*
|
||||
* ENDCLASS
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* CLASS es una extensi¢n de Harbour.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* HBClass(),Programacion Orientada a Objeto,DATA,METHOD
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $COMMANDNAME$
|
||||
* DATA
|
||||
* $CATEGORY$
|
||||
* Comando OOP
|
||||
* $ONELINER$
|
||||
* Define una variable de instance DATA, para los objetos de la clase
|
||||
* $SYNTAX$
|
||||
* DATA <NombreDato1> [,<NombreDatoN>] [ AS <tipo> ] [ INIT <uValor> ]
|
||||
* $ARGUMENTS$
|
||||
* <NombreDato1> Nombre de DATA
|
||||
*
|
||||
* <tipo> Especificaci¢n Opcional del tipo de datos, de uno de
|
||||
* los siguientes (especificaci¢n en ingl‚s):
|
||||
* Character, Numeric, Date, Logical, Codeblock, Nil
|
||||
*
|
||||
* <uValor> Valor opcional inicial cuando se crea un nuevo objeto
|
||||
* $DESCRIPTION$
|
||||
* Los elementos DATA tambien pueden ser pensados como "propiedades"
|
||||
* ¢ "atributos" de un objeto. ellos pueden ser de cualquier tipo
|
||||
* incluyendo bloques de codigo.
|
||||
* Una vez que el objeto ha sido creado, los elementos DATA son refe-
|
||||
* renciados con dos puntos (:) como en MyObject:Heading := "Nombre".
|
||||
* Usualmente una clase tambi‚n define m‚todos para manipular los DATA.
|
||||
*
|
||||
* Se puede usar la clausula "AS <type>" para reforzar que DATA es
|
||||
* perteneciente a un cierto tipo. De otra manera este tomar el tipo
|
||||
* de cualquier valor que le sea asignado.
|
||||
*
|
||||
* Use la clausula "INIT <uValue>" para inicializar ese DATA a <uValue>
|
||||
* siempre que un nuevo objeto es creado.
|
||||
* $EXAMPLES$
|
||||
* <fixed>
|
||||
* CLASS TBColumn
|
||||
*
|
||||
* DATA Block // Codeblock para recuperar datos para la Columna
|
||||
* DATA Cargo // Variable definida por el usuario
|
||||
* DATA ColorBlock // Codeblock que determina el color de los items
|
||||
* DATA ColSep // Caracter separador de la Columna
|
||||
* DATA DefColor // Array de ¡ndices num‚ricos a la tabla de color
|
||||
* DATA Footing // Pie de Columna
|
||||
* DATA FootSep // Caracter separador del Pie
|
||||
* DATA Heading // Encabezado de la Columna
|
||||
* DATA HeadSep // Caracter separador de la cabecera
|
||||
* DATA Width // Ancho de la Columna
|
||||
* DATA ColPos // Posici¢n temporaria de la columna en pantalla
|
||||
*
|
||||
* METHOD New() // Constructor
|
||||
*
|
||||
* ENDCLASS
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* DATA es una extensi¢n de Harbour.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* Programacion Orientada a Objeto,CLASS,METHOD,CLASSDATA
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $COMMANDNAME$
|
||||
* CLASSDATA
|
||||
* $CATEGORY$
|
||||
* Comando OOP
|
||||
* $ONELINER$
|
||||
* Define una variable CLASSDATA para una clase (NO para un Objeto !)
|
||||
* $SYNTAX$
|
||||
* CLASSDATA <DataName1> [,<DataNameN>] [ AS <type> ] [ INIT <uValue> ]
|
||||
* $ARGUMENTS$
|
||||
* <NombreDato1> Nombre de DATA
|
||||
*
|
||||
* <tipo> Especificaci¢n opcional del tipo de datos de uno de
|
||||
* los siguientes (Original en ingl‚s):
|
||||
* Character, Numeric, Date, Logical, Codeblock, Nil
|
||||
*
|
||||
* <uValor> Valor opcional inicial cuando se inicia el programa
|
||||
* $DESCRIPTION$
|
||||
* Las variables CLASSDATA pueden se pensadas como "propiedades" de un
|
||||
* clase entera. Cada CLASSDATA existe s¢lo una vez, no importa cu ntos
|
||||
* objetos sean creados. Un uso comun es para un contador que es
|
||||
* incrementado siempre que un objeto es creado y decrementado cuando
|
||||
* alguno es destruido, as¡ se puede monitorear el n£mero de objetos
|
||||
* en existencia para esta clase.
|
||||
*
|
||||
* Se puede usar la clausula "AS <type>" para reforzar que CLASSDATA es
|
||||
* perteneciente a un cierto tipo. De otra manera este tomar el tipo
|
||||
* de cualquier valor que le sea asignado.
|
||||
* Use la clausula "INIT <uValue>" para inicializar ese DATA a <uValue>
|
||||
* siempre que un nuevo objeto es creado.
|
||||
* $EXAMPLES$
|
||||
* <fixed>
|
||||
* CLASS TWindow
|
||||
* DATA hWnd, nOldProc
|
||||
* CLASSDATA lRegistered AS LOGICAL
|
||||
* ENDCLASS
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* CLASSDATA es una extensi¢n de Harbour.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* Programacion Orientada a Objeto,CLASS,METHOD,DATA
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $COMMANDNAME$
|
||||
* METHOD
|
||||
* $CATEGORY$
|
||||
* Comando OOP
|
||||
* $ONELINER$
|
||||
* Declara un METHOD para una clase en la cabecera de la clase
|
||||
* $SYNTAX$
|
||||
* METHOD <NombreM‚todo>( [<params,...>]) [ CONSTRUCTOR ]
|
||||
* METHOD <NombreM‚todo>( [<params,...>]) INLINE <Code,...>
|
||||
* METHOD <NombreM‚todo>( [<params,...>]) BLOCK <CodeBlock>
|
||||
* METHOD <NombreM‚todo>( [<params,...>]) EXTERN <FuncName>([<args,..>])
|
||||
* METHOD <NombreM‚todo>( [<params,...>]) SETGET
|
||||
* METHOD <NombreM‚todo>( [<params,...>]) VIRTUAL
|
||||
* METHOD <NombreM‚todo>( [<param>] ) OPERATOR <op>
|
||||
* METHOD <NombreM‚todo>( [<params,...>]) CLASS <ClassName>
|
||||
* $ARGUMENTS$
|
||||
* <NombreM‚todo> Nombre del m‚todo a definir
|
||||
*
|
||||
* <params,...> Lista opcional de parametros
|
||||
* $DESCRIPTION$
|
||||
* Los M‚todos son "funciones de clase" y hacen el trabajo de la clase.
|
||||
* Todos los m‚todos pueden ser definidos en la cabecera entre los
|
||||
* comandos CLASS y ENDCLASS. Si el cuerpo de un m‚todo no esta
|
||||
* totalmente definido aqui, el cuerpo completo es escrito debajo del
|
||||
* comando ENDCLASS usando esta sintaxis:
|
||||
*
|
||||
* METHOD <NombreM‚todo>( [<params,...>] ) CLASS <NombreClase>
|
||||
*
|
||||
* Los M‚todos pueden referenciar al objeto actual usando la palabra
|
||||
* clave "Self:" ¢ su versi¢n m s corta "::"
|
||||
*
|
||||
* CLAUSULAS:
|
||||
*
|
||||
* CONSTRUCTOR Define un m‚todo especial de la clase: el m‚todo
|
||||
* Constructor, usado para crear objetos. Este es
|
||||
* usualmente el m‚todo New().
|
||||
* Los constructores siempre retornan el objeto New().
|
||||
*
|
||||
* INLINE R pido y f cil de codificar, INLINE le permite definir
|
||||
* el c¢digo para el m‚todo inmediatamente despu‚s de la
|
||||
* definici¢n de la clase. Cualquier m‚todo no declarado
|
||||
* INLINE ¢ BLOCK debe ser completamente definido despu‚s
|
||||
* del comando ENDCLASS.
|
||||
* El <Codigo,...> siguiente a INLINE recibe un parametro
|
||||
* de Self. Si se necesita recibir m s par metros, use
|
||||
* la cl usula BLOCK en su lugar.
|
||||
*
|
||||
* BLOCK Use esta cl usula cuando desee declarar r pidos m‚todos
|
||||
* 'inline' que necesiten par metros. El primer par metro
|
||||
* a <CodeBlock> debe ser Self, como en:
|
||||
*
|
||||
* METHOD <NombreM‚todo> BLOCK {|Self,<arg1>,<arg2>,...,<argN>|...}
|
||||
*
|
||||
* EXTERN Si una funci¢n externa hace lo que el m‚todo necesita,
|
||||
* use esta cl usula para hacer una llamada optimizada a
|
||||
* esa funci¢n directamente.
|
||||
*
|
||||
* SETGET Para datos calculados. El nombre del m‚todo puede ser
|
||||
* manipulado como un elemento de DATA para establecer
|
||||
* (Set) u obtener (Get) un valor.
|
||||
*
|
||||
* VIRTUAL M‚todos que no hacen nada. Utiles para Clases de Base
|
||||
* donde la Clase hija definir el comportamiento del
|
||||
* m‚todo, ¢ cuando Ud. esta creando y probando una Clase.
|
||||
*
|
||||
* OPERATOR Operador de Sobrecarga para las Clases.
|
||||
* Vea el ejemplo ../Tests/TestOp.prg para detalles
|
||||
*
|
||||
* CLASS <ClassName>
|
||||
* Use esta sintaxis solamente para definir un m‚todo
|
||||
* completo despu‚s del comando ENDCLASS.
|
||||
* $EXAMPLES$
|
||||
* <fixed>
|
||||
* CLASS TWindow
|
||||
* DATA hWnd, nOldProc
|
||||
* METHOD New( ) CONSTRUCTOR
|
||||
* METHOD Capture() INLINE SetCapture( ::hWnd )
|
||||
* METHOD End() BLOCK { | Self, lEnd | If( lEnd := ::lValid(),;
|
||||
* ::PostMsg( WM_CLOSE ),), lEnd }
|
||||
* METHOD EraseBkGnd( hDC )
|
||||
* METHOD cTitle( cNewTitle ) SETGET
|
||||
* METHOD Close() VIRTUAL
|
||||
* ENDCLASS
|
||||
*
|
||||
* METHOD New( ) CLASS TWindow
|
||||
* local nVar, cStr
|
||||
* ... <codigo> ...
|
||||
* ... <codigo> ...
|
||||
* RETURN Self
|
||||
* </fixed>
|
||||
* $TESTS$
|
||||
* <fixed>
|
||||
* TestOp.prg
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* METHOD es una extensi¢n de Harbour.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* HBClass(),Programacion Orientada a Objeto,DATA,CLASS
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $COMMANDNAME$
|
||||
* MESSAGE
|
||||
* $CATEGORY$
|
||||
* Comando OOP
|
||||
* $ONELINER$
|
||||
* Reenv¡a la llamada de un m‚todo a otro m‚todo.
|
||||
* $SYNTAX$
|
||||
* MESSAGE <NombreMensaje> METHOD <NombreM‚todo>( [<params,...>] )
|
||||
* MESSAGE <NombreMensaje>() METHOD <NombreM‚todo>( [<params,...>] )
|
||||
* $ARGUMENTS$
|
||||
* <NombreMensaje> El nombre del pseudo-m‚todo a definir.
|
||||
*
|
||||
* <NombreM‚todo> El m‚todo a crear y llamar cuando <NombreMensaje>
|
||||
* es invocado.
|
||||
* <params,...> Lista de par metros opcionales para el m‚todo
|
||||
* $DESCRIPTION$
|
||||
* El comando MESSAGE es una caracter¡stica rara vez usada, que permite
|
||||
* re-enviar una llamada a un m‚todo con un nombre diferente. Esto puede
|
||||
* ser necesario si el nombre de un m‚todo entra en conflicto con una
|
||||
* funci¢n p£blica que necesita ser llamada desde adentro de un m‚todo
|
||||
* de la Clase.
|
||||
*
|
||||
* Por ejemplo, se puede tener una funci¢n p£blica llamda BeginPaint()
|
||||
* que es usada para pintar las ventanas. Podr¡a ser natural tambi‚n
|
||||
* tener un m‚todo de la Clase Ventana, llamado :BeginPaint() que la
|
||||
* aplicaci¢n pueda llamar.
|
||||
* Pero dentro del m‚todo de la Clase uno podr¡a no estar habilitado
|
||||
* para llamar a la funci¢n p£blica porque, los m‚todos internos est n
|
||||
* basados en funciones est ticas (las que ocultan funciones p£blicas
|
||||
* con el mismo nombre)
|
||||
*
|
||||
* El comando MESSAGE permite crear el verdadero m‚todo con un nombre
|
||||
* diferente (::xBeginPaint()) y a£n permitir la sintaxis ::BeginPaint()
|
||||
* para llamar a ::xBeginPaint(). Este entonces es libre de llamar a
|
||||
* la funci¢n publica BeginPaint().
|
||||
* $EXAMPLES$
|
||||
* <fixed>
|
||||
* CLASS TWindow
|
||||
* DATA hWnd, nOldProc
|
||||
* METHOD New( ) CONSTRUCTOR
|
||||
* MESSAGE BeginPaint METHOD xBeginPaint()
|
||||
* ENDCLASS
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* MESSAGE es una extensi¢n de Harbour.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* METHOD,DATA,CLASS,Programacion Orientada a Objeto
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $COMMANDNAME$
|
||||
* ERROR HANDLER
|
||||
* $CATEGORY$
|
||||
* Comando OOP
|
||||
* $ONELINER$
|
||||
* Designa un m‚todo como manejador de error para la Clase.
|
||||
* $SYNTAX$
|
||||
* ERROR HANDLER <NombreM‚todo>( [<params,...>] )
|
||||
* $ARGUMENTS$
|
||||
* <NombreM‚todo> Nombre del m‚todo a definir
|
||||
*
|
||||
* <params,...> Lista de parametros opcionales
|
||||
* $DESCRIPTION$
|
||||
* ERROR HANDLER nombra al m‚todo que deberia manejar los errores para
|
||||
* la Clase que esta siendo definida.
|
||||
* $EXAMPLES$
|
||||
* <fixed>
|
||||
* CLASS TWindow
|
||||
* ERROR HANDLER MyErrHandler()
|
||||
* ENDCLASS
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* ERROR HANDLER es una extensi¢n de Harbour.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* Programacion Orientada a Objeto,ON ERROR,CLASS,METHOD,DATA
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $COMMANDNAME$
|
||||
* ON ERROR
|
||||
* $CATEGORY$
|
||||
* Comando OOP
|
||||
* $ONELINER$
|
||||
* Designa un m‚todo como manejador de error para la Clase.
|
||||
* $SYNTAX$
|
||||
* ON ERROR <NombreM‚todo>( [<params,...>] )
|
||||
* $ARGUMENTS$
|
||||
* <NombreM‚todo> Nombre del m‚todo a definir
|
||||
*
|
||||
* <params,...> Lista de parametros opcionales
|
||||
* $DESCRIPTION$
|
||||
* ON ERROR es un sin¢nimo para ERROR HANDLER.
|
||||
* Este nombra al m‚todo que deber¡a manejar los errores para la
|
||||
* Clase que esta siendo definida.
|
||||
* $EXAMPLES$
|
||||
* <fixed>
|
||||
* CLASS TWindow
|
||||
* ON ERROR MyErrHandler()
|
||||
* ENDCLASS
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* ON ERROR es una extensi¢n de Harbour.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* Programacion Orientada a Objeto,ERROR HANDLER,CLASS,METHOD,DATA
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $COMMANDNAME$
|
||||
* ENDCLASS
|
||||
* $CATEGORY$
|
||||
* Comando OOP
|
||||
* $ONELINER$
|
||||
* Termina la declaraci¢n de una Clase.
|
||||
* $SYNTAX$
|
||||
* ENDCLASS
|
||||
* $DESCRIPTION$
|
||||
* ENDCLASS marca el fin de la declaraci¢n de una Clase.
|
||||
* Este es usualmente seguido por el m‚todo de la Clase que no es
|
||||
* INLINE.
|
||||
* $EXAMPLES$
|
||||
* <fixed>
|
||||
* CLASS TWindow
|
||||
* DATA hWnd, nOldProc
|
||||
* ENDCLASS
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* ON ERROR es una extensi¢n de Harbour.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* Programacion Orientada a Objeto,CLASS,METHOD,DATA
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* Programacion Orientada a Objeto
|
||||
* $CATEGORY$
|
||||
* Documento
|
||||
* $ONELINER$
|
||||
* Programacion Orientada a Objeto
|
||||
* $DESCRIPTION$
|
||||
* </b>Programaci¢n Orientada a Objeto (OOP)</b>
|
||||
*
|
||||
* <b>INTRODUCCION</b>
|
||||
*
|
||||
* Esta es una breve introduci¢n al mundo OOP, no pretende ser m s que
|
||||
* un ayuda memoria de algunos puntos.
|
||||
* El Objetivo de la OOP de Harbour es alcanzar la m xima compatibilidad
|
||||
* posible con otros programas que prove¡an de funcionalidad OOP a
|
||||
* Clipper donde este no la tenia.
|
||||
* Algunos de ellos son Class(y), FiveWin Objects, TopClass y Visual
|
||||
* Object.
|
||||
*
|
||||
*
|
||||
* <b>OBJETOS</b>
|
||||
*
|
||||
* Tradicionalmente la implementaci¢n de objetos, ha sido basado en
|
||||
* lo que se conoce como "estructuras", un tipo de datos habitual en
|
||||
* lenguaje "C" (struct) y (record) en Pascal y Delphi.
|
||||
* Tanto en Clipper como en Harbour los objetos se implementan sobre
|
||||
* arrays.
|
||||
* Un objeto puede contener a la vez variables y funciones.
|
||||
* Mientras ese objeto-array se conserve se puede pasar como par metro
|
||||
* modificarlo, ejecutar las funciones contenidas en ‚l, etc.
|
||||
* Uno vive rodeado de objetos. Podemos considerar Arbol como una clase
|
||||
* particular de objeto. Entonces podremos tener Pino, Roble, Acacia
|
||||
* todos ellos son instancias de Arbol. En otras palabras ellos son
|
||||
* objetos de la clase Arbol.
|
||||
*
|
||||
*
|
||||
* <b>CLASE</b>
|
||||
*
|
||||
* Es un t‚rmino que describe una especificaci¢n para un conjunto de
|
||||
* objetos con propiedades comunes.
|
||||
* Desde el punto de vista de la programaci¢n Ud. define que debe
|
||||
* tener una clase para que le sea £til a Ud., qu‚ atributos satisfacen
|
||||
* sus necesidades.
|
||||
* Esto es llamado <b>Abstracci¢n de datos</b> en la jerga de OOP, ¢
|
||||
* Programacion Orientada a Objetos porque Ud. solamente abstrae los
|
||||
* atributos que Ud. desea usar, de un mont¢n de posibilidades para un
|
||||
* objeto modelo.
|
||||
*
|
||||
*
|
||||
* <b>INSTANCIA</b>
|
||||
*
|
||||
* Una instancia de una clase es un t‚rmino t‚cnico para un objeto de
|
||||
* esa clase.
|
||||
*
|
||||
*
|
||||
* <b>CLASES DE OBJETOS</b>
|
||||
*
|
||||
* Una definicion de una clase lista todos los parametros que se
|
||||
* necesitan para definir un objeto de esa clase en particular.
|
||||
* La cantidad de datos necesarios para definir una clase depende
|
||||
* de que es lo que Ud. vaya a hacer con ese objeto, pero siempre
|
||||
* habr un m¡nimo que impida que una clase sea ambigua ¢ incompleta.
|
||||
*
|
||||
* La clase Arbol por ejemplo podr¡a contener dos parametros en la
|
||||
* definici¢n. El nombre del Arbol como cadena de caracteres, Si es
|
||||
* perenne (si conserva las hojas en invierno) como una variable logica
|
||||
* Los parametros que definen un objeto son denominados <b>variables</b>
|
||||
* <b>de instancia ¢ atributos</b> de una clase.
|
||||
* Las variables de instancia pueden ser tipos basicos de datos como
|
||||
* CHARACTER, NUMERIC ¢ LOGIC, aunque tambien puede ser otros objetos
|
||||
* como la Hoja y definida esta como de la Clase Hoja.
|
||||
*
|
||||
*
|
||||
* <b>OPERANDO CON OBJETOS</b>
|
||||
*
|
||||
* Una de las limitaciones basicas sobre que puede hacer con los
|
||||
* objetos dependen del tipo de datos sobre los cuales estan basados
|
||||
* as¡ por ejmplo Ud. no puede hacer operaciones matematicas con el
|
||||
* atributo <cNombre> de la clase Arbol, pero s¡ puede compararlo con
|
||||
* otro, etc.
|
||||
* Las unicas operaciones que se pueden hacer sobre una instancia de una
|
||||
* clase particular son aquellas definidas dentro de la clase.
|
||||
* Por lo tanto, la utilidad y flexibilidad de una clase depende de
|
||||
* cuanto esfuerzo e ingenio haya puesto al establecer su definici¢n.
|
||||
* Estas operaciones se llaman <b>METODOS</b> en la jerga OOP que no son
|
||||
* ni m s ni menos que nuestros conocidos procedimientos y funciones.
|
||||
*
|
||||
*
|
||||
* <b>ENCAPSULAMIENTO</b>
|
||||
*
|
||||
* Se refiere al hecho de ocultar items de datos y metodos dentro de
|
||||
* una clase al declararlos como <b>Private</b> en la definici¢n de la
|
||||
* clase. Esto protege las partes internas de la clase de ser cambiadas
|
||||
* ¢ usadas incorrectamente.
|
||||
* Esta habilidad de ocultar la <b>Implementaci¢n de la clase</b>
|
||||
* permitiendo un acceso limitado a los miembros de una clase, le da la
|
||||
* posibilidad de cambiar las partes internas de esa clase cuando sea
|
||||
* necesario. Mientras las caracteristicas de los metodos que pueden ser
|
||||
* llamados desde afuera permanezcan sin cambios, la codificaci¢n
|
||||
* interna puede ser cambiada como se desee.
|
||||
*
|
||||
*
|
||||
* <b>HERENCIA</b>
|
||||
*
|
||||
* Muchos de los objetos que se definen en una clase pueden ser
|
||||
* subdivididos en conjuntos m s especializados que tambi‚n pueden ser
|
||||
* representados por clases.
|
||||
* En nuestro ejemplo de la clase Arbol, Conifera podr¡a ser una
|
||||
* subclase de la clase Arbol, esta podr¡a tener todas las variables de
|
||||
* instancia y m‚todos de la clase Arbol, m s algunas variables de
|
||||
* instancia adicionales y metodos que la definan como Conifera.
|
||||
* Podemos referirnos a la clase conifera como una <b>Subclase</b> de
|
||||
* la clase Arbol y a la clase Arbol como una <b>Superclase</b> ¢
|
||||
* <b>Clase Padre</b> de la clase Conifera.
|
||||
*
|
||||
*
|
||||
* <b>POLIMORFISMO</b>
|
||||
*
|
||||
* Es la habilidad de asumir diferentes formas ¢ contornos.
|
||||
* Practicamente significa la habilidad de una £nica variable de llamar
|
||||
* a diferentes m‚todos, dependiendo de lo que contiene la variable.
|
||||
* El polimorfismo involucra dos cosas:
|
||||
* 1) Usar una variable de un tipo especifico, gralmente una variable
|
||||
* de una clase base, para almacenar objetos de alguna de las clases
|
||||
* derivadas.
|
||||
* 2) El uso automatico del objeto almacenado en la variable de la clase
|
||||
* base para seleccionar un m‚todo de entre todos los m‚todos de las
|
||||
* clases derivadas.
|
||||
* El tipo del objeto almacenado no es conocido hasta que el
|
||||
* programa se ejecuta, por tanto la elecci¢n de cual m‚todo de clase
|
||||
* a ejecutar es hecha dinamicamente.
|
||||
*
|
||||
*
|
||||
* <b>ATRIBUTOS</b>
|
||||
*
|
||||
* Los atributos de un objeto, a menudo son llamados <b>Miembros de</b>
|
||||
* <b>Clase</b> y se declaran utilizando la palabra clave DATA.
|
||||
* Por ejemplo:
|
||||
* DATA cFile INIT "*.txt"
|
||||
* En Harbour se utiliza la clausula INIT para inicializar las variables
|
||||
*
|
||||
*
|
||||
* <b>CONSTRUCTOR</b>
|
||||
*
|
||||
* Declarar una variable para soportar un objeto no crea al objeto en
|
||||
* s¡ mismo, la variable solo mantiene una referencia al objeto.
|
||||
* para crear un objeto se debe usar la palabra clave <b>New</b>.
|
||||
* Este es seguido por una lista de argumentos opcionales entre
|
||||
* parentesis y luego por el objeto de la clase a la que pertenecen.
|
||||
*
|
||||
* Un constructor es la funci¢n que crea al objeto e inicializa las
|
||||
* variables. Como las funciones en el lenguaje OOP se llaman
|
||||
* m‚todos el constuctor siempre se declara como METHOD New(..)
|
||||
*
|
||||
* METHOD New( cFile ) CLASS TNortonGuide
|
||||
*
|
||||
* IF VALTYPE( cFile ) <> NIL .AND. VALTYPE( cFile ) == "C"
|
||||
* Self:cFile := LOWER( cFile )
|
||||
* Self:nHandle := FCREATE( Self:cFile )
|
||||
* ENDIF
|
||||
*
|
||||
* RETURN Self
|
||||
*
|
||||
* Cuando se crea un objeto, el objeto contendr todas las variables que
|
||||
* fueron incluidas en la definici¢n de la clase. Sin embargo no todas
|
||||
* las variables son iguales. Hay dos tipos:
|
||||
* Un tipo de variable de clase que es asociada con cada objeto
|
||||
* univocamente, cada instancia de la clase tendr su propia copia de
|
||||
* estas variables con su propio valor asignado. Estas diferencian un
|
||||
* objeto de otro, d ndole a un objeto su individualidad por ello se
|
||||
* llaman <b>Variables de Instancia</b>.
|
||||
*
|
||||
* El otro tipo de variable de clase es asociada con la clase y es
|
||||
* compartida con todos los objetos de la clase. Hay solo una copia
|
||||
* de este tipo de variables, no importa cuantos objetos sean creados.
|
||||
* Este £ltimo tipo se llama <b>Variables de Clase</b>, ellas existen
|
||||
* a£n si ning£n objeto de esta clase ha sido creado. Ellas pertenecen
|
||||
* a la clase, pero son incluidas como parte de cada objeto de la clase.
|
||||
* Si el valor de una variable de clase es cambiado, el nuevo valor est
|
||||
* disponible en todos los objetos de la clase.
|
||||
* Una variable de clase debe ser definida usando la palabra clave
|
||||
* CLASSDATA (es equivalente a STATIC en el mundo OOP) precediendo a su
|
||||
* nombre.
|
||||
*
|
||||
* Al igual que con las variables existen dos tipos de M‚todos:
|
||||
* <b>Metodos de Clase</b> Ud. puede ejecutar Metodos de Clase, a£n
|
||||
* si ning£n objeto de esta clase ha sido creado. Al igual que con las
|
||||
* variables de clase son precedidos del identificador STATIC en la
|
||||
* mayoria de los lenguajes OOP.
|
||||
*
|
||||
* Mientras que los <b>Metodos de Instancia</b> solamente pueden ser
|
||||
* ejecutados en relaci¢n a un objeto particular, as¡ que si no existe
|
||||
* el objeto, NO hay m‚todo de instancia a ser ejecutado.
|
||||
*
|
||||
* Debe tenerse en cuenta que no se puede hacer referencia a ninguna
|
||||
* variable de instancia dentro de una clase dentro un m‚todo Static
|
||||
* Estto se debe a que su m‚todo Static puede ser ejecutado cuando
|
||||
* todav¡a ning£n objeto de la clase a sido creado y por lo tanto NO
|
||||
* existen variables de instancia.
|
||||
*
|
||||
*
|
||||
* <b>SELF</b>
|
||||
*
|
||||
* Habitualmente los m‚todos de una clase, devuelven una referencia al
|
||||
* objeto sobre el cual act£an y esa referencia se denomina <Self>
|
||||
*
|
||||
*
|
||||
* <b>DEFINIENDO UNA CLASE</b>
|
||||
*
|
||||
* Una clase se define con la palabra clave CLASS seguida de un nombre
|
||||
* que identifica a la clase. Para indicar que termina una clase se
|
||||
* utiliza la palabra clave ENDCLASS
|
||||
* Por tradici¢n, las clases en Harbour comienzan con la letra "T"
|
||||
* (algo com£n en el mundo OOP) para evitar colisiones con clases
|
||||
* creadas por el usuario.
|
||||
*
|
||||
* la por ej.
|
||||
* METHOD <NombreM‚todo>( [<params,...>] ) CLASS <NombreClase>
|
||||
*
|
||||
* Los M‚todos pueden referenciar al objeto actual usando la palabra
|
||||
* clave "Self:" ¢ su versi¢n m s corta "::"
|
||||
* Vea METHOD para una explicaci¢n de las distintas variantes.
|
||||
*
|
||||
*
|
||||
* <b>VIDA DE UN OBJETO</b>
|
||||
*
|
||||
* La vida de un objeto esta determinada por la variable que hace
|
||||
* referencia a ‚l. Si distintas variables hacen referencia a un
|
||||
* mismo objeto, el objeto sobrevive mientras todav¡a haya una variable
|
||||
* que haga referencia a ese objeto.
|
||||
* Si creamos un objeto
|
||||
* oNgi := TNortonGuide():new( "Myfile" )
|
||||
* y luego hacemos
|
||||
* oNgi := NIL
|
||||
* la variable oNgi no apunta m s al objeto, se pierde la referencia y
|
||||
* si asumimos que no hay ninguna otra variable referenciandolo entonces
|
||||
* el objeto TNortonGuide al cual ella apunta queda disponible para el
|
||||
* el recolector de memoria.
|
||||
* Pero el objeto no desaparece instant neamente, sino que pasa alg£n
|
||||
* tiempo hasta que el objeto se vuelve inaccesible para su programa
|
||||
* (cuando el subsistema de memoria dispone de tiempo de procesamiento),
|
||||
* se ocupa de ‚l.
|
||||
*
|
||||
*
|
||||
* <b>SOBRECARGA</b>
|
||||
* Vea testop.prg por un ejemplo
|
||||
*
|
||||
*
|
||||
* <b>CLONANDO OBJETOS</b>
|
||||
* Algunos lenguajes OOP proveen una m‚todo preconstruido para duplicar
|
||||
* objetos.
|
||||
*
|
||||
* <b>Comentario Final</b>
|
||||
*
|
||||
* Los programas Orientados a Objetos son escritos usando objetos los
|
||||
* cuales modelan el problema que esta siendo resuelto.
|
||||
* Debido a que un objeto incluye los m‚todos con los cuales puede
|
||||
* operar, as¡ como los datos que lo definen, este tipo de programaci¢n
|
||||
* es menos propensa a errores (seg£n los especialistas) y deber¡a ser
|
||||
* m s robusta que la forma de programaci¢n procedural.
|
||||
*
|
||||
* Estas caracter¡sticas son las que han facilitado la proliferaci¢n de
|
||||
* lenguajes como Java y Python. Pero una de las desventajas m s notables
|
||||
* es la dificultad muchas veces para intercambiar la informaci¢n
|
||||
* almacenada en esos objetos con otros programas y la conservaci¢n de
|
||||
* esos objetos en un medio magnetico (<b>Serializaci¢n</b>) en un
|
||||
* formato compatible, algo que seg£n los expertos promete XML y que ya
|
||||
* est disponible con Harbour.
|
||||
*
|
||||
* $EXAMPLES$
|
||||
* CLASS Circle
|
||||
*
|
||||
* CLASS TNortonGuide
|
||||
*
|
||||
* DATA cFile // Nombre archivo
|
||||
* DATA nHandle // file handle
|
||||
* METHOD New( cFile ) // constructor, funcion que crea archivo
|
||||
* METHOD CLOSE() // funcion que cierra archivo
|
||||
* METHOD WriteParBold( cPar )
|
||||
* METHOD WriteTitle( cTopic, cTitle )
|
||||
*
|
||||
* ENDCLASS
|
||||
*
|
||||
* METHOD new( cFile ) CLASS TNortonGuide
|
||||
*
|
||||
* IF VALTYPE( cFile ) <> NIL .AND. VALTYPE( cFile ) == "C"
|
||||
* Self:cFile := LOWER( cFile )
|
||||
* Self:nHandle := FCREATE( Self:cFile )
|
||||
* ENDIF
|
||||
*
|
||||
* RETURN Self
|
||||
*
|
||||
*
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* La sintaxis Orientada a Objetos en Harbour es compatible con
|
||||
* CA-Cl*pper.
|
||||
* Pero Clipper solamente permite la creaci¢n de objetos a partir
|
||||
* de unas pocas clases estandares, y NO le permite al programador
|
||||
* crear nuevas clases.
|
||||
* En Harbour, Ud. puede crear sus propias clases completamente con
|
||||
* M‚todos, Variables de Instancia, Variables de Clase y Herencia.
|
||||
* Aplicaciones enteras pueden ser designadas y codificadas en el
|
||||
* estilo Orientado a Objetos.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* $SEEALSO$
|
||||
* __objHasData(),CLASS,METHOD
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
|
||||
@@ -1,342 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2000 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de: Opciones del Compilador
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* Opciones Compilador
|
||||
* $CATEGORY$
|
||||
* Documento
|
||||
* $ONELINER$
|
||||
* Opciones del Compilador
|
||||
* $DESCRIPTION$
|
||||
*
|
||||
* <b>Invocando al compilador Harbour: </b>
|
||||
* ===============================
|
||||
*
|
||||
* harbour <archivo[.prg]> [opciones]
|
||||
* o
|
||||
* harbour [opciones] <archivo[.prg]>
|
||||
* o
|
||||
* harbour [opciones] <archivo[.prg]> [opciones]
|
||||
*
|
||||
*
|
||||
* Las opciones de la l¡nea de comandos debe ser separada, al menos por
|
||||
* un espacio en blanco.
|
||||
* Las opciones pueden comenzar con el car cter '/' ¢ '-',
|
||||
*
|
||||
*
|
||||
* <b>Opciones de la l¡nea de comandos de: </b>
|
||||
* ====================================
|
||||
*
|
||||
* /a Declaraci¢n Autom tica de memvar
|
||||
* ----------------
|
||||
* Esto causa que todas las variables declaradas por las sentencias
|
||||
* PARAMETER, PRIVATE ¢ PUBLIC sean autom ticamente declaradas como
|
||||
* variables MEMVAR.
|
||||
*
|
||||
* /b Informaci¢n de depuraci¢n (Bug)
|
||||
* ----------------
|
||||
* El compilador genera toda la informaci¢n requerida para
|
||||
* depuraci¢n
|
||||
*
|
||||
* /d<id>[=<val>] #define <id>
|
||||
* ----------------
|
||||
*
|
||||
* /es[<nivel>] Establece la Severidad de la salida (Exit Severity)
|
||||
* ----------------
|
||||
*
|
||||
* /es or /es0 - Todas las advertencias son ignoradas y el c¢digo
|
||||
* de salida retornado por el compilador (accedido por
|
||||
* el comando de DOS ERRORLEVEL) es igual a cero si
|
||||
* no hay errores en el archivo fuente compilado.
|
||||
* /es1 - Cualquier advertencia genera un c¢digo de salida
|
||||
* distinto de cero, pero la salida es aún creada.
|
||||
* /es2 - Cualquier advertencia es tratada como error y
|
||||
* ningún archivo de salida es creado. El c¢digo de
|
||||
* salida es establecido a un valor distinto de cero.
|
||||
*
|
||||
* /g<tipo> Generaci¢n del tipo de archivo de salida <type>
|
||||
* ----------------
|
||||
*
|
||||
* /gc tipo de salida: fuente de lenguaje C (.c) (defecto)
|
||||
* /gf tipo de salida: Windows/DOS OBJ32 (.obj)
|
||||
* /gh tipo de salida: Objeto Portable de Harbour (.hrb)
|
||||
* /gj tipo de salida: fuente de Java (.java)
|
||||
* /gp tipo de salida: fuente de Pascal (.pas)
|
||||
* /gr tipo de salida: recursos de Windows (.rc)
|
||||
*
|
||||
* /i<ruta> Agrega la ruta de búsqueda de archivos #include
|
||||
* ----------------
|
||||
*
|
||||
* /l Suprime la informaci¢n del número de L¡nea
|
||||
* ----------------
|
||||
* El compilador no genera el número de l¡nea del c¢digo fuente
|
||||
* en el archivo de salida. La funci¢n PROCLINE() retornar cero
|
||||
* para los m¢dulos compilados usando esta opci¢n.
|
||||
*
|
||||
* /m Compilar el M¢dulo actual solamente
|
||||
* ----------------
|
||||
*
|
||||
* /n Sin procedimiento de inicio impl¡cito
|
||||
* ----------------
|
||||
* El compilador no crea un procedimiento con el mismo nombre
|
||||
* que el del archivo compilado. Esto significa que algunas
|
||||
* declaraciones puestas antes de la primera sentencia de
|
||||
* PROCEDURE ¢ FUNCTION tienen el alcance del archivo y pueden ser
|
||||
* accedidas/usadas en todas las funciones/procedimientos definidos
|
||||
* en el archivo fuente compilado. Todas las sentencias ejecutables
|
||||
* puestas al principio del archivo y antes de la primera sentencia
|
||||
* de PROCEDURE ¢ FUNCTION son ignoradas.
|
||||
*
|
||||
* /o<ruta> Unidad de disco y/o ruta para el archivo de salida
|
||||
* ----------------
|
||||
*
|
||||
* /p Genera un archivo de salida Pre-procesada (.ppo)
|
||||
* ----------------
|
||||
* El compilador solamente crea el archivo que contiene el
|
||||
* resultado del archivo fuente pre-procesado.
|
||||
*
|
||||
* /q Quieto
|
||||
* ----------------
|
||||
* El compilador no imprime ningún mensaje durante la compilaci¢n
|
||||
* (excepto la informaci¢n del copyright).
|
||||
*
|
||||
* /q0 que permanezca realmente Quieto y no muestre ni
|
||||
* siquiera la informaci¢n del copyright.
|
||||
*
|
||||
* /r[<libreria>] Solicita al linker Revisar por la <libreria> (¢
|
||||
* ---------------- ninguna)
|
||||
* Actualmente no soportado en Harbour.
|
||||
*
|
||||
* /s Solo chequeo de Sintaxis.
|
||||
* ----------------
|
||||
* El compilador chequea la sintaxis solamente. Ningún archivo de
|
||||
* salida es generado.
|
||||
*
|
||||
* /t<ruta> Ruta para la creaci¢n de un archivo Temporario
|
||||
* ----------------
|
||||
* Actualmente no usado en harbour (El compilador de harbour no
|
||||
* crea ningún archivo temporal)
|
||||
*
|
||||
* /u[<archivo>] Usar la definici¢n de comando establecido en el
|
||||
* <archivo> (¢ ninguno)
|
||||
* ----------------
|
||||
* Aún no soportado.
|
||||
*
|
||||
* /v Las Variables son asumidas como M->
|
||||
* ----------------
|
||||
* Todas las variables sin declarar ¢ unaliased son asumidas como
|
||||
* variables MEMVAR (variables privadas ¢ públicas). si este switch
|
||||
* no es usado entones el alcance de estas variables es chequeado
|
||||
* en tiempo de ejecuci¢n.
|
||||
*
|
||||
* /w[<nivel>] Establece el número de nivel de las advertencias
|
||||
* ---------------- (Warnings) (0..4, por defecto es 1)
|
||||
*
|
||||
* /w0 - sin advertencias
|
||||
* /w or /w1 - advertencias compatibles con Clipper
|
||||
* /w2 - algunas advertencias útiles ausentes en Clipper
|
||||
* /w3 - advertencias generadas para extensiones al lenguaje
|
||||
* hechas en Harbour. Tambi‚n habilita el chequeo de
|
||||
* sintaxis fuertemente tipeada pero s¢lo advierte
|
||||
* contra los tipos declarados, o los tipos que pueden
|
||||
* ser calculados en tiempo de compilaci¢n.
|
||||
* /w4 - habilita advertencias acerca de operaciones que son
|
||||
* sospechosas, lo cual significa que si se mezclan
|
||||
* tipos sin declarar ¢ tipos que no pueden ser
|
||||
* calculados en tiempo de compilaci¢n, junto con los
|
||||
* tipos ya declarados, una advertencia ser generada.
|
||||
*
|
||||
* /x[<prefijo>] Establece el s¡mbolo del prefijo agregado al nombre
|
||||
* de funci¢n (para archivo.c solamente)
|
||||
* ----------------
|
||||
* Establece el s¡mbolo del prefijo agregado al nombre de funci¢n
|
||||
* de inicio (en la salida de lenguaje C, actualmente).
|
||||
* Esta funci¢n es generada autom ticamente para cada m¢dulo de PRG
|
||||
* compilado.
|
||||
* Este prefijo adicional puede ser usado para suprimir problemas
|
||||
* con s¡mbolos duplicados durante el enlazado de una aplicaci¢n
|
||||
* (linking) con alguna librer¡a de terceros.
|
||||
*
|
||||
* /y Seguimiento de la actividad de Lex & Yacc
|
||||
* ----------------
|
||||
* El compilador Harbour usa las utilidades FLEX y YACC para
|
||||
* analizar el c¢digo fuente y generar el archivo de salida
|
||||
* requerido.
|
||||
* Esta opci¢n sigue la actividad de esas utilidades.
|
||||
*
|
||||
* /z Suprime el cortocircuito l¢gico (.AND. y .OR.)
|
||||
* ----------------
|
||||
*
|
||||
* /10 restringe la longitud de s¡mbolos a 10 caracteres.
|
||||
* ----------------
|
||||
* Todos los nombres de variables y de funciones son truncados a
|
||||
* un m ximo de 10 caracteres.
|
||||
*
|
||||
*
|
||||
* <b>Compilaci¢n en modo lote (batch). </b>
|
||||
* ================================
|
||||
*
|
||||
* @<archivo> Compila la lista de m¢dulos en el <archivo>
|
||||
* -----------------
|
||||
* No soportado aún.
|
||||
*
|
||||
*
|
||||
*
|
||||
* Conocidas incompatibilidades entre compiladores harbour y clipper
|
||||
* =================================================================
|
||||
*
|
||||
* NOTA:
|
||||
* Si desea librer¡as de compilaci¢n y ejecuci¢n 100 % compatibles,
|
||||
* entonces Ud. debe definir: HARBOUR_STRICT_CLIPPER_COMPATIBILITY.
|
||||
* Esta opci¢n debe ser definida en el archvivo ../include/hbsetup.h
|
||||
* (en efecto esta opci¢n es puesta en un comentario por defecto - Ud.
|
||||
* necesita remover los caracteres /* */ solamente. Este cambio debe
|
||||
* ser realizado antes de invocar la utilidad make.
|
||||
*
|
||||
*
|
||||
* Manejo de variables sin declarar
|
||||
* --------------------------------
|
||||
* Cuando un valor es asignado a una variable no declarada y la opci¢n
|
||||
* -v de la l¡nea de comandos no es usada, entonces el compilador
|
||||
* Clipper asume que la variable es una variable PRIVATE ¢ PUBLIC y
|
||||
* genera un opcode POPM (pop memvar).
|
||||
*
|
||||
* Cuando el valor de una variable no declarada es accedido y la opci¢n
|
||||
* -v de la l¡nea de comandos no es usada, el compilador Harbour genera
|
||||
* un opcode PUSHV (push variable) para determinar el tipo de variable
|
||||
* en tiempo de ejecuci¢n
|
||||
|
||||
* Si un campo con el nombre requerido existe en el area de trabajo
|
||||
* actual, entonces este valor es usado. Si no existe el campo, entonces
|
||||
* una variable PRIVATE ¢ PUBLIC es usada (si existe).
|
||||
*
|
||||
* El compilador Harbour genera un opcode para determinar el tipo de
|
||||
* variable en tiempo de ejecuci¢n (POPVARIABLE or PUSHVARIABLE) en
|
||||
* ambos casos (asignaci¢n y acceso).
|
||||
*
|
||||
* La diferencia puede ser chequeada por el siguiente c¢digo:
|
||||
* <fixed>
|
||||
* PROCEDURE MAIN()
|
||||
* PRIVATE myname
|
||||
*
|
||||
* DBCREATE( "TEST", { { "MYNAME", "C", 10, 0} } )
|
||||
* USE test NEW
|
||||
* SELECT test
|
||||
* APPEND BLANK
|
||||
*
|
||||
* FIELD->myname := "FIELD"
|
||||
* MEMVAR->myname := "MEMVAR"
|
||||
*
|
||||
* myname := myname + " assigned"
|
||||
*
|
||||
* // In Clipper: "FIELD", In Harbour: "FIELD assigned"
|
||||
* ? FIELD->myname
|
||||
*
|
||||
* // In Clipper: "MEMVAR assigned", In Harbour: "MEMVAR"
|
||||
* ? MEMVAR->myname
|
||||
*
|
||||
* USE
|
||||
*
|
||||
* RETURN
|
||||
* </fixed>
|
||||
*
|
||||
*
|
||||
* Pasando por referencia una variable no declarada
|
||||
* -------------------------------------------------
|
||||
* El compilador Harbour usa un opcode especial PUSHP para pasar una
|
||||
* referencia a una variable no declarada ( el operador '@' ). El tipo
|
||||
* de la variable pasada es chequeada en tiempo de ejecuci¢n (field or
|
||||
* memvar). Sin embargo las variables de campo no pueden ser pasadas
|
||||
* por referencia. Esto significa que Clipper chequea s¢lo la variable
|
||||
* memvar y no mira por una de campo.
|
||||
* Esta es la raz¢n por la cual el compilador Harbour usa el opcode
|
||||
* habitual PUSHMEMVARREF en estos casos. N¢tese que el comportamiento
|
||||
* en tiempo de ejecuci¢n es el mismo en Clipper y en Harbour - s¢lo
|
||||
* los opcodes generados son diferentes.
|
||||
*
|
||||
*
|
||||
* Manejo de mensajes a objetos
|
||||
* ----------------------------
|
||||
*
|
||||
* El seteo de HARBOUR_STRICT_CLIPPER_COMPATIBILITY determina
|
||||
* la forma en que el env¡o encadenado de mensajes es manejado
|
||||
*
|
||||
* Por ejemplo, el siguiente c¢digo:
|
||||
*
|
||||
* a:b( COUNT() ):c += 1
|
||||
*
|
||||
* ser manejado como:
|
||||
*
|
||||
* a:b( COUNT() ):c := a:b( COUNT() ):c + 1
|
||||
* en modo de compatibilidad estricta y
|
||||
*
|
||||
* temp := a:b( COUNT() ), temp:c += 1
|
||||
* en modo no-estricto.
|
||||
*
|
||||
* En la pr ctica, Clipper llamar a la funci¢n COUNT() dos veces:
|
||||
* La primera vez antes de la adici¢n y la segunda despu‚s de la
|
||||
* adici¢n.
|
||||
* En Harbour, COUNT() ser llamada s¢lo una vez, antes de la adici¢n.
|
||||
*
|
||||
* El m‚todo Harbour (no-estricto) es:
|
||||
* 1) M s r pido
|
||||
* 2) Garantiza que la misma variable de instancia del mismo
|
||||
* objeto ser cambiada.
|
||||
*
|
||||
* (Ver tambi‚n: ../source/compiler/expropt.c)
|
||||
*
|
||||
*
|
||||
* Inicializaci¢n de variables est ticas
|
||||
* -------------------------------------
|
||||
*
|
||||
* Hay una diferencia en la inicializaci¢n de las variables est ticas
|
||||
* que son inicializadas con un bloque de c¢digo que refiere a una
|
||||
* variable local. Por ejemplo:
|
||||
* <fixed>
|
||||
* PROCEDURE TEST()
|
||||
*
|
||||
* LOCAL MyLocalVar
|
||||
* STATIC MyStaticVar := {|| MyLocalVar }
|
||||
*
|
||||
* MyLocalVar :=0
|
||||
* ? EVAL( MyStaticVar )
|
||||
*
|
||||
* RETURN
|
||||
* </fixed>
|
||||
* El c¢digo de arriba compila bien en Clipper, pero ‚ste genera un
|
||||
* error de ejecuci¢n:
|
||||
* Error/BASE 1132 Bound error: array access
|
||||
* Called from (b)STATICS$(0)
|
||||
*
|
||||
* En Harbour este c¢digo genera un error en tiempo de compilaci¢n:
|
||||
* Error E0009 Illegal variable (b) initializer: 'MyLocalVar'
|
||||
*
|
||||
* Ambos Clipper y Harbour estan manejando todas las variables locales
|
||||
* usadas en una forma especial: ellas son separadas de la pila (stack)
|
||||
* local de la funci¢n / procedimiento donde ellas son declaradas.
|
||||
* Esto permite acceder a estas variables despues de la salida de una
|
||||
* funci¢n / procedimiento. Sin embargo todas las variables est ticas
|
||||
* son inicializadas en un procedimiento separado ('STATICS$' en
|
||||
* Clipper y '(_INITSTATICS)' en Harbour) antes del procedimiento
|
||||
* principal y antes de todos los procedimientos INIT. Las variables
|
||||
* locales no existen en la pila de evaluaci¢n (eval stack) donde las
|
||||
* variables est ticas son inicializadas, as¡ ellas no pueden ser
|
||||
* separadas.
|
||||
*
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,564 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2000 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de:
|
||||
* CDOW(),CMONTH(),DATE(),CTOD(),DAY(),DAYS(), DOW(),DTOS(),
|
||||
* DTOC(),ELAPTIME(),MONTH(),SECONDS(),SECS(),TIME(),YEAR()
|
||||
*
|
||||
* Copyright 2000 Luiz Rafael Culik <culik@sl.conex.net>
|
||||
* Documentation en Ingl‚s de:
|
||||
* CDOW(),CMONTH(),DATE(),CTOD(),DAY(),DAYS(), DOW(),DTOS(),
|
||||
* DTOC(),ELAPTIME(),MONTH(),SECONDS(),SECS(),TIME(),YEAR()
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* CDOW()
|
||||
* $CATEGORY$
|
||||
* Fecha
|
||||
* $ONELINER$
|
||||
* Convierte una fecha al Nombre del d¡a de la semana
|
||||
* $SYNTAX$
|
||||
* CDOW(<dFecha>) --> cDia
|
||||
* $ARGUMENTS$
|
||||
* <dFecha> Cualquier expresi¢n de fecha.
|
||||
* $RETURNS$
|
||||
* <cDia> El d¡a actual de la semana.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n devuelve una cadena de caracteres con el d¡a de la
|
||||
* semana de una expresi¢n de fecha <dFecha> pasada (DOW=day of week en
|
||||
* ingl‚s). Si una fecha NULL es pasada a la funci¢n, el valor de la
|
||||
* funci¢n ser un byte NULL.
|
||||
* $EXAMPLES$
|
||||
* ? CDOW(DATE())
|
||||
*
|
||||
* IF CDOW( DATE() + 10) == "SUNDAY"
|
||||
* ? "Este es un d¡a para el descanso."
|
||||
* ENDIF
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* DAY(),DOW(),DATE(),CMONTH()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* CMONTH()
|
||||
* $CATEGORY$
|
||||
* Fecha
|
||||
* $ONELINER$
|
||||
* Retorna una cadena de caracteres con el nombre del mes
|
||||
* $SYNTAX$
|
||||
* CMONTH(<dFecha>) --> cMes
|
||||
* $ARGUMENTS$
|
||||
* <dFecha> Cualquier expresi¢n de fecha.
|
||||
* $RETURNS$
|
||||
* <cMes> el nombre actual del mes
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n retorna el nombre del mes (Enero, Febrero, etc.) de una
|
||||
* expresi¢n de fecha <dFecha> pasada a ella.
|
||||
* Si una fecha NULL es pasada a la funci¢n, el valor de la funci¢n ser
|
||||
* un byte NULL.
|
||||
* Nota: El valor devuelto depende del m¢dulo de lenguaje en uso.
|
||||
* $EXAMPLES$
|
||||
* ? CMONTH( DATE()) // resultado: Noviembre
|
||||
*
|
||||
* IF CMONTH( DATE() + 35) =="Diciembre"
|
||||
* ? "Ha hecho compras para las fiestas ?"
|
||||
* ENDIF
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* CDOW(),DATE(),MONTH(),YEAR(),DOW(),DTOC()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* DATE()
|
||||
* $CATEGORY$
|
||||
* Fecha
|
||||
* $ONELINER$
|
||||
* Retorna la fecha actual del sistema operativo
|
||||
* $SYNTAX$
|
||||
* DATE() --> dFechaActual
|
||||
* $ARGUMENTS$
|
||||
* Ninguno
|
||||
* $RETURNS$
|
||||
* <dFechaActual>, la fecha actual del sistema.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n devuelve la fecha actual del sistema.
|
||||
* $EXAMPLES$
|
||||
* ? DATE()
|
||||
* $TESTS$
|
||||
* ? "Hoy es ",DAY( DATE())," de ",CMONTH( DATE())," de ",YEAR( DATE())
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* CTOD(),DTOS(),DTOC(),DAY(),MONTH(),CMONTH()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* CTOD()
|
||||
* $CATEGORY$
|
||||
* Fecha
|
||||
* $ONELINER$
|
||||
* Convierte una cadena de caracteres a una expresi¢n de fecha
|
||||
* $SYNTAX$
|
||||
* CTOD(<cCadenaFecha>) --> dFecha
|
||||
* $ARGUMENTS$
|
||||
* <cCadenaFecha> Un fecha en el formato 'mm/dd/yy'
|
||||
* $RETURNS$
|
||||
* <dFecha> Una expresi¢n de fecha.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n convierte una fecha que ha sido aportada como una
|
||||
* expresi¢n de caracteres a una expresi¢n de fecha. La expresi¢n de
|
||||
* caracteres sera en la forma MM/DD/YY" (basada en el valor por defecto
|
||||
* en SET DATE) o en el formato apropiado especificado por el comado
|
||||
* SET DATE TO. Si una impropia cadena de caracteres es pasada a la
|
||||
* funci¢n, un valor de fecha vac¡a ser retornado.
|
||||
* $EXAMPLES$
|
||||
* ? CTOD('12/21/00')
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* SET DATE,DATE(),DTOS()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* DAY()
|
||||
* $CATEGORY$
|
||||
* Fecha
|
||||
* $ONELINER$
|
||||
* Retorna el n£mero de d¡a del mes en el rango de 0 a 31
|
||||
* $SYNTAX$
|
||||
* DAY(<cFecha>) --> nMes
|
||||
* $ARGUMENTS$
|
||||
* <cFecha> Cualquier expresi¢n v lida de fecha.
|
||||
* $RETURNS$
|
||||
* Retorna <nMes>, el valor num‚rico del d¡a del mes.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n retorna el valor num‚rico del d¡a del mes de una fecha.
|
||||
* $EXAMPLES$
|
||||
* ? DAY( CTOD("06/06/1944") ) // Resultado: 6
|
||||
* ? DAY( DATE() + 6325)
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* CTOD(),DTOS(),DTOC(),DATE(),MONTH(),CMONTH()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* DAYS()
|
||||
* $CATEGORY$
|
||||
* Fecha
|
||||
* $ONELINER$
|
||||
* Convierte los segundos transcurridos a d¡as.
|
||||
* $SYNTAX$
|
||||
* DAYS(<nSegundos> ) --> nDia
|
||||
* $ARGUMENTS$
|
||||
* <nSegundos> el n£mero de segundos.
|
||||
* $RETURNS$
|
||||
* Retorna el n£mero de d¡as transcurridos
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n convierte <nSegundos> al n£mero equivalente de d¡as;
|
||||
* 86399 segundos representan un d¡a, cero segundos es medianoche.
|
||||
* $EXAMPLES$
|
||||
* ? DAYS( 2434234)
|
||||
* ? "Han transcurrido ", DAYS(63251)
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* Nota: No esta documentada en las NG, ni en el manual en espa¤ol de
|
||||
* CA-Cl*pper
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* SECONDS(),SECS(),ELAPTIME()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* DOW()
|
||||
* $CATEGORY$
|
||||
* Fecha
|
||||
* $ONELINER$
|
||||
* Convierte una fecha al n£mero del dia de la semana (1-7)
|
||||
* $SYNTAX$
|
||||
* DOW(<dFecha>) --> nDia
|
||||
* $ARGUMENTS$
|
||||
* <dFecha> Cualquier expresi¢n v lida de fecha.
|
||||
* $RETURNS$
|
||||
* DOW() retorna el dia de la semana en la forma num‚rica <nDay>
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n convierte un valor de fecha en un n£mero representando
|
||||
* el dia de la semana. En el rango de 1 al 7, siendo 1 el dia Domingo
|
||||
* y 7 el dia S bado.
|
||||
* $EXAMPLES$
|
||||
* ? DOW( DATE())
|
||||
* ? DOW( DATE() - 6584)
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* DTOC(),CDOW(),DATE(),DTOS(),DAY()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* DTOC()
|
||||
* $CATEGORY$
|
||||
* Fecha
|
||||
* $ONELINER$
|
||||
* Convierte un valor de fecha a una cadena de caracteres
|
||||
* $SYNTAX$
|
||||
* DTOC(<dFecha>) --> cFecha
|
||||
* $ARGUMENTS$
|
||||
* <dFechaString> Cualquier expresi¢n v lida de fecha.
|
||||
* $RETURNS$
|
||||
* Retorna la cadena de caracteres <cFecha> representando la fecha
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n convierte una expresi¢n de fecha (sea un campo ¢ una
|
||||
* variable) expresada como <dFecha> a una expresi¢n de caracteres en el
|
||||
* formato por defecto "MM/DD/YY". El formato de fecha devuelto por esta
|
||||
* funci¢n es controlado por el formato especificado por el comando
|
||||
* SET DATE y es variable a diferencia del devuelto por la funci¢n
|
||||
* DTOS().
|
||||
* $EXAMPLES$
|
||||
* ? DTOC( DATE())
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* SET DATE,DATE(),DTOS()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* DTOS()
|
||||
* $CATEGORY$
|
||||
* Fecha
|
||||
* $ONELINER$
|
||||
* Convierte un valor de fecha a una cadena en el formato AAAAMMDD
|
||||
* $SYNTAX$
|
||||
* DTOS(<dFecha>) --> cFecha
|
||||
* $ARGUMENTS$
|
||||
* <dFecha> Cualquier expresi¢n v lida de fecha.
|
||||
* $RETURNS$
|
||||
* DTOS() retorna <cFecha>
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n convierte un valor de fecha a una cadena de 8 caracteres
|
||||
* en el formato AAAAMMDD (no contiene separadores). Si el valor de
|
||||
* <dFecha> es una fecha vac¡a, esta funci¢n retorna una cadena de
|
||||
* caracteres de 8 espacios en blanco.
|
||||
* $EXAMPLES$
|
||||
* ? DTOS( DATE())
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* DTOC(),DATE(),DTOS()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* ELAPTIME()
|
||||
* $CATEGORY$
|
||||
* Hora
|
||||
* $ONELINER$
|
||||
* Calcula el tiempo transcurrido.
|
||||
* $SYNTAX$
|
||||
* ELAPTIME(<cHoraInicial>,<cHoraFinal>) --> cTranscurrido
|
||||
* $ARGUMENTS$
|
||||
* <cHoraInicial> Hora de inicio en el formato de cadena HH:MM:SS
|
||||
* <cHoraFinal> Hora de finalizaci¢n en el formato de cadena HH:MM:SS
|
||||
* $RETURNS$
|
||||
* <cTranscurrido> Diferencia entre tiempos
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n devuelve una cadena que muestra la diferencia entre la
|
||||
* hora inicial representada por <cHoraInicial> y la hora final
|
||||
* representada por <cHoraFinal>. Si la hora de inicio es mayor que la
|
||||
* de finalizaci¢n, la funci¢n asume que la fecha a cambiado una vez.
|
||||
* $EXAMPLES$
|
||||
* // Muestra el tiempo que se uso el programa parecido a como lo
|
||||
* // hac¡a el viejo Norton Utilities
|
||||
* STATIC cHoraIni // al inicio del programa
|
||||
* cHoraIni := TIME()
|
||||
*
|
||||
* // A la salida del programa
|
||||
* ? "Ud. ha usado el programa durante: ", ELAPTIME( cHoraIni, TIME())
|
||||
* QUIT
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* SECS(),SECONDS(),TIME(),DAY()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* MONTH()
|
||||
* $CATEGORY$
|
||||
* Fecha
|
||||
* $ONELINER$
|
||||
* Extrae el mes como valor num‚rico de un valor de fecha dado
|
||||
* $SYNTAX$
|
||||
* MONTH(<dFecha>) --> nMes
|
||||
* $ARGUMENTS$
|
||||
* <dFecha> Cualquier expresi¢n v lida de fecha.
|
||||
* $RETURNS$
|
||||
* MONTH() retorna <nMes>, n£mero correspondiente al mes del a¤o, en el
|
||||
* rango de 0 a 12.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n devuelve el valor num‚rico del mes contenido en <dFecha>.
|
||||
* Este valor esta en el formato de cuatro d¡gitos y no es afectado
|
||||
* por el seteo de los comandos SET CENTURY y SET DATE.
|
||||
* Si se pasa una fecha vac¡a CTOD("") a esta funci¢n devuelve el valor
|
||||
* cero.
|
||||
* $EXAMPLES$
|
||||
* ? Month(DATE())
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* CDOW(),DOW(),YEAR(),CMONTH()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* SECONDS()
|
||||
* $CATEGORY$
|
||||
* Hora
|
||||
* $ONELINER$
|
||||
* Retorna el n£mero de segundos transcurridos desde medianoche.
|
||||
* $SYNTAX$
|
||||
* SECONDS() --> nSegundos
|
||||
* $ARGUMENTS$
|
||||
* Ninguno
|
||||
* $RETURNS$
|
||||
* SECONDS() retorna <nSegundos> desde la medianoche.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n devuelve un valor num‚rico representando el n£mero de
|
||||
* segundos transcurridos desde la medianoche del d¡a actual, basado en
|
||||
* la hora actual del sistema operativo.
|
||||
* SECONDS() se inicializa en cero (medianoche) y continua hasta 86399
|
||||
* segundos (23:59:59). El valor que devuelve es expresado como segundos
|
||||
* y cent‚simas de segundo.
|
||||
* $EXAMPLES$
|
||||
* // Muestra el tiempo que estuvo en ejecuci¢n una rutina
|
||||
* nArranque = SECONDS()
|
||||
*
|
||||
* // Aca va la llamada a la rutina
|
||||
* // : :
|
||||
* ? "Tard¢: ", SECONDS()- nArranque ," segundos"
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* TIME()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* SECS()
|
||||
* $CATEGORY$
|
||||
* Hora
|
||||
* $ONELINER$
|
||||
* Retorna el n£mero de segundos de la hora del sistema.
|
||||
* $SYNTAX$
|
||||
* SECS( <cHora> ) --> nSegundos
|
||||
* $ARGUMENTS$
|
||||
* <cHora> Expresi¢n de caracteres en el formato de tiempo HH:MM:SS
|
||||
* $RETURNS$
|
||||
* SECS() retorna <nsegundos> Numbero de segundos
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n devuelve un valor num‚rico que es el n£mero de segundos
|
||||
* transcurridos desde medianoche, basados en una cadena de hora dado
|
||||
* como <cHora>.
|
||||
* $EXAMPLES$
|
||||
* ? SECS( TIME())
|
||||
* ? SECS( TIME() - 10)
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* Nota: No esta documentada en las NG, ni en el manual en espa¤ol de
|
||||
* CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* SECONDS(),ELAPTIME(),TIME()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* TIME()
|
||||
* $CATEGORY$
|
||||
* Hora
|
||||
* $ONELINER$
|
||||
* Retorna la hora del sistema como una cadena de caracteres
|
||||
* $SYNTAX$
|
||||
* TIME() --> cHora
|
||||
* $ARGUMENTS$
|
||||
* Ninguno
|
||||
* $RETURNS$
|
||||
* TIME() retorna la cadena de caracteres <cHora> representando la hora
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n devuelve la hora del sistema representada como una
|
||||
* expresi¢n de caracteres en el formato HH:MM:SS, para calculos de
|
||||
* tiempo conviene usar SECONDS().
|
||||
* $EXAMPLES$
|
||||
* ? TIME() // Resultado: 21:34:12
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* DATE(),SECONDS()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* YEAR()
|
||||
* $CATEGORY$
|
||||
* Fecha
|
||||
* $ONELINER$
|
||||
* Extrae el a¤o como valor num‚rico de un valor de fecha dado
|
||||
* $SYNTAX$
|
||||
* YEAR(<dFecha>) --> nAno
|
||||
* $ARGUMENTS$
|
||||
* <dFecha> Cualquier expresi¢n v lida de fecha.
|
||||
* $RETURNS$
|
||||
* YEAR() retorna <nAno> la porci¢n de a¤o de una fecha.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n devuelve el valor num‚rico del a¤o contenido en <dFecha>
|
||||
* Este valor esta en el formato de cuatro d¡gitos y no es afectado
|
||||
* por el seteo de los comandos SET CENTURY y SET DATE.
|
||||
* Si se pasa una fecha vac¡a CTOD("") a esta funci¢n devuelve el valor
|
||||
* cero.
|
||||
* $EXAMPLES$
|
||||
* ? YEAR( DATE()) // Resultado: 2000
|
||||
* ? YEAR( CTOD("01/31/1982")) // Resultado: 1982
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* DAY(),MONTH()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,101 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2001-2002 David G. Holm <dholm@jsd-llc.com>
|
||||
* Documentaci¢n en Ingl‚s de: __dbDelim()
|
||||
*
|
||||
* Copyright 2001 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de: __dbDelim()
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __dbDelim()
|
||||
* $CATEGORY$
|
||||
* Conversi¢n
|
||||
* $ONELINER$
|
||||
* Copia el contenido de una base de datos a un archivo de texto
|
||||
* delimitado ¢ agrega el contenido de un archivo de texto
|
||||
* delimitado a una base de datos.
|
||||
* $SYNTAX$
|
||||
* __dbDelim( <lExporta>, <xcArchivo>, [<xcDelim>], [<aCampos>],
|
||||
* [<bFor>], [<bWhile>], [<nNext>], [<nRegistro>], <lResto> ) --> NIL
|
||||
* $ARGUMENTS$
|
||||
* Si <lExporta> es puesto a .T. copia registros A un archivo
|
||||
* delimitado.
|
||||
* Si <lExporta> es .F. agrega registros DESDE un archivo delimitado.
|
||||
*
|
||||
* <xcArchivo> es el nombre del archivo de texto del cual se va a
|
||||
* copiar ¢ al que se va agregar datos.
|
||||
* Si no es especificada una extensi¢n. ".txt" es usada por defecto.
|
||||
*
|
||||
* <xcDelim> Cualquiera de los caracteres a usar como delimitadores
|
||||
* de campo (s¢lo el primer caracter es usado). ¢ "BLANK" (en may£sculas
|
||||
* ¢ min£sculas), el cual elimina los caracteres delimitadores de campo
|
||||
* y establece el separador de campo a un solo espacio en lugar de una
|
||||
* coma.
|
||||
*
|
||||
* <aCampos> Un array con los nombres de los campos a los que se limita
|
||||
* el proceso. Si no es especificado, ¢ si est vac¡o, entonces todos
|
||||
* los campos son procesados.
|
||||
*
|
||||
* <bFor> Un bloque de c¢digo opcional conteniendo una expresi¢n FOR
|
||||
* que reducir el n£mero de registros a ser procesados.
|
||||
*
|
||||
* <bWhile> Un bloque de c¢digo opcional conteniendo una expresi¢n
|
||||
* WHILE que reducir el n£mero de registros a ser procesados.
|
||||
*
|
||||
* <nNext> Si est presente, pero <nRegistro> no est presente,
|
||||
* especifica procesar este n£mero de registros, empezando con el
|
||||
* registro actual. Un valor de cero significa no procesar registros.
|
||||
*
|
||||
* <nRegistro> Si est presente, especifica el £nico registro a
|
||||
* procesar un valor de cero significa no procesar ning£n registro.
|
||||
* Predomina sobre <nNext> y <lResto>.
|
||||
*
|
||||
* <lResto> Si <lExporta> es .T., y <lResto> es establecido en .T. y
|
||||
* no hay argumentos <nRegistro>, <nNext> ¢ <bWhile>, entonces
|
||||
* procesa todos los registros, desde el actual hasta el £ltimo.
|
||||
* $RETURNS$
|
||||
* NIL
|
||||
* $DESCRIPTION$
|
||||
* __dbDelim() copia todo ¢ el contenido seleccionado, desde una tabla
|
||||
* de base de datos a un archivo de texto SDF ¢, agrega todo ¢ el
|
||||
* contenido seleccionado desde un archivo de texto SDF a una tabla de
|
||||
* base de datos.
|
||||
* $EXAMPLES$
|
||||
* // Copia cuentas delinquentes dentro de un archivo de texto
|
||||
* // delimitado
|
||||
* USE cuentas NEW
|
||||
* COPY TO deudas DELIMITED FOR !EMPTY( cuentas->vencidas ) ;
|
||||
* .AND. DATE() - cuentas->vencidas > 30
|
||||
*
|
||||
* // Importa nuevos registros de clientes
|
||||
* USE clientes NEW
|
||||
* APPEND FROM clientes DELIMITED
|
||||
* $TESTS$
|
||||
*
|
||||
* $STATUS$
|
||||
* S
|
||||
* $COMPLIANCE$
|
||||
* Es intenci¢n que __dbDelim() sea totalmente compatible con la funci¢n
|
||||
* de CA-Cl*pper del mismo nombre y es la implementaci¢n subyacente de
|
||||
* los comandos: APPEND FROM DELIMITED y COPY TO DELIMITED.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
*
|
||||
* $SEEALSO$
|
||||
* __dbSDF(), APPEND FROM, COPY TO
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,93 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2001-2002 David G. Holm <dholm@jsd-llc.com>
|
||||
* Documentaci¢n en Ingl‚s de: __dbSDF()
|
||||
*
|
||||
* Copyright 2001 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de: __dbSDF()
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __dbSDF()
|
||||
* $CATEGORY$
|
||||
* Conversi¢n
|
||||
* $ONELINER$
|
||||
* Copia el contenido de una base de datos a un archivo de texto SDF
|
||||
* ¢ agrega el contenido de un archivo de texto SDF a una base de
|
||||
* datos.
|
||||
* $SYNTAX$
|
||||
* __dbSDF( <lExporta>, <xcArchivo>, [<aCampos>],
|
||||
* [<bFor>], [<bWhile>], [<nNext>], [<nRegistro>], <lResto> ) --> NIL
|
||||
* $ARGUMENTS$
|
||||
* Si <lExporta> es puesto a .T. copia registros A un archivo SDF.
|
||||
* Si <lExporta> es .F. agrega registros DESDE un archivo SDF.
|
||||
*
|
||||
* <xcArchivo> es el nombre del archivo de texto del cual se va a
|
||||
* copiar ¢ al que se va agregar datos.
|
||||
* Si no es especificada una extensi¢n. ".txt" es usada por defecto.
|
||||
*
|
||||
* <aCampos> Un array con los nombres de los campos a los que se limita
|
||||
* el proceso. Si no es especificado, ¢ si est vac¡o, entonces todos
|
||||
* los campos son procesados.
|
||||
*
|
||||
* <bFor> Un bloque de c¢digo opcional conteniendo una expresi¢n FOR
|
||||
* que reducir el n£mero de registros a ser procesados.
|
||||
*
|
||||
* <bWhile> Un bloque de c¢digo opcional conteniendo una expresi¢n
|
||||
* WHILE que reducir el n£mero de registros a ser procesados.
|
||||
*
|
||||
* <nNext> Si est presente, pero <nRegistro> no est presente,
|
||||
* especifica procesar este n£mero de registros, empezando con el
|
||||
* registro actual. Un valor de cero significa no procesar registros.
|
||||
*
|
||||
* <nRegistro> Si est presente, especifica el £nico registro a
|
||||
* procesar un valor de cero significa no procesar ning£n registro.
|
||||
* Predomina sobre <nNext> y <lResto>.
|
||||
*
|
||||
* <lResto> Si <lExporta> es .T., y <lResto> es establecido en .T. y
|
||||
* no hay argumentos <nRegistro>, <nNext> ¢ <bWhile>, entonces
|
||||
* procesa todos los registros, desde el actual hasta el £ltimo.
|
||||
* $RETURNS$
|
||||
* NIL
|
||||
* $DESCRIPTION$
|
||||
* __dbSDF() copia todo ¢ el contenido seleccionado, desde una tabla
|
||||
* de base de datos a un archivo de texto SDF ¢, agrega todo ¢ el
|
||||
* contenido seleccionado desde un archivo de texto SDF a una tabla de
|
||||
* base de datos.
|
||||
* $EXAMPLES$
|
||||
* // Copia cuentas deudoras dentro de un archivo de texto SDF
|
||||
* USE cuentas NEW
|
||||
* COPY TO deudas SDF FOR !EMPTY( cuentas->vencidas ) ;
|
||||
* .AND. DATE() - cuentas->vencidas > 30
|
||||
*
|
||||
* // Importa nuevos registros de clientes
|
||||
* USE clientes NEW
|
||||
* APPEND FROM clientes SDF
|
||||
* $TESTS$
|
||||
*
|
||||
* $STATUS$
|
||||
* S
|
||||
* $COMPLIANCE$
|
||||
* Es intenci¢n que __dbSDF() sea totalmente compatible con la funci¢n
|
||||
* de CA-Cl*pper del mismo nombre y es la implementaci¢n subyacente de
|
||||
* los comandos: APPEND FROM SDF y COPY TO SDF.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
*
|
||||
* $SEEALSO$
|
||||
* __dbDelim(), APPEND FROM, COPY TO
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,747 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2000 Chen Kedem <niki@actcom.co.il>
|
||||
* Documentation for: __dbCopyStruct(), COPY STRUCTURE, __dbCopyXStruct(),
|
||||
* COPY STRUCTURE EXTENDED, __dbCreate(), CREATE,
|
||||
* CREATE FROM, __FLEDIT(), __dbStructFilter()
|
||||
*
|
||||
* Copyright 2000 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de:
|
||||
* __dbCopyStruct(), COPY STRUCTURE, __dbCopyXStruct(),
|
||||
* COPY STRUCTURE EXTENDED, __dbCreate(), CREATE,
|
||||
* CREATE FROM, __FLEDIT(), __dbStructFilter()
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __dbCopyStruct()
|
||||
* $CATEGORY$
|
||||
* Base de Datos
|
||||
* $ONELINER$
|
||||
* Crea otra base de datos basada en la estructura actual del DBF
|
||||
* $SYNTAX$
|
||||
* __dbCopyStruct( <cNombreArch>, [<aListaCampos>] ) --> NIL
|
||||
* $ARGUMENTS$
|
||||
* <cNombreArch> es el nombre de una nueva base de datos a crear.
|
||||
* (.dbf) es la extensi¢n por defecto si ninguna es especificada.
|
||||
*
|
||||
* <aListaCampos> es un array donde cada elemento es un nombre de
|
||||
* campo.
|
||||
* Los nombres pueden ser especificados en may£sculas ¢ min£sculas.
|
||||
* $RETURNS$
|
||||
* __dbCopyStruct() siempre retorna NIL.
|
||||
* $DESCRIPTION$
|
||||
* La funci¢n __dbCopyStruct() crea una nueva base de datos vac¡a,
|
||||
* con una estructura que esta basada en la base de datos actualmente
|
||||
* abierta en este rea de trabajo. Si <aListaCampos> esta vac¡a,
|
||||
* el archivo recientemente creado podr¡a tener la misma estructura
|
||||
* que la base de datos actualmente abierta. De otro modo el nuevo
|
||||
* archivo podr¡a contener s¢lo campos que coincidan exactamente
|
||||
* con <aListaCampos>.
|
||||
*
|
||||
* __dbCopyStruct() puede ser usada para crear un subconjunto de
|
||||
* la base de datos actualmente abierta, basada en una lista dada
|
||||
* de campos.
|
||||
*
|
||||
* El comando COPY STRUCTURE es pre-procesado en la funci¢n
|
||||
* __dbCopyStruct() durante el tiempo de compilaci¢n.
|
||||
* $EXAMPLES$
|
||||
* // Crea un nuevo archivo que contiene la misma estructura.
|
||||
* USE TEST
|
||||
* __dbCopyStruct( "mycopy.dbf" )
|
||||
*
|
||||
* // Crea un nuevo archivo que contiene parte de la estructura
|
||||
* // original
|
||||
* LOCAL aLista
|
||||
* USE TEST
|
||||
* aLista := { "NOMBRE" }
|
||||
* __dbCopyStruct( "nombre.dbf", aLista )
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* __dbCopyStruct() trabaja exactamente como la funci¢n de CA-Cl*pper,
|
||||
* __dbCopyStruct().
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a es rdd
|
||||
* $SEEALSO$
|
||||
* COPY STRUCTURE,COPY STRUCTURE EXTENDED,DBCREATE(),DBSTRUCT(),__dbCopyXStruct(),__dbCreate(),__dbStructFilter()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* COPY STRUCTURE
|
||||
* $CATEGORY$
|
||||
* Comando
|
||||
* $ONELINER$
|
||||
* Crea otra base de datos basada en la estructura actual del DBF
|
||||
* $SYNTAX$
|
||||
* COPY STRUCTURE TO <xcNombreArchivo> [FIELDS <campo,...>]
|
||||
* $ARGUMENTS$
|
||||
* <b>TO <xcNombreArchivo></b> es el nombre del nuevo archivo de
|
||||
* base de datos a crear. (.dbf) es la extensi¢n por defecto si
|
||||
* ninguna es dada.
|
||||
*
|
||||
* Esta puede ser especificada como un literal de nombre de archivo
|
||||
* ¢ como una expresi¢n de caracteres encerrada entre par‚ntesis.
|
||||
*
|
||||
* <b>FIELDS <campo,...></b> es una lista opcional de nombres de
|
||||
* campos a copiar desde la base de datos actualmente abierta en
|
||||
* el orden especificado, por defecto son todos los campos.
|
||||
* Los nombres pueden ser especificados en may£sculas ¢ min£sculas.
|
||||
* $DESCRIPTION$
|
||||
* COPY STRUCTURE crea una nueva base de datos vac¡a con una estructura
|
||||
* que esta basada en la base de datos actualmente abierta en este
|
||||
* rea de trabajo.
|
||||
*
|
||||
* COPY STRUCTURE puede ser usada para crear un subconjunto de la base
|
||||
* de datos actualmente abierta, basada en una lista dada de campos.
|
||||
*
|
||||
* El comando COPY STRUCTURE es pre-procesado en la funci¢n
|
||||
* __dbCopyStruct() durante el tiempo de compilaci¢n.
|
||||
* $EXAMPLES$
|
||||
* // Crea un nuevo archivo que contiene la misma estructura.
|
||||
* USE TEST
|
||||
* COPY STRUCTURE TO MiCopia
|
||||
*
|
||||
* // Crea un nuevo archivo que tiene parte de la estructura original
|
||||
* USE TEST
|
||||
* COPY STRUCTURE TO UnaParte FIELDS nombre, direccion
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* COPY STRUCTURE trabaja exactamente como en CA-Cl*pper
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* COPY STRUCTURE EXTENDED,DBCREATE(),DBSTRUCT(),__dbCopyStruct(),__dbCopyXStruct(),__dbCreate(),__dbStructFilter()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __dbCopyXStruct()
|
||||
* $CATEGORY$
|
||||
* Base de Datos
|
||||
* $ONELINER$
|
||||
* Copia la estructura actual de la base a un archivo de definici¢n.
|
||||
* $SYNTAX$
|
||||
* __dbCopyXStruct( <cNombreArchivo> ) --> lExito
|
||||
* $ARGUMENTS$
|
||||
* <cNombreArchivo> es el nombre del archivo de definici¢n de destino
|
||||
* a crear, (*.dbf) es la extensi¢n por defecto si ninguna es dada.
|
||||
* $RETURNS$
|
||||
* __dbCopyXStruct() retorna (.F.) si ninguna base de datos est en
|
||||
* uso en el rea actual de trabajo, (.T.) si el proceso fu‚ exitoso,
|
||||
* ¢ un error en tiempo de ejecuci¢n si la operaci¢n de creaci¢n del
|
||||
* archivo ha fallado.
|
||||
* $DESCRIPTION$
|
||||
* La funci¢n __dbCopyXStruct() crea una nueva base de datos llamada
|
||||
* <cNombreArchivo> con una estructura predefinida (tambi‚n llamado
|
||||
* "archivo de estructura extendida"):
|
||||
*
|
||||
* <table>
|
||||
* Nombre Campo Tipo Tama¤o Decimales
|
||||
*
|
||||
* FIELD_NAME C 10 0
|
||||
* FIELD_TYPE C 1 0
|
||||
* FIELD_LEN N 3 0
|
||||
* FIELD_DEC N 3 0
|
||||
* </table>
|
||||
*
|
||||
* Cada registro en el nuevo archivo contiene informaci¢n acerca de
|
||||
* un campo en el archivo original. CREATE FROM podr¡a ser usado para
|
||||
* crear la base de datos desde el archivo de estructura extendida.
|
||||
*
|
||||
* Por razones prehist¢ricas de compatibilidad, los campos de
|
||||
* caracteres mayores de 255 caracteres son tratados en una forma
|
||||
* especial al escribir parte de la longitud en el campo FIELD_DEC
|
||||
* de acuerdo a la siguiente f¢rmula (Esto es hecho internamente):
|
||||
*
|
||||
* <fixed>
|
||||
* FIELD->FIELD_DEC := int( nLength / 256 )
|
||||
* FIELD->FIELD_LEN := ( nLength % 256 )
|
||||
* </fixed>
|
||||
*
|
||||
* Luego si se desea calcular la longitud de un campo, se puede usar
|
||||
* la siguiente f¢rmula:
|
||||
*
|
||||
* <fixed>
|
||||
* nLength := IIF( FIELD->FIELD_TYPE == "C", ;
|
||||
* FIELD->FIELD_DEC * 256 + FIELD->FIELD_LEN, ;
|
||||
* FIELD->FIELD_LEN )
|
||||
* </fixed>
|
||||
*
|
||||
* El comando COPY STRUCTURE EXTENDED es pre-procesado en la funci¢n
|
||||
* __dbCopyXStruct() durante el tiempo de compilaci¢n.
|
||||
* $EXAMPLES$
|
||||
* // Abre la base de datos, y copia su estructura a un nuevo archivo.
|
||||
* USE Test
|
||||
* __dbCopyXStruct( "TestEstr" )
|
||||
*
|
||||
* // Abre el nuevo archivo y lista todos sus registros
|
||||
* USE TestEstr
|
||||
* LIST
|
||||
*
|
||||
* $TESTS$
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* __dbCopyXStruct() trabaja exactamente como la funci¢n de CA-Cl*pper,
|
||||
* __dbCopyXStruct().
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a es rdd
|
||||
* $SEEALSO$
|
||||
* COPY STRUCTURE,COPY STRUCTURE EXTENDED,CREATE,CREATE FROM,DBCREATE(),DBSTRUCT(),__dbCopyStruct(),__dbCreate()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* COPY STRUCTURE EXTENDED
|
||||
* $CATEGORY$
|
||||
* Comando
|
||||
* $ONELINER$
|
||||
* Copia la estructura actual de la base a un archivo de definici¢n.
|
||||
* $SYNTAX$
|
||||
* COPY STRUCTURE EXTENDED TO <xcNombreArchivo>
|
||||
* $ARGUMENTS$
|
||||
* <b>TO <xcNombreArchivo></b> es el nombre del nuevo archivo de base
|
||||
* de datos a crear, (.dbf) es la extensi¢n por defecto si ninguna
|
||||
* es dada.
|
||||
* Esta puede ser especificada como un literal de nombre de archivo
|
||||
* ¢ como una expresi¢n de caracteres encerrada entre par‚ntesis.
|
||||
* $DESCRIPTION$
|
||||
* COPY STRUCTURE EXTENDED crea una nueva base de datos llamada
|
||||
* <cNombreArchivo> con una estructura predefinida (tambi‚n llamada
|
||||
* "archivo de estructura extendida"):
|
||||
*
|
||||
* <table>
|
||||
* Nombre Campo Tipo Tama¤o Decimales
|
||||
*
|
||||
* FIELD_NAME C 10 0
|
||||
* FIELD_TYPE C 1 0
|
||||
* FIELD_LEN N 3 0
|
||||
* FIELD_DEC N 3 0
|
||||
* </table>
|
||||
*
|
||||
* <fixed>
|
||||
*
|
||||
* Cada registro en el nuevo archivo contiene informaci¢n acerca de
|
||||
* un campo en el archivo original. CREATE FROM podr¡a ser usado para
|
||||
* crear la base de datos desde el "archivo de estructura extendida".
|
||||
*
|
||||
* Por razones prehist¢ricas de compatibilidad, los campos de
|
||||
* caracteres mayores de 255 caracteres son tratados en una forma
|
||||
* especial al escribir parte de la longitud en el campo FIELD_DEC
|
||||
* de acuerdo a la siguiente f¢rmula (Esto es hecho internamente):
|
||||
*
|
||||
* <fixed>
|
||||
* FIELD->FIELD_DEC := int( nLength / 256 )
|
||||
* FIELD->FIELD_LEN := ( nLength % 256 )
|
||||
* </fixed>
|
||||
*
|
||||
* Luego si se desea calcular la longitud de un campo, se puede usar
|
||||
* la siguiente f¢rmula:
|
||||
*
|
||||
* <fixed>
|
||||
* nLength := IIF( FIELD->FIELD_TYPE == "C", ;
|
||||
* FIELD->FIELD_DEC * 256 + FIELD->FIELD_LEN, ;
|
||||
* FIELD->FIELD_LEN )
|
||||
* </fixed>
|
||||
*
|
||||
* El comando COPY STRUCTURE EXTENDED es pre-procesado en la funci¢n
|
||||
* __dbCopyXStruct() durante el tiempo de compilaci¢n.
|
||||
|
||||
* $EXAMPLES$
|
||||
* // Abre la base de datos, y copia su estructura a un nuevo archivo.
|
||||
* USE Test
|
||||
* __dbCopyXStruct( "TestEstr" )
|
||||
*
|
||||
* // Abre el nuevo archivo y lista todos sus registros
|
||||
* USE TestEstr
|
||||
* LIST
|
||||
*
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* COPY STRUCTURE EXTENDED trabaja exactamente como en CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* COPY STRUCTURE,CREATE,CREATE FROM,DBCREATE(),DBSTRUCT(),__dbCopyStruct(),__dbCopyXStruct(),__dbCreate()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __dbCreate()
|
||||
* $CATEGORY$
|
||||
* Base de Datos
|
||||
* $ONELINER$
|
||||
* Crea una estructura extendida ¢ usa una para crear otro archivo
|
||||
* $SYNTAX$
|
||||
* __dbCreate( <cNombreArchivo>, [<cDesdeArchivo>], [<cNombreRDD>],
|
||||
* [<lNuevo>], [<cAlias>] ) --> lUsado
|
||||
* $ARGUMENTS$
|
||||
* <cNombreArchivo> es el nombre del archivo destino a crear y luego
|
||||
* abrir, (.dbf) es la extensi¢n por defecto si ninguna es
|
||||
* especificada.
|
||||
*
|
||||
* <cDesdeArchivo> es el nombre de una estructura extendida opcional
|
||||
* desde la cual el archivo destino <cNombreArchivo> va a ser
|
||||
* construido.
|
||||
* Si es omitida, un nuevo archivo de estructura extendida vac¡a con
|
||||
* el nombre <cNombreArchivo> es creado y abierto, en el rea de
|
||||
* trabajo actual.
|
||||
*
|
||||
* <cNombreRDD> es el nombre del RDD para crear el archivo destino,
|
||||
* Si es omitido, es usado el RDD por defecto.
|
||||
*
|
||||
* <lNuevo> es una expresi¢n l¢gica opcional, (.T.) abre el nombre
|
||||
* del archivo de destino <cNombreArchivo> en la pr¢xima rea
|
||||
* disponible sin uso y hace de esta el rea actual. (.F.) abre el
|
||||
* archivo de destino en el rea de trabajo actual.
|
||||
* El valor por defecto es (.F.). El valor de <lNuevo> es ignorado si
|
||||
* <cDesdeArchivo> no es especificado.
|
||||
*
|
||||
* <cAlias> es un alias opcional para usar el archivo de destino con
|
||||
* el comando USE. Si no es especificado, alias esta basado en el
|
||||
* nombre <cNombreArchivo>.
|
||||
* $RETURNS$
|
||||
* __dbCreate() retorna (.T.) si hay una base de datos usada en el
|
||||
* rea actual de trabajo (esta podr¡a ser la nueva area de trabajo
|
||||
* elegida), ¢ (.F.) si no hay ninguna base de datos usada.
|
||||
* Note que si hubo ‚xito deber¡a ser devuelto (.F.), pero si hay
|
||||
* alguna falla probablemente se termine con un error en tiempo de
|
||||
* ejecuci¢n y no con un valor de (.F.)
|
||||
* $DESCRIPTION$
|
||||
* La funci¢n __dbCreate() funciona en dos modos dependiendo del valor
|
||||
* de <cDesdeArchivo>:
|
||||
*
|
||||
* <b>1)</b> Si <cDesdeArchivo> est vac¡o o no est especificado, un
|
||||
* nuevo archivo de estructura extendida vac¡a, con el nombre
|
||||
* <cNombreArchivo> es creado y luego abierto, en el rea actual de
|
||||
* trabajo (<lNuevo> es ignorado).
|
||||
* El nuevo archivo tiene la siguiente estructura:
|
||||
*
|
||||
* <table>
|
||||
* Nombre Campo Tipo Tama¤o Decimales
|
||||
*
|
||||
* FIELD_NAME C 10 0
|
||||
* FIELD_TYPE C 1 0
|
||||
* FIELD_LEN N 3 0
|
||||
* FIELD_DEC N 3 0
|
||||
* </table>
|
||||
*
|
||||
* El comando CREATE es pre-procesado en la funci¢n __dbCopyStruct()
|
||||
* durante el tiempo de compilaci¢n y usa este modo.
|
||||
*
|
||||
* <b>2)</b> Si <cDesdeArchivo> es especificado, este es abierto y se
|
||||
* asume como un archivo de estructura extendida donde cada registro
|
||||
* contiene al menos los siguientes campos (en cualquier orden):
|
||||
* FIELD_NAME, FIELD_TYPE, FIELD_LEN y FIELD_DEC. Cualquier otro campo
|
||||
* es ignorado. Con esta informaci¢n el archivo <cNombreArchivo> es
|
||||
* creado y abierto en el nuevo area de trabajo (de acuerdo a <lNuevo>)
|
||||
* si esta es una nueva rea de trabajo, esta se vuelve la actual.
|
||||
*
|
||||
* Por razones prehist¢ricas de compatibilidad, los campos de
|
||||
* caracteres del archivo de estructura extendida los cuales sean
|
||||
* mayores de 255 caracteres deber¡an ser tratados en una forma
|
||||
* especial al escribir parte de la longitud en el campo FIELD_DEC
|
||||
* de acuerdo a la siguiente f¢rmula:
|
||||
*
|
||||
* <fixed>
|
||||
* FIELD->FIELD_DEC := int( nLength / 256 )
|
||||
* FIELD->FIELD_LEN := ( nLength % 256 )
|
||||
* </fixed>
|
||||
*
|
||||
* El comando CREATE FROM es pre-procesado en la funci¢n
|
||||
* __dbCopyStruct() durante el tiempo de compilaci¢n.
|
||||
*
|
||||
* $EXAMPLES$
|
||||
* // Crea un nuevo archivo de estructura extendida, agrega algunos
|
||||
* // registros y luego crea un nueva base de datos desde este
|
||||
* // archivo (CREATE FROM)
|
||||
*
|
||||
* __dbCreate( "molde" )
|
||||
* DBAPPEND()
|
||||
* FIELD->FIELD_NAME := "CANAL"
|
||||
* FIELD->FIELD_TYPE := "N"
|
||||
* FIELD->FIELD_LEN := 2
|
||||
* FIELD->FIELD_DEC := 0
|
||||
* DBAPPEND()
|
||||
* FIELD->FIELD_NAME := "PROGRAMA"
|
||||
* FIELD->FIELD_TYPE := "C"
|
||||
* FIELD->FIELD_LEN := 20
|
||||
* FIELD->FIELD_DEC := 0
|
||||
* DBAPPEND()
|
||||
* FIELD->FIELD_NAME := "RESUMEN"
|
||||
* FIELD->FIELD_TYPE := "C" // este campo es de 1000 char longitud
|
||||
* FIELD->FIELD_LEN := 232 // 1000 % 256 = 232
|
||||
* FIELD->FIELD_DEC := 3 // 1000 / 256 = 3
|
||||
* DBCLOSEAREA()
|
||||
* __dbCreate( "tv_guia", "molde" )
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* __dbCreate() trabaja exactamente como en CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a es rdd
|
||||
* $SEEALSO$
|
||||
* COPY STRUCTURE,COPY STRUCTURE EXTENDED,CREATE,CREATE FROM,DBCREATE(),DBSTRUCT(),__dbCopyStruct(),__dbCopyXStruct()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* CREATE
|
||||
* $CATEGORY$
|
||||
* Comando
|
||||
* $ONELINER$
|
||||
* Crea un archivo de estructura extendida vac¡o.
|
||||
* $SYNTAX$
|
||||
* CREATE <xcNombreArchivo> [VIA <xcNombreRDD>] [ALIAS <xcAlias>]
|
||||
* $ARGUMENTS$
|
||||
* <xcNombreArchivo> es el nombre del archivo de de destino a crear
|
||||
* y abrir, (*.dbf) es la extensi¢n por defecto si ninguna es dada.
|
||||
* Este puede ser especificada un literal de nombre de archivo ¢
|
||||
* como una expresion de caracteres encerrada entre par‚ntesis.
|
||||
*
|
||||
* <b>VIA <xcNombreRDD></b> es el nombre del RDD con el cual se va
|
||||
* a crear el archivo de destino. Si es omitido, el RDD por defecto
|
||||
* es usado.
|
||||
* Este puede ser especificado como un literal de nombre de archivo
|
||||
* ¢ como una expresi¢n de caracteres encerrada entre par‚ntesis.
|
||||
*
|
||||
* <cAlias> es un alias opcional para usar el archivo de destino con
|
||||
* el comando USE. Si no es especificado, alias esta basado en el
|
||||
* nombre <cNombreArchivo>.
|
||||
* $DESCRIPTION$
|
||||
* El comando CREATE, crea un nuevo archivo de estructura extendida
|
||||
* vac¡o <cNombreArch> y luego lo abre en el rea actual de trabajo.
|
||||
* El nuevo archivo tiene la siguiente estructura:
|
||||
*
|
||||
* <table>
|
||||
* Nombre Campo Tipo Tama¤o Decimales
|
||||
*
|
||||
* FIELD_NAME C 10 0
|
||||
* FIELD_TYPE C 1 0
|
||||
* FIELD_LEN N 3 0
|
||||
* FIELD_DEC N 3 0
|
||||
* </table>
|
||||
*
|
||||
* El comando CREATE es pre-procesado en la funci¢n __dbCopyStruct()
|
||||
* durante el tiempo de compilaci¢n y usa este modo.
|
||||
* $EXAMPLES$
|
||||
* // Crea un nuevo archivo de estructura extendida, agrega algunos
|
||||
* // registros y luego crea un nueva base de datos desde este archivo
|
||||
* // (CREATE FROM)
|
||||
*
|
||||
* CREATE molde
|
||||
* APPEND BLANK
|
||||
* FIELD->FIELD_NAME := "CANAL"
|
||||
* FIELD->FIELD_TYPE := "N"
|
||||
* FIELD->FIELD_LEN := 2
|
||||
* FIELD->FIELD_DEC := 0
|
||||
* APPEND BLANK
|
||||
* FIELD->FIELD_NAME := "PROGRAMA"
|
||||
* FIELD->FIELD_TYPE := "C"
|
||||
* FIELD->FIELD_LEN := 20
|
||||
* FIELD->FIELD_DEC := 0
|
||||
* APPEND BLANK
|
||||
* FIELD->FIELD_NAME := "RESUMEN"
|
||||
* FIELD->FIELD_TYPE := "C" // este campo es de 1000 char longitud
|
||||
* FIELD->FIELD_LEN := 232 // 1000 % 256 = 232
|
||||
* FIELD->FIELD_DEC := 3 // 1000 / 256 = 3
|
||||
* CLOSE
|
||||
* CREATE tv_Guia FROM molde
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* CREATE trabaja exactamente como en CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* COPY STRUCTURE,COPY STRUCTURE EXTENDED,CREATE FROM,DBCREATE(),DBSTRUCT(),__dbCopyStruct(),__dbCopyXStruct(),__dbCreate()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* CREATE FROM
|
||||
* $CATEGORY$
|
||||
* Comando
|
||||
* $ONELINER$
|
||||
* Crea una base de datos desde un archivo de estructura extendida
|
||||
* $SYNTAX$
|
||||
* CREATE <xcNombreArchivo> FROM <xcDesdeArchivo> [VIA <xcNombreRDD>]
|
||||
* [NEW] [ALIAS <xcAlias>]
|
||||
* $ARGUMENTS$
|
||||
* <xcNombreArchivo> es el nombre del archivo de de destino a crear
|
||||
* y abrir, (*.dbf) es la extensi¢n por defecto si ninguna es dada.
|
||||
* Este puede ser especificada un literal de nombre de archivo ¢
|
||||
* como una expresi¢n de caracteres encerrada entre par‚ntesis.
|
||||
*
|
||||
* <b>FROM <xcDesdeArchivo></b> es el nombre del archivo de estructura
|
||||
* extendida desde la cual el archivo de destino va a ser construido.
|
||||
* Este puede ser especificado como un literal de nombre de archivo
|
||||
* ¢ como una expresi¢n de caracteres encerrada entre par‚ntesis.
|
||||
*
|
||||
* <b>VIA <xcNombreRDD></b> es el nombre del RDD con el cual se va
|
||||
* a crear el archivo de destino. Si es omitido, el RDD por defecto
|
||||
* es usado.
|
||||
* Este puede ser especificado como un literal de nombre de archivo
|
||||
* ¢ como una expresi¢n de caracteres encerrada entre par‚ntesis.
|
||||
*
|
||||
* <b>NEW</b> abre el nombre del archivo de destino <cNombreArch> en
|
||||
* la pr¢xima rea disponible sin uso y hace de ‚sta el rea actual.
|
||||
* Si es omitido, abre el archivo de destino en el rea de trabajo
|
||||
* actual.
|
||||
*
|
||||
* <b>ALIAS <xcAlias></b> es el alias opcional del archivo de destino
|
||||
* para usar con el comando USE. Si ninguno es especificado el alias
|
||||
* esta basado en el nombre <cNombreArchivo>.
|
||||
* $DESCRIPTION$
|
||||
* El comando CREATE FROM abre un archivo de estructura extendida
|
||||
* <xcDesdeArchivo> donde cada registro contiene al menos los
|
||||
* siguientes campos (en cualquier orden):
|
||||
* FIELD_NAME, FIELD_TYPE, FIELD_LEN y FIELD_DEC. Cualquier otro campo
|
||||
* es ignorado. Con esta informaci¢n el archivo <cNombreArchivo> es
|
||||
* creado y abierto en el nuevo area de trabajo (de acuerdo a la
|
||||
* cl usula NEW) si ‚sta es una nueva rea de trabajo, esta se vuelve
|
||||
* la actual.
|
||||
*
|
||||
* Por razones prehist¢ricas de compatibilidad, los campos de
|
||||
* caracteres del archivo de estructura extendida los cuales sean
|
||||
* mayores de 255 caracteres deber¡an ser tratados en una forma
|
||||
* especial al escribir parte de la longitud en el campo FIELD_DEC
|
||||
* de acuerdo a la siguiente f¢rmula:
|
||||
*
|
||||
* <fixed>
|
||||
* FIELD->FIELD_DEC := int( nTamano / 256 )
|
||||
* FIELD->FIELD_LEN := ( nTamano % 256 )
|
||||
* </fixed>
|
||||
*
|
||||
* El comando CREATE FROM es preprocesado en la funci¢n __dbCopyStruct()
|
||||
* durante el tiempo de compilaci¢n y usa este modo.
|
||||
* $EXAMPLES$
|
||||
* Vea el ejemplo del comado CREATE.
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* CREATE FROM trabaja exactamente como en CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* COPY STRUCTURE,COPY STRUCTURE EXTENDED,CREATE,DBCREATE(),DBSTRUCT(),__dbCopyStruct(),__dbCopyXStruct(),__dbCreate()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __FLEDIT()*
|
||||
* $CATEGORY$
|
||||
* Base de Datos
|
||||
* $ONELINER$
|
||||
* Filtra un array con estructura de base de datos.
|
||||
* $SYNTAX$
|
||||
* __FLEDIT( <aEstructura>, [<aListaCampos>] ) --> aEstructuraFiltrada
|
||||
* $ARGUMENTS$
|
||||
* <aEstructura> es un array multidimensional con la estructura de los
|
||||
* campos de la base de datos, la cual es usualmente la salida de
|
||||
* DBSTRUCT(), donde cada elemento del array tiene la siguiente
|
||||
* estructura:
|
||||
*
|
||||
* <table>
|
||||
* Posici¢n Descripci¢n dbstruct.ch
|
||||
*
|
||||
* 1 cNombreCampo DBS_NAME
|
||||
* 2 cTipoCampo DBS_TYPE
|
||||
* 3 nTama¤oCampo DBS_LEN
|
||||
* 4 nDecimales DBS_DEC
|
||||
* </table>
|
||||
*
|
||||
* <aListaCampos> es un array donde cada elemento es un nombre de
|
||||
* campo. Los nombres pueden ser especificados en may£sculas o en
|
||||
* min£sculas.
|
||||
* $RETURNS$
|
||||
* __FLEDIT() retorna un nuevo array multidimensional donde cada
|
||||
* elemento esta en la misma estructura que el original <aEstructura>,
|
||||
* pero el array es construido de acuerdo a la lista de campos en
|
||||
* <aListaCampos>.
|
||||
* Si <aListaCampos> esta vac¡o, __FLEDIT() retorna una referencia al
|
||||
* array original <aEstructura>.
|
||||
* $DESCRIPTION$
|
||||
* __FLEDIT() puede ser usado para crear un subconjunto de la
|
||||
* estructura de la base de datos, basada en una lista de campos dadas.
|
||||
*
|
||||
* Note que los nombres de campos en <aEstructura> DEBEN ser
|
||||
* especificados en may£sculas de lo contrario podr¡a no encontrarse
|
||||
* coincidencia.
|
||||
*
|
||||
* SET EXACT no tiene efecto en el valor retornado.
|
||||
*
|
||||
* __FLEDIT() es una funci¢n de compatibilidad y es un sin¢nimo para
|
||||
* __dbStructFilter() la cual hace exactamente lo mismo.
|
||||
* $EXAMPLES$
|
||||
* LOCAL aEstructura, aLista, aRet
|
||||
* aEstructura := {{ "CODIGO", "N", 4, 0 }, ;
|
||||
* { "NOMBRE", "C", 10, 0 }, ;
|
||||
* { "TELEF", "C", 13, 0 }, ;
|
||||
* { "IQ" , "N", 3, 0 } }
|
||||
* aLista := { "IQ", "NOMBRE" }
|
||||
* aRet := __FLEDIT( aEstructura, aLista )
|
||||
* // { { "IQ", "N", 3, 0 }, { "NAME", "C", 10, 0 } }
|
||||
*
|
||||
* aRet := __FLEDIT( aEstructura, {} )
|
||||
* ? aRet == aEstructura // .T.
|
||||
*
|
||||
* aLista := { "iq", "NOTEXIST" }
|
||||
* aRet := __FLEDIT( aEstruct, aLista )
|
||||
* // { { "IQ", "N", 3, 0 } }
|
||||
*
|
||||
* aLista := { "NOTEXIST" }
|
||||
* aRet := __FLEDIT( aEstruct, aLista ) // {}
|
||||
*
|
||||
*
|
||||
* // Crea un nuevo archivo que contiene parte de la estructura
|
||||
* // original
|
||||
* LOCAL aEstructura, aLista, aRet
|
||||
* USE TEST
|
||||
* aEstructura := DBSTRUCT()
|
||||
* aLista := { "NOMBRE" }
|
||||
* DBCREATE( "elnombre.dbf", __FLEDIT( aEstructura, aLista ) )
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* CA-Cl*pper tiene una funci¢n interna no documentada llamada
|
||||
* __FLEDIT(), en Harbour nosotros la llamamos __dbStructFilter().
|
||||
* El nuevo nombre da una mejor descripci¢n de qu‚ es lo que la funci¢n
|
||||
* hace. En Harbour __FLEDIT(), simplemente llama a __dbStructFilter()
|
||||
* y por tanto la segunda es la funci¢n recomendada.
|
||||
*
|
||||
* Esta funci¢n es s¢lo visible si ../source/rdd/dbstrux.prg fu‚
|
||||
* compilado con la bandera HB_CLP_UNDOC.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* El archivo de cabecera es dbstruct.ch
|
||||
* La librer¡a es rdd
|
||||
* $SEEALSO$
|
||||
* DBCREATE(),DBSTRUCT(),__dbCopyStruct(),__dbStructFilter()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __dbStructFilter()
|
||||
* $CATEGORY$
|
||||
* Base de Datos
|
||||
* $ONELINER$
|
||||
* Filtra un array con estructura de base de datos.
|
||||
* $SYNTAX$
|
||||
* __dbStructFilter( <aEstructura>, [<aListaCampos>] )
|
||||
* --> aEstructuraFiltrada
|
||||
* $ARGUMENTS$
|
||||
* <aEstructura> es un array multidimensional con la estructura de
|
||||
* los campos de la base de datos, la cual es usualmente la salida
|
||||
* de DBSTRUCT(), donde cada elemento del array tiene la siguiente
|
||||
* estructura:
|
||||
*
|
||||
* <table>
|
||||
* Posici¢n Descripci¢n dbstruct.ch
|
||||
*
|
||||
* 1 cNombreCampo DBS_NAME
|
||||
* 2 cTipoCampo DBS_TYPE
|
||||
* 3 nTama¤oCampo DBS_LEN
|
||||
* 4 nDecimales DBS_DEC
|
||||
* </table>
|
||||
*
|
||||
* <aListaCampos> es un array donde cada elemento es un nombre de
|
||||
* campo.
|
||||
* Los nombres pueden ser especificados en may£sculas o en min£sculas.
|
||||
* $RETURNS$
|
||||
* __dbStructFilter() retorna un nuevo array multidimensional donde
|
||||
* cada elemento esta en la misma estructura que el original
|
||||
* <aEstructura>, pero el array es construido de acuerdo a la lista de
|
||||
* campos en el array <aListaCampos>. Si <aListaCampos> esta vac¡o,
|
||||
* __dbStructFilter() retorna una referencia al array original
|
||||
* <aEstructura>.
|
||||
* $DESCRIPTION$
|
||||
* __dbStructFilter() puede ser usado para crear un subconjunto de la
|
||||
* estructura de la base de datos, basada en una lista de campos dadas.
|
||||
*
|
||||
* Note que los nombres de campos en <aEstructura> DEBEN ser
|
||||
* especificados en may£sculas de lo contrario podr¡a no encontrarse
|
||||
* coincidencia.
|
||||
*
|
||||
* SET EXACT no tiene efecto en el valor retornado.
|
||||
* $EXAMPLES$
|
||||
* LOCAL aEstructura, aLista, aRet
|
||||
* aEstructura := { { "CODIGO", "N", 4, 0 }, ;
|
||||
* { "NOMBRE", "C", 10, 0 }, ;
|
||||
* { "TELEF", "C", 13, 0 }, ;
|
||||
* { "IQ" , "N", 3, 0 } }
|
||||
* aLista := { "IQ", "NOMBRE" }
|
||||
* aRet := __dbStructFilter( aEstructura, aLista )
|
||||
* // { { "IQ", "N", 3, 0 }, { "NAME", "C", 10, 0 } }
|
||||
*
|
||||
* aRet := __dbStructFilter( aEstructura, {} )
|
||||
* ? aRet == aEstruct // .T.
|
||||
*
|
||||
* aLista := { "iq", "NOTEXIST" }
|
||||
* aRet := __dbStructFilter( aEstructura, aLista )
|
||||
* // { { "IQ", "N", 3, 0 } }
|
||||
*
|
||||
* aLista := { "NOTEXIST" }
|
||||
* aRet := __dbStructFilter( aEstruct, aLista ) // {}
|
||||
*
|
||||
*
|
||||
* // Crea un nuevo archivo que contiene parte de la estructura
|
||||
* // original
|
||||
* LOCAL aEstruct, aLista, aRet
|
||||
* USE TEST
|
||||
* aEstruct := DBSTRUCT()
|
||||
* aLista := { "NOMBRE" }
|
||||
* DBCREATE( "elnombre.dbf", __dbStructFilter( aEstruct, aLista ) )
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* __dbStructFilter() es una extensi¢n de Harbour. CA-Cl*pper tiene
|
||||
* una funci¢n interna no documentada llamada __FLEDIT(), que hace lo
|
||||
* mismo. El nuevo nombre da una mejor descripci¢n de que es lo que
|
||||
* la funci¢n hace.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* El archivo de cabecera es dbstruct.ch
|
||||
* La librer¡a es rdd
|
||||
* $SEEALSO$
|
||||
* DBCREATE(),DBSTRUCT(),__dbCopyStruct(),__FLEDIT()*
|
||||
* $END$
|
||||
*/
|
||||
@@ -1,243 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2000 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de: __DIR(), DIR, ADIR()
|
||||
*
|
||||
* Copyright 1999 Chen Kedem <niki@actcom.co.il>
|
||||
* Documentaci¢n en Ingl‚s de: __DIR(), DIR, ADIR()
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __Dir()*
|
||||
* $CATEGORY$
|
||||
* Manejo de Archivos
|
||||
* $ONELINER$
|
||||
* Muestra por pantalla el listado de archivos.
|
||||
* $SYNTAX$
|
||||
* __Dir( [<cFileMask>] ) --> NIL
|
||||
* $ARGUMENTS$
|
||||
* <cFileMask> M scara de archivos para incluir en el retorno de la
|
||||
* funci¢n. Esta podr¡a contener subdirectorios (path) y caracteres
|
||||
* est ndar usados como comodines, segun sean soportados por el sistema
|
||||
* operativo (como * y ?). Si <cFileMask> no contiene la ruta al archivo
|
||||
* entonces SET DEFAULT es usado para mostrar archivos en la m scara.
|
||||
* $RETURNS$
|
||||
* __Dir() siempre retorna NIL.
|
||||
* $DESCRIPTION$
|
||||
* Si ninguna <cFileMask> es dada, __Dir() muestra informaci¢n acerca de
|
||||
* todos los *.dbf en la ruta SET DEFAULT. Esta informaci¢n contiene:
|
||||
* - Nombre del archivo
|
||||
* - Numero de registros
|
||||
* - Fecha de la ultima actualizaci¢n
|
||||
* - Tama¤o de cada archivo.
|
||||
*
|
||||
* Si <cFileMask> es dada, __Dir() lista todos los archivos que
|
||||
* coinciden con la m scara en los siguientes detalles: Nombre,
|
||||
* Extensi¢n, Tama¤o, Fecha.
|
||||
*
|
||||
* El comando DIR es pre-procesado en la funci¢n __Dir() durante el
|
||||
* tiempo de compilaci¢n.
|
||||
*
|
||||
* __Dir() es una funci¢n de compatibilidad, esta fu‚ superada por
|
||||
* DIRECTORY(), la cual devuelve toda la informaci¢n en un arreglo
|
||||
* multidimensional.
|
||||
* $EXAMPLES$
|
||||
* <fixed>
|
||||
* __Dir() // Informaci¢n de todos los DBF en el directorio actual
|
||||
*
|
||||
* __Dir( "*.dbf" ) // Lista todos los DBF en el directorio actual
|
||||
*
|
||||
* // Lista todos los PRG de la librer¡a de ejecuci¢n (RTL) de Harbour
|
||||
* // para sistemas operativos compatibles con DOS
|
||||
* __Dir( "C:\harbour\source\rtl\*.prg" )
|
||||
*
|
||||
* // Lista todos los archivos de la secci¢n p£blica sobre una m quina
|
||||
* // tipo Unix
|
||||
* __Dir( "/pub" )
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Informaci¢n de DBF: CA-Cl*pper muestra nombres de archivos en el
|
||||
* formato 8.3, Harbour muestra los primeros 15 caracteres si un nombre
|
||||
* largo de archivo esta disponible.
|
||||
*
|
||||
* Listado de archivos: para formatear los nombres mostrados usamos algo
|
||||
* as¡ como:
|
||||
* PADR( Nombre, 8 ) + " " + PADR( Ext, 3 )
|
||||
* CA-Cl*pper usa nombres de archivo 8.3, con Harbour probablemente se
|
||||
* podr¡a cortar los nombres largos de archivo para llenar este molde.
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* ADIR()*,DIRECTORY(),SET DEFAULT,DIR
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* DIR
|
||||
* $CATEGORY$
|
||||
* Comando
|
||||
* $ONELINER$
|
||||
* Muestra el listado de archivos
|
||||
* $SYNTAX$
|
||||
* DIR [<cFileMask>]
|
||||
* $ARGUMENTS$
|
||||
* <cFileMask> M scara de archivos para incluir en el retorno de la
|
||||
* funci¢n. Esta podr¡a contener subdirectorios (path) y caracteres
|
||||
* est ndar usados como comdines, segun sean soportados por el sistema
|
||||
* operativo (como * y ?). Si <cFileMask> no contiene la ruta al archivo
|
||||
* entonces SET DEFAULT es usado para mostrar archivos en la m scara.
|
||||
* $DESCRIPTION$
|
||||
* Si ninguna <cFileMask> es dada, __Dir() muestra informaci¢n acerca de
|
||||
* todos los *.dbf en la ruta SET DEFAULT. esta informaci¢n contiene:
|
||||
* - Nombre del archivo
|
||||
* - N£mero de registros
|
||||
* - Fecha de la ultima actualizaci¢n
|
||||
* - Tama¤o de cada archivo.
|
||||
*
|
||||
* Si <cFileMask> es dada,__Dir() lista todos los archivos que coinciden
|
||||
* con la m scara en los siguientes detalles: Nombre, Extensi¢n, Tama¤o,
|
||||
* Fecha.
|
||||
*
|
||||
* El comando DIR es pre-procesado en la funci¢n __Dir() durante el
|
||||
* tiempo de compilaci¢n.
|
||||
*
|
||||
* __Dir() es una funci¢n de compatibilidad, esta fu‚ superada por
|
||||
* DIRECTORY(), la cual devuelve toda la informaci¢n en un arreglo
|
||||
* multidimensional.
|
||||
* $EXAMPLES$
|
||||
* <fixed>
|
||||
* __Dir() // Informaci¢n de todos los DBF en el directorio actual
|
||||
*
|
||||
* __Dir( "*.dbf" ) // Lista todos los DBF en el directorio actual
|
||||
*
|
||||
* // Lista todos los PRG de la librer¡a de ejecuci¢n (RTL) de Harbour
|
||||
* // para sistemas operativos compatibles con DOS
|
||||
* __Dir( "C:\harbour\source\rtl\*.prg" )
|
||||
*
|
||||
* // Lista todos los archivos de la secci¢n p£blica sobre una m quina
|
||||
* // tipo Unix
|
||||
* __Dir( "/pub" )
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Informaci¢n de DBF: CA-Cl*pper muestra nombres de archivos en el
|
||||
* formato 8.3, Harbour muestra los primeros 15 caracteres si un nombre
|
||||
* largo de archivo est disponible.
|
||||
*
|
||||
* Listado de archivos: para formatear los nombres mostrados usamos algo
|
||||
* as¡ como:
|
||||
* PADR( Nombre, 8 ) + " " + PADR( Ext, 3 )
|
||||
* CA-Cl*pper usa nombres de archivo 8.3, con Harbour probablemente se
|
||||
* podr¡a cortar los nombres largos de archivo para llenar este molde.
|
||||
* $SEEALSO$
|
||||
* ADIR()*,DIRECTORY(),SET DEFAULT,__DIR()*
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* ADIR()*
|
||||
* $CATEGORY$
|
||||
* ARRAY
|
||||
* $ONELINER$
|
||||
* Llena arrays pre-definidos con informaci¢n de archivo / directorio
|
||||
* $SYNTAX$
|
||||
* ADIR( [<cFileMask>], [<aNombre>], [<aTamano>], [<aFecha>],
|
||||
* [<aHora>], [<aAtrib>] ) -> nEntradasDirectorio
|
||||
* $ARGUMENTS$
|
||||
* <cFileMask> M scara de archivos para incluir en el retorno de la
|
||||
* funci¢n. Esta podria contener subdirectorios (path) y caracteres
|
||||
* estandar usados como comodines, segun sean soportados por el sistema
|
||||
* operativo (como * y ?). Si <cFileMask> no contiene la ruta al archivo
|
||||
* entonces SET DEFAULT es usado para mostrar archivos en la m scara.
|
||||
*
|
||||
* <aNombre> Array para llenar con el Nombre de los archivos que cumplen
|
||||
* con <cFileMask>. Cada elemento es una cadena de caracteres que
|
||||
* incluye el Nombre y Extensi¢n del archivo sin la ruta de acceso.
|
||||
* Nombre es el nombre largo de archivo como es reportado por el sistema
|
||||
* operativo y no necesariamente en el formato may£sculas 8.3 del D.O.S.
|
||||
*
|
||||
* <aTamano> Array para llenar con el Tama¤o de los archivos que
|
||||
* cumplen con <cFileMask>. Cada elemento es un n£mero entero con el
|
||||
* tama¤o del archivo en bytes.
|
||||
* Los Directorios siempre tienen un tama¤o cero.
|
||||
*
|
||||
* <aFecha> Array para llenar con la Fecha de la ultima modificaci¢n del
|
||||
* archivo que cumplen con <cFileMask>. Cada elemento es del tipo "Date"
|
||||
*
|
||||
* <aHora> Array para llenar con la Hora de la ultima modificaci¢n del
|
||||
* archivo que cumplen con <cFileMask>. Cada elemento es una cadena de
|
||||
* caracteres en el formato: HH:MM:SS.
|
||||
*
|
||||
* <aAtrib> Array para llenar con los atributos de los archivos que
|
||||
* cumplen con <cFileMask>. Cada elemento es una cadena de caracteres,
|
||||
* Vea DIRECTORY() por informaci¢n sobre los valores de los atributos.
|
||||
* Si Ud. pasa un array a <aAtrib>, la funci¢n va a devolver archivos
|
||||
* con los atributos Normal, Oculto (H), sistema (S) y directorio (D)
|
||||
* Si <aAtrib> no es especificado o es distinto de un array solo
|
||||
* archivos con atributo normal porian ser devueltos.
|
||||
*
|
||||
* Nota: Al momento de escribir esta documentaci¢n todavia no hab¡a
|
||||
* informaci¢n sobre el comportamiento de esta funci¢n con los
|
||||
* atributos que poseen las maquinas tipo Unix.
|
||||
* $RETURNS$
|
||||
* ADIR() retorna el n£mero de entradas de archivo que cumplen con la
|
||||
* condici¢n establecida en la m scara <cFileMask>.
|
||||
* $DESCRIPTION$
|
||||
* ADIR() retorna el n£mero de archivos y/o directorios que cumplen con
|
||||
* un formato especificado, este tambien llena una serie de arrays con
|
||||
* Nombre, Tama¤o, Fecha, Hora y Atributo de estos archivos.
|
||||
* El array pasado debe ser pre-inicializado al tama¤o apropiado, vea el
|
||||
* ejemplo m s abajo.
|
||||
* Con motivo de incluir los atributos Oculto (H), sistema (S) o de
|
||||
* directorio (D) <aAtrib> debe ser especificado.
|
||||
*
|
||||
* ADIR() es una funci¢n de compatibilidad, esta fue superada por
|
||||
* DIRECTORY(), la cual devuelve toda la informaci¢n en un arreglo
|
||||
* multidimensional.
|
||||
* $EXAMPLES$
|
||||
* <fixed>
|
||||
* LOCAL aNombre, aTamano, aFecha, aHora, aAtrib, nLen, i
|
||||
* nLen := ADIR( "*.jpg" ) // Nro de archivos JPG files en directorio
|
||||
*
|
||||
* IF nLen > 0
|
||||
* aNombre := Array( nLen ) // hace lugar para guardar la informac.
|
||||
* aTamano := Array( nLen )
|
||||
* aFecha := Array( nLen )
|
||||
* aHora := Array( nLen )
|
||||
* aAtrib := Array( nLen )
|
||||
*
|
||||
* FOR i = 1 TO nLen
|
||||
* ? aNombre[i], aTamano[i], aFecha[i], aHora[i], aAtrib[i]
|
||||
* NEXT
|
||||
* ELSE
|
||||
* ? "Este directorio no tiene ni pelusa"
|
||||
* ENDIF
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* <aNombre> esta yendo a ser llenado con nombres largos de archivo y
|
||||
* no necesariamente con el formato may£sculas 8.3 del D.O.S.
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* ARRAY(),DIRECTORY(),SET DEFAULT
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,240 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2002 Chen Kedem <niki@actcom.co.il>
|
||||
* Documentaci¢n en Ingl‚s de: dirstruc.txt
|
||||
*
|
||||
* Copyright 2002 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de: dirstruc.txt
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
Estructura de directorios de Harbour
|
||||
====================================
|
||||
|
||||
Siguiendo estan los directorios que existen bajo el arbol de
|
||||
Harbour.
|
||||
Bajo cada directorio existente en esta lista hay tambi'n un
|
||||
directorio especial, llamado CVS, el que deber¡a normalmente
|
||||
ser ignorado dado que ‚ste es usado por el CVS para mantener
|
||||
la pista de todos los archivos (lea las FAQ, si Ud. no sabe
|
||||
qu' es el CVS). Note que el rbol puede contener otros
|
||||
directorios vac¡os.
|
||||
Ellos podr¡an ser obsoletos pero no hay una forma sencilla de
|
||||
removerlos completamente (Ud. puede usar cvs update -d en
|
||||
busca de remover directorios vac¡os)
|
||||
|
||||
|
||||
<harbour> - Directorio principal de Harbour
|
||||
| Contiene todos los archivos make y Changelog
|
||||
| (cambios hist¢ricos)
|
||||
|
|
||||
+---bin - Ejecutables y batch de construcci¢n
|
||||
| deber¡a contener harbour.exe y otros ejecutables (*)
|
||||
|
|
||||
+---config - Archivos de Config. (.mk) para the GNU Make system
|
||||
| |
|
||||
| +---bsd - Archivos de Configuraci¢n espec¡ficos para FreeBSD
|
||||
| |
|
||||
| +---dos - Archivos de Configuraci¢n espec¡ficos
|
||||
| | para DOS.
|
||||
| +---linux - Archivos de Config. espec¡ficos para GNU/Linux.
|
||||
| |
|
||||
| +---os2 - Archivos de Configuraci¢n espec¡ficos para OS/2.
|
||||
| |
|
||||
| +---win - Archivos de Config. espec¡ficos para Windows.
|
||||
|
|
||||
|
|
||||
+---contrib - Archivos Miscelaneos de contribuci¢n.
|
||||
| | No son parte del proyecto oficial Harbour
|
||||
| |
|
||||
| +---apollo - funciones para driver de base de datos Apollo
|
||||
| | |
|
||||
| | |
|
||||
| | +---test - Programas de Testeo
|
||||
| |
|
||||
| +---directx - Implementaci¢n de DirectDraw para Windows
|
||||
| | |
|
||||
| | +---lib -
|
||||
| | | |
|
||||
| | | +---vc -
|
||||
| | |
|
||||
| | +---media -
|
||||
| | |
|
||||
| | +---samples - ejemplos de DirectDraw
|
||||
| |
|
||||
| +---dot - Pre-Processor/Dot prompt environment.
|
||||
| |
|
||||
| +---hbclip - Harbour Compatibility Lib. (HCL) para Clipper 5.x
|
||||
| |
|
||||
| +---hbzlib - Interface para 'zlib' libreria de compresion
|
||||
| | | para trabajar con archivos ZIP
|
||||
| | |
|
||||
| | +---doc - Documentos para las funciones ZIP
|
||||
| |
|
||||
| +---hb_struc - Clase Base Class para manejo interno de creaci¢n
|
||||
| | de clases como estructuras
|
||||
| |
|
||||
| +---hgf - Entorno gr fico (GUI) de Harbour
|
||||
| | |
|
||||
| | +---gtk - Implementaci¢n para entorno GTK+
|
||||
| | |
|
||||
| | +---tests - Programas de Testeo
|
||||
| | |
|
||||
| | +---hbgfwin - Implementaci¢n para entorno Windows
|
||||
| |
|
||||
| +---htmllib - HTMLLIB (HTML classes) para Harbour
|
||||
| |
|
||||
| +---libct - CA-T**ls Compatible Library para Harbour.
|
||||
| | |
|
||||
| | +---alt - version altenativa de funciones CT
|
||||
| | |
|
||||
| | +---tests - Programas de Testeo
|
||||
| |
|
||||
| +---libgt - GT library port to Harbour.
|
||||
| | |
|
||||
| | +---doc - Documentos para la librer¡a GT
|
||||
| | |
|
||||
| | +---en - Documentaci¢n en Ingl‚s.
|
||||
| |
|
||||
| +---libmisc - Contribuci¢n Miscel nea
|
||||
| | |
|
||||
| | +---doc - Documentos de contribuci¢n
|
||||
| | | |
|
||||
| | | +---en - Documentaci¢n en Ingl‚s.
|
||||
| | |
|
||||
| | +---tests - Programas de Testeo
|
||||
| |
|
||||
| +---libnf - Libreria Nanforum para Harbour.
|
||||
| |
|
||||
| +---msql - clases Harbour de acceso a mSQL
|
||||
| |
|
||||
| +---mysql - clases Harbour de acceso a MySQL
|
||||
| |
|
||||
| +---odbc - Demostraci¢n de clases de acceso a ODBC
|
||||
| |
|
||||
| +---pdflib - API PDF de bajo nivel para HBDOC para
|
||||
| | PDFlib.
|
||||
| |
|
||||
| +---rdd_ads - RDD para Advantage Database Server.
|
||||
| | |
|
||||
| | +---doc - Documents para Advantage Database Server RDD.
|
||||
| | |
|
||||
| | +---en - Documentaci¢n en Ingl‚s.
|
||||
| |
|
||||
| +---runjava - JAVA runner para Harbour Portable Object (#3)
|
||||
| |
|
||||
| +---samples - Archivos de contribuci¢n miscelaneos
|
||||
| |
|
||||
| +---tprepro - Clases PreProcessor basadas en la
|
||||
| libreria de Ejecuci¢n del Preprocessor
|
||||
|
|
||||
+---doc - Documentaci¢n y notas
|
||||
| |
|
||||
| +---en - Documentaci¢n en Ingl‚s.
|
||||
| |
|
||||
| +---es - Documentaci¢n en Espa¤ol.
|
||||
|
|
||||
+---include - Archivos Include para ambos Harbour y C
|
||||
|
|
||||
+---lib - Librerias de ejecuci¢n para cada plataforma (*)
|
||||
|
|
||||
+---samples - Archivos de ejemplo y peque¤as aplicaciones
|
||||
| |
|
||||
| +---guestbk - Libro de visitantes de Harbour para web
|
||||
| |
|
||||
| +---hscript - Harbour Script.
|
||||
| |
|
||||
| +---misc - unos humildes ejemplos
|
||||
| |
|
||||
| +---pe - Editor
|
||||
|
|
||||
|
|
||||
+---source - Todos los archivos fuentes residen bajo este
|
||||
| | directorio
|
||||
| |
|
||||
| +---common - Funciones Comunes y Optimizador de Expresiones
|
||||
| |
|
||||
| +---compiler - M¢dulo del Compilador de Harbour
|
||||
| |
|
||||
| +---debug - Depurador.
|
||||
| |
|
||||
| +---lang - archivos de mensajes para distintos idiomas
|
||||
| |
|
||||
| +---macro - Macro compilador
|
||||
| |
|
||||
| +---pp - Preprocesesador de Harbour
|
||||
| |
|
||||
| +---rdd - Replaceable Database Driver (RDD)
|
||||
| | | Manejador reemplazable de base de datos
|
||||
| | |
|
||||
| | +---dbfcdx - DBFCDX RDD.
|
||||
| | |
|
||||
| | +---dbfntx - DBFNTX RDD.
|
||||
| | |
|
||||
| | +---nulsys - NULL RDD.
|
||||
| |
|
||||
| +---rtl - Funciones de la librer¡a de ejecuci¢n (RTL)
|
||||
| | | y varias implementaciones de Terminales (GT)
|
||||
| | |
|
||||
| | +---gtcgi - GT subsistema para aplicaciones cgi
|
||||
| | |
|
||||
| | +---gtcrs - Subsistema GT basado en ncurses (unix) (#1)
|
||||
| | |
|
||||
| | +---gtdos - Subsistema GT para compiladores de DOS
|
||||
| | |
|
||||
| | +---gtos2 - Subsistema GT para compiladores de OS/2
|
||||
| | |
|
||||
| | +---gtpca - Subsistema GT para terminales ANSI
|
||||
| | |
|
||||
| | +---gtsln - Subsistema GT basado en slang (unix) (#1)
|
||||
| | |
|
||||
| | +---gtstd - Subsistema GT para ANSI C stream IO.
|
||||
| | |
|
||||
| | +---gtwin - Subsistema GT para compiladores Windows
|
||||
| | |
|
||||
| | +---gt_tpl - Subsistema GT modelo base
|
||||
| |
|
||||
| +---vm - Funciones de la Maquina Virtual (VM) e
|
||||
| internas de la librer¡a de ejecuci¢n (RTL)
|
||||
|
|
||||
+---tests - Programas de Testeo de Harbour
|
||||
|
|
||||
+---utils - Utilidades y herramientas que son parte de Harbour
|
||||
|
|
||||
+---hbdoc - Herramienta generadora de Documentaci¢n
|
||||
|
|
||||
+---hbextern - generador de hbextern.ch
|
||||
|
|
||||
+---hbmk - Utilidad Make de Harbour
|
||||
|
|
||||
+---hbpp - Preprocesador de Harbour como m¢dulo aislado
|
||||
|
|
||||
+---hbrun - Ejecutor de archivos de Objetos Portables de
|
||||
| Harbour (#3)
|
||||
+---hbtest - Test de Regresi¢n para la libreria RTL
|
||||
|
||||
|
||||
Leyenda:
|
||||
=======
|
||||
(*) Deber¡a existir en una construcci¢n final si lo
|
||||
construye Ud. mismo, en una distribuci¢n normal de CVS este
|
||||
directorio est vac¡o ¢ no contiene todos los archivos.
|
||||
|
||||
(#1) Aunque hoy en d¡a existen ports a otros sistemas operativos
|
||||
sus ra¡ces estan en unix.
|
||||
|
||||
(#2) Directorio temporal donde se ponen los archivos objeto
|
||||
.obj u otro (dependiendo de la plataforma) a medida
|
||||
que se construyen los ejecutables y las librer¡as.
|
||||
si Ud. construye el compilador Harbour.
|
||||
|
||||
(#3) (.hrb), Archivos de formato Harbour Portable Object
|
||||
@@ -1,80 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2000 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de: DISKSPACE()
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* DISKSPACE()
|
||||
* $CATEGORY$
|
||||
* Bajo Nivel
|
||||
* $ONELINER$
|
||||
* Obtiene la cantidad de espacio disponible en el disco
|
||||
* $SYNTAX$
|
||||
* DISKSPACE( [<nDisco>] [, <nTipo>] ) --> nDiskbytes
|
||||
* $ARGUMENTS$
|
||||
* <nDrive> es el n£mero de disco del que esta solicitando informaci¢n
|
||||
* donde 1 = A, 2 = B, etc, Si se especifica cero ¢ ning£n
|
||||
* parametro DISKPACE() trabaja sobre la unidad actual de disco
|
||||
* Por defecto es cero.
|
||||
*
|
||||
* <nTipo> es el tipo de espacio que est siendo requerido. Por defecto
|
||||
* es HB_DISK_AVAIL.
|
||||
* $RETURNS$
|
||||
* <nDiskBytes> es el n£mero de bytes en la unidad especificada que
|
||||
* coincide con el tipo requerido.
|
||||
* $DESCRIPTION$
|
||||
* Por defecto esta funci¢n retorna el n£mero de bytes de espacio libre
|
||||
* en el disco actual que esta disponible para el usuario que solicita
|
||||
* la informaci¢n.
|
||||
*
|
||||
* Hay 4 tipos de informaci¢n disponible:
|
||||
*
|
||||
* HB_FS_AVAIL La cantidad de espacio disponible para el usuario que
|
||||
* hace la solicitud. Este valor podr¡a ser menor que
|
||||
* HB_FS_FREE si las asignaciones de espacio en disco
|
||||
* (quotas) son soportadas por el sistema operativo al
|
||||
* tiempo de ejecuci¢n y estas quotas est n asignadas.
|
||||
* De otro modo el valor ser igual al retornado por
|
||||
* HB_FS_FREE.
|
||||
*
|
||||
* HB_FS_FREE La cantidad actual de espacio libre en el disco.
|
||||
*
|
||||
* HB_FS_USED El n£mero de bytes en uso en el en el disco.
|
||||
*
|
||||
* HB_FS_TOTAL La cantidad total de espacio asignado para el usuario
|
||||
* si las quotas estan asignadas. De otro modo el tama¤o
|
||||
* actual del disco.
|
||||
*
|
||||
* Si la informaci¢n es requerida sobre un disco que no esta disponible
|
||||
* un error de ejecuci¢n 2018 ser establecido.
|
||||
* $EXAMPLES$
|
||||
* ? "Ud. tiene diponible: " + STR( DISKSPACE() ) + " bytes " +;
|
||||
* "sobre un total de " + STR( DISKSPACE( 0, HB_FS_TOTAL) )
|
||||
*
|
||||
* Note: Ver ..\tests\tstdspac.prg por otros ejemplos.
|
||||
* $STATUS$
|
||||
* S
|
||||
* $COMPLIANCE$
|
||||
* CA-Cl*pper retorna un valor entero cuya utilidad esta limitada a
|
||||
* discos menores de 2 gigabytes. La versi¢n de Harbour retorna un valor
|
||||
* de punto flotante con 0 decimales si el disco es > 2 gigabytes.
|
||||
* <nTipo> es una extensi¢n de Harbour.
|
||||
* $PLATFORMS$
|
||||
* Dos, Windows, OS/2, Unix
|
||||
* $FILES$
|
||||
* El c¢digo fuente est en diskspac.c
|
||||
* La librer¡a asociada es rtl
|
||||
* El archivo de cabecera es fileio.ch
|
||||
* $END$
|
||||
*/
|
||||
@@ -1,47 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2000 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de: ERRORSYS()
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* ERRORSYS()
|
||||
* $CATEGORY$
|
||||
* Recuperacion de Errores
|
||||
* $ONELINER$
|
||||
* Instala el manejador de errores por defecto
|
||||
* $SYNTAX$
|
||||
* ERRORSYS() --> NIL
|
||||
* $ARGUMENTS$
|
||||
* Ninguno.
|
||||
* $RETURNS$
|
||||
* ERRORSYS() siempre retorna NIL.
|
||||
* $DESCRIPTION$
|
||||
* ERRORSYS() es llamado en el inicio por Harbour e instala el manejador
|
||||
* de errores por defecto. Normalmente no se debe llamar a esta funci¢n
|
||||
* directamente. En su lugar use ERRORBLOCK() para instalar su propio
|
||||
* manejador de errores.
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es 100 % Clipper compatible
|
||||
* $FILES$
|
||||
* El c¢digo fuente est en errorsys.c
|
||||
* La librer¡a asociada es rtl
|
||||
* $SEEALSO$
|
||||
* ERRORBLOCK(),Error class
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,84 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2000 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de: EVAL()
|
||||
*
|
||||
* Copyright 2000 Luiz Rafael Culik <culik@sl.conex.net>
|
||||
* Documentaci¢n en Ingl‚s de: EVAL()
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* EVAL()
|
||||
* $CATEGORY$
|
||||
* Bloque de c¢digo
|
||||
* $ONELINER$
|
||||
* Eval£a un bloque de c¢digo (codeblock)
|
||||
* $SYNTAX$
|
||||
* EVAL( <bBloque> [, <xVal> [,...]]) --> xExpresion
|
||||
* $ARGUMENTS$
|
||||
* <bBloque> Bloque de c¢digo a ser evaluado.
|
||||
*
|
||||
* <xVal> Argumento para ser pasado al bloque de c¢digo.
|
||||
*
|
||||
* <xVal...> Lista de argumentos para ser pasados al bloque de c¢digo.
|
||||
* $RETURNS$
|
||||
* EVAL() retorna <xExpresion>, el valor de la £ltima expresi¢n dentro
|
||||
* del bloque. El valor devuelto puede ser de cualquier tipo v lido.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n eval£a el bloque de c¢digo expresado como <bBloque> al
|
||||
* ejecutarlo y pasarle los par metros como argumentos ,luego retorna su
|
||||
* valor evaluado. Si hay m£ltiples expresiones dentro del bloque de
|
||||
* c¢digo, la £ltima expresi¢n ser el valor de esta funci¢n.
|
||||
*
|
||||
* Si el bloque de c¢digo requiere par metros para ser pasados a ‚ste,
|
||||
* ellos son especificados en la lista de par metros <xVal>.
|
||||
* Cada par metro es separado por una coma dentro de la lista de
|
||||
* par metros y cada expresi¢n es separada por comas dentro de la lista
|
||||
* de expresiones.
|
||||
*
|
||||
* Nota: Un bloque de c¢digo es un valor de datos especial que hace
|
||||
* referencia a c¢digo de programa compilado (contiene c¢digo
|
||||
* ejecutable), puede incluso contener funciones y el hecho que
|
||||
* permite exportar variables est ticas y locales dentro de ‚l,
|
||||
* la da una gran versatilidad.
|
||||
* Aunque las macros y los bloques de c¢digo son similares, las
|
||||
* Las macros son cadenas de caracteres que se compilan durante
|
||||
* la ejecuci¢n de un programa y se ejecutan a continuaci¢n.
|
||||
* Los bloques de c¢digo se compilan junto con los otros PRG
|
||||
* durante la compilaci¢n del programa. Por esto son m s r pidos,
|
||||
* Es posible compilar un bloque de c¢digo en tiempo de ejecuci¢n
|
||||
* desde una cadena de caracteres usando el operador de macros (&).
|
||||
* Un bloque de c¢digo esta compuesto por:
|
||||
* { |<lista argumentos>| <lista expresiones> }
|
||||
* Los separadores verticales deben estar presentes aunque el
|
||||
* bloque no reciba argumentos.
|
||||
* $EXAMPLES$
|
||||
* bBloque = {|arg1, arg2| QOUT( arg1+arg2) }
|
||||
* EVAL( bBloque, "Harbour", " es fabuloso")
|
||||
* $TESTS$
|
||||
* Ver ejemplos.
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es 100 % compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a es vm
|
||||
* $SEEALSO$
|
||||
* AEVAL(),DBEVAL()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,447 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2000 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de:
|
||||
* Readme, hb_gcAlloc(), hb_gcFree(), hb_gcLockItem(),
|
||||
* hb_gcUnlockItem(), hb_gcCollectAll(), hb_gcItemRef(), HB_GCALL()
|
||||
*
|
||||
* Copyright 2000 brian Brian Hays <bhays@abacuslaw.com>
|
||||
* Documentaci¢n en Ingl‚s de:
|
||||
* Readme, hb_gcAlloc(), hb_gcFree(), hb_gcLockItem(),
|
||||
* hb_gcUnlockItem(), hb_gcCollectAll(), hb_gcItemRef(), HB_GCALL()
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* Colector de memoria
|
||||
* $CATEGORY$
|
||||
* Documento
|
||||
* $ONELINER$
|
||||
* L‚ame con informaci¢n de la recolecci¢n de memoria.
|
||||
* $DESCRIPTION$
|
||||
* El recolector de memoria (Garbage Collector ¢ GC) usa la siguiente
|
||||
* l¢gica:
|
||||
* - primero recolectar todas las ubicaciones de memoria que puedan
|
||||
* constituirse en "basura"
|
||||
* - luego inspeccionar todas las variables, por si esos bloques est n
|
||||
* todav¡a referenciados.
|
||||
*
|
||||
* Note que s¢lo arrays, objetos y bloques de c¢digo son recolectados
|
||||
* porque esos son los £nicos tipos de datos que pueden causar:
|
||||
* auto-referencias
|
||||
* ( a [1] : = a )
|
||||
* ¢ referencias circulares:
|
||||
* ( a[1] := b; b[1] := c; c[1] := a )
|
||||
* que no pueden ser apropiadamente desasignadas por un simple conteo
|
||||
* de referencia.
|
||||
*
|
||||
* Como todas las variables en Harbour son almacenadas dentro de algunas
|
||||
* tablas disponibles (eval stack, tabla de memvars y array de variables
|
||||
* est ticas), entonces chequear si la referencia es todav¡a activa es
|
||||
* bastante f cil y no requiere ning£n tratamiento especial durante la
|
||||
* la asignaci¢n de memoria. Adicionalmente el recolector de memoria
|
||||
* inspecciona algunos datos internos usados por la implementaci¢n de
|
||||
* objetos de Harbour que tambi‚n almacena algunos valores que pueden
|
||||
* contener referencias de memoria. Estos datos son usados para inicia-
|
||||
* lizar variables de instancia de la clase, y son almacenadas en
|
||||
* variables compartidas por la clase.
|
||||
*
|
||||
* En casos especiales cuando el valor de una variable de Harbour es
|
||||
* almacenada internamente en alg£n area est tica (a nivel de lenguaje
|
||||
* C ¢ asembler), por ejemplo SETKEY() almacena bloques de c¢digo que
|
||||
* ser n evaluados cuando se presione una tecla, el recolector de
|
||||
* memoria no ser capaz de inspeccionar esos valores porque este no
|
||||
* conoce su ubicaci¢n. Esto podr¡a ocasionar que algunos bloques de
|
||||
* memoria sean liberados prematuramente. Para prevenir la prematura
|
||||
* desasignaci¢n de esos bloques ellos deben ser bloqueados para el
|
||||
* recolector de memoria.
|
||||
*
|
||||
* Para ello se definen distintos estados del bloque de memoria:
|
||||
*
|
||||
* #define HB_GC_UNLOCKED 0 // desbloqueado
|
||||
* #define HB_GC_LOCKED 1 // No recolectar el bloque de memoria
|
||||
* #define HB_GC_USED_FLAG 2 // bit para la bandera usado/no usado
|
||||
*
|
||||
* El bloque de memoria puede ser bloqueado con hb_gcLockItem(), m‚todo
|
||||
* recomendado si un ¡tem de estructura es usado ¢ con la funci¢n
|
||||
* hb_gcLock() si un puntero directo a memoria es usado.
|
||||
* El bloque de memoria puede ser desbloqueado por hb_gcUnlockItem() ¢
|
||||
* hb_gcUnlock().
|
||||
*
|
||||
* N¢tese sin embargo que todas las variables pasadas a una funci¢n de
|
||||
* bajo nivel son pasadas mediante la pila de evaluaci¢n (eval stack),
|
||||
* as¡ ellas no necesitan bloquearse durante la llamada a la funci¢n.
|
||||
* El bloqueo puede ser requerido, si un valor pasado es copiado dentro
|
||||
* de alg£n rea est tica para hacerla disponible para otras funciones
|
||||
* de bajo nivel, llamadas despu‚s de la salida de la funci¢n que
|
||||
* almacena el valor. Esto es requerido porque el valor es removido de
|
||||
* la pila de evaluaci¢n despu‚s de la llamada a la funci¢n y esta no
|
||||
* puede seguir siendo referenciada por otras variables.
|
||||
*
|
||||
* Sin embargo la inspecci¢n de todas las variables puede ser una
|
||||
* operaci¢n de un gran consumo de tiempo. Esto requiere que todos los
|
||||
* arrays asignados tengan que ser recorridos a trav‚s de todos sus
|
||||
* elementos para encontrar m s arrays.
|
||||
* Tambi‚n todos los bloques de c¢digo son inspeccionados, en busca de
|
||||
* variables locales separadas que ellos estan referenciando. Por esta
|
||||
* esta raz¢n, la busqueda por bloques de memoria no referenciados es
|
||||
* realizada durante los estados inactivos.
|
||||
*
|
||||
* El estado inactivo es el estado cuando no hay un c¢digo real de la
|
||||
* aplicaci¢n ejecut ndose. Por ejemplo, el c¢digo del usuario es
|
||||
* detenido durante 0.1 segundo por INKEY(0.1) - Harbour esta chequeando
|
||||
* s¢lo el teclado durante este tiempo. Esto deja sin embargo suficiente
|
||||
* tiempo para muchas otras tareas en segundo plano. Una de esas tareas
|
||||
* en segundo plano, puede ser la b£squeda de bloques de memoria no
|
||||
* referenciados.
|
||||
*
|
||||
* Asignando memoria </par>
|
||||
* -----------------
|
||||
*
|
||||
* El recolector de memoria, recoge bloques de memoria asignados con
|
||||
* llamadas a la funci¢n hb_gcAlloc(). La memoria asignada por
|
||||
* hb_gcAlloc() deber¡a ser liberada con la funci¢n hb_gcFree().
|
||||
*
|
||||
*
|
||||
* Bloqueando memoria </par>
|
||||
* ------------------
|
||||
*
|
||||
* La memoria asignada con hb_gcAlloc() deber¡a ser bloqueada para
|
||||
* prevenir una autom tica liberaci¢n como un puntero de memoria si no
|
||||
* es almacenado dentro de una variable a nivel de Harbour. Todos los
|
||||
* valores de Harbour (items), almacenados internamente en reas
|
||||
* est ticas de lenguaje C deben ser bloqueadas.
|
||||
* Vea hb_gcLockItem() y hb_gcUnlockItem() para m s informaci¢n.
|
||||
*
|
||||
*
|
||||
* La recoleci¢n de memoria </par>
|
||||
* ------------------------
|
||||
*
|
||||
* Durante la b£squeda de memoria no referenciada, el recolector de
|
||||
* memoria (RM) est usando un algoritmo llamado "mark & sweep", marcar
|
||||
* y barrer. Este es realizado en tres etapas:
|
||||
*
|
||||
* 1) Marcar todos los bloques asignados por el RM con un bandera:
|
||||
* "sin uso"
|
||||
*
|
||||
* 2) barrer (buscar) todos los lugares conocidos y limpiar las banderas
|
||||
* sin uso por los bloques de memoria que son referenciados all¡;
|
||||
*
|
||||
* 3) finalizar recolectando por desasignaci¢n de todos los bloques de
|
||||
* memoria que a£n estan marcados como sin uso y que no est n bloqueados.
|
||||
*
|
||||
* Para acelerar las cosas un poco, la etapa de marca es simplificada
|
||||
* por la inversi¢n del significado de la bandera "sin uso". Despu‚s de
|
||||
* la desasignaci¢n de los bloques sin uso, todos los bloques todav¡a
|
||||
* activos son marcados con la bandera "usado" as¡ nosotros podemos
|
||||
* invertir el significado de esta bandera al estado "sin uso" en la
|
||||
* pr¢xima recoleci¢n.
|
||||
* Todos los bloques de memoria nuevos ¢ sin bloquear son autom tica-
|
||||
* mente marcados como "sin uso" usando la bandera actual, lo cual
|
||||
* asegura que todos los bloques de memoria son marcados con la misma
|
||||
* bandera antes de que la etapa de barrido comience.
|
||||
*
|
||||
* Ver hb_gcCollectAll() y hb_gcItemRef()
|
||||
*
|
||||
*
|
||||
* Llamando al recolector de memoria desde c¢digo Harbour
|
||||
* ------------------------------------------------------
|
||||
*
|
||||
* El RM puede ser llamado directamente desde un programa en Harbour.
|
||||
* Esto es £til en situaciones donde no hay estados inactivos
|
||||
* disponibles ¢ la aplicaci¢n esta trabajando en un bucle sin
|
||||
* interacci¢n con el usuario y hay muchas asignaciones de memoria.
|
||||
* Vea HB_GCALL() por una explicaci¢n de como llamar a esta funci¢n
|
||||
* desde el c¢digo de Harbour.
|
||||
* $SEEALSO$
|
||||
* hb_gcAlloc(),hb_gcFree(),hb_gcLockItem(),hb_gcUnlockItem(),hb_gcCollectAll(),hb_gcItemRef(),HB_GCALL(),HB_IDLESTATE()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* hb_gcAlloc()
|
||||
* $CATEGORY$
|
||||
* Colector de memoria
|
||||
* $ONELINER$
|
||||
* Asigna memoria que ser recolectada por el recolector de memoria.
|
||||
* $SYNTAX$
|
||||
* #include <hbapi.h>
|
||||
* void *hb_gcAlloc( ULONG ulSize, HB_GARBAGE_FUNC_PTR pCleanupFunc );
|
||||
* $ARGUMENTS$
|
||||
* <ulSize> es el tama¤o solicitado del bloque de memoria.
|
||||
*
|
||||
* <pCleanupFunc> es un Puntero a la funci¢n HB_GARBAGE_FUNC que ser
|
||||
* llamada directamente antes de la liberaci¢n del bloque
|
||||
* de memoria sin uso ¢ NULL. Esta funci¢n deber¡a
|
||||
* liberar toda otra memoria asignada y almacenada dentro
|
||||
* del bloque de memoria.
|
||||
* Por ejemplo, esta libera todos los items almacenados dentro del array
|
||||
* La funci¢n recibe un s¢lo par metro: el puntero a la memoria asignada
|
||||
* por hb_gcAlloc().
|
||||
* $RETURNS$
|
||||
* Devuelve un puntero a la memoria asignada ¢ esta generar un error
|
||||
* interno irrecuperable.
|
||||
* $DESCRIPTION$
|
||||
* hb_gcAlloc() es usada para asignar la memoria que ser rastreada por
|
||||
* el RM. Este permite una apropiada liberaci¢n de memoria en el caso
|
||||
* de variables auto-referenciadas ¢ con referencias cruzadas a nivel
|
||||
* de Harbour.
|
||||
* La memoria asignada con esta funci¢n deber¡a ser liberada con la
|
||||
* funci¢n hb_gcFree() ¢ esta ser autom ticamente desasignada por el
|
||||
* RM si no esta bloqueada ¢ si no esta referenciada por alguna
|
||||
* variable a nivel de Harbour.
|
||||
* $EXAMPLES$
|
||||
* Vea ../source/vm/arrays.c
|
||||
*
|
||||
* PHB_BASEARRAY pArr = (PHB_BASEARRAY) :
|
||||
* hb_gcAlloc( sizeof( HB_BASEARRAY), ;
|
||||
* hb_arrayReleaseGarbage );
|
||||
* $STATUS$
|
||||
* C
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es una extensi¢n de Harbour.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* Archivo fuente: ../source/vm/garbage.c
|
||||
* $SEEALSO$
|
||||
* hb_gcFree(),hb_gcLockItem(),hb_gcUnlockItem()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* hb_gcFree()
|
||||
* $CATEGORY$
|
||||
* Colector de memoria
|
||||
* $ONELINER$
|
||||
* Libera la memoria que fu‚ asignada con hb_gcAlloc().
|
||||
* $SYNTAX$
|
||||
* void hb_gcFree( void *pMemoryPtr );
|
||||
* $ARGUMENTS$
|
||||
* <pMemoryPtr> es el puntero a la memoria a liberar. Este puntero de
|
||||
* memoria debe ser asignado con la funci¢n hb_gcAlloc().
|
||||
* $RETURNS$
|
||||
* Nada.
|
||||
* $DESCRIPTION$
|
||||
* La funci¢n hb_gcFree() es usada para liberar la memoria que fu‚
|
||||
* asignada con la funci¢n hb_gcAlloc().
|
||||
* $EXAMPLES$
|
||||
* Vea ../source/vm/arrays.c
|
||||
* hb_gcFree( (void *) pBaseArray ); // puntero al array a liberar
|
||||
* $STATUS$
|
||||
* C
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es una extensi¢n de Harbour.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* Archivo fuente: ../source/vm/garbage.c
|
||||
* $SEEALSO$
|
||||
* hb_gcAlloc(),hb_gcLockItem(),hb_gcUnlockItem()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* hb_gcLockItem()
|
||||
* $CATEGORY$
|
||||
* Colector de memoria
|
||||
* $ONELINER$
|
||||
* Bloquea la memoria para prevenir la desasignaci¢n por el RM.
|
||||
* $SYNTAX$
|
||||
* void hb_gcLockItem( HB_ITEM_PTR pItem );
|
||||
* $ARGUMENTS$
|
||||
* <pItem> es el puntero a la estructura item que ser bloqueada.
|
||||
* El item pasado puede ser de cualquier tipo de datos, aunque
|
||||
* arrays de objetos y bloques de c¢digos son bloqueados
|
||||
* solamente. Otros tipos de datos no necesitan bloqueo, as¡
|
||||
* que ellos son simplemente ignorados.
|
||||
* $RETURNS$
|
||||
* Nada.
|
||||
* $DESCRIPTION$
|
||||
* La funci¢n hb_gcLockItem() es usada para bloquear el puntero de
|
||||
* memoria almacenado en la estructura item pasada. Este suprime la
|
||||
* liberaci¢n de memoria si el RM no encuentra alguna referencia a
|
||||
* este puntero.
|
||||
* El RM almacena un contador de bloqueo y cada llamada a esta funci¢n
|
||||
* incrementa el contador. El item es bloqueado si el contador es mayor
|
||||
* que cero.
|
||||
* $EXAMPLES$
|
||||
* Vea ../source/rtl/setkey.c
|
||||
* // bloquea un codeblock para prevenir la liberaci¢n por el RM
|
||||
* hb_gcLockItem( sk_list_tmp-> pAction );
|
||||
* $STATUS$
|
||||
* C
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es una extensi¢n de Harbour.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* Archivo fuente: ../source/vm/garbage.c
|
||||
* $SEEALSO$
|
||||
* hb_gcAlloc(),hb_gcFree(),hb_gcUnlockItem()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* hb_gcUnlockItem()
|
||||
* $CATEGORY$
|
||||
* Colector de memoria
|
||||
* $ONELINER$
|
||||
* Desbloquea la memoria para prevenir la liberaci¢n por el RM
|
||||
* $SYNTAX$
|
||||
* void hb_gcUnlockItem( HB_ITEM_PTR pItem );
|
||||
* $ARGUMENTS$
|
||||
* <pItem> es el puntero a la estructura item que ser bloqueada.
|
||||
* El item pasado puede ser de cualquier tipo de datos, aunque
|
||||
* arrays de objetos y bloques de c¢digos son bloqueados
|
||||
* solamente. Otros tipos de datos no necesitan bloqueo as¡
|
||||
* que ellos son simplemente ignorados.
|
||||
* $RETURNS$
|
||||
* Nada.
|
||||
* $DESCRIPTION$
|
||||
* La funci¢n hb_gcUnlockItem() es usada para desbloquear el puntero de
|
||||
* memoria almacenado en la estructura item pasada, que fu‚ previamente
|
||||
* bloqueada con una llamada a hb_gcLockItem(). Esto permite liberar
|
||||
* la memoria durante la recolecci¢n de memoria sin uso si el RM no
|
||||
* encuentra ninguna referencia a este puntero. El RM almacena el
|
||||
* contador de bloqueo, cada llamda a esta funci¢n decrementa el
|
||||
* contador.
|
||||
* Esta funci¢n no libera la memoria almacenada dentro del item,
|
||||
* la memoria debe ser desasignada sin embargo durante la recoleci¢n
|
||||
* de memoria sin uso m s cercana, si el contador de bloqueo es
|
||||
* igual a cero y el puntero de memoria no es referenciado por
|
||||
* ninguna variable a nivel de Harbour.
|
||||
* $EXAMPLES$
|
||||
* Vea ../source/rtl/setkey.c
|
||||
* hb_gcUnlockItem( sk_list_tmp-> pAction ); // libera el item
|
||||
* $STATUS$
|
||||
* C
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es una extensi¢n de Harbour.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* Archivo fuente: ../source/vm/garbage.c
|
||||
* $SEEALSO$
|
||||
* hb_gcAlloc(),hb_gcFree(),hb_gcLockItem()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* hb_gcCollectAll()
|
||||
* $CATEGORY$
|
||||
* Colector de memoria
|
||||
* $ONELINER$
|
||||
* Examina todos los bloques de memoria y libera la memoria sin uso.
|
||||
* $SYNTAX$
|
||||
* void hb_gcCollectAll( void );
|
||||
* $ARGUMENTS$
|
||||
* Ninguno.
|
||||
* $RETURNS$
|
||||
* Nada.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n examina la pila de evaluaci¢n, las tablas de memvars,
|
||||
* el array de variables est ticas y las tablas de clases creadas en
|
||||
* busca de bloques de memoria referenciados. Despu‚s de examinar todos
|
||||
* los bloques de memoria sin uso y los bloques que no estan bloqueados,
|
||||
* son liberados.
|
||||
* $STATUS$
|
||||
* C
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es una extensi¢n de Harbour.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* Archivo fuente: ../source/vm/garbage.c
|
||||
* $SEEALSO$
|
||||
* hb_gcAlloc(),hb_gcFree(),hb_gcLockItem(),hb_gcUnlockItem()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* hb_gcItemRef()
|
||||
* $CATEGORY$
|
||||
* Colector de memoria
|
||||
* $ONELINER$
|
||||
* Marca la memoria para prevenir la desasignaci¢n por el RM.
|
||||
* $SYNTAX$
|
||||
* void hb_gcItemRef( HB_ITEM_PTR pItem );
|
||||
* $ARGUMENTS$
|
||||
* <pItem> es el puntero a la estructura item que ser examinada.
|
||||
* El item pasado puede ser de cualquier tipo de datos, aunque
|
||||
* arrays de objetos y bloques de c¢digos son bloqueados
|
||||
* solamente. Otros tipos de datos no necesitan bloqueo as¡
|
||||
* que ellos son simplemente ignorados.
|
||||
* $RETURNS$
|
||||
* Nada.
|
||||
* $DESCRIPTION$
|
||||
* El recolector de memoria usa la funci¢n hb_gcItemRef() durante la
|
||||
* inspecci¢n de punteros de memoria referenciados.
|
||||
* Esta funci¢n chequea el tipo del item pasado y examina recursivamente
|
||||
* todos los otros bloques de memoria referenciados por este item, si
|
||||
* ‚ste es un array un objeto ¢ un bloque de c¢digo
|
||||
*
|
||||
* NOTA: Esta funci¢n es reservada para el recolector de memoria (RM)
|
||||
* solamente. Esta NO debe ser llamada desde el c¢digo del usuario
|
||||
* llamarla puede causar resultados impredecibles (bloques de
|
||||
* memoria referenciados por el item pasado pueden ser liberados
|
||||
* prematuramente durante la recoleci¢n de memoria m s cercana).
|
||||
* $STATUS$
|
||||
* C
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es una extensi¢n de Harbour.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* Archivo fuente: ../source/vm/garbage.c
|
||||
* $SEEALSO$
|
||||
* hb_gcAlloc(),hb_gcFree(),hb_gcLockItem(),hb_gcUnlockItem()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* HB_GCALL()
|
||||
* $CATEGORY$
|
||||
* Colector de memoria
|
||||
* $ONELINER$
|
||||
* Inspecciona la memoria y libera los bloques de memoria sin uso
|
||||
* $SYNTAX$
|
||||
* HB_GCALL()
|
||||
* $ARGUMENTS$
|
||||
* Ninguno
|
||||
* $RETURNS$
|
||||
* NIL
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n libera todos los bloques de memoria que son considerados
|
||||
* como "basura".
|
||||
* $STATUS$
|
||||
* Harbour
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es una extensi¢n de Harbour.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* Archivo fuente: ../source/vm/garbage.c
|
||||
* $SEEALSO$
|
||||
* hb_gcCollectAll()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,500 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* Licencia GNU
|
||||
* $CATEGORY$
|
||||
* Documento
|
||||
* $ONELINER$
|
||||
* Licencia GNU Parte 1
|
||||
* $DESCRIPTION$
|
||||
*
|
||||
* GNU General Public License </par>
|
||||
* Licencia P£blica General
|
||||
* Versi¢n 2, Junio de 1991 </par>
|
||||
*
|
||||
* Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA </par>
|
||||
*
|
||||
* -----------------------------------------------------------------
|
||||
*
|
||||
* Traducci¢n al Espa¤ol : Diciembre de 2001 por
|
||||
* Jos‚ Mar¡a Sar chaga Fischer <jsarachaga@garaitia.com>
|
||||
* Contribuciones:
|
||||
* 13-Dic-2002 Fabi n Rodr¡guez <fabian.rodriguez@toxik.com>
|
||||
* Ene 2003 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
*
|
||||
* This is an unofficial translation of the GNU General Public
|
||||
* License into spanish. It was not published by the Free Software
|
||||
* Foundation, and does not legally state the distribution terms for
|
||||
* software that uses the GNU GPL--only the original English text of
|
||||
* the GNU GPL does that. However, we hope that this translation
|
||||
* will help spanish speakers understand the GNU GPL better.
|
||||
*
|
||||
* -----------------------------------------------------------------
|
||||
*
|
||||
* Esta es una traducci¢n NO oficial de la "GNU General Public
|
||||
* License" al espa¤ol. No fu‚ publicada por la "FSF Free Software
|
||||
* Foundation", y no respalda legalmente los t‚rminos de
|
||||
* distribuci¢n del software que utiliza la "GNU GPL", s¢lo el texto
|
||||
* original en ingl‚s lo hace. Sin embargo esperamos que esta
|
||||
* traducci¢n ayude a las personas de habla hispana a entender mejor
|
||||
* la "GPL".
|
||||
*
|
||||
* -----------------------------------------------------------------
|
||||
*
|
||||
* Toda persona tiene permiso de copiar y distribuir copias fieles
|
||||
* de este documento de licencia, pero no se permite hacer
|
||||
* modificaciones.
|
||||
*
|
||||
*
|
||||
* <b>PREAMBULO</b>
|
||||
*
|
||||
* Los contratos de licencia de la mayor parte del software est n
|
||||
* dise¤ados para quitarle su libertad de compartir y modificar
|
||||
* dicho software. En contraste, la "GNU General Public License"
|
||||
* pretende garantizar su libertad de compartir y modificar el
|
||||
* software "libre", esto es para asegurar que el software es libre
|
||||
* para todos sus usuarios. Esta licencia p£blica general se aplica
|
||||
* a la mayor¡a del software de la "FSF Free Software Foundation"
|
||||
* (Fundaci¢n para el Software Libre) y a cualquier otro programa de
|
||||
* software cuyos autores as¡ lo establecen. Algunos otros programas
|
||||
* de software de la Free Software Foundation est n cubiertos por la
|
||||
* "LGPL Library General Public License" (Licencia P£blica General
|
||||
* para Librer¡as), la cual puede aplicar a sus programas tambi‚n.
|
||||
*
|
||||
* Cuando hablamos de software libre, nos referimos a libertad, no
|
||||
* precio. Nuestras licencias "General Public Licenses" est n
|
||||
* dise¤adas para asegurar que:
|
||||
*
|
||||
* 1. usted tiene la libertad de distribuir copias del software
|
||||
* libre (y cobrar por ese sencillo servicio si as¡ lo desea)
|
||||
* 2. recibir el c¢digo fuente (o tener la posibilidad de obtenerlo
|
||||
* si as¡ lo desea)
|
||||
* 3. que usted puede modificar el software o utilizar partes de
|
||||
* ‚l en nuevos programas de software libre
|
||||
* 4. que usted est‚ enterado de que tiene la posibilidad de hacer
|
||||
* todas estas cosas.
|
||||
*
|
||||
* Para proteger sus derechos, necesitamos hacer restricciones que
|
||||
* prohiban a cualquiera denegarle estos derechos o a pedirle que
|
||||
* renuncie a ellos. Estas restricciones se traducen en algunas
|
||||
* responsabilidades para usted, si distribuye copias del software,
|
||||
* ¢ si lo modifica.
|
||||
*
|
||||
* Por ejemplo, si usted distribuye copias de un programa, ya sea
|
||||
* gratuitamente o por alg£n importe, usted debe dar al que recibe
|
||||
* el software todos los derechos que usted tiene sobre el mismo.
|
||||
* Debe asegurarse tambi‚n que reciban el c¢digo fuente o bi‚n que
|
||||
* puedan obtenerlo si lo desean. Y por £ltimo debe mostrarle a esa
|
||||
* persona estos t‚rminos, para que conozca los derechos de que goza.
|
||||
*
|
||||
* Nosotros protegemos sus derechos en 2 pasos: (1) protegiendo los
|
||||
* derechos de autor del software y (2) ofreciendole este contrato
|
||||
* de licencia que le otorga permiso legal para copiar, distribuir
|
||||
* y modificar el software.
|
||||
*
|
||||
* Adem s, para la protecci¢n de los autores de software y la
|
||||
* nuestra, queremos asegurarnos de que toda persona entienda que no
|
||||
* existe ninguna garant¡a del software libre. Si el software es
|
||||
* modificado por alguien y lo distribuye, queremos que quienes lo
|
||||
* reciban sepan que la copia que obtuvieron no es la original, por
|
||||
* lo que cualquier problema provocado por quien realiz¢ la
|
||||
* modificaci¢n no afectar la reputaci¢n del autor original.
|
||||
*
|
||||
* Finalmente, cualquier programa de software libre es constantemente
|
||||
* amenazado por las patentes de software. Deseamos evadir el peligro
|
||||
* de que los re-distribuidores de un programa de software libre
|
||||
* obtenga individualmente los derechos de patente con el fin de
|
||||
* volver dicho programa propietario. Para prevenir esto, hemos
|
||||
* dejado en claro que cualquier patente deber ser licenciada para
|
||||
* el uso libre de toda persona o que no est‚ licenciada del todo.
|
||||
*
|
||||
* A continuaci¢n se describen con precisi¢n los t‚rminos y
|
||||
* condiciones para copiar, distribuir y modificar el software.
|
||||
*
|
||||
* -----------------------------------------------------------------
|
||||
*
|
||||
*
|
||||
* <b>TERMINOS Y CONDICIONES PARA COPIA, MODIFICACION Y DISTRIBUCION</b>
|
||||
*
|
||||
* 0. Esta licencia aplica a cualquier programa o trabajo que
|
||||
* contenga una nota puesta por el propietario de los derechos del
|
||||
* trabajo estableciendo que su trabajo puede ser distribuido bajo
|
||||
* los t‚rminos de esta "GPL General Public License".
|
||||
* El "Programa", utilizado en lo subsecuente, se refiere a
|
||||
* cualquier programa o trabajo original, y el "trabajo basado en
|
||||
* el Programa" significa ya sea el Programa o cualquier trabajo
|
||||
* derivado del mismo bajo la ley de derechos de autor: es decir,
|
||||
* un trabajo que contenga el Programa o alguna porci¢n de ‚l, ya
|
||||
* sea ¡ntegra o con modificaciones y/o traducciones a otros idiomas.
|
||||
* De aqu¡ en adelante "traducci¢n" estar incluida (pero no
|
||||
* limitada a) en el t‚rmino "modificaci¢n", y la persona a la que
|
||||
* se aplique esta licencia ser llamado "usted".
|
||||
*
|
||||
* Otras actividades que no sean copia, distribuci¢n o
|
||||
* modificaci¢n no est n cubiertas en esta licencia y est n fuera de
|
||||
* su alcance. El acto de ejecutar el programa no est restringido,
|
||||
* y la salida de informaci¢n del programa est cubierta s¢lo si su
|
||||
* contenido constituye un trabajo basado en el Programa (es
|
||||
* independiente de si fue resultado de ejecutar el programa). Si
|
||||
* esto es cierto ¢ no depende de la funci¢n del programa.
|
||||
*
|
||||
*
|
||||
* 1. Usted puede copiar y distribuir copias fieles del c¢digo
|
||||
* fuente del programa tal como lo recibi¢, en cualquier medio,
|
||||
* siempre que proporcione de manera conciente y apropiada una nota
|
||||
* de derechos de autor y una declaraci¢n de no garant¡a, adem s de
|
||||
* mantener intactas todas las notas que se refieran a esta licencia
|
||||
* y a la ausencia de garant¡a, y que le proporcione a las dem s
|
||||
* personas que reciban el programa una copia de esta licencia junto
|
||||
* con el Programa.
|
||||
* Usted puede aplicar un cargo por el acto f¡sico de transferir una
|
||||
* copia, y ofrecer protecci¢n de garant¡a por una cuota, lo cual no
|
||||
* compromete a que el autor original del Programa responda por tal
|
||||
* efecto.
|
||||
*
|
||||
*
|
||||
* 2. Usted puede modificar su copia del Programa o de cualquier
|
||||
* parte de el, formando as¡ un trabajo basado en el Programa, y
|
||||
* copiar y distribuir tales modificaciones o bi‚n trabajar bajo los
|
||||
* t‚rminos de la secci¢n 1 arriba descrita, siempre que cumpla con
|
||||
* las siguientes condiciones:
|
||||
*
|
||||
* A. Usted debe incluir en los archivos modificados notas
|
||||
* declarando que modific¢ dichos archivos y la fecha de los
|
||||
* cambios.
|
||||
* B. Usted debe notificar que ese trabajo que distribuye contiene
|
||||
* totalmente o en partes al Programa, y que debe ser licenciado
|
||||
* como un conjunto sin cargo alguno a cualquier otra persona
|
||||
* que reciba sus modificaciones bajo los t‚rminos de esta
|
||||
* Licencia.
|
||||
* C. Si el programa modificado lee normalmente comandos
|
||||
* interactivamente cuando es ejecutado, usted debe presentar un
|
||||
* aviso, cuando el programa inicie su ejecuci¢n en ese modo
|
||||
* interactivo de la forma m s ordinaria, que contenga una nota
|
||||
* de derechos de autor y un aviso de que no existe garant¡a
|
||||
* alguna (o que s¡ existe si es que usted la proporciona) y que
|
||||
* los usuarios pueden redistribuir el programa bajo esas
|
||||
* condiciones, e informando al usuario como puede ver una copia
|
||||
* de esta Licencia. (Excepci¢n: si el programa en s¡ es
|
||||
* interactivo pero normalmente no muestra notas, su trabajo
|
||||
* basado en el Programa no tiene la obligaci¢n de mostrar tales
|
||||
* notas)
|
||||
*
|
||||
* Estos requerimientos aplican al trabajo modificado como un todo.
|
||||
* Si existen secciones identificables de tal trabajo que no son
|
||||
* derivadas del Programa original, y pueden ser razonablemente
|
||||
* consideradas trabajos separados e independientes como tal,
|
||||
* entonces esta Licencia y sus t‚rminos no aplican a dichas
|
||||
* secciones cuando usted las distribuye como trabajos separados.
|
||||
* Pero cuando usted distribuye las mismas secciones como parte de
|
||||
* un todo, que es un trabajo basado en el Programa, la distribuci¢n
|
||||
* del conjunto debe ser bajo los t‚rminos de esta Licencia, cuyos
|
||||
* permisos para otras personas que obtengan el software se
|
||||
* extienden para todo el software, as¡ como para cada parte de ‚l,
|
||||
* independientemente de qui‚n lo escribi¢.
|
||||
*
|
||||
* No es la intenci¢n de esta secci¢n de reclamar derechos o pelear
|
||||
* sus derechos sobre trabajos hechos enteramente por usted, en lugar
|
||||
* de eso, la intenci¢n es ejercer el derecho de controlar la
|
||||
* distribuci¢n de los trabajos derivados o colectivos basados en el
|
||||
* Programa.
|
||||
*
|
||||
* Adicionalmente, el simple agregado de otro trabajo NO basado en
|
||||
* el Programa al Programa en cuesti¢n (o a un trabajo basado en el
|
||||
* Programa) en alg£n medio de almacenamiento no pone el otro
|
||||
* trabajo bajo el alcance de esta Licencia.
|
||||
*
|
||||
*
|
||||
* 3. Usted puede copiar y distribuir el Programa (¢ un trabajo
|
||||
* basado en ‚l, bajo la Secci¢n 2) en c¢digo objeto ¢ en forma
|
||||
* de ejecutable bajo los t‚rminos de las secciones 1 y 2 arriba
|
||||
* descritas siempre que cumpla los siguientes requisitos:
|
||||
*
|
||||
* A. Acompa¤arlo con el correspondiente c¢digo fuente legible por
|
||||
* la m quina, que debe ser distribu¡do bajo los t‚rminos de las
|
||||
* secciones 1 y 2 y en un medio comunmente utilizado para el
|
||||
* intercambio de software, ¢
|
||||
* B. Acompa¤arlo con una oferta escrita, v lida por al menos 3
|
||||
* a¤os y para cualquier persona, por un cargo no mayor al costo
|
||||
* que conlleve la distribuci¢n f¡sica del c¢digo fuente
|
||||
* correspondiente en un medio comunmente utilizado para el
|
||||
* intercambio de software, ¢
|
||||
* C. Acompa¤arlo con la informaci¢n que usted recibi¢ sobre la
|
||||
* oferta de distribuci¢n del c¢digo fuente correspondiente.
|
||||
* (Esta alternativa est permitida s¢lo para distribuci¢n
|
||||
* no-comercial y s¢lo si usted recibi¢ el Programa en c¢digo
|
||||
* objeto o en forma de ejecutable con tal oferta de acuerdo
|
||||
* a la subsecci¢n b anterior)
|
||||
*
|
||||
* El c¢digo fuente de un trabajo significa la forma preferida de
|
||||
* hacer modificaciones al mismo. Para un trabajo ejecutable, un
|
||||
* c¢digo fuente completo significa todo el c¢digo fuente de todos
|
||||
* los m¢dulos que contiene, m s cualquier archivo de definici¢n de
|
||||
* interfases, m s los programas utilizados para controlar la
|
||||
* compilaci¢n y la instalaci¢n del ejecutable.
|
||||
* Sin embargo, como excepci¢n especial, no se requiere que el
|
||||
* c¢digo fuente distribu¡do incluya cualquier cosa que no sea
|
||||
* normalmente distribu¡da con las componentes mayores (compilador,
|
||||
* kernel, etc.) del sistema operativo en el cual el ejecutable
|
||||
* corre, a menos de que una componente en particular acompa¤e al
|
||||
* ejecutable.
|
||||
*
|
||||
* Si la distribuci¢n del ejecutable ¢ del c¢digo objeto se hace
|
||||
* ofreciendo acceso a copiar desde un lugar designado, entonces el
|
||||
* ofrecer acceso equivalente para copiar el c¢digo fuente desde el
|
||||
* mismo lugar se considera distribuci¢n del c¢digo fuente, aunque
|
||||
* las dem s personas no copien el c¢digo fuente junto con el c¢digo
|
||||
* objeto.
|
||||
*
|
||||
*
|
||||
* 4. Usted no puede copiar, modificar, sub-licenciar ni distribuir
|
||||
* el Programa a menos que sea expresamente bajo esta Licencia, de
|
||||
* otra forma cualquier intento de copiar, modificar, sub-licenciar
|
||||
* ¢ distribuir el programa es nulo, y autom ticamente causar la
|
||||
* p‚rdida de sus derechos bajo esta Licencia. Sin embargo, cualquier
|
||||
* persona que haya recibido copias ¢ derechos de usted bajo esta
|
||||
* Licencia no ver n terminadas sus Licencias ni sus derechos
|
||||
* perdidos mientras ellas contin£en cumpliendo los t‚rminos de
|
||||
* esta Licencia.
|
||||
*
|
||||
*
|
||||
* 5. Usted no est obligado a aceptar esta Licencia, dado que no la
|
||||
* ha firmado. Sin embargo, nada le otorga el permiso de modificar ¢
|
||||
* distribuir el Programa ni sus trabajos derivados. Estas acciones
|
||||
* est n prohibidas por la ley si usted no acepta esta Licencia.
|
||||
* Sin embargo, modificando o distribuyendo el Programa (o cualquier
|
||||
* trabajo basado en el Programa) indica su aceptaci¢n de esta
|
||||
* Licencia y de todos sus t‚rminos y condiciones para copiar,
|
||||
* distribuir o modificar el Programa y/o trabajos basados en ‚l.
|
||||
*
|
||||
*
|
||||
* 6. Cada vez que usted redistribuye el Programa (o cualquier
|
||||
* trabajo basado en el Programa), la persona que lo recibe
|
||||
* autom ticamente recibe una licencia del autor original para
|
||||
* copiar, distribuir o modificar el Programa sujeto a estos
|
||||
* t‚rminos y condiciones. Usted no puede imponer ninguna
|
||||
* restricci¢n adicional a las personas que reciban el Programa
|
||||
* sobre los derechos que en esta Licencia se les otorga.
|
||||
* Usted no es responsable de forzar a terceras personas en ‚l
|
||||
* cumplimiento de esta Licencia.
|
||||
*
|
||||
* $SEEALSO$
|
||||
* Licencia GNU Parte 2
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/*
|
||||
* $DOC$
|
||||
* $FUNCNAME$
|
||||
* Licencia GNU Parte 2
|
||||
* $CATEGORY$
|
||||
* Documento
|
||||
* $ONELINER$
|
||||
* Licencia GNU Parte 2
|
||||
* $DESCRIPTION$
|
||||
*
|
||||
* 7. Si como consecuencia de un veredicto de un juzgado o por el
|
||||
* alegato de infringir una patente ¢ por cualquier otra raz¢n (no
|
||||
* limitado s¢lo a cuestiones de patentes) se imponen condiciones
|
||||
* sobre usted que contradigan los t‚rminos y condiciones de esta
|
||||
* Licencia, ‚stas no le excusan de los t‚rminos y condiciones aqu¡
|
||||
* descritos. Si usted no puede distribuir el producto cumpliendo
|
||||
* totalmente con las obligaciones concernientes a la resoluci¢n
|
||||
* oficial y al mismo tiempo con las obligaciones que se describen
|
||||
* en este contrato de Licencia, entonces no podr distribuir m s
|
||||
* este producto. Por ejemplo, si una licencia de patente no
|
||||
* permitir la distribuci¢n del Programa de forma libre de
|
||||
* regal¡as (sin pago de regal¡as) por parte de quienes lo reciban
|
||||
* directa o indirectamente, entonces la £nica forma de cumplir con
|
||||
* ambas obligaciones es renunciar a la distribuci¢n del mismo.
|
||||
*
|
||||
* Si cualquier parte de esta secci¢n resulta inv lida, inaplicable
|
||||
* ¢ no obligatoria bajo cualquier circunstancia en particular, la
|
||||
* tendencia de esta es a aplicarse, y la secci¢n completa se
|
||||
* aplicar bajo otras circunstancias.
|
||||
*
|
||||
* La intenci¢n de esta secci¢n no es la de inducirlo a infringir
|
||||
* ninguna ley de patentes, ni tampoco infringir alg£n reclamo de
|
||||
* derechos, ni discutir la validez de tales reclamos; esta secci¢n
|
||||
* tiene el £nico prop¢sito de proteger la integridad del sistema de
|
||||
* distribuci¢n del software libre, que est implementado por
|
||||
* pr cticas de licencia p£blica. Mucha gente ha hecho generosas
|
||||
* contribuciones a la amplia gama de software distribuido bajo este
|
||||
* sistema favoreciendo as¡ la constante aplicaci¢n de este sistema
|
||||
* de distribuci¢n; es decisi¢n del autor/donador si su Programa
|
||||
* ser distribu¡do utilizando este u otro sistema de distribuci¢n,
|
||||
* y la persona que recibe el software no puede obligarlo a hacer
|
||||
* ninguna elecci¢n en particular.
|
||||
* Esta secci¢n pretende dejar muy en claro lo que se cree que ser
|
||||
* una consecuencia del resto de esta Licencia.
|
||||
*
|
||||
*
|
||||
* 8. Si la distribuci¢n y/o el uso del Programa se restringe a
|
||||
* algunos pa¡ses ya sea por patentes, interfases protegidas por
|
||||
* derechos de autor, el propietario original de los derechos de
|
||||
* autor que ubica su Programa bajo esta Licencia puede agregar una
|
||||
* restricci¢n geogr fica de distribuci¢n expl¡cita excluyendo
|
||||
* los pa¡ses que aplique, dando como resultado que su distribuci¢n
|
||||
* s¢lo se permita en los pa¡ses no exclu¡dos. En tal caso, esta
|
||||
* Licencia incorpora la limitaci¢n como si hubiera sido escrita en
|
||||
* el cuerpo de esta misma Licencia.
|
||||
*
|
||||
*
|
||||
* 9. La "FSF Free Software Foundation" puede publicar versiones
|
||||
* nuevas o revisadas de la "GPL General Public License" de uno a
|
||||
* otro momento. Estas nuevas versiones mantendr n el esp¡ritu de la
|
||||
* presente versi¢n, pero pueden diferir en la inclusi¢n de nuevos
|
||||
* problemas ¢ en la manera de tocar los problemas ¢ aspectos ya
|
||||
* presentes.
|
||||
*
|
||||
* Cada versi¢n tendr un n£mero de versi¢n que la distinga. Si el
|
||||
* Programa especifica un n£mero de versi¢n para esta Licencia que
|
||||
* aplique a ‚l y "cualquier versi¢n subsecuente", usted tiene la
|
||||
* opci¢n de seguir los t‚rminos y condiciones de dicha versi¢n o de
|
||||
* cualquiera de las posteriores versiones publicadas por la "FSF".
|
||||
* Si el programa no especifica una versi¢n en especial de esta
|
||||
* Licencia, usted puede elegir entre cualquiera de las versiones
|
||||
* que han sido publicadas por la "FSF".
|
||||
*
|
||||
*
|
||||
* 10. Si usted desea incorporar partes del Programa en otros
|
||||
* Programas de software libre cuyas condiciones de distribuci¢n
|
||||
* sean distintas, deber escribir al autor solicitando su
|
||||
* autorizaci¢n. Para programas de software protegidas por la "FSF
|
||||
* Free Software Foundation", deber escribir a la "FSF" solicitando
|
||||
* autorizaci¢n, en ocasiones hacemos excepciones. Nuestra decisi¢n
|
||||
* ser guiada por dos metas principales:
|
||||
*
|
||||
* A. mantener el estado de libertad de todos los derivados de
|
||||
* nuestro software libre
|
||||
* B. promover el uso comunitario y compartido del software en
|
||||
* general
|
||||
*
|
||||
*
|
||||
*
|
||||
* <b>NO EXISTE GARANTIA ALGUNA</b>
|
||||
* -----------------------------------------------------------------
|
||||
*
|
||||
* 11. DEBIDO A QUE EL PROGRAMA SE OTORGA LIBRE DE CARGOS Y REGALIAS,
|
||||
* NO EXISTE NINGUNA GARANTIA PARA EL MISMO HASTA DONDE LO PERMITA
|
||||
* LA LEY APLICABLE. A EXCEPCION DE QUE SE INDIQUE OTRA COSA, LOS
|
||||
* PROPIETARIOS DE LOS DERECHOS DE AUTOR PROPORCIONAN EL PROGRAMA
|
||||
* "COMO ESTA" SIN NINGUNA GARANTIA DE NINGUN TIPO, YA SEA EXPLICITA
|
||||
* O IMPLICITA, INCLUYENDO, PERO NO LIMITADA A, LAS GARANTIAS QUE
|
||||
* IMPLICA EL MERCADEO Y EJERCICIO DE UN PROPOSITO EN PARTICULAR.
|
||||
* CUALQUIER RIESGO DEBIDO A LA CALIDAD Y DESEMPEÑO DEL PROGRAMA ES
|
||||
* TOMADO COMPLETAMENTE POR USTED. SI EL SOFTWARE MUESTRA ALGUN
|
||||
* DEFECTO, USTED CUBRIRA LOS COSTOS DE CUALQUIER SERVICIO,
|
||||
* REPARACION O CORRECCION DE SUS EQUIPOS Y/O SOFTWARE QUE REQUIERA.
|
||||
*
|
||||
* 12. EN NINGUN CASO NI BAJO NINGUNA CIRCUNSTANCIA EXCEPTO BAJO
|
||||
* SOLICITUD DE LA LEY O DE COMUN ACUERDO POR ESCRITO, NINGUN
|
||||
* PROPIETARIO DE LOS DERECHOS DE AUTOR NI TERCERAS PERSONAS QUE
|
||||
* PUDIERAN MODIFICAR Y/O REDISTRIBUIR EL PROGRAMA COMO SE PERMITE
|
||||
* ARRIBA, SERAN RESPONSABLES DE LOS DAÑOS CORRESPONDIENTES AL USO
|
||||
* O IMPOSIBILIDAD DE USAR EL PROGRAMA, SIN IMPORTAR SI SON DAÑOS
|
||||
* GENERALES, ESPECIALES, INCIDENTALES O CONSEQUENTES
|
||||
* CORRESPONDIENTES AL USO O IMPOSIBILIDAD DE USAR EL PROGRAMA
|
||||
* (INCLUYENDO PERO NO LIMITADO A LA PERDIDA DE INFORMACION O
|
||||
* DETERIORO DE LA MISMA AFECTANDOLO A USTED, A TERCERAS PERSONAS
|
||||
* QUE SEA POR FALLAS EN LA OPERACION DEL PROGRAMA O SU INTERACCION
|
||||
* CON OTROS PROGRAMAS) INCLUSIVE SI TAL PROPIETARIO U OTRAS
|
||||
* PERSONAS HAYAN SIDO NOTIFICADAS DE TALES FALLAS Y DE LA
|
||||
* POSIBILIDAD DE TALES DAÑOS.
|
||||
*
|
||||
*
|
||||
* <b>FIN DE TERMINOS Y CONDICIONES</b>
|
||||
*
|
||||
* -----------------------------------------------------------------
|
||||
*
|
||||
*
|
||||
* Apendice: C¢mo aplicar estos t‚rminos a sus nuevos programas ?
|
||||
*
|
||||
* Si usted desarrolla un nuevo Programa y desea que sea lo m s
|
||||
* p£blico posible, el mejor modo de hacerlo es haciendolo Software
|
||||
* Libre donde toda persona lo puede redistribuir y cambiar bajo
|
||||
* estos t‚rminos.
|
||||
*
|
||||
* Para hacer esto, agregue las siguientes notas al programa.
|
||||
* Es m s seguro agregarlas al inicio de cada archivo del c¢digo
|
||||
* fuente para notificar de manera m s efectiva la ausencia de
|
||||
* garant¡a; y cada archivo debe de contener al menos la l¡nea de
|
||||
* "Copyright" o derechos de autor y una referencia de donde se
|
||||
* puede encontrar la nota completa.
|
||||
* ejemplo:
|
||||
*
|
||||
* Una l¡nea que contenga el nombre del programa y una idea de lo
|
||||
* que hace.
|
||||
* Copyright (C) <a¤o> <nombre del autor>
|
||||
*
|
||||
* Este programa es Software Libre; usted puede redistribuirlo
|
||||
* y/o modificarlo bajo los t‚rminos de la "GNU General Public
|
||||
* License" como lo publica la "FSF Free Software Foundation",
|
||||
* ¢ (a su elecci¢n) de cualquier versi¢n posterior.
|
||||
*
|
||||
* Este programa es distribuido con la esperanza de que le ser
|
||||
* £til, pero SIN NINGUNA GARANTIA; incluso sin la garant¡a
|
||||
* impl¡cita por el MERCADEO o EJERCICIO DE ALGUN PROPOSITO en
|
||||
* particular. Vea la "GNU General Public License" para m s
|
||||
* detalles.
|
||||
*
|
||||
* Usted debe haber recibido una copia de la "GNU General Public
|
||||
* License" junto con este programa, si no, escriba a la "FSF
|
||||
* Free Software Foundation, Inc.", 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* Adicionalmente agregue informaci¢n de c¢mo contactarle por
|
||||
* correo electr¢nico y convencional.
|
||||
* Si el programa es interactivo, ponga en la salida del programa
|
||||
* una nota corta al iniciar el modo interactivo como en siguiente
|
||||
* ejemplo:
|
||||
*
|
||||
* Gnomovision version 69, Copyright (C) <a¤o> <nombre del autor>
|
||||
* Gnomovision no tiene NINGUNA GARANTIA, para m s detalles
|
||||
* escriba 'show w'. Este es Software Libre, y usted est
|
||||
* permitido para redistribuirlo bajo ciertas condiciones;
|
||||
* escriba 'show c' para m s detalles.
|
||||
*
|
||||
* Estos hipoteticos comandos 'show w' y 'show c' deber n mostrar
|
||||
* las partes apropiadas de la "GPL General Public License".
|
||||
* Por supuesto, los comandos que utilice pueden ser distintos,
|
||||
* pueden ser incluso "clicks" del rat¢n, opciones de men£s etc, lo
|
||||
* m s apropiado para su programa.
|
||||
*
|
||||
* Usted deber¡a hacer que su jefe de proyecto (si trabaja como
|
||||
* programador) o su escuela, si aplica, firme una "declaraci¢n de
|
||||
* derechos de autor" para el programa, si se necesita.
|
||||
* Aqu¡ hay un ejemplo, modifique los nombres:
|
||||
*
|
||||
* "Yoyodyne, Inc., por este medio renuncia a todo inter‚s
|
||||
* en los derechos de autor en el programa 'Gnomovision'
|
||||
* (lo que make pasa al compilador) escrito por James Hacker."
|
||||
*
|
||||
* <firma de> Ty Coon, 1 de Abril 1989
|
||||
* Ty Coon, Presidente de Yoyodyne, Inc
|
||||
*
|
||||
*
|
||||
* Esta Licencia P£blica General no permite incorporar su programa
|
||||
* en programas propietarios. Si su programa es una librer¡a de
|
||||
* subrutinas, puede ser m s £til permitir que se ligue en tiempo de
|
||||
* compilaci¢n o ejecuci¢n a aplicaciones propietarias. Si esto es
|
||||
* lo que quiere hacer, use la licencia P£blica General para
|
||||
* Librer¡as en lugar de esta licencia.
|
||||
*
|
||||
* Consultas y dudas sobre FSF y GNU dirigirlas a gnu@gnu.org
|
||||
*
|
||||
* Free Software Foundation, Inc.,
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111, USA
|
||||
* Updated: 3 Jan 2000 rms
|
||||
*
|
||||
* $SEEALSO$
|
||||
* Licencia,Licencia GNU
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
|
||||
@@ -1,115 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2002 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Traducci¢n al Espa¤ol de harbext.txt
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* Extensiones a Harbour
|
||||
* $CATEGORY$
|
||||
* Documento
|
||||
* $ONELINER$
|
||||
* Extensiones a Harbour
|
||||
* $DESCRIPTION$
|
||||
* <b>Extensiones al lenguaje:</b>
|
||||
* ------------------------ </par>
|
||||
*
|
||||
* * Generaci¢n y manejo de Clases.
|
||||
*
|
||||
* Clipper solamente permite la creaci¢n de objetos desde unas pocas
|
||||
* clases est ndar.
|
||||
*
|
||||
* En Harbour, Ud. puede crear sus propias Clases completas con
|
||||
* M‚todos, Variables de Instancia, Variables de Clase y Herencia.
|
||||
* Aplicaciones enteras pueden ser designadas y codificadas en un
|
||||
* enfoque Orientado a Objetos.
|
||||
*
|
||||
*
|
||||
* * @<FunctionName>() </par>
|
||||
*
|
||||
* Retorna el puntero (la direcci¢n) a la funci¢n.
|
||||
*
|
||||
* El valor retornado no es £til a nivel de la programaci¢n de la
|
||||
* aplicaci¢n pero es usado a bajo nivel para implementar el c¢digo
|
||||
* Orientado a Objeto (Internamente, el m‚todo de una Clase es una
|
||||
* funci¢n est tica, no hay un s¡mbolo para ella, entonces esta es
|
||||
* accedida mediante su direcci¢n).
|
||||
*
|
||||
*
|
||||
* * Clase TGetList
|
||||
*
|
||||
* Soporte Orientado a Objetos para el manejo de GetList.
|
||||
*
|
||||
*
|
||||
* * ProcName() soporte para el nombre de M‚todos de las Clases.
|
||||
*
|
||||
* Los M‚todos de Clases pueden ser recuperados de la pila de llamada.
|
||||
*
|
||||
*
|
||||
* * Memory() tiene nuevos valores de retorno.
|
||||
*
|
||||
* Vea hbmemory.ch
|
||||
*
|
||||
*
|
||||
* * TRANSFORM() --> Agregado de nueva funci¢n para el formateo de
|
||||
* cadenas:
|
||||
*
|
||||
* @0 Hace el pad con ceros una cadena num‚rica.
|
||||
*
|
||||
*
|
||||
* * STOD() --> dDate
|
||||
*
|
||||
* Nueva funci¢n que convierte una cadena en el formato yyyymmdd a
|
||||
* valor de fecha (date).
|
||||
*
|
||||
*
|
||||
* * Declaraci¢n STRONG TYPE Opcional en tiempo de compilaci¢n (y
|
||||
* advertencias en tiempo de compilaci¢n de TYPE MISMATCH)
|
||||
*
|
||||
* Example: LOCAL/STATIC Variable AS ...
|
||||
*
|
||||
*
|
||||
* * El depurador de Harbour provee de nuevas clases interesantes:
|
||||
*
|
||||
* - La Clase TDbWindow podr¡a ser la fundaci¢n de una ventana de
|
||||
* visualizaci¢n multiplatforma.
|
||||
*
|
||||
* - La Clase TForm
|
||||
*
|
||||
* - La Clase TDbMenu implementa ambos men£es desplegables y
|
||||
* (pulldown & popup)
|
||||
*
|
||||
*
|
||||
* <b>Funcionalidad mejorada de la RTL:</b> </par>
|
||||
* ---------------------------------
|
||||
*
|
||||
* - DIRECTORY( <cMascara>, <cBandera>, <lOchoPuntoTres> )
|
||||
*
|
||||
* El tercer par metro es un par metro de Harbour (opcional) e indica
|
||||
* que en aquellas plataformas que soportan nombres largos de archivo,
|
||||
* Ud. solicita lo que podr¡a considerarse el equivalente al nombre
|
||||
* 8.3 Podr¡a afectar ADIR() y DIR si ellas fueron modificadas para
|
||||
* tomar ventaja de esto. Esta retornar nombres largos si el sistema
|
||||
* operativo lo soporta.
|
||||
*
|
||||
*
|
||||
* - HB_DISKSPACE( <nDisco>, <nTipo> )
|
||||
*
|
||||
* El segundo par metro es un par metro de Harbour (opcional) e indica
|
||||
* el tipo de informaci¢n del disco que esta siendo requerida.
|
||||
* vea en ../doc/es/diskspac.txt para mayor informaci¢n.
|
||||
*
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,625 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2003 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de:
|
||||
* Readme, Archivo de cabecera para la API de Idiomas
|
||||
* hb_langRegister(), hb_langDeRegister(), hb_langFind(), hb_langFindPos(),
|
||||
* hb_langSelect(), hb_langSelectID(), hb_langDGetItem(), hb_langID(),
|
||||
* hb_langName(), hb_langDGetErrorDesc(), HB_LANG_REQUEST()
|
||||
*
|
||||
* Copyright 1999 Victor Szakats <info@szelvesz.hu>
|
||||
* Header file for the Language API
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* Idiomas Soportados
|
||||
* $CATEGORY$
|
||||
* Documentaci¢n
|
||||
* $ONELINER$
|
||||
* L‚ame con las caracter¡sticas del manejo de Idiomas en Harbour
|
||||
* $DESCRIPTION$
|
||||
* Introducci¢n
|
||||
* El m¢dulo de idiomas esta compuesto por una estructura de items que
|
||||
* permite el uso de distintos Idiomas con Harbour de una forma
|
||||
* unificada. Actualmente se definen un m ximo de 64 Idiomas.
|
||||
* #define HB_LANG_MAX_ 64 // en ../source/rtl/langapi.c
|
||||
*
|
||||
* Se define tambi‚n un array que contiene los idiomas soportados.
|
||||
* static PHB_LANG s_langList[ HB_LANG_MAX_ ];
|
||||
*
|
||||
* Todos los idiomas comparten una estructura com£n que facilita la
|
||||
* portabilidad. Esta estructura es del tipo est tica (s_lang) y esta
|
||||
* definida dentro de los archivos correspondientes a cada idioma, que
|
||||
* se encuentran en el subdirectorio ../source/rtl/lang/*.c
|
||||
* Por ejemplo ./source/rtl/lang/msges.c // Espa¤ol
|
||||
*
|
||||
* Esta estructura esta definida como un array (pItemList[]) de punteros
|
||||
* a void y consta actualmente de 116 elementos (n£meros y cadenas de
|
||||
* caracteres) divididos en unidades tem ticas: A, B, C, D, E, F
|
||||
* typedef struct _HB_LANG
|
||||
* {
|
||||
* void * pItemList[ HB_LANG_ITEM_MAX_ ];
|
||||
* } HB_LANG, * PHB_LANG, * HB_LANG_PTR;
|
||||
*
|
||||
* A. Identificador de Idioma [Offset 0-5]
|
||||
* --------------------------
|
||||
* [0] Dos caracteres ISO que caracterizan al idioma. Por ejemplo "ES"
|
||||
* identifica al idioma espa¤ol.
|
||||
* [1] El nombre del Idioma en Ingl‚s. Por ejemplo "Spanish".
|
||||
* [2] El nombre del Idioma en su lengua nativa. Por ejemplo "Espa¤ol"
|
||||
* [3] Identificaci¢n seg£n la RFC. Por ejemplo "ES"
|
||||
* [4] P gina de C¢digos igual a las usadas en DOS y Windows.
|
||||
* Por ejemplo 850, 437, etc.
|
||||
* [5] N£mero de la Versi¢n en uso. Por ejemplo 1.5
|
||||
*
|
||||
*
|
||||
* B. Nombre de meses [Offset 6-17]: "Enero", "Febrero", etc.
|
||||
* ------------------
|
||||
*
|
||||
* C. Nombre de los d¡as [Offset 18-24]: "Domingo", "Lunes", etc.
|
||||
* ---------------------
|
||||
*
|
||||
* D. Mensajes de naci¢n (natmsg) compatibles con Clipper [Offset 25-37]
|
||||
* ---------------------
|
||||
*
|
||||
* E. Mensajes de error
|
||||
* --------------------
|
||||
* - Nombre con la descripci¢n de errores [Offset 38-88]:
|
||||
* Por ejemplo: "Error de argumento"
|
||||
*
|
||||
* - Errores internos [Offset 89-111]:
|
||||
* Por ejemplo: "hb_xgrab no puede asignar memoria"
|
||||
*
|
||||
* F. Diversos textos [Offset 112-115].
|
||||
* ------------------
|
||||
* Cada uno de estos elementos es accedido por su posici¢n en el array.
|
||||
*
|
||||
* Se define una macro para publicar un idioma tanto a nivel de C como
|
||||
* de Harbour.
|
||||
* #define HB_LANG_ANNOUNCE( id ) HB_FUNC( HB_LANG_##id ) {}
|
||||
*
|
||||
*
|
||||
* Idioma por defecto
|
||||
* ------------------
|
||||
* Por defecto Harbour siempre enlaza el m¢dulo de Idioma Ingl‚s.
|
||||
* Para setear un m¢dulo de Idioma por defecto a ser usado por Harbour
|
||||
* se debe definir en el archivo ../include/hbsetup.h la macro
|
||||
* HB_LANG_DEFAULT a un identificador de lenguaje v lido.
|
||||
*
|
||||
* (Notese que este puede tambi‚n estar bajo la forma de una macro).
|
||||
* #ifndef HB_LANG_DEFAULT
|
||||
* #define HB_LANG_DEFAULT EN
|
||||
* #endif
|
||||
*
|
||||
* Funciones
|
||||
* ---------
|
||||
* Harbour implementa el uso de distintos Idiomas a trav‚s de funciones
|
||||
* de bajo nivel en lenguaje C. Las cuales se describen m s abajo
|
||||
* Estas funciones permiten acceder a estructuras que soportan los
|
||||
* distintos datos que componen cada Idioma, generalmente pasando
|
||||
* punteros a esas estructuras.
|
||||
*
|
||||
* /* Manejo de lista de lenguajes */
|
||||
*
|
||||
* extern HB_BOOL hb_langRegister ( PHB_LANG lang );
|
||||
* extern HB_BOOL hb_langDeRegister ( char * pszID );
|
||||
* extern int hb_langFindPos ( char * pszID )
|
||||
* extern PHB_LANG hb_langFind ( char * pszID );
|
||||
*
|
||||
*
|
||||
* /* Selecci¢n del lenguaje por defecto y b£squeda de datos */
|
||||
*
|
||||
* extern PHB_LANG hb_langSelect ( PHB_LANG lang );
|
||||
* extern char * hb_langSelectID ( char * pszID );
|
||||
* extern void * hb_langDGetItem ( int iIndex );
|
||||
* extern char * hb_langID ( void );
|
||||
* extern char * hb_langName ( void );
|
||||
*
|
||||
*
|
||||
* /* Interfaz de Compatibilidad */
|
||||
*
|
||||
* extern char * hb_langDGetErrorDesc ( ULONG ulIndex );
|
||||
*
|
||||
* $SEEALSO$
|
||||
* hb_langRegister(), hb_langDeRegister(), hb_langFind(), hb_langFindPos(),
|
||||
* hb_langSelect(), hb_langSelectID(), hb_langDGetItem(), hb_langID(),
|
||||
* hb_langName(), hb_langDGetErrorDesc(), HB_LANG_REQUEST()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* hb_langRegister()
|
||||
* $CATEGORY$
|
||||
* API de Idiomas
|
||||
* $ONELINER$
|
||||
* Registra un Idioma por defecto.
|
||||
* $SYNTAX$
|
||||
* C Prototype
|
||||
*
|
||||
* #include <hbapilng.h>
|
||||
* hb_langRegister( PHB_LANG lang ) --> ( HB_BOOL )bResult
|
||||
* $ARGUMENTS$
|
||||
* <lang> es un puntero a la estructura del Idioma, que se va a
|
||||
* registrar como idioma por defecto.
|
||||
* $RETURNS$
|
||||
* Retorna el valor l¢gico <bResult> indicando si fu‚ satisfactoria la
|
||||
* operaci¢n.
|
||||
* $DESCRIPTION$
|
||||
* La funci¢n hb_langRegister() es una funci¢n de bajo nivel escrita
|
||||
* en lenguaje C que permite registrar un idioma por defecto para ser
|
||||
* usado con Harbour.
|
||||
* $EXAMPLES$
|
||||
* HB_LANG_ANNOUNCE( ES );
|
||||
*
|
||||
* HB_CALL_ON_STARTUP_BEGIN( hb_lang_Init_ES )
|
||||
* hb_langRegister( &s_lang );
|
||||
* HB_CALL_ON_STARTUP_END( hb_lang_Init_ES )
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Compatibilidad no es aplicable a las llamadas a la API.
|
||||
* $FILES$
|
||||
* El archivo fuente es ../source/rtl/langapi.c
|
||||
* La librer¡a asociada es lang
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* hb_langDeRegister, hb_langSelect(), hb_langSelectID()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* hb_langDeRegister()
|
||||
* $CATEGORY$
|
||||
* API de Idiomas
|
||||
* $ONELINER$
|
||||
* Elimina un Idioma registrado.
|
||||
* $SYNTAX$
|
||||
* C Prototype
|
||||
*
|
||||
* #include <hbapilng.h>
|
||||
* hb_langDeRegister( char * pszID ) --> ( HB_BOOL )bResult
|
||||
* $ARGUMENTS$
|
||||
* <pszID> Puntero a una cadena terminada con '\0' que contiene la
|
||||
* identificaci¢n del idioma a ser removido.
|
||||
* $RETURNS$
|
||||
* Retorna el valor l¢gico <bResult> indicando si fu‚ satisfactoria la
|
||||
* operaci¢n.
|
||||
* $DESCRIPTION$
|
||||
* La funci¢n hb_langDeRegister() es una funci¢n de bajo nivel en
|
||||
* lenguaje C que permite eliminar un idioma de una lista para ser
|
||||
* usado con Harbour.
|
||||
* Para ello utiliza a la funci¢n hb_langFindPos( pszID ) que devuelve
|
||||
* la posici¢n en una lista de idiomas (si existe) ¢ el valor -1 si no
|
||||
* se pudo encontrar. Si se encontr¢ cambia su valor a NULL.
|
||||
* $EXAMPLES$
|
||||
* Vea langapi.c
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Compatibilidad no es aplicable a las llamadas a la API.
|
||||
* $FILES$
|
||||
* El archivo fuente es ../source/rtl/langapi.c
|
||||
* La librer¡a asociada es lang
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* hb_langRegister(), hb_langSelect(), hb_langSelectID()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* hb_langFindPos()
|
||||
* $CATEGORY$
|
||||
* API de Idiomas
|
||||
* $ONELINER$
|
||||
* Busca en una lista de idiomas por un identificador de Lenguaje.
|
||||
* $SYNTAX$
|
||||
* C Prototype
|
||||
*
|
||||
* #include <hbapilng.h>
|
||||
* hb_langFindPos( char * pszID ) --> int iPos
|
||||
* $ARGUMENTS$
|
||||
* <pszID> Puntero a una cadena terminada con '\0' que contiene la
|
||||
* identificaci¢n del idioma.
|
||||
* $RETURNS$
|
||||
* Retorna <iPos>, la posici¢n dentro de la estructura si existe ¢ -1
|
||||
* en caso contrario.
|
||||
* $DESCRIPTION$
|
||||
* La funci¢n hb_langFindPos() es una funci¢n de bajo nivel en
|
||||
* lenguaje C que realiza la b£squeda de un identificador de idioma de
|
||||
* una lista. Para ello compara el par metro <pszID> con la cadena de
|
||||
* caracteres que se encuentra en la posici¢n HB_LANG_ITEM_ID_ID del
|
||||
* array pItemList.
|
||||
* Esta devuelve la posici¢n en una lista de idiomas (si existe) ¢ el
|
||||
* valor -1 si no se pudo encontrar. Si se encontr¢ cambia su valor a
|
||||
* NULL.
|
||||
* $EXAMPLES$
|
||||
* Vea langapi.c
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Compatibilidad no es aplicable a las llamadas a la API.
|
||||
* $FILES$
|
||||
* El archivo fuente es ../source/rtl/langapi.c
|
||||
* La librer¡a asociada es lang
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* hb_langFind(), hb_langSelectID()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* hb_langFind()
|
||||
* $CATEGORY$
|
||||
* API de Idiomas
|
||||
* $ONELINER$
|
||||
* Busca en la lista de idiomas por un identificador de Lenguaje.
|
||||
* $SYNTAX$
|
||||
* C Prototype
|
||||
*
|
||||
* #include <hbapilng.h>
|
||||
* hb_langFind( char * pszID ) --> ( PHB_LANG )pResult
|
||||
* $ARGUMENTS$
|
||||
* <pszID> Puntero a una cadena terminada con '\0' que contiene la
|
||||
* identificaci¢n del idioma.
|
||||
* $RETURNS$
|
||||
* Retorna un puntero <pResult> a la estructura del idioma solicitado
|
||||
* si lo encuentra ¢ NULL en caso contrario.
|
||||
* $DESCRIPTION$
|
||||
* La funci¢n hb_langFind() es una funci¢n de bajo nivel en lenguaje C
|
||||
* que realiza la b£squeda de un identificador de idioma de una lista.
|
||||
* Para ello utiliza a la funci¢n hb_langFindPos( pszID ) que devuelve
|
||||
* la posici¢n en una lista de idiomas (si existe) ¢ el valor -1 si no
|
||||
* se pudo encontrar.
|
||||
* Si se encontr¢ hb_langFind() devuelve un puntero a esa estructura
|
||||
* ¢ NULL si no se encontr¢.
|
||||
* $EXAMPLES$
|
||||
* Vea langapi.c
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Compatibilidad no es aplicable a las llamadas a la API.
|
||||
* $FILES$
|
||||
* El archivo fuente es ../source/rtl/langapi.c
|
||||
* La librer¡a asociada es lang
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* hb_langFindPos(), hb_langID(), hb_langSelectID()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* hb_langSelect()
|
||||
* $CATEGORY$
|
||||
* API de Idiomas
|
||||
* $ONELINER$
|
||||
* Selecciona un m¢dulo de mensajes espec¡fico a una nacionalidad.
|
||||
* $SYNTAX$
|
||||
* C Prototype
|
||||
*
|
||||
* #include <hbapilng.h>
|
||||
* hb_langSelect( PHB_LANG lang ) --> ( PHB_LANG )pResult
|
||||
* $ARGUMENTS$
|
||||
* <lang> es un puntero a la estructura del nuevo Idioma que se esta
|
||||
* tratando de seleccionar.
|
||||
* $RETURNS$
|
||||
* Retorna un puntero <pResult> a la estructura del Idioma actualmente
|
||||
* en uso, antes de establecer el nuevo idioma solicitado .
|
||||
* $DESCRIPTION$
|
||||
* La funci¢n hb_langSelect() es una funci¢n de bajo nivel en lenguaje
|
||||
* C que establece un nuevo idioma para su uso a trav‚s del pasaje de
|
||||
* un puntero a la estructura del nuevo Idioma. Si el puntero no es
|
||||
* v lido la funci¢n no hace nada.
|
||||
* $EXAMPLES$
|
||||
* Vea langapi.c
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Compatibilidad no es aplicable a las llamadas a la API.
|
||||
* $FILES$
|
||||
* El archivo fuente es ../source/rtl/langapi.c
|
||||
* La librer¡a asociada es lang
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* hb_langSelectID(), hb_langID(), hb_langRegister()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* hb_langSelectID()
|
||||
* $CATEGORY$
|
||||
* API de Idiomas
|
||||
* $ONELINER$
|
||||
* Selecciona un m¢dulo de mensajes correspondiente a un Idioma.
|
||||
* $SYNTAX$
|
||||
* C Prototype
|
||||
*
|
||||
* #include <hbapilng.h>
|
||||
* hb_langSelectID( char * pszID ) --> ( char * )pszResult
|
||||
* $ARGUMENTS$
|
||||
* <pszID> Puntero a una cadena terminada con '\0' que contiene la
|
||||
* identificaci¢n del idioma.
|
||||
* $RETURNS$
|
||||
*
|
||||
* $DESCRIPTION$
|
||||
* La funci¢n
|
||||
* $EXAMPLES$
|
||||
* Vea langapi.c
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Compatibilidad no es aplicable a las llamadas a la API.
|
||||
* $FILES$
|
||||
* El archivo fuente es ../source/rtl/langapi.c
|
||||
* La librer¡a asociada es lang
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* hb_langSelect(), hb_langID()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* hb_langDGetItem()
|
||||
* $CATEGORY$
|
||||
* API de Idiomas
|
||||
* $ONELINER$
|
||||
* Obtiene un elemento del array de items del Idioma.
|
||||
* $SYNTAX$
|
||||
* C Prototype
|
||||
*
|
||||
* #include <hbapilng.h>
|
||||
* hb_langDGetItem( int iIndex ) --> ( void * )pResult
|
||||
* $ARGUMENTS$
|
||||
* <iIndex> es la posici¢n del elemento en el array del idioma.
|
||||
* El valor de <iIndex> debe estar comprendido entre 0 y
|
||||
* HB_LANG_ITEM_MAX_
|
||||
* $RETURNS$
|
||||
* Retorna un puntero <pResult> a void, que previo a su uso debe
|
||||
* hacerse un casting al tipo apropiado. En general a: (char *)
|
||||
* $DESCRIPTION$
|
||||
* La funci¢n hb_langDGetItem() es una funci¢n de bajo nivel escrita
|
||||
* en lenguaje C que devuelve un puntero de uso general con el dato
|
||||
* solicitado del array de idioma.
|
||||
* $EXAMPLES$
|
||||
* Vea langapi.c
|
||||
* if( s_lang )
|
||||
* return ( char * ) hb_langDGetItem( HB_LANG_ITEM_BASE_ID +
|
||||
* HB_LANG_ITEM_ID_ID );
|
||||
* else
|
||||
* return NULL;
|
||||
*
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Compatibilidad no es aplicable a las llamadas a la API.
|
||||
* $FILES$
|
||||
* El archivo fuente es ../source/rtl/langapi.c
|
||||
* La librer¡a asociada es lang
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* hb_langDGetErrorDesc(), hb_langID(), hb_langName()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* hb_langID()
|
||||
* $CATEGORY$
|
||||
* API de Idiomas
|
||||
* $ONELINER$
|
||||
* Retorna el identificador ISO del idioma en uso.
|
||||
* $SYNTAX$
|
||||
* C Prototype
|
||||
*
|
||||
* #include <hbapilng.h>
|
||||
* hb_langID( void ) --> ( char * )pszResult
|
||||
* $ARGUMENTS$
|
||||
* Ninguno.
|
||||
* $RETURNS$
|
||||
* Retorna un puntero <pszResult> a una cadena de caracteres terminada
|
||||
* en '\0' con el identificador del idioma en uso.
|
||||
* $DESCRIPTION$
|
||||
* La funci¢n hb_langID() es una funci¢n de bajo nivel en lenguaje C
|
||||
* que devuelve un puntero a una cadena de caracteres correspondiente
|
||||
* al identificador de 2 caracteres (ISO) del idioma actualmente en
|
||||
* uso.
|
||||
* Esta funci¢n es llamada por la funci¢n de Harbour, HB_LANGSELECT()
|
||||
* $EXAMPLES$
|
||||
* Vea langapi.c
|
||||
* HB_FUNC( HB_LANGSELECT )
|
||||
* {
|
||||
* hb_retc( hb_langID() );
|
||||
*
|
||||
* hb_langSelectID( hb_parc( 1 ) );
|
||||
* }
|
||||
*
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Compatibilidad no es aplicable a las llamadas a la API.
|
||||
* $FILES$
|
||||
* El archivo fuente es ../source/rtl/langapi.c
|
||||
* La librer¡a asociada es lang
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* hb_langSelectID(), hb_langName()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* hb_langName()
|
||||
* $CATEGORY$
|
||||
* API de Idiomas
|
||||
* $ONELINER$
|
||||
* Obtiene informaci¢n sobre el m¢dulo de lenguaje en uso.
|
||||
* $SYNTAX$
|
||||
* C Prototype
|
||||
*
|
||||
* #include <hbapilng.h>
|
||||
* hb_langName( void ) --> ( char * )pszResult
|
||||
* $ARGUMENTS$
|
||||
* Ninguno.
|
||||
* $RETURNS$
|
||||
* Retorna un puntero <pszResult> a una cadena de caracteres terminada
|
||||
* en '\0' con los datos del idioma actualmente en uso.
|
||||
* La rutina llamadora debe encargarse de liberar el puntero pszName
|
||||
* utilizado por esta funci¢n.
|
||||
* $DESCRIPTION$
|
||||
* La funci¢n hb_langName() es una funci¢n de bajo nivel en lenguaje
|
||||
* C que devuelve una cadena de caracteres con los datos del idioma en
|
||||
* uso en la forma "Harbour Language: %s1 %s2 (%s3)", donde:
|
||||
*
|
||||
* %s1 es un puntero a una cadena de caracteres terminada en '\0' que
|
||||
* contiene el identificador del idioma en uso como resultado de
|
||||
* la llamada a la funci¢n:
|
||||
* hb_langDGetItem( HB_LANG_ITEM_ID_ID).
|
||||
*
|
||||
* %s2 es un puntero a una cadena de caracteres terminada en '\0' que
|
||||
* contiene el nombre del idioma en uso (en Ingl‚s) como resultado
|
||||
* de la llamada a la funci¢n:
|
||||
* hb_langDGetItem( HB_LANG_ITEM_ID_NAME).
|
||||
*
|
||||
* %s3 es un puntero a una cadena de caracteres terminada en '\0' que
|
||||
* contiene el nombre del idioma en uso (en lengua nativa) como
|
||||
* resultado de la llamada a la funci¢n:
|
||||
* hb_langDGetItem( HB_LANG_ITEM_ID_NAMENAT).
|
||||
*
|
||||
* Esta funci¢n es llamada por la funci¢n de Harbour HB_LANGNAME(),
|
||||
* para realizar esta tarea. hb_langName() es meramente informativa.
|
||||
* $EXAMPLES$
|
||||
* Vea langapi.c
|
||||
* HB_FUNC( HB_LANGNAME )
|
||||
* {
|
||||
* char * pszName = hb_langName();
|
||||
* hb_retc( pszName );
|
||||
* hb_xfree( pszName );
|
||||
* }
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Compatibilidad no es aplicable a las llamadas a la API.
|
||||
* $FILES$
|
||||
* El archivo fuente es ../source/rtl/langapi.c
|
||||
* La librer¡a asociada es lang
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* hb_langDGetItem()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* hb_langDGetErrorDesc()
|
||||
* $CATEGORY$
|
||||
* API de Idiomas
|
||||
* $ONELINER$
|
||||
* Obtiene una descripci¢n de error para un ¡ndice del array de idioma.
|
||||
* $SYNTAX$
|
||||
* C Prototype
|
||||
*
|
||||
* #include <hbapilng.h>
|
||||
* hb_langDGetErrorDesc( ULONG ulIndex ) --> ( char * )pszResult
|
||||
* $ARGUMENTS$
|
||||
* <ulIndex> es la posici¢n en el array del Idioma, como un (offset)
|
||||
* desplazamiento a partir de HB_LANG_ITEM_BASE_ERRDESC.
|
||||
* $RETURNS$
|
||||
* Retorna un puntero <pszResult> a una cadena de caracteres terminada
|
||||
* en '\0' con la descripci¢n del error solicitado.
|
||||
* $DESCRIPTION$
|
||||
* La funci¢n hb_langDGetErrorDesc() es una funci¢n de bajo nivel en
|
||||
* lenguaje C que devuelve la descripci¢n del error solicitado,
|
||||
* correspondiente a un valor num‚rico.
|
||||
* La posici¢n del elemento que contiene la descripci¢n del error se
|
||||
* calcula sumando a la macro HB_LANG_ITEM_BASE_ERRDESC el valor de
|
||||
* <ulIndex>.
|
||||
* La descripci¢n puede correponder a un error interno de Harbour ¢ a
|
||||
* uno externo.
|
||||
* $EXAMPLES$
|
||||
* Vea langapi.c
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Compatibilidad no es aplicable a las llamadas a la API.
|
||||
* $FILES$
|
||||
* El archivo fuente es ../source/rtl/langapi.c
|
||||
* La librer¡a asociada es lang
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* hb_langDGetItem()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* HB_LANG_REQUEST()
|
||||
* $CATEGORY$
|
||||
* API de Idiomas
|
||||
* $ONELINER$
|
||||
* Pseudofunci¢n para usar un identificador de idioma, en forma de macro
|
||||
* $SYNTAX$
|
||||
* C Prototype (macro definition)
|
||||
*
|
||||
* #include <hbapilng.h>
|
||||
* HB_LANG_REQUEST( id ) --> <see HB_LANG_REQUEST_( id )>
|
||||
*
|
||||
* // This hack is needed to force preprocessing if id is also a macro
|
||||
* #define HB_LANG_REQUEST( id ) HB_LANG_REQUEST_( id )
|
||||
* #define HB_LANG_REQUEST_( id ) extern HB_FUNC( HB_LANG_##id ); \
|
||||
* void hb_lang_ForceLink( void ) \
|
||||
* { \
|
||||
* HB_FUNC_EXEC( HB_LANG_##id ); \
|
||||
* }
|
||||
*
|
||||
* // Macro to publish a specific language module, for both C
|
||||
* // and Harbour level
|
||||
* #define HB_LANG_ANNOUNCE( id ) HB_FUNC( HB_LANG_##id ) {}
|
||||
* $ARGUMENTS$
|
||||
* <id> Es el identificador del idioma a establecer
|
||||
* $RETURNS$
|
||||
* Nada.
|
||||
* $DESCRIPTION$
|
||||
* Este truco es necesario para forzar un pre-procesamiento si id es
|
||||
* tambi‚n una macro.
|
||||
* La macro termina ejecutando la funci¢n HB_FUNC( HB_LANG_##id ) para
|
||||
* el identificador <id>.
|
||||
* $EXAMPLES$
|
||||
* Vea langapi.c, hbapilng.h
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Compatibilidad no es aplicable a las llamadas a la API.
|
||||
* $FILES$
|
||||
* El archivo de cabecera es ../include/hbapilng.h
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* HB_LANG_ANNOUNCE(), HB_LANG_REQUEST_()
|
||||
* $END$
|
||||
*/
|
||||
@@ -1,85 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las partes siguientes son la Propiedad de los autores individuales.
|
||||
* www - http: / / www.harbour - project.org
|
||||
*
|
||||
* Copyright 1999 David G. Holm < dholm@jsd-llc.com >
|
||||
* El archivo de Cabecera para el Set API
|
||||
*
|
||||
* Copyright 2000 Edison Suarez <edison@directo.cl>
|
||||
* La traducci¢n de fichero hb_set.txt al espa¤ol.
|
||||
*
|
||||
* Vea COPYING para los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* hb_setInitialize ()
|
||||
* $CATEGORY$
|
||||
* Set API
|
||||
* $ONELINER$
|
||||
*
|
||||
* $SYNTAX$
|
||||
* Prototipo C
|
||||
*
|
||||
* #include <hbset.h>
|
||||
* hb_setInitialize( void ) --> void
|
||||
* $ARGUMENTS$
|
||||
*
|
||||
* $RETURNS$
|
||||
*
|
||||
* $DESCRIPTION$
|
||||
*
|
||||
* $EXAMPLES$
|
||||
*
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* El cumplimiento no es aplicable a las llamadas de API.
|
||||
* $FILES$
|
||||
* La biblioteca es rtl
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
*
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* hb_setRelease()
|
||||
* $CATEGORY$
|
||||
* Set API
|
||||
* $ONELINER$
|
||||
*
|
||||
* $SYNTAX$
|
||||
* Prototipo C
|
||||
*
|
||||
* #include <hbset.h>
|
||||
* hb_setRelease( void ) --> void
|
||||
* $ARGUMENTS$
|
||||
*
|
||||
* $RETURNS$
|
||||
*
|
||||
* $DESCRIPTION$
|
||||
*
|
||||
* $EXAMPLES$
|
||||
*
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* El cumplimiento no es aplicable a las llamadas de API.
|
||||
* $FILES$
|
||||
* La biblioteca es rtl
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
*
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,59 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2001-2002 David G. Holm <dholm@jsd-llc.com>
|
||||
* Documentaci¢n en Ingl‚s de:
|
||||
* BSD platform Configuration for Harbour.
|
||||
*
|
||||
* Copyright 2001 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de:
|
||||
* Configuraci¢n del sistema operativo FreeBSD para usar con Harbour
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
COMO CONFIGURAR BSD PARA CONSTRUIR HARBOUR
|
||||
------------------------------------------
|
||||
|
||||
Primero, Ud. necesitar una instalaci¢n FreeBSD 4.4 para desarrolladores.
|
||||
Luego Ud. necesitar instalar bison y gmake. Si Ud. instal¢ la colecci¢n
|
||||
de ports, todo lo que Ud. necesita para instalar bison y gmake es
|
||||
ejecutar los siguientes comandos los cuales pueden requerir que ejecute
|
||||
primero el comando 'su' para obtener los permisos adecuados.
|
||||
|
||||
cd /usr/ports/devel/bison
|
||||
make
|
||||
make install
|
||||
make clean
|
||||
cd /usr/ports/devel/gmake
|
||||
make
|
||||
make install
|
||||
make clean
|
||||
|
||||
Si Ud. quiere usar la librer¡a GTSLN en lugar de GTSTD ¢ GTCRS,
|
||||
entonces Ud. tambi‚n necesita instalar libslang. Si Ud. instal¢
|
||||
la colecci¢n de ports, entonces todo lo que Ud. necesita para
|
||||
instalar libslang es ejecutar los siguientes comandos los cuales
|
||||
pueden requerir que ejecute primero el comando 'su' para obtener
|
||||
los permisos adecuados.
|
||||
|
||||
cd /usr/ports/devel/libslang
|
||||
make
|
||||
make install
|
||||
make clean
|
||||
|
||||
Entonces lea el archivo doc/gmake.txt para instrucciones gen‚ricas
|
||||
sobre make (GNU) y los seteos de Harbour espec¡ficos necesarios para
|
||||
BSD. Cuando Ud. desee construir Habour, aseg£rese de ejecutar
|
||||
'gmake -r' en la l¡nea de comandos en lugar de 'make -r'.
|
||||
|
||||
David G. Holm <dholm@jsd-llc.com>
|
||||
|
||||
|
||||
@@ -1,445 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2000 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de:
|
||||
* PROCNAME(), PROCLINE(), PROCFILE(), HB_PVALUE(), PCOUNT()
|
||||
* __QUIT(), CLIPINIT(), __SetHelpK(), BREAK(), DO(), __DBGVMVARLGET()
|
||||
*
|
||||
* Copyright 1999 Jose Lanin <dezac@corevia.com>
|
||||
* Documentaci¢n en Ingl‚s de: PROCLINE(),PROCFILE(),PROCNAME()
|
||||
*
|
||||
* Copyright 1999 Eddie Ruina
|
||||
* Documentaci¢n en Ingl‚s de: __DBGVMVARLGET()
|
||||
*
|
||||
* Copyright 1999 Chen Kedem <niki@actcom.co.il>
|
||||
* Documentaci¢n en Ingl‚s de: CLIPINIT(), __SETHELPK()
|
||||
*
|
||||
* Copyright 1999 Ryszard Glab <rglab@imid.med.pl>
|
||||
* Documentaci¢n en Ingl‚s de: DO()
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* PROCNAME()
|
||||
* $CATEGORY$
|
||||
* Miscelanea
|
||||
* $ONELINER$
|
||||
* Obtiene el nombre de la funci¢n actual en la pila
|
||||
* $SYNTAX$
|
||||
* PROCNAME( <nLevel> ) --> <cProcName>
|
||||
* $ARGUMENTS$
|
||||
* <nLevel> es el nivel de la funci¢n requerida
|
||||
* $RETURNS$
|
||||
* <cProcName> El nombre de la funci¢n que esta siendo ejecutada
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n mira al tope de la pila y obtiene el nombre de la
|
||||
* funci¢n actual ejecutada si no se pasaron argumentos. De otra
|
||||
* manera esta retorna el nombre de la funci¢n ¢ procedimiento en el
|
||||
* nivel <nLevel>.
|
||||
* $EXAMPLES$
|
||||
* Ver Test
|
||||
* </fixed>
|
||||
* $TESTS$
|
||||
* Este test mostrar las funciones y procedimientos en la pila
|
||||
* antes de ejecutarlas.
|
||||
*
|
||||
* FUNCTION Test()
|
||||
* LOCAL n := 1
|
||||
* while !Empty( ProcName( n ) )
|
||||
* ? ProcName( n++ )
|
||||
* end do
|
||||
* RETURN NIL
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* PROCNAME() es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas.
|
||||
* $FILES$
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* PROCLINE(),PROCFILE()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* PROCLINE()
|
||||
* $CATEGORY$
|
||||
* Miscelanea
|
||||
* $ONELINER$
|
||||
* Obtiene el n£mero de l¡nea de la funci¢n actual en la pila
|
||||
* $SYNTAX$
|
||||
* PROCLINE( <nLevel> ) --> <nLinea>
|
||||
* $ARGUMENTS$
|
||||
* <nLevel> es el nivel de funci¢n requerida
|
||||
* $RETURNS$
|
||||
* <nLinea> el n£mero de l¡nea de la funci¢n que esta siendo ejecutada
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n mira al tope de la pila y obtiene el n£mero de l¡nea
|
||||
* de la funci¢n actual ejecutada si no se pasaron argumentos. De otra
|
||||
* manera esta retorna el n£mero de l¡nea de la funci¢n ¢ procedimiento
|
||||
* en el nivel <nLevel>.
|
||||
* $EXAMPLES$
|
||||
* Ver Test
|
||||
* </fixed>
|
||||
* $TESTS$
|
||||
* FUNCTION Test()
|
||||
* ? ProcLine( 0 )
|
||||
* ? ProcName( 2 )
|
||||
* RETURN NIL
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* PROCLINE() es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas.
|
||||
* $FILES$
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* PROCNAME(),PROCFILE()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* PROCFILE()
|
||||
* $CATEGORY$
|
||||
* Miscelanea
|
||||
* $ONELINER$
|
||||
* Esta funci¢n siempre retorna una cadena vac¡a.
|
||||
* $SYNTAX$
|
||||
* PROCFILE( <xExp> ) --> <cEmptyString>
|
||||
* $ARGUMENTS$
|
||||
* <xExp> es cualquier tipo v lido
|
||||
* $RETURNS$
|
||||
* Retorna la cadena vac¡a <cEmptyString>.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n es agregada a la RTL por total compatibilidad.
|
||||
* Esta siempre retorna una cadena vac¡a.
|
||||
* $EXAMPLES$
|
||||
* ? ProcFile()
|
||||
* </fixed>
|
||||
* $TESTS$
|
||||
* FUNCTION Test()
|
||||
* ? ProcFile()
|
||||
* ? ProcFile( NIL )
|
||||
* ? ProcFile( 2 )
|
||||
* RETURN NIL
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* PROCFILE() es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas.
|
||||
* $FILES$
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* PROCNAME(),PROCLINE()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* HB_PVALUE()
|
||||
* $CATEGORY$
|
||||
* Chequeo Parametros
|
||||
* $ONELINER$
|
||||
* Obtiene el valor de un argumento.
|
||||
* $SYNTAX$
|
||||
* HB_PVALUE( <nArg> ) --> <xExp>
|
||||
* $ARGUMENTS$
|
||||
* Un n£mero que indica el argumento a chequear.
|
||||
* $RETURNS$
|
||||
* <xExp> Retorna el valor almacenado en el argumento.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n es £til para chequear el valor almacenado en un
|
||||
* argumento.
|
||||
* $EXAMPLES$
|
||||
* Ver Test
|
||||
* </fixed>
|
||||
* $TESTS$
|
||||
* FUNCTION Test( nValue, cString )
|
||||
* IF PCount() == 2
|
||||
* ? hb_PValue( 1 ), nValue
|
||||
* ? hb_PValue( 2 ), cString
|
||||
* ENDIF
|
||||
* RETURN NIL
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* HB_PVALUE() es una nueva funci¢n y por tanto no es compatible con
|
||||
* CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas.
|
||||
* $FILES$
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* PCOUNT()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* PCOUNT()
|
||||
* $CATEGORY$
|
||||
* Chequeo Parametros
|
||||
* $ONELINER$
|
||||
* Obtiene el n£mero de argumentos pasados a la funci¢n.
|
||||
* $SYNTAX$
|
||||
* PCOUNT() --> <nArgs>
|
||||
* $ARGUMENTS$
|
||||
* Ninguno.
|
||||
* $RETURNS$
|
||||
* <nArgs> Un n£mero que indica la cantidad de par metros pasados a
|
||||
* la funci¢n ¢ procedimiento,
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n es £til para chequear si una funci¢n ¢ procedimiento a
|
||||
* recibido el n£mero de argumentos necesario.
|
||||
* $EXAMPLES$
|
||||
* Ver Test
|
||||
* </fixed>
|
||||
* $TESTS$
|
||||
* FUNCTION Test( xExp )
|
||||
* IF PCount() == 0
|
||||
* ? "Esta funci¢n necesita un par metro"
|
||||
* ELSE
|
||||
* ? xExp
|
||||
* ENDIF
|
||||
* RETURN NIL
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* PCOUNT() es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas.
|
||||
* $FILES$
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* HB_PVALUE()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __QUIT()
|
||||
* $CATEGORY$
|
||||
* Eventos
|
||||
* $ONELINER$
|
||||
* Termina una aplicaci¢n.
|
||||
* $SYNTAX$
|
||||
* __QUIT() --> NIL
|
||||
* $ARGUMENTS$
|
||||
* Ninguno
|
||||
* $RETURNS$
|
||||
* NIL
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n termina la aplicaci¢n actual y retorna al sistema.
|
||||
* $EXAMPLES$
|
||||
* Ver Test
|
||||
* </fixed>
|
||||
* $TESTS$
|
||||
* FUNCTION EndApp( lYesNo )
|
||||
* IF lYesNo
|
||||
* __Quit()
|
||||
* ENDIF
|
||||
* RETURN NIL
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* __QUIT() es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas.
|
||||
* $FILES$
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* QUIT
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* CLIPINIT()
|
||||
* $CATEGORY$
|
||||
* Internal
|
||||
* $ONELINER$
|
||||
* Initializa varios subsistemas de Harbour
|
||||
* $SYNTAX$
|
||||
* CLIPINIT() --> NIL
|
||||
* $ARGUMENTS$
|
||||
* Ninguno
|
||||
* $RETURNS$
|
||||
* CLIPINIT() siempre devuelve NIL.
|
||||
* $DESCRIPTION$
|
||||
* CLIPINIT() es uno de los INIT PROCEDURE predefinidos y es ejecutado
|
||||
* cuando el programa arranca. Este declara un array MEMVAR PUBLIC vac¡o
|
||||
* llamado GetList que va a ser usado por el sistema Get.
|
||||
* Este activa el manejador de error por defecto, y (al menos por el
|
||||
* momento) llama a la funci¢n que establece la tecla de Ayuda por
|
||||
* defecto (F1).
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Se dice que CLIPINIT() no deber¡a llamar a la funci¢n que establece
|
||||
* la tecla de Ayuda por defecto (F1) dado que CA-Cl*pper lo hace en
|
||||
* otro lugar.
|
||||
* $PLATFORMS$
|
||||
* Todas.
|
||||
* $SEEALSO$
|
||||
* INIT PROCEDURE
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __SetHelpK()
|
||||
* $CATEGORY$
|
||||
* Internal
|
||||
* $ONELINER$
|
||||
* Establece a <F1> como la tecla de Ayuda por defecto
|
||||
* $SYNTAX$
|
||||
* __SetHelpK() --> NIL
|
||||
* $ARGUMENTS$
|
||||
* Ninguno
|
||||
* $RETURNS$
|
||||
* __SetHelpK() siempre devuelve NIL
|
||||
* $DESCRIPTION$
|
||||
* Establece que al pulsar la tecla <F1>, se ejecute una funci¢n llamada
|
||||
* HELP si tal funci¢n es enlazada dentro del programa.
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* __SetHelpK() trabaja exactamente como la funci¢n de CA-Cl*pper
|
||||
* llamada __SetHelpK()
|
||||
* $PLATFORMS$
|
||||
* Todas.
|
||||
* $FILES$
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* __XHelp(),SET KEY,SETKEY()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* BREAK()
|
||||
* $CATEGORY$
|
||||
* Error recovery
|
||||
* $ONELINER$
|
||||
* Sale de un bloque BEGIN SEQUENCE
|
||||
* $SYNTAX$
|
||||
* BREAK( <xExp> ) --> NIL
|
||||
* $ARGUMENTS$
|
||||
* <xExp> es cualquier expresi¢n v lida. Esta es requerida siempre
|
||||
* Si Ud. no desea pasarle ning£n argumento, s¢lo use NIL.
|
||||
* $RETURNS$
|
||||
* NIL
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n le pasa el control a la sentencia RECOVER en un bloque
|
||||
* BEGIN SEQUENCE.
|
||||
* $EXAMPLES$
|
||||
* Break( NIL )
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* BREAK() es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas.
|
||||
* $FILES$
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* BEGIN SEQUENCE
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* DO()
|
||||
* $CATEGORY$
|
||||
* Utility
|
||||
* $ONELINER$
|
||||
* Llama a un procedimiento ¢ a una funci¢n
|
||||
* $SYNTAX$
|
||||
* DO( <xFuncProc> [, <xArguments...>] )
|
||||
* $ARGUMENTS$
|
||||
* <xFuncProc> es tanto una cadena con un nombre de funci¢n ¢
|
||||
* procedimiento a ser llamado, ¢ un codeblock a evaluar.
|
||||
* <xArguments> argumentos pasados a la funci¢n ¢ procedimiento
|
||||
* llamado ¢ a un codeblock.
|
||||
* $RETURNS$
|
||||
* A value that was returned from called function.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n puede ser llamada ¢ bien por el compilador Harbour ¢
|
||||
* por el usuario.
|
||||
* El compilador siempre siempre pasa el item de tipo IT_SYMBOL que
|
||||
* almacena el nombre del procedimiento especificado en la sentencia
|
||||
* DO <proc> WITH .
|
||||
* Si el procedimiento/funci¢n no existe, entonces un error de tiempo
|
||||
* de ejecuci¢n es generado.
|
||||
* Esta funci¢n puede ser usada como reemplazo del operador macro.
|
||||
* Esta es tambi‚n usada internamente para implementar:
|
||||
* DO <proc> WITH <args...>
|
||||
* En este caso <xFuncProc> es del tipo HB_SYMB.
|
||||
* $EXAMPLES$
|
||||
* cbCode ={|x| MyFunc( x )}
|
||||
* DO( cbCode, 1 )
|
||||
*
|
||||
* cFunction := "MyFunc"
|
||||
* xRetVal :=DO( cFunction, 2 )
|
||||
*
|
||||
* Old style (slower):
|
||||
* DO &cFunction WITH 3
|
||||
* </fixed>
|
||||
* $PLATFORMS$
|
||||
* Todas.
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
*
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __DBGVMVARLGET()
|
||||
* $CATEGORY$
|
||||
* Variable Management
|
||||
* $ONELINER$
|
||||
* Obtiene una variable LOCAL de un nivel de procedimiento
|
||||
* $SYNTAX$
|
||||
* __DBGVMVARLGET( <nProcLevel>, <nLocal> )
|
||||
* $ARGUMENTS$
|
||||
* <nProcLevel> Es el nivel de procedimiento, el mismo que el usado
|
||||
* en PROCNAME() y PROCLINE(), desde el cual una variable
|
||||
* local va a ser obtenida.
|
||||
* <nLocal> Es la posici¢n ¢ ¡ndice de la variable local a recuperar
|
||||
* $RETURNS$
|
||||
* El contenido de la variable local especificada.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n es usada desde el depurador.
|
||||
* $PLATFORMS$
|
||||
* Todas.
|
||||
* $FILES$
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* PROCNAME()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,222 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2000 Brian Hays <bhays@abacuslaw.com>
|
||||
* Documentaci¢n en Ingl‚s de:
|
||||
* Readme for Idle state, HB_IDLEADD(), HB_IDLEDEL()
|
||||
* HB_IDLESTATE(), hb_idleState()
|
||||
*
|
||||
* Copyright 2000 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de:
|
||||
* Leame para Estado Ocioso, HB_IDLEADD(), HB_IDLEDEL()
|
||||
* HB_IDLESTATE(), hb_idleState()
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* Estado Ocioso
|
||||
* $CATEGORY$
|
||||
* Documento
|
||||
* $ONELINER$
|
||||
* Archivo L‚ame para Estado Ocioso
|
||||
* $DESCRIPTION$
|
||||
* El estado de espera ¢ ocioso es el estado de la m quina virtual de
|
||||
* Harbour cuando esta espera por una acci¢n del usuario a trav‚s del
|
||||
* teclado ¢ el mouse. El estado ocioso ocurre actualmente durante
|
||||
* las llamadas a INKEY(). Todas las funciones que no usen la funci¢n
|
||||
* INKEY() pueden se¤alizar el estado ocioso con una llamada a la
|
||||
* funci¢n Harbour HB_IDLESTATE() ¢ hb_idleState() a nivel de lenguaje
|
||||
* C.
|
||||
*
|
||||
* Durante los estados ociosos, la m quina virtual llama al recolector
|
||||
* de memoria y este puede llamar a acciones definidas por el usuario
|
||||
* (tareas en segundo plano ¢ background). Este tambi‚n libera porciones
|
||||
* del tiempo de la CPU para algunas plataformas deficientes que no son
|
||||
* lo suficientemente inteligentes (Windows NT).
|
||||
*
|
||||
* Por definici¢n de tareas en segundo plano vea las funciones:
|
||||
* HB_IDLEADD() y HB_IDLEDEL().
|
||||
*
|
||||
* Para llamar directamente a acciones en segundo plano vea la funci¢n:
|
||||
* HB_IDLESTATE().
|
||||
*
|
||||
* Para indicar el estado ocioso desde c¢digo en lenguaje C vea la
|
||||
* hb_idleState() en la API,
|
||||
* $SEEALSO$
|
||||
* HB_IDLEADD(),HB_IDLEDEL()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* HB_IDLEADD()
|
||||
* $CATEGORY$
|
||||
* Estado Ocioso
|
||||
* $ONELINER$
|
||||
* Agrega tareas en segundo plano.
|
||||
* $SYNTAX$
|
||||
* HB_IDLEADD( <cbAccion> ) --> nHandle
|
||||
* $ARGUMENTS$
|
||||
* <cbAccion> es un bloque de c¢digo que ser ejecutado durante los
|
||||
* estados ociosos, No hay argumentos pasados a este bloque
|
||||
* de c¢digo durante la evaluaci¢n.
|
||||
* $RETURNS$
|
||||
* <nHandle> El manejador (un valor entero) que identifica la tarea.
|
||||
* Este manejador puede ser usado para eliminar la tarea.
|
||||
* $DESCRIPTION$
|
||||
* HB_IDLEADD() agrega el pasado bloque de c¢digo a las lista de tareas
|
||||
* en segundo plano que ser n evaluadas durante los estados ociosos.
|
||||
* No hay un l¡mite para el n£mero de tareas.
|
||||
* $EXAMPLES$
|
||||
* nTarea := HB_IDLEADD( {|| SayTime()} )
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Extensi¢n de Harbour, similar a la funci¢n FT_ONIDLE() disponible
|
||||
* en la librer¡a Nanforum.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* El archivo fuente es ../source/rtl/idle.c
|
||||
* $SEEALSO$
|
||||
* HB_IDLEDEL(),HB_IDLESTATE()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* HB_IDLEDEL()
|
||||
* $CATEGORY$
|
||||
* Estado Ocioso
|
||||
* $ONELINER$
|
||||
* Remueve tareas desde la lista de tareas en segundo plano.
|
||||
* $SYNTAX$
|
||||
* HB_IDLEDEL( <nHandle> ) --> xAccion
|
||||
* $ARGUMENTS$
|
||||
* <nHandle> es el identificador de la tarea devuelto por la funci¢n
|
||||
* HB_IDLEADD().
|
||||
* $RETURNS$
|
||||
* Retorna <xAccion> igual a NIL si un manejador no v lido es pasado
|
||||
* $DESCRIPTION$
|
||||
* La funci¢n HB_IDLEDEL() remueve la acci¢n asociada con el identi-
|
||||
* ficador pasado desde la lista de tareas en segundo plano.
|
||||
* El identificador deber¡a ser el valor retornado por la llamada
|
||||
* previa a la funci¢n HB_IDLEADD().
|
||||
* Si la tarea especificada est definida, entonces el codeblock es
|
||||
* retornado, de otro modo el valor NIL es retornado.
|
||||
* $EXAMPLES$
|
||||
* nTarea := HB_IDLEADD( {|| SayTime()} )
|
||||
* INKEY(10)
|
||||
* cbAccion := HB_IDLEDEL( nTarea )
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Extensi¢n de Harbour
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* El archivo fuente es ../source/rtl/idle.c
|
||||
* $SEEALSO$
|
||||
* HB_IDLEADD(),HB_IDLESTATE()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* HB_IDLESTATE()
|
||||
* $CATEGORY$
|
||||
* Estado Ocioso
|
||||
* $ONELINER$
|
||||
* Eval£a una sola tarea en segundo plano y llama al recolector
|
||||
* $SYNTAX$
|
||||
* HB_IDLESTATE()
|
||||
* $ARGUMENTS$
|
||||
* Ninguno
|
||||
* $RETURNS$
|
||||
* NIL
|
||||
* $DESCRIPTION$
|
||||
* La funci¢n HB_IDLESTATE() solicita la recolecci¢n de memoria sin
|
||||
* uso y ejecuta una £nica tarea definida por el bloque de c¢digo
|
||||
* pasado con la funci¢n HB_IDLEADD(). Cada llamada a esta funci¢n
|
||||
* eval£a una tarea diferente en el orden de la creaci¢n de tareas.
|
||||
* No hay argumentos pasados durante la evaluaci¢n del bloque de
|
||||
* c¢digo.
|
||||
* Esta funci¢n puede ser llamada con seguridad, a£n si no hay tareas
|
||||
* definidas en segundo plano.
|
||||
* $EXAMPLES$
|
||||
* nTarea1 := HB_IDLEADD( {|| MuestreLaHora()} )
|
||||
* nTarea2 := HB_IDLEADD( {|| SaveScreen()} )
|
||||
*
|
||||
* DO WHILE( ! bTerminado )
|
||||
* bTerminado := HagaAlgoMuyImportante()
|
||||
* HB_IdleState()
|
||||
* ENDDO
|
||||
*
|
||||
* cbAccion := HB_IDLEDEL( nTarea1 )
|
||||
* HB_IDLEDEL( nTarea2 )
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Extensi¢n de Harbour, similar a la funci¢n FT_IAMIDLE() disponible
|
||||
* en la librer¡a Nanforum.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* El archivo fuente es ../source/rtl/idle.c
|
||||
* $SEEALSO$
|
||||
* HB_IDLEADD(),HB_IDLEDEL()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* hb_idleState()
|
||||
* $CATEGORY$
|
||||
* Estado Ocioso
|
||||
* $ONELINER$
|
||||
* Eval£a una sola tarea en segundo plano y llama al recolector
|
||||
* $SYNTAX$
|
||||
* void hb_idleState( void );
|
||||
* $ARGUMENTS$
|
||||
* Ninguno
|
||||
* $RETURNS$
|
||||
* Nada.
|
||||
* $DESCRIPTION$
|
||||
* La funci¢n hb_idleState() es una funci¢n en lenguaje C que solicita
|
||||
* la recolecci¢n de memoria sin uso y ejecuta una sola tarea en
|
||||
* segundo plano, definida por el bloque de c¢digo pasado con la
|
||||
* funci¢n HB_IDLEADD(). Esta tambi‚n libera porciones de tiempo de
|
||||
* CPU para aquellas plataformas que lo requieran.
|
||||
*
|
||||
* Cada llamda a esta funci¢n eval£a una tarea diferente en el orden
|
||||
* de la creaci¢n de tareas. No hay argumentos pasados durante la
|
||||
* evaluaci¢n del bloque de c¢digo.
|
||||
*
|
||||
* Esta funci¢n puede ser llamada con seguridad, a£n si no hay tareas
|
||||
* definidas en segundo plano.
|
||||
*
|
||||
* Esta funci¢n es autom ticamente llamada desde la funci¢n INKEY().
|
||||
* $STATUS$
|
||||
* R
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* El archivo fuente es ../source/rtl/idle.c
|
||||
* $SEEALSO$
|
||||
* HB_IDLEADD(),HB_IDLEDEL(),HB_IDLESTATE()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,484 +0,0 @@
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2000 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de:
|
||||
* INKEY(), __KEYBOARD(), HB_KEYPUT(), NEXTKEY()
|
||||
* LASTKEY(), KEYBOARD, READKEY(), MROW(), MCOL()
|
||||
* Copyright 1999 Chen Kedem <niki@actcom.co.il>
|
||||
* Documentation for: READKEY()
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* INKEY()
|
||||
* $CATEGORY$
|
||||
* Entrada de Consola
|
||||
* $ONELINER$
|
||||
* Extrae el pr¢ximo c¢digo de tecla desde el buffer de teclado.
|
||||
* $SYNTAX$
|
||||
* INKEY( [<nTiempoEspera>] [,<nEventos>] ) --> nTecla
|
||||
* $ARGUMENTS$
|
||||
* <nTiempoEspera> es un valor opcional de tiempo de espera en segundos,
|
||||
* con una resoluci¢n de 1/10th de segundo.
|
||||
* Si es omitido, INKEY() retorna inmediatamente.
|
||||
* Si es cero, INKEY() espera hasta que un evento de entrada suceda.
|
||||
* Si es establecido en cualquier otro valor INKEY() retornara tanto
|
||||
* cuando un evento de entrada ocurra como cuando el per¡odo de espera
|
||||
* haya transcurrido.
|
||||
* Si s¢lo este par metro es especificado y este no es num‚rico, ‚ste
|
||||
* ser tratado como si fuera cero. Pero si ambos par metros son
|
||||
* especificados y este par metro no es num‚rico, este ser tratado
|
||||
* como si no estuviese presente.
|
||||
*
|
||||
* <nEventos> es una m scara opcional de los eventos de entrada que son
|
||||
* habilitados.
|
||||
* Si es omitida por defecto es hb_set.HB_SET_EVENTMASK.
|
||||
* M scaras v lidas de entrada se ecuentran en inkey.ch y son explicadas
|
||||
* m s abajo. Se recomienda usar los nombres de estas m scaras, antes
|
||||
* que sus valores num‚ricos, en el caso que estos valores num‚ricos
|
||||
* cambien en futuras versiones de Harbour.
|
||||
* Para permitir m s de un tipo de evento de entrada, simplemente sume
|
||||
* varios nombres de m scara todos juntos.
|
||||
*
|
||||
* <table>
|
||||
* inkey.ch Significado de los eventos
|
||||
*
|
||||
* INKEY_MOVE permitidos los eventos de movimiento del mouse
|
||||
* INKEY_LDOWN permitido apretar el bot¢n izq. del mouse
|
||||
* INKEY_LUP permitido soltar el bot¢n izquierdo del mouse
|
||||
* INKEY_RDOWN permitido apretar el bot¢n derecho del mouse
|
||||
* INKEY_RUP permitido soltar el bot¢n derecho del mouse
|
||||
* INKEY_KEYBOARD Todos los eventos de teclado estan permitidos
|
||||
* INKEY_ALL Todos los eventos de mouse y teclado estan
|
||||
* permitidos
|
||||
* HB_INKEY_EXTENDED Codigos Extendidos de teclado son usados
|
||||
* </table>
|
||||
* Si el par metro no es num‚rico, este ser tratado como si hubiese
|
||||
* sido establecido a hb_set.HB_SET_EVENTMASK.
|
||||
* $RETURNS$
|
||||
* INKEY() retorna cero en caso de transcurrido el tiempo de espera sin
|
||||
* ning£n evento de entrada, de otro modo retorna un valor en el rango
|
||||
* -39 a 386 para eventos de teclado ¢ en le rango de 1001 a 1007 para
|
||||
* eventos de mouse.
|
||||
* Los eventos de mouse y los eventos de teclado que no se pueden
|
||||
* imprimir son representados por los valores K_<evento> listados en
|
||||
* el archivo inkey.ch
|
||||
* Los c¢digo de teclas de los eventos de teclado en el rango de 32 a
|
||||
* 127 son los equivalentes al set de caracteres ASCII. Los c¢digos de
|
||||
* retorno de eventos de teclado en el rango de 128 a 255 son asumidos
|
||||
* como imprimibles, pero los resultados pueden variar basados en el
|
||||
* hardware del teclado y la nacionalidad de su seteo.
|
||||
*
|
||||
* Los codigos de tecla Extendidos para un teclado de PC consisten de
|
||||
* scancode y uno o mas valores de desplazamiento (offset).
|
||||
* Si ningun modificador de teclado fue usado entonces HB_INKEY_NONE
|
||||
* es agregado. Las teclas <Alt> agregan HB_INKEY_ALT, las teclas
|
||||
* <Ctrl> agregan HB_INKEY_CTRL, las teclas de desplazamiento (Shift),
|
||||
* (que se simbolizan con una flecha hacia arriba) agregan
|
||||
* HB_INKEY_SHIFT, y las teclas adicionales del teclado numerico
|
||||
* ubicadas a la derecha
|
||||
* del teclado (teclas KeyPad y CursorPad ) agregan HB_INKEY_ENHANCED.
|
||||
*
|
||||
* Por ejemplo la tecla <F1> tiene un scancode de 59, asi que si solo
|
||||
* se pulsa <F1> se obtiene el codigo 315, <Alt+F1> da 443, <Ctrl+F1>
|
||||
* da 571, <Shift+F1> da 699. <>
|
||||
*
|
||||
* ?????? And NumPad+/ gives 1077, 1205, 1333, and 1461. At
|
||||
* this time, the only value that can combine with other values is
|
||||
* HB_INKEY_ENHANCED (i.e., there are no Alt+Ctl combinations, etc.)
|
||||
*
|
||||
* Nota: El conjunto de codigos de teclas extendido es mayor que el
|
||||
* conjunto de codigo de tecla normal. Como resultante de esto, si
|
||||
* Ud. cambia entre los modos normal y extendido, Ud. debe saber que
|
||||
* algunos codigos son trasladados como cero en el modo normal (esto
|
||||
* es debido a que existe el correspondiente codigo para esa tecla en
|
||||
* modo normal) y que esos codigos seran removidos del buffer de
|
||||
* entrada del teclado en el modo normal y que Ud. no podr volver
|
||||
* atras y obtenerlos luego en modo extendido.
|
||||
* $DESCRIPTION$
|
||||
* INKEY() puede ser usada para detectar eventos de entrada, como la
|
||||
* pulsaci¢n de una tecla, ¢ un click del mouse (arriba y/o abajo).
|
||||
* $EXAMPLES$
|
||||
* // Espera a que el usuario presione la tecla Esc
|
||||
* ? "Por favor, presione la tecla ESC."
|
||||
* WHILE INKEY( 0.1 ) != K_ESC
|
||||
* END
|
||||
* </fixed>
|
||||
* $TESTS$
|
||||
* KEYBOARD "AB"; ? INKEY(), INKEY() ==> 65 66
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* S
|
||||
* $COMPLIANCE$
|
||||
* INKEY() es compatible con la funci¢n INKEY() de Clipper 5.3 con una
|
||||
* excepci¢n: La funci¢n INKEY() de Harbour dar un error de argumento
|
||||
* si el primer par metro es menor ¢ igual a cero y el segundo par metro
|
||||
* ( ¢ la m scara por defecto ) no es v lida, porque de otra manera
|
||||
* INKEY() podr¡a no retornar nunca, porque en efecto espera por
|
||||
* siempre por un un evento que no se va a producir (Nota: En Clipper,
|
||||
* esto tambi‚n bloquea los eventos SET KEY).
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* inkey.ch
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __KEYBOARD()
|
||||
* $CATEGORY$
|
||||
* Entrada de Consola
|
||||
* $ONELINER$
|
||||
* NO LLAMAR A ESTA FUNCION DIRECTAMENTE !
|
||||
* $SYNTAX$
|
||||
* KEYBOARD <cString>
|
||||
* CLEAR TYPEAHEAD
|
||||
* $ARGUMENTS$
|
||||
* <cString> es una cadena opcional para ser colocada en el buffer
|
||||
* de teclado de Harbour despu‚s de borrarlo.
|
||||
* Nota: El car cter ";" es convertido a CHR(13) (esta es
|
||||
* una caracter¡stica no documentada de CA-Cl*pper).
|
||||
* $RETURNS$
|
||||
* No hay valor de retorno.
|
||||
* $DESCRIPTION$
|
||||
* Borra el buffer de teclado de Harbour y luego inserta una cadena
|
||||
* opcional en ‚ste.
|
||||
* $EXAMPLES$
|
||||
* // Pone la tecla <enter> en el buffer de teclado
|
||||
* KEYBOARD CHR(13)
|
||||
*
|
||||
* // Borra el buffer de teclado
|
||||
* CLEAR TYPEAHEAD
|
||||
* </fixed>
|
||||
* $TESTS$
|
||||
* KEYBOARD CHR(13); ? INKEY() ==> 13
|
||||
* KEYBOARD ";" ? INKEY() ==> 13
|
||||
* KEYBOARD "HOLA"; CLEAR TYPEAHEAD; ? INKEY() ==> 0
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* __KEYBOARD() es compatible con CA-Cl*pper 5.3
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* CLEAR TYPEAHEAD,KEYBOARD
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* HB_KEYPUT()
|
||||
* $CATEGORY$
|
||||
* Entrada de Consola
|
||||
* $ONELINER$
|
||||
* Pone un c¢digo de tecla en el buffer de teclado.
|
||||
* $SYNTAX$
|
||||
* HB_KEYPUT( <nInkeyCode> )
|
||||
* $ARGUMENTS$
|
||||
* <nInkeyCode> es el c¢digo de tecla. que deber¡a ser insertado en
|
||||
* el buffer de teclado.
|
||||
* $RETURNS$
|
||||
* No hay valor de retorno.
|
||||
* $DESCRIPTION$
|
||||
* Inserta un c¢digo de tecla en el buffer de teclado.
|
||||
* El buffer *NO* es borrado en esta operaci¢n. Esta funci¢n permite
|
||||
* insertar c¢digos de teclas que no estan en el rango de 0 a 255.
|
||||
* Para insertar m s de un c¢digo, llame a la funci¢n repetidamente.
|
||||
* El c¢digo cero no puede ser insertado.
|
||||
* $EXAMPLES$
|
||||
* // Coloca la tecla de Alt+PgDn key en el buffer de teclado.
|
||||
* HB_KEYPUT( K_ALT_PGDN )
|
||||
* </fixed>
|
||||
* $TESTS$
|
||||
* HB_KEYPUT( K_ALT_PGDN ) ; ? INKEY() ==> 417
|
||||
* HB_KEYPUT( K_F11 ) ; ? INKEY() ==> -40
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* HB_KEYPUT() es una extensi¢n de Harbour.
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* KEYBOARD,CLEAR TYPEAHEAD,INKEY()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* NEXTKEY()
|
||||
* $CATEGORY$
|
||||
* Entrada de Consola
|
||||
* $ONELINER$
|
||||
* Lee la pr¢xima tecla del buffer de teclado sin extraerla
|
||||
* $SYNTAX$
|
||||
* NEXTKEY( [<nInputMask>] ) --> nTecla
|
||||
* $ARGUMENTS$
|
||||
* <nInputMask> es un valor entero opcional compuesto por una o mas
|
||||
* constantes INKEY_ or HB_INKEY_
|
||||
* El solo proposito de este argumento es permitir cambiar
|
||||
* entre los codigos de tecla HB_INKEY_EXTENDED y usar
|
||||
* los codigos de tecla normales compatibles con Clipper.
|
||||
* $RETURNS$
|
||||
* <nTecla> el valor del pr¢ximo c¢digo de tecla del buffer de teclado.
|
||||
* $DESCRIPTION$
|
||||
* Retorna el valor del pr¢ximo c¢digo de tecla del buffer de teclado
|
||||
* sin extraerlo.
|
||||
* $EXAMPLES$
|
||||
* // Uso de NEXTKEY() con INKEY() para cambiar los caracteres a mostrar
|
||||
* // ¢ para poder salir del bucle, as¡ el llamador puede detectar
|
||||
* // la tecla ESC.
|
||||
* LOCAL nTecla, cChar := "+"
|
||||
*
|
||||
* WHILE TRUE
|
||||
* ?? cChar
|
||||
* nTecla := NEXTKEY()
|
||||
*
|
||||
* IF nTecla == K_ESC
|
||||
* EXIT
|
||||
* ELSE
|
||||
* IF nTecla != 0
|
||||
* cChar := CHR( nTecla )
|
||||
* END IF
|
||||
* ENDIF
|
||||
*
|
||||
* END WHILE
|
||||
* </fixed>
|
||||
* $TESTS$
|
||||
* KEYBOARD "AB"; ? NEXTKEY(), NEXTKEY() ==> 65 65
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* NEXTKEY() es compatible con CA-Cl*pper 5.3
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* INKEY(),LASTKEY()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* LASTKEY()
|
||||
* $CATEGORY$
|
||||
* Entrada de Consola
|
||||
* $ONELINER$
|
||||
* Obtiene el £ltima tecla extraida desde el buffer de teclado.
|
||||
* $SYNTAX$
|
||||
* LASTKEY( [<nInputMask>] ) --> nTecla
|
||||
* $ARGUMENTS$
|
||||
* <nInputMask> es un valor entero opcional compuesto por una o mas
|
||||
* constantes INKEY_ o HB_INKEY_
|
||||
* El solo proposito de este argumento es permitir cambiar
|
||||
* entre los codigos de tecla HB_INKEY_EXTENDED y usar
|
||||
* los codigos de tecla normales compatibles con Clipper.
|
||||
* $RETURNS$
|
||||
* <nTecla> la £ltima tecla extraida desde el buffer de teclado.
|
||||
* $DESCRIPTION$
|
||||
* LASTKEY() retorna el valor de la £ltima tecla extraida del buffer
|
||||
* de teclado.
|
||||
* $EXAMPLES$
|
||||
* // Continua el bucle a menos que la tecla ESC haya sido presionada
|
||||
* // en MainFunc()
|
||||
* WHILE TRUE
|
||||
*
|
||||
* MainFunc()
|
||||
* IF LASTKEY() == K_ESC
|
||||
* EXIT
|
||||
* ENDIF
|
||||
*
|
||||
* END WHILE
|
||||
* </fixed>
|
||||
* $TESTS$
|
||||
* KEYBOARD "AB"; ? INKEY(), LASTKEY() ==> 65 65
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* LASTKEY() es compatible con CA-Cl*pper 5.3
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* INKEY(),LASTKEY()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* KEYBOARD
|
||||
* $CATEGORY$
|
||||
* Comando
|
||||
* $ONELINER$
|
||||
* Rellena el buffer de teclado con una cadena.
|
||||
* $SYNTAX$
|
||||
* KEYBOARD <cString>
|
||||
* $ARGUMENTS$
|
||||
* <cString> es la cadena a ser procesada, un caracter a la vez, por
|
||||
* el procesador de teclado de Harbour.
|
||||
* $DESCRIPTION$
|
||||
* Este comando llena el buffer de entrada con <cString>.
|
||||
* El n£mero de caracteres que pueden ser puestos en el buffer de
|
||||
* teclado es controlado por el comando SET TYPEAHEAD y puede estar en
|
||||
* el rango de 0 a 32622, donde cada caracter corresponde al rango ASCII
|
||||
* de 0 a 255. Ninguna de las teclas extendidas puede ser puestas en
|
||||
* el buffer de teclado.
|
||||
* Haciendo KEYBOARD " " limpiar el buffer de teclado.
|
||||
* $EXAMPLES$
|
||||
* // Coloca la tecla <Enter> en el buffer de teclado.
|
||||
* KEYBOARD CHR(13)
|
||||
*
|
||||
* // Borra el buffer de teclado.
|
||||
* CLEAR TYPEAHEAD
|
||||
* </fixed>
|
||||
* $TESTS$
|
||||
* KEYBOARD CHR(13); ? INKEY() ==> 13
|
||||
* KEYBOARD "HOLA"; CLEAR TYPEAHEAD; ? INKEY() ==> 0
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* __KEYBOARD() es compatible con CA-Cl*pper 5.3
|
||||
* $SEEALSO$
|
||||
* CLEAR TYPEAHEAD,__KEYBOARD()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* READKEY()*
|
||||
* $CATEGORY$
|
||||
* Entrada y Salida de datos
|
||||
* $ONELINER$
|
||||
* Encuentra cual tecla caus¢ la salida del READ
|
||||
* $SYNTAX$
|
||||
* READKEY() --> nCodigoTecla
|
||||
* $ARGUMENTS$
|
||||
* Ninguno.
|
||||
* $RETURNS$
|
||||
* READKEY() retorna un c¢digo num‚rico representando la tecla que
|
||||
* caus¢ la terminaci¢n del READ.
|
||||
* $DESCRIPTION$
|
||||
* READKEY() es usado despu‚s que un READ ha terminado para determinar
|
||||
* la tecla de salida.
|
||||
* Si el buffer del GET fu‚ actualizado durante el READ, el valor 256
|
||||
* es agregado al c¢digo de retorno.
|
||||
*
|
||||
* <table>
|
||||
* Tecla de C¢digo de Retorno C¢digo de Retorno
|
||||
* Salida (no actualizado) (actualizado)
|
||||
*
|
||||
* Up 4 260
|
||||
* Down 5 261
|
||||
* Page-Up 6 262
|
||||
* Page-Down 7 263
|
||||
* Ctrl Page-Up 34 290
|
||||
* Ctrl Page-Down 35 291
|
||||
* Esc 12 268
|
||||
* Ctrl End 14 270
|
||||
* Enter 15 271
|
||||
* Key >= 32 15 271
|
||||
* de otro modo 0 0
|
||||
* </table>
|
||||
* READKEY() es una funci¢n de compatibilidad, as¡ que trate de no
|
||||
* usarla. READKEY() es superada por LASTKEY() la que retorna el c¢digo
|
||||
* de INKEY() para esa tecla. UPDATED() podr¡a ser usado para encontrar
|
||||
* si el buffer GET hab¡a cambiado durante el READ.
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* READKEY() es compatible con CA-Cl*pper 5.3
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* @...GET,INKEY(),LASTKEY(),READ,READEXIT(),UPDATED()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* MROW()
|
||||
* $CATEGORY$
|
||||
* Entrada de Consola
|
||||
* $ONELINER$
|
||||
* Retorna la fila de posici¢n del cursor del mouse.
|
||||
* $SYNTAX$
|
||||
* MROW() --> nFilaMouse
|
||||
* $ARGUMENTS$
|
||||
* Ninguno
|
||||
* $RETURNS$
|
||||
* <nFilaMouse> la fila de posici¢n del cursor del mouse.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n retorna el fila de posicion actual del cursor del mouse
|
||||
* En sistemas gr ficos el valor representa filas de pixels.
|
||||
* En sistemas basados en caracteres el valor representa filas de
|
||||
* caracteres como en Clipper.
|
||||
* $EXAMPLES$
|
||||
* IF MROW() < 1
|
||||
* ? "El Mouse esta en la fila superior!"
|
||||
* ENDIF
|
||||
*
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* MROW() es compatible con CA-Cl*pper 5.3, pero ha sido extendido para
|
||||
* trabajar sobre sistemas gr ficos tan bien como en sistemas basados
|
||||
* en caracteres.
|
||||
* $PLATFORMS$
|
||||
* Todas.
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* MCOL()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* MCOL()
|
||||
* $CATEGORY$
|
||||
* Entrada de Consola
|
||||
* $ONELINER$
|
||||
* Retorna la columna de posici¢n del cursor del mouse.
|
||||
* $SYNTAX$
|
||||
* MCOL() --> nColumnaMouse
|
||||
* $ARGUMENTS$
|
||||
* Ninguno.
|
||||
* $RETURNS$
|
||||
* <nColumnaMouse> la columna de posici¢n del cursor del mouse.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n retorna la columna de posici¢n actual del cursor del
|
||||
* mouse.
|
||||
* En sistemas gr ficos el valor representa filas de pixels.
|
||||
* En sistemas basados en caracteres el valor representa filas de
|
||||
* caracteres como en Clipper.
|
||||
* $EXAMPLES$
|
||||
* IF MCOL() < 1
|
||||
* ? "El Mouse esta sobre el margen izquierdo!"
|
||||
* ENDIF
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* MCOL() es compatible con CA-Cl*pper 5.3, pero ha sido extendido para
|
||||
* trabajar sobre sistemas gr ficos tan bien como en sistemas basados
|
||||
* en caracteres.
|
||||
* $PLATFORMS$
|
||||
* Todas.
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* MROW()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,429 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2000-2004 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de: HB_LANGSELECT(), HB_LANGNAME()
|
||||
* HB_LANGERRMSG(), HB_LANGMESSAGE(), HB_SETCODEPAGE(), HB_TRANSLATE()
|
||||
*
|
||||
* Copyright 2000 Luiz Rafael Culik <culik@sl.conex.net>
|
||||
* Documentaci¢n en Ingl‚s de: HB_LANGSELECT(), HB_LANGNAME()
|
||||
*
|
||||
* Copyright 2004 Chen Kedem <niki@actcom.co.il>
|
||||
* Documentaci¢n en Ingl‚s de: HB_LANGERRMSG(), HB_LANGMESSAGE(),
|
||||
* HB_SETCODEPAGE(), HB_TRANSLATE()
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* HB_LANGERRMSG()
|
||||
* $CATEGORY$
|
||||
* Nacion
|
||||
* $ONELINER$
|
||||
* Descripción de un código de error usando el idioma actual
|
||||
* $SYNTAX$
|
||||
* HB_LANGERRMSG( <nCodigoError> ) --> cMensajeError
|
||||
* $ARGUMENTS$
|
||||
* <nCodigoError> es uno de los código de error genéricos (EG_...)
|
||||
* definidos en include/error.ch
|
||||
* $RETURNS$
|
||||
* HB_LANGERRMSG() retorna la cadena con el mensaje de error que
|
||||
* representa al código <nCodigoError>.
|
||||
* $DESCRIPTION$
|
||||
* Esta función devuelve el mensaje de error asociado con un código de
|
||||
* error usando el idioma actual seleccionado.
|
||||
* $EXAMPLES$
|
||||
* #include "error.ch"
|
||||
*
|
||||
* REQUEST HB_LANG_ES
|
||||
*
|
||||
* FUNCTION Main()
|
||||
* // English: Argument error
|
||||
* ? "English:", HB_LANGERRMSG( EG_ARG )
|
||||
* HB_LANGSELECT( "ES" )
|
||||
*
|
||||
* // Spanish: Error de argumento
|
||||
* ? "Spanish:", HB_LANGERRMSG( EG_ARG )
|
||||
* RETURN NIL
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta función es una Extensión de Harbour
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* Las Librerías asociadas son: rtl, lang
|
||||
* El archivo de cabecera es error.ch
|
||||
* $SEEALSO$
|
||||
* HB_LANGSELECT(),NATIONMSG()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* HB_LANGMESSAGE()
|
||||
* $CATEGORY$
|
||||
* Nacion
|
||||
* $ONELINER$
|
||||
* Retorna una cadena de errores y mensajes internacionales
|
||||
* $SYNTAX$
|
||||
* HB_LANGMESSAGE( <nMensaje> ) --> cMensaje
|
||||
* $ARGUMENTS$
|
||||
* <nMensaje> es el código numérico del mensaje
|
||||
* $RETURNS$
|
||||
* HB_LANGMESSAGE() devuelve el texto asociado con el código <nMensaje>.
|
||||
* $DESCRIPTION$
|
||||
* HB_LANGMESSAGE() es similar a NATIONMSG() pero permite el acceso a
|
||||
* la lista completa de mensajes para un idioma determinado: nombres
|
||||
* de Día y Mes, mensajes de error genéricos, errores internos, etc.
|
||||
*
|
||||
* Utilice el archivo de cabecera hblang.ch para obtener una lista de
|
||||
* los valores de base para <nMensaje>.
|
||||
* $EXAMPLES$
|
||||
* #include "hblang.ch"
|
||||
*
|
||||
* REQUEST HB_LANG_ES
|
||||
*
|
||||
* FUNCTION Main()
|
||||
* // English: Monday
|
||||
* ? "English:", HB_LANGMESSAGE( HB_LANG_ITEM_BASE_DAY + 1 )
|
||||
* HB_LANGSELECT( "ES" )
|
||||
*
|
||||
* // Spanish: Lunes
|
||||
* ? "Spanish:", HB_LANGMESSAGE( HB_LANG_ITEM_BASE_DAY + 1 )
|
||||
* RETURN NIL
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta función es una Extensión de Harbour
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* Las Librerías asociadas son: rtl, lang
|
||||
* El archivo de cabecera es hblang.ch
|
||||
* $SEEALSO$
|
||||
* HB_LANGSELECT(),NATIONMSG(),REQUEST
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* HB_LANGSELECT()
|
||||
* $CATEGORY$
|
||||
* Nacion
|
||||
* $ONELINER$
|
||||
* Selecciona un m¢dulo de mensajes espec¡fico a una nacionalidad.
|
||||
* $SYNTAX$
|
||||
* HB_LANGSELECT(<cNuevoLeng>) --> cViejoLeng
|
||||
* $ARGUMENTS$
|
||||
* <cNuevoLeng> El c¢digo de identificaci¢n del m¢dulo de idioma del
|
||||
* pa¡s.
|
||||
* Los valores posibles para <cNuevoLeng> estan mostrados abajo, tal
|
||||
* como est n definidos en la librer¡a de Lenguajes, ordenados por
|
||||
* idioma.
|
||||
*
|
||||
* <table>
|
||||
* Idioma C¢digo de P gina <cNuevoLeng>
|
||||
* Vasco 850 EU
|
||||
* Catal n 850 CA
|
||||
* Chino Simplificado 936 ZHGB
|
||||
* Chino Tradicional 950 ZHB5
|
||||
* Croata 852 HR852
|
||||
* Croata ISO-8859-2 HRISO
|
||||
* Checo 852 CS852
|
||||
* Checo ISO-8859-2 CSISO
|
||||
* Checo KAM CSKAM
|
||||
* Checo Windows-1250 CSWIN
|
||||
* Ingl‚s 437 EN
|
||||
* Esperanto 850 EO
|
||||
* Franc‚s 850 FR
|
||||
* Gallego 850 GL
|
||||
* Alem n 850 DE
|
||||
* Alem n ANSI ANSI DEWIN
|
||||
* Griego 737 EL
|
||||
* Griego ANSI Windows-1253 ELWIN
|
||||
* Hebreo 862 HE862
|
||||
* Hebreo Windows-1255 HEWIN
|
||||
* Hungaro 852 HU852
|
||||
* Hungaro CWI-2 HUCWI
|
||||
* Hungaro Windows-1 HUWIN
|
||||
* Island‚s 850 IS850
|
||||
* Indonesio 437 ID
|
||||
* Italiano 437 IT
|
||||
* Coreano 949 KO
|
||||
* Polaco 852 PL852
|
||||
* Polaco ISO-8859-1 PLISO
|
||||
* Polaco Mozowia PLMAZ
|
||||
* Polaco Windows-1250 PLWIN
|
||||
* Portugu‚s 850 PT
|
||||
* Rumano 852 RO
|
||||
* Ruso 866 RU866
|
||||
* Ruso KOI-8 RUKOI8
|
||||
* Ruso Windows-1251 RUWIN
|
||||
* Serbio 852 SR852
|
||||
* Serbio ISO-8859-2 SRISO
|
||||
* Serbio Windows-1251 SRWIN
|
||||
* Eslovenio 437 SL437
|
||||
* Eslovenio 852 SL852
|
||||
* Eslovenio ISO-8859-2 SLISO
|
||||
* Eslovenio Windows-1251 SLWIN
|
||||
* Espa¤ol 850 ES
|
||||
* Espa¤ol ANSI ANSI ESWIN
|
||||
* </table>
|
||||
* $RETURNS$
|
||||
* <cViejoLeng> El identificador anterior de Lenguaje
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n establece un m¢dulo de lenguaje o idioma para las
|
||||
* advertencias internas, mensajes NatMsg y errores internos que
|
||||
* utilizan nombres de fechas, d¡as, meses, etc.
|
||||
* Cuando una IDentificaci¢n de Lenguaje es elegida todos los mensajes
|
||||
* son mostrados de acuerdo al actual idioma, hasta que otro sea
|
||||
* seleccionado, ¢ el programa termine.
|
||||
* La ID son dos letras que establecen la correspondencia con un idioma
|
||||
* dado de acuerdo a una tabla.
|
||||
*
|
||||
* Nota: La tabla que se muestra arriba puede no estar completa.
|
||||
* $EXAMPLES$
|
||||
* * El siguiente ejemplo cambia el m¢dulo de idioma por defecto, y
|
||||
* luego muestra por pantalla la ID del m¢dulo de lenguaje, el nombre
|
||||
* del d¡a de la semana y el mes en varios idiomas.
|
||||
*
|
||||
* REQUEST HB_LANG_PT
|
||||
* REQUEST HB_LANG_RO
|
||||
* REQUEST HB_LANG_ES
|
||||
* LOCAL nViejo
|
||||
*
|
||||
* HB_LANGSELECT("PT") // el idioma por defecto es ahora Portugu‚s
|
||||
* ? "La nueva ID de idioma elegida es ", HB_LANGSELECT() // PT
|
||||
* ? CDOW( DATE() )
|
||||
* ? CMONTH( DATE() )
|
||||
*
|
||||
* nViejo := HB_LANGSELECT("RO") // el idioma por defecto es Romano
|
||||
* ? "La vieja ID de idioma elegida era ", nViejo // PT
|
||||
* ? "La nueva ID de idioma elegida es ", HB_LANGSELECT() // RO
|
||||
* ? CDOW( DATE() )
|
||||
* ? CMONTH( DATE() )
|
||||
*
|
||||
* HB_LANGSELECT("ES") // el idioma por defecto es ahora Espa¤ol
|
||||
* ? "La nueva ID de idioma elegida es ", HB_LANGSELECT() // ES
|
||||
* ? CDOW( DATE() )
|
||||
* ? CMONTH( DATE() )
|
||||
*
|
||||
* $TESTS$
|
||||
* Vea ..\tests\langapi.prg tests\langmsg.prg
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es una Extensi¢n de Harbour.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a asociada es rtl
|
||||
* $SEEALSO$
|
||||
* HB_LANGNAME(),HB_SETCODEPAGE(),NATIONMSG(),REQUEST
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* HB_LANGNAME()
|
||||
* $CATEGORY$
|
||||
* Nacion
|
||||
* $ONELINER$
|
||||
* Retorna el nombre del m¢dulo actual de lenguaje en uso.
|
||||
* $SYNTAX$
|
||||
* HB_LANGNAME() --> cNombreLenguaje
|
||||
* $ARGUMENTS$
|
||||
* Ninguno.
|
||||
* $RETURNS$
|
||||
* HB_LANGNAME() retorna <cNombreLenguaje>, el nombre del idioma en uso
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n describe el nombre del idioma ¢ lenguaje correspondiente
|
||||
* al que existe por defecto ¢ ha sido establecido por HB_LANGSELECT().
|
||||
* $EXAMPLES$
|
||||
* * El siguiente ejemplo cambia el m¢dulo de idioma por defecto, y
|
||||
* luego muestra por pantalla la ID del m¢dulo de lenguaje, el idioma
|
||||
* asociado a esa ID. y el d¡a de la semana y el mes en varios idiomas
|
||||
*
|
||||
* REQUEST HB_LANG_PT
|
||||
* REQUEST HB_LANG_ES
|
||||
*
|
||||
* HB_LANGSELECT("PT") // el idioma por defecto es ahora Portugu‚s
|
||||
* ? "El idioma actual es ", HB_LANGNAME() // Portugu‚s
|
||||
* ? "La nueva ID de idioma elegida es ", HB_LANGSELECT() // RO
|
||||
* ? CDOW( DATE() )
|
||||
* ? CMONTH( DATE() )
|
||||
*
|
||||
* HB_LANGSELECT("ES") // el idioma por defecto es ahora Espa¤ol
|
||||
* ? "El idioma actual es ", HB_LANGNAME() // Espa¤ol
|
||||
* ? CDOW( DATE() )
|
||||
* ? CMONTH( DATE() )
|
||||
* $TESTS$
|
||||
* Vea ..\tests\langapi.prg tests\langmsg.prg
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es una Extensi¢n de Harbour.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a asociada es lang
|
||||
* Nota: el nombre de la extensi¢n de la librer¡a, puede cambiar con
|
||||
* el sistema operativo (.lib .o , etc.)
|
||||
* $SEEALSO$
|
||||
* HB_LANGSELECT(),NATIONMSG()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* HB_SETCODEPAGE()
|
||||
* $CATEGORY$
|
||||
* Nacion
|
||||
* $ONELINER$
|
||||
* Selecciona el c¢digo de página activo por la ID del idioma
|
||||
* $SYNTAX$
|
||||
* HB_SETCODEPAGE( [<cNuevoLeng>] ) --> cViejoLeng
|
||||
* $ARGUMENTS$
|
||||
* <cNuevoLeng> El c¢digo de identificaci¢n opcional del m¢dulo de
|
||||
* idioma del pa¡s.
|
||||
* Los valores posibles para <cNuevoLeng> estan mostrados abajo, tal
|
||||
* como est n definidos en la librer¡a de Lenguajes, ordenados por
|
||||
* idioma (según doc. original en inglés).
|
||||
*
|
||||
* <table>
|
||||
* Idioma C¢digo de P gina <cNuevoLeng>
|
||||
*
|
||||
* Ingl‚s 437 EN
|
||||
* Alem n 850 DE
|
||||
* Alem n ANSI ANSI DEWIN
|
||||
* Griego 737 EL
|
||||
* Griego ANSI Windows-1253 ELWIN
|
||||
* Hungaro 852 HU852
|
||||
* Hungaro Windows-1 HUWIN
|
||||
* Polaco 852 PL852
|
||||
* Polaco ISO-8859-2 PLISO
|
||||
* Polaco Mozowia PLMAZ
|
||||
* Polaco Windows-1250 PLWIN
|
||||
* Portugu‚s 850 PT
|
||||
* Portugu‚s ISO-8859-1 PTISO
|
||||
* Ruso 866 RU866
|
||||
* Ruso KOI-8 RUKOI8
|
||||
* Ruso Windows-1251 RUWIN
|
||||
* Serbio Windows-1251 SRWIN
|
||||
* Eslovenio 437 SL437
|
||||
* Eslovenio 852 SL852
|
||||
* Eslovenio ISO-8859-2 SLISO
|
||||
* Eslovenio Windows-1250 SLWIN
|
||||
* Espa¤ol 850 ES
|
||||
* Espa¤ol ANSI ANSI ESWIN
|
||||
* </table>
|
||||
* $RETURNS$
|
||||
* <cViejoLeng> El identificador anterior de Lenguaje
|
||||
* $DESCRIPTION$
|
||||
* HB_SETCODEPAGE() establece el código de página activo usado por
|
||||
* Harbour para ordenar y comparar cadenas. El código de página por
|
||||
* defecto usa el orden ASCII del idioma inglés (cLang == "EN").
|
||||
*
|
||||
* NOTA: Usted debe solicitar a través del comando 'REQUEST' cada
|
||||
* módulo de código de página que Ud. intente usar.
|
||||
* Por ejemplo: para usar el código de página Ruso: RU866, Ud. debe
|
||||
* agregar lo siguiente a su programa:
|
||||
* REQUEST HB_CODEPAGE_RU866
|
||||
* $EXAMPLES$
|
||||
* REQUEST HB_CODEPAGE_HU852
|
||||
*
|
||||
* FUNCTION Main()
|
||||
* LOCAL cTxt := CHR( 71 ) + " > " + CHR( 144 ) + " is"
|
||||
*
|
||||
* ? HB_SETCODEPAGE() // EN
|
||||
* ? cTxt, CHR( 71 ) > CHR( 144 ) // G > <20> is .F.
|
||||
*
|
||||
* ? HB_SETCODEPAGE( "HU852" ) // EN
|
||||
* ? cTxt, CHR( 71 ) > CHR( 144 ) // G > <20> is .T.
|
||||
*
|
||||
* ? HB_SETCODEPAGE( "EN" ) // HU852
|
||||
* ? cTxt, CHR( 71 ) > CHR( 144 ) // G > <20> is .F.
|
||||
* RETURN NIL
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es una Extensi¢n de Harbour.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡as asociadas son rtl, codepage
|
||||
* $SEEALSO$
|
||||
* HB_LANGNAME(),HB_LANGSELECT(),HB_TRANSLATE(),NATIONMSG(),REQUEST
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* HB_TRANSLATE()
|
||||
* $CATEGORY$
|
||||
* Nacion
|
||||
* $ONELINER$
|
||||
* Traduce una cadena de un código de página a otro.
|
||||
* $SYNTAX$
|
||||
* HB_TRANSLATE( <cTextoOrig>, [<cCodPagOrig>], [<cCodPagDest>] )
|
||||
* --> cTextoDest
|
||||
* $ARGUMENTS$
|
||||
* <cTextoOrig> Es la cadena original a traducir.
|
||||
*
|
||||
* <cCodPagOrig> Es la ID opcional del código de página de la cadena
|
||||
* original. Si no es especificada, es usado el código de
|
||||
* página por defecto.
|
||||
*
|
||||
* <cCodPagDest> Es la ID opcional del código de página de la cadena de
|
||||
* destino. Si no es especificada, es usado el código de
|
||||
* página por defecto.
|
||||
* $RETURNS$
|
||||
* HB_TRANSLATE() devuelve la cadena de destino convertida a partir de
|
||||
* la cadena original.
|
||||
* $DESCRIPTION$
|
||||
* HB_TRANSLATE() trata de convertir la cadena original desde un código
|
||||
* de página a otro. Si el código de página no es reconocido, ó no es
|
||||
* enlazado, el código de página por defecto, es usado.
|
||||
* HB_TRANSLATE() es generalmente usado para convertir entre los códigos
|
||||
* de página de DOS y Windows, para un mismo idioma.
|
||||
*
|
||||
* NOTA: Si el código de página de origen y el código de página de
|
||||
* destino, no tienen el mismo número de caracteres, la traducción
|
||||
* no puede ser realizada y la cadena de destino es una copia de
|
||||
* la cadena de origen.
|
||||
*
|
||||
* NOTA: Usted debe solicitar a través del comando 'REQUEST' cada
|
||||
* módulo de código de página que Ud. intente usar.
|
||||
* Por ejemplo: para usar el código de página Ruso: RU866, Ud. debe
|
||||
* agregar lo siguiente a su programa:
|
||||
* REQUEST HB_CODEPAGE_RU866
|
||||
* $EXAMPLES$
|
||||
* REQUEST HB_CODEPAGE_DE
|
||||
* REQUEST HB_CODEPAGE_DEWIN
|
||||
*
|
||||
* FUNCTION Main()
|
||||
* LOCAL cTxt := "A" + CHR( 142 ) + "BC"
|
||||
*
|
||||
* ? "Texto Alemán 850 :", cTxt
|
||||
* ? "Texto Alemán ANSI:", HB_TRANSLATE( cTxt, "DE", "DEWIN" )
|
||||
* RETURN NIL
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es una Extensi¢n de Harbour.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡as asociadas son rtl, codepage
|
||||
* $SEEALSO$
|
||||
* HB_LANGSELECT(),HB_SETCODEPAGE(),NATIONMSG(),REQUEST
|
||||
* $END$
|
||||
*/
|
||||
@@ -1,121 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2001 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de license.txt
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* Licencia
|
||||
* $CATEGORY$
|
||||
* Documento
|
||||
* $ONELINER$
|
||||
* Licencia Actual Del Proyecto Harbour
|
||||
* $DESCRIPTION$
|
||||
*
|
||||
* LICENCIA
|
||||
*
|
||||
* Traducci¢n: Alejandro de G rate. <alex_degarate@hotmail.com>
|
||||
*
|
||||
* Nota del traductor:
|
||||
* Se encar¢ la traducci¢n de la licencia de Harbour de su original
|
||||
* en ingl‚s al espa¤ol, debido a que su comprensi¢n podr¡a aportar
|
||||
* beneficios en los alcances del uso de Harbour y evitar algunos
|
||||
* malentendidos ya sea para uso personal ¢ comercial.
|
||||
*
|
||||
* Soy conciente que la presente traducci¢n puede contener alg£n
|
||||
* error u omisi¢n, aunque he hecho los esfuerzos posibles para
|
||||
* que ello no ocurra.
|
||||
*
|
||||
* Para mayor informaci¢n sobre que opina la FSF acerca de las
|
||||
* traducciones de la GPL consulte:
|
||||
* <http://gnu.org/copyleft/copyleft.es.html>
|
||||
*
|
||||
*
|
||||
* Nota Previa al texto de la licencia: (requisito de la FSF)
|
||||
*
|
||||
* This is an unofficial translation of the GNU General Public License
|
||||
* into spanish. It was not published by the Free Software Foundation,
|
||||
* and does not legally state the distribution terms for software that
|
||||
* uses the GNU GPL--only the original English text of the GNU GPL does
|
||||
* that. However, we hope that this translation will help spanish
|
||||
* speakers understand the GNU GPL better.
|
||||
*
|
||||
* Esta es una traducci¢n no oficial de la Licencia Publica General GNU
|
||||
* al espa¤ol. No fue publicada por la Fundaci¢n de Software Libre, y
|
||||
* no establece legalmente los t‚rminos de distribuci¢n para software
|
||||
* que usa la GPL GNU--s¢lo el texto original en ingl‚s de la GPL GNU
|
||||
* lo hace. Sin embargo, esperamos que esta traducci¢n ayude a gente de
|
||||
* habla hispana a entender mejor la GNU GPL.
|
||||
*
|
||||
*
|
||||
*
|
||||
* <b>LICENCIA ACTUAL DEL PROYECTO HARBOUR</b>
|
||||
* ====================================
|
||||
*
|
||||
* (Actualizada al 10/06/2001)
|
||||
*
|
||||
* "Este programa es software libre; Ud. puede redistribuirlo y/o
|
||||
* modificarlo bajo los t‚rminos de la Licencia P£blica General GNU
|
||||
* como fu‚ publicada por la Fundaci¢n de Software Libre; sea la
|
||||
* versi¢n 2 de la Licencia, ¢ (a su elecci¢n) alguna versi¢n posterior.
|
||||
*
|
||||
* 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 ¢ DESTINO PARA ALGUN PROPOSITO 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; Vea el archivo COPYING. Si no, escriba
|
||||
* a la Fundaci¢n de Software Libre:
|
||||
*
|
||||
* Free Software Foundation, Inc.,
|
||||
* 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307 USA
|
||||
* (¢ visite su sitio Web en http://www.gnu.org/).
|
||||
*
|
||||
* Como una especial excepci¢n, el proyecto Harbour da permiso para
|
||||
* usos adicionales del texto contenido en esta liberaci¢n de Harbour.
|
||||
*
|
||||
* 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¤os
|
||||
* a 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."
|
||||
*
|
||||
*
|
||||
* $SEEALSO$
|
||||
* PANORAMA
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,99 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2002 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de:
|
||||
* Compilador Macro, HB_SETMACRO()
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* Compilador Macro
|
||||
* $CATEGORY$
|
||||
* Documento
|
||||
* $ONELINER$
|
||||
* Compilador Macro
|
||||
* $DESCRIPTION$
|
||||
*
|
||||
* <b>Invocando al compilador de Macros: </b>
|
||||
* =================================
|
||||
*
|
||||
* &variable
|
||||
* ¢
|
||||
* &( expresi¢n )
|
||||
* ¢
|
||||
* &variable.text
|
||||
*
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* HB_SETMACRO()
|
||||
* $CATEGORY$
|
||||
* Compilador Macro
|
||||
* $ONELINER$
|
||||
* Habilita/Inhabilita las caracter¡sticas del Compilador Macro
|
||||
* $SYNTAX$
|
||||
* HB_SETMACRO( <nOpcion>, [<lOnOff>] ) --> <lSeteoAnterior>
|
||||
* $ARGUMENTS$
|
||||
* <nOpcion> Una de las constantes HB_SM_* definidas en set.ch.
|
||||
*
|
||||
* <lOnOff> Usar .T. para habilitar ¢ .F. para Inhabilitar una
|
||||
* caracter¡stica.
|
||||
* $RETURNS$
|
||||
* HB_SETMACRO() retorna el estado anterior de la caracter¡stica
|
||||
* solicitada.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n Habilita / Inhabilita algunas de las caracter¡sticas
|
||||
* del Compilador de Macros. Harbour extiende las caracter¡sticas para
|
||||
* macros comparadas con el conjunto original en Clipper.
|
||||
* Habilitando / Inhabilitando algunas de ellas permite mantener una
|
||||
* estricta compatibilidad con Clipper.
|
||||
*
|
||||
* Las caracter¡sticas disponibles son:
|
||||
*
|
||||
* <b>HB_SM_HARBOUR</b> - Habilita las extensiones de Harbour:
|
||||
* operadores: ++, --, +=, -=, *=, /=, ^=
|
||||
* objetos: asignaciones a una variable de instancia
|
||||
*
|
||||
* <b>HB_SM_XBASE</b> - Habilita extensiones de otros dialectos Xbase++:
|
||||
* Expansi¢n de listas de expresiones
|
||||
*
|
||||
* <b>HB_SM_SHORTCUTS</b> - Habilita la evaluaci¢n optimizada de los
|
||||
* operadores l¢gicos (.AND., .OR.)
|
||||
*
|
||||
* <b>HB_SM_PREPROC</b> - Habilita el preprocesamiento de comandos
|
||||
* Esto es significativo si Harbour es compilado con la bandera
|
||||
* HB_MACRO_STATEMENTS establecida.
|
||||
*
|
||||
* $EXAMPLES$
|
||||
* INIT PROCEDURE IWANTCLIPPER()
|
||||
* HB_SETMACRO( HB_SM_HARBOUR, .F. )
|
||||
* HB_SETMACRO( HB_SM_XBASE, .F. )
|
||||
* RETURN
|
||||
*
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es una extensi¢n de Harbour.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* El archivo de cabecera es ..\include\set.ch
|
||||
* La Librer¡a es macro
|
||||
* $SEEALSO$
|
||||
* Compilador Macro
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,587 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2001 Ricardo Ram¡rez R. <rramirez@crownlitometal.com>
|
||||
* Documentaci¢n en Espa¤ol de: ABS(), EXP(), LOG(), INT(), MAX()
|
||||
* MIN(), SQRT(), ROUND()
|
||||
*
|
||||
* Basado en ../en/math.txt
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* ABS()
|
||||
* $CATEGORY$
|
||||
* Matem ticas
|
||||
* $ONELINER$
|
||||
* Devuelve el valor absoluto de un n£mero.
|
||||
* $SYNTAX$
|
||||
* ABS(<nNumero>) --> <nAbsNumero>
|
||||
* $ARGUMENTS$
|
||||
* <nNumero> Cualquier n£mero.
|
||||
* $RETURNS$
|
||||
* <nAbsNumero> El valor absoluto de un n£mero.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n entrega el valor absoluto de un valor o una expresi¢n
|
||||
* <nNumero>.
|
||||
* $EXAMPLES$
|
||||
* Function Main()
|
||||
*
|
||||
* Local nNumero := 50
|
||||
* Local nNumero1 := 27
|
||||
*
|
||||
* qout( nNumero - nNumero1 )
|
||||
* qout( nNumero1 - nNumero )
|
||||
* qout( ABS(nNumero - nNumero1 ) )
|
||||
* qout( ABS(nNumero1 - nNumero ) )
|
||||
* qout( ABS( -1 * 345 ) )
|
||||
* Return Nil
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta es una funci¢n compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* Se encuentra en la librer¡a rtl
|
||||
* $SEEALSO$
|
||||
* EXP(),INT()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* EXP()
|
||||
* $CATEGORY$
|
||||
* Matem ticas
|
||||
* $ONELINER$
|
||||
* Calcula el valor de e elevado a la potencia indicada.
|
||||
* $SYNTAX$
|
||||
* EXP( <nNumero> ) --> <nValor>
|
||||
* $ARGUMENTS$
|
||||
* <nNumero> Cualquier n£mero real.
|
||||
* $RETURNS$
|
||||
* <nValor> El anti-logaritmo de <nNumero>.
|
||||
* $DESCRIPTION$
|
||||
* Esta function devuelve el valor de e elevado a la potencia indicada
|
||||
* en <nNumero>. Es la contraria de LOG().
|
||||
* $EXAMPLES$
|
||||
* ? EXP(45)
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta es una funci¢n compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* Se encuentra en la librer¡a rtl
|
||||
* $SEEALSO$
|
||||
* LOG(),SET DECIMALS,SET FIXED
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* INT()
|
||||
* $CATEGORY$
|
||||
* Matem ticas
|
||||
* $ONELINER$
|
||||
* Devuelve la parte entera de un valor n£merico.
|
||||
* $SYNTAX$
|
||||
* INT( <nNumero> ) --> <nIntNumero>
|
||||
* $ARGUMENTS$
|
||||
* <nNumero> Cualquier valor n£merico.
|
||||
* $RETURNS$
|
||||
* <nIntNumero> La parte entera de un valor n£merico.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n convierte una expresi¢n num‚rica en entero. Todos
|
||||
* lo d¡gitos decimales son truncados. Esta funci¢n no redondea el
|
||||
* valor ni por encima ni por debajo; simplemente trunca el valor
|
||||
* desde el punto decimal.
|
||||
* $EXAMPLES$
|
||||
* SET Decimal to 5
|
||||
* ? INT( 632512.62541 )
|
||||
* ? INT( 845414111.91440 )
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta es una funci¢n compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* Se encuentra en la librer¡a rtl
|
||||
* $SEEALSO$
|
||||
* ROUND(),STRZERO()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* LOG()
|
||||
* $CATEGORY$
|
||||
* Matem ticas
|
||||
* $ONELINER$
|
||||
* Devuelve el logaritmo natural de un n£mero.
|
||||
* $SYNTAX$
|
||||
* LOG( <nNumero> ) --> <nLog>
|
||||
* $ARGUMENTS$
|
||||
* <nNumero> Cualquier expresi¢n num‚rica.
|
||||
* $RETURNS$
|
||||
* <nExponente> El logaritmo natural de <nNumero>.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n devuelve el logaritmo natural del n£mero <nNumero>.
|
||||
* Si <nNumero> es 0 o menor que 0, se produce un desbordamiento
|
||||
* num‚rico, el cual es mostrado en la pantalla como una serie de
|
||||
* asteriscos.
|
||||
* Esta funci¢n es la contraria de EXP().
|
||||
* $EXAMPLES$
|
||||
* ? LOG(632512)
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta es una funci¢n compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* Se encuentra en la librer¡a rtl
|
||||
* $SEEALSO$
|
||||
* EXP(),SET DECIMALS,SET FIXED
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* MAX()
|
||||
* $CATEGORY$
|
||||
* Matem ticas
|
||||
* $ONELINER$
|
||||
* Devuelve el mayor de dos n£meros o fechas.
|
||||
* $SYNTAX$
|
||||
* MAX(<xValor>,<xValor1>) --> <xMax>
|
||||
* $ARGUMENTS$
|
||||
* <xValor> Cualquier fecha o valor n£merico.
|
||||
*
|
||||
* <xValor1> Cualquier fecha o valor n£merico (con el mismo tipo de
|
||||
* <xValor>).
|
||||
* $RETURNS$
|
||||
* <xMax> El n£mero mayor (o la fecha mayor).
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n devuelve el mayor de las dos expresiones pasadas. Si
|
||||
* <xValor> y <xValor1> son del tipo n£merico, el valor devuelto
|
||||
* por esta funci¢n ser tambien num‚rico y ser el mayor de los
|
||||
* numeros pasados a dicha funci¢n. Si <xValor> y <xValor1> son del
|
||||
* tipo fecha el valor devuelto ser tambien de tipo fecha. Este ser
|
||||
* la mayor de ellas.
|
||||
* $EXAMPLES$
|
||||
* ? MAX( 214514214,6251242142 )
|
||||
* ? MAX( CTOD('11/11/2000'), CTOD('21/06/2014') )
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta es una funci¢n compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* Se encuentra en la librer¡a rtl
|
||||
* $SEEALSO$
|
||||
* MIN()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* MIN()
|
||||
* $CATEGORY$
|
||||
* Matem ticas
|
||||
* $ONELINER$
|
||||
* Determina el menor de dos n£meros o fechas.
|
||||
* $SYNTAX$
|
||||
* MIN(<xValor>,<xValor1>) --> <xMin>
|
||||
* $ARGUMENTS$
|
||||
* <xValor> Cualquier fecha o valor num‚rico.
|
||||
*
|
||||
* <xValor1> Cualquier fecha o valor num‚rico (con el mismo tipo de
|
||||
* <xValor>).
|
||||
* $RETURNS$
|
||||
* <xMin> El valor o fecha menor.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n devuelve el menor valor del par de expresiones
|
||||
* recibidas <xValor> y <xValor1> deben ser del mismo tipo. Si es
|
||||
* num‚rico, el menor valor es devuelto. Si es fecha, la fecha menor
|
||||
* es devuelta.
|
||||
* $EXAMPLES$
|
||||
* ? MIN(214514214,6251242142)
|
||||
* ? MIN(CTOD('11/11/2000'),CTOD('21/06/2014')
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta es una funci¢n compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* Se encuentra en la librer¡a rtl
|
||||
* $SEEALSO$
|
||||
* MAX()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* MOD() *
|
||||
* $CATEGORY$
|
||||
* Matem ticas
|
||||
* $ONELINER$
|
||||
* Devuelve el residuo de dos n£meros.
|
||||
* $SYNTAX$
|
||||
* MOD( <nNumero>,<nNumero1>) --> <nResiduo>
|
||||
* $ARGUMENTS$
|
||||
* <nNumero> Numerador en una expresi¢n de divisi¢n.
|
||||
*
|
||||
* <nNumero1> Denominador en una expresi¢n de divisi¢n.
|
||||
* $RETURNS$
|
||||
* <nResiduo> El residuo despues de la operaci¢n de divisi¢n.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n devuleve el residuo de un n£mero dividido entre otro.
|
||||
* $EXAMPLES$
|
||||
* ? MOD( 12,8.521 )
|
||||
* ? MOD( 12,0 )
|
||||
* ? MOD( 62412.5142,4522114.12014 )
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta es una funci¢n compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* Se encuentra en la librer¡a rtl
|
||||
* $SEEALSO$
|
||||
* %
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* SQRT()
|
||||
* $CATEGORY$
|
||||
* Matem ticas
|
||||
* $ONELINER$
|
||||
* Calcula la ra¡z cuadrada de un n£mero.
|
||||
* $SYNTAX$
|
||||
* SQRT( <nNumero> ) --> <nSqrt>
|
||||
* $ARGUMENTS$
|
||||
* <nNumero> Cualquier valor num‚rico.
|
||||
* $RETURNS$
|
||||
* <nSqrt> La ra¡z cuadrada de <nNumero>.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n devuelve la ra¡z cuadrada de <nNumero>. La presici¢n
|
||||
* de esta evaluaci¢n esta basada £nicamente en la asignaci¢n del
|
||||
* comando SET DECIMAL TO
|
||||
* Cualquier n£mero negativo pasado como <nNumero> siempre retornar 0.
|
||||
* $EXAMPLES$
|
||||
* SET Decimal to 5
|
||||
* ? SQRT( 632512.62541 )
|
||||
* ? SQRT( 845414111.91440 )
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta es una funci¢n compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* Se encuentra en la librer¡a rtl
|
||||
* $SEEALSO$
|
||||
* ROUND(),SET DECIMALS,SET FIXED
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* ROUND()
|
||||
* $CATEGORY$
|
||||
* Matem ticas
|
||||
* $ONELINER$
|
||||
* Redondea una expresi¢n num‚rica.
|
||||
* $SYNTAX$
|
||||
* ROUND( <nNumero>, <nLugares> ) --> <nResultado>
|
||||
* $ARGUMENTS$
|
||||
* <nNumero> Cualquier valor num‚rico.
|
||||
*
|
||||
* <nLugares> El n£mero de lugares decimales a redondear.
|
||||
* $RETURNS$
|
||||
* <nResultado> El n£mero redondeado.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n redondea el valor de <nNumero> a la cantidad de lugares
|
||||
* decimales especificados en <nLugares>. Si el valor de <nLugares> es
|
||||
* un n£mero negativo, la funci¢n intentar redondear <nNumero> en el
|
||||
* n£mero completo. N£meros de 5 a 9 ser n redondeados hacia arriba, el
|
||||
* resto redondeados hacia abajo.
|
||||
* $EXAMPLES$
|
||||
* ? ROUND(632512.62541,5)
|
||||
* ? ROUND(845414111.91440,3)
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta es una funci¢n compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* Se encuentra en la librer¡a rtl
|
||||
* $SEEALSO$
|
||||
* INT(),SET DECIMALS,SET FIXED,STR(),VAL()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* hb_getMathError()
|
||||
* $CATEGORY$
|
||||
* Matem ticas API
|
||||
* $ONELINER$
|
||||
* Obtener el £ltimo error de la librer¡a matem tica.
|
||||
* $SYNTAX$
|
||||
* C Prototype
|
||||
*
|
||||
* #include <hbmath.h>
|
||||
* hb_getMathError (void) --> int iMathError
|
||||
* $ARGUMENTS$
|
||||
* Ninguno
|
||||
* $RETURNS$
|
||||
* Retorna el £ltimo error matem tico
|
||||
* $DESCRIPTION$
|
||||
*
|
||||
* $EXAMPLES$
|
||||
*
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Compatibilidad no es aplicable a las llamadas a las APIs.
|
||||
* $FILES$
|
||||
* Se encuentra en la librer¡a rtl
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* hb_setMathError(),hb_resetMathError()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* hb_resetMathError()
|
||||
* $CATEGORY$
|
||||
* Matem ticas API
|
||||
* $ONELINER$
|
||||
* Inicializa el error matem tico.
|
||||
* $SYNTAX$
|
||||
* C Prototype
|
||||
*
|
||||
* #include <hbmath.h>
|
||||
* hb_resetMathError (void) --> void
|
||||
* $ARGUMENTS$
|
||||
* Ninguno
|
||||
* $RETURNS$
|
||||
* Nada
|
||||
* $DESCRIPTION$
|
||||
* Pone en cero (No hay error) a la variable donde se conservan los
|
||||
* errores matem ticos
|
||||
* $EXAMPLES$
|
||||
*
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Compatibilidad no es aplicable a las llamadas a las APIs.
|
||||
* $FILES$
|
||||
* Se encuentra en la librer¡a rtl
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* hb_isMathHandler()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* hb_isMathHandler()
|
||||
* $CATEGORY$
|
||||
* Matem ticas API
|
||||
* $ONELINER$
|
||||
* Verifica si el manejador de errores de Harbour esta disponible.
|
||||
* $SYNTAX$
|
||||
* C Prototype
|
||||
*
|
||||
* #include <hbmath.h>
|
||||
* hb_isMathHandler (void) --> int iIsMathHandler
|
||||
* $ARGUMENTS$
|
||||
* Ninguno
|
||||
* $RETURNS$
|
||||
*
|
||||
* $DESCRIPTION$
|
||||
*
|
||||
* $EXAMPLES$
|
||||
*
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Compatibilidad no es aplicable a las llamadas a las APIs.
|
||||
* $FILES$
|
||||
* Se encuentra en la librer¡a rtl
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* hb_installMathHandler(),hb_getMathHandlerStatus()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* hb_installMathHandler()
|
||||
* $CATEGORY$
|
||||
* Matem ticas API
|
||||
* $ONELINER$
|
||||
* Agrega un manejador de errores definido por el usuario
|
||||
* $SYNTAX$
|
||||
* C Prototype
|
||||
*
|
||||
* #include <hbmath.h>
|
||||
* hb_installMathHandler (HB_MATH_HANDLERPROC handlerproc)
|
||||
* --> HB_MATH_HANDLERHANDLE handle
|
||||
* $ARGUMENTS$
|
||||
* <handlerproc> Manejador para el manejador de errores
|
||||
* $RETURNS$
|
||||
* <handle> Identificador del manejador en la cadena de
|
||||
* identificadores.
|
||||
* $DESCRIPTION$
|
||||
*
|
||||
* $EXAMPLES$
|
||||
*
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Compatibilidad no es aplicable a las llamadas a las APIs.
|
||||
* $FILES$
|
||||
* Se encuentra en la librer¡a rtl
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* hb_deinstallMathHandler()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* hb_deinstallMathHandler()
|
||||
* $CATEGORY$
|
||||
* Matem ticas API
|
||||
* $ONELINER$
|
||||
* Quita un manejador de errores definido por el usuario.
|
||||
* $SYNTAX$
|
||||
* C Prototype
|
||||
*
|
||||
* #include <hbmath.h>
|
||||
* hb_deinstallMathHandler (HB_MATH_HANDLERHANDLE handle)
|
||||
* --> int iSuccess
|
||||
* $ARGUMENTS$
|
||||
* <handle> Identificador devuelto por hb_installMathHandler()
|
||||
* $RETURNS$
|
||||
* <iSuccess> Como termino el proceso.
|
||||
* $DESCRIPTION$
|
||||
*
|
||||
* $EXAMPLES$
|
||||
*
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Compatibilidad no es aplicable a las llamadas a las APIs.
|
||||
* $FILES$
|
||||
* Se encuentra en la librer¡a rtl
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* hb_installMathHandler()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* hb_setMathHandlerStatus()
|
||||
* $CATEGORY$
|
||||
* Matem ticas API
|
||||
* $ONELINER$
|
||||
* Pone el estado del manejador de errores definido por el usuario
|
||||
* $SYNTAX$
|
||||
* C Prototype
|
||||
*
|
||||
* #include <hbmath.h>
|
||||
* hb_setMathHandlerStatus (HB_MATH_HANDLERHANDLE handle, int status)
|
||||
* --> int iSuccess
|
||||
* $ARGUMENTS$
|
||||
* <handle> Identificador devuelto por hb_installMathHandler()
|
||||
* <status> nuevo valor del estado, puede ser uno de los
|
||||
* siguientes:
|
||||
* HB_MATH_HANDLER_STATUS_INACTIVE
|
||||
* --> identificador presente pero no activo
|
||||
* HB_MATH_HANDLER_STATUS_ACTIVE
|
||||
* --> identificador presente y activo
|
||||
* $RETURNS$
|
||||
* iSuccess Como termino el proceso.
|
||||
* $DESCRIPTION$
|
||||
*
|
||||
* $EXAMPLES$
|
||||
*
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Compatibilidad no es aplicable a las llamadas a las APIs.
|
||||
* $FILES$
|
||||
* Se encuentra en la librer¡a rtl
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* hb_getMathHandlerStatus()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* hb_getMathHandlerStatus()
|
||||
* $CATEGORY$
|
||||
* Matem ticas API
|
||||
* $ONELINER$
|
||||
* Lee el estado del manejador de errores definido por el usuario
|
||||
* $SYNTAX$
|
||||
* C Prototype
|
||||
*
|
||||
* #include <hbmath.h>
|
||||
* hb_getMathHandlerStatus (HB_MATH_HANDLERHANDLE handle)
|
||||
* --> int iStatus
|
||||
* $ARGUMENTS$
|
||||
* <handle> Identificador devuelto por hb_installMathHandler()
|
||||
* $RETURNS$
|
||||
* <iStatus> Estado del manejador de errores.
|
||||
* $DESCRIPTION$
|
||||
*
|
||||
* $EXAMPLES$
|
||||
*
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Compatibilidad no es aplicable a las llamadas a las APIs.
|
||||
* $FILES$
|
||||
* Se encuentra en la librer¡a rtl
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $SEEALSO$
|
||||
* hb_setMathHandlerStatus()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,253 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2000-2003 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de: MEMOTRAN(), HARDCR()
|
||||
* MEMOREAD(), MEMOWRIT()
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* MEMOTRAN()
|
||||
* $CATEGORY$
|
||||
* Cadenas
|
||||
* $ONELINER$
|
||||
* Reemplaza los retornos del carro/nueva linea de una cadena
|
||||
* $SYNTAX$
|
||||
* MEMOTRAN( <cCadena>, <cDuro>, <cBlando> ) --> <cCadenaConvertida>
|
||||
* $ARGUMENTS$
|
||||
* <cCadena> es la cadena de caracteres a convertir.
|
||||
*
|
||||
* <cDuro> es el car cter para reemplazar los retornos de carro "duro".
|
||||
* Si no es especificado por defecto es el punto y coma.
|
||||
*
|
||||
* <cBlando> es el c racter para reemplazar los retornos de carro
|
||||
* "blandos". Si no es especificado, por defecto es un espacio
|
||||
* en blanco.
|
||||
* $RETURNS$
|
||||
* MEMOTRAN() retorna <cCadenaConvertida>, la cadena transformada.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n retorna una cadena donde los caracteres de retorno de
|
||||
* carro han sido convertidos a los caracteres especificados.
|
||||
* $EXAMPLES$
|
||||
* * El siguiente ejemplo formatea un campo memo conteniendo un mensaje
|
||||
* de error en una cadena adecuada para ser enviada a la funci¢n
|
||||
* ALERT()
|
||||
*
|
||||
* cMensaje = MEMOTRAN( Errores->MENSAJE )
|
||||
* ALERT( cMensaje, aOpciones )
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a asociada es rtl
|
||||
* $SEEALSO$
|
||||
* HARDCR(),STRTRAN()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* HARDCR()
|
||||
* $CATEGORY$
|
||||
* Cadenas
|
||||
* $ONELINER$
|
||||
* Reemplaza los CHR(141) por retornos de carro normal CHR(13)
|
||||
* $SYNTAX$
|
||||
* HARDCR( <cCadena> ) --> <cCadenaConvertida>
|
||||
* $ARGUMENTS$
|
||||
* <cCadena> es la cadena de caracteres a convertir.
|
||||
* $RETURNS$
|
||||
* HARDCR() retorna <cCadenaConvertida>, la cadena transformada.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n retorna una cadena/memo donde los caracteres de retorno
|
||||
* de carro automaticos ¢ "blandos" ( CHR(141) ) son convertidos a
|
||||
* caracteres de retorno de carro forzado ¢ "duro" CHR(13).
|
||||
* $EXAMPLES$
|
||||
* * El siguiente ejemplo asigna a una variable de cadena, el campo memo
|
||||
* NOTAS existente en la base Clientes, transformado para mostrarlo
|
||||
* por pantalla.
|
||||
* cNotas = HARDCR( Clientes->NOTAS )
|
||||
* ? cNotas
|
||||
*
|
||||
* * El siguiente ejemplo envia a la impresora el contenido de un campo
|
||||
* memo.
|
||||
*
|
||||
* SET DEVICE TO PRINTER
|
||||
* DEVPOS( nFil, nCol)
|
||||
* DEVOUT( HARDCR( Clientes->NOTAS ) )
|
||||
*
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a asociada es rtl
|
||||
* $SEEALSO$
|
||||
* MEMOTRAN(),STRTRAN()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* MEMOREAD()
|
||||
* $CATEGORY$
|
||||
* Campo Memo
|
||||
* $ONELINER$
|
||||
* Retorna el contenido de un archivo como cadena de caracteres
|
||||
* $SYNTAX$
|
||||
* MEMOREAD( <cArchivo> ) --> <cCadena>
|
||||
* $ARGUMENTS$
|
||||
* <cArchivo> Nombre del archivo a leer. Debe incluir la extensi¢n.
|
||||
* Si el archivo se encuentra en otro subdirectorio, se
|
||||
* debe incluir el path.
|
||||
* $RETURNS$
|
||||
* Retorna el contenido de un archivo de texto como una cadena de
|
||||
* caracteres <cCadena>.
|
||||
* El tama¤o m ximo del archivo, que puede ser le¡do, es el mismo que
|
||||
* el tama¤o m ximo de una cadena de caracteres (m s de 2 Mb). Harbour
|
||||
* no tiene el l¡mite de 64 Kb como en Clipper.
|
||||
* Si <cArchivo> no puede ser encontrado o le¡do, la funci¢n retorna
|
||||
* una cadena de caracteres, vacia ("").
|
||||
* $DESCRIPTION$
|
||||
* MEMOREAD() es una funci¢n que lee el contenido de un archivo de texto
|
||||
* (hasta ahora) desde un archivo en disco (floppy, HD, CD-ROM, etc.)
|
||||
* De esa forma Ud. puede manipular el contenido como cualquier cadena
|
||||
* de caracteres ¢ asignarlo a un campo memo para ser guardado en una
|
||||
* base de datos.
|
||||
*
|
||||
* La funci¢n MEMOREAD() es usada junto con MEMOWRIT() y MEMOEDIT()
|
||||
* para obtener de disco, texto de diferentes fuentes y que podr¡a ser
|
||||
* objeto de edici¢n, b£squeda, reemplazo, visualizaci¢n, etc. y luego
|
||||
* ser escrito a la base de datos.
|
||||
*
|
||||
* Es usada para importar datos desde otras fuentes a la base de datos.
|
||||
*
|
||||
* Nota:
|
||||
* MEMOREAD() no usa los seteos SET DEFAULT y SET PATH para buscar por
|
||||
* <cArchivo>.
|
||||
* Esta funci¢n busca por <cArchivo> en el directorio actual.
|
||||
* Si el archivo no se encuentra, entonces MEMOREAD() busca en el path
|
||||
* del D.O.S.
|
||||
*
|
||||
* Sobre un entorno de red, MEMOREAD() intenta abrir el archivo
|
||||
* <cArchivo> en modo de s¢lo-lectura y compartido. Si el archivo es
|
||||
* usado en modo exclusivo (no compartido) por otro proceso o programa
|
||||
* la funci¢n devolver una cadena vacia ("").
|
||||
*
|
||||
* Es una de las funciones de Clipper m s £til, realmente lo hace f cil.
|
||||
* $EXAMPLES$
|
||||
* * Este ejemplo usa MEMOREAD() para asignar el contenido de un
|
||||
* archivo de texto a una variable para una b£squeda posterior.
|
||||
*
|
||||
* cFile := "account.prg"
|
||||
* cString := MEMOREAD( cFile )
|
||||
*
|
||||
* IF AT( "Melina", cString) == 0 // chequea el copyright
|
||||
* MEMOWRIT( cFile, cCopyright + cString ) // si falta, ponerlo !
|
||||
* ENDIF
|
||||
*
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a asociada es rtl
|
||||
* $SEEALSO$
|
||||
* MEMOEDIT(),MEMOWRIT(),REPLACE
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* MEMOWRIT()
|
||||
* $CATEGORY$
|
||||
* Campo Memo
|
||||
* $ONELINER$
|
||||
* Escribe un campo memo ¢ una cadena a un archivo de texto en disco
|
||||
* $SYNTAX$
|
||||
* MEMOWRIT( <cArchivo>, <cCadena>, [<lEscribeEOF>] ) --> lExito
|
||||
* $ARGUMENTS$
|
||||
* <cArchivo> Nombre del archivo a leer. Debe incluir la extensi¢n.
|
||||
* Si el archivo se encuentra en otro subdirectorio, se
|
||||
* debe incluir el path.
|
||||
*
|
||||
* <cCadena> Es un campo memo o una cadena de caracteres, a ser
|
||||
* escrita en <cArchivo>.
|
||||
*
|
||||
* <lEscribeEOF> Es una variable l¢gica que determina si el car cter
|
||||
* de fin de archivo - CHR(26) - se escribe a disco.
|
||||
* Este par metro es opcional. Su valor por defecto es
|
||||
* verdadero (.T.)
|
||||
* $RETURNS$
|
||||
* La funci¢n devuelve verdadero (.T.) si la operacion de escritura fue
|
||||
* exitosa, de otro modo, ‚sta devuelve falso (.F.).
|
||||
* $DESCRIPTION$
|
||||
* Esta es una funci¢n que escribe un campo memo ¢ una cadena de
|
||||
* caracteres a un archivo de texto en disco (floppy, HD, CD-ROM, etc.)
|
||||
* Si Ud. no especifica un path, MEMOWRIT() escribe <cArchivo> en el
|
||||
* directorio actual. Si <cArchivo> existe ‚ste ser sobreescrito.
|
||||
*
|
||||
* Nota:
|
||||
* Existe un tercer par metro opcional <lEscribeEOF> (que est ausente
|
||||
* en Clipper), el cual le permite al programador cambiar en tiempo de
|
||||
* ejecuci¢n el comportamiento (por defecto) de escribir - siempre -
|
||||
* el car cter de fin de archivo, CHR(26) como en Clipper.
|
||||
* Si no existe un tercer parametro, nada cambia, EOF es escrito como
|
||||
* en Clipper, lo mismo ocurre cuando <lEscribeEOF> es puesto en .T.
|
||||
* Pero, si <lEscribeEOF> es puesto en .F., el car cter EOF no es
|
||||
* escrito al final del archivo.
|
||||
*
|
||||
* La funci¢n MEMOWRIT() es usada junto con MEMOREAD() y MEMOEDIT() para
|
||||
* grabar a disco texto de diferentes fuentes y que pudo haber sido
|
||||
* objeto de edici¢n, b£squeda, reemplazo, visualizaci¢n, etc.
|
||||
*
|
||||
* Esta funci¢n es usada para exportar la base de datos a otro formato.
|
||||
*
|
||||
* Nota:
|
||||
* MEMOWRIT() no usa el seteo de directorio SET DEFAULT.
|
||||
*
|
||||
* Es una de las funciones de Clipper m s £til, realmente lo hace f cil.
|
||||
* $EXAMPLES$
|
||||
* * Este ejemplo usa MEMOWRIT() para escribir el contenido de una
|
||||
* variable de caracteres a un archivo de texto
|
||||
*
|
||||
* cFile := "account.prg"
|
||||
* cString := MEMOREAD( cFile )
|
||||
*
|
||||
* IF AT( "Melina", cString) == 0 // chequea el copyright
|
||||
* MEMOWRIT( cFile, cCopyright + cString ) // si falta, ponerlo !
|
||||
* ENDIF
|
||||
*
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a asociada es rtl
|
||||
* $SEEALSO$
|
||||
* MEMOEDIT(),MEMOREAD()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,195 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2003 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de:
|
||||
* FIELD, LOCAL, MEMVAR
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $COMMANDNAME$
|
||||
* FIELD
|
||||
* $CATEGORY$
|
||||
* Comando
|
||||
* $ONELINER$
|
||||
* Declara una lista de nombres de campo de una base de datos
|
||||
* $SYNTAX$
|
||||
* FIELD <xField> [,<xFieldn...> [in <cDatabase>]
|
||||
* $ARGUMENTS$
|
||||
* <xField> Un nombre de campo válido
|
||||
*
|
||||
* <xFieldn> Nombres de campo adicionales
|
||||
*
|
||||
* <cDatabase> Un nombre de alias válido
|
||||
* $RETURNS$
|
||||
* Nada
|
||||
* $DESCRIPTION$
|
||||
* Este comando declara los nombres de los campos <xField> y siguientes
|
||||
* <xFieldn> con una identificador opcional de alias <cDatabase> para
|
||||
* cada uno.
|
||||
* Este comando le permite a Harbour resolver cualquier referencia a un
|
||||
* campo especificado en la lista de campos, viéndolo como un campo
|
||||
* cuando no es referenciado por un alias.
|
||||
* Si un campo no está mencionado en la lista y no está explicitamente
|
||||
* marcado con el identificador de alias, éste puede ser visto como una
|
||||
* variable de memoria, lo cual puede causar errores de ejecución.
|
||||
*
|
||||
* Este comando no tiene efecto sobre variables de memoria ó sobre
|
||||
* referencias a campos metidos dentro de una macro-expresión.
|
||||
* $EXAMPLES$
|
||||
* FUNCTION MAIN
|
||||
* FIELD iD
|
||||
* FIELD Name
|
||||
* USE TESTS NEW
|
||||
* name := "Sales"
|
||||
* Id := 5
|
||||
* USE
|
||||
* RETURN NIL
|
||||
* $TESTS$
|
||||
* Ver ../tests/testwarn.prg
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Este comando trabaja exactamente como en CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* Ninguno
|
||||
* $SEEALSO$
|
||||
* MEMVAR,PRIVATE,PUBLIC,STATIC
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $COMMANDNAME$
|
||||
* LOCAL
|
||||
* $CATEGORY$
|
||||
* Comando
|
||||
* $ONELINER$
|
||||
* Crea e inicializa una variable de memoria ó un array LOCAL
|
||||
* $SYNTAX$
|
||||
* LOCAL <xVar> [:= <xInit> ]
|
||||
* LOCAL <xVar1>[:= <xInit1>], ..., <xVarN>[:= <xInitN>]
|
||||
* $ARGUMENTS$
|
||||
* <xVar> Nombre de variable de Memoria ó array.
|
||||
*
|
||||
* <xInit> Valor a ser asignado a la variable ó array
|
||||
* $RETURNS$
|
||||
* Nada
|
||||
* $DESCRIPTION$
|
||||
* Este comando Crea una variable de memoria ó un array LOCAL
|
||||
* El nombre de cualquiera es especificado en <xVar>.
|
||||
* Si más de una variable está siendo inicializada con la sentencia
|
||||
* LOCAL, separe cada una de ellas con una coma.
|
||||
* Si una variable ó un array le va a ser asignado un valor de inicio
|
||||
* esa expresión puede ser especificada en <xInit>, usando el operador
|
||||
* de asignación en línea <:=>
|
||||
*
|
||||
* Nota:
|
||||
* Si el modo de compilación "Fuertemente Tipeado" (Strong type) es
|
||||
* usado, el compilador chequeará si el valor recibido coincide con el
|
||||
* tipo especificado en <xType>.
|
||||
*
|
||||
* Las Variables LOCALes son símbolos generados en tiempo de ejecución
|
||||
* y son resueltos en tiempo de compilación (???).
|
||||
* La visibilidad y tiempo de vida de una variable ó array LOCAL está
|
||||
* limitada a la función ó procedimiento en la cual ésta es definida.
|
||||
*
|
||||
* Ninguna macro-expansión es permitida de una sentencia de declaración
|
||||
* LOCAL.
|
||||
*
|
||||
* Ningún comando de Harbour distinto a FUNCTION, PROCEDURE, PUBLIC,
|
||||
* PRIVATE, PARAMETERS, MEMVAR, STATIC y FIELD, pueden preceder a la
|
||||
* sentencia LOCAL (esto esta mal)
|
||||
*
|
||||
* Las referencias a un array LOCAL pueden no ser inicializadas (por
|
||||
* ej. asignarle un valor) en la misma línea de comando junto con la
|
||||
* sentencia LOCAL. Esto puede ser hecho luego en el programa.
|
||||
*
|
||||
* Variables y arrays de tipo LOCAL no son afectadas por el comando
|
||||
* RELEASE.
|
||||
* $EXAMPLES$
|
||||
* Function Main2()
|
||||
* Local n , lVar
|
||||
*
|
||||
* n := IIF( lVar, 'A', 3 )
|
||||
* n := 2
|
||||
* n := 'a'
|
||||
* n := seconds() + 2
|
||||
* n := int( seconds() + 2 )
|
||||
* Return NIL
|
||||
* $TESTS$
|
||||
* Ver ../tests/testwarn.prg por más ejemplos
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Este comando trabaja exactamente como en CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* Ninguno
|
||||
* $SEEALSO$
|
||||
* FIELD,PRIVATE,PUBLIC,STATIC,MEMVAR
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $COMMANDNAME$
|
||||
* MEMVAR
|
||||
* $CATEGORY$
|
||||
* Comando
|
||||
* $ONELINER$
|
||||
* Declara variables PRIVATE, PUBLIC y arrays.
|
||||
* $SYNTAX$
|
||||
* MEMVAR <xVar>
|
||||
* $ARGUMENTS$
|
||||
* <xVar> Nombre de variable de Memoria
|
||||
* $RETURNS$
|
||||
* Nada
|
||||
* $DESCRIPTION$
|
||||
* Este comando le dice al compilador como resolver alguna referencia
|
||||
* a una variable de memoria designada dentro de esta lista ó si posee
|
||||
* un alias explícito con el prefijo "M->" ó bien "MEMVAR->"
|
||||
* Solamente aquellas variables de memoria que no contengan ese prefijo
|
||||
* son afectadas por este comando. Aquellas variables de memoria dentro
|
||||
* de expansiones macro, no son afectadas por este comando.
|
||||
*
|
||||
* La declaración MEMVAR debe aparecer antes que cualquier comando
|
||||
* ejecutable; esta es similar a las sentencias LOCAL, STATIC, FIELD,
|
||||
* PARAMETERS, FUNCTION y PROCEDURE
|
||||
* $EXAMPLES$
|
||||
* MEMVAR y As Numeric
|
||||
* Function Main2()
|
||||
* LOCAL n , lVar
|
||||
*
|
||||
* n := IIF( lVar, 'A', 3 )
|
||||
* n := 2
|
||||
* n := 'a'
|
||||
* n := seconds() + 2
|
||||
* n := int( seconds() + 2 )
|
||||
* y := n
|
||||
* ? y
|
||||
* Return NIL
|
||||
* $TESTS$
|
||||
* Ver ../tests/testwarn.prg por más ejemplos
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Este comando trabaja exactamente como en CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* Ninguno
|
||||
* $SEEALSO$
|
||||
* LOCAL,STATIC,FIELD,PRIVATE,PUBLIC
|
||||
* $END$
|
||||
*/
|
||||
@@ -1,257 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2003 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci½n en Espa¤ol de:
|
||||
* OS(), VERSION(), GETENV(), __RUN(), TONE(), RUN
|
||||
*
|
||||
* Copyright 2000 Chen Kedem <niki@actcom.co.il>
|
||||
* Documentaci¢n en Ingl‚s de: TONE()
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* OS()
|
||||
* $ONELINER$
|
||||
* Retorna el sistema operativo subyacente.
|
||||
* $SYNTAX$
|
||||
* OS() --> <cSistemaOperativo>
|
||||
* $CATEGORY$
|
||||
* DOS
|
||||
* $RETURNS$
|
||||
* <cSistemaOperativo> el actual sistema operativo
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n devuelve el actual sistema operativo como una cadena
|
||||
* de caracteres.
|
||||
* $EXAMPLES$
|
||||
* ? OS()
|
||||
* $TESTS$
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta es una funci¢n compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* El c¢digo fuente esta en ../source/rtl/version.c
|
||||
* La librer¡a es rtl
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* VERSION()
|
||||
* $CATEGORY$
|
||||
* Entorno
|
||||
* $ONELINER$
|
||||
* Retorna la Versi¢n de HARBOUR
|
||||
* $SYNTAX$
|
||||
* VERSION() --> <HbVersion>
|
||||
* $ARGUMENTS$
|
||||
* Ninguno
|
||||
* $RETURNS$
|
||||
* <HbVersion> Cadena conteniendo la versi¢n de Harbour
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n devuelve la actual versi¢n de Harbour.
|
||||
* $EXAMPLES$
|
||||
* // Visualiza algo similar a: Harbour Alpha build 40.0 Intl. (Flex)
|
||||
* ? QOUT( VERSION() )
|
||||
* $TESTS$
|
||||
* $STATUS$
|
||||
* S
|
||||
* $COMPLIANCE$
|
||||
* Esta es una funci¢n compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* El c¢digo fuente esta en ../source/rtl/version.c
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* OS()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* GETENV()
|
||||
* $CATEGORY$
|
||||
* Entorno
|
||||
* $ONELINER$
|
||||
* Obtiene datos de las Variables de Entorno del Sistema Operativo
|
||||
* $SYNTAX$
|
||||
* GETENV(<cEntorno>, <cValorxDefecto> ) --> <cResultado>
|
||||
* $ARGUMENTS$
|
||||
* <cEntorno> Variable de Entorno a obtener
|
||||
*
|
||||
* <cValorxDefecto> Valor opcional a retornar si la variable <cEntorno>
|
||||
* no es encontrada.
|
||||
* $RETURNS$
|
||||
* <cResultado> Valor de la variable de Entorno
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n produce una cadena que es el valor de la variable de
|
||||
* Entorno <cEntorno>, la cual es almacenada a nivel del sistema
|
||||
* operativo con el comando SET del mismo.
|
||||
* Si ninguna variable de Entorno puede ser encontrada, el valor que
|
||||
* retorne la funci¢n ser <cValorxDefecto> si ‚ste es pasado, ¢ de lo
|
||||
* contrario una cadena vac¡a.
|
||||
* $EXAMPLES$
|
||||
* QOUT( GETENV('PATH'))
|
||||
* QOUT( GETENV('CONFIG'))
|
||||
* QOUT( GETENV('HARBOURCMD', '-n -l -es2'))
|
||||
* </fixed>
|
||||
* $TESTS$
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta es una funci¢n compatible con CA-Cl*pper.
|
||||
* El par metro <cValorxDefecto> es una extensi¢n de Harbour.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* El c¢digo fuente esta en ../source/rtl/gete.c
|
||||
* La librer¡a es rtl
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __RUN()
|
||||
* $CATEGORY$
|
||||
* DOS
|
||||
* $ONELINER$
|
||||
* Corre/Ejecuta un programa externo.
|
||||
* $SYNTAX$
|
||||
* __RUN( <cComando> )
|
||||
* $ARGUMENTS$
|
||||
* <cComando> Comando a ejecutar
|
||||
* $DESCRIPTION$
|
||||
* Este Comando ejecuta un programa externo. Por favor aseg£rese que
|
||||
* Ud. tiene sufuciente memoria libre para poder ejecutar el programa
|
||||
* externo.
|
||||
* No lo use para correr programas que permanecen residentes (en el
|
||||
* caso del sistema operativo DOS) porque puede causar muchos problemas
|
||||
*
|
||||
* Nota: El comando RUN es preprocesado en esta funci¢n.
|
||||
* Se considera una mala pr ctica usar esta funci¢n directamente
|
||||
* Use el comando RUN en su lugar.
|
||||
* $EXAMPLES$
|
||||
* __Run( "edit " + cMyTextFile ) // Corre un Editor externo
|
||||
* __Run( "command" ) // Da el prompt del DOS (s¢lo DOS)
|
||||
* </fixed>
|
||||
* $TESTS$
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta es una funci¢n compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* El c¢digo fuente esta en ../source/rtl/run.c
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* RUN
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* TONE()
|
||||
* $CATEGORY$
|
||||
* Miscelanea
|
||||
* $ONELINER$
|
||||
* Suena un tono con una frecuencia y duraci¢n especificada.
|
||||
* $SYNTAX$
|
||||
* TONE( <nFrecuencia>, <nDuracion> ) --> NIL
|
||||
* $ARGUMENTS$
|
||||
* <nFrecuencia> Un valor num‚rico no negativo que especifica la
|
||||
* frecuencia del tono en Hertzios (ciclos por segundo)
|
||||
*
|
||||
* <nDuracion> Un valor num‚rico positivo que especifica la duraci¢n
|
||||
* del tono en unidades de 1/18 avo de segundo.
|
||||
* $RETURNS$
|
||||
* TONE() siempre devuelve NIL.
|
||||
* $DESCRIPTION$
|
||||
* TONE() es una funci¢n de sonido que podr¡a ser usada para irritar
|
||||
* al usuario final, a su perro y al vecindario que lo rodea.
|
||||
* La frecuencia est limitada al rango 0 to 32767 Hz. Las frecuencias
|
||||
* por debajo de 20 Hz son inaudibles.
|
||||
* Si hay decimales en los argumentos estos se truncan.
|
||||
* $EXAMPLES$
|
||||
* IF lOk // Suena bien
|
||||
* TONE( 500, 1 )
|
||||
* TONE( 4000, 1 )
|
||||
* TONE( 2500, 1 )
|
||||
* ELSE // Suena mal
|
||||
* TONE( 300, 1 )
|
||||
* TONE( 499, 5 )
|
||||
* TONE( 700, 5 )
|
||||
* ENDIF
|
||||
* </fixed>
|
||||
* $TESTS$
|
||||
* TONE( 800, 1 ) // igual que ? CHR(7)
|
||||
* TONE( 32000, 200 ) // algun perro alrededor ?
|
||||
* TONE( 261, 1 ) // nota musical - C (DO medio)
|
||||
* TONE( 400, 0 ) // pitido corto
|
||||
* TONE( 700 ) //
|
||||
* TONE( 10, 18.2 ) // demora de 1 segundo
|
||||
* TONE( -1 ) // demora de 1/18.2 segundo
|
||||
* TONE( ) // demora de 1/18.2 segundo
|
||||
* </fixed>
|
||||
* $TESTS$
|
||||
* $STATUS$
|
||||
* S
|
||||
* $COMPLIANCE$
|
||||
* Esta es una funci¢n compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* CHR(),SET BELL
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* RUN
|
||||
* $CATEGORY$
|
||||
* Comando
|
||||
* $ONELINER$
|
||||
* Corre/Ejecuta un programa externo.
|
||||
* $SYNTAX$
|
||||
* RUN <cComando>
|
||||
* $ARGUMENTS$
|
||||
* <cComando> Comando a ejecutar
|
||||
* $DESCRIPTION$
|
||||
* Este Comando ejecuta un programa externo. Por favor aseg£rese que
|
||||
* Ud. tiene sufuciente memoria libre para poder ejecutar el programa
|
||||
* externo.
|
||||
* No lo use para correr programas que permanecen residentes (en el
|
||||
* caso del sistema operativo DOS) porque puede causar muchos problemas.
|
||||
* $EXAMPLES$
|
||||
* RUN "edit " + cMyTextFile // Corre un Editor externo
|
||||
* RUN "command" // Da el prompt del DOS (s¢lo DOS)
|
||||
* $TESTS$
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Este es un Comando compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* El c¢digo fuente esta en ../source/rtl/run.c
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* RUN
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,132 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2000 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de: ISAFFIRM(), ISNEGATIVE(), NATIONMSG()
|
||||
*
|
||||
* Copyright 1999 Jose Lalin <dezac@corevia.com>
|
||||
* Documentaci¢n en Ingles de: ISAFFIRM(), ISNEGATIVE(), NATIONMSG()
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* ISAFFIRM()
|
||||
* $CATEGORY$
|
||||
* Nacion
|
||||
* $ONELINER$
|
||||
* Chequea si el caracter pasado es el caracter de afirmaci¢n
|
||||
* $SYNTAX$
|
||||
* ISAFFIRM( <cChar> ) --> <lTrueOrFalse>
|
||||
* $ARGUMENTS$
|
||||
* <cChar> es un char ¢ cadena de caracteres
|
||||
* $RETURNS$
|
||||
* <lTrueOrFalse> Verdadero si el caracter pasado es el caracter de
|
||||
* afirmaci¢n, ¢ Falso de otro modo.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n es usada para chequear si la entrada del usuario es
|
||||
* verdadera ¢ no, de acuerdo al m¢dulo msgxxx usado.
|
||||
* En Clipper el m¢dulo por defecto depende de la versi¢n usada, en
|
||||
* Harbour el m¢dulo por defecto es el Ingl‚s.
|
||||
* En ingl‚s la opci¢n v lida es "Y", en español "S"
|
||||
* $EXAMPLES$
|
||||
* // Esperar hasta que el usuario ingrese "Y"
|
||||
* DO WHILE ! ISAFFIRM( cYesNo )
|
||||
* ACCEPT "Esta Seguro ?: " TO cYesNo
|
||||
* END DO
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* ISNEGATIVE(),NATIONMSG()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* ISNEGATIVE()
|
||||
* $CATEGORY$
|
||||
* Nacion
|
||||
* $ONELINER$
|
||||
* Chequea si el caracter pasado es el caracter de negaci¢n
|
||||
* $SYNTAX$
|
||||
* ISNEGATIVE( <cChar> ) --> <lTrueOrFalse>
|
||||
* $ARGUMENTS$
|
||||
* <cChar> es un char ¢ cadena de caracteres
|
||||
* $RETURNS$
|
||||
* <lTrueOrFalse> Verdadero si el caracter pasado es el caracter de
|
||||
* negaci¢n, ¢ Falso de otro modo.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n es usada para chequear si la entrada del usuario es
|
||||
* verdadera ¢ no, de acuerdo al m¢dulo msgxxx usado.
|
||||
* En Clipper el m¢dulo por defecto depende de la versi¢n usada, en
|
||||
* Harbour el m¢dulo por defecto es el Ingl‚s.
|
||||
* En ingl‚s la opci¢n v lida es "N", en español "N"
|
||||
* $EXAMPLES$
|
||||
* // Esperar hasta que el usuario ingrese "N"
|
||||
* DO WHILE ! ISNEGATIVE( cYesNo )
|
||||
* ACCEPT "Esta Seguro ?: " TO cYesNo
|
||||
* END DO
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* ISAFFIRM(),NATIONMSG()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* NATIONMSG()
|
||||
* $CATEGORY$
|
||||
* Nacion
|
||||
* $ONELINER$
|
||||
* Retorna cadenas de mensajes internacionales.
|
||||
* $SYNTAX$
|
||||
* NATIONMSG( <nMsg> ) --> <cMensaje>
|
||||
* $ARGUMENTS$
|
||||
* <nMsg> es el n£mero de Mensaje que Ud. quiere obtener.
|
||||
* $RETURNS$
|
||||
* <cMensaje> Si <nMsg> es un selector de mensaje v lido, entonces se
|
||||
* retorna el mensaje.
|
||||
* Si <nMsg> es NIL, retorna "Invalid Argument", y si <nMsg> no es de
|
||||
* tipo NUMERIC esta retorna una cadena vacia.
|
||||
* $DESCRIPTION$
|
||||
* NATIONMSG() retorna las descripciones internacionales de mensajes.
|
||||
* En Clipper el m¢dulo por defecto depende de la versi¢n usada, en
|
||||
* Harbour el m¢dulo por defecto es el Ingl‚s.
|
||||
* $EXAMPLES$
|
||||
* // Visualiza "Seguro Y/N: " y espera hasta que el usuario entra "Y"
|
||||
* // Y/N es la cadena NATIONMSG( 12 ) con el m¢dulo natmsg por
|
||||
* // defecto.
|
||||
* DO WHILE ! ISAFFIRM( cYesNo )
|
||||
* ACCEPT "Esta Seguro " + NATIONMSG( 12 ) + ": " TO cYesNo
|
||||
* END DO
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* C
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es totalmente compatible con CA-Cl*pper.
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* ISAFFIRM(),ISNEGATIVE()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,815 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2000 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de:
|
||||
* __objHasData(), __objHasMethod(), __objGetMsgList(),
|
||||
* __objGetMethodList(), __objGetValueList(),
|
||||
* __ObjSetValueList(), __objAddMethod(),
|
||||
* __objAddInline(), __objAddData(), __objModMethod(),
|
||||
* __objModInline(), __objDelMethod(), __objDelInline(),
|
||||
* __objDelData(), __objDerivedFrom()
|
||||
*
|
||||
* Copyright 1999-2000 Chen Kedem <niki@actcom.co.il>
|
||||
* Documentaci¢n en Ingles de:
|
||||
* __objHasData(), __objHasMethod(), __objGetMsgList(),
|
||||
* __objGetMethodList(), __objGetValueList(),
|
||||
* __ObjSetValueList(), __objAddMethod(),
|
||||
* __objAddInline(), __objAddData(), __objModMethod(),
|
||||
* __objModInline(), __objDelMethod(), __objDelInline(),
|
||||
* __objDelData(), __objDerivedFrom()
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __objHasData()
|
||||
* $CATEGORY$
|
||||
* Manejo de objetos
|
||||
* $ONELINER$
|
||||
* Determina cuando un s¡mbolo existe en un objeto como DATA
|
||||
* $SYNTAX$
|
||||
* __objHasData( <oObjeto>, <cSimbolo> ) --> lExiste
|
||||
* $ARGUMENTS$
|
||||
* <oObjeto> es el objeto a inspeccionar
|
||||
*
|
||||
* <cSimbolo> es el nombre del s¡mbolo a buscar
|
||||
* $RETURNS$
|
||||
* __objHasData() retorna .T. si el <cSimbolo> dado existe como DATA
|
||||
* (variable de instancia) en el objeto <oObjeto), y .F. si este no
|
||||
* existe.
|
||||
* $DESCRIPTION$
|
||||
* __objHasData() es una funci¢n de soporte de clases de bajo nivel
|
||||
* que le permite a Ud. encontrar si un s¡mbolo es una variable de
|
||||
* instancia en un objeto dado.
|
||||
* $EXAMPLES$
|
||||
* oB := TBrowseNew( 0, 0, 24, 79 )
|
||||
* ? __objHasData( oB, "nLeft" ) // esto deberia retornar .T.
|
||||
* ? __objHasData( oB, "lBugFree" ) // deberia ser .F.
|
||||
* ? __objHasData( oB, "Left" ) // .F. porque este es un METHOD
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* __objHasData() es una extensi¢n de Harbour.
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* __ObjGetMethodList(),__objGetMsgList(),__objHasMethod()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __objHasMethod()
|
||||
* $CATEGORY$
|
||||
* Manejo de objetos
|
||||
* $ONELINER$
|
||||
* Determina cuando un s¡mbolo existe en un objeto como METHOD
|
||||
* $SYNTAX$
|
||||
* __objHasMethod( <oObjeto>, <cSimbolo> ) --> lExist
|
||||
* $ARGUMENTS$
|
||||
* <oObjeto> es el objeto a inspeccionar
|
||||
*
|
||||
* <cSimbolo> es el nombre del s¡mbolo a buscar
|
||||
* $RETURNS$
|
||||
* __objHasMethod() retorna .T. si el <cSimbolo> dado existe como
|
||||
* METHOD (funci¢n de clase) en el Objeto <oObjeto), o .F. si este
|
||||
* no existe.
|
||||
* $DESCRIPTION$
|
||||
* __objHasMethod() es una funci¢n de soporte de clases de bajo nivel
|
||||
* que le permite a Ud. encontrar si un s¡mbolo es una funci¢n de
|
||||
* clase en un Objeto dado.
|
||||
* $EXAMPLES$
|
||||
* oB := TBrowseNew( 0, 0, 24, 79 )
|
||||
* ? __objHasMethod( oB, "nLeft" ) // .F. porque esto es DATA
|
||||
* ? __objHasMethod( oB, "FixBugs" ) // deberia ser .F.
|
||||
* ? __objHasMethod( oB, "Left" ) // esto deberia retornar .T.
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* __objHasMethod() es una extensi¢n de Harbour.
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* __ObjGetMethodList(),__objGetMsgList(),__objHasData()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __objGetMsgList()
|
||||
* $CATEGORY$
|
||||
* Manejo de objetos
|
||||
* $ONELINER$
|
||||
* Retorna los nombres de todos los DATA o METHOD para un Objeto dado
|
||||
* $SYNTAX$
|
||||
* __objGetMsgList( <oObjeto>, [<lData>], [nClassType] ) --> aNombres
|
||||
* $ARGUMENTS$
|
||||
* <oObjeto> es un Objeto a inspeccionar
|
||||
*
|
||||
* <lData> es un valor l¢gico opcional que especifica la informaci¢n
|
||||
* a retornar. Un valor .T. instruye a la funci¢n a devolver una lista
|
||||
* todos los nombres DATA, un valor de .F. instruye a la funci¢n a
|
||||
* devolver una lista de todos los nombres de METHODos.
|
||||
* El valor por defecto es .T.
|
||||
*
|
||||
* <nClassType> es un c¢digo num‚rico opcional para seleccionar cual
|
||||
* tipo de clase se va retornar.
|
||||
* El valor por defecto es HB_MSGLISTALL, retornando la lista entera.
|
||||
* $RETURNS$
|
||||
* __objGetMsgList() devuelve un array de cadenas <aNombres> con los
|
||||
* nombres de todos los DATA o todos los METHOD para un objeto dado.
|
||||
* __objGetMsgList() podr¡a retornar un array vacio, {} si el objeto
|
||||
* dado no contiene la informaci¢n solicitada.
|
||||
* $DESCRIPTION$
|
||||
* __objGetMsgList() es una funci¢n de soporte de clases de bajo nivel
|
||||
* que le permite a Ud. encontrar todas las variables de instancia o
|
||||
* los nombre de los metodos para un Objeto dado.
|
||||
*
|
||||
* Si es es especificada, la siguiente tabla muestra los valores para
|
||||
* <nClassType> que le permiten a Ud. distinguir entre DATA y
|
||||
* CLASSDATA:
|
||||
*
|
||||
* <table>
|
||||
* hboo.ch Valor Significado
|
||||
*
|
||||
* HB_MSGLISTALL 0 Todos los tipos
|
||||
* HB_MSGLISTCLASS 1 CLASSDATA solamente
|
||||
* HB_MSGLISTPURE 2 DATA solamente
|
||||
* </table>
|
||||
*
|
||||
* DATA son variables de instancia usables dentro de cada objeto desde
|
||||
* una clase, donde cada Objeto tiene sus propios DATAs.
|
||||
*
|
||||
* Las CLASSDATA son compartidas por todos los objetos desde una Clase,
|
||||
* asi el valor cambiado dentro del Objeto1 sera reflejado cuando se
|
||||
* acceda la CLASSDATA desde el Objeto2.
|
||||
* $EXAMPLES$
|
||||
* // Muestra informaci¢n sobre la clase TBrowse
|
||||
* oB := TBrowseNew( 0, 0, 24, 79 )
|
||||
* aData := __objGetMsgList( oB, .T. )
|
||||
* aClassData := __objGetMsgList( oB, .T., HB_MSGLISTCLASS )
|
||||
* aMethod := __objGetMsgList( oB, .F. )
|
||||
*
|
||||
* FOR i = 1 to len ( aData )
|
||||
* ? "nombre de DATA:", aData[ i ]
|
||||
* NEXT
|
||||
*
|
||||
* FOR i = 1 to len ( aClassData )
|
||||
* ? "nombre de CLASSDATA:", aClassData[ i ]
|
||||
* NEXT
|
||||
*
|
||||
* FOR i = 1 to len ( aMethod )
|
||||
* ? "nombre de METHOD:", aMethod[ i ]
|
||||
* NEXT
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* __objGetMsgList() es una extensi¢n de Harbour.
|
||||
* $FILES$
|
||||
* El archivo de cabecera es hboo.ch
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* __ObjGetMethodList(),__ObjGetValueList(),__objHasData(),__objHasMethod()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __objGetMethodList()
|
||||
* $CATEGORY$
|
||||
* Manejo de objetos
|
||||
* $ONELINER$
|
||||
* Retorna un array con los nombres de todos los METHOD de un Objeto
|
||||
* $SYNTAX$
|
||||
* __objGetMethodList( <oObjeto> ) --> aNombreMetodos
|
||||
* $ARGUMENTS$
|
||||
* <oObjeto> es el objeto a inspeccionar
|
||||
* $RETURNS$
|
||||
* __objGetMethodList() devuelve un array de cadenas <aNombreMetodos>
|
||||
* con los nombres de todos los METHOD para un objeto dado.
|
||||
* __objGetMethodList() podria retornar un array vacio, {} si el
|
||||
* objeto dado no contiene ningun metodo.
|
||||
* $DESCRIPTION$
|
||||
* __objGetMethodList() es una funci¢n de soporte de clases de bajo
|
||||
* nivel que le permite a Ud. encontrar todos los nombres de las
|
||||
* funciones de clase para un Objeto dado.
|
||||
* Es el equivalente a __objGetMsgList( oObjeto, .F. ).
|
||||
* $EXAMPLES$
|
||||
* // Muestra informaci¢n sobre la clase TBrowse
|
||||
* oB := TBrowseNew( 0, 0, 24, 79 )
|
||||
* aMethod := __objGetMethodList( oB )
|
||||
*
|
||||
* FOR i = 1 to len ( aMethod )
|
||||
* ? "METHOD name:", aMethod[ i ]
|
||||
* NEXT
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* __objGetMethodList() es una extensi¢n de Harbour.
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* __objGetMsgList(),__ObjGetValueList(),__objHasData(),__objHasMethod()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __objGetValueList()
|
||||
* $CATEGORY$
|
||||
* Manejo de objetos
|
||||
* $ONELINER$
|
||||
* Retorna un array con los nombres de DATA y valores de un Objeto
|
||||
* $SYNTAX$
|
||||
* __objGetValueList( <oObjeto>, [<aExcept>] ) --> aData
|
||||
* $ARGUMENTS$
|
||||
* <oObjeto> es el objeto a inspeccionar
|
||||
*
|
||||
* <aExcept> es un array opcional con los nombres de los DATA que Ud.
|
||||
* desea excluir de la inspeccion.
|
||||
* $RETURNS$
|
||||
* __objGetValueList() retorna un array bidimensional que contiene
|
||||
* pares de nombre del s¡mbolo DATA y el valor de DATA.
|
||||
* __objGetValueList() podria retornar un array vacio, {} si el
|
||||
* objeto dado no contiene la informaci¢n solicitada.
|
||||
* $DESCRIPTION$
|
||||
* __objGetValueList() es una funci¢n de soporte de clases de bajo
|
||||
* nivel que retorna un array con los nombres de DATA y valores.
|
||||
* Cada elemento del array es un par de:
|
||||
* aData[ i, HB_OO_DATA_SYMBOL ] contiene nombre del s¡mbolo
|
||||
* aData[ i, HB_OO_DATA_VALUE ] contiene el valor de DATA
|
||||
* $EXAMPLES$
|
||||
* // Muestra informaci¢n sobre la clase TBrowse
|
||||
* oB := TBrowseNew( 0, 0, 24, 79 )
|
||||
* aData := __objGetValueList( oB )
|
||||
*
|
||||
* FOR i = 1 to len ( aData )
|
||||
* ? "Nombre de DATA:", aData[ i, HB_OO_DATA_SYMBOL ], ;
|
||||
* " valor =", aData[ i, HB_OO_DATA_VALUE ]
|
||||
* NEXT
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* __objGetValueList() es una extensi¢n de Harbour.
|
||||
* $FILES$
|
||||
* El archivo de cabecera es hboo.ch
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* __objGetMethodList(),__objGetMsgList(),__objHasData(),__objHasMethod(),__ObjSetValueList()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __ObjSetValueList()
|
||||
* $CATEGORY$
|
||||
* Manejo de objetos
|
||||
* $ONELINER$
|
||||
* Establece un Objeto con un array de nombres de DATA y valores
|
||||
* $SYNTAX$
|
||||
* __ObjSetValueList( <oObjeto>, <aData> ) --> oObjeto
|
||||
* $ARGUMENTS$
|
||||
* <oObjeto> es el objeto a establecer
|
||||
*
|
||||
* <aData> es un array bidimensional con un par de variables de
|
||||
* instancia y valores para asignar a aquellas variables.
|
||||
* $RETURNS$
|
||||
* __ObjSetValueList() retorna una referencia a <oObjeto>.
|
||||
* $DESCRIPTION$
|
||||
* __ObjSetValueList() es una funci¢n de soporte de clases de bajo
|
||||
* nivel que le permite a Ud. establecer un grupo de variables de
|
||||
* instancia con valores.
|
||||
* Cada elemento del array en <aData> es un par de:
|
||||
* aData[ i, HB_OO_DATA_SYMBOL ] contiene nombre de variable a setear
|
||||
* aData[ i, HB_OO_DATA_VALUE ] contiene el nuevo valor de variable
|
||||
* $EXAMPLES$
|
||||
* // set some TBrowse instance variable
|
||||
* oB := TBrowse():New()
|
||||
* aData := array( 4, 2 )
|
||||
* aData[ 1, HB_OO_DATA_SYMBOL ] = "nTop"
|
||||
* aData[ 1, HB_OO_DATA_VALUE ] = 1
|
||||
* aData[ 2, HB_OO_DATA_SYMBOL ] = "nLeft"
|
||||
* aData[ 2, HB_OO_DATA_VALUE ] = 10
|
||||
* aData[ 3, HB_OO_DATA_SYMBOL ] = "nBottom"
|
||||
* aData[ 3, HB_OO_DATA_VALUE ] = 20
|
||||
* aData[ 4, HB_OO_DATA_SYMBOL ] = "nRight"
|
||||
* aData[ 4, HB_OO_DATA_VALUE ] = 70
|
||||
* __ObjSetValueList( oB, aData )
|
||||
* ? oB:nTop // 1
|
||||
* ? oB:nLeft // 10
|
||||
* ? oB:nBottom // 20
|
||||
* ? oB:nRight // 70
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* __ObjSetValueList() es una extensi¢n de Harbour.
|
||||
* $FILES$
|
||||
* El archivo de cabecera es hboo.ch
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* __ObjGetValueList()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __objAddMethod()
|
||||
* $CATEGORY$
|
||||
* Manejo de objetos
|
||||
* $ONELINER$
|
||||
* Agrega un METHOD a una clase ya existente
|
||||
* $SYNTAX$
|
||||
* __objAddMethod( <oObjeto>, <cMethodName>, <nFuncPtr> ) --> oObjeto
|
||||
* $ARGUMENTS$
|
||||
* <oObjeto> es el objeto con el cual se va a trabajar
|
||||
*
|
||||
* <cMethodName> es el nombre del s¡mbolo del nuevo METHOD a agregar
|
||||
*
|
||||
* <nFuncPtr> es un puntero a la funci¢n a asociar con el m‚todo
|
||||
* $RETURNS$
|
||||
* __objAddMethod() retorna una referencia a <oObjeto>.
|
||||
* $DESCRIPTION$
|
||||
* __objAddMethod() es una funci¢n de soporte de clases de bajo
|
||||
* nivel que agrega un nuevo METHOD a un Objeto.
|
||||
*
|
||||
* El <oObjeto> permanece sin cambios si el s¡mbolo con el nombre
|
||||
* <cMethodName> ya existe en <oObjeto>.
|
||||
*
|
||||
* Note que <nFuncPtr> es un especial puntero a una funci¢n que fue
|
||||
* creado usando el operador @ , vea un ejemplo a continuacion.
|
||||
* $EXAMPLES$
|
||||
* // crea un nueva clase THappy y le agrega un m‚todo Smile
|
||||
* oHappy := HBClass():New( "THappy" )
|
||||
* __objAddMethod( oHappy, "Smile", @MySmile() )
|
||||
* ? oHappy:Smile( 1 ) // :)
|
||||
* ? oHappy:Smile( 2 ) // ;)
|
||||
* ? oHappy:Smile( 3 ) // *SMILE*
|
||||
*
|
||||
* STATIC FUNCTION MySmile( nType )
|
||||
* LOCAL cSmile
|
||||
* DO CASE
|
||||
* CASE nType == 1
|
||||
* cSmile := ":)"
|
||||
* CASE nType == 2
|
||||
* cSmile := ";)"
|
||||
* CASE nType == 3
|
||||
* cSmile := "*SMILE*"
|
||||
* ENDCASE
|
||||
* RETURN cSmile
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* __objAddMethod() es una extensi¢n de Harbour.
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* __objAddInline(),__objAddData(),__objDelMethod(),__ObjGetMethodList(),__objGetMsgList(),__objHasMethod(),__objModMethod()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __objAddInline()
|
||||
* $CATEGORY$
|
||||
* Manejo de objetos
|
||||
* $ONELINER$
|
||||
* Agrega un INLINE a una clase ya existente
|
||||
* $SYNTAX$
|
||||
* __objAddInline( <oObjeto>, <cInlineName>, <bInline> ) --> oObjeto
|
||||
* $ARGUMENTS$
|
||||
* <oObjeto> es el objeto con el cual se va a trabajar
|
||||
*
|
||||
* <cInlineName> es el nombre del s¡mbolo del nuevo INLINE a agregar
|
||||
*
|
||||
* <bInline> es un codeblock a asociar con el m‚todo INLINE
|
||||
* $RETURNS$
|
||||
* __objAddInline() retorna una referencia a <oObjeto>.
|
||||
* $DESCRIPTION$
|
||||
* __objAddInline() es una funci¢n de soporte de clases de bajo
|
||||
* nivel que agrega un nuevo m‚todo INLINE a un Objeto.
|
||||
*
|
||||
* El <oObjeto> permanece sin cambios si el s¡mbolo con el nombre
|
||||
* <cInlineName> ya existe en <oObjeto>.
|
||||
* $EXAMPLES$
|
||||
* // crea un nueva clase THappy y le agrega un m‚todo INLINE Smile
|
||||
* oHappy := HBClass():New( "THappy" )
|
||||
* bInline := { | nType | { ":)", ";)", "*SMILE*" }[ nType ] }
|
||||
*
|
||||
* __objAddInline( oHappy, "Smile", bInline )
|
||||
*
|
||||
* ? oHappy:Smile( 1 ) // :)
|
||||
* ? oHappy:Smile( 2 ) // ;)
|
||||
* ? oHappy:Smile( 3 ) // *SMILE*
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* __objAddInline() es una extensi¢n de Harbour.
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* __objAddData(),__objAddMethod(),__objDelInline(),__ObjGetMethodList(),__objGetMsgList(),__objHasMethod() ,__objModInline()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __objAddData()
|
||||
* $CATEGORY$
|
||||
* Manejo de objetos
|
||||
* $ONELINER$
|
||||
* Agrega un DATA a una clase ya existente
|
||||
* $SYNTAX$
|
||||
* __objAddData( <oObjeto>, <cDataName> ) --> oObjeto
|
||||
* $ARGUMENTS$
|
||||
* <oObjeto> es el objeto con el cual se va a trabajar
|
||||
*
|
||||
* <cDataName> es el nombre del s¡mbolo del nuevo DATA a agregar
|
||||
* $RETURNS$
|
||||
* __objAddData() retorna una referencia a <oObjeto>.
|
||||
* $DESCRIPTION$
|
||||
* __objAddData() es una funci¢n de soporte de clases de bajo
|
||||
* nivel que agrega un nuevo DATA a un Objeto.
|
||||
*
|
||||
* El <oObjeto> permanece sin cambios si el s¡mbolo con el nombre
|
||||
* <cDataName> ya existe en <oObjeto>.
|
||||
* $EXAMPLES$
|
||||
* // crea un nueva clase THappy y le agrega un DATA lHappy
|
||||
* oHappy := HBClass():New( "THappy" )
|
||||
*
|
||||
* __objAddData( oHappy, "lHappy" )
|
||||
* oHappy:lHappy := .T.
|
||||
*
|
||||
* IF oHappy:lHappy
|
||||
* ? "Happy, Happy, Joy, Joy !!!"
|
||||
* ELSE
|
||||
* ? ":(..."
|
||||
* ENDIF
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* __objAddData() es una extensi¢n de Harbour.
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* __objAddInline(),__objAddMethod(),__objDelData(),__objGetMsgList(),__ObjGetValueList(),__objHasData(),__ObjSetValueList()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __objModMethod()
|
||||
* $CATEGORY$
|
||||
* Manejo de objetos
|
||||
* $ONELINER$
|
||||
* Modifica (reemplaza) un METHOD en una clase ya existente
|
||||
* $SYNTAX$
|
||||
* __objModMethod( <oObjeto>, <cMethodName>, <nFuncPtr> ) --> oObjeto
|
||||
* $ARGUMENTS$
|
||||
* <oObjeto> es el objeto con el cual se va a trabajar
|
||||
*
|
||||
* <cMethodName> es el nombre del s¡mbolo del METHOD a modificar
|
||||
*
|
||||
* <nFuncPtr> es un puntero a una nueva funci¢n a asociar con
|
||||
* el metodo.
|
||||
* $RETURNS$
|
||||
* __objModMethod() retorna una referencia a <oObjeto>.
|
||||
* $DESCRIPTION$
|
||||
* __objModMethod() es una funci¢n de soporte de clases de bajo
|
||||
* nivel que modifica un METHOD en un Objeto y lo reemplaza con
|
||||
* una nueva funci¢n.
|
||||
* El <oObjeto> permanece sin cambios si el s¡mbolo con el nombre
|
||||
* <cMethodName> ya existe en <oObjeto>.
|
||||
* __objModMethod() es usado en el mecanismo de herencia.
|
||||
*
|
||||
* Note que <nFuncPtr> es un especial puntero a una funci¢n que fue
|
||||
* creado usando el operador @ , vea un ejemplo a continuacion.
|
||||
*
|
||||
* $EXAMPLES$
|
||||
* // crea un nueva clase THappy y le agrega un m‚todo Smile
|
||||
* oHappy := HBClass():New( "THappy" )
|
||||
* __objAddMethod( oHappy, "Smile", @MySmile() )
|
||||
* ? oHappy:Smile( 1 ) // :)
|
||||
* ? oHappy:Smile( 2 ) // ;)
|
||||
*
|
||||
* // reemplaza el m‚todo Smile con una nueva funci¢n
|
||||
* __objAddMethod( oHappy, "Smile", @YourSmile() )
|
||||
* ? oHappy:Smile( 1 ) // *SMILE*
|
||||
* ? oHappy:Smile( 2 ) // *WINK*
|
||||
*
|
||||
* STATIC FUNCTION MySmile( nType )
|
||||
* LOCAL cSmile
|
||||
* DO CASE
|
||||
* CASE nType == 1
|
||||
* cSmile := ":)"
|
||||
* CASE nType == 2
|
||||
* cSmile := ";)"
|
||||
* ENDCASE
|
||||
* RETURN cSmile
|
||||
*
|
||||
* STATIC FUNCTION YourSmile( nType )
|
||||
* LOCAL cSmile
|
||||
* DO CASE
|
||||
* CASE nType == 1
|
||||
* cSmile := "*SMILE*"
|
||||
* CASE nType == 2
|
||||
* cSmile := "*WINK*"
|
||||
* ENDCASE
|
||||
* RETURN cSmile
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* __objModMethod() es una extensi¢n de Harbour.
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* __objAddMethod(),__objDelMethod(),__ObjGetMethodList(),__objGetMsgList(),__objHasMethod()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __objModInline()
|
||||
* $CATEGORY$
|
||||
* Manejo de objetos
|
||||
* $ONELINER$
|
||||
* Modifica (reemplaza) un m‚todo INLINE en una clase ya existente
|
||||
* $SYNTAX$
|
||||
* __objModInline( <oObjeto>, <cInlineName>, <bInline> ) --> oObjeto
|
||||
* $ARGUMENTS$
|
||||
* <oObjeto> es el objeto con el cual se va a trabajar
|
||||
*
|
||||
* <cInlineName> es el nombre del s¡mbolo del m‚todo INLINE a
|
||||
* modificar.
|
||||
*
|
||||
* <bInline> es un nuevo codeblock a asociar con el m‚todo INLINE
|
||||
* $RETURNS$
|
||||
* __objModInline() retorna una referencia a <oObjeto>.
|
||||
* $DESCRIPTION$
|
||||
* __objModInline() es una funci¢n de soporte de clases de bajo
|
||||
* nivel que modifica un m‚todo INLINE en un Objeto y lo reemplaza con
|
||||
* una nuevo bloque de codigo.
|
||||
*
|
||||
* El <oObjeto> permanece sin cambios si el s¡mbolo con el nombre
|
||||
* <cInlineName> no existe en <oObjeto>.
|
||||
*
|
||||
* __objModInline() es usado en el mecanismo de herencia.
|
||||
* $EXAMPLES$
|
||||
* // crea un nueva clase THappy y le agrega un m‚todo INLINE Smile
|
||||
* oHappy := HBClass():New( "THappy" )
|
||||
* bMyInline := { | nType | { ":)", ";)" }[ nType ] }
|
||||
* bYourInline := { | nType | { "*SMILE*", "*WINK*" }[ nType ] }
|
||||
*
|
||||
* __objAddInline( oHappy, "Smile", bMyInline )
|
||||
* ? oHappy:Smile( 1 ) // :)
|
||||
* ? oHappy:Smile( 2 ) // ;)
|
||||
*
|
||||
* // reemplaza el m‚todo INLINE Smile con un nuevo codeblock
|
||||
* __objModInline( oHappy, "Smile", bYourInline )
|
||||
* ? oHappy:Smile( 1 ) // *SMILE*
|
||||
* ? oHappy:Smile( 2 ) // *WINK*
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* __objModInline() es una extensi¢n de Harbour.
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* __objAddInline(),__objDelInline(),__ObjGetMethodList(),__objGetMsgList(),__objHasMethod()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __objDelMethod()
|
||||
* $CATEGORY$
|
||||
* Manejo de objetos
|
||||
* $ONELINER$
|
||||
* Borra un METHOD de una clase
|
||||
* $SYNTAX$
|
||||
* __objDelMethod( <oObjeto>, <cSimbolo> ) --> oObjeto
|
||||
* $ARGUMENTS$
|
||||
* <oObjeto> es el objeto con el cual se va a trabajar
|
||||
*
|
||||
* <cSimbolo> es el nombre del s¡mbolo del METHOD o del m‚todo
|
||||
* INLINE a ser borrado (removido) del Objeto.
|
||||
* $RETURNS$
|
||||
* __objDelMethod() retorna una referencia a <oObjeto>.
|
||||
* $DESCRIPTION$
|
||||
* __objDelMethod() es una funci¢n de soporte de clases de bajo nivel
|
||||
* que borra (remueve) un METHOD o un m‚todo INLINE de un Objeto.
|
||||
*
|
||||
* El <oObjeto> permanece sin cambios si el s¡mbolo con el nombre
|
||||
* <cSimbolo> no existe en <oObjeto>.
|
||||
*
|
||||
* __objDelInline() es exactamente la misma que __objDelMethod().
|
||||
* $EXAMPLES$
|
||||
* // crea un nueva clase THappy y le agrega un m‚todo Smile
|
||||
* oHappy := HBClass():New( "THappy" )
|
||||
*
|
||||
* __objAddMethod( oHappy, "Smile", @MySmile() )
|
||||
* ? __objHasMethod( oHappy, "Smile" ) // .T.
|
||||
*
|
||||
* // borra el m‚todo Smile
|
||||
* __objDelMethod( oHappy, "Smile" )
|
||||
* ? __objHasMethod( oHappy, "Smile" ) // .F.
|
||||
*
|
||||
* STATIC FUNCTION MySmile( nType )
|
||||
* LOCAL cSmile
|
||||
* DO CASE
|
||||
* CASE nType == 1
|
||||
* cSmile := ":)"
|
||||
* CASE nType == 2
|
||||
* cSmile := ";)"
|
||||
* ENDCASE
|
||||
* RETURN cSmile
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* __objDelMethod() es una extensi¢n de Harbour.
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* __objAddInline(),__objAddMethod(),__ObjGetMethodList(),__objGetMsgList(),__objHasMethod(),__objModInline(),__objModMethod()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __objDelInline()
|
||||
* $CATEGORY$
|
||||
* Manejo de objetos
|
||||
* $ONELINER$
|
||||
* Borra un METHOD INLINE de una clase
|
||||
* $SYNTAX$
|
||||
* __objDelInline( <oObjeto>, <cSimbolo> ) --> oObjeto
|
||||
* $ARGUMENTS$
|
||||
* <oObjeto> es el objeto con el cual se va a trabajar
|
||||
*
|
||||
* <cSimbolo> es el nombre del s¡mbolo del METHOD o del m‚todo
|
||||
* INLINE a ser borrado (removido) del Objeto.
|
||||
* $RETURNS$
|
||||
* __objDelInMethod() retorna una referencia a <oObjeto>.
|
||||
* $DESCRIPTION$
|
||||
* __objDelInMethod() es una funci¢n de soporte de clases de bajo nivel
|
||||
* que borra (remueve) un METHOD o un m‚todo INLINE de un Objeto.
|
||||
*
|
||||
* El <oObjeto> permanece sin cambios si el s¡mbolo con el nombre
|
||||
* <cSimbolo> no existe en <oObjeto>.
|
||||
* $EXAMPLES$
|
||||
* // crea un nueva clase THappy y le agrega un m‚todo Smile
|
||||
* oHappy := HBClass():New( "THappy" )
|
||||
* __objAddMethod( oHappy, "Smile", @MySmile() )
|
||||
* ? __objHasMethod( oHappy, "Smile" ) // .T.
|
||||
*
|
||||
* // borra el m‚todo Smile
|
||||
* __objDelInMethod( oHappy, "Smile" )
|
||||
* ? __objHasMethod( oHappy, "Smile" ) // .F.
|
||||
*
|
||||
* STATIC FUNCTION MySmile( nType )
|
||||
* LOCAL cSmile
|
||||
* DO CASE
|
||||
* CASE nType == 1
|
||||
* cSmile := ":)"
|
||||
* CASE nType == 2
|
||||
* cSmile := ";)"
|
||||
* ENDCASE
|
||||
* RETURN cSmile
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* __objDelMethod() es una extensi¢n de Harbour.
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* __objAddInline(),__objAddMethod(),__ObjGetMethodList(),__objGetMsgList(),__objHasMethod(),__objModInline(),__objModMethod()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __objDelData()
|
||||
* $CATEGORY$
|
||||
* Manejo de objetos
|
||||
* $ONELINER$
|
||||
* Borra un DATA (variable de instancia) de una clase
|
||||
* $SYNTAX$
|
||||
* __objDelMethod( <oObjeto>, <cDataName> ) --> oObjeto
|
||||
* $ARGUMENTS$
|
||||
* <oObjeto> es el objeto con el cual se va a trabajar
|
||||
*
|
||||
* <cDataName> es el nombre del s¡mbolo DATA a ser borrado
|
||||
* (removido) del Objeto.
|
||||
* $RETURNS$
|
||||
* __objDelData() retorna una referencia a <oObjeto>.
|
||||
* $DESCRIPTION$
|
||||
* __objDelData() es una funci¢n de soporte de clases de bajo nivel
|
||||
* que borra (remueve) un DATA de un Objeto.
|
||||
*
|
||||
* El <oObjeto> permanece sin cambios si el s¡mbolo con el nombre
|
||||
* <cDataName> no existe en <oObjeto>.
|
||||
* $EXAMPLES$
|
||||
* // crea un nueva clase THappy y le agrega un DATA lHappy
|
||||
* oHappy := HBClass():New( "THappy" )
|
||||
*
|
||||
* __objAddData( oHappy, "lHappy" )
|
||||
* ? __objHasData( oHappy, "lHappy" ) // .T.
|
||||
*
|
||||
* // borra el DATA, lHappy
|
||||
* __objDelData( oHappy, "lHappy" )
|
||||
* ? __objHasData( oHappy, "lHappy" ) // .F.
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* __objDelData() es una extensi¢n de Harbour.
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* __objAddData(),__objGetMsgList(),__ObjGetValueList(),__objHasData(),__ObjSetValueList()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __objDerivedFrom()
|
||||
* $CATEGORY$
|
||||
* Manejo de objetos
|
||||
* $ONELINER$
|
||||
* Determina cuando una clase es derivada de otra clase
|
||||
* $SYNTAX$
|
||||
* __objDerivedFrom( <oObjeto>, <xSuper> ) --> lIsParent
|
||||
* $ARGUMENTS$
|
||||
* <oObjeto> es el objeto a inspeccionar
|
||||
*
|
||||
* <xSuper> es el objeto que puede ser un padre. <xSuper> puede
|
||||
* ser o bien un Objeto o una cadena de caracteres con el
|
||||
* nombre de la clase.
|
||||
* $RETURNS$
|
||||
* __objDerivedFrom() retorna un valor logico TRUE (.T.) si el
|
||||
* <oObjeto> es derivado de <xSuper>.
|
||||
* $DESCRIPTION$
|
||||
* __objDerivedFrom() es una funci¢n de soporte de clases de bajo
|
||||
* nivel que chequea si una clase es una Superclase de la otra, o en
|
||||
* otras palabras si la clase <oObjeto> es una clase hija o
|
||||
* descendiente de <xSuper>.
|
||||
* $EXAMPLES$
|
||||
* // Crea tres clases y chequea sus relaciones
|
||||
*
|
||||
* #include "hbclass.ch"
|
||||
* FUNCTION main()
|
||||
* LOCAL oSuper, oObjeto, oDress
|
||||
* oSuper := TMood():New()
|
||||
* oObjeto := THappy():New()
|
||||
* oDress := TShirt():New()
|
||||
* ? __objDerivedFrom( oObjeto, oSuper ) // .T.
|
||||
* ? __objDerivedFrom( oSuper, oObjeto ) // .F.
|
||||
* ? __objDerivedFrom( oObjeto, oDress ) // .F.
|
||||
* RETURN NIL
|
||||
*
|
||||
* CLASS TMood
|
||||
* METHOD New() INLINE Self
|
||||
* ENDCLASS
|
||||
*
|
||||
* CLASS THappy FROM TMood
|
||||
* METHOD Smile() INLINE qout( "*smile*" )
|
||||
* ENDCLASS
|
||||
*
|
||||
* CLASS TShirt
|
||||
* DATA Color
|
||||
* DATA Size
|
||||
* METHOD New() INLINE Self
|
||||
* ENDCLASS
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* __objDerivedFrom() es una extensi¢n de Harbour.
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* __objHasData(),__ObjHasMethod()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,144 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2001 Antonio Linares
|
||||
* Documentaci¢n en Ingl‚s
|
||||
*
|
||||
* Copyright 2001 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Traducci¢n al Espa¤ol de pcode.txt
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
El OBJ de Clipper y el modelo pcode (GNU|Open|Clipper project)
|
||||
==============================================================
|
||||
|
||||
Consideremos el siguiente ejemplo de Clipper, test.prg:
|
||||
|
||||
function Main()
|
||||
|
||||
? "Hola mundo!"
|
||||
|
||||
return nil
|
||||
|
||||
Una vez que esto se compila dentro de un OBJ, qu‚ es lo que hay dentro
|
||||
de ‚l ?
|
||||
En efecto, lo que nosostros tenemos es un equivalente a la siguiente
|
||||
aplicaci¢n de lenguaje C:
|
||||
|
||||
SYMBOL symbols[] = { ... };
|
||||
|
||||
void MAIN( void )
|
||||
{
|
||||
BYTE pcode[] = { ... };
|
||||
|
||||
VirtualMachine( pcode, symbols );
|
||||
}
|
||||
|
||||
B sicamente, el c¢digo fuente de test.prg ha sido convertido en una
|
||||
secuencia de bytes pcode contenidos en el array pcode[] = {...}
|
||||
Todo lo que nuestra funci¢n MAIN hace es invocar, en tiempo de ejecuci¢n
|
||||
a la funci¢n de VirtualMachine() que procesar aquellos bytes de pcodes.
|
||||
|
||||
Vamos a revisar la estructura de pcodes de test.prg con m s detalle:
|
||||
|
||||
0000 (2A) LINE 0 2A 00 00
|
||||
0003 (2A) LINE 3 2A 03 00
|
||||
0006 (13) SYMF [QOUT] 13 02 00
|
||||
0009 (01) PUSHC "Hello world!" 01 ...
|
||||
0018 (27) DO(1) 27 01 00
|
||||
001B (2A) LINE 5 2A 05 00
|
||||
001E (7B) UNDEF 7B
|
||||
001F (79) SAVE_RET 79
|
||||
0020 (1E) JMP 0023 1E 00 00
|
||||
0023 (60) ENDPROC 60
|
||||
|
||||
Nosotros podemos definir un archivo hbpcode.h para leer mejor aquellos
|
||||
pcode:
|
||||
|
||||
----------------------
|
||||
hbpcode.h
|
||||
|
||||
#define LINE 0x2A
|
||||
#define SYMF 0x13
|
||||
#define PUSHC 0x01
|
||||
#define DO 0x27
|
||||
#define UNDEF 0x7B
|
||||
...
|
||||
----------------------
|
||||
|
||||
As¡ finalmente esto quedar¡a como:
|
||||
|
||||
BYTE pcode[] =
|
||||
{ LINE, 0, 0,
|
||||
LINE, 3, 0,
|
||||
SYMF, 2, 0,
|
||||
PUSHC, 'H', 'o', 'l', 'a', ' ', 'm', 'u', 'n', 'd', 'o', '!', '0',
|
||||
DO, 1, 0,
|
||||
LINE, 5, 0,
|
||||
UNDEF,
|
||||
SAVE_RET,
|
||||
JMP, 0, 0,
|
||||
ENDPROC };
|
||||
|
||||
Y qu‚ es SYMBOL symbols[] ?
|
||||
Cliper crea una tabla de s¡mbolos en el archivo OBJ que luego ser usada
|
||||
para crear una tabla din mica de s¡mbolos compartida por la aplicaci¢n
|
||||
entera. cada uno de esos s¡mbolos tiene la siguiente estructura:
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char * szName; // Clipper de hecho mantiene un array aqu¡ (11 bytes)
|
||||
BYTE bScope;
|
||||
LPVOID pVoid;
|
||||
} SYMBOL;
|
||||
|
||||
#define PUBLIC 0 // el alcance de la funci¢n !
|
||||
|
||||
SYMBOL symbols[] = { { "MAIN", PUBLIC, MAIN },
|
||||
{ "QQOUT", PUBLIC, QQOUT } };
|
||||
|
||||
Recordemos que el nombre de una funci¢n (MAIN, QQOUT) es la direcci¢n de
|
||||
la funci¢n, as¡ nuestra tabla de s¡mbolos estar lista para usarla para
|
||||
saltar y ejecutar cualquier funci¢n enlazada (linkeada).
|
||||
|
||||
De hecho, el pcode SYMF 2, 0 en nuestro ejemplo, instruir a la funci¢n
|
||||
VirtualMachine(), para usar el 2do s¡mbolo que es QQOUT.
|
||||
|
||||
Vamos a leer el pcode:
|
||||
|
||||
LINE 0, 0 => Nosotros estamos ubicados en la l¡nea 0
|
||||
LINE 3, 0 => Nosotros estamos ubicados en la l¡nea 3
|
||||
SYMF 2, 0 => Vamos a llamar a QQOUT desde nuestra tabla de s¡mbolos
|
||||
PUSHC ... => Esta cadena va a ser usada como un par metro
|
||||
DO 1, 0 => ok, saltemos a QQOUT y recordemos que le dimos 1 par metro
|
||||
LINE 5, 0 => Estamos de vuelta desde QQOUT y estamos ubicados en l¡nea 5
|
||||
UNDEF => Nosotros vamos a retornar este valor (NIL)
|
||||
SAVE_RET => Ok, retornemoslo
|
||||
JMP 0 => No saltamos dondequiera, continuamos con el pr¢ximo pcode
|
||||
ENDPROC => Es el fin. hemos completado la ejecuci¢n de esta funci¢n
|
||||
|
||||
Todas estas funciones ser n evaluadas desde nuestra funci¢n
|
||||
VirtualMachine(), (Clipper la llama _plankton() ). Todas las funciones
|
||||
terminan usando ENDPROC, as¡ cuando VirtualMachine() encuentra ENDPROC
|
||||
sabe que ha alcanzado el final de una funci¢n pcode.
|
||||
|
||||
Ahora que nosotros entendemos claramente el modelo b sico, nosotros
|
||||
estamos en condiciones de comenzar a implementar "reglas de producci¢n"
|
||||
en nuestra sintaxis yacc (harbour.y) para generar el archivo de salida
|
||||
espec¡fico (test.c) con la estructura de arriba (¢ nosotros podemos
|
||||
f cilmente generar el archivo OBJ para ‚l).
|
||||
|
||||
Continuar ...
|
||||
|
||||
Antonio Linares
|
||||
|
||||
|
||||
|
||||
@@ -1,115 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2001 Jose Lalin <dezac@corevia.com>
|
||||
* Documentaci¢n en Ingl‚s
|
||||
*
|
||||
* Copyright 2001 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Traducci¢n al Espa¤ol de pragma.txt
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
DIRECTIVA #pragma
|
||||
=================
|
||||
|
||||
|
||||
INTRODUCCION
|
||||
============
|
||||
Este archivo explica qu‚ es y c¢mo usar la directiva #pragma con Harbour.
|
||||
Primariamente esto le da control sobre los switches de la l¡nea de
|
||||
comandos del compilador, desde adentro de su c¢digo fuente.
|
||||
|
||||
|
||||
QUE ES ?
|
||||
========
|
||||
#pragma es una directiva usada dentro del c¢digo fuente en muchos
|
||||
compiladores para cambiar el comportamiento del compilador en tiempo
|
||||
de compilaci¢n.
|
||||
|
||||
|
||||
USO
|
||||
===
|
||||
|
||||
La directiva #pragma puede ser usada en dos formas:
|
||||
1- el modo switch
|
||||
2- modo comando
|
||||
|
||||
La sintaxis es: #pragma <Expression>[=On/Off] ¢
|
||||
#pragma -CompilerFlag[+|-]
|
||||
|
||||
Ud. puede usar ambos modos mezclados en el mismo m¢dulo y en may£sculas ¢
|
||||
min£sculas sin preocuparse.
|
||||
|
||||
Para habilitar ¢ deshabilitar un comando ¢ un switch Ud simplemente haga:
|
||||
|
||||
* Modo Comando Modo Switch
|
||||
--------------------------------------------------------------
|
||||
* #pragma <CommandName>=On/Off #pragma /<SwitchName>+/-
|
||||
|
||||
Ejemplo:
|
||||
#pragma AddDebugInfo=Off /* Suprime informaci¢n de depuraci¢n */
|
||||
#pragma /B+ /* Agrega informaci¢n de depuraci¢n
|
||||
desde aqu¡ */
|
||||
|
||||
|
||||
IMPLEMENTACION
|
||||
==============
|
||||
|
||||
Esta es la lista de los comandos soportados y switches:
|
||||
|
||||
* Comando Switch
|
||||
-----------------------------------------------
|
||||
* AUTOMEMVARS =<On/Off> /A<+/->
|
||||
* DEBUGINFO =<On/Off> /B<+/->
|
||||
* ENABLEWARNINGS =<On/Off> /W<+/->
|
||||
* EXITSEVERITY =<nNivel> /E<nNivel>
|
||||
* FORCEMEMVARS =<On/Off> /V<+/->
|
||||
* LINEINFO =<On/Off> /L<+/->
|
||||
* NOSTARTPROC =<On/Off> /N<+/->
|
||||
* PREPROCESSING =<On/Off> /P<+/->
|
||||
* WARNINGLEVEL =<nNivel> /W<nNivel>
|
||||
* SHORTCUTTING =<On/Off> /Z<+/->
|
||||
|
||||
Los switches tienen el mismo comportamiento que los del compilador
|
||||
y los comandos son sin¢nimos de los switches.
|
||||
|
||||
* TRACEPRAGMAS (Rastreo de pragmas)
|
||||
Este comando muestra la actividad de los pragmas en tiempo de
|
||||
compilaci¢n cuando est n habilitados.
|
||||
|
||||
NOTA: Ud. puede usar el modo de comando abreviado tipeando solamente
|
||||
los ocho primeros caracteres.
|
||||
|
||||
|
||||
NOTAS:
|
||||
======
|
||||
Esta directiva no es soportada en la versi¢n aislada del preprocesador
|
||||
de Harbour.
|
||||
|
||||
|
||||
EJEMPLOS
|
||||
========
|
||||
#pragma NoStartProc=Off
|
||||
/* #pragma /N- */
|
||||
|
||||
function Test()
|
||||
return nil
|
||||
|
||||
Esto es lo mismo que llamar a Harbour con el switch -n en la l¡nea de
|
||||
comandos pero con el gran beneficio que si Ud. olvida pasar el switch,
|
||||
este podr ser usado de todas maneras, porque est incluido dentro del
|
||||
c¢digo fuente.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,234 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2003 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de:
|
||||
* DB*(), ORD*(), RDD*()
|
||||
*
|
||||
* Copyright 1999 Luiz Rafael Culik <culik@sl.conex.net>
|
||||
* Documentaci¢n en Ingl‚s de:
|
||||
* DB*(), ORD*(), RDD*()
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* RDDLIST()
|
||||
* $CATEGORY$
|
||||
* Base de Datos
|
||||
* $ONELINER$
|
||||
* Retorna un array con los Manejadores de Bases de Datos disponibles
|
||||
* $SYNTAX$
|
||||
* RDDLIST([<nTipoRDD>]) --> aRDDLista
|
||||
* $ARGUMENTS$
|
||||
* <nTipoRDD> es un entero que representa el tipo de RDD que Ud. desea
|
||||
* listar. Las constantes RDT_FULL y RDT_TRANSFER
|
||||
* representan los dos tipos de RDDs actualmente disponibles
|
||||
*
|
||||
* Resumen de Tipo de RDDs
|
||||
* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||
* Constante Valor Significado
|
||||
* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||
* RDT_FULL 1 Implementaci¢n Completa de RDD
|
||||
* RDT_TRANSFER 2 Solamente driver Importar/Exportar
|
||||
* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||
*
|
||||
* RDT_FULL identifica a los RDDs que tienen todas las capacidades que
|
||||
* se asocian con un RDD.
|
||||
*
|
||||
* RDT_TRANSFER identifica a RDDs de capcidad limitada. Estos solamente
|
||||
* pueden transferir registros entre archivos. Ud. no puede usar estos
|
||||
* limitados drivers para abrir un archivo en un rea de trabajo.
|
||||
* Los manejadores SDF y DELIM son ejemplos de este tipo de RDD.
|
||||
* Ellos solamente son usados en la implementaci¢n de APPEND FROM y
|
||||
* COPY TO con archivos SDF ¢ DELIMITED.
|
||||
* $RETURNS$
|
||||
* RDDLIST() retorna un array unidimensional de los nombres de RDD
|
||||
* registrados con la aplicaci¢n como <nTipoRDD>.
|
||||
* $DESCRIPTION$
|
||||
* RDDLIST() es una funci¢n que devuelve una array de una dimensi¢n
|
||||
* que contiene los nombres de todos los RDD disponibles.
|
||||
*
|
||||
* Si Ud. no especifica <nTipoRDD>, ser n devueltos todos los RDD
|
||||
* disponibles sin importar el tipo.
|
||||
* $EXAMPLES$
|
||||
* En este ejemplo RDDLIST() retorna un array conteniendo las cadenas
|
||||
* de caracteres: "DBF", "SDF", "DELIM", "DBFCDX", and "DBFNTX":
|
||||
*
|
||||
* REQUEST DBFCDX
|
||||
* .
|
||||
* . < sentencias >
|
||||
* .
|
||||
* aRDDs := RDDLIST() // Retorna
|
||||
* // {"DBF", SDF", "DELIM", "DBFCDX", "DBFNTX" }
|
||||
*
|
||||
*
|
||||
* En este ejemplo RDDLIST() retorna un array conteniendo las
|
||||
* cadenas de caracteres: "SDF" and "DELIM":
|
||||
*
|
||||
* #include "rddsys.ch"
|
||||
* .
|
||||
* . < sentencias >
|
||||
* .
|
||||
* aImpExp := RDDLIST( RDT_TRANSFER )
|
||||
*
|
||||
* $TESTS$
|
||||
*
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
*
|
||||
* $SEEALSO$
|
||||
* RDDNAME()
|
||||
* $INCLUDE$
|
||||
* El archivo de cabecera es rddsys.ch
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* RDDNAME()
|
||||
* $CATEGORY$
|
||||
* Base de Datos
|
||||
* $ONELINER$
|
||||
* Retorna el nombre del RDD actualmente activo
|
||||
* $SYNTAX$
|
||||
* RDDNAME() --> cNombreRDD
|
||||
* $ARGUMENTS$
|
||||
* Ninguno
|
||||
* $RETURNS$
|
||||
* Retorna una cadena de caracteres, el nombre registrado del RDD activo
|
||||
* en el rea de trabajo actual ¢ en el rea especificada.
|
||||
* $DESCRIPTION$
|
||||
* RDDNAME() es una funci¢n que devuelve una cadena de caracteres con el
|
||||
* nombre registrado del RDD activo en el rea de trabajo actual ¢ en el
|
||||
* rea especificada.
|
||||
*
|
||||
* Ud. puede especificar un rea de trabajo distinta de la actual usando
|
||||
* un alias con la funci¢n.
|
||||
* $EXAMPLES$
|
||||
* USE Customer VIA "DBFNTX" NEW
|
||||
* USE Sales VIA "DBFCDX" NEW
|
||||
*
|
||||
* ? RDDNAME() // Retorna: DBFCDX (area actual)
|
||||
* ? Customer->( RDDNAME() ) // Retorna: DBFNTX (area especificada)
|
||||
* ? Sales->( RDDNAME() ) // Retorna: DBFCDX (area especificada)
|
||||
* $TESTS$
|
||||
*
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
*
|
||||
* $SEEALSO$
|
||||
* RDDLIST()
|
||||
* $INCLUDE$
|
||||
*
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* RDDSETDEFAULT()
|
||||
* $CATEGORY$
|
||||
* Base de Datos
|
||||
* $ONELINER$
|
||||
* Establece ¢ retorna el RDD por defecto para la aplicaci¢n.
|
||||
* $SYNTAX$
|
||||
* RDDSETDEFAULT( [<cNewDefaultRDD>] ) --> cPreviousDefaultRDD
|
||||
*
|
||||
* $ARGUMENTS$
|
||||
* <cNewDefaultRDD> es una cadena de caracteres, el nombre del RDD que
|
||||
* va a ser hecho el nuevo RDD por defecto para la
|
||||
* aplicaci¢n.
|
||||
* $RETURNS$
|
||||
* RDDSETDEFAULT() retorna una cadena de caracteres conteniendo el
|
||||
* nombre del manejador por defecto anterior <cPreviousDefaultRDD>.
|
||||
* $DESCRIPTION$
|
||||
* RDDSETDEFAULT() es una funci¢n que devuelve el nombre del manejador
|
||||
* (driver) por defecto anterior <cPreviousDefaultRDD> y opcionalmente
|
||||
* establece el manejador actual, especificado por <cNewDefaultRDD>.
|
||||
*
|
||||
* Si <cNewDefaultRDD> no es especificado, el nombre del manejador por
|
||||
* defecto actual es devuelto y ‚ste contin£a siendo el manejador por
|
||||
* defecto. El manejador por defecto es el driver que Harbour usa si Ud.
|
||||
* no especifica expl¡citamente un RDD con la cl usula VIA en el comando
|
||||
* USE.
|
||||
*
|
||||
* Esta funci¢n reemplaza a la funci¢n DBSETDRIVER()
|
||||
* $EXAMPLES$
|
||||
* // Si el manejador por defecto no es DBFNTX, ponerlo por defecto
|
||||
*
|
||||
* IF ( RDDSETDEFAULT() != "DBFNTX" )
|
||||
* cOldRdd := RDDSETDEFAULT( "DBFNTX" )
|
||||
* ENDIF
|
||||
* $TESTS$
|
||||
*
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
*
|
||||
* $SEEALSO$
|
||||
* DBSETDRIVER()
|
||||
* $INCLUDE$
|
||||
*
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __RDDSETDEFAULT()
|
||||
* $CATEGORY$
|
||||
* Base de Datos
|
||||
* $ONELINER$
|
||||
* Establece ¢ retorna el RDD por defecto para la aplicaci¢n.
|
||||
* $SYNTAX$
|
||||
* __RDDSETDEFAULT( [<cNewDefaultRDD>] ) --> cPreviousDefaultRDD
|
||||
* $ARGUMENTS$
|
||||
* <cNewDefaultRDD> es una cadena de caracteres, el nombre del RDD que
|
||||
* va a ser hecho el nuevo RDD por defecto para la
|
||||
* aplicaci¢n.
|
||||
* $RETURNS$
|
||||
* __RDDSETDEFAULT() retorna una cadena de caracteres conteniendo el
|
||||
* nombre del manejador por defecto anterior <cPreviousDefaultRDD>.
|
||||
* $DESCRIPTION$
|
||||
* __RDDSETDEFAULT() es una funci¢n que devuelve el nombre del manejador
|
||||
* (driver) por defecto anterior <cPreviousDefaultRDD> y opcionalmente
|
||||
* establece el manejador actual, especificado por <cNewDefaultRDD>.
|
||||
*
|
||||
* Si <cNewDefaultRDD> no es especificado, el nombre del manejador por
|
||||
* defecto actual es devuelto y ‚ste contin£a siendo el manejador por
|
||||
* defecto. El manejador por defecto es el driver que Harbour usa si Ud.
|
||||
* no especifica expl¡citamente un RDD con la cl usula VIA en el comando
|
||||
* USE.
|
||||
* Esta es una funci¢n de bajo nivel y debe usarse RDDSETDEFAULT() en su
|
||||
* lugar.
|
||||
* Esta funci¢n reemplaza a la funci¢n DBSETDRIVER()
|
||||
* $EXAMPLES$
|
||||
* // Si el manejador por defecto no es DBFNTX, ponerlo por defecto
|
||||
*
|
||||
* IF ( __RDDSETDEFAULT() != "DBFNTX" )
|
||||
* cOldRdd := __RDDSETDEFAULT( "DBFNTX" )
|
||||
* ENDIF
|
||||
* $TESTS$
|
||||
*
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
*
|
||||
* $SEEALSO$
|
||||
* DBSETDRIVER()
|
||||
* $INCLUDE$
|
||||
*
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
|
||||
@@ -1,131 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2001
|
||||
* Documentaci¢n en Ingl‚s de: readme.txt
|
||||
*
|
||||
* Copyright 2002 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de: readme.txt
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* PANORAMA
|
||||
* $CATEGORY$
|
||||
* Documento
|
||||
* $ONELINER$
|
||||
* Leame de HARBOUR
|
||||
* $DESCRIPTION$
|
||||
*
|
||||
* <b>El Proyecto Harbour</b>
|
||||
*
|
||||
* <b>************************************************************ </b>
|
||||
* <b>* Este archivo contiene informaci¢n sobre como obtener, * </b>
|
||||
* <b>* instalar y usar Harbour. * </b>
|
||||
* <b>* Por favor l‚alo -completamente- antes de solicitar ayuda * </b>
|
||||
* <b>************************************************************ </b>
|
||||
*
|
||||
* Harbour es una implementaci¢n libre (en todo sentido) de un
|
||||
* compilador de lenguaje xBase. Este est designado para ser compatible
|
||||
* con el c¢digo fuente del compilador CA-Cl*pper (c).
|
||||
* Esto significa que si Ud. tiene alg£n c¢digo que deber¡a compilar
|
||||
* usando CA-Cl*pper(c) entonces este deber¡a compilar tambi‚n bajo
|
||||
* Harbour.
|
||||
*
|
||||
* La p gina web del Proyecto Harbour es:
|
||||
* <b>http://www.harbour-project.org/</b>
|
||||
*
|
||||
* El estado del proyecto y cualquier otra informaci¢n est siempre
|
||||
* disponible desde el sitio web.
|
||||
* Hay tres listas de correo de Harbour. la lista de correo de los
|
||||
* desarrolladores, la lista de correo de los usuarios de Harbour y la
|
||||
* lista de correo de Conversaci¢n sobre temas relacionados a Harbour,
|
||||
* aunque cualquiera es bienvenido para unirse a las discusiones.
|
||||
*
|
||||
* Nos gustar¡a que Ud. se uniera al equipo de desarrollo de Harbour.
|
||||
* Si Ud. esta interesado, puede subscribirse a nuestra lista de correo
|
||||
* y comenzar contribuyendo a este proyecto p£blico libre.
|
||||
*
|
||||
* Por favor si‚ntase con libertad de hacer preguntas, reportar ideas,
|
||||
* sugestiones, correcciones, c¢digo, etc.
|
||||
* Con la ayuda de todos Uds., el compilador Harbour y las librer¡as de
|
||||
* ejecuci¢n se har realidad muy pronto.
|
||||
*
|
||||
*
|
||||
* <b>Qu‚ es lo que esta distribuci¢n contiene ?</b>
|
||||
* ==========================================
|
||||
*
|
||||
* Esta distribuci¢n es solamente una distribuci¢n de c¢digo fuente.
|
||||
* Esta no contiene ning£n archivo ejecutable. Las versiones ejecutables
|
||||
* de Harbour est n disponibles desde el sitio web.
|
||||
* Las versiones ejecutables de Harbour NO crean programas ejecutables
|
||||
* Harbour hasta este momento produce c¢digo de lenguaje C de salida,
|
||||
* el cual debe ser compilado con la VM (M quina Virtual de Harbour) y
|
||||
* las librer¡as de soporte para crear programas funcionales.
|
||||
* Por favor haga tests, corriendo Harbour contra su c¢digo fuente en
|
||||
* Clipper y reportando cualquier problema que pudiera ocurrir.
|
||||
*
|
||||
* Muy importante: El pre-procesador esta ahora trabajando correctamente
|
||||
*
|
||||
*
|
||||
* <b>Instalaci¢n</b>
|
||||
* -----------
|
||||
*
|
||||
* 1. Deszipee el archivo zip de Harbour usando pkunzip ¢ equivalente.
|
||||
* Por ej.: pkunzip -d build37.zip
|
||||
* Esto crear el directorio Harbour y todos los subdirectorios
|
||||
* relevantes.
|
||||
*
|
||||
* 2. Compile Harbour usando su compilador de lenguaje C. Archivos make
|
||||
* para diferentes plataformas est n incluidos.
|
||||
*
|
||||
*
|
||||
* <b>--- COPYRIGHT ---</b>
|
||||
*
|
||||
* Qu‚ informaci¢n de copyright tenemos ?
|
||||
*
|
||||
*
|
||||
* <b>--- LICENCIA ---</b>
|
||||
*
|
||||
* Informaci¢n sobre la Licencia de uso de Harbour est disponible en
|
||||
* el archivo license.txt
|
||||
*
|
||||
*
|
||||
* <b>--- RENUNCIA ---</b>
|
||||
*
|
||||
* Los participantes del Proyecto Harbour no asumen responsibilidad por
|
||||
* errores u omisiones en estos materiales.
|
||||
*
|
||||
* <b>ESTOS MATERIALES SON PROVISTOS "COMO ESTAN" SIN NINGUNA GARANTIA</b>
|
||||
* <b>DE NINGUN TIPO, SEA EXPRESA O IMPLICITA, INCLUYENDO PERO NO</b>
|
||||
* <b>LIMITADA A LAS GARANTIAS IMPLICITAS DE COMERCIALIZACION, O EL</b>
|
||||
* <b>USO PARA UN PROPOSITO PARTICULAR.</b>
|
||||
*
|
||||
* Los participantes del Proyecto Harbour no garantizan la exactitud ¢
|
||||
* completitud del c¢digo, informaci¢n, texto, salida ¢ cualquier otro
|
||||
* ¡tem contenido dentro de esos materiales. Los participantes del
|
||||
* Proyecto Harbour no ser n responsables por ning£n da¤o especial,
|
||||
* directo, indirecto, incidental, ¢ consecuente, incluyendo pero no
|
||||
* limitado a la p‚rdida de ingresos ¢ ganancias, los cuales pueden
|
||||
* resultar del uso ¢ mal uso de estos materiales.
|
||||
*
|
||||
* La informaci¢n en el Proyecto Harbour est sujeta a cambios sin
|
||||
* previo aviso y no representa ning£n compromiso futuro para los
|
||||
* participantes del Proyecto Harbour.
|
||||
*
|
||||
* El Proyecto Harbour
|
||||
*
|
||||
* $SEEALSO$
|
||||
* Licencia
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,230 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2003 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de:
|
||||
* @...GET, @...SAY
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $COMMANDNAME$
|
||||
* @...GET
|
||||
* $CATEGORY$
|
||||
* Comando
|
||||
* $ONELINER$
|
||||
* Crea un objeto GET y lo visualiza en pantalla
|
||||
* $SYNTAX$
|
||||
* @ <nFila>,<nCol> [SAY <cSay> [PICTURE <cSayPict>] COLOR <cSayColor> ]
|
||||
* GET <xVar> [PICTURE <cGetPict>] [COLOR <cGetColor>]
|
||||
* [WHEN <lWhen>] [VALID <lValid> / RANGE <xInicio>,<xFin>]
|
||||
* $ARGUMENTS$
|
||||
* <nFila> La fila donde se visualiza el SAY/GET
|
||||
*
|
||||
* <nCol> La columna donde se visualiza el SAY/GET
|
||||
*
|
||||
* <cSay> Mensaje a visualizar
|
||||
*
|
||||
* <cSayPict> Expresi¢n de Caracteres para el PICTURE del SAY
|
||||
*
|
||||
* <cSayColor> Color a ser Usado por la expresi¢n SAY.
|
||||
*
|
||||
* <xVar> El nombre de la variable/campo
|
||||
*
|
||||
* <cGetPict> Expresi¢n de Caracteres para el PICTURE del GET
|
||||
*
|
||||
* <lWhen> Expresi¢n l¢gica para permitir el GET.
|
||||
*
|
||||
* <lValida> Expresi¢n l¢gica para validar la entrada del GET
|
||||
*
|
||||
* <xInicio> Valor inferior de RANGE
|
||||
*
|
||||
* <xFin> Valor superior de RANGE.
|
||||
*
|
||||
* <cGetColor> Cadena de Color a ser usada por la expresi¢n GET
|
||||
* $RETURNS$
|
||||
* Ninguno
|
||||
* $DESCRIPTION$
|
||||
* Este comando agrega un objeto GET al array p£blico reservado llamado
|
||||
* GETLIST[] y lo muestra en pantalla. El campo ¢ variable a ser
|
||||
* agregada al objeto GET es especificada en <xVar> y es visualizada
|
||||
* en las coordenadas fila, columna <nFila>, <nCol>.
|
||||
*
|
||||
* Si la cl usula SAY es usada el mensaje <cSay> ser visualizado
|
||||
* comenzando en <nFila>,<nCol>, mientras que la variable de campo
|
||||
* <xVar> ser visualizada en ROW(), COL()+ 1.
|
||||
*
|
||||
* Si la cl usula PICTURE es usada para la expresi¢n SAY, el molde
|
||||
* <cSayPicr> es usado, todas las reglas de formato contenidas en ‚l se
|
||||
* aplicar n. Vea la funci¢n TRANSFORM I, para mayor informaci¢n.
|
||||
*
|
||||
* Si <cGetPict> es especificado, la cl usula PICTURE de <xVar> ser
|
||||
* usada para el objeto GET y todas las reglas de formato ser n
|
||||
* aplicadas. Vea las reglas de formato para GET en la tabla m s abajo.
|
||||
*
|
||||
* Si la cl usula WHEN es especificada, entonces <lWhen> se eval£a por
|
||||
* una condici¢n l¢gica (.T.) y en ese caso el objeto GET ser activado
|
||||
* De otro modo el objeto GET ser saltado y ninguna informaci¢n ser
|
||||
* obtenida a trav‚s de la pantalla. El nombre de una funci¢n definida
|
||||
* por el usuario que retorne true (.T.) ¢ false ( F.) ¢ un codeblock
|
||||
* puede ser especificado en <lWhen>. Esta cl usula no ser activada
|
||||
* hasta que un comando READ ¢ una funci¢n READMODAL() sea ejecutada.
|
||||
*
|
||||
* Si la cl usula VALID es especificada, <lValida> se eval£a por una
|
||||
* condici¢n l¢gica (.T.), si se cumple, el GET actual se considera
|
||||
* v lido y la operatoria del GET continuar hasta encontrar el pr¢ximo
|
||||
* objeto GET activo. De lo contrario el cursor permanecer en este
|
||||
* objeto GET hasta que la operaci¢n se aborte ¢ la condici¢n en
|
||||
* <lValid> se cumpla (.T.). El nombre de una funci¢n definida por
|
||||
* el usuario que retorne true (.T.) ¢ false ( F.) ¢ un codeblock
|
||||
* puede ser especificado en <lValida>. Esta cl usula no ser activada
|
||||
* hasta que un comando READ ¢ una funci¢n READMODAL() sea ejecutada.
|
||||
*
|
||||
* Si la cl usula RANGE (rango) es especificada, en lugar de la cl usula
|
||||
* VALID, los dos valores que limitan el rango deben ser especificados
|
||||
* en <xInicio> y <xFin>. La variable que se eval£a debe ser del mismo
|
||||
* tipo que las que constituyen el rango. Si la variable <xVar> es del
|
||||
* tipo de fecha (DATE), <xInicio> y <xFin> deben ser tambi‚n del tipo
|
||||
* DATE. Si la variable <xVar> es del tipo NUMERICo <xInicio> y <xFin>
|
||||
* deben ser tambi‚n del tipo num‚rico. Si un valor falla el test RANGE,
|
||||
* un mensaje de "OUT OF RANGE" (fuera de rango) aparecer en el area
|
||||
* SCOREBOARD (fila = 0, col. = 60). El mensaje de RANGE puede ser
|
||||
* desactivado si el comando SET SCOREBOARD ¢ la funcion SET() apropiada
|
||||
* es puesta a .F.
|
||||
*
|
||||
* <fixed>
|
||||
* <table>
|
||||
* Funci¢n Reglas de Formateo del GET
|
||||
* @A Permite solamente caracteres alfab‚ticos
|
||||
* @B Los n£meros ser n justificados a la izquierda
|
||||
* @C Todos los n£meros positivos ser n seguidos por CR
|
||||
* @D Todas las fechas usar n el formato SET DATE
|
||||
* @E Las fechas estar n en formato Brit nico y los n£meros
|
||||
* en formato Europeo.
|
||||
* @K Permite que un valor sugerido sea visto dentro del GET
|
||||
* pero borrado si se presiona alguna tecla que no sea la
|
||||
* de cursores cuando el cursor esta en la primera posici¢n
|
||||
* en el rea del GET.
|
||||
* @R Los caracteres que se indican ser n insertados
|
||||
* @S<nSize> Permite el desplazamiento horizontal de un campo ¢
|
||||
* variable que es de <nSize> caracteres de ancho.
|
||||
* @X Todos los n£meros negativos ser n seguidos por DB
|
||||
* @Z Visualiza los valores num‚ricos cero como blancos
|
||||
* @! Fuerza la conversi¢n a may£sculas de los caracteres
|
||||
* @( Visualiza los n£meros negativos en parentesis con
|
||||
* espacios adelante
|
||||
* @) Visualiza los n£meros negativos en parentesis sin
|
||||
* espacios adelante
|
||||
* </table>
|
||||
* </fixed>
|
||||
*
|
||||
* <fixed>
|
||||
* <table>
|
||||
* Molde Reglas de Formateo del GET
|
||||
* A S¢lo caracteres alfab‚ticos son permitidos
|
||||
* N S¢lo caracteres alfab‚ticos y num‚ricos son permitidos
|
||||
* X Cualquier caracter es permitido
|
||||
* L S¢lo T ¢ F son permitidos para datos l¢gicos
|
||||
* Y S¢lo Y ¢ N son permitidos para datos l¢gicos
|
||||
* 9 S¢lo digitos, incluyendo signos ser n permitidos
|
||||
* # S¢lo digitos, signos y espacios ser n permitidos
|
||||
* ! Caracteres alfab‚ticos son convertidos a May£sculas
|
||||
* S El signo Pesos ser visualizado en lugar de espacios, delante
|
||||
* del tipo de dato num‚rico (aqui visto cmo una "S")
|
||||
* * El signo Asterisco ser visualizado en lugar de espacios
|
||||
* delante del tipo de dato num‚rico
|
||||
* . Punto, define la posici¢n del punto decimal
|
||||
* , Coma, define la posici¢n del separado de miles.
|
||||
* </table>
|
||||
* </fixed>
|
||||
* Nota:
|
||||
* Las funciones de formateo para PICTURE pueden ser agrupadas juntas
|
||||
* cuando sean usandas conjuntamente con los moldes para PICTURE.
|
||||
* Sin embargo un espacio en blanco debe ser insertado en la cadena de
|
||||
* PICTURE si existen ambas: funciones y moldes.
|
||||
* $EXAMPLES$
|
||||
* FUNCTION Main()
|
||||
* LOCAL cVar := Space(50)
|
||||
* LOCAL nId := 0
|
||||
* CLS
|
||||
* @ 3,1 SAY "Nombre" GET cVar PICTURE "@!S 30"
|
||||
* @ 4,1 SAY "Ident." GET nId PICTURE "999.999"
|
||||
* READ
|
||||
* ? "El nombre que Ud. ingres¢ es:", cVar
|
||||
* ? "La Ident. que Ud. ingres¢ es:", nId
|
||||
* RETURN NIL
|
||||
* $TESTS$
|
||||
* Ver ejemplos
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Este comando es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a asociada es rtl
|
||||
* $SEEALSO$
|
||||
* @...SAY,READ,TRANSFORM()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $COMMANDNAME$
|
||||
* @...SAY
|
||||
* $CATEGORY$
|
||||
* Comando
|
||||
* $ONELINER$
|
||||
* Visualiza datos en las coordenadas dadas en el dispositivo actual
|
||||
* $SYNTAX$
|
||||
* @ <nFila>,<nCol> SAY <xValor> [ PICTURE <cPict> ] [COLOR <cColor>]
|
||||
* $ARGUMENTS$
|
||||
* <nFila> La fila donde se visualiza el SAY
|
||||
*
|
||||
* <nCol> La columna donde se visualiza el SAY
|
||||
*
|
||||
* <xValor> Valor a visualizar
|
||||
*
|
||||
* <cPict> Formato para el PICTURE
|
||||
*
|
||||
* <cColor> Cadena de Color
|
||||
* $RETURNS$
|
||||
* Ninguno
|
||||
* $DESCRIPTION$
|
||||
* Este comando visualiza el contenido de <xValor> en las coordenadas
|
||||
* <nFila>, <nCol>. Una cl usula PICTURE puede ser especificada en
|
||||
* <cPict>. Si el dispositivo actual es establecido a la impresora, la
|
||||
* salida ir a la impresora; Por defecto todas las salidas son
|
||||
* dirigidas a la pantalla.
|
||||
*
|
||||
* Para una lista completa de los Moldes y Funciones para PICTURES, vea
|
||||
* el comando @...GET
|
||||
* $EXAMPLES$
|
||||
* FUNCTION Main
|
||||
* CLS
|
||||
* @ 2,1 SAY "Harbour"
|
||||
* @ 3,1 SAY "is" COLOR "b/r+"
|
||||
* @ 4,1 SAY "Power" PICTURE "@!"
|
||||
* RETURN NIL
|
||||
* $TESTS$
|
||||
* Ver ejemplos
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Este comando es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a asociada es rtl
|
||||
* $SEEALSO$
|
||||
* @...GET,SET DEVICE,TRANSFORM()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2000 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de:
|
||||
* SETMODE()
|
||||
*
|
||||
* See COPYING for licensing terms.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* SETMODE()
|
||||
* $CATEGORY$
|
||||
* Entorno
|
||||
* $ONELINER$
|
||||
* Cambia el modo de video a un n£mero dado de filas y columnas
|
||||
* $SYNTAX$
|
||||
* SETMODE( <nFil>, <nCol> ) --> lSatisfactorio
|
||||
* $ARGUMENTS$
|
||||
* <nFil> es el n£mero de filas para el modo de video deseado.
|
||||
*
|
||||
* <nCol> es el n£mero de columnas para el modo de video deseado.
|
||||
*
|
||||
* $RETURNS$
|
||||
* SETMODE() devuelve verdadero si el cambio en el modo de video fue
|
||||
* satisfactorio, de otra manera devuelve falso.
|
||||
*
|
||||
* $DESCRIPTION$
|
||||
* SETMODE() es una funci¢n que cambia el modo de video (dependiendo de
|
||||
* la combination de tarjeta de video y monitor), para que coincida con
|
||||
* el n£mero de filas y columnas especificado.
|
||||
* N¢tese que s¢lo hay realmente unas pocas combinaciones de pares de
|
||||
* filas/columnas que produzcan el cambio en el modo de video.
|
||||
* Los siguientes estan disponibles para D.O.S:
|
||||
* 12 filas x 40 columnas 12 filas x 80 columnas
|
||||
* 25 filas x 40 columnas 25 filas x 80 columnas
|
||||
* 28 filas x 40 columnas 28 filas x 80 columnas
|
||||
* 50 filas x 40 columnas 43 filas x 80 columnas
|
||||
* 50 filas x 80 columnas
|
||||
* Algunas modos s¢lo estan disponibles para monitor color y/o VGA.
|
||||
* Cualquier cambio producido en el tama¤o de la pantalla es actualizado
|
||||
* en los valores devueltos por MAXROW() y MAXCOL().
|
||||
*
|
||||
* $EXAMPLES$
|
||||
* þ El primer ejemplo cambia al modo de visualizacion de 12 lineas:
|
||||
*
|
||||
* IF SETMODE( 12, 40)
|
||||
* ? "Oye hombre, eres tu chicato ?"
|
||||
* ELSE
|
||||
* ? "Mam tr eme los anteojos !"
|
||||
* ENDIF
|
||||
*
|
||||
* þ El pr¢ximo ejemplo cambia al modo de visualizacion de 50 lineas:
|
||||
* IF SETMODE( 50, 80)
|
||||
* ? "Este maravilloso modo de video ha sido seteado"
|
||||
* ELSE
|
||||
* ? "Oye Manuel que este monitor no est hecho de goma !"
|
||||
* ENDIF
|
||||
*
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Algunos de estos modos no estan disponibles en Clipper
|
||||
* $PLATFORMS$
|
||||
* DOS
|
||||
* $FILES$
|
||||
* El Achivo fuente es ..\source\rtl\gtdos\gtdos.c
|
||||
* $SEEALSO$
|
||||
* MAXCOL(), MAXROW()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,83 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2001 Antonio Linares
|
||||
* Documentaci¢n en Ingl‚s de statics.txt
|
||||
*
|
||||
* Copyright 2001 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Traducci¢n al Espa¤ol de statics.txt
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
VARIABLES ESTÁTICAS
|
||||
===================
|
||||
|
||||
Comenc‚ la implementaci¢n de Clases y creaci¢n de objetos cuando
|
||||
Harbour a£n no estaba manejando variables est ticas. (Harbour las
|
||||
reconoc¡a pero no generaba el pcode apropiado para ellas) .
|
||||
|
||||
As¡ Yo podr¡a hacer una introducci¢n al manejo de las variables
|
||||
est ticas como es, un sofisticado sistema, que Harbour esta yendo
|
||||
a implementar.
|
||||
|
||||
Es algo conocido p£blicamente que las variables est ticas en Clipper
|
||||
est n localizadas al final del segmento de datos. Esto ha causado
|
||||
todo tipo de problemas. Esto explica por qu‚, cuando he dise¤ado
|
||||
FiveWin lo hice en una forma que no pudiera causar ning£n problema
|
||||
en el futuro.
|
||||
|
||||
En Harbour todas las variables est ticas (y quiero significar en todos
|
||||
los PRGs) son almacenadas en un s¢lo array de Harbour (un array del
|
||||
lenguaje Clipper), esto garantiza que podemos tener tantas variables
|
||||
est ticas como deseamos sin limites (s¢lo limitados por la memoria
|
||||
disponible).
|
||||
Este array aStatics no es visible desde la aplicaci¢n (nivel PRG).
|
||||
|
||||
Basicamente lo que sucede cuando una funci¢n es llamada y esta
|
||||
funci¢n usa variables est ticas, es que la pila establece un puntero
|
||||
al sector del array donde est n nuestras variables estaticas, as¡
|
||||
desde este momento en adelante, acceder a la static1, static2, ...
|
||||
es acceder a alg£n elemento de ese array.
|
||||
|
||||
static1 = statics[ statics_base_for_this_function + 1 ]
|
||||
|
||||
...
|
||||
|
||||
staticn = statics[ statics_base_for_this_function + n ]
|
||||
|
||||
En orden de implementar esto nostros solo usamos dos nuevos opcodes:
|
||||
_STATICS y _SFRAME.
|
||||
_STATICS, hace crecer el array global de estaticas lo suficiente para
|
||||
para soportar nuestras variables estaticas reci‚n definidas:
|
||||
|
||||
_STATICS <n> --> ASize( aStatics, Len( aStatics ) + <n> )
|
||||
|
||||
_SFRAME --> le dice a la pila (stack) en que ubicaci¢n dentro del
|
||||
array aStatics estamos nosotros.
|
||||
|
||||
_STATICS, es s¢lo llamada una vez en el todo el PRG desde una funci¢n
|
||||
de inicio llamada _INITSTATICS (STATICS$ y SINIT en Clipper).
|
||||
|
||||
Esta funci¢n almacena en un lugar astuto (su propio puntero en la
|
||||
tabla de s¡mbolos !) nuestra base est tica y luego _SFRAME
|
||||
simplemente la toma de all¡ y la establece en la pila.
|
||||
Esta funci¢n _INITSTATICS ejecutar cualquier inicializaci¢n que
|
||||
nuestras globales est ticas puedan tener definidas en aquel PRG).
|
||||
|
||||
Uds. van a ver el c¢digo de todo esto. Solo quer¡a darles una
|
||||
clara idea sobre como Harbour hace esta magia :-)
|
||||
|
||||
Antonio Linares
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,129 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2001
|
||||
* Documentaci¢n en Ingl‚s de: strotype.txt
|
||||
*
|
||||
* Copyright 2002 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de: strotype.txt
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* Fuertemente tipeado
|
||||
* $CATEGORY$
|
||||
* Documento
|
||||
* $ONELINER$
|
||||
* Chequeo de Tipo en Tiempo de Compilaci¢n
|
||||
* $DESCRIPTION$
|
||||
* El Strong Type Checking, podr¡a ser tambi‚n descripto como
|
||||
* "Chequeo de tipo en Tiempo de Compilaci¢n".
|
||||
* Como Ud. podr¡a saber Clipper genera un error en Tiempo de Ejecuci¢n
|
||||
* ("Type Mismatch") cuando nosotros intentamos realizar algunas
|
||||
* operaciones con el tipo equivocado de variable.
|
||||
*
|
||||
* Ejemplos:
|
||||
*
|
||||
* LOCAL Var1 := "A"
|
||||
*
|
||||
* ? Var1 * 3 // Error
|
||||
*
|
||||
* @ Var1, 7 SAY 'Hello' // Error
|
||||
*
|
||||
* ? SubStr( "Hello", Var1 ) // Error
|
||||
*
|
||||
* Las 3 l¡neas superiores podr¡an todas resultar en un error de Tiempo
|
||||
* de Ejecuci¢n, porque Var1 es del tipo CHARACTER, pero las l¡neas de
|
||||
* arriba la usan como si fuera del tipo NUMERIC.
|
||||
*
|
||||
* Usando un chequeo de Tipo Fuerte, ¢ Chequeo de Tipo en Tiempo de
|
||||
* Compilaci¢n, el problema de arriba podr¡a haber sido descubierto y
|
||||
* y reportado en tiempo de compilaci¢n, antes que esperar que el
|
||||
* inevitable problema sea descubierto cuando finalmente nosotros
|
||||
* ejecutemos el programa.
|
||||
*
|
||||
* Los lenguajes fuertemente tipeados permiten al programador "decirle"
|
||||
* al compilador (declarar) cual es el tipo de cada variable, as¡ el
|
||||
* compilador puede advertirle al programador, cuando esa variable
|
||||
* declarada (Strong Typed), es usada en un contexto el cual es
|
||||
* incompatible con su tipo declarado.
|
||||
*
|
||||
* Por ejemplo si nosotros le "contamos" al compilador que la Var1 de
|
||||
* arriba es del tipo CHARACTER (LOCAL Var1 AS CHARACTER), el compilador
|
||||
* de Harbour, podr¡a en devoluci¢n advertirnos que nosotros intentamos
|
||||
* realizar el calculo:
|
||||
*
|
||||
* Var1 * 3
|
||||
*
|
||||
* porque el compilador sabe que nosotros no podemos realizar la
|
||||
* mutiplicaci¢n de un CHARACTER. (Nosotros podr¡amos hacerlo en alg£n
|
||||
* contexto pero eso esta mas all del alcance de esta discusi¢n).
|
||||
* Similarmente nosotros podr¡amos haber sido advertidos cuando
|
||||
* intentamos usar Var1 como un numero de Fila ( @ Var1 ), ¢ como el
|
||||
* segundo operando de la funci¢n SUBSTR(), SUBSTR( "Hello", Var1)
|
||||
* porque el compilador sabe que esas operaciones requieren un tipo
|
||||
* NUMERIC antes que CHARACTER.
|
||||
*
|
||||
* Lo de arriba puede ahorrarnos un mont¢n de tiempo, se¤alandonos un
|
||||
* problema del cual no podemos escapar, porque ese c¢digo nunca
|
||||
* funcionar correctamente una vez ejecutado.
|
||||
* As¡ que antes de esperar al ciclo de testeo, para que tales problemas
|
||||
* sean descubiertos, (y algunas veces a£n despu‚s de que nosotros
|
||||
* hemos distribuido nuestras aplicaciones) en su lugar nosotros podemos
|
||||
* saber de esos problemas tan pronto como nosotros tipeamos:
|
||||
*
|
||||
* HARBOUR ProgName -w3
|
||||
*
|
||||
* Harbour tambi‚n ofrece un modo h¡brido, donde puede reportar este
|
||||
* tipo de problemas, a£n sin el requerimiento que el programador
|
||||
* declare el tipo de variables. Esta caracter¡stica es referida como
|
||||
* Chequeo Adaptativo de Tipo (Adaptive Type Checking).
|
||||
* No es necesario que el programador haga ning£n cambio en el c¢digo
|
||||
* para tomar ventaja de ‚sta caracter¡stica. Todos los 3 errores de
|
||||
* arriba podr¡an haber sido reportados tan efectivamente como si el
|
||||
* programador hubiera declarado Var1 como de Tipo Fuerte.
|
||||
*
|
||||
* Harbour podr¡a haber sido capaz de reportar tales problemas en
|
||||
* tiempo de compilaci¢n, porque la asignaci¢n Var1 := "A" implica que
|
||||
* Var1 es del tipo CHARACTER, hasta que a ‚sta le sea asignado otro
|
||||
* valor. As¡ entonces Harbour podr¡a "recordar" que Var1 a "adaptado"
|
||||
* el tipo CHARACTER, y as¡ la multiplicaci¢n subsecuente Var1 * 3
|
||||
* ser reportada como un error, tan pronto como Ud. intente compilar
|
||||
* tal c¢digo.
|
||||
*
|
||||
* La parte hermosa de este modo h¡brido, es que a diferencia de las
|
||||
* variables Strong Typed, Ud. no tiene que declarar el c¢digo, as¡
|
||||
* que no son necesarios cambios en el c¢digo fuente, el Tipo en su
|
||||
* lugar es asumido por implicaci¢n (el Tipo del valor asignado).
|
||||
* El otro beneficio es que, es completamente correcto asignar un nuevo
|
||||
* valor de diferente tipo, en cualquier momento, a esa variable no
|
||||
* declarada (variante). Tan pronto como nosotros asignemos un nuevo
|
||||
* tipo, el compilador entonces nos proteger de usar la variable en un
|
||||
* contexto incompatible, dado que la variable a "adaptado" este Tipo
|
||||
* tan pronto como nosotros le hemos asignado un valor, el cual implica
|
||||
* un Tipo.
|
||||
*
|
||||
* Mientras el Chequeo Adaptativo de Tipo puede ser completamente
|
||||
* efectivo en reportar muchos errores comunes, para tener todos los
|
||||
* beneficios del Chequeo en Tiempo de Compilaci¢n es recomendado
|
||||
* declarar el Tipo de las variables, cuando sea posible.
|
||||
*
|
||||
* Las caracter¡sticas del Tipo fuerte (Strong Type), tambi‚n permiten
|
||||
* la declaraci¢n de par metros esperados (incluyendo opcionales) de las
|
||||
* funciones definidas por el usuario, asi como tambi‚n el tipo
|
||||
* retornado.
|
||||
* Similarmente, Ud. puede declarar el tipo de cualquier variable de
|
||||
* Clase, M‚todos y Par metros de M‚todos.
|
||||
*
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,374 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2002 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de:
|
||||
* TBrowseNew()
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $CLASSDOC$
|
||||
* $FUNCNAME$
|
||||
* TBrowseNew()
|
||||
* $CATEGORY$
|
||||
* Clase TBrowse
|
||||
* $ONELINER$
|
||||
* Crea un Objeto Browse
|
||||
* $CONSTRUCTOR$
|
||||
* TBrowseNew( <nArriba>,<nIzq>,<nAbajo>,<nDerecha> ) --> <oBrowse>
|
||||
* $ARGUMENTS$
|
||||
* <nArriba> Fila Superior
|
||||
*
|
||||
* <nIzq> Columna Superior Izquierda
|
||||
*
|
||||
* <nAbajo> Fila Inferior
|
||||
*
|
||||
* <nDerecha> Columna Inferior Derecha
|
||||
* $RETURNS$
|
||||
* <oBrowse> Un nuevo Objeto Browse
|
||||
* $DESCRIPTION$
|
||||
* Esta función establece una ventana de desplazamiento en las
|
||||
* coordenadas establecidas por <nArriba>, <nIzq>, <nAbajo>, <nDerecha>
|
||||
* Para visualizar una base de datos use la función TBrowseDB() en
|
||||
* su lugar.
|
||||
* $DATANOLINK$
|
||||
* :aColumns Array para guardar todas las columnas del browse
|
||||
*
|
||||
* :autoLite Valor Lógico para controlar el color brillante
|
||||
*
|
||||
* :cargo Variable definida por el usuario
|
||||
*
|
||||
* :colorSpec Tabla de Color para la visualización del TBrowse
|
||||
*
|
||||
* :colPos Columna de posición actual del cursor
|
||||
*
|
||||
* :colSep Caracter separador de Columnas
|
||||
*
|
||||
* :footSep Caracter separador de Notas al pie
|
||||
*
|
||||
* :freeze Número de columnas a Congelar
|
||||
*
|
||||
* :goBottomBlock Codeblock ejecutado por TBrowse:goBottom()
|
||||
*
|
||||
* :goTopBlock Codeblock ejecutado por TBrowse:goTop()
|
||||
*
|
||||
* :headSep Caracter separador de Encabezados
|
||||
*
|
||||
* :hitBottom Indica el fin de los datos disponibles
|
||||
*
|
||||
* :hitTop Indica el comienzo de los datos disponibles
|
||||
*
|
||||
* :leftVisible Indica la posición de la columna no congelada
|
||||
* más a la izquierda en la pantalla
|
||||
*
|
||||
* :nBottom Número de la Fila Inferior para la visualización
|
||||
* del objeto TBrowse
|
||||
*
|
||||
* :nLeft Columna más a la Izquierda para la visualización
|
||||
* del objeto TBrowse
|
||||
*
|
||||
* :nRight Columna más a la Derecha para la visualización
|
||||
* del objeto TBrowse
|
||||
*
|
||||
* :nTop Número de la Fila Superior para la visualización
|
||||
* del objeto TBrowse
|
||||
*
|
||||
* :rightVisible Indica la posición de la columna no congelada
|
||||
* más a la Derecha en la pantalla
|
||||
*
|
||||
* :rowCount Número de filas de datos visibles en el TBrowse
|
||||
*
|
||||
* :rowPos Fila de posición actual del cursor
|
||||
*
|
||||
* :skipBlock Codeblock usado para la reposicion de datos
|
||||
*
|
||||
* :stable Indica si el objeto TBrowse es estable
|
||||
*
|
||||
* :aRedraw Array de items lógicos indicando si es apropiado
|
||||
* cuales filas necesitan ser redibujadas
|
||||
*
|
||||
* :RelativePos Indica la posición del registro relativa a la
|
||||
* posición del primer registro en la pantalla
|
||||
*
|
||||
* :lHeaders Variable interna que indica cuando hay cabeceras
|
||||
* de columnas para dibujar
|
||||
*
|
||||
* :lFooters Variable interna que indica cuando hay pie de
|
||||
* columnas para dibujar
|
||||
*
|
||||
* :aRect El rectangulo especificado con ColorRect()
|
||||
*
|
||||
* :aRectColor Los colores para usar en el rectangulo especificado
|
||||
* con ColorRect()
|
||||
*
|
||||
* :aKeys Mantiene las teclas de movimiento por defecto
|
||||
*
|
||||
* $METHODSLINK$
|
||||
* AddColumn() Agrega un nuevo objeto TBColumn al Browse actual
|
||||
*
|
||||
* Applykey() Ejecuta el movimiento de teclas del Browse
|
||||
*
|
||||
* SetKey() Agrega una nueva tecla al diccionario de teclado
|
||||
* $METHODSNOLINK$
|
||||
* New(nTop, nLeft, nBottom, nRight)
|
||||
* Crea una nueva clase Browse y establece los
|
||||
* valores por defecto
|
||||
*
|
||||
* Down() Mueve el cursor una fila hacia abajo
|
||||
*
|
||||
* End() Mueve el cursor a la columna de datos más hacia
|
||||
* la derecha que esté visible.
|
||||
*
|
||||
* GoBottom() Reposiciona los datos fuentes al final del archivo
|
||||
*
|
||||
* GoTop() Reposiciona los datos fuentes al inicio del
|
||||
* archivo
|
||||
*
|
||||
* Home() Mueve el cursor a la columna visible más hacia la
|
||||
* izquierda
|
||||
*
|
||||
* Left() Mueve el cursor una columna hacia la izquierda
|
||||
*
|
||||
* PageDown() Reposiciona los datos fuentes hacia abajo
|
||||
*
|
||||
* PageUp() Reposiciona los datos fuentes hacia arriba
|
||||
*
|
||||
* PanEnd() Mueve el cursor a la columna de datos más a la
|
||||
* derecha
|
||||
*
|
||||
* PanHome() Mueve el cursor a la columna de datos más a la
|
||||
* izquierda
|
||||
*
|
||||
* PanLeft() Se desplaza hacia la izquierda sin cambiar la
|
||||
* posición del cursor
|
||||
*
|
||||
* PanRight() Se desplaza hacia la derecha sin cambiar la
|
||||
* posición del cursor
|
||||
*
|
||||
* Right() Mueve el cursor una columna hacia la derecha
|
||||
*
|
||||
* Up() Mueve el cursor una fila hacia arriba
|
||||
*
|
||||
* ColCount() Retorna el número actual de columnas
|
||||
*
|
||||
* ColorRect() Altera el color de un grupo rectangular de celdas
|
||||
*
|
||||
* ColWidth(nCol) Retorna el ancho de visualización de una columna
|
||||
* particular
|
||||
*
|
||||
* Configure( nMode) Reconfigura los seteos internos del objeto
|
||||
* TBrowse. <nMode> es un parámetro no
|
||||
* documentado en CA-Cl*pper
|
||||
*
|
||||
* LeftDetermine() Determina la columna no congelada más a la
|
||||
* izquierda en la pantalla
|
||||
*
|
||||
* DeHilite() Saca el color brillante a la celda actual
|
||||
*
|
||||
* DelColumn( nPos ) Borra un objeto Column de un Browse
|
||||
*
|
||||
* ForceStable() Ejecuta una estabilización total
|
||||
*
|
||||
* GetColumn( nColumn ) Obtiene un objeto TBColumn específico
|
||||
*
|
||||
* Hilite() Resalta la celda actual
|
||||
*
|
||||
* InsColumn( nPos, oCol) Inserta un objeto TBColumn de un Browse
|
||||
*
|
||||
* Invalidate() Fuerza un redibujo completo durante la
|
||||
* próxima estabilización
|
||||
*
|
||||
* RefreshAll() Causa que todos los datos sean recalculados
|
||||
* durante la próxima estabilización
|
||||
*
|
||||
* RefreshCurrent() Causa que la fila actual sea rellenada y
|
||||
* redibujada en la próxima estabilización
|
||||
*
|
||||
* SetColumn( nColumn, oCol) Reemplaza un objeto TBColumn con otro
|
||||
*
|
||||
* Stabilize() Ejecuta una estabilización incremental
|
||||
*
|
||||
* DispCell( nCol, cColor) Visualiza una sola celda en el color dado
|
||||
*
|
||||
* $EXAMPLES$
|
||||
* Vea el archivo ../tests/testbrw.prg
|
||||
* $TESTS$
|
||||
* Vea el archivo ../tests/testbrw.prg
|
||||
* $STATUS$
|
||||
* S
|
||||
* $COMPLIANCE$
|
||||
* Estas funciones son compatibles con CA-Cl*pper 5.2
|
||||
* Los métodos Applykey() y Setkey() solamente son visibles si la
|
||||
* compatibilidad con Clipper 5.3 ( HB_COMPAT_C53 ) está definida.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librería asociada es rtl
|
||||
* $SEEALSO$
|
||||
* TBROWSENEW(),TBCOLUMNNEW()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
/* $CLASSDOC$
|
||||
* $METHOD$
|
||||
* SetKey()
|
||||
* $CATEGORY$
|
||||
* TBrowse Method
|
||||
* $ONELINER$
|
||||
* Obtiene y/o Establece un bloque de código asociado a una tecla
|
||||
* $SYNTAX$
|
||||
* SetKey( <nTecla> [,<bBlock>] ) --> bOldBlock
|
||||
* $ARGUMENTS$
|
||||
* <nTecla> Un código de tecla (inkey) válido
|
||||
*
|
||||
* <bBlock> Una ación opcional a asociar con el valor de la tecla
|
||||
* $RETURNS$
|
||||
* <bOldBlock> Si al presionar una tecla, se cambia el codeblock
|
||||
* se devolverá el bloque previo, de otro modo este
|
||||
* método devolverá el codeblock actual.
|
||||
* $DESCRIPTION$
|
||||
* Este método Obtiene y opcionalmente Establece un bloque de código
|
||||
* que es asociado con el valor de una tecla.
|
||||
* La tabla inferior muestra las definiciones de teclas/codeblocks
|
||||
*
|
||||
* <table>
|
||||
* Valor Tecla Bloque de Código
|
||||
*
|
||||
* K_DOWN {|Ob, nKey| Ob:Down(), 0}
|
||||
* K_END {|Ob, nKey| Ob:End(), 0}
|
||||
* K_CTRL_PGDN {|Ob, nKey| Ob:GoBottom(), 0}
|
||||
* K_CTRL_PGUP {|Ob, nKey| Ob:GoTop(), 0}
|
||||
* K_HOME {|Ob, nKey| Ob:Home(), 0}
|
||||
* K_LEFT {|Ob, nKey| Ob:Left(), 0}
|
||||
* K_PGDN {|Ob, nKey| Ob:PageDown(), 0}
|
||||
* K_PGUP {|Ob, nKey| Ob:PageUp(), 0}
|
||||
* K_CTRL_END {|Ob, nKey| Ob:PanEnd(), 0}
|
||||
* K_CTRL_HOME {|Ob, nKey| Ob:PanHome(), 0}
|
||||
* K_CTRL_LEFT {|Ob, nKey| Ob:PanLeft(), 0}
|
||||
* K_CTRL_RIGHT {|Ob, nKey| Ob:PanRight(),0}
|
||||
* K_RIGHT {|Ob, nKey| Ob:Right(), 0}
|
||||
* K_UP {|Ob, nKey| Ob:Up(), 0}
|
||||
* K_ESC {|Ob, nKey| -1 }
|
||||
* </table>
|
||||
*
|
||||
* Los manejadores de tecla pueden ser consultados, agregados,
|
||||
* reemplazados y removidos del dicccionario interno de teclado.
|
||||
* Por ejemplo
|
||||
*
|
||||
* oTb:SETKEY( K_TAB, {|oTb, nKey| -1} )
|
||||
*
|
||||
* Un manejador de teclas por defecto, puede ser declarado al
|
||||
* especificar un valor de cero para <nKey>. esto asocia el codeblock
|
||||
* que será evaluado cada vez que TBrowse:Applykey() sea llamado con
|
||||
* un valor de tecla que no este contenida en el diccionario.
|
||||
* Por ejemplo
|
||||
*
|
||||
* oTb:SetKey( 0, {|oTb, nKey| DefKeyHandler( otb, nkey) })
|
||||
* Esto llama a una función llamada DefKeyHandler() cuando nKey no
|
||||
* está contenida en el diccionario.
|
||||
*
|
||||
* Para remover una definición presion de tecla/codeblock, especifique
|
||||
* NIl para <bBlock>
|
||||
* oTb:SetKey( K_ESC, NIL )
|
||||
* $EXAMPLES$
|
||||
* oTb:SeyKey( K_F10, {|otb,nkey| ShowListByname(otb) }
|
||||
* $STATUS$
|
||||
* S
|
||||
* $COMPLIANCE$
|
||||
* El método Setkey() solamente es visible si la compatibilidad con
|
||||
* Clipper 5.3 ( HB_COMPAT_C53 ) está definida.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librería asociada es rtl
|
||||
* $SEEALSO$
|
||||
* Applykey()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $CLASSDOC$
|
||||
* $METHOD$
|
||||
* Applykey()
|
||||
* $CATEGORY$
|
||||
* TBrowse Method
|
||||
* $ONELINER$
|
||||
* Evalúa un codeblock asociado con una tecla especifica
|
||||
* $SYNTAX$
|
||||
* ApplyKey( <nTecla> ) --> nResultado
|
||||
* $ARGUMENTS$
|
||||
* <nTecla> Un código de tecla (inkey) válido
|
||||
* $RETURNS$
|
||||
* <nResultado> Valor devuelto para el codeblock evaluado
|
||||
* Ver Tabla abajo
|
||||
*
|
||||
* <table>
|
||||
* Valor Significado
|
||||
* -1 El usuario solicita que el browse pierda foco de entrada
|
||||
* 0 El codeblock asociado con <nTecla> fue evaluado
|
||||
* 1 Imposible de localizar <nTecla> en el diccionario, la tecla
|
||||
* no fué procesada
|
||||
* </table>
|
||||
* $DESCRIPTION$
|
||||
* Este método evalúa un bloque de código asociado con <nTecla> que
|
||||
* está contenida en el diccionario TBrowse:setkey()
|
||||
* $EXAMPLES$
|
||||
* WHILE .T.
|
||||
* oTb:forceStable()
|
||||
*
|
||||
* IF( oTb:applykey( inkey(0) ) == -1 )
|
||||
* EXIT
|
||||
* ENDIF
|
||||
*
|
||||
* ENDDO
|
||||
* $STATUS$
|
||||
* S
|
||||
* $COMPLIANCE$
|
||||
* El método Applykey() solamente es visible si la compatibilidad con
|
||||
* Clipper 5.3 ( HB_COMPAT_C53 ) está definida.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librería asociada es rtl
|
||||
* $SEEALSO$
|
||||
* SetKey()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $CLASSDOC$
|
||||
* $METHOD$
|
||||
* AddColumn()
|
||||
* $CATEGORY$
|
||||
* TBrowse Method
|
||||
* $ONELINER$
|
||||
* Agrega una nueva Column a un Objeto TBrowse
|
||||
* $SYNTAX$
|
||||
* AddColumn( oCol ) --> Self
|
||||
* $ARGUMENTS$
|
||||
* <oCol> Es un Objeto TBColumn
|
||||
* $RETURNS$
|
||||
* <Self> El Objeto actual
|
||||
* $DESCRIPTION$
|
||||
* Este método agrega un nuevo Objeto TBColumn especificado como <oCol>
|
||||
* al objeto de browsing asignado.
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta función es compatible con CA-Cl*pper 5.2
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librería asociada es rtl
|
||||
* $SEEALSO$
|
||||
* TBColumnNew()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,76 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2000 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de:
|
||||
*
|
||||
* Copyright 2000 Brian Hays <bhays@abacuslaw.com>
|
||||
* Documentaci¢n en Ingles
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* HBClass()
|
||||
* $CATEGORY$
|
||||
* Clases
|
||||
* $ONELINER$
|
||||
* HBClass() es usada en la creaci¢n de todas las clases
|
||||
* $SYNTAX$
|
||||
* oClass := HBClass():New("TMyClass")
|
||||
*
|
||||
* HBClass() es usualmente utilizada para definir una clase con los
|
||||
* comandos definidos en hbclass.h:
|
||||
* CLASS HBGetList // Llama a HBClass() para crear la clase
|
||||
* ... // HBGetList
|
||||
* ENDCLASS
|
||||
* $ARGUMENTS$
|
||||
*
|
||||
* $RETURNS$
|
||||
* Una instancia de la Clase HBClass. Un objeto especial, el m‚todo
|
||||
* :New() puede entonces crear las clases que Ud. define.
|
||||
* $DESCRIPTION$
|
||||
* HBClass es una clase que ...
|
||||
* Los m‚todos de clase son los siguientes:
|
||||
*
|
||||
* New() Crea una nueva instancia de la clase
|
||||
*
|
||||
* $EXAMPLES$
|
||||
* FUNCTION TestObject()
|
||||
* LOCAL oObject
|
||||
*
|
||||
* oObject := HBClass():New("TMyClass")
|
||||
* oObject:End()
|
||||
*
|
||||
* RETURN NIL
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* La sintaxis Orientada a Objetos en Harbour es compatible con
|
||||
* CA-Cl*pper.
|
||||
* Pero Clipper solamente permite la creaci¢n de objetos a partir
|
||||
* de unas pocas clases estandares, y NO le permite al programador
|
||||
* crear nuevas clases.
|
||||
* En Harbour, Ud. puede crear sus propias clases completamente con
|
||||
* M‚todos, Variables de Instancia, Variables de Clase y Herencia.
|
||||
* Aplicaciones enteras pueden ser designadas y codificadas en el
|
||||
* estilo Orientado a Objetos.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* __objHasData(),Programacion Orientada a Objeto,CLASS
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2002 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de:
|
||||
*
|
||||
* Copyright 1999 Chen Kedem <niki@actcom.co.il>
|
||||
* Documentaci¢n en Ingl‚s de: READVAR()
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* READVAR()
|
||||
* $CATEGORY$
|
||||
* Data input and output
|
||||
* $ONELINER$
|
||||
* Retorna el nombre de la variable del actual GET ¢ MENU
|
||||
* $SYNTAX$
|
||||
* READVAR( [<cNombreVar>] ) --> cViejoNombreVar
|
||||
* $ARGUMENTS$
|
||||
* <cNombreVar> es el nuevo nombre de la variable a establecer
|
||||
* $RETURNS$
|
||||
* READVAR() retorna el viejo nombre de la variable <cViejoNombreVar>.
|
||||
* Si ninguna variable fue establecida anteriormente, READVAR() retorna
|
||||
* una cadena vac¡a.
|
||||
* $DESCRIPTION$
|
||||
* READVAR() es establecida dentro del comando READ ¢ MENU TO para
|
||||
* mantener el nombre en may£sculas de la variable del GET / MENU TO
|
||||
* actual y volverla de nuevo al viejo valor cuando aquellos comandos
|
||||
* finalizan.
|
||||
* Ud. no deber¡a normalmente establecer un nombre de variable, sino
|
||||
* usarlo para obtener el nombre de la variable de un GET cuando se
|
||||
* ejecuta una clausula VALID ¢ WHEN. ¢ durante la ejecuci¢n de un
|
||||
* SET KEY y Ud. esta dentro de un READ ¢ MENU TO.
|
||||
* $EXAMPLES$
|
||||
* // Visualiza un menu, presione <F1> para ver el nombre de la
|
||||
* // variable de MENU TO
|
||||
* CLS
|
||||
* @ 1, 10 PROMPT "insecto chupador de sangre que infecta camas"
|
||||
* @ 2, 10 PROMPT "germen; infeccion viral "
|
||||
* @ 3, 10 PROMPT "defecto; snag; (fuente de) malfuncionamiento"
|
||||
* @ 4, 10 PROMPT "peque¤o microfono oculto "
|
||||
* @ 6, 10 SAY "(Presione F1 por una pista)"
|
||||
* SET KEY 28 TO ShowVar
|
||||
* MENU TO What_Is_Bug
|
||||
*
|
||||
* PROCEDURE ShowVar
|
||||
* ALERT( READVAR() ) // WHAT_IS_BUG in red ALERT() box
|
||||
* RETURN
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* READVAR() trabaja exactamente como la funci¢n READKEY() de Clipper.
|
||||
* Note sin embargo que el par metro <cVarName> no est documentado
|
||||
* y es usado internamente por CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La Librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* @...GET,@...PROMPT,MENU TO,READ,SET KEY,__AtPrompt(),__MenuTo()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,100 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2002 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de: LABEL FORM
|
||||
*
|
||||
* Copyright 1999 Luiz Rafael Culik <culik@sl.conex.net>
|
||||
* Documentacion en Ingl‚s
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* LABEL FORM
|
||||
* $CATEGORY$
|
||||
* Comando
|
||||
* $ONELINER$
|
||||
* Visualiza etiquetas en la pantalla ¢ en alg£n dispositivo alterno
|
||||
* $SYNTAX$
|
||||
* LABEL FORM <cNombreEtiqueta> [TO PRINTER] [TO FILE <cArchivo>]
|
||||
* [<cAlcance>] [WHILE <bWhile> ] [FOR <bFor> ]
|
||||
* [SAMPLE] [NOCONSOLE]
|
||||
* $ARGUMENTS$
|
||||
* <cNombreEtiqueta> Nombre del archivo de etiquetas
|
||||
*
|
||||
* <cArchivo> Nombre de un archivo alterno
|
||||
*
|
||||
* <cAlcance> Expresi¢n de una condici¢n de ambito ¢ alcance
|
||||
*
|
||||
* <bWhile> Expresi¢n l¢gica de una Condici¢n WHILE
|
||||
*
|
||||
* <bFor> Expresi¢n l¢gica de una Condici¢n FOR
|
||||
* $DESCRIPTION$
|
||||
* Este comando permite imprimir etiquetas basadas en el formato
|
||||
* establecido en el archivo LBL, a un archivo especificado en
|
||||
* <cNombreEtiqueta>.
|
||||
* Por defecto la salida ir a la pantalla, sin embargo esta salida
|
||||
* puede ser redirigida ¢ bien a la impresora usando la cl usula
|
||||
* TO PRINTER, ¢ bien a un archivo usando la cl usula TO FILE.
|
||||
*
|
||||
* Si la cl usula TO FILE es especificada, el nombre del archivo de
|
||||
* texto ASCII conteniendo las etiquetas generadas ser <cArchivo>.
|
||||
*
|
||||
* Si ninguna extensi¢n de archivo es especificada, la extensi¢n .txt
|
||||
* es agregada.
|
||||
*
|
||||
* <cAlcance> es la condici¢n de alcance para este comando. Alcances
|
||||
* v lidos incluyen:
|
||||
* NEXT <expN> (n£mero de registros a ser visualizados donde <expN>
|
||||
* es el n£mero de registros)
|
||||
* RECORD <expN> (un registro espec¡fico a ser impreso)
|
||||
* REST (todos los registros comenzando desde la posici¢n del registro
|
||||
* actual.
|
||||
* ALL (todos los registros)
|
||||
* Por defecto es ALL (todo).
|
||||
*
|
||||
* Ambas expresiones l¢gicas pueden trabajar en conjunci¢n con la otra
|
||||
* Donde <bFor> es la expresi¢n l¢gica para la condici¢n FOR (para los
|
||||
* registros a ser visualizados dentro de un rango dado).
|
||||
* <bWhile> es la expresi¢n l¢gica para la condici¢n WHILE (para los
|
||||
* registros a ser visualizados hasta que se deje de cumplir la
|
||||
* condici¢n.
|
||||
*
|
||||
* Si la cl usula SAMPLE es especificada, etiquetas de prueba ser n
|
||||
* generadas.
|
||||
*
|
||||
* Si la cl usula NOCONSOLE es especificada, la salida a la consola ser
|
||||
* desactivada mientras este comando este siendo ejecutado.
|
||||
*
|
||||
* Este comando sigue el criterio de ambito establecido en el comando
|
||||
* SET PATH TO. El camino puede ser especifficado junto con la letra
|
||||
* del disco en <cNombreEtiqueta>.
|
||||
* $EXAMPLES$
|
||||
* FUNCTION MAIN()
|
||||
* USE Test New
|
||||
* LABEL FORM EE
|
||||
* USE
|
||||
* RETURN NIL
|
||||
*
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Este comando es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* REPORT FORM
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,211 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2001 Gonzalo A. Diethelm <Gonzalo.Diethelm@jda.cl>
|
||||
* Documentaci¢n en Ingl‚s
|
||||
*
|
||||
* Copyright 2001 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Traducci¢n al Espa¤ol
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
INTRODUCCION AL SEGUIMIENTO DE LA EJECUCION (rastrear)
|
||||
======================================================
|
||||
|
||||
Este archivo explica como habilitar el seguimiento en Harbour.
|
||||
|
||||
|
||||
SEGUIMIENTO
|
||||
===========
|
||||
|
||||
Harbour implementa el seguimiento al agregar llamadas a la siguiente
|
||||
macro en c¢digo C:
|
||||
|
||||
HB_TRACE(level, ("parametros estilo printf", arg1, arg2));
|
||||
|
||||
El nivel epecificado por la llamada a HB_TRACE afecta a Harbour en
|
||||
dos formas: tiempo de compilaci¢n y tiempo de ejecuci¢n.
|
||||
|
||||
|
||||
TIEMPO DE COMPILACION
|
||||
=====================
|
||||
|
||||
En tiempo de compilaci¢n, la macro chequea cuando la constante del
|
||||
preprocesador HB_TR_LEVEL es establecida a alguno de los siguientes
|
||||
valores:
|
||||
|
||||
#define HB_TR_ALWAYS 0
|
||||
#define HB_TR_FATAL 1
|
||||
#define HB_TR_ERROR 2
|
||||
#define HB_TR_WARNING 3
|
||||
#define HB_TR_INFO 4
|
||||
#define HB_TR_DEBUG 5
|
||||
|
||||
Si no es establecida a alguna de estas, la macro es seteada al valor
|
||||
HB_TR_DEFAULT, la cual est actualmente establecida (en hbtrace.h) a
|
||||
HB_TR_WARNING.
|
||||
|
||||
Cuando el usuario expl¡citamente establece HB_TR_LEVEL ¢ este es
|
||||
establecido por el compilador, sus efectos son como sigue: cualquier
|
||||
llamada en el c¢digo con un nivel mayor que HB_TR_LEVEL son borradas
|
||||
del c¢digo; estas llamadas simplemente desaparecen, y no hay efecto en
|
||||
la perfomance del c¢digo despu‚s de eso.
|
||||
|
||||
|
||||
TIEMPO DE EJECUCIÓN
|
||||
===================
|
||||
|
||||
En tiempo de ejecuci¢n, el usuario puede establecer la variable de
|
||||
entorno HB_TR_LEVEL a una de:
|
||||
|
||||
HB_TR_ALWAYS
|
||||
HB_TR_FATAL
|
||||
HB_TR_ERROR
|
||||
HB_TR_WARNING
|
||||
HB_TR_INFO
|
||||
HB_TR_DEBUG
|
||||
|
||||
con el siguiente efecto: cualquiera de las llamadas a HB_TRACE que
|
||||
fueron dejadas por el compilador y que tenga un nivel inferior ¢ igual
|
||||
a HB_TR_LEVEL imprimir sus argumentos a la salida stderr (pantalla).
|
||||
|
||||
|
||||
EJEMPLOS
|
||||
========
|
||||
|
||||
HB_TR_LEVEL HB_TR_LEVEL Descripci¢n
|
||||
compilaci¢n ejecuci¢n
|
||||
----------------------------------------------------------------------
|
||||
HB_TR_INFO HB_TR_ERROR Todas las llamadas con niveles HB_DEBUG
|
||||
son eliminadas del c¢digo, as¡ ellas no
|
||||
tienen efecto en la perfomance; solamente
|
||||
llamadas con niveles de HB_TR_ERROR,
|
||||
HB_TR_FATAL y HB_TR_ALWAYS son impresas.
|
||||
|
||||
HB_TR_WARNING HB_TR_INFO Todas las llamadaa con niveles HB_INFO y
|
||||
HB_DEBUG son eliminadas del c¢digo, as¡
|
||||
ellas no tienen efecto en la perfomance;
|
||||
solamente llamadas con niveles de
|
||||
HB_TR_ERROR, HB_TR_FATAL y HB_TR_ALWAYS
|
||||
son impresas. Note como estableciendo
|
||||
HB_TR_INFO en tiempo de ejecuci¢n no
|
||||
tiene ning£n efecto, porque el c¢digo fu‚
|
||||
compilado con un menor nivel de rastreo.
|
||||
|
||||
Por ejemplo, Yo compilo Harbour en WinNT con gcc (MINGW32), as¡
|
||||
usualmente establezco la variable de entorno HB_USER_CFLAGS a algo as¡:
|
||||
|
||||
export HB_USER_CFLAGS="-DHARBOUR_USE_WIN_GTAPI -DHB_TR_LEVEL=HB_TR_INFO"
|
||||
|
||||
y me aseguro que tengo todo el seguimiento para los niveles INFO,
|
||||
WARNING, ERROR, FATAL y ALWAYS. Si obtengo demasiada informaci¢n,
|
||||
en tiempo de ejecuci¢n, yo puedo cambiar la variable de entorno a:
|
||||
|
||||
export HB_TR_LEVEL=HB_TR_WARNING
|
||||
|
||||
y mantener alejado todo el seguimiento del nivel INFO. En este caso
|
||||
todas las llamadas a la funci¢n de seguimiento para el nivel INFO
|
||||
ser n hechas de todas formas, as¡ que habr un p‚rdida de perfomance.
|
||||
|
||||
|
||||
USO
|
||||
===
|
||||
|
||||
Cuando Harbour es compilado / ejecutado con alg£n nivel de seguimiento
|
||||
y, entonces usado para compilar una aplicaci¢n regular de Harbour, la
|
||||
aplicaci¢n producir MONTONES de informaci¢n a la salida stderr.
|
||||
Si Ud. est usando un sensible shell de comando (como ser bash) Ud.
|
||||
puede redirigir la salida stderr a un archivo como en:
|
||||
|
||||
mi_aplic >rastro.txt
|
||||
|
||||
|
||||
REDIRECCION
|
||||
===========
|
||||
|
||||
La salida generada mientras se efect£a el seguimiento, va a stderr por
|
||||
defecto. Ud. puede controlar esto en tiempo de ejecuci¢n al establecer
|
||||
la variable de entorno HB_TR_OUTPUT al nombre del archivo donde Ud.
|
||||
podr¡a querer que la salida de seguimiento sea dirigida. Si hay alg£n
|
||||
problema abriendo el archivo para escritura, la salida se revierte a
|
||||
stderr.
|
||||
|
||||
|
||||
RASTREANDO EL PREPROCESADOR Y EL COMPILADOR
|
||||
===========================================
|
||||
|
||||
Usualmente, Ud, no desear habilitar el seguimiento en el preprocesador
|
||||
y en el compilador; de otra menera Ud. ver la salida de seguimiento
|
||||
mientras compila a Harbour mismo. Si Ud. REALMENTE quiere habilitar el
|
||||
seguimiento en el pre-procesador y/o el compilador, Ud. debe definir
|
||||
en adici¢n a como se describe arriba, la siguiente variable, y entonces
|
||||
recompilar el preprocesador / compilador:
|
||||
|
||||
HB_TRACE_UTILS
|
||||
|
||||
El valor no tiene ninguna importancia.
|
||||
|
||||
|
||||
SEGUIMIENTO Y EJECUCION
|
||||
=======================
|
||||
|
||||
Es tambi‚n posible habilitar y deshabilitar el seguimiento en tiempo
|
||||
de ejecuci¢n y averiguar y establecer el nivel de seguimiento. Desde
|
||||
c¢digo C:
|
||||
|
||||
* Para averiguar el estado actual de seguimiento, y opcionalmente
|
||||
cambiar el estado actual a un valor dado (el cual deber¡a estar
|
||||
en el rango [0,1], de otra manera, el estado actual permanece sin
|
||||
cambios):
|
||||
|
||||
hb_tracestate( estado );
|
||||
|
||||
Por lo tanto, para s¢lo averiguar el estado actual, Ud. puede llamar
|
||||
en forma segura:
|
||||
|
||||
estado_actual = hb_tracestate(-1);
|
||||
|
||||
|
||||
Para desactivar completamente el seguimiento:
|
||||
|
||||
hb_tracestate(0);
|
||||
|
||||
|
||||
Para activar el seguimiento:
|
||||
|
||||
hb_tracestate(1);
|
||||
|
||||
|
||||
* Para averiguar el nivel actual de seguimiento, y opcionalemente
|
||||
cambiar el nivel actual a un valor dado (cual deber¡a estar en el
|
||||
rango [0,5], de otra manera, el estado actual permanece sin cambios):
|
||||
|
||||
hb_tracelevel( nivel );
|
||||
|
||||
|
||||
Por lo tanto, para s¢lo averiguar el nivel actual, Ud. puede llamar
|
||||
en forma segura:
|
||||
|
||||
nivel_actual = hb_tracelevel(-1);
|
||||
|
||||
|
||||
|
||||
|
||||
Hay funciones para ser llamadas desde c¢digo Clipper:
|
||||
(en realidad desde Harbour)
|
||||
|
||||
current_state := HB_TRACESTATE( [new_state] )
|
||||
current_level := HB_TRACELEVEL( [new_level] )
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,126 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2002 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de:
|
||||
* REPORT FORM
|
||||
*
|
||||
* Copyright 1999 Luiz Rafael Culik <culik@sl.conex.net>
|
||||
* Documentacion
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* REPORT FORM
|
||||
* $CATEGORY$
|
||||
* Comando
|
||||
* $ONELINER$
|
||||
* Visualiza un reporte
|
||||
* $SYNTAX$
|
||||
* REPORT FORM <cNombreReporte> [TO PRINTER] [TO FILE <cArchivo>]
|
||||
* [<cAlcance>] [WHILE <bWhile> ] [FOR <bFor> ]
|
||||
* [PLAIN |HEADING <cEncabezado>] [NOEJECT] [SUMMARY]
|
||||
* [NOCONSOLE]
|
||||
* $ARGUMENTS$
|
||||
* <cNombreReporte> Nombre del archivo de reporte
|
||||
*
|
||||
* <cArchivo> Nombre de un archivo alterno
|
||||
*
|
||||
* <cAlcance> Ambito ¢ alcance
|
||||
*
|
||||
* <bWhile> Expresi¢n l¢gica de una Condici¢n WHILE
|
||||
*
|
||||
* <bFor> Expresi¢n l¢gica de una Condici¢n FOR
|
||||
*
|
||||
* <cEncabezado> Encabezado del Reporte
|
||||
* $RETURNS$
|
||||
* NIL
|
||||
* $DESCRIPTION$
|
||||
* Este comando imprime un informe ¢ reporte llamado <cNombreReporte>,
|
||||
* el cual es un archivo estandar FRM. La extensi¢n del archivo no es
|
||||
* necesaria porque la extensi¢n .frm es asumida por defecto.
|
||||
* Los comandos SET PATH TO y SET DEFAULT TO afectan la b£squeda del
|
||||
* archivo <cNombreReporte>; a menos que la unidad de disco y el path
|
||||
* sean especificados en <cNombreReporte>, REPORT buscar dentro del
|
||||
* path especificado en el comando SET PATH y si no puede encontrar
|
||||
* el modelo de reporte en el directorio actual.
|
||||
*
|
||||
* La salida del reporte ser desplazada basada en el valor de
|
||||
* SET MARGIN TO.
|
||||
*
|
||||
* Por defecto la salida ir a la pantalla, sin embargo esta salida
|
||||
* puede ser redirigida ¢ bien a la impresora usando la cl usula
|
||||
* TO PRINTER, ¢ bien a un archivo usando la cl usula TO FILE.
|
||||
*
|
||||
* Si la cl usula TO FILE es especificada, el nombre de un archivo
|
||||
* alterno es especificado en <cArchivo>.
|
||||
* Si ninguna extensi¢n de archivo es especificada, la extensi¢n .txt
|
||||
* es agregada.
|
||||
*
|
||||
* <cAlcance> es la condici¢n de alcance para este comando. Alcances
|
||||
* v lidos incluyen:
|
||||
* NEXT <expN> (n£mero de registros a ser visualizados donde <expN>
|
||||
* es el n£mero de registros)
|
||||
* RECORD <expN> (un registro espec¡fico a ser impreso)
|
||||
* REST (todos los registros comenzando desde la posici¢n del registro
|
||||
* actual.
|
||||
* ALL (todos los registros)
|
||||
* Por defecto es ALL (todo).
|
||||
*
|
||||
* Ambas expresiones l¢gicas pueden trabajar en conjunci¢n con la otra
|
||||
* Donde <bFor> es la expresi¢n l¢gica para la condici¢n FOR (para
|
||||
* registros a ser visualizados dentro de un rango dado).
|
||||
* <bWhile> es la expresi¢n l¢gica para la condici¢n WHILE (para los
|
||||
* registros a ser visualizados hasta que se deje de cumplir la
|
||||
* condici¢n.
|
||||
*
|
||||
* Si la cl usula PLAIN es especificada, la fecha y los n£meros de
|
||||
* pagina son suprimidos. En adicion no hay salto autom tico de p gina
|
||||
* y el t¡tulo del reporte y los encabezados de columna aparecen una
|
||||
* sola vez al principio del reporte.
|
||||
*
|
||||
* Si la cl usula HEADING es usada, <cEncabezado> es visualizado en el
|
||||
* t¡tulo de cada p gina del reporte. El valor de <cEncabezado> es
|
||||
* evaluado solamente una vez antes de la ejecuci¢n del reporte; variar
|
||||
* los valores de <cEncabezado> no est permitido. La cl usula PLAIN
|
||||
* tiene precedencia sobre la cl usula HEADING si ambas son incluidas.
|
||||
*
|
||||
* Si la cl usula NOEJECT es usada, la eyecci¢n de la p gina inicial
|
||||
* en el reporte no ser realizado cuando la cl usula TO PRINTER sea
|
||||
* especificada.
|
||||
* De otro modo esta cl usula no tendr efecto.
|
||||
*
|
||||
* Si la cl usula SUMMARY es especificada, el reporte contendr
|
||||
* solamente grupos, subgrupos e informaci¢n de totales. La informaci¢n
|
||||
* detallada del elemento t¡tulo ser ignorada.
|
||||
*
|
||||
* Si la cl usula NOCONSOLE es especificada, la salida a la consola ser
|
||||
* desactivada mientras este comando este siendo ejecutado.
|
||||
* $EXAMPLES$
|
||||
* FUNCTION() MAIN
|
||||
* USE Test New
|
||||
* Report FORM EE
|
||||
* USE
|
||||
* RETURN NIL
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Este comando es totalmente compatible con CA-Cl*pper.
|
||||
* $PLATFORMS$
|
||||
* Todas
|
||||
* $FILES$
|
||||
* La librera es rtl
|
||||
* $SEEALSO$
|
||||
* LABEL FORM
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,920 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2003 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Documentaci¢n en Espa¤ol de:
|
||||
* __MVPUBLIC(), __MVPRIVATE(), __MVXRELEASE(),
|
||||
* __MVRELEASE(), __MVSCOPE(), __MVCLEAR(),
|
||||
* __MVDBGINFO(), __MVEXIST(), __MVGET(), __MVPUT(), MEMVARBLOCK(),
|
||||
* FIELDBLOCK(), FIELDWBLOCK(), TYPE(), VALTYPE(), HB_ISBYREF()
|
||||
*
|
||||
* Copyright 1999 Ryszard Glab <rglab@imid.med.pl>
|
||||
* Documentaci¢n en Ingl‚s de:
|
||||
* __MVPUBLIC(), __MVPRIVATE(), __MVXRELEASE(),
|
||||
* __MVRELEASE(), __MVSCOPE(), __MVCLEAR(),
|
||||
* __MVDBGINFO(), __MVGET(), __MVPUT(), MEMVARBLOCK(),
|
||||
* TYPE()
|
||||
*
|
||||
* Copyright 1999 Chen Kedem <niki@actcom.co.il>
|
||||
* Documentaci¢n en Ingl‚s de: FIELDBLOCK(), FIELDWBLOCK()
|
||||
*
|
||||
* Copyright 2001 Chen Kedem <niki@actcom.co.il>
|
||||
* Documentaci¢n en Ingl‚s de: __MVEXIST()
|
||||
*
|
||||
* Copyright 2002 Walter Negro <anegro@overnet.com.ar>
|
||||
* Documentaci¢n en Ingl‚s de: HB_ISBYREF()
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __MVPUBLIC()
|
||||
* $CATEGORY$
|
||||
* Variable Management
|
||||
* $ONELINER$
|
||||
* Esta funci¢n crea una variable PUBLIC
|
||||
* $SYNTAX$
|
||||
* __MVPUBLIC( <xNombrevariable> )
|
||||
* $ARGUMENTS$
|
||||
* <xNombrevariable> Es ¢ bien una cadena que contiene el nombre de la
|
||||
* variable ¢ un array unidimensional de cadenas con
|
||||
* nombres de variables.
|
||||
* Los esqueletos ¢ comodines no estan permitidos.
|
||||
* $RETURNS$
|
||||
* Nada
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n puede ser llamada por el compilador Harbour ¢ bien por
|
||||
* el usuario.
|
||||
* El compilador siempre pasa un item de tipo IT_SYMBOL que almacena el
|
||||
* nombre de la variable.
|
||||
* Si una variable con el mismo nombre ya existe, entonces la nueva
|
||||
* variable no es creada, el valor previo permanece sin cambios.
|
||||
* Si esta es la primera variable con ese nombre, entonces la variable
|
||||
* es inicializada con el valor .T.
|
||||
* $EXAMPLES$
|
||||
* Ninguno disponible
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es una extensi¢n de Harbour.
|
||||
* $FILES$
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* __MVPRIVATE(),__MVXRELEASE()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __MVPRIVATE()
|
||||
* $CATEGORY$
|
||||
* Variable Management
|
||||
* $ONELINER$
|
||||
* Esta funci¢n crea una variable PRIVATE
|
||||
* $SYNTAX$
|
||||
* __MVPRIVATE( <xNombrevariable> )
|
||||
* $ARGUMENTS$
|
||||
* <xNombrevariable> Es ¢ bien una cadena que contiene el nombre de la
|
||||
* variable ¢ un array unidimensional de cadenas con
|
||||
* nombres de variables.
|
||||
* Los esqueletos ¢ comodines no estan permitidos.
|
||||
* $RETURNS$
|
||||
* Nada
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n puede ser llamada por el compilador Harbour ¢ bien por
|
||||
* el usuario.
|
||||
* El compilador siempre pasa un item de tipo IT_SYMBOL que almacena el
|
||||
* nombre de la variable.
|
||||
* Si una variable con el mismo nombre ya existe, entonces el valor de
|
||||
* la vieja variable es ocultado hasta que la nueva variable sea
|
||||
* liberada.
|
||||
* La nueva variable es siempre inicializada con el valor NIL.
|
||||
* $EXAMPLES$
|
||||
* Ninguno disponible
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es una extensi¢n de Harbour.
|
||||
* $FILES$
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* __MVPUBLIC(),__MVRELEASE(),__MVXRELEASE()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __MVXRELEASE()
|
||||
* $CATEGORY$
|
||||
* Variable Management
|
||||
* $ONELINER$
|
||||
* Libera un valor almacenado en una variable PRIVATE or PUBLIC
|
||||
* $SYNTAX$
|
||||
* __MVXRELEASE( <xNombrevariable> )
|
||||
* $ARGUMENTS$
|
||||
* <xNombrevariable> Es ¢ bien una cadena que contiene el nombre de la
|
||||
* variable ¢ un array unidimensional de cadenas con
|
||||
* nombres de variables.
|
||||
* Los esqueletos ¢ comodines no estan permitidos.
|
||||
* $RETURNS$
|
||||
* Nada
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n libera valores almacenados en variable de memoria. Esta
|
||||
* NO DEBE ser llamada directamente, sino que debe ser puesta dentro
|
||||
* del comando RELEASE.
|
||||
* Si la variable liberada es una variable PRIVATE entonces la variable
|
||||
* previamente ocultada con el mismo nombre se vuelve visible despu‚s
|
||||
* de salir del procedimiento donde la variable liberada fu‚ creada.
|
||||
* Si Ud. accede la variable liberada en el mismo procedimiento/funci¢n
|
||||
* donde esta fu‚ creada el valor NIL es devuelto. Ud. puede sin embargo
|
||||
* asignar un nuevo valor a la variable liberada sin ning£n efecto
|
||||
* colateral.
|
||||
*
|
||||
* Esto libera la variable, a£n si esta variable fue creada en un
|
||||
* procedimiento diferente.
|
||||
* $EXAMPLES$
|
||||
*
|
||||
* PROCEDURE MAIN()
|
||||
* PRIVATE mPrivate
|
||||
* mPrivate :="PRIVATE from MAIN()"
|
||||
* ? mPrivate //PRIVATE from MAIN()
|
||||
* Test()
|
||||
* ? mPrivate //PRIVATE from MAIN()
|
||||
* RETURN
|
||||
*
|
||||
*
|
||||
* PROCEDURE Test()
|
||||
* PRIVATE mPrivate
|
||||
* mPrivate :="PRIVATE from Test()"
|
||||
* ? mPrivate //PRIVATE from TEST()
|
||||
* RELEASE mPrivate
|
||||
* ? mPrivate //NIL
|
||||
* mPrivate :="Again in Test()"
|
||||
* RETURN
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es una extensi¢n de Harbour.
|
||||
* $FILES$
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* __MVPRIVATE(),__MVPUBLIC()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __MVRELEASE()
|
||||
* $CATEGORY$
|
||||
* Variable Management
|
||||
* $ONELINER$
|
||||
* Esta funci¢n libera variables PRIVATE
|
||||
* $SYNTAX$
|
||||
* __MVRELEASE( <cMascara>, <lIncludeExclude_flag> )
|
||||
* $ARGUMENTS$
|
||||
* <cMascara> Cadena que contiene la m scara comod¡n para los nombres
|
||||
* de variables que ser n liberadas. Los comodines
|
||||
* soportados son: '*' y '?'
|
||||
*
|
||||
* <lIncludeExclude_flag> Valor l¢gico que esecifica si las variables
|
||||
* que coinciden con la m scara debieran ser borradas (.T.)
|
||||
* ¢ excluidas del borrado si es .F.
|
||||
* $RETURNS$
|
||||
* Nada
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n libera valores almacenados en variable de memoria. Esta
|
||||
* NO DEBE ser llamada directamente, sino que debe ser puesta dentro
|
||||
* del comando RELEASE ALL.
|
||||
* Si la variable liberada es una variable PRIVATE entonces la variable
|
||||
* previamente ocultada con el mismo nombre se vuelve visible despu‚s
|
||||
* de salir del procedimiento donde la variable liberada fu‚ creada.
|
||||
* Si Ud. accede la variable liberada en el mismo procedimiento/funci¢n
|
||||
* donde esta fu‚ creada el valor NIL es devuelto. Ud. puede sin embargo
|
||||
* asignar un nuevo valor a la variable liberada sin ning£n efecto
|
||||
* colateral.
|
||||
* Variables PUBLIC no son cambiadas por esta funci¢n.
|
||||
* $EXAMPLES$
|
||||
* Ninguno
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es una extensi¢n de Harbour.
|
||||
* $FILES$
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* __MVPRIVATE()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __MVSCOPE()
|
||||
* $CATEGORY$
|
||||
* Variable Management
|
||||
* $ONELINER$
|
||||
* Si la variable existe, entonces retorna su alcance
|
||||
* $SYNTAX$
|
||||
* __MVSCOPE( <cNombreVar> )
|
||||
* $ARGUMENTS$
|
||||
* <cNombreVar> Una cadena con el nombre de una variable a chequear
|
||||
* $RETURNS$
|
||||
* Los valores simb¢licos son definidos en ../include/hbmemvar.ch
|
||||
*
|
||||
* <table>
|
||||
* Macro Significado
|
||||
*
|
||||
* HB_MV_NOT_FOUND La variable no est declarada (no fu‚ encontrada
|
||||
* en la tabla de s¡mbolos)
|
||||
* HB_MV_UNKNOWN Si la variable No existe (pero fu‚ encontrada
|
||||
* en la tabla de s¡mbolos)
|
||||
* HB_MV_ERROR Si la informaci¢n No puede ser obtenida (error
|
||||
* de memoria ¢ error de argumento).
|
||||
* HB_MV_PUBLIC para variables p£blicas
|
||||
* HB_MV_PRIVATE_GLOBAL para variables private declaradas fuera del
|
||||
* actual FUNCTION/PROCEDURE
|
||||
* HB_MV_PRIVATE_LOCAL para variables private declaradas dentro del
|
||||
* actual FUNCTION/PROCEDURE
|
||||
* </table>
|
||||
* </fixed>
|
||||
* $EXAMPLES$
|
||||
*
|
||||
* PROCEDURE MAIN()
|
||||
* PUBLIC mPublic
|
||||
* PRIVATE mPrivateGlobal
|
||||
*
|
||||
* CallProc()
|
||||
* ? __mvScope( "mPrivateLocal" ) // HB_MV_UNKNOWN
|
||||
* RETURN
|
||||
*
|
||||
*
|
||||
* PROCEDURE CallProc()
|
||||
* PRIVATE mPrivateLocal
|
||||
*
|
||||
* ? __mvScope( "mPublic" ) // HB_MV_PUBLIC
|
||||
* ? __mvScope( "mPrivateGlobal" ) // HB_MV_PRIVATE_GLOBAL
|
||||
* ? __mvScope( "mPrivateLocal" ) // HB_MV_PRIVATE_LOCAL
|
||||
* ? __mvScope( "mFindMe" ) // HB_MV_NOT_FOUND
|
||||
*
|
||||
* IF( __mvScope( "mPublic" ) > HB_MV_ERROR )
|
||||
* ? "la Variable existe"
|
||||
* ELSE
|
||||
* ? "la Variable no fu‚ creada a£n"
|
||||
* ENDIF
|
||||
*
|
||||
* RETURN
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es una extensi¢n de Harbour.
|
||||
* $FILES$
|
||||
* El archivo de cabecera es ../include/hbmemvar.ch
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* __MVPRIVATE(),__MVPUBLIC()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __MVCLEAR()
|
||||
* $CATEGORY$
|
||||
* Variable Management
|
||||
* $ONELINER$
|
||||
* Borra todas las variables PRIVATE y PUBLIC
|
||||
* $SYNTAX$
|
||||
* __MVCLEAR()
|
||||
* $ARGUMENTS$
|
||||
* Ninguno
|
||||
* $RETURNS$
|
||||
* Nada
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n borra todas las variables PRIVATE y PUBLIC.
|
||||
* Esta es usada para implementar la sentencia CLEAR MEMORY.
|
||||
* La memoria ocupada por todas las variables es liberada.
|
||||
* Cualquier intento de acceder a la variable resultar en un error
|
||||
* de ejecuci¢n.
|
||||
* Ud tiene que reusar la sentencia PRIVATE ¢ PUBLIC para crear de nuevo
|
||||
* la variable que fue borrada por esta funci¢n.
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es una extensi¢n de Harbour.
|
||||
* $FILES$
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* __MVPRIVATE(),__MVPUBLIC()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __MVDBGINFO()
|
||||
* $CATEGORY$
|
||||
* Variable Management
|
||||
* $ONELINER$
|
||||
* Retorna informaci¢n sobre las variables para el debugger
|
||||
* $SYNTAX$
|
||||
* __MVDBGINFO( <nAlcance> [, <nPosicion> [, @<cNombreVar>] ] )
|
||||
* $ARGUMENTS$
|
||||
* <nAlcance> El alcance de las variables sobre las que la informaci¢n
|
||||
* es solicitada.
|
||||
* Valores Soportados (definidos en hbmemvar.ch):
|
||||
* HB_MV_PUBLIC
|
||||
* HB_MV_PRIVATE (or any other value)
|
||||
*
|
||||
* <nPosicion> La posici¢n de la variable solicitada en la lista de
|
||||
* variables con el alcance especificado. Esta deberia
|
||||
* comenzar desde la posici¢n 1
|
||||
*
|
||||
* <cNombreVar> El valor es llenado con un nombre de variable si es
|
||||
* pasada por referencia y <nPosicion> es especificada
|
||||
* $RETURNS$
|
||||
* El valor retornado depende del n£mero de par metros pasados
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n obtiene informaci¢n acerca de las variables memvar.
|
||||
* Esta devuelve ¢ bien el n£merode variables con un alcance dado
|
||||
* (Cuando el primer argumento es pasado solamente) ¢ un valor de
|
||||
* variable identificada por su posici¢n en la la lista de variables
|
||||
* (Cuando el segundo argumento es pasado).
|
||||
* Esta tambi‚n devuelve el nombre de la variable si el tercer argumento
|
||||
* opcional es pasado por referencia.
|
||||
*
|
||||
* Si la variable solicitada no existe (la posici¢n solicitada es mayor
|
||||
* que el n£mero de variables definidas), entonces el valor NIL es
|
||||
* devuelto y el nombre de la variable es puesto a "?"
|
||||
*
|
||||
* Como la tabla din mica de s¡mbolos es usada para encontrar una
|
||||
* variable PUBLIC, las variables PUBLICas son siempre ordenadas
|
||||
* alfab‚ticamente. Las variables PRIVATE son ordenadas en el orden
|
||||
* de su creaci¢n.
|
||||
*
|
||||
* Nota:
|
||||
* Debido a la naturaleza din mica de las variables memvar no hay
|
||||
* garant¡a que sucesivas llamadas para recuperar el valor de la
|
||||
* variable PUBLIC <N> retornar el valor de la misma variable.
|
||||
* $EXAMPLES$
|
||||
* #include <hbmemvar.ch>
|
||||
*
|
||||
* LOCAL nCount, i, xValue, cName
|
||||
*
|
||||
* nCount =_mvDBGINFO( HB_MV_PUBLIC )
|
||||
*
|
||||
* FOR i:=1 TO nCount
|
||||
* xValue =__mvDBGINFO( HB_MV_PUBLIC, i, @cName )
|
||||
* ? i, cName, xValue
|
||||
* NEXT
|
||||
* </fixed>
|
||||
* $TESTS$
|
||||
* #include <hbmemvar.ch>
|
||||
* PROCEDURE MAIN()
|
||||
*
|
||||
* ? 'PUBLIC=', __mvDBGINFO( HB_MV_PUBLIC )
|
||||
* ? 'PRIVATE=', __mvDBGINFO( HB_MV_PRIVATE )
|
||||
*
|
||||
* PUBLIC cPublic:='cPublic in MAIN'
|
||||
*
|
||||
* ? 'PUBLIC=', __mvDBGINFO( HB_MV_PUBLIC )
|
||||
* ? 'PRIVATE=', __mvDBGINFO( HB_MV_PRIVATE )
|
||||
*
|
||||
* PRIVATE cPrivate:='cPrivate in MAIN'
|
||||
*
|
||||
* ? 'PUBLIC=', __mvDBGINFO( HB_MV_PUBLIC )
|
||||
* ? 'PRIVATE=', __mvDBGINFO( HB_MV_PRIVATE )
|
||||
*
|
||||
* CountMemvars()
|
||||
*
|
||||
* ? 'Back in Main'
|
||||
* ? 'PUBLIC=', __mvDBGINFO( HB_MV_PUBLIC )
|
||||
* ? 'PRIVATE=', __mvDBGINFO( HB_MV_PRIVATE )
|
||||
*
|
||||
* RETURN
|
||||
*
|
||||
*
|
||||
* PROCEDURE CountMemvars()
|
||||
* LOCAL i, nCnt, xVal, cName
|
||||
* PUBLIC ccPublic:='ccPublic'
|
||||
* PRIVATE ccPrivate:='ccPrivate'
|
||||
*
|
||||
* ? 'In CountMemvars'
|
||||
* ? 'PUBLIC=', __mvDBGINFO( HB_MV_PUBLIC )
|
||||
* ? 'PRIVATE=', __mvDBGINFO( HB_MV_PRIVATE )
|
||||
*
|
||||
* PRIVATE cPublic:='cPublic'
|
||||
*
|
||||
* ? 'PUBLIC=', __mvDBGINFO( HB_MV_PUBLIC )
|
||||
* ? 'PRIVATE=', __mvDBGINFO( HB_MV_PRIVATE )
|
||||
*
|
||||
* nCnt =__mvDBGINFO( HB_MV_PRIVATE ) +1
|
||||
*
|
||||
* FOR i :=1 TO nCnt
|
||||
* xVal =__mvDBGINFO( HB_MV_PRIVATE, i, @cName )
|
||||
* ? i, '=', cName, xVal
|
||||
* NEXT
|
||||
*
|
||||
* nCnt = __mvDBGINFO( HB_MV_PUBLIC ) + 1
|
||||
*
|
||||
* FOR i :=1 TO nCnt
|
||||
* xVal = __mvDBGINFO( HB_MV_PUBLIC, i, @cName )
|
||||
* ? i, '=', cName, xVal
|
||||
* NEXT
|
||||
*
|
||||
* RETURN
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n deber¡a ser llamada solamente desde el depurador.
|
||||
* $FILES$
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* __MVSCOPE()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __MVEXIST()
|
||||
* $CATEGORY$
|
||||
* Variable Management
|
||||
* $ONELINER$
|
||||
* Determina si un nombre dado es una variable PUBLIC ¢ PRIVATE
|
||||
* $SYNTAX$
|
||||
* __MVEXIST( <cNombreVar> ) --> <lExisteVar>
|
||||
* $ARGUMENTS$
|
||||
* <cNombreVar> Cadena con el nombre de la variable a chequear
|
||||
* $RETURNS$
|
||||
* __MVEXIST() retorna TRUE (.T.) si una MEMVAR llamada <cNombreVar>
|
||||
* existe actualmente.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n determina si una variable PUBLIC ¢ PRIVATE con el
|
||||
* nombre <cNombreVar> existe ¢ no.
|
||||
* $EXAMPLES$
|
||||
* LOCAL TheLocal
|
||||
* STATIC TheStatic
|
||||
* PUBLIC ThePublic
|
||||
* PRIVATE ThePrivate
|
||||
* ? __MVEXIST( "NotExist" ) // .F.
|
||||
* ? __MVEXIST( "TheLocal" ) // .F.
|
||||
* ? __MVEXIST( "TheStatic" ) // .F.
|
||||
* ? __MVEXIST( "ThePublic" ) // .T.
|
||||
* ? __MVEXIST( "ThePrivate" ) // .T.
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es una extensi¢n de Harbour.
|
||||
* $FILES$
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* MEMVAR, PRIVATE, PUBLIC
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __MVGET()
|
||||
* $CATEGORY$
|
||||
* Variable Management
|
||||
* $ONELINER$
|
||||
* Esta funci¢n retorna el valor de una variable de memoria (MEMVAR)
|
||||
* $SYNTAX$
|
||||
* __MVGET( <cNombreVar> ) --> <xVar>
|
||||
* $ARGUMENTS$
|
||||
* <cNombreVar> Cadena con el nombre de la variable
|
||||
* $RETURNS$
|
||||
* <xVar> el valor de la variable
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n devuelve el valor de una variable de memoria PRIVATE ¢
|
||||
* PUBLIC si la variable existe, de otro modo genera un error en tiempo
|
||||
* de ejecuci¢n.
|
||||
* La variable es especificada por su nombre pasado como par metro a la
|
||||
* funci¢n.
|
||||
* $EXAMPLES$
|
||||
* FUNCTION MEMVARBLOCK( cMemvar )
|
||||
* RETURN {|x| IIF( PCOUNT()==0, __MVGET( cMemvar ),;
|
||||
* __MVPUT( cMemvar, x ) ) }
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es una extensi¢n de Harbour.
|
||||
* $FILES$
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* __MVPUT()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* __MVPUT()
|
||||
* $CATEGORY$
|
||||
* Variable Management
|
||||
* $ONELINER$
|
||||
* Esta funci¢n establece el valor de una variable de memoria
|
||||
* $SYNTAX$
|
||||
* __MVGET( <cNombreVar> [, <xValor>] ) --> <xValor>
|
||||
* $ARGUMENTS$
|
||||
* <cNombreVar> Cadena con el nombre de la variable
|
||||
*
|
||||
* <xValor> Un valor de cualquier tipo que puede ser establecido
|
||||
* Si no es especificado, entonces NIL es asumido.
|
||||
* $RETURNS$
|
||||
* <xValor> Un valor asignado a la variable dada.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n establece el valor de una variable de memoria PRIVATE ¢
|
||||
* PUBLIC si la variable existe, de otro modo genera un error en tiempo
|
||||
* de ejecuci¢n.
|
||||
* La variable es especificada por su nombre pasado como par metro a la
|
||||
* funci¢n.
|
||||
* Si un valor no es especificado, entonces NIL es asumido.
|
||||
* $EXAMPLES$
|
||||
* FUNCTION MEMVARBLOCK( cMemvar )
|
||||
* RETURN {|x| IIF( PCOUNT()==0, __MVGET( cMemvar ),;
|
||||
* __MVPUT( cMemvar, x ) ) }
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es una extensi¢n de Harbour.
|
||||
* $FILES$
|
||||
* La librer¡a asociada es vm
|
||||
* $SEEALSO$
|
||||
* __MVPUT()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* MEMVARBLOCK()
|
||||
* $CATEGORY$
|
||||
* Variable Management
|
||||
* $ONELINER$
|
||||
* Retorna un codeblock que establece/obtiene el valor de variable
|
||||
* $SYNTAX$
|
||||
* MEMVARBLOCK( <cNombreMemvar> ) --> <bBloque>
|
||||
* $ARGUMENTS$
|
||||
* <cNombreMemvar> Cadena con el nombre de la variable
|
||||
* $RETURNS$
|
||||
* <bBloque> un codeblock que establece/obtiene el valor de variable
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n devuelve un codeblock que establece/obtiene el valor de
|
||||
* una variable PRIVATE ¢ PUBLIC. Cuando este codeblock es evaluado
|
||||
* sin ning£n par metro pasado, entonces este devuelve el valor actual
|
||||
* de la variable dada.
|
||||
* Si el segundo par metro es pasado para la evaluaci¢n del codeblock
|
||||
* entonces este valor es usado para establecer el nuevo valor de la
|
||||
* variable dada, el valor pasado es tambi‚n retornado como un valor
|
||||
* la evaluaci¢n del codeblock.
|
||||
* $EXAMPLES$
|
||||
* PROCEDURE MAIN()
|
||||
* LOCAL cbSetGet
|
||||
* PUBLIC xPublic
|
||||
*
|
||||
* cbSetGet = MEMVARBLOCK( "xPublic" )
|
||||
* EVAL( cbSetGet, "nuevo valor" )
|
||||
* ? "Valor de la variable xPublic:", EVAL( cbSetGet )
|
||||
*
|
||||
* RETURN
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es compatible con CA-Cl*pper
|
||||
* $FILES$
|
||||
* La Librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* __MVGET(),__MVPUT()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* FIELDBLOCK()
|
||||
* $CATEGORY$
|
||||
* Code Block
|
||||
* $ONELINER$
|
||||
* Retorna un codeblock que establece/obtiene el valor de un campo
|
||||
* $SYNTAX$
|
||||
* FIELDBLOCK( <cFieldName> ) --> bFieldBlock
|
||||
* $ARGUMENTS$
|
||||
* <cFieldName> Es una cadena que contiene el nombre de un campo.
|
||||
* $RETURNS$
|
||||
* FIELDBLOCK() retorna un codeblock que cuando es evaluado puede
|
||||
* obtener el valor del campo ¢ asignar un nuevo valor al campo.
|
||||
* Si <cFieldName> no es especificado ¢ es de otro tipo distinto a
|
||||
* CHARACTER, FIELDBLOCK() retorna NIL.
|
||||
* $DESCRIPTION$
|
||||
* FIELDBLOCK() retorna un codeblock que establece/obtiene el valor de
|
||||
* un campo.
|
||||
* Cuando este campo es evaluado sin ning£n par metro pasado entonces
|
||||
* este devuelve el valor actual del campo dado.
|
||||
* Si el codeblock es evaluado con un par metro, entonces su valor es
|
||||
* usado para establecer un nuevo valor para el campo, este valor es
|
||||
* tambi‚n retornado por el bloque.
|
||||
* Si el bloque es evaluado y no hay ning£n campo con el nombre
|
||||
* <cFieldName> en el rea actual de trabajo el codeblock devuelve NIL.
|
||||
*
|
||||
* Note que FIELDBLOCK() trabaja en el rea actual de trabajo, si Ud.
|
||||
* necesita usar un rea de trabajo distinta a la actual, use
|
||||
* FIELDWBLOCK() en su lugar.
|
||||
* $EXAMPLES$
|
||||
* // Abre un archivo llamado Test que tiene un campo llamado "name"
|
||||
* LOCAL bField
|
||||
* bFiled := FIELDBLOCK( "name" )
|
||||
* USE Test
|
||||
*
|
||||
* ? 'Valor Original del campo "name" :', EVAL( bField )
|
||||
* EVAL( bField, "Mr X new name" )
|
||||
* ? 'Nuevo valor para el campo "name" :', EVAL( bField )
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Si el bloque es evaluado y no hay ning£n campo con el nombre
|
||||
* <cFieldName> en el rea actual de trabajo, el codeblock devuelve NIL.
|
||||
*
|
||||
* CA-Cl*pper produce un error BASE/1003 si el campo no existe.
|
||||
* $FILES$
|
||||
* La Librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* EVAL(),FIELDWBLOCK(),MEMVARBLOCK()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* FIELDWBLOCK()
|
||||
* $CATEGORY$
|
||||
* Code Block
|
||||
* $ONELINER$
|
||||
* Retorna un codeblock que setea/obtiene un campo en una rea dada
|
||||
* $SYNTAX$
|
||||
* FIELDWBLOCK( <cFieldName>, <nWorkArea> ) --> bFieldBlock
|
||||
* $ARGUMENTS$
|
||||
* <cFieldName> Es una cadena que contiene el nombre de un campo.
|
||||
*
|
||||
* <nWorkArea> N£mero de rea de trabajo en la cual <cFieldName> existe
|
||||
*
|
||||
* $RETURNS$
|
||||
* FIELDWBLOCK() retorna un codeblock que cuando es evaluado puede
|
||||
* obtener el valor del campo ¢ asignar un nuevo valor al campo en un
|
||||
* rea de trabajo dada.
|
||||
* Si <cFieldName> no es especificado ¢ es de otro tipo distinto a
|
||||
* CHARACTER, ¢ si <nWorkArea> no es especificada ¢ no es NUMERICa
|
||||
* FIELDWBLOCK() retorna NIL.
|
||||
* $DESCRIPTION$
|
||||
* FIELDWBLOCK() retorna un codeblock que establece/obtiene el valor de
|
||||
* un campo para un rea de trabajo dada.
|
||||
* Cuando este campo es evaluado sin ning£n par metro pasado entonces
|
||||
* este devuelve el valor actual del campo dado.
|
||||
* Si el codeblock es evaluado con un par metro, entonces su valor es
|
||||
* usado para establecer un nuevo valor para el campo, este valor es
|
||||
* tambi‚n retornado por el bloque.
|
||||
* Si el bloque es evaluado y no hay ning£n campo con el nombre
|
||||
* <cFieldName> en el rea de trabajo especificada, el codeblock
|
||||
* devuelve NIL.
|
||||
* $EXAMPLES$
|
||||
* LOCAL bField
|
||||
* // Este bloque trabaja sobre campo "name" que existe en el area 2
|
||||
* bFiled := FIELDBLOCK( "name", 2 )
|
||||
*
|
||||
* // Abre el archivo llamado One en el area 1,
|
||||
* // que tiene un campo llamado "name"
|
||||
* SELECT 1
|
||||
* USE One
|
||||
*
|
||||
* // Abre el archivo llamado Two en el area 2,
|
||||
* // que tambien tiene un campo llamado "name"
|
||||
* SELECT 2
|
||||
* USE Two
|
||||
* SELECT 1
|
||||
* ? "Nombres Originales: ", One->name, Two->name
|
||||
* ? "Nombre para el archivo dos:", EVAL( bField )
|
||||
* EVAL( bField, "Two tiene un nuevo nombre" )
|
||||
* ? "y ahora: ", One->name, Two->name
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* Si el bloque es evaluado y no hay ning£n campo con el nombre
|
||||
* <cFieldName> en el rea de trabajo dada, el codeblock devuelve NIL.
|
||||
*
|
||||
* CA-Cl*pper produce un error BASE/1003 si el campo no existe.
|
||||
* $FILES$
|
||||
* La Librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* EVAL(),FIELDBLOCK(),MEMVARBLOCK()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* TYPE()
|
||||
* $CATEGORY$
|
||||
* Miscelanea
|
||||
* $ONELINER$
|
||||
* Obtiene el tipo de una expresi¢n
|
||||
* $SYNTAX$
|
||||
* TYPE( <cExp> ) --> <cRetType>
|
||||
* $ARGUMENTS$
|
||||
* <cExp> debe ser una expresi¢n de caracteres
|
||||
* $RETURNS$
|
||||
* Una cadena <cRetType> indicando el tipo de la expresi¢n pasada.
|
||||
*
|
||||
* <table>
|
||||
* cRetType Significado
|
||||
*
|
||||
* "A" Array
|
||||
* "B" Block
|
||||
* "C" Cadena de Caracteres
|
||||
* "D" Fecha (Date)
|
||||
* "L" L¢gico
|
||||
* "M" Memo
|
||||
* "N" Numerico
|
||||
* "O" Objeto
|
||||
* "U" Variable NIL, local, static, ¢ no enlazada en la funci¢n
|
||||
* "UE" Error sintaxis en expression ¢ argumentos invalidos
|
||||
* "UI" Funcion con nombre no-reservado fue solicitada
|
||||
* </table>
|
||||
*
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n devuelve una cadena que representa el tipo de datos del
|
||||
* argumento. Esta puede ser cualquier expresi¢n v lida de Harbour.
|
||||
*
|
||||
* Si hay un <b>error de sintaxis</b> en la expresi¢n pasada entonces
|
||||
* "UE" es devuelto.
|
||||
*
|
||||
* Si hay una llamada a alguna funci¢n de Harbour no-reservada entonces
|
||||
* "UI" es devuelto (en otras palabras, no hay llamada a la funci¢n UDF
|
||||
* durante la determinaci¢n de tipo - este es un comportamiento
|
||||
* compatible con Clipper). Adicionalmente si la funci¢n de usuario
|
||||
* solicitada no es enlazada dentro del ejecutable final, entonces "U"
|
||||
* es devuelto.
|
||||
*
|
||||
* El tipo de dato de esta expresi¢n es chequeado al invocar al
|
||||
* compilador de macros y por la evaluaci¢n del c¢digo generado (si es
|
||||
* que no hay errores de sintaxis).
|
||||
* Esto causa que TYPE() no pueda determinar un tipo de variable LOCAL
|
||||
* ¢ STATIC, solamente s¡mbolos visibles en tiempo de ejecuci¢n pueden
|
||||
* ser chequeados.
|
||||
*
|
||||
* N¢tese la sutil diferencia entre las funciones TYPE y VALTYPE.
|
||||
* La funci¢n VALTYPE() no llama al compilador de macros, esta
|
||||
* simplemente chequea el tipo del argumento pasado, que puede ser de
|
||||
* cualquier tipo.
|
||||
* La funci¢n TYPE() requiere un argumento de cadena de caracteres con
|
||||
* una expresi¢n v lida de Harbour. El tipo de dato de esta expresi¢n
|
||||
* es retornado.
|
||||
* $EXAMPLES$
|
||||
* ? TYPE( "{ 1, 2 }" ) // prints "A"
|
||||
* ? TYPE( "IIF(.T., SUBSTR('TYPE',2,1), .F.)" ) // prints "C"
|
||||
* ? TYPE( "AT( 'OK', MyUDF())>0" ) // prints "UI"
|
||||
* ? TYPE( "{ 1, 2 }[ 5 ]" ) // prints "UE"
|
||||
*
|
||||
* //--------------------------------------------------------
|
||||
*
|
||||
* LOCAL c
|
||||
* PRIVATE a:="A", b:="B"
|
||||
* ? TYPE( "a + b + c" ) //prints: "U" (variable 'C' es local)
|
||||
*
|
||||
* //--------------------------------------------------------
|
||||
*
|
||||
* LOCAL cFilter := SPACE( 60 )
|
||||
* ACCEPT "Ingrese la expresi¢n de filtro:" TO cFilter
|
||||
*
|
||||
* IF( TYPE( cFilter ) $ "CDLMN" ) )
|
||||
* // Esta es una expresi¢n v lida
|
||||
* SET FILTER TO &cFilter
|
||||
* ENDIF
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
*
|
||||
* - Incompatibilidad con Clipper:
|
||||
* En el c¢digo siguiente:
|
||||
*
|
||||
* PRIVATE lCond := 0
|
||||
* ? TYPE( "IIF( lCond, 'true', MyUDF() )" )
|
||||
*
|
||||
* Clipper imprimir "UE" - en Harbour la salida ser "UI"
|
||||
*
|
||||
* - Si "UI" es retornada entonces la sintaxis de la expresi¢n es
|
||||
* correcta. Sin embargo argumentos inv lidos pueden ser pasados
|
||||
* a una function/procedure que cause errores de ejecuci¢n durante
|
||||
* la evaluaci¢n de la expresi¢n.
|
||||
* $FILES$
|
||||
* La Librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* VALTYPE()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* VALTYPE()
|
||||
* $CATEGORY$
|
||||
* Miscelanea
|
||||
* $ONELINER$
|
||||
* Obtiene el tipo de dato de una expresi¢n
|
||||
* $SYNTAX$
|
||||
* VALTYPE( <xExp> ) --> <cReturnType>
|
||||
* $ARGUMENTS$
|
||||
* <xExp> es cualquier expresi¢n v lida
|
||||
* $RETURNS$
|
||||
* <cReturnType> una caracter indicando el tipo de la expresi¢n pasada
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n devuelve un s¢lo car cter el cual representa el tipo de
|
||||
* dato del argumento recibido.
|
||||
* $EXAMPLES$
|
||||
* Ver Test
|
||||
* </fixed>
|
||||
* $TESTS$
|
||||
* FUNCTION Test()
|
||||
* ? ValType( Array( 1 ) ) --> "A"
|
||||
* ? ValType( {|| 1 + 1 } ) --> "B"
|
||||
* ? ValType( "HARBOUR" ) --> "C"
|
||||
* ? ValType( Date() ) --> "D"
|
||||
* ? ValType( .T. ) --> "L"
|
||||
* ? ValType( 1 ) --> "N"
|
||||
* ? ValType( TBrowse() ) --> "O"
|
||||
* ? ValType( NIL ) --> "U"
|
||||
* RETURN NIL
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* VALTYPE() es totalmente compatible con CA-Cl*pper.
|
||||
* $FILES$
|
||||
* La Librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* TYPE()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* HB_ISBYREF()
|
||||
* $CATEGORY$
|
||||
* Miscelanea
|
||||
* $ONELINER$
|
||||
* Informa si la variable es pasada por referencia.
|
||||
* $SYNTAX$
|
||||
* HB_ISBYREF( @<Var> ) --> <lVarIsByRef>
|
||||
* $ARGUMENTS$
|
||||
* @<Var> es la variable a testear pasada por referencia.
|
||||
* $RETURNS$
|
||||
* Un valor l¢gico <lVarIsByRef> indicando si la variable es pasada por
|
||||
* referencia a la funci¢n ¢ procedimiento actual.
|
||||
* $DESCRIPTION$
|
||||
* Esta funci¢n devuelve un valor l¢gico indicando si la variable es
|
||||
* pasada por referencia a la funci¢n ¢ procedimiento actual.
|
||||
*
|
||||
* ATENCION:
|
||||
* La variable a testear debe ser pasada por referencia. Si no lo es
|
||||
* la funci¢n retorna NIL.
|
||||
* Esta funci¢n esta basada en la forma que Harbour maneja las variables
|
||||
* por referencia. Cuando una variable es pasada de este modo, la
|
||||
* funci¢n ¢ procedimiento que la recibe, recibe un puntero a la
|
||||
* variable previa, sea esta la variable contenedora de los datos, ¢ un
|
||||
* puntero a otra variable. La funci¢n observa si la variable pasada
|
||||
* apunta a una variable com£n ¢ a la variable pasada por referencia.
|
||||
* $EXAMPLES$
|
||||
* Ver Test
|
||||
* $TESTS$
|
||||
* FUNCTION Main()
|
||||
* local cVar := "Test local"
|
||||
* private nVar := 0
|
||||
*
|
||||
* Test( @cVar, @nVar, cVar, nVar )
|
||||
* RETURN NIL
|
||||
*
|
||||
* PROCEDURE Test( Arg1, Arg2, Arg3, Arg4 )
|
||||
* ? hb_isbyref( @Arg1 ) // .T.
|
||||
* ? hb_isbyref( @Arg2 ) // .T.
|
||||
* ? hb_isbyref( @Arg3 ) // .F.
|
||||
* ? hb_isbyref( @Arg4 ) // .F.
|
||||
* RETURN
|
||||
* </fixed>
|
||||
* $STATUS$
|
||||
* S
|
||||
* $COMPLIANCE$
|
||||
* Esta funci¢n es una extensi¢n de Harbour.
|
||||
* $FILES$
|
||||
* La Librer¡a es rtl
|
||||
* $SEEALSO$
|
||||
* VALTYPE()
|
||||
* $END$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,380 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 2001 Antonio Linares
|
||||
* Documentaci¢n en Ingl‚s de vm.txt
|
||||
*
|
||||
* Copyright 2001 Alejandro de G rate <alex_degarate@hotmail.com>
|
||||
* Traducci¢n al Espa¤ol de vm.txt
|
||||
*
|
||||
* Vea COPYING por los t‚rminos de la licencia.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
La M quina Virtual de Harbour (Virtual Machine ¢ VM)
|
||||
====================================================
|
||||
|
||||
La VM es un bucle de ejecuci¢n infinita mientras se ejecute el programa.
|
||||
La VM esta formada por el bucle principal de ejecuci¢n y varios
|
||||
subsistemas, cada uno de los cuales puede ser te¢ricamente reemplazado,
|
||||
suponiendo que Ud. respete la interfaz de cada subsistema.
|
||||
|
||||
El bucle principal de ejecuci¢n esta definido en una funcion de C
|
||||
llamada VirtualMachine(), la cual recibe 2 parametros: la intrucciones
|
||||
pcode para ejecutar y la tabla local de s¡mbolos (una porci¢n de la
|
||||
tabla de s¡mbolos OBJs (estatica) ) usada para ese pcode.
|
||||
Por favor revise hbpcode.h para la implementacion actual de los pcode
|
||||
de los opcodes.
|
||||
|
||||
VM( pcode, local symbols )
|
||||
|
||||
La VM puede invocar a la VM de nuevo (a s¡ 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
|
||||
m£ltiples 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 son 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 areas 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 (parametros, 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 est 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 alfabetico que permite, una
|
||||
b£squeda dicotomica de los s¡mbolos. Este subsistema es responsable
|
||||
por el r pido acceso a los s¡mbolos (funciones, variables, campos y
|
||||
alias de las reas 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 esta es una parte de la especificaciones de yacc (Bison)
|
||||
para Harbour.
|
||||
|
||||
|
||||
El subsistema de reas de trabajo:
|
||||
==================================
|
||||
Responsable por el manejo de las bases de datos. Este subsistema
|
||||
define la ubicaci¢n donde las areas de trabajos ser n almacenadas
|
||||
y provee todas las funciones de acceso a esas areas de trabajo.
|
||||
Este tambi‚n implementa la interfaz para el controlador de base de
|
||||
datos reemplazable.
|
||||
|
||||
Pregunta:
|
||||
|
||||
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 ?.
|
||||
|
||||
Respuesta:
|
||||
Lenguaje Clipper pcode de opcodes
|
||||
DEFINE NOMBRE 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
|
||||
#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 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
|
||||
#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
|
||||
#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
|
||||
#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... donde nosotros s¢lo
|
||||
queremos llamar a una funci¢n estandar de lenguaje C, que use el
|
||||
sistema extendido est ndar y que pueda ser facilmente 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.
|
||||
|
||||
Pregunta:
|
||||
|
||||
He visto que, por ejemplo Clipper tiene un opcode llamado
|
||||
"PUSHWORD" (06), mientras Valkyirie 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.
|
||||
|
||||
Respuesta:
|
||||
|
||||
Los opcodes de Harbour estan definidos en hbpcode.h
|
||||
Nosotros estamos tratando que los mnem¢nicos sean muy f ciles de
|
||||
usar, as¡ PUSHWORD parece mas f cil que PUSHW. Los valores de los
|
||||
opcodes son de poco valor porque ellos son solo usados por una
|
||||
sentencia switch del lenguaje C (en realidad hay una poderosa
|
||||
optimizaci¢n la cual es: usar el mismo pcode de los opcodes como un
|
||||
¡ndice al array de punteros de las 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.
|
||||
|
||||
|
||||
|
||||
@@ -559,7 +559,7 @@ rm -rf $RPM_BUILD_ROOT
|
||||
%doc ChangeLog*
|
||||
%doc doc/*.txt
|
||||
%doc doc/%{readme}
|
||||
%doc doc/en-EN/
|
||||
%doc doc/en/
|
||||
|
||||
%dir %{hb_etcdir}
|
||||
%verify(not md5 mtime) %config %{hb_etcdir}/hb-charmap.def
|
||||
|
||||
Reference in New Issue
Block a user