6








                                      
                                           
                           LA BIBLIOTECA DE CDS/ISIS PASCAL
          ________________________________________________________________



          A. Presentaci¢n general

          La biblioteca de CDS/ISIS Pascal contiene una colecci¢n de proce-
          dimientos y funciones predefinidas,  que  pueden  clasificarse en
          dos grandes categor¡as: procedimientos generales y procedimientos
          de CDS/ISIS.  Actualmente se encuentran disponibles  los procedi-
          mientos y funciones predefinidos siguientes[].

          1. Procedimientos y funciones generales

          a. Administraci¢n de la pantalla

          ATTR          establece atributos de la pantalla
          BOX           dibuja un recuadro
          CHATTR        cambia los atributos de la pantalla
          CLEARBOX      limpia el contenido de un recuadro
          CLEARDATA     limpia el  rea de datos (l¡neas 1-21)
          CLEARLN       limpia linea
          CLEARMSG      limpia  rea de mensajes (l¡neas 22-24)
          CLEAR         limpia la pantalla
          CURSOR        establece posici¢n del cursor
          GETCC         obtiene posici¢n del cursor (columna)
          GETCL         obtiene posici¢n del cursor (l¡nea)
          PAGE          selecciona p gina activa
          SAVESCR       guarda p gina activa
          SCROLL        recorre texto en una ventana (v 2.32)

          b. Administraci¢n del teclado

          AUTOTYPE      entrada de datos simulando el teclado
          DEFKEY        define tecla de funci¢n
          INKEY         entrada de un caracter (con eco)
          KBDKEY        entrada de un caracter (sin eco)
          KEYDEF        obtiene definici¢n de tecla (v2.32)

          c. Conversi¢n de tipos

          CHR           convierte real a caracter
          ENCINT        convierte real a cadena (entero)
          ENCREAL       convierte real a cadena
          ORD           convierte caracter a real
          VAL           convierte cadena a real




                                         14








          d. Manejo de cadenas

          POSITION      encuentra posici¢n de cadena
          SIZE          longitud de cadena
          SUBSTR        sub-cadena
          UC            convierte a may£sculas

          e. Varios

          ASSIGN        asigna nombre de archivo
          DATESTAMP     obtiene fecha y hora
          FILEXIST      verifica existencia de un archivo
          EXEC          ejecuta otro programa
          USES          define uso recurrente (v 2.32)

          2. Procedimientos y funciones de CDS/ISIS

          a. Sistema

          LANG          idioma actual
          MENU          despliega men£ del sistema
          MSGTEXT       obtiene mensaje del sistema
          MSG           despliega mensaje del sistema
          PATH          obtiene ruta definida en SYSPAR.PAR i en dbn.PAR
          SETLANG       define idioma de dialogo
          SYSTEM        ejecuta comandos del sistema operativo (VAX y v3.0)
          SYSVARS       obtiene variables del sistema (v2.32)

          b. Base de datos

          CLOSE         cierra base de datos
          DBN           nombre de base de datos activa
          LOCK          bloquea base de datos (solo VAX)
          MAXMFN        siguiente MFN a ser asignado
          OPEN          abre base de datos
          UNLOCK        desbloquea base de datos (solo VAX)

          c. Archivo maestro

          CREATE        crea nuevo registro (interactivamente)
          DELETE        cancela registro
          FIELDN        encuentra n£mero de campo
          FIELD         obtiene contenido de campo
          FLDADD        agrega campo
          FLDCHA        cambia campo
          FLDDEL        cancela campo
          FLDMOD        modifica campo
          FLDREP        reemplaza campo
          FLDTAG        obtiene etiqueta del campo n (v2.32)
          MAXSET        obtiene n£mero de expresiones usadas (v2.32)
          MODIFY        modifica registro (interactivamente)
          NEWREC        crea nuevo registro (batch)
          NFIELDS       n£mero de campos en un registro
          NOCC          n£mero de ocurrencias de un campo
          NPOSTS        obtiene n£nero de postings (v2.32)
          OCCSEP        obtiene separador de campos repetibles (v2.32)


                                         15








          RECORD        obtiene registro de archivo maestro
          UPDATE        actualiza registro

          d. Archivo invertido

          DELTERM       cancela trmino del diccionario
          FIND          obtiene trmino del diccionario
          NXTPOST       obtiene siguiente apuntador (posting)
          NXTTERM       obtiene siguiente trmino de diccionario
          POSTING       obtiene componente apuntador (posting)
          UPDIF         actualiza archivo maestro

          e. B£squeda

          FLUSH         borra expresiones de b£squeda (v2.32)
          NXTPOS        obtiene MFN de siguiente registro recuperado
          RECALL        obtiene expresi¢n de b£squeda utilizada (v2.32)
          SEARCH        ejecuta expresi¢n de b£squeda de CDS/ISIS
          SETPOS        obtiene MFN de registro recuperado

          f. Formateo

          FMTNAME       nombre de formato activo
          FORMAT        ejecuta formato de despliegue
          GETFMT        define formato de despliegue
          LINES         n£mero de l¡neas producidas por formato
          NXTLINE       obtiene siguiente l¡nea producida por el formato

          g. Edici¢n y captura

          EDITMODE      obtiene modo inicial de edici¢n (v2.32)
          DATAENTRY     edita una p gina de hoja de trabajo
          DUMMYREC      establece un registro virtual
          EDIT          edita cadena con editor de campo de CDS/ISIS
          WORKSHEET     selecciona hoja de trabajo
          WSNAME        obtiene nombre de hoja de trabajo (v2.32)

          A continuaci¢n se presenta una descripci¢n detallada de todos los
          procedimientos y funciones (en orden alfabtico).  N¢tese que los
          par metros  VAR son soportados  para  procedimientos  y funciones
          predefinidos.

          B. Descripci¢n funcional (funciones 1 a 33)

           1. Procedimiento ASSIGN (s1, s2: string);
            (asigna)

          Asigna los archivos estandar INP o OUT a un archivo o dispositivo
          definido por el usuario.

          s1  es una expresi¢n de cadena (string) igual a INP o a OUT

          s2   es una  expresi¢n de cadena (string)  que produce ya  sea un
          nombre v lido de archivo para que lo use el sistema operativo (el
          cual puede incluir informaci¢n sobre el  dispositivo  -drive- y/o
          directorio), o un nombre estandar de un dispositivo (p.ej. PRN).


                                         16









          Se acepta la reasignaci¢n de un  archivo ya  asignado. El archivo
          actual es  cerrado autom ticamente.  En  algunos casos  puede ser
          necesario  un  ASSIGN virtual  (dummy),  para forzar el cierre de
          OUT,  antes de asignar ese archivo a INP.  Un  archivo asignado a
          INP ya debe existir. En caso de duda, debe primero verificarse la
          existencia por medio de la funci¢n FILEXIST.  Adem s, puede obte-
          nerse informaci¢n sobre la  ruta,  por medio de la  funci¢n PATH,
          para archivos en donde este  dato puede depender de  SYSPAR.PAR o
          de dbn.PAR.

          Nota para las versiones 2.32, 2.34 y 3.0

          El procedimiento ASSIGN ha sido modificado para permitir en forma
          expl¡cita el cerrar un archivo,  o dejarlo abierto al salir de un
          programa. Los nuevos par metros son los siguientes:

          ASSIGN(f,'') cierra el archivo f (INP o OUT)

          ASSIGN(f,'xxxx/k')  abre el archivo 'xxxx'  y lo  deja abierto al
             salir.  N¢tese que en este caso el programador  debe cerrar el
             archivo tan pronto sea posible, ya que en caso contrario otras
             funciones de CDS/ISIS pueden abortar por falta de "handles" en
             el sistema operativo.  El siguiente ejemplo ilustra  el uso de
             esta caracter¡stica en una salida de formato para desplegar un
             archivo ASCII.

           Program ASCII(s1:string; lw,occ:real; s2:string){FORMAT};
           begin
           if occ=1 then assign('inp',s1|'/k');
           if not eof(inp)
            then begin
             readln(inp,s2);
             if s2='' then s2:=' ';
             end
            else begin
             assign('inp','');    {cierra INP}
             s2:='';
             end;
           end;

          Suponiendo que el campo 10  de un registro contiene  el nombre de
          un archivo ASCII, este puede desplegarse usando la salida de for-
          mato anterior, del modo siguiente:

           ... (&ASCII(v10)/) ...

           2. Procedimiento ATTR (fill: string; attr, lin, col, len: real);

          Limpia el  rea de la pantalla de len caracteres de longitud, ini-
          ciando desde la l¡nea lin,  columna col. El atributo de la panta-
          lla en el  rea que se borr¢ es definido como attr,  y esa  rea es
          llenada con el primer  caracter de fill.  El valor de  attr puede
          ser cualquiera de los atributos estandar de CDS/ISIS:




                                         17








          -2   Fondo de la pantalla     2  Grueso
          -1   Area de mensajes         3  Subrayado
           0   Normal                   4  Parpadeo
           1   Video inverso            5  Invisible

          El atributo real depender  de los valores definidos para CDS/ISIS
          usando la opci¢n A del men£ de servicios de utileria  del sistema
          xXM1.

          ATTR tambin posicionar  el cursor en la l¡nea lin, columna col.

           3. Procedimiento AUTOTYPE (s1: string);
            (autotecleo)

          Inserta la cadena s1  en el b£ffer interno del teclado. Todas las
          llamadas  subsecuentes  a INKEY o KBDKEY  obtendr n los  datos de
          este buffer,  mientras haya caracteres disponibles. Cuando se va-
          cia el buffer interno,  se restablece la entrada  normal a travs
          del teclado.

          Si el buffer  interno ya contiene uno o m s  caracteres,  s1 ser 
          insertada antes de estos. Por lo tanto, normalmente no debe usar-
          se AUTOTYPE m s de  una vez en  un programa.  Si los caracteres a
          ser autotecleados son recolectados  en  diversos  puntos del pro-
          grama,  puede utilizarse una cadena para guardarlos hasta  que se
          obtenga la secuencia final, y entonces se procede a autoteclearla
          antes de salir.

          Si se usa AUTOTYPE en una llamada  de men£,  n¢tese que la acci¢n
          indicada por el  par metro del programa,  se ejecuta antes  de la
          cadena autotecleada.

          s1  puede contener en forma codificada los c¢digos de identifica-
          ci¢n de teclas (scan codes)  y/o caracteres de control para iden-
          tificar teclas  que no  generan un  c¢digo  ASCII (p.ej.  F1, F2,
          etc.).  Los c¢digos de identificaci¢n de teclas  y los caracteres
          de  control  se  codifican  usando  las  mismas  reglas  para los
          par metros de definici¢n de teclas en SYSPAR.PAR (vase "Instala-
          ci¢n del sistema" en el Manual de referencia de CDS/ISIS).

          Este procedimiento es particularmente £til cuando  se desea plan-
          tear una b£squeda  para su proceso,  y retomar el  control dentro
          del programa, sin intervenci¢n del usuario. Por ejemplo:

          autotype (' ');
          s:=search('educaci¢n * adultos');
          x:=inkey;

          Normalmente,  despus  de realizar la  b£squeda, CDS/ISIS realiza
          una pausa para permitir que el operador lea  los resultados. Esta
          pausa es en realidad un INKEY.  Tan pronto como se  teclea un ca-
          racter,  CDS/ISIS a su vez lo "autoteclea" de nuevo (esto permite
          que el  usuario teclee  una opci¢n  v lida  del men£,  con lo que
          esta acci¢n puede ejecutarse de  inmediato sin necesidad  de des-
          plegar el men£).  En el ejemplo anterior,  no habr  pausa despus
          de ejecutar la b£squeda 'educaci¢n * adultos' (debido al AUTOTYPE


                                         18








          que precede a la b£squeda).  El INKEY incluido despus de la b£s-
          queda  es necesario para eliminar  el espacio  (' ') autotecleado
          desde el buffer interno.

           4. Procedimiento BOX (lin, col, h, w, frame: real);
            (cuadro o marco)

          Dibuja un marco rectangular de h l¡neas de altura (high)  y w ca-
          racteres de ancho (wide), iniciando en la l¡nea lin, columna col.
          El rect ngulo es  dibujado con  una l¡neas simple (si  frame=1) o
          con una l¡nea doble (si frame=2).

          Nota sobre la implementaci¢n en VAX:  En las  terminales VAX, los
          cuadros son implementados a travs del juego alterno  de caracte-
          res (G0).  Para marcos de  l¡nea sencilla el conjunto  gr fico se
          designa como [ESC(0],  y para  marcos de l¡nea doble  el conjunto
          gr fico es designado [ESC(2]. Como esto £ltimo es normalmente una
          caracter¡stica  opcional,  antes  de usarla debe  verificarse que
          efectivamente se encuentre disponible en la terminal que  se uti-
          liza.

           5. Procedimiento CHATTR (attr, lin, col, len: real);

          Cambia el  atributo de la  pantalla en el   rea que  inicia en la
          l¡nea lin,  columna col,  por len caracteres de longitud al atri-
          buto attr.  El texto que pudiera estar  presente  en  la pantalla
          dentro de esta  rea no se borra. Los valores de attr son los mis-
          mos que para el procedimiento ATTR.

          Nota sobre portabilidad: Este procedimiento no est  disponible en
          sistemas VAX ni WANG. Si se usa en uno de estos sistemas es igno-
          rado.

           6. Funci¢n CHR (n: real): string;

          Esta funci¢n  regresa una cadena  de un caracter  que contiene el
          caracter  cuyo  c¢digo ASCII  es n.  Por ejemplo, CHR(65) regresa
          'A'. N¢tese que n debe estar en el rango de 0 a 255; en caso con-
          trario,  el  caracter  regresado por la  funci¢n es  CHR(n m¢dulo
          256).

           7. Procedimiento CLEAR;

          Borra toda la pantalla.  El atributo de la pantalla  se establece
          como -2  (fondo de la  pantalla)  y el cursor se posiciona  en la
          l¡nea 1, columna 1.

           8. Procedimiento CLEARBOX (lin, col, h, w, attr: real);

          Borra  un  rectangulo  (lin,  col,  h, w como en el procedimiento
          BOX). El  rea borrada se establece con atributo attr. Los valores
          de attr son los mismos que en el procedimiento ATTR.






                                         19








           9. Procedimiento CLEARDATA;

          Borra el  rea de datos  de la pantalla  (l¡neas 1  a 21). El  rea
          borrada se  define  con atributo -2  (fondo de la pantalla)  y el
          cursor se posiciona en la l¡nea 1, columna 1.

           10.  Procedimiento CLEARLN;

          Borra la l¡nea actual a partir de la posici¢n del cursor.

           11.  Procedimiento CLEARMSG;

          Borra  la zona de  mensajes de la  pantalla (l¡neas 22  a 23). El
           rea borrada se define con atributo -1 (atributo del  rea de men-
          sajes) y el cursor se posiciona en la l¡nea 22, columna 1.

           12.  Procedimiento CLOSE;

          Cierra (y desbloquea, en caso necesario) la base de datos activa,
          si la hay.

           13.  Funci¢n CREATE: real;

          Realiza  la misma funci¢n  que la opci¢n N del men£  xXE1  de los
          servicios de captura de datos (creaci¢n de un nuevo registro). El
          valor de la funci¢n es el MFN del registro creado.

          En respuesta a CREATE,  CDS/ISIS selecciona  la  hoja  de trabajo
          actualmente activa y la  presenta  en la pantalla.  La captura de
          datos procede normalmente hasta que el operador sale de esta fun-
          ci¢n.  El registro creado no est  disponible para proceso despus
          de CREATE.  Si se requiere, se debe re-leer el registro usando la
          funci¢n RECORD.  Si se desea interactuar con el  operador durante
          la creaci¢n de un registro, usese la funci¢n DATAENTRY.

           14.  Procedimiento CURSOR (lin, col: real);

          Posiciona el  cursor  en  la  l¡nea lin,  columna col. N¢tese que
          ATTR,  CHATTR,  CLEAR,  CLEARDATA, CLEARMSG tambin posicionan el
          cursor.

           15.  Funci¢n DATAENTRY (var s1: string): real;

          Esta funci¢n permite controlar la creaci¢n y/o edici¢n  de un re-
          gistro,  e interactuar con el operador.  Antes de usar  esta fun-
          ci¢n,  debe asegurarse que  el registro est   disponible. Esto se
          hace ya sea usando  la funci¢n RECORD (si se  trata de  editar un
          registro que ya existe),  o la funci¢n NEWREC (si el  registro se
          va a crear). Para la edici¢n de registros, CDS/ISIS usar  la pri-
          mera p gina de la hoja de trabajo activa en ese momento (se puede
          seleccionar la hoja de trabajo  a utilizar con  la funci¢n WORKS-
          HEET, si esto es necesario).

          DATAENTRY edita solo una p gina a la vez. Si se necesita una hoja
          de trabajo con varias p ginas,  se debe definir  cada p gina como
          una hoja de trabajo,  y seleccionar la apropiada antes  de llamar


                                         20








          DATAENTRY.  Debido a que se  recobra el  control despus  de cada
          p gina,  se puede seleccionar la p gina siguiente dependiendo del
          contenido del registro,  tal  como  se muestra en el  ejemplo si-
          guiente:

          En este ejemplo, la edici¢n del registro se inicia con la hoja de
          trabajo A, despus continua con la hoja B, C o D, dependiendo del
          contenido del campo 10  (que podr¡a ser por  ejemplo un indicador
          del tipo de registro).

             rc:=record(n) {lee registro n}
             if rc=0 then
             begin
              rc:=worksheet('a'); {selecciona hoja de trabajo a}
              if rc=0 then
               begin
               rc:=dataentry(x);{realiza captura}
               if rc <>0 then checa else
               case x of {checa opcion de salida}
               ' ': begin
                t:=field(fieldn(10,1)); uc(t);
                case t of {selecciona siguiente hoja de trabajo dependiendo
          de campo 10}
                'M': rc:=worksheet('b');
                'S': rc:=worksheet('c');
                'C': rc:=worksheet('d');
                end;
                end;
               ....
               if (x=' ')and (rc=0) then
                 rc:= dataentry(x);
               if (position(' EXN', x, 1)>0 and 
                   (rc=0) then
                update else checa;
               end else writeln ('Hoja de trabajo no encontrada');
              end else writeln('Registro no hallado');

          N¢tese que tambin puede realizarse una validaci¢n de  los campos
          despus de editar una p gina.

          Al salir,  el valor de la  funci¢n quedar  definido  del modo si-
          guiente:

            0 La edici¢n tuvo xito
             1 La hoja de trabajo es inadecuada para editar el registro (un
          campo excede la longitud especificada en la hoja de trabajo)

             2  La edici¢n ocasion¢ que se excediera la longitud m xima del
          registro.
            3 No se encontr¢ la hoja de trabajo

          Cuando se reporta una condici¢n de error,  el registro se deja en
          la condici¢n original (sin cambios).





                                         21








          s1  contendr  la opci¢n de salida seleccionada por el operador al
          terminar de editar la p gina.  es responsabilidad del programador
          procesar esta solicitud. Las opciones de salida que puede escoger
          el operador se listan a continuaci¢n:

            blanco   p gina siguiente (si la hay),  o salir y actualizar el
                     registro
            B  P gina precedente

            C  Cancelar (salir sin actualizar el registro)

            T  Cancelar y terminar rango (en caso de que se haya previsto
               la posibilidad de editar un grupo de registros)

            E  Salir y actualizar  el  registro  (no  se despliegan p ginas
               adicionales si las hubiera)

            D  Borrar el registro

            N  Salir y actualizar el registro, y despus crear uno nuevo

          Si la opci¢n de salida requiere de la actualizaci¢n del registro,
          el programador deber  realizar esta operaci¢n  usando el procedi-
          miento UPDATE.  N¢tese que la opci¢n "blanco"  puede implicar una
          actualizaci¢n si esta fu la £ltima p gina de la hoja de trabajo.

          Mientras se edite un registro con este  mtodo  no debe accesarse
          ning£n otro registro,  ya que de hacerlo se perder n  los cambios
          realizados al registro que se est  procesando. Sin embargo, puede
          accesarse el archivo invertido en caso necesario.

           16.  Funci¢n DATESTAMP: string;

          Esta funci¢n regresa una cadena de 18  caracteres que contiene la
          fecha y la hora (del sistema operativo), en el formato siguiente:

          MM-DD-AA  HH:MM:SS

          donde:  MM es el mes, DD el d¡a y AA el a¤o; y HH la hora, MM los
          minutos,  y SS los segundos (n¢tese que hay dos espacios entre la
          fecha y la hora).

          Debido a que esta funci¢n depende directamente del sistema opera-
          tivo,  su precisi¢n depende del ajuste adecuado de la  fecha y la
          hora en el sistema operativo. En particular, en aquellas computa-
          doras que no preservan autom ticamente la fecha y  la hora cuando
          se apagan,  es esencial  que estos datos se  restablezcan manual-
          mente a sus valores correctos cada vez que se  enciende la compu-
          tadora.

           17.  Funci¢n DBN: string;

          Regresa el  nombre  de la base  de datos seleccionada en  ese mo-
          mento, o una cadena vac¡a si no se ha seleccionado ninguna.




                                         22








           18.  Procedimiento DEFKEY (k: real; s:string);

          Define s como el valor de la tecla de  funci¢n k.  k es el c¢digo
          de barrido (scan code) de identificaci¢n de la tecla que se desea
          definir.  Este procedimiento es quivalente a definir una tecla de
          funci¢n en  SYSPAR.PAR  (vase la secci¢n   "Instalaci¢n del sis-
          tema" en el Manual de referencia de CDS/ISIS). Por ejemplo:

          defkey(67, substr(datestamp, 1,8));

          ocasionar  que la tecla <F9> (c¢digo de barrido 67) autoteclee la
          fecha de hoy.

           19.  Procedimiento DELETE;

          Marca el  registro  activo como borrado l¢gicamente  (el registro
          activo es el £ltimo que fu leido a travs de la  funci¢n RECORD,
          o definido a travs de la funci¢n NEWREC).  Una llamada a DELETE,
          sin una llamada previa a RECORD o NEWREC es ilegal,  y causar  la
          terminaci¢n del programa.

          Despus de DELETE, el registro activo ya no est  disponible.

           20.  Funci¢n  DELTERM (t: string): real;

          Borra el trmino t del diccionario del  archivo invertido. N¢tese
          que solo  se pueden borrar  aquellos trminos que  actualmente no
          tienen apuntadores (postings).

          El valor que regresa la funci¢n es 0  si la operaci¢n tuvo xito,
          y diferente de cero si no fu posible realizarla  (p.ej. intentar
          borrar un trmino con uno o m s apuntadores asociados).

           21.  Procedimiento DUMMYREC;
            (registro virtual)

          Al igual que NEWREC,  define un nuevo  registro vac¡o, utilizable
          para captura de  datos.  Sin embargo,  DUMMYREC  no incrementa el
          n£mero m ximo del MFN de la base de datos, y el registro definido
          no puede ser grabado en la base  de datos.  En realidad, DUMMYREC
          no requiere  que haya  una base  de datos abierta.  Si se intenta
          utilizar UPDATE o DELETE en relaci¢n con un registro definido con
          DUMMYREC, se genera un error de operaci¢n (run time).

          El prop¢sito  de DUMMYREC es  facilitar la obtenci¢n  de datos de
          una hoja  de  trabajo utilizando  las facilidades  de  captura de
          CDS/ISIS, de una manera semejante a la que usa el propio CDS/ISIS
          en las hojas de trabajo del sistema,  tales como la hoja  de tra-
          bajo de impresi¢n.

          Las  hojas de  trabajo a ser usadas  en relaci¢n con  DUMMYREC, a
          diferencia de  las hojas de  trabajo del  sistema convencionales,
          que son creadas con los servicios de ISISUTL, deben ser generadas
          a travs de los servicios de ISISDEF.  Esto se debe a que la eti-
          queta de los campos definidos en la hoja  de trabajo, identifican
          cada pieza de  informaci¢n capturada (los  campos de una  hoja de


                                         23








          trabajo del sistema no tienen etiquetas ya  que CDS/ISIS reconoce
          los campos por su posici¢n relativa). Para definir estas hojas de
          trabajo se puede utilizar una base de datos cualquiera  que ya se
          tenga creada,  o definir una espec¡ficamente para este prop¢sito.
          Sin embargo,  para que sea  posible recuperarla aun cuando  no se
          haya seleccionado una base de datos,  se les debe asignar un nom-
          bre que tenga una "Y"  en la  segunda posici¢n;  esto asegura que
          sean almacenadas  en el directorio  de los men£s  (definido en el
          par metro 2 de SYSPAR.PAR).

          Una  vez que se  ha  definido  un registro (virtual)  a travs de
          DUMMYREC,  se puede capturar informaci¢n a travs  de  la funci¢n
          DATAENTRY, una vez que se seleccion¢ la hoja de trabajo adecuada.
          Una vez capturados,  pueden recuperarse los datos a  travs de la
          funci¢n FIELD.

            22.   Funci¢n EDIT (var s:  string; max, lin, col, wsize, attr:
          real; fill: string): real;
            (editar)

          Esta funci¢n permite editar un campo mediante el editor de campos
          de CDS/ISIS. Los par metros son los siguientes:

            s cadena a ser editadea (despus de EDIT, s contendr  la cadena
          resultante de la edici¢n).  Observese que s puede  estar vac¡a al
          inicio.

            max longitud m xima (hasta 255 caracteres) que puede   alcanzar
          la cadena durante la edici¢n

             lin,col  posici¢n de la  l¡nea y columna  correspondiente a la
          esquina superior izquierda de la ventana de edici¢n

            wsize tama¤o de la ventana de edici¢n (si wsize < max, entonces
          el contenido del campo se  presentar   solo  en  forma parcial, y
          podr  recorrerse (scroll)  con las teclas de flechas hacia arriba
          y hacia abajo)

            attr atributo de pantalla de la ventana de edici¢n

             fill caracter que ser  usado para rellenar  las posiciones va-
          c¡as de la ventana de edici¢n

          EDIT borra la ventana de edici¢n y  la llena con  el contenido de
          la cadena que debe editarse. Durante la edici¢n puede usarse toda
          la  gama  de funciones del  editor de campos  de CDS/ISIS. N¢tese
          tambin que la l¡nea  24  es usada para el mensaje  que indica el
          modo de edici¢n (inserta/reemplaza).

          Al salir de la funci¢n,  el valor de esta indica el c¢digo de fi-
          nalizaci¢n de la edici¢n de la siguiente forma:

            0 Enter     la edici¢n termin¢ normalmente
            1 F1        se oprimi¢ la tecla de ayuda
            2 <TAB>     se oprimi¢ la tecla TAB
            3 F2        se borr¢ la cadena


                                         24








            4 <ESC>     se oprimi¢ la tecla ESC
            5 <PgDn>    se oprimi¢ la tecla PgDn

          Es responsabilidad del programador interpretar  el significado de
          las distintas opciones de terminaci¢n. N¢tese sin embargo, que si
          se modific¢ la cadena,  <ESC>  devuelve en s la cadena en su ver-
          si¢n modificada. Si desea implementar la funci¢n est ndar de esta
          tecla,  o sea restaurar el campo con su valor  original e ignorar
          cualquier cambio realizado,  debe resguardarse el  valor original
          antes de llamar a EDIT.

           23. Funci¢n EDITMODE:real; versi¢n 2.32, 2.34 y 3.0

             Regresa el modo inicial de edici¢n (definido  con el par metro
          10 de SYSPAR.PAR), de acuerdo con lo siguiente:

            0 - Modo de reemplazo

            1 - Modo de inserci¢n

           24.  Funci¢n ENCINT (n1, n2: real): string;

          Trunca el valor de n1 a un entero y lo convierte a su representa-
          ci¢n ASCII con una precisi¢n minima de n2 d¡gitos.

           25.  Funci¢n ENCREAL (n1, n2, n3: real): string;

          Convierte n1 a su representaci¢n ASCII. n2 es el ancho m¡nimo del
          campo, y n3 el n£mero de cifras decimales.

           26.  Procedimiento EXEC (s1: string);

          Ejecuta el programa s1.  N¢tese que el control no regresa al pro-
          grama actual.  EXEC puede usarse  s¢lo en programas batch.  Si se
          usa en una llamada de usuario los resultados son impredecibles.

           27.  Funci¢n FIELD (n: real): string;

          Regresa  el valor del  n-esimo campo del registro  actual. N¢tese
          que n no es la etiqueta del campo,  sino el n£mero del  campo re-
          querido, mismo que puede obtenerse mediante la funci¢n FIELDN.

          Por ejemplo:

          s:=field (fieldn (10,1));

          entregar  en s el valor de la primera ocurrencia del  campo 10, o
          una cadena vac¡a si el campo 10 no est  presente en el registro.

           28.  Funci¢n FIELDN (tag, occ: real): real;

          Regrasa el n£mero de campo de un determinado campo en el registro
          actual.  El n£mero de campo es  el n£mero ordinal o  de secuencia
          del elemento del directorio que corresponde a  la  occ-esima ocu-
          rrencia del campo con etiqueta tag. el n£mero de campo de un cam-
          po inexistente es 0.


                                         25









           29.  Funci¢n FILEXIST (f: string): real;

          Esta  funci¢n regresa 0  si el archivo  f existe.  f debe ser una
          expresi¢n de cadena que genere  un nombre de  archivo v lido para
          el  sistema operativo que se  est  utilizando.  Se puede usar la
          funci¢n PATH, cuando la ruta del archivo dependa de SYSPAR.PAR, o
          de dbn.PAR. Por ejemplo:

          n:=filexist(path('sys',4) | 'miarch.wrk');

          regresar  el valor 0 si el archivo miarch.wrk existe en el direc-
          torio de trabajo definido en el par metro 4 de SYSPAR.PAR.

           30.  Funci¢n FIND (var s1: string): real;

          Busca s1  en el diccionario de la base de datos  actual y regresa
          el valor 0  si existe.  Si el trmino no existe,  s1 contendr  el
          trmino inmediato superior o una cadena vac¡a si se  llega al fi-
          nal del diccionario.  Despus de FIND se puede usar  NXTTERM para
          recuperar secuencialmente los trminos del diccionario.

           31.  Funci¢n FLDADD (tag, n: real; s: string): real;

          Agrega un nuevo campo al registro actual.  tag es la etiqueta del
          campo,  y s es el contenido del campo que se va agregar. El campo
          es agregado antes del n-esimo campo existente en el  registro ac-
          tualmente (se puede especificar n=1  si el orden no es importante
          o  n=NFIELDS+1  para agregar una  nueva  ocurrencia  de  un campo
          repetible despus de la £ltima ocurrencia presente en la actuali-
          dad).

          El valor regresado es 0 si la operaci¢n tuvo xito o 1 si no pudo
          realizarse (p.ej. por no haber espacio en el registro).

           32.  Funci¢n FLDCHA (n: real; s1, s2: string): real;[]

          Reemplaza s1  con s2  en el n-esimo campo del registro  actual (n
          debe ser obtenido con la  funci¢n FIELDN).  El valor que devuelve
          es 0 si la operaci¢n fu realiza con xito, o 1 si no pudo reali-
          zarse (p. ej. no se encontr¢ s1).

           33.  Funci¢n FLDDEL (n: real): real;

          Borra el campo n-esimo del registro  actual (n debe  ser obtenido
          con la funci¢n FIELDN). El valor que regresa es 0 si la operaci¢n
          se realiz¢ con xito,  o 1  si no pudo llevarse a cabo (p. ej. el
          campo no existe).










                                         26




: