6



          B. Descripci¢n funcional (funciones 34 a 86)

           34.  Funci¢n FLDMOD(n1, n2, n3: real; s: string): real;[3]

          Borra la parte del n1-esimo campo en el registro  actual (n1 debe
          ser obtenido con la funci¢n FIELDN)  iniciando  desde la posici¢n
          n2  de longitud n3 y la reemplaza con s1. El valor regresado es 0
          si la operaci¢n se realiz¢ con xito,  o 1  si no pudo realizarse
          (p.  ej. el campo no existe). A continuaci¢n se presenta un ejem-
          plo:

          rc:=fldmod(fieldn(10,1),5,8,'xxx');

                          Contenido del campo 10
                antes de fldmod         despus de fldmod

          International Corporations  Intexxxl Corporations

           35.  Funci¢n FLDREP (n: real; s: string): real;

          Reemplaza el contenido del campo n-esimo del registro  actual con
          s (n debe ser obtenido con la funci¢n FIELDN). El valor regresado
          es 0 si la operaci¢n tuvo xito, o 1 si no pudo realizarse (p.ej.
          el campo no existe).

           36. Funci¢n FLDTAG(n): real; (v2.32)

          Regresa la etiqueta del campo n-esimo del registro  activo.  n es
          el n£mero  del campo,  tal como  pudiera obtenerse de  la funci¢n
          FIELDN.  N¢tese que debe establecerse previamente un registro ac-
          tivo a travs de RECORD o de NEWREC, en caso contrario, el resul-
          tado es impredecible.

           37. Procedimiento FLUSH; (v2.32)

          Borra todas las expresiones de b£squeda utilizadas en la presente
          sesi¢n de trabajo.

           38.  Funci¢n FMTNAME: string;

          Esta funci¢n regresa el nombre del formato de  despliegue actual-
          mente seleccionado. Tambin puede devolver alguno de los siguien-
          tes nombres especiales:

            '' una cadena vacia indica que no hay formato disponible (p.ej.
          si aun no se abre una base de datos)

             * el formato activo fu definido por el usuario durante la se-
          si¢n  de  trabajo actual  (por  lo tanto,  no existe como archivo
          .PFT)

            ALL El formato activo es el formato interconstruido

           39.  Funci¢n FORMAT (lw: real): real;




                                         27








          Formatea el registro actualmente activo de acuerdo con el formato
          actualmente seleccionado, usando un ancho de l¡nea de lw caracte-
          res.  El valor regresado  es 0  si la operaci¢n tuvo  xito, o un
          c¢digo de error de formateo si se encontr¢ un error en el formato
          (el c¢digo regresado ser  uno de los que se listan  en la secci¢n
          "Lenguaje de formateo" en el Manual de referencia de CDS/ISIS).

          N¢tese que esta funci¢n  simplemente ejecuta el  formato; las l¡-
          neas producidas  se  almacenan en  una  rea de trabajo.  Se puede
          usar la funci¢n LINES  para determinar cuantas l¡neas  se genera-
          ron,  y la funci¢n NEXTLINE para obtener el contenido de cada l¡-
          nea.

           40.  Funci¢n GETCC: real;

          Regresa el n£mero de la columna  en que est  posicionado  el cur-
          sor.

           41.  Funci¢n GETCL: real;

          Regresa el n£mero de la l¡nea en que est  posicionado el cursor.

           42.  Procedimiento GETFMT (s: string);

          Define el formato de  despliegue  activo.  s puede ser un formato
          real en el lenguaje de  formateo de CDS/ISIS,  o el nombre  de un
          formato predefinido.  En este £ltimo  caso,  el nombre debe estar
          precedido por el signo @. Por ejemplo:

          GETFMT ('v24/v56(0,4)');
          GETFMT ('@xxx');

          N¢tese que el  formato definido con  este procedimiento reemplaza
          al formato activo en ese momento, y permanece en efecto como for-
          mato activo aun despus de que termina la  ejecucu¡n del programa
          que lo defini¢. Se puede usar la funci¢n FMTNAME para identificar
          el formato activo y guardarlo para restaurarlo antes  de terminar
          la ejecuci¢n del programa, en caso de que fuera necesario.

           43.  Funci¢n INKEY: string;

          Regresa el siguiente caracter oprimido en el teclado  (o que est
          disponible en el buffer interno de  AUTOTYPE).  Si el caracter es
          realmente generado en el teclado, ser  desplegado en la pantalla,
          mientras que los caracteres autotecleados nunca se despliegan.

          La  cadena que  regresa siempre es  de 1  caracter. N¢tese que la
          tecla <CR>  regresa un espacio. Despus de esta funci¢n el cursor
          siempre se posiciona en la columna 1 de la siguiente l¡nea.

           44.  Funci¢n KBDKEY (var c: string): real;

          Regresa en c el siguiente caracter tecleado ( que est disponible
          en al buffer interno de AUTOTYPE).  si c es un caracter ASCII, el
          valor de la funci¢n es 0, en caso contrario, es el c¢digo de ras-
          treo (scan code)  de la tecla que se oprimi¢ o  autotecle¢. En la


                                         28








          mayor¡a de los casos si el valor de la funci¢n es mayor que cero,
          entonces c se  define igual a  CHR(0).  En algunos casos tanto el
          valor de la funci¢n y el de ORD(c) son mayores que cero. A conti-
          nuaci¢n se incluyen algunos ejemplos:

                    Tecla oprimida      Valor de c     Valor de la funci¢n
                    --------------      ----------     -------------------
                         A                   A                    0
                         <F2>                CHR(0)              60
                         <ESC>               CHR(27)              1

          Se  puede usar el programa  de ejemplo  siguiente para determinar
          los valores exactos regresados por esta funci¢n (debe oprimirse x
          para salir del programa):

          program SCANC;

          var c: string;
          sc: real;

          begin
          repeat
          write ('Oprima una tecla ');
          sc:=kbdkey(c);
          Writeln('Codigo de rastreo: ',sc:3,' codigo ASCII: ', ord(c):3, '
          caracter: ', c);
          until (c='x') or (c='X');
          end.

           45. Funci¢n KEYDEF(n): string; (v2.32)

             Regresa el valor de  definici¢n de la  tecla asociada al "scan
          code"  'n'(definida por un  DEFKEY  previo o por  un par metro de
          definici¢n de teclas de SYSPAR.PAR). si la tecla no ha sido defi-
          nida, regresa una cadena vac¡a.

           46.  Funci¢n LANG: string

          Regresa una cadena de un caracter con el c¢digo de idioma actual-
          mente en vigor.

           47.  Funci¢n LOCK: real;

          Esta funci¢n solicita un bloqueo exclusivo de  escritura  para la
          base de  datos activa.  Si se  autoriza el bloqueo,  el valor que
          regresa la funci¢n es 0.  Con objeto de tener xito  en la obten-
          ci¢n de control exclusivo,  no puede haber otros  usuarios reali-
          zando operaciones de actualizaci¢n de la base de datos al momento
          en que se solicita el bloqueo.  Si se autoriza el bloqueo, ning£n
          otro usuario ser  autorizado  para realizar ninguna  operaci¢n de
          actualizaci¢n hasta que se quite el bloqueo.  Una vez que ha sido
          autorizado,  un bloqueo queda en efecto hasta que: (a) se ejecuta
          un procedimiento UNLOCK  (ver  m s adelante)  sea realizado en la
          misma base de datos;  (b) la base de datos es cerrada, ya sea ex-
          pl¡cita o impl¡citamente; o (c) se termina la sesi¢n.



                                         29








          La base de datos debe ser bloqueada cada vez que el programa rea-
          liza actualizaciones o escrituras  sobre el archivo  maestro o el
          invertido.  Esto es, si se ejecuta cualquiera de los procedimien-
          tos siguientes:  NEWREC, UPDATE, DELETE, CREATE, MODIFY, DELTERM,
          o UPDIF.  El intento de escribir sobre una base de datos sin lla-
          mar previamente a la  funci¢n LOCK  (o  ognorar una  solicitud de
          bloqueo denegada), terminar  la sesi¢n en forma anormal.

          Nota sobre portabilidad:  La funci¢n LOCK,  en la forma en que se
          describe,  solo se implementa en la versi¢n para VAX. En sistemas
          IBM PC o WANG, donde no puede realizarse el acceso simul neo a la
          base de datos,  esta funci¢n siempre regresa el  valor 0  (o sea,
          siempre se autoriza el acceso).  Si el programa que se est  desa-
          rrollando con la intenci¢n de  usarlo  tanto en VAX,  como en PC,
          entonces siempre debe usarse  LOCK en los lugares  apropiados, de
          otro modo la aplicaci¢n no ser  portable.

           48.  Funci¢n MAXMFN: real;

          Regresa el pr¢ximo n£mero del MFN a ser asignado  en  la  base de
          datos actual.

           49. Funci¢n MAXSET: real;  (v 2.32)

             Regresa el n£mero de expresiones  de b£squeda ejecutadas (esto
          es igual al n£mero desplegado por la opci¢n R del men£ de recupe-
          raci¢n).

           50.  Funci¢n MENU (s: string): string;

          Despliega el men£ del sistema s, y regresa la opci¢n seleccionada
          por el usuario.  La cadena que regresa siempre es de  1 caracter.
          La cadena s debe contener el nombre del men£ a ser desplegado (no
          el nombre del archivo), y este nombre debe ajustarse a la conven-
          ci¢n de CDS/ISIS para nombres de men£s, o sea, el primer caracter
          debe ser el c¢digo de idioma, y el segundo debe ser X. p.ej. EXA-
          BC.

          N¢tese que CDS/ISIS  seleccionar  autom ticamente  la versi¢n del
          men£ en el idioma activo en  ese momento.  Es responsabilidad del
          usuario  asegurarse de que hayan sido  definidas  previamente las
          versiones del men£ en los idiomas requeridos.

           51.  Funci¢n MODIFY (n real): real;

          Realiza la misma funci¢n que la opci¢n E del men£ de servicios de
          captura de datos xXE1. n es el MFN del registro a ser editado. El
          valor que regresa la funci¢n e 0  si la operaci¢n se  realiz¢ co-
          rrectamente,  o diferente de cero si la operaci¢n no  pudo reali-
          zarse.








                                         30








           52.  Procedimiento MSG (n: real);

          Despliega el mensaje de CDS/ISIS n£mero n (en el idioma seleccio-
          nado en ese momento).  El mensaje se despliega a partir de la po-
          sici¢n  actual  del cursor,  y despus del  despliegue, el cursor
          queda posicionado al final del texto del mensaje.

          Si  n no  corresponde a un  n£mero  de  mensaje  v lido, entonces
          CDS/ISIS desplegar  MSG-n [text not found]  (Mensage  n [texto no
          hallado]).

           53.  Funci¢n MSGTEXT (n: real): string;

          Regresa el texto del mensaje n  de CDS/ISIS (en el  idioma selec-
          cionado en ese momento). Si n no corresponde a un mensaje v lido,
          regresa una cadena vac¡a.

           54.  Funci¢n NEWREC: real;

          Inicializa un nuevo registro vac¡o  y regresa su  MFN. Pueden in-
          sertarse datos en el registro con la funci¢n FLDADD, y escribirlo
          en el archivo maestro usando el procedimiento UPDATE.

          El registro definido a travs de NEWREC se convierte en el regis-
          tro activo,  o sea, todos los procedimientos y funciones orienta-
          dos a registros que se ejecuten  a partir de ese  momento, inclu-
          yendo UPDATE o DELETE, operar n sobre este registro.

           55.  Funci¢n  NFIELDS: real;

          Regresa el  n£mero  de campos en  el registro activo.  N¢tese que
          cada ocurrencia de  un campo  repetible se cuenta como  un campo.
          Por ejemplo,  si el registro contiene una ocurrencia del campo 10
          y 20, y 3 ocurrencias del campo 30, entonces NFIELDS regresa 5.

           56.  Funci¢n NOCC (n: real): real;

          Regresa el n£mero de ocurrencias del  campo con etiqueta  n en el
          registro activo (o 0 si el campo no existe).

           57. Funci¢n NPOSTS: real; (v2.32)

            Regresa el n£mero de  apuntadores (postings)  de un trmino del
          diccionario. Esta funci¢n debe ser llamada inmediatamente despus
          de FIND o de NXTTERM, en caso contrario, los resutados son impre-
          visibles.

           58.  Funci¢n NXTLINE (var lin: string): real;

          Regresa en lin la siguiente  l¡nea producida por la  funci¢n FOR-
          MAT.  El valor de la funci¢n es 0  si existe una l¡nea disponible
          en lin.  Un valor diferente de cero  indica que ya no  hay l¡neas
          disponibles.  Cuando se llama esta funci¢n inmediatamente despus
          de la  funci¢n FORMAT,  NXTLINE  regresa la  primera  l¡nea; cada




                                         31








          llamada subsecuente regresar  la l¡nea que sigue.  El valor de la
          funci¢n debe verificarse para determinar si la lin contiene datos
          v lidos.

          El ejemplo siguiente muestra el uso de esta funci¢n:

          var rc, mfn, lrc, frc: real;
          lin: string;
          - - - - - - 
          rc:=record(mfn);
          if rc= o then
          begin
          frc:=format (79);
          if frc=0 then
          begin
          lrc:= nxtline(lin);
          while lrc=0 do begin writeln(lin);
          lrc:=nxtline(lin); end;
          end
          else writeln('Error de formato ', frc:1);
          end;

          N¢tese que el programa siguiente producir  los mismos resultados,
          aunque ser  menos  eficiente,  especialmente si el formato genera
          muchas l¡neas (debido a la funci¢n LINES):

          var rc, mfn, lrc, frc, i: real;
          lin: string;
          - - - - - -
          rc:=record(mfn);
          if rc=0 then
          begin
          if frc=0 then
          for i:=1 to lines do begin
          lrc:=nxtline(lin); writelin(lin); end
          else writeln('Error de formato ',frc:1);
          end;

           59.  Funci¢n NXTPOS (n: real): real;

          Regreasa el MFN del n-esimo registro recuperado,  relativo al re-
          gistro activo. NXTPOS puede ser usada despus de SETPOS o de otra
          NXTPOS, para obtener el MFN del siguiente registro en el conjunto
          actual. El conjunto actual se define por la £ltima llamada a SET-
          POS.  n puede ser mayor  que 1.  Por ejemplo, NXTPOS(3) regresar 
          el  MFN del tercer  registro recuperado despus del  registro ac-
          tual. No se soportan valores negativos de n.

          NXTPOS regresa 0 cuando no haya registros disponibles (o se hayan
          agotado).








                                         32








           60.  Funci¢n NXTPOST: real;

          Despus  de  FIND  o NXTTERM,  direcciona  al siguiente apuntador
          (posting)  para el trmino. El apuntador (posting) puede ser ana-
          lizado con la funci¢n POSTING. Si ya no hay m s apuntadores (pos-
          tings), regresa un valor negativo.

           61.  Funci¢n NXTTERM: string;

          Regresa el siguiente  trmino del diccionario.  NXTTERM puede ser
          usada despus de FIND o de otro NXTTERM para  leer el diccionario
          secuencialmente.  Cuando se ya no hay trminos disponibles (p.ej.
          al final del diccionario), se regresa un valor vac¡o.

          Si se usa NXTTERM sin una llamada previa a FIND,  se obtienen re-
          sultados impredecibles.

           62. Funci¢n OCCSEP: string; (v2.32)

             Regresa el separador de campos repetibles (definido con el pa-
          r metro 8 de SYSPAR.PAR).

           63.  Procedimiento OPEN (s: string);

          Abre (o sea,  hace que est  disponible para proceso)  la base de
          datos s. Despus de ejecutar este procedimineto, la base de datos
          anterior,  en caso de haber una activa, ya no est  disponible. La
          ejecuci¢n de este  procedimiento es equivalente  a seleccionar la
          opci¢n C (cambio de base de  datos)  del men£ principal xXISI. Si
          ya hab¡a una base  de  datos seleccionada cuando se  ejecuta este
          procedimineto, esta ser  cerrada autom ticamente (y desbloqueada,
          en caso necesario).

          Nota  sobre portabilidad:  En sistemas  VAX,  la base de datos se
          abre en modo de lectura solamante.  Si se pretenden realizar ope-
          raciones de escritura en la base  de datos que  se est  abriendo,
          tambin debe llamarse la funci¢n LOCK.

           64.  Funci¢n ORD (s: string): real;

          Esta funci¢n  regresa el c¢digo ASCII del primer  caracter  de s.
          Por ejemplo el valor de ORD('A') es 65.

           65.  Procedimiento PAGE (n: real);

          Selecciona la p gina n (1  <=  n <= 4) como p gina activa. La p -
          gina  debe haber sido previamente guardada  con SAVESCR,  en caso
          contrario, los resultados son imprevisibles.

          Nota sobre portabilidad: Este procedimiento no est  disponible en
          sistemas VAX o WANG. Si se usa en esas computadoras, es ignorado.

           66.  Funci¢n PATH (s1: string; n: real): string;

          El valor de esta  funci¢n depende del valor de  s1,  del modo si-
          guiente:


                                         33









             s1='SYS'  El valor regresado es el valor del par metro n defi-
          nido en SYSPAR.PAR (en este caso, 1<= n <=5);

             s1='DBN'  El valor regresado es el valor del par metro n defi-
          nido en dbn.PAR (en este caso  1<=  n <=  10). N¢tese que en este
          caso,  el valor regresado solo es confiable si hay alguna base de
          datos seleccionada.  En caso contrario,  el valor regresado es el
          que corresponde al par metro 5 de SYSPAR.PAR.

          Por ejemplo,  si se desea leer la FDT de la base de datos actual,
          se puede usar el procedimiento ASSIGN siguiente:

          Assign('inp', path('dbn', 10) |dbn| '.fdt');

           67.  Funci¢n POSITION (s1, s2: string; n: real): real;

          Busca la cadena s2  en la cadena s1, a partir de la posici¢n n, y
          regresa su posici¢n o 0 si s2 no ocurre en s1.

          Por ejemplo, position ('abcd', 'c', 1), regresa 3.

           68.  Funci¢n POSTING (s1: string): real

          Regresa el  valor del componente  indicado  por s1  del apuntador
          (posting)  actual.  El apuntador (posting) actual debe haber sido
          definido previamente por NXTPOST.  El componente regresado es in-
          dicado por s1 de acuerdo con lo siguiente:

          MFN N£mero del archivo maestro

          TAG Identificador de campo

          OCC N£mero de ocurrencia

          CNT N£mero de secuencia

            69.  Funci¢n  RECALL(n:real;  var  dbn,exp:string): real;    (v
          2.32)

            Recupera la expresi¢n de b£squeda 'n' y regresa en 'dbn'el nom-
          bre de  la  base de datos con la  que se  us¢ la  expresi¢n, y en
          'exp'  regresa el texto de la expresi¢n de b£squeda.  El valor de
          la funci¢n ser  igual al n£mero de  "hits",  o un n£mero negativo
          si 'n' est  fuera de rango (p.ej.: n<=0 o n>MAXSET).

           70.  Funci¢n RECORD (n: real): real;

          Recupera el registro del archivo maestro con  MFN=n.  El registro
          recuperado se convierte en el  registro actual,  o sea, todos los
          procedimientos y funciones orientados a registros que se ejecuten
          despus,  operar n sobre este registro. El valor regresado indica
          si se tuvo xito en la recuperaci¢n del registro,  de acuerdo con
          lo siguiente:




                                         34








          -1   Fin de archivo
          0    El registro fu recuperado
          1    El registro est  marcado para ser borrado
          2    El registro est  f¡sicamente borrado

          No debe realizarse ninguna operaci¢n sobre registros si el resul-
          tado regresado es -1.  Si el  valer regresado es  1, el contenido
          del registro en el momento en que se marc¢ para  ser borrado est 
          disponible para inspecci¢n,  y la marca de borrado  es eliminada.
          Si se desea dejar el registro marcado para  ser borrado,  no debe
          de  reescribirlo  en  la base de  datos.  Por otro lado, se puede
          reactivar el registro escribiendolo de  nuevo a la  base de datos
          con el procedimiento UPDATE (despus de modificarlo,  en caso ne-
          cesario).

          Si el valor regresado es  2,  CDS/ISIS aporta un  registro vac¡o,
          que puede ser llenado con la  funci¢n FLDADD,  y  grabarlo  en la
          base de datos con el procedimiento UPDATE. Este registro retendr 
          su MFN original. Si no se graba, el registro permanece borrado.

           71.  Procedimiento SAVESCR (n: real);

          Guarda la pantalla activa en el buffer interno n (1  <=  n <= 4).
          El despliegue de la pantalla no se afecta por esta operaci¢n. Una
          p gina guardada puede ser restaurada utilizando  el procedimiento
          PAGE.

          N¢tese que una pantalla que ha sido guardada solo puede  ser res-
          taurada desde el  programa que  la guard¢.  No se puede pretender
          que una pantalla guardada por un programa est  disponible a otro
          programa,  o  a una re-ejecuci¢n  posterior del  programa  que la
          guard¢.

          Nota sobre portabilidad:  Este procedimiento  no  est  disponible
          para sistemas  VAX o WANG.  Si se  utiliza en  esas computadoras,
          ser  ignorado.

           72. Procedimiento SCROLL(lin,col,h,w,atr,nl: real);  (v2.32)

            Permite realizar  el  corrimiento en el sentido  vertical de un
          texto dentro  de  una ventana en  la pantalla.  Los par metros se
          definen del modo siguiente:

          lin L¡nea inicial (esquina superior izquierda) de la ventana

          col Columna inicial (esquina superior izquierda) de la ventana

          h Tama¤o vertical de la ventana en lineas (altura)

          w Tama¤o horizontal de la ventana en columnas (ancho)

          atr Atributo de la pantalla en la zona de la ventana que se asig-
          nar  a las l¡neas que queden vacantes

          n N£mero de lineas que se desea recorrer el texto contenido en la
          ventana.


                                         35









          Si n >  0   (positivo), el texto existente en la ventana es reco-
          rrido hacia arriba.

          Si n <  0  (negativo),  el texto existente en la ventana es reco-
          rrido hacia abajo

          En cualquier caso,  el corrimiento corresponde al  valor absoluto
          de n

          Por ejemplo:  scroll(11,2,5,16,0,-1);

           col 1 (antes)  (despus)

          lin10 +---------+  +---------+
          lin11 |aaaaaaaaa|  |         |
          lin12 |bbbbbbbbb|  |aaaaaaaaa|
          lin13 |ccccccccc|  |bbbbbbbbb|
          lin14 |ddddddddd|  |ccccccccc|
          lin15 |eeeeeeeee|  |ddddddddd|
          lin16 |---------+  +---------+

           73.  Funci¢n SEARCH (s: string): real;

          Realiza una b£squeda de CDS/ISIS en la base de datos seleccionada
          en ese momento,  usando la expresi¢n de b£squeda definida por s y
          regresa el n£mero del conjunto asignado a la misma.  La ejecuci¢n
          de esta expresi¢n es equivalente a seleccionar la  opci¢n S delos
          servicios de ISISRET.

          N¢tese que si la expresi¢n en s contiene un error de sint xis, el
          usuario podr  editarla en forma interactiva.  si s  es una cadena
          vacia (''),  el sistema solicita al usuario que teclee  la expre-
          si¢n de b£squeda.

           74.  Funci¢n SETLANG (s: string): real;

          Define el idioma activo.  s es una cadena de un caracter que con-
          tiene el c¢digo de idioma a ser definido. Si se usa esta funci¢n,
          debe asegurarse que todos los archivos de men£s, hojas de trabajo
          y mensajes para ese idioma existan.

          La funci¢n regresa 0  si el idioma indicado  ha sido seleccionado
          exitoosamente,  o  1  si el idioma no fu  seleccionado (p.ej. no
          hab¡a archivo de mensajes). Si el valor regresado es 1, el idioma
          activo qued¢ indefinido.  Debe por  lo  tanto  re-establecerse un
          idioma v lido antes de continuar. Por ejemplo:

          Program SETLNG;
          var l: string;
          begin
          l:=lang;  {guarda codigo de idioma vigente}
          if setlang('q')=1
          then setlang(l); {restablece idioma si 'q' idefinido}
          end.



                                         36








           75.  Funci¢n SETPOS (n1, n2: real): real;

          El valor regresado por esta funci¢n depende de n2  de acuerdo con
          lo siguiente:

             n2 <> 0 Regresa el MFN del n2-esimo registro siguiente, ecupe-
          rado poe la b£squeda n1-esima (en este caso,  n1  es el n£mero de
          un conjunto  generado por un llamada previa  a SEARCH).  n2 puede
          ser  mayor que 1.  Por ejemplo,  SETPOS(2,3)  aportar  el MFN del
          tercer registro recuperado en el conjunto 2.  Para un rendimiento
          ¢ptimo,  los registros subsiguientes deben obtenerse  con NXTPOS.
          No se soportan valores negativos de n2.

             n2=0  Regresa el n£mero de registros recuperados (hits) por la
          b£squeda n1-esima.

          En ambos casos,  si n1  se define como cero, la expresi¢n de b£s-
          queda considerada es la £ltima que se ha utilizado.

           76.  Funci¢n SIZE (s: string): real;

          Regresa la longitud actual de la cadena s.

           77.  Funci¢n SUBSTR (s: string; n1, n2: real): string;

          Regresa la  subcadena de  s a partir  de la posici¢n  n1, con una
          longitud m xima de n2.  Si n1  est  fuera de las  fronteras de s,
          regresa una cadena vac¡a.  Si n1  + n2 - 1 es mayor que SIZE (S),
          solo los £ltimos n1 + SIZE(s) - 1 caracteres de s son regresados.

           78. Procedimiento SYSTEM(s:string); (versiones VAX y 3.0)

          Ejecuta el comando de VAX/VMS o de DOS contenido en la  cadena s.
          Por  ejemplo:  system('dir');  despliega los archivos  en  el di-
          rectorio activo.

           79. Funci¢n SYSVARS(s: string):string; (v2.32)

          Esta funci¢n puede usarse para  obtener el valor  actual, y/o mo-
          dificar los valores de las variables del sistema.  El valor de la
          funci¢ siempre  contendr  el valor  de las variables  antes de la
          llamada.

          Las variables del sistema se  representan como  una  cadena  de 5
          caracteres, definida del modo siguiente:

          Caracter en posici¢n 1  =1  Despliega en pantalla el la secuencia
          de actualizaci¢n del archivo invertido
                               =0 Suprime el despliegue

           Caracter en posici¢n 2 =1 Despliega en pantalla la evaluaci¢n de
          la expresi¢n
                               =0 Suprime el despliegue

          Caracter en posici¢n 3  =1 Despliega la expansi¢n de los trminos
          correspondientes a una raiz


                                         37








            =0 Despliega solo la l¡nea ccon el total que corresponde a la
                                         raiz

          Caracter en posici¢n 4 =1 Despliega la expansi¢n de trminos ANY
           =0 Despliega solo la l¡nea que corresponde al total de trminos
                                         ANY

          Caracter en posici¢n  5  =1  Despliega los subtotales de las sub-
          expresiones
                               =0 Suprime el despliegue

            Para obtener el valor actual de las variables del sistema, debe
          definirse s='?'. Por ejemplo:

          v:=sysvars('?');

            Para establecer los valores deseados de  las variables del sis-
          tema, def¡nase el valr de s seg£n corresponda. Por ejemplo:

          v:=sysvars('01000');

            En este caso,  'v'  contendr  el valor que tenian las variables
          antes de la llamada.

           80.  Procedimiento UC (var s: string);

          Convierte la cadena s a  may£sculas.  La conversi¢n se realiza de
          acuerdo con la tabla del sistema ISISUC.TAB.

           81.  Procedimiento UNLOCK;

          Elimina un bloqueo de la base de  datos establecido por  una lla-
          mada previa a la funci¢n LOCK. Debido a que la funci¢n LOCK soli-
          cita control exclusivo para escribir en la base de datos, se debe
          eliminar el bloqueo tan pronto como ya no sea  indispensable. N¢-
          tese que el procedimiento UNLOCK no necesita ser  invocado por el
          mismo programa que que ejecut¢ la funci¢n LOCK.

          Nota sobre portabilidad:  El procedimiento UNLOCK  solo se imple-
          menta  en sistemas VAX.  En sistemas IBM PC  o WANG,  donde no se
          admite el  acceso simult neo para  escribir a una  base de datos,
          este procedimiento no tiene  efecto.  Sin embargo, si se pretende
          que el programa trabaje tanto en VAX como  en  PC, debe incluirse
          UNLOCK dondequiera que sea necesario para  mantener la portabili-
          dad.

           82.  Procedimiento UPDATE;

          Re-escribe  el  registro  actual al archivo maestro  (el registro
          activo es el £ltimo registro leido con la funci¢n RECORD, o defi-
          nido con la funci¢n NEWREC). Una llamada a UPDATE sin un RECORD o
          un NEWREC previos es  ilegal,  y causar  la terminaci¢n  del pro-
          grama.





                                         38








           83.  Procedimiento UPDIF;

          Realiza la  actualizaci¢n del  archivo  invertido[]  (lo  que es
          equivalente a seleccionar la opci¢n U del men£ xXG1 de los servi-
          cios de ISISINV).

           84. Declaraci¢n USES pn1, pn2, pn3, ...;

            Permite resolver el problema que se presenta al llamar en forma
          recursiva al interprete de PASCAL (si no se usa esta declaraci¢n,
          pueden perderse los valores actuales de  algunas variables). Este
          problema se presenta por ejemplo,  al ejecutar en  un programa en
          PASCAL, un formato que contiene una llamada de formato, o al lla-
          mar desde un programa en PASCAL,  un men£ (con  la funci¢n MENU),
          que en alguna de sus opciones llame a su vez a un program en PAS-
          CAL.

           pn1, pn2, etc. son los nombres de los programas.

            La declaraci¢n USES debe ubicarse inmediatamente  despus de la
          declaraci¢n PROGRAM.

          Por ejemplo, si el programa PRUEBA ejecuta un formato que realiza
          llamadas de  formato con  nombre  FORM1  y  FORM2,  entonces debe
          declararse lo siguiente:

           Program PRUEBA;
           Uses Form1, Form2;
           var x,y:real;
           ...
           end.

           85.  Funci¢n VAL (s: string): real;

          Convierte s a REAL. Si s no contiene un valor numrico v lido, el
          valor regresado es 0.

           86.  Funci¢n WORKSHEET (s: string): real;

          Selecciona la hoja de trabajo de captura s. Todas las operaciones
          de captura de datos subsiguientes, usar n esa hoja de captura. Si
          la hoja de trabajo se recuper¢ correctamente, regresa el valor 0,
          y un valor diferente de  cero si no  se encontr¢ la  hoja de tra-
          bajo.  La cadena s deber  contener el  nombre de la  hoja de tra-
          bajo,  no el nombre del archivo.  La ejecuci¢n de esta funci¢n es
          equivalente a seleccionar la opci¢n W del men£ xXE1 de los servi-
          cios de ISISENT.

          N¢tese que una vez que ha sido seleccionada una  hoja de trabajo,
          se mantiene en efecto aun despus de que termina el programa.

           86. Funci¢n WSNAME: string;

          Regresa el valor actual del nombre de  la hoja de  trabajo, o una
          cadena vac¡a si no hay hoja de trabajo seleccionada.



                                         39









          NOTA PARA LAS VERSIONES 2.32,  2.34  y 3.0. En estas versiones se
          incluyen nuevas declaraciones que se marcan  en el texto  (N. del
          T.).

          NOTA PARA LA VERSION 2.32.  En la funci¢n FLDCHA la cadena de re-
          emplazo ha sido corrida un caracter hacia la derecha (N. del T.).

          NOTA PARA LA VERSION 2.32.  En la funci¢n FLDMOD la cadena de re-
          emplazo ha sido corrida un caracter hacia la derecha (N. del T.).

          NOTA PARA LA VERSION 3.0  y VAX. En los sistemas VAX y en la ver-
          s¢n 3.0, con objeto de evitar conflictos con la operaci¢n multiu-
          sario se introdujeron cambios para que el sistema bloquee  la es-
          critura del archivo antes de  la  actualizaci¢n,  por  lo  que es
          ahora necesario que antes de invocar este procedimiento  se llame
          la funci¢n LOCK para asegurar que no  haya  otra actualizaci¢n en
          proceso.  Si no se hace esto,  el programa abortar  cuando se in-
          tente escribir,  ya que el archivo se abre solo para  lectura (N.
          del T.).

          Se recomienda llamar la funci¢ LOCK antes de utilizar el procedi-
          miento UPDIF.  En la versi¢n  2.34  y 3.0  si esto no se hace, el
          programa aborta al primer  intento de escribir sobre  el archivo,
          ya que este se abre para lectura solamente.
           
































                                         40




: