Clipper

Clipper
Información sobre la plantilla
Clipper.gif
Es un lenguaje de programación.
CreadorNantucket Corporation en 1985
DesarrolladorNantucket Corporation
Diseñado porNantucket Corporation
Lanzamiento iniciallanzada el 25 de mayo de 1985
Última versión estableCA Clipper 5.3b (20 de mayo de 1997)
Sistemas Operativos compatiblesMS-DOS y Windows
IdiomaEspañol

Clipper. Es un dialecto creado como otros tantos con la intención de mejorar las prestaciones de DBASE. Su primera versión se creó en 1985 en los laboratorios de Natuncket. CLIPPER está escrito en lenguaje C y Ensamblador y se presentó como un lenguaje atrevido que ha dado muchos quebraderos de cabeza en Ashthon-Tate.

En el primer contacto que se tiene con él es dificil encontrar muchas diferencias con respecto a DBASE, ya que CLIPPER es un lenguaje formado por un conjunto de comandos y funciones similares a las usadas con DBASE, incluso la mayoría con igual formato sintáctico. Todos los programas escritos en Clipper pueden compilarse y enlazarse. El resultado obtenido es un fichero ejecutable que puede utilizarse de forma independiente al gestor de base de datos y sin necesidad de incluir módulo runtime. Esto repercute en la velocidad de ejecución de los programas.

Clipper en la Actualidad

CLIPPER es ahora sin duda el compilador más utilizado en aplicaciones de gestión de datos para microordenadores. La última versión aparecida en el mercado es la CLIPPER 5.01 versión reparada de la CLIPPER 5.0. Hasta el momento, la versión más utilizada quizás por su largo tiempo de vigencia es la CLIPPER SUMMER '87. Anteriores a ésta eran la CLIPPER AUTUMN '86 y la versión de 1985. De todas las versiones detalladas la SUMMER '87 ha sido la más difundida. Muchas aplicaciones se han desarrollado con esta versión, por ello, aún, muchos programadores se resisten al cambio a versiones más actuales. Otras prestaciones de CLIPPER SUMMER '87 a destacar son las siguientes:

  • Provee un conjunto de funciones para el tratamiento de ficheros en redes de area local.
  • Permite manejar ficheros de bajo nivel.
  • Posibilita la creación de funciones de usuarios y agruparlas en librerías.
  • Permite el uso de arrays unidimensionales.
  • Proporciona un depurador avanzado.

Actualmente el Clipper se esta involucrando en varios proyectos. En proyectos de distribución de software libre como el Clip, Harbour, xHarbour. Pero también en otras distribuciones de software comerciales. Todo este desarrollo del Clipper se lo debe a todas las características heredadas del lenguaje C. Que entre otras cosas lo hace compatible con la mayor parte de los formatos y extensiones de bases de datos.

Las primeras versiones

Las primeras versiones se denominan versiones estacionales por hacer referencia a una estación del año en sus nombres oficiales. Todas ellas se nominaban como compiladores dBase. Estas fueron:

Características técnicas

Capacidades

Nº. máximo de registros por base de datos, 1000.000.000 Nº. máximo de caracteres por registro, RAM disponible Nº. máximo de campos por registro, RAM disponible Nº. máximo de caracteres por campo, 32 kb Nº. de dígitos de precisión en operaciones de cálculo, 18 Nº. máximo de caracteres en una clave de indexación, 250 Nº. máximo de variables de memoria, 2048 Tamaño máximo de una variable de memoria, 64 kb Nº. máximo de dígitos en una variable numérica, 19 Nº. máximo de tablas, 2048

Requerimiento hardware

  1. Ordenador : IBM PC, XT, AT, 386 o compatible
  2. Memoria RAM : 256 kb
  3. Disco duro : Necesario para funcionamiento óptimo
  4. Coprocesador: Si existe se aprovecha automáticamente

Requerimiento software

  • Sistema Operativo:
  • DOS 2.0 o superior (monousuario)
  • DOS 3.1 o superior (multiusuario)
  • LAN : Bajo DOS. No requiere LAN Pack. Bloqueo manual.

Instalación

La instalación de CLIPPER es muy fácil, basta con copiar el contenido de todos los disquetes a un directorio o ejecutar el fichero CLIPCOPY.BAT que se encuentra en el disco de Sistema.

Config.sys

Para el funcionamiento óptimo de CLIPPER conviene incluir las siguientes líneas en el fichero de configuración CONFIG.SYS. FILES = 20 BUFFERS = 8 Si se posee DOS 3.3 o superior es posible trabajar hasta con 255 ficheros abiertos simultáneamente. Para ello se debe indicar, en lugar de FILES = 20: FILES = 255 (Es importante ajustar el número de ficheros para aprovechar al máximo la memoria).

Autoexec.bat

En el fichero AUTOEXEC.BAT resulta de gran utilidad incluir una línea de PATH. Esto permitirá ejecutar el compilador desde otros directorios de trabajo. PATH C:\CLIPPER

Ficheros

A los distintos ficheros que maneja CLIPPER podremos diferenciarlos por su extensión. Si hemos utilizado anteriormente DBASE, la mayoría nos resultarán familiares.

  • Bases de datos (.DBF)
  • Datos memo (.DBT)
  • Indices (.NTX) en DBASEIII (.NDX)
  • Etiquetas (.LBL)
  • Informes (.FRM)
  • Texto (.TXT)
  • Variables de memoria (.MEM)
  • Fuentes (.PRG)
  • Objetos (.OBJ)
  • Compilación (.CLP)
  • Enlace (.LNK)
  • Overlays (.OVL)
  • Ejecutables (.EXE)

Compatibilidad con DBASE

La posibilidad de compilar DBASE con el compilador de CLIPPER está limitada por un grupo de comandos y funciones de DBASE. Otras distinciones a considerar son las referentes a las macros (en Clipper no pueden usarse para sustituir a una palabra del sistema) y los ficheros índices (en Clipper están optimizados). Clipper proporciona un manejador de bases de datos (DBU), un emulador del punto de petición de orden de Dbase (DOT), un generador de informes y etiquetas (RL) y un generador de ficheros índices. Todo estas opciones son semejantes a las proporcionadas por Dbase.

Entorno de desarrollo

Para desarrollar con CLIPPER tendremos que disponer de las siguientes herramientas básicas:

  • Un editor que genere código ASCII standard.
  • El compilador CLIPPER.EXE.
  • Las librerías CLIPPER.LIB, EXTEND.LIB, OVERLAY.LIB, etc.
  • Un enlazador PLINK86.EXE ,LINK.EXE ,TLINK.EXE.
  • Un depurador de programas DEBUG.OBJ.

Escritura de programas

Los requisitos básicos a cumplir para la correcta escritura de los fuentes son:

  • Los ficheros fuentes se nombrarán especificando la extensión .PRG.
  • La longitud de una línea es de 256 caracteres.
  • Una línea sólo admitirá una instrucción.
  • Las instrucciones pueden escribirse desde la primera línea en el editor.
  • Cuando sea necesario escribir líneas de instrucciones muy largas, podemos hacerlo en líneas independiente escribiendo un punto y coma al final de la línea.
  • Puede escribirse en minúsculas o mayúsculas, indistintamente.
  • El asterisco '*' se utilizará para hacer comentarios.
  • El doble '&' se utilizará para comentar líneas con instrucciones.

Compilación

La compilación es una traducción del fichero fuente (.PRG) para obtener un fichero objeto (.OBJ). Consiste en transcribir cada instrucción desde el lenguaje simbólico en que está escrito el código (CLIPPER) a código comprensible por el enlazador del sistema operativo (DOS). El fichero del compilador que proporciona CLIPPER se llama CLIPPER.EXE.

Enlace

El fin de un enlazador es el de asociar los módulos objeto obtenidos mediante el compilador con las librerías donde se contienen las traducciones máquina de cada una de las sentencias,llamadas,etc. que aparecen en el módulo objeto.

Bases de datos

  • Creación de una base de datos

Para crear un fichero de estructura vacia se usará el mandato CREATE. Para definir los distintos campos de la futura base de datos emplearemos APPEND BLANK (para añadir un registro en blanco) y REPLACE (para almacenar el contenido).

  • Tipos y longitud de campos

Los distintos tipos de campos que podemos definir en una base de datos son: C- Caracter (1-254 caracteres alfanuméricos) N- Numérico (1-19 dígitos de entero.) (0-15 dígitos decimal y dos dígitos menor que entero) D- Fecha (8 dd-mm-aa) L- Lógico (1 carácter para valores lógicos: T,F,Y,N) M- Memo (10) Almacena dirección para acceder a fichero .DBT.

  • Usar una base de datos

Para usar una base de datos emplearemos la sentencia USE especificando el fichero de base de datos. Si existe un fichero memo asociado se abrirá, y si se indicó uno o más ficheros .NTX se activarán los índices correspondientes. También proporciona el alias adecuado.

  • Modificar estructura

Para modificar la estructura de una base de datos se recomienda el uso de la sentencia MODIFY STRUCTURE propia de Dbase. Posibilita renombrar, suprimir y añadir campos, así como modificar el tipo y la longitud de los mismos. Con LIST STRUCTURE de Dbase listaremos la estructura de una base de datos.

  • Añadir registros

APPEND BLANK añade un registro vacio a nuestro fichero en uso. El puntero de la base de datos se sitúa en el registro añadido. La sentencia REPLACE nos servirá para reemplazar el contenido de los campos.

  • Listar registros

LIST y DISPLAY sirven para visualizar, imprimir o enviar a un fichero de texto, un registro o conjuto de registros.

  • Puntero de registro

Clipper mantiene un puntero que indica el registro activo en cada momento. Tanto en Clipper con en Dbase podemos conocer la posición del puntero con la función RECNO(). En el ejemplo anterior al añadir el registro vació el puntero se desplaza a la posición que ocupa este registro dentro de la base de datos. Podemos deducir que las sustituciones se efectuarán ahí.

  • Editar un registro

La edición de registros es posible realizarla con varias sentencias. No es posible usar EDIT de Dbase III. En Clipper la edición de un registro puede realizarse con un grupo de GET's, aunque existen otras sentencias más avanzada como DBEDIT, MEMOEDIT, etc.

  • Marcar un registro

Clipper igual que Dbase permite marcar registros para posteriormente, si procede, borrarlos definitivamente. Esto se hará con la sentencia DELETE que marca con un asterisco el registro activo. Puede marcarse más de un registro usando la claúsulas FOR o WHILE.

  • Borrar registros

Una vez marcado un registro es posible borrarlo con PACK

  • Desmarcar registros

La sentencia RECALL suprime las marcas puestas con DELETE

  • Primeras sentencias en Clipper

Antes de pasar a realizar el primer programa en Clipper vamos a conocer una serie de sentencias necesarias para cualquier programa. Así podremos conocer también el proceso de codificación y compilación necesario en la realización de nuestras futuras aplicaciones. Colocando un asterisco (“*”) detrás del número o letra hacemos que parpadee. Con el signo más (“+”) conseguimos el efecto de brillo. Para la realización del primer programa debemos escribir el código fuente (con cualquier editor de texto) y guardarlo con un nombre (8 letras máximo) y la extensión prg. a la hora de compilar deberemos escribir cl nombre, sin poner la extensión. ejemplo: c:\Clipper5\bin>edit nombre_programa.prg c:\Clipper5\bin>cl nombre_programa ejemplo: set talk off set echo off clear @ 1,1 to 24,79 double @ 2,30 say "primer programa" @ 3,2 to 3,78 @ 10,10,20,50 box "*" inkey(2) @ 12,22 say "texto" inkey(0)

Operadores

Clipper define 4 tipos de operadores. operadores aritméticos, relacionales, lógicos y el operador de asisnación. todos estos operadores necesitan minimo 2 operandos aúnque pueden unir más.

  1. Asignación (=): con utilizar el igual (“=”) se realiza la asignación. en la parte de la izquierda siempre pondremos una variable y a su derecha se pone una expresión valida, es decir, un valor, variable, función o expresión aritmética o de cadenas.
  2. Aritméticos: son utilizados para realizar operaciones aritméticas sencillas, aúnque uniéndolos se puede realizar cualquier operación matemáticas. en la siguiente tabla se muestrán todos estos operadores.
  3. Lógicos y Relacionales: los operadores relacionales nos sirven para realizar comparaciones con variables. los lógicos los utilizamos para poder unir varias condiciones. ambos operadores solo pueden ser utilizados en las sentencias de control, fueran de ellas son inútiles.

Variables y petición por teclado

Unidad básica de almacenamiento, la creación es la combinación de un identificador y un tipo. todas las variables deben ser declaradas antes de ser utilizadas. el lugar donde se declaran las variables es al principio del programa o al comienzo de cada una de las funciones o procedimiento.

