BIN2I()
 Convierte un entero con signo de 16 bits en un valor numérico
------------------------------------------------------------------------------
 Sintaxis

     BIN2I(<cEntConSigno>) --> nNúmero

 Argumentos

     <cEntConSigno> es una cadena de carácteres en formato de entero con
     signo de 16 bits (el byte menos significativo primero). La función sólo
     utiliza los dos primeros carácteres; todos los dem.s se ignoran.

 Devuelve

     BIN2I() devuelve un valor numérico entero.

 Descripción

     BIN2I() es una función de ficheros de bajo nivel que se utiliza con
     FREAD() para convertir una cadena de carácteres de dos bytes, en formato
     de entero con signo, en datos numéricos de CA-Clipper. Es muy .til al
     leer ficheros de otros productos, porque permite leer los datos
     numéricos en su formato nativo.

 Ejemplos

     .  Este ejemplo abre un fichero de base de datos utilizando
        funciónes de fichero de bajo nivel y lee la fecha de la .ltima
        actualizaci.n (bytes 1-3). El resultado es el mismo que con
        LUPDATE():

        #include "Fileio.ch"
        //
        nManejador := FOPEN("Ventas.dbf", FO_READ)
        //
        // Apuntar al byte 1 del fichero
        FSEEK(nManejador, 1, FS_SET)
        //
        // Leer la fecha de la .ltima actualizaci.n
        nAno := BIN2I(FREADSTR(nManejador, 1) + CHR(0))
        nMes := BIN2I(FREADSTR(nManejador, 1) + CHR(0))
        nDia := BIN2I(FREADSTR(nManejador, 1) + CHR(0))
        //
        ? LTRIM(STR(nMes)), LTRIM(STR(nDia)), LTRIM(STR(nAno))
        FCLOSE(nManejador)

 Ficheros:  La biblioteca asociada es EXTEND.LIB,
            el fichero fuente es SOURCE\SAMPLE\EXAMPLEA.ASM


BIN2L()
 Convierte un entero con signo de 32 bits en un valor numérico
------------------------------------------------------------------------------
 Sintaxis

     BIN2L(<cEntConSigno>) --> nNúmero

 Argumentos

     <cEntConSigno> es una cadena de carácteres en formato de entero con
     signo de 32 bits (el byte menos significativo primero). La función sólo
     utiliza los cuatro primeros carácteres; todos los dem.s se ignoran.

 Devuelve

     BIN2L() devuelve un valor numérico entero.

 Descripción

     BIN2L() es una función de ficheros de bajo nivel que se utiliza con
     FREAD() para convertir una cadena de carácteres de cuatro bytes, en
     formato de entero con signo, en datos numéricos de CA-Clipper. Es muy
     .til al leer ficheros de otros productos, porque permite leer los datos
     numéricos en su formato nativo.

 Ejemplos

     .  Este ejemplo abre un fichero de base de datos utilizando
        funciónes de fichero de bajo nivel y lee el número de registros
        (bytes 4-7). El resultado es el mismo que con LASTREC():

        #include "Fileio.ch"
        //
        nManejador := FOPEN("Ventas.dbf", FO_READ)
        // Nota: Ventas.dbf contiene 84 registros
        //
        // Apuntar al byte 4
        FSEEK(nManejador, 4, FS_SET)
        //
        // Leer el número de registros
        cRegistros := SPACE(4)
        FREAD(nManejador, @cRegistros, 4)
        //
        ? LTRIM(STR(BIN2L(cRegistros)))         // Resultado: 84
        FCLOSE(nManejador)

 Ficheros:  La biblioteca asociada es EXTEND.LIB,
            el fichero fuente es SOURCE\SAMPLE\EXAMPLEA.ASM


BIN2W()
 Convierte un entero sin signo de 16 bits en un valor numérico
------------------------------------------------------------------------------
 Sintaxis

     BIN2W(<cEntSinSigno>) --> nNúmero

 Argumentos

     <cEntSinSigno> es una cadena de carácteres en formato de entero sin
     signo de 16 bits (el byte menos significativo primero). La función sólo
     utiliza los dos primeros carácteres; todos los dem.s se ignoran.

 Devuelve

     BIN2W() devuelve un valor numérico entero.

 Descripción

     BIN2W() es una función de ficheros de bajo nivel que se utiliza con
     FREAD() para convertir una cadena de carácteres de dos bytes, en formato
     de entero sin signo, en datos numéricos de CA-Clipper. Es muy .til al
     leer un fichero binario, porque permite leer los datos en su formato
     nativo.

 Ejemplos

     .  Este ejemplo abre un fichero de base de datos utilizando
        funciónes de fichero de bajo nivel y lee el número de bytes por
        registro (bytes 10-11). El resultado es el mismo que con RECSIZE():

        #include "Fileio.ch"
        //
        nManejador := FOPEN("Ventas.dbf", FO_READ)
        // Nota: La longitud de un registro de Ventas.dbf es 124
        //
        // Apuntar al byte 10, el byte de tama.o del primer registro
        FSEEK(nManejador, 10, FS_SET)
        //
        // Leer el tama.o de registro
        cTamReg := SPACE(2)
        FREAD(nManejador, @cTamReg, 2)
        //
        ? LTRIM(STR(BIN2W(cTamReg)))            // Resultado: 124
        FCLOSE(nManejador)

 Ficheros:  La biblioteca asociada es EXTEND.LIB,
            el fichero fuente es SOURCE\SAMPLE\EXAMPLEA.ASM


BOF()
 Determina si se ha encontrado o no el inicio del fichero
------------------------------------------------------------------------------
 Sintaxis

     BOF() --> lL.mite

 Devuelve

     BOF() devuelve verdadero (.T.) si se ha intentado saltar antes del
     primer registro l.gico de un fichero; en caso contrario, devuelve falso
     (.F.). Si no hay un fichero de base de datos abierto en el .rea de
     trabajo actual, BOF() devuelve falso (.F.). Si el fichero de base de
     datos actual no contiene registros, BOF() devuelve verdadero (.T.).

 Descripción

     BOF() es una función de base de datos que sirve para comprobar una
     condición de l.mite cuando el usuario desplaza el puntero de registro
     por el fichero utilizando el mandato SKIP. Un ejemplo sencillo de
     utilización ser.a una lista de registros en orden descendente que
     tuviera un fichero de índice en orden ascendente. Un ejemplo m.s
     complejo ser.a una rutina que desplazara p.ginas, en el fichero actual,
     hacia delante o hacia atr.s seg.n la tecla que el usuario hubiera
     pulsado. Al desplazarse hacia atr.s, es necesario utilizar BOF() para
     comprobar la condición de principio de fichero antes de utilizar el
     mandato SKIP para desplazar el puntero de registro y redibujar la
     pantalla.

     Una vez que BOF() toma el valor verdadero (.T.), mantiene este valor
     hasta que se realice otro intento de desplazar el puntero de registro.

     Por defecto, BOF() opera en el área de trabajo seleccionada. Para
     utilizarla en un área de trabajo no seleccionada, es necesario
     especificarla con una expresión de alias (consulte el ejemplo
     siguiente).

     El mandato SKIP es el .nico mandato de movimiento de registros que puede
     hacer que BOF() tome el valor verdadero (.T.).

 Ejemplos

     .  Este ejemplo utiliza la función BOF() intentando desplazar el
        cursor antes del primer registro:

        USE Ventas NEW
        ? RECNO(), BOF()               // Resultado: 1 .F.
        SKIP -1
        ? RECNO(), BOF()               // Resultado: 1 .T.

     .  El ejemplo siguiente utiliza expresiónes de alias para
        comprobar el valor de BOF() en .reas de trabajo no seleccionadas:

        USE Ventas NEW
        USE Cliente NEW
        USE Facturas NEW
        ? Ventas->(BOF()), Cliente->(BOF())

 Ficheros:  La biblioteca asociada es CLIPPER.LIB.


BREAK()
 Interrumpe la ejecución de una estructura BEGIN SEQUENCE...END
------------------------------------------------------------------------------
 Sintaxis

     BREAK(<exp>) --> NIL

 Argumentos

     <exp> es el valor pasado a la cláusula RECOVER, si se utiliza.
     Recuerde que <exp> no es opciónal. Puede especificarse NIL si no se
     especifica un valor de interrupci.n.

 Devuelve

     BREAK() siempre devuelve NIL.

 Descripción

     La función BREAK() es id.ntica en su funciónamiento a la sentencia
     BREAK. Esta función debe ejecutarse dentro de una estructura SEQUENCE.

 Ejemplos

     .  Este ejemplo ilustra una salida de SEQUENCE desde un bloque de
        código:

        bGuardar := ERRORBLOCK( {|x| BREAK(x)} )

        BEGIN SEQUENCE
           .
           .
           .
        RECOVER USING objError
           .
           .
           .
        END

        ERRORBLOCK(bGuardar)

 Ficheros:  La biblioteca asociada es CLIPPER.LIB.


BROWSE()*
 Visualiza registros en una ventana
------------------------------------------------------------------------------
 Sintaxis

     BROWSE([<nSup>], [<nIzq>],
        [<nInf>], [<nDer>]) --> lExito

 Argumentos

     <nSup>, <nIzq>, <nInf> y <nDer> definen las coordenadas
     de las esquinas superior izquierda e inferior derecha de la ventana. Si
     no se especifican, las coordenadas de ventana por defecto son 1, 0 y
     MAXROW(), MAXCOL().

 Devuelve

     BROWSE() devuelve falso (.F.) si no se est. utilizando ningún fichero de
     base de datos; en caso contrario devuelve verdadero (.T.).

 Descripción

     BROWSE() es una función de interfaz de usuario que invoca, en el .rea de
     trabajo actual, un programa de uso general de visualización y edici.n de
     registros en formato de tabla. Si desea una lista de las teclas de
     desplazamiento utilizadas con BROWSE(), consulte la función DBEDIT().

 Notas

     .  L.nea de estado: BROWSE() muestra una línea de estado en
        la esquina superior derecha de la ventana, que puede indicar lo
        siguiente:

        Mensajes de la L.nea de Estado de BROWSE()
        ---------------------------------------------------------------------
        Mensaje     Significado
        ---------------------------------------------------------------------
        <new>       Modo de adici.n
        <bof>       Inicio de fichero
        <delete>    Se borra el registro actual
        Registro    Visualiza el número de registro
        ---------------------------------------------------------------------

          BROWSE() posee estos tres modos:

        -  visualización: Este es el modo por defecto de BROWSE(). Al
           pulsar cualquier tecla de desplazamiento de DBEDIT(), la zona
           resaltada se desplaza a una nueva fila o columna.

        -  Edici.n de campos: Al pulsar Intro en cualquier campo se
           inicia el modo de edici.n mediante el sistema de GET. Al pulsar
           Intro de nuevo, finaliza el modo de edici.n y se guardan los
           cambios realizados. La tecla Esc finaliza la edici.n sin guardar
           los cambios. Como en el modo de edici.n de campos se utiliza el
           sistema de GET, todas las teclas de desplazamiento y de edici.n
           son las teclas que se usan en el READ.

        -  Adici.n: Si se va al final del fichero con Ctrl-AvP.g y se
           pulsa Abajo, se inicia el modo de adici.n. Aparece el mensaje
           "<new>" en la línea de estado y se inserta un nuevo registro en
           blanco. Al pulsar Arriba finaliza el modo de adici.n y se guarda
           el nuevo registro si se han introducido datos. Si no se han
           introducido datos, no se guarda dicho registro.

     .  Este es un ejemplo de visualización de un fichero:

        USE Fichero1 NEW
        BROWSE()

 Ficheros:  La biblioteca asociada es EXTEND.LIB,
            el fichero fuente es SOURCE\SAMPLE\BROWSE.PRG



CDOW()
 Convierte un valor de fecha en un día de la semana en formato de cadena de
 carácteres
------------------------------------------------------------------------------
 Sintaxis

     CDOW(<dExp>) --> cNombreD.a

 Argumentos

     <dExp> es el valor de fecha que se va a convertir.

 Devuelve

     CDOW() devuelve el nombre del día de la semana en forma de cadena de
     carácteres. La primera letra está en mayúscula y el resto de la cadena
     en minúsculas. Si el valor de fecha es nulo, CDOW() devuelve una cadena
     nula ("").

 Descripción

     CDOW() es una función de conversión que se utiliza para dar formato a la
     visualización de fechas en informes, etiquetas y pantallas.

 Ejemplos

     .  Los ejemplos siguientes ilustran CDOW():

        ? DATE()                        // Resultado: 09/01/90
        ? CDOW(DATE())                  // Resultado: Viernes
        ? CDOW(DATE() + 7)              // Resultado: Viernes
        ? CDOW(CTOD("06/12/90"))        // Resultado: Martes

 Ficheros:  La biblioteca asociada es CLIPPER.LIB.


CHR()
 Convierte un código ASCII en un valor de tipo carácter
------------------------------------------------------------------------------
 Sintaxis

     CHR(<nC.digo>) --> cCar

 Argumentos

     <nC.digo> es un código ASCII comprendido entre 0 y 255.

 Devuelve

     CHR() devuelve el carácter correspondiente al código ASCII especificado
     por <nC.digo>.

 Descripción

     CHR() es una función de conversión que convierte un código ASCII en un
     carácter. Es la función inversa de ASC(). CHR() se utiliza en una serie
     de tareas frecuentes, que incluyen:

     .  Env.o de códigos de control y carácteres gr.ficos a la
        pantalla o a la impresora

     .  Emisi.n de se.ales ac.sticas

     .  Conversi.n en carácteres de los valores de retorno de INKEY()

     .  Llenado de la memoria intermedia del teclado

 Notas

     .  Car.cter nulo: El carácter nulo, CHR(0), posee una
        longitud de uno y se trata como cualquier otro carácter. Esto le
        permite envíarlo a cualquier dispositivo o fichero, incluyendo un
        fichero de base de datos.

 Ejemplos

     .  Estos ejemplos muestran la utilización de CHR() con distintos
        argumentos:

        ? CHR(72)                     // Resultado: H
        ? CHR(ASC("A") + 32)          // Resultado: a
        ? CHR(7)                      // Resultado: suena la se.al
                                      // ac.stica

     .  Las siguientes líneas de código muestran la diferencia entre
        una cadena nula y el carácter nulo:

        ? LEN("")                     // Resultado: 0
        ? LEN(CHR(0))                 // Resultado: 1

 Ficheros:  La biblioteca asociada es CLIPPER.LIB.


CMONTH()
 Convierte un valor de fecha en un nombre de mes en formato de cadena de
 carácteres
------------------------------------------------------------------------------
 Sintaxis

     CMONTH(<fFecha>) --> cMes

 Argumentos

     <fFecha> es el valor de fecha que se desea convertir.

 Devuelve

     CMONTH() recibe un valor de fecha y devuelve el nombre del mes, en forma
     de cadena de carácteres. La primera letra está en mayúscula y el resto
     en minúsculas. Si el valor de fecha es nulo, CMONTH() devuelve una
     cadena nula ("").

 Descripción

     CMONTH() es una función de conversión que permite crear cadenas de fecha
     formateadas para informes, etiquetas o pantallas.

 Ejemplos

     .  Los ejemplos siguientes muestran la forma de utilización de
        CMONTH():

        ? CMONTH(DATE())                  // Resultado: Septiembre
        ? CMONTH(DATE() + 45)             // Resultado: Octubre
        ? STR(DAY(DATE())) +;
           SUBSTR(CMONTH(DATE()),1,3)     // Resultado: 1 Sep

 Ficheros: La biblioteca asociada es CLIPPER.LIB.


COL()
 Devuelve la posición de columna del cursor en pantalla
------------------------------------------------------------------------------
 Sintaxis

     COL() --> nCol

 Devuelve

     COL() devuelve un valor numérico entero. El rango permitido para el
     valor de retorno es de cero a MAXCOL().

 Descripción

     COL() es una función de pantalla que devuelve la posición de columna
     actual del cursor. El valor de COL() cambia siempre que var.a la
     posición del cursor en la pantalla. Tanto los mandatos de consola como
     los de pantalla completa pueden cambiar la posición del cursor. COL()
     toma autom.ticamente el valor cero al ejecutar un mandato CLEAR, CLEAR
     SCREEN o CLS.

     COL() se utiliza para colocar el cursor en una columna, respecto a la
     columna actual. Generalmente se utiliza en combinación con ROW() y todas
     las variaciones del mandato @. En particular, utilice COL() y ROW() para
     crear procedimientos o funciónes independientes de la posición en
     pantalla que pasen la posición superior izquierda de fila y columna como
     parámetros.

     Si se ha establecido SET DEVICE TO PRINTER, la salida de los mandatos
     @...SAY se dirige a la impresora y se actualizan PROW() y PCOL() en vez
     de ROW() y COL(). Utilice estas funciónes si desea controlar la posición
     del cabezal de impresión.

 Ejemplos

     .  El ejemplo siguiente muestra en pantalla el nombre de un
        Cliente comenzando en la columna 10. El estado de cuenta del cliente
        aparece, por medio de COL(), a la derecha del último carácter del
        nombre del cliente:

        USE Ventas NEW
        CLS
        @ 1, 10 SAY "Nombre Cliente: " + TRIM(Cliente)
        @ ROW(), COL() + 1 SAY "Estado Cuenta: " + Estado

 Ficheros:  La biblioteca asociada es CLIPPER.LIB.


COLORSELECT()
 Activa un atributo de la lista de atributos de color
------------------------------------------------------------------------------
 Sintaxis

     COLORSELECT(<níndiceColor>) --> NIL

 Devuelve

     Siempre devuelve NIL.

 Argumentos

     <níndiceColor> es un número que corresponde a la posición de orden
     en la lista de atributos de color, establecida con SETCOLOR().

 Descripción

     COLORSELECT() activa el par de colores especificado en la lista actual
     de atributos de color (establecida con SETCOLOR()). Las constantes
     declaradas de <níndiceColor> se definen en COLOR.CH:

     Constantes de COLOR.CH 
     ------------------------------------------------------------------------
     Constante        Valor
     ------------------------------------------------------------------------
     CLR_STANDARD     0
     CLR_ENHANCED     1
     CLR_BORDER       2
     CLR_BACKGROUND   3
     CLR_UNSELECTED   4
     ------------------------------------------------------------------------

     COLORSELECT() no altera el valor actual de SET Color.

     La siguiente tabla describe el ámbito de los valores de color de
     CA-Clipper seleccionables con SETCOLOR():

     configuración de Color
     ------------------------------------------------------------------------
     Valor          ámbito
     ------------------------------------------------------------------------
     Est.ndar       Todosólos mandatos y funciónes mostrados en la pantalla
     Resaltado      Gets y zonas resaltadas de selecci.n
     Borde          Borde de pantalla (no utilizable en monitores EGA y VGA)
     Fondo          No utilizable
     No resaltado   Gets no seleccionados y opciónes de men. no accesibles
     ------------------------------------------------------------------------

 Ejemplos

     .  Este ejemplo muestra la utilización de COLORSELECT() con las
        constantes declaradas de COLOR.CH:

        USE Ventas NEW
        ? SETCOLOR()                       // muestra "W/B,N/B,W/N,W/N,W/N"
                                           // en blanco sobre azul

        COLORSELECT(CLR_ENHANCED )         // se selecciona el par de
                                           // colores de resaltado
        ? "Soy negro y azul"               // mostrado en negro
                                           // sobre azul
        COLORSELECT(CLR_STANDARD)          // restaura el color estándar

 Ficheros: La biblioteca asociada es CLIPPER.LIB,
           el fichero de cabecera es Color.ch.


CTOD()
 Convierte una cadena de fecha en un valor de tipo fecha
------------------------------------------------------------------------------
 Sintaxis

     CTOD(<cFecha>) --> fFecha

 Argumentos

     <cFecha> es una cadena de carácteres que consiste en números que
     representan el mes, d.a y a.o, separados por un carácter no numérico.
     Las cifras del mes, d.a y a.o deben especificarse de acuerdo con el
     formato SET DATE. Si no se especifican cifras para el siglo, .ste se
     determina por las reglas de SET EPOCH.

 Devuelve

     CTOD() devuelve un valor de fecha. Si <cFecha> no es una fecha víaacute;lida,
     CTOD() devuelve una fecha vac.a.

 Descripción

     CTOD() es una función de conversión de carácteres que convierte una
     cadena de carácteres en una fecha. Para inicializar una fecha vac.a para
     la introducci.n de la fecha, especifique <cFecha> como cadena nula (""),
     SPACE(8) o "  /  /  ".

     CTOD() se utiliza siempre que necesite un valor de fecha en forma
     literal. A continúa.ión se dan algunos ejemplos:

     .  Inicializar una variable en un valor de fecha

     .  Especificar una cadena de fecha en forma literal como
        argumento de una cláusula RANGE de @...GET

     .  Especificar una cadena de fecha en forma literal para realizar
        cálculos aritm.ticos con la fecha

     .  Comparar el resultado de una expresión de fecha con una cadena
        de fecha en forma literal

     .  Sustituir un campo de fecha por una cadena de fecha en forma
        literal

     CTOD() es la función inversa de DTOC(), la cual convierte un valor de
     fecha en una cadena de carácteres con el formato especificado por SET
     DATE y SET CENTURY. DTOS() convierte asimismo un valor de fecha en una
     cadena de carácteres con el formato aaaammdd.

 Ejemplos

     .  Este ejemplo utiliza CTOD() para inicializar dos variables de
        fecha, utilizando una como GET y la otra para la víaacute;lidaci.n RANGE:

        SET CENTURY ON
        dInicio := CTOD("01-26-1876")
        dActual := CTOD("")
        @ 10, 10 SAY "Introduzca la fecha:" GET dActual ;
              RANGE dInicio, DATE()
        READ

     .  El ejemplo siguiente utiliza CTOD() para crear un valor de
        fecha dentro de una condición FOR:

        USE Inventario NEW
        REPLACE ALL Inventario->Precio WITH ;
           Inventario->Precio * 1.1 FOR ;
           Inventario->FechaInv < CTOD("10/10/90")

 Ficheros: La biblioteca asociada es CLIPPER.LIB.


CURDIR()
 Devuelve el directorio DOS actual
------------------------------------------------------------------------------
 Sintaxis

     CURDIR([<cEspecUnidad>]) --> cDirectorio

 Argumentos

     <cEspecUnidad> especifica la letra de la unidad de disco que se
     requiere. Si no se especifica, la unidad por defecto es la unidad DOS
     actual.

 Devuelve

     CURDIR() devuelve el directorio DOS actual de la unidad especificada por
     <cEspecUnidad>, como cadena de carácteres sin carácteres de barra
     invertida (\) iniciales o finales.

     Si se produce un error o si el directorio actual de la unidad
     especificada es el directorio ra.z, CURDIR() devuelve una cadena nula
     ("").

 Descripción

     CURDIR() es una función de entorno que le proporciona el nombre del
     directorio DOS actual, ignorando los valores de SET DEFAULT y SET PATH.

 Ejemplos

     .  Los ejemplos siguientes muestran la forma de utilización de
        los distintos resultados de CURDIR():

        ? CURDIR("E:")      // Resultado: cadena nula:directorio ra.z
        ? CURDIR("C")       // Resultado: CLIPPER5\SOURCE
        ? CURDIR("C:")      // Resultado: CLIPPER5\SOURCE
        ? CURDIR()          // Resultado: cadena nula:directorio ra.z
        ? CURDIR("A")       // Resultado: cadena nula:la unidad no est.
                            // preparada

     .  Este ejemplo cambia el directorio DOS actual por un nuevo
        valor, si no coincide con un directorio especificado:

        IF CURDIR("C:") != "CLIPPER5\SOURCE"
           RUN CD \CLIPPER5\SOURCE
        ENDIF

 Ficheros   La biblioteca asociada es EXTEND.LIB,
            el fichero fuente es SOURCE\SAMPLE\EXAMPLEA.ASM