El nombre de las variables debe cumplir una serie de normas. la primera y más importante es que el nombre debe ser único para cada uno de ellas, otra es que el nombre no debe superar 12 letras, no pueden contener espacios ni signos gramaticales. la sintaxis para declarar variables es poner su nombre y asignarle un valor inicial que le indica el tipo que va a guardar. La función que se utiliza para pedir los datos por teclado es get y la función read, que es para asociar el valor a la variable. con tener una sentencia read es suficiente para todas las variables, aunque se puede asociar a cada get un read. la función además de leer los datos realiza una pausa en el programa. la función get se le puede asignar una serie de máscaras para controlar el formato, el rango, validaciones... todas estas funciones son opcionales y no necesitamos poner todas.

get var picture “mascara(s)” range ini,fin valid var$(“valores”) read

La máscara range en caso de ser para fechas sofre una modificación en su sintaxis, esta debe ser como sigue. el resto de parámetros no tienen incidencias sobre su formato de entrada y salida.

range ctod(“fecha_inicio”), ctod(“fecha_fin”)

Sentencias de control

Es el modo que tiene un lenguaje de programación de provocar que el flujo de la aplicación avence y se ramifique en función de los datos que tengan las variables que se usen en el programa. existe 2 tipos de sentencias de control, de selección e iteración. if . . else . . endif: La ejecución atraviesa un conjunto de estados bolean que determinan la ejecución de distintos fragmentos de código. la clausula else es opcional, las condiciones pueden ser más de una, existe la posibilidad de anidarlos, es decir, poner uno dentro de otro. do case . .case . .endcase: Realiza distintas operaciones en base al valor de una única variable o expresión. es una sentencia muy similar a if-else, pero esta es mucho más cómoda y fácil de usar cuando la ramificación es más amplia de 3 caminos. el valor de la expresión se compara con cada uno de los literales de la sentencia case si coincide alguno se ejecuta el código que le sigue, si ninguno coincide se realiza la sentencia otherwise (opcional), si no hay sentencia otherwise no se ejecuta nada. do while . .enddo. Ejecuta repetidamente el mismo bloque de código hasta que se cumpla una condición de terminación. hay cuatro partes en cualquier bucle. inicialización, cuerpo, iteración y condición. for . .step . .next. Realiza las mismas operaciones que en los casos anteriores pero la sintaxis es una forma compacta. se utiliza para la inicialización de tablas. la cláusula step es opcional. La sentencia exit se puede utilizar en ambos bucles, fuerza la salida del bucle donde se encuentra, sin tener en cuenta las sentencias que quedan por ejecutar dentro del bucle. esta sentencia no puede ser utilizada fuera de los bucles.

Tablas

Es una colección de variables del mismo tipo que se referencian por un nombre común (el de la tabla). con las tablas se tiene que trabajar con un solo elemento. No podemos utilizarla a bloque. la manera de usar un elemento mediante el índice de la tabla. Como cualquier variable tendremos que declararla, inicializarla y utilizarla. la declaración de una tabla es como sigue:

declare nombre_tabla[nº elementos] Para inicializar la tabla o utilizar los elementos de su interior tendremos que ir uno a uno. Este proceso puede ser utomatizado siempre que se pueda con un bucle de tipo for, si no es posible tendremos que ir uno a uno según interese. para asignar valores a las tablas no podemos utilizar get directamente, tendremos que utilizar una variable intermedia para asignar su valor.su sintaxis pueden ser: nombre_tabla[indice]=valor for indice=1 to n nombre_tabla[indice]=valor next indice for indice=1 to n @fila,col say “dato:” get variable read nombre_tabla[indice]=variable next indice

Operaciones con tablas

La biblioteca estandart de Clipper tiene un variado conjunto de funciones para realizar operaciones con las tablas. todas estas funciones están ya implementadas y solo tenemos que realizar la llamada con los parámetros que corresponda.

  • subrutinas (funciones y procedimientos)

Las funciones y procedimientos son los bloques constructores en Clipper, es el lugar donde se produce toda la actividad del programa. subdividen las tareas del programa consiguiendo así trabajar con diminutas piezas del programa y no duplicar tareas repetitivas. La diferencia entre las funciones y los procedimientos es la posibilidad que tienen las funciones de retornar un valor mientras que los procedimientos no pueden retornar nada. otra diferencia es la sintaxis de construcción. El mecanismo de trabajo en ambos casos es realizar la llamada a la función o al procedimiento y el programara saltará al desarrollo, cuando realice todas las operaciones de la subrutina volverá al punto donde se hizo la llamada.

Funciones matemáticas

Las funciones matemáticas las utilizaremos para realizar algunas operaciones matemáticas complejas sin necesidad de implementar funciones demasiado largas y difíciles. lo único que debemos cumplir es su sintaxis sin ninguna variación.

Funciones de cadena

Este tipo de funciones van asociadas al trabajo con cadenas como al de caracteres, son utilizadas para realizar comprobación o para el formateo de salida. ocurre exactamente lo mismo que con las matemáticas, debemos tener en cuenta lo que retornan y respetar la sintaxis.

Funciones de fecha y hora

Las funciones de fecha y hora nos sirven para representar la fecha y hora completa o descompuesta en nuestras aplicaciones. todas estas funciones sirven únicamente para mostrar información, mediante ellas no podemos modificar ningún valor de la máquina.

Funciones de teclado

Son utilizadas para simular la pulsación de alguna tecla o controlar las teclas que se pulsan en tiempo de ejecución. otra utilidad es asociar la pulsación de una tecla a un procedimiento. Los valores más interesantes de teclado son los de aquellas letras que realizan alguna operación en especial, como por ejemplo borrar letra, intro, etc... en la siguiente tabla se muestran las más importantes.

Funciones del sistema

Las funciones de sistema estan destinadas a operaciones de ms-dos sin necesidad de avandonar nuestra aplicación y sin perder el control de la ejecución a favor del sistema operativo. todas estas funciones se destinan al trabajo con ficheros, por ejemplo copiar, renombrar, etc...

Ventanas

Clipper ofrece la posibilidad de trabajar con la pantalla o parte de ella a través de funciones destinadas a salvar la información que se muestra en ellas. las operaciones o pasos a realizar son siempre iguales. primero debemos guardar la pantalla y seguidamente deberemos restaurarla.

Funciones de impresión

Todas estas funciones trabajar para configurar la impresión de resultados de una aplicación. no depende de la impresora ni de la máquina, es decir, que no debe importarnos que la impresora sea laser o matricial. A la hora de la impresión se puede configurar el tipo de letra con el que se va a imprimir el texto. la función es chr que la hemos visto ya. lo único que debemos asignarle un valor numérico y una constante que sirve para especificar el tipo de letra. say chr(num)+ “constante” bases de datos En una base de datos se encuentra un conjunto de información organizada, de forma que ésta pueda ser recuperada rápidamente. Clipper proporciona la velocidad facilidad que los gestores no pueden alcanzar. no hace falta tener conocimientos profundos del gestor de base de datos puesto que a través de Clipper se realizan todas las operaciones, el gestor solo será utilizado para crear el esqueleto de la base de datos. El primer paso para trabajar con bases de datos es activar las bases con las que vamos a trabajar y los índices si son necesarios. Lógicamente el esqueleto lo debemos tener creado, podemos utilizar la aplicación dbu.

Compilación y prueba de un programa

Aquí es bueno puntualizar la diferencia existente entre un compilador y un interpretador. clipper es un compilador que proporciona gran velocidad a una aplicación por cuanto traduce el lenguaje clipper al lenguaje de máquina una sola vez, mientras que un interpretador como dbase, tiene que convertir en lenguaje de máquina todas las instrucciones cada vez que esta son usadas.

clipper orientado a objetos

Si bien clipper no es un lenguaje para programación orientada a objetos, introduce algunos conceptos utilizados en este tipo de lenguajes. clipper 5.xx maneja solo 5 clases, no pudiendo crear más clases ni elementos para las clases ya existentes, las clases manejadas por clipper son: error, get, tbrowse y tbcolumn.

clipper en la red

Se puede decir que el único requerimiento de clipper para trabajar en una red de área local (lan), es que ésta debe respaldar la llamada de clipper a la función del dos ya que clipper usa exclusivamente llamadas al dos para todas sus operaciones relacionadas con la red.Dicho de otra forma una aplicación desarrollada en clipper corre en cualquier lan diseñada en el standard del dos.

Características

  • Modalidad compartida, para permitir el uso a dos o mas usuarios de un mismo archivo.
( set exclusive off )
  • Modalidad exclusiva, que anula la capacidad de compartir archivos.

( set exclusive on, use <nomarch> exclusive )

  • Bloqueo lógico, que evita que dos o mas usuarios actualicen el mismo archivo

simultáneamente. ( flock() )

  • Comprobación del bloqueo lógico de archivos, por medio de dos funciones.

( flock() y rlock() )

  • Desbloqueo de archivos, regresando a la modalidad compartida.
  • Uso de la impresora compartida de la red.
  • Comprobación de errores de la red, para determinar si se ejecutó exitosamente una orden.

Fuentes