Serie ficheros virtuales

 

 


RPG Ficheros virtuales

 

 

 

Funciones derivadas intrínsicamente del orden

 

 

        Estructura de soporte

 

        Relación de prototipos

 

 

 

        Grupo posicionamiento

 

 

                SRAGM_SETEQ

 

             SRAGM_SETGT

 

             SRAGM_SETGTT

 

                SRAGM_SETLL

 

 

 

       Grupo READ

 

 

               SRAGM_READ

 

               SRAGM_READE

 

               SRAGM_READPE

        

 

 

                                                                                   ________

 

 

 

Estructura de soporte

 

 

A lo largo de este manual dedicado a los servicios de SRAGM, se irán ilustrando los procedimientos utilizando la estructura de datos DS8888c, que se compone de una subestructura de clave principal, una subestructura de clave alternativa y una subestructura de datos, que se detallan a continuación:

 

 

      **********************************************************************************************

      *  DS8888   *  Banco de pruebas de SRAGM

      **********************************************************************************************

 

      ***

      * *  Definición fichero virtual DS8888

      ***

     D DS8888c         DS                  QUALIFIED BASED(pDS8888c)            Soporte  DS8888

     D  DSK                                LIKEDS(DSCc)                         ClavesPF DS8888

     D  DSK01                              LIKEDS(DSC01c)                       ClavesLF DS8888

     D  DSD                                LIKEDS(DSDc)                         Datos    DS8888

 

      ***

      * *  Definición claves PF (Es la definición de una red [I,J], como en la emulación de una hoja de cálculo)

      ***

     D DSCc            DS                  QUALIFIED BASED(pDSCc)

     D  I                            10S 0                                      I

     D  J                            10S 0                                      J

 

      ***

      * *  Definición claves LF (Orden inverso)

      ***

     D DSC01c          DS                  QUALIFIED BASED(pDSC01c)

     D  JI                           10S 0                                      N*N - IJ + 1

 

      ***

      * *  Definición datos fichero virtual DS8888

      ***

     D DSDc            DS                  QUALIFIED BASED(pDSDc)

     D  IJ                           10S 0                                      N*(I-1) + J

     D  IMPT                         10S 0                                      [100000]+N*(I-1) + J

      * La constante [100000] se añadirá/retirará en los UPDATE de prueba

 

 

 

 

DS8888 es una definición tipo. Está basada en punteros nulos y para usarse debe instanciarse con una instrucción LIKEDS. Esto puede apreciarse en el juego entre el programa CC8888 y el programa de servicio SRAGMV.

 

 

                                                                                   ________

 

 

 

 

 

    Funciones derivadas intrínsicamente del orden

 

 

 

- Grupo posicionamiento

 

 

 

      * Determina la existencia de un ítem por clave igual (Y deja situado para READE)

 

     DSRAGM_SETEQ      PR            10I 0                                      PosiciónItem/0=Error

     D P_pFILE                         *   VALUE OPTIONS(*STRING)               Nombre Fichero   1*I

     D P_pCLAP                         *   VALUE OPTIONS(*STRING)               Clv(Parcial)Acces2*I

     D P_LONG                        10I 0 VALUE OPTIONS(*NOPASS)               LongtdClvParcial 3*I

 

 

 

 

      * Determina la existencia de un ítem por clave mayor (Y deja situado para READPE)

 

     DSRAGM_SETGT      PR            10I 0                                      PosiciónItem/0=Error

     D P_pFILE                         *   VALUE OPTIONS(*STRING)               Nombre Fichero   1*I

     D P_pCLAP                         *   VALUE OPTIONS(*STRING)               Clv(Parcial)Acces2*I

     D P_LONG                        10I 0 VALUE OPTIONS(*NOPASS)               LongtdClvParcial 3*I

 

 

 

 

      * Determina la existencia de un ítem por clave mayor superior (Y deja situado para READ)

 

     DSRAGM_SETGTT     PR            10I 0                                      PosiciónItem/0=Error

     D P_pFILE                         *   VALUE OPTIONS(*STRING)               Nombre Fichero   1*I

     D P_pCLAP                         *   VALUE OPTIONS(*STRING)               Clv(Parcial)Acces2*I

     D P_LONG                        10I 0 VALUE OPTIONS(*NOPASS)               LongtdClvParcial 3*I

 

 

 

 

      * Sitúa en el índice de memoria-clave más próximo inferior (+ 1)

      *     o en el índice exacto del ítem, dejando a SRAGM preparado para

      *     responder a SRAGM_READE, etc.

      * Nota: Si sólo se desea verificar la existencia, utilícese SRAGM_SETEQ

 

     DSRAGM_SETLL      PR            10I 0                                      PosiciónItem/0=Error

     D P_pFILE                         *   VALUE OPTIONS(*STRING)               Nombre Fichero   1*I

     D P_pCLAP                         *   VALUE OPTIONS(*STRING)               Clv(Parcial)Acces2*I

     D P_LONG                        10I 0 VALUE OPTIONS(*NOPASS)               LongtdClvParcial 3*I

 

 

 

- Grupo READ

 

 

 

      *  Lectura secuencial de un registro de un fichero virtual

 

     DSRAGM_READ       PR            10I 0                                      0/1 Error (Eof)

     D P_pFILE                         *   VALUE OPTIONS(*STRING)               Nombre Fichero   1*I

     D P_INDI                        10I 0 VALUE                                NRR a recuperar  2*I

     D P_pDATO                         *   VALUE                                pDATOS pedidos(O)3*I

     D P_pCLAV                         *   VALUE OPTIONS(*NOPASS)               pCLAVE asociad(O)4*I

 

 

 

 

      * Lectura por clave de un registro de un fichero virtual

 

     DSRAGM_READE      PR            10I 0                                      PosiciónItem/0=Error

     D P_pFILE                         *   VALUE OPTIONS(*STRING)               Nombre Fichero   1*I

     D P_pCLAP                         *   VALUE OPTIONS(*STRING)               Clv(Parcial)Acces2*I

     D P_LONG                        10I 0 VALUE                                LongtdClvParcial 3*I

     D P_pDATO                         *   VALUE                                pDATOS pedidos(O)4*I

     D P_pCLAV                         *   VALUE OPTIONS(*NOPASS)               pCLAVE asociad(O)5*I

 

 

 

 

      * Lectura inversa por clave de un registro de un fichero virtual

 

     DSRAGM_READPE     PR            10I 0                                      PosiciónItem/0=Error

     D P_pFILE                         *   VALUE OPTIONS(*STRING)               Nombre Fichero   1*I

     D P_pCLAP                         *   VALUE OPTIONS(*STRING)               Clv(Parcial)Acces2*I

     D P_LONG                        10I 0 VALUE                                LongtdClvParcial 3*I

     D P_pDATO                         *   VALUE                                pDATOS pedidos(O)4*I

     D P_pCLAV                         *   VALUE OPTIONS(*NOPASS)               pCLAVE asociad(O)5*I

 

 

 

 

                                                                                   ________

 

 

Grupo posicionamiento

 

 

 

 

  SRAGM_SETEQ. Prototipo

 

 

 

      * Determina la existencia de un ítem por clave igual (Y deja situado para READE)

 

     DSRAGM_SETEQ      PR            10I 0                                      PosiciónItem/0=Error

     D P_pFILE                         *   VALUE OPTIONS(*STRING)               Nombre Fichero   1*I

     D P_pCLAP                         *   VALUE OPTIONS(*STRING)               Clv(Parcial)Acces2*I

     D P_LONG                        10I 0 VALUE OPTIONS(*NOPASS)               LongtdClvParcial 3*I

 

 

 

 

 

Ejemplo

 

 

         clear DS8888;

 

         DS8888.DSK.I = 1;

         DS8888.DSK.J = 2;

 

         T_Resu = SRAGM_SETEQ('DS8888':%addr(DS8888));

 

 

En este ejemplo se evalúa la existencia del registro (1,2) del fichero virtual 'DS8888'. TTResu recoge la posición relativa del registro solicitado en el fichero. Si TTResu = 0 es que no se ha encontrado el registro en el fichero. Si TTResu > 0, es que el registro se ha encontrado y el sistema queda preparado para emitir un READE en –I- o un READ secuencial desde TTResu.

 

 

Un ejemplo alternativo del segundo tipo sería el esqueleto más interno de una carga de subfichero en pantalla como sigue

 

      . . .

 

      TTI = SRAGM_SETEQ('DS8888':%addr(DS8888));

 

      if TTI = *ZEROS;

         TTI = SRAGM_SETLL(XXFILE:%addr(DS8888));

      endif;

 

      if TTI = *ZEROS;

         TTI = 1;

      endif;

 
      . . .
 
 
      dow true;
 
         TTErro = SRAGM_READ('DS8888':TTI:%addr(DS8888));
         if TTErro > *ZEROS;
            Leave;

         endif;

 

         TTI += 1;

 

         exsr RUMOVSFL;

 

         . . .

 

      enddo; 

 

      . . .

 

 

Este ejemplo pertenece al código del programa CC8850, programa cabecera del ejemplo de mantenimiento de DS8888 registro a registro.

 

 

 

 

El formato extendido está diseñado para uso en bucles algorítmicos especiales de lectura por clave igual. En este mismo programa, se incluye dos rutinas equivalentes para presentar en pantalla el número de ítems J que contiene cada I distinto. La que utiliza SETEQ se extracta como sigue:

 

 

      * PrCuentaJ_Alt: Rutina de cuenta de J's en I dado (Rutina alternativa)

 

     PPrCuentaJ_Alt    B

     DPrCuentaJ_Alt    PI            10S 0                                      Cuenta resultado

     D P_I                           10S 0 Value                                Clave I           *I

 

       

        . . .  

 

        // Posicionado base y filtro de proceso

 

        T_Resu = SRAGM_SETEQ(XXFILE:%addr(P_I):%size(P_I));

        if T_Resu = *ZEROS;

           return *ZEROS;

        endif;

 

 

 

        // Ciclo de cuenta de J's restantes en I

 

        dow true;

 

           T_Cont += 1;

 

           T_Resu = SRAGM_READE(XXFILE:%addr(P_I):%size(P_I):%addr(DS8888));

           if T_Resu <= *ZEROS;

              leave;

           endif;

 

        enddo;

 

 

 

        // Retorna contador

 

        return T_Cont;

 

        . . .

 

 

 

La rutina equivalente que utiliza SETLL es

 

 

       // Posicionado base

 

        clear DS8888L;

 

        DS8888L.DSK.I = P_I;

 

        T_Resu = SRAGM_SETLL(XXFILE:%addr(DS8888L));

 

 

 

        // Ciclo de cuenta de J's asociados a en I

 

        dow true;

 

           T_Resu = SRAGM_READE(XXFILE:%addr(P_I):%size(P_I):%addr(DS8888));

           if T_Resu <= *ZEROS;

              leave;

           endif;

 

           T_Cont += 1;

 

        enddo;

 

 

 

        // Retorna contador

 

        return T_Cont;

 

 

 

Los tres tipos de bucle que se han presentado en este epígrafe responden al modo de funcionamiento interno de las rutinas de posicionado y lectura por igual de la aplicación. Este se resume en que al ejecutar una operación del grupo de posicionamiento/lectura por igual se devuelve el índice encontrado/utilizado y se archiva incrementado para poder tramitar la siguiente operación de lectura por igual.

 

En otras palabras, si se ha encontrado/utilizado el valor de índice 10, se archiva como índice interno para la siguiente operación de una serie de operaciones READE el valor de 11.

Es el funcionamiento natural de un bucle de lectura por igual que se recoge precisamente en el tercer tipo de bucle que se ha presentado y, como es el más frecuente de encontrar, también es el comportamiento que se programado por defecto y que no precisa de adecuaciones adicionales.

 

Los otros tipos se encuentran alternativamente en distintas situaciones prácticas y precisan los pequeños acomodos que se han mostrado.

 

 

Funciones relacionadas

 

   SRAGM_CHAIN      Accede a un registro de un fichero virtual por clave.

 

   SRAGM_INF        Recupera estadísticos de un fichero virtual. 

 

 

Además del resto del grupo SETLL y READ para accesos secuenciales.  

 

 

                                                                                                             ________

 

 

 

  SRAGM_SETGT. Prototipo

 

 

 

      * Determina la existencia de un ítem por clave mayor (Y deja situado para READPE)

 

     DSRAGM_SETGT      PR            10I 0                                      PosiciónItem/0=Error

     D P_pFILE                         *   VALUE OPTIONS(*STRING)               Nombre Fichero   1*I

     D P_pCLAP                         *   VALUE OPTIONS(*STRING)               Clv(Parcial)Acces2*I

     D P_LONG                        10I 0 VALUE OPTIONS(*NOPASS)               LongtdClvParcial 3*I

 

 

 

 

 

Ejemplo

 

 

         // Situa por SETGT (I=1)

 

         clear DS8888;

 

         DS8888.DSK.I = 1;

 

         T_Resu = SRAGM_SETGT('DS8888':%addr(DS8888):%size(DS8888.DSK01)); // %size(I)

 

 

 

         // Lee por igual (I=1) hacia atrás hasta agotarlo

 

         down true;

 

           

            T_Resu = SRAGM_READPE('DS8888':%addr(DS8888):

                                           %size(DS8888.DSK01): // %size(I)

                                           %addr(DS8888));

            if T_Resu = *ZEROS;

               leave;

            endif;

 

            . . .

 

         endfor;

 

 

Este es un ejemplo de posicionamiento al final del valor de una clave parcial (En concreto al final del valor de I=1 en un esquema de claves [I,J]) y un bucle de lectura hacia atrás en la segunda clave manteniendo la primera constante hasta agotarla.

 

Un ejemplo de posicionamiento justo después del final del valor de una clave parcial y un bucle de lectura hacia adelante se encuentra en el epígrafe siguiente dedicado a la instrucción SRAGM_SETGTT.

 

 

 

Ambos ejemplos pertenecen al código del programa de servicio SRAGMV, núcleo del banco de pruebas del sistema.

 

 

 

 

Funciones relacionadas

 

   SRAGM_CHAIN   Accede a un registro por clave.

 

   SRAGM_INF     Recupera estadísticos de un fichero virtual. 

 

 

 

Además del resto del grupo SETLL y READ para accesos secuenciales.  

 

 

 

                                                                                                             ________

 

 

 

  SRAGM_SETGTT. Prototipo

 

 

 

      * Determina la existencia de un ítem por clave mayor superior (Y deja situado para READ)

 

     DSRAGM_SETGTT     PR            10I 0                                      PosiciónItem/0=Error

     D P_pFILE                         *   VALUE OPTIONS(*STRING)               Nombre Fichero   1*I

     D P_pCLAP                         *   VALUE OPTIONS(*STRING)               Clv(Parcial)Acces2*I

     D P_LONG                        10I 0 VALUE OPTIONS(*NOPASS)               LongtdClvParcial 3*I

 

 

 

 

Ejemplo

 

 

         // Situa por SETGTT (I=0)

 

         clear DS8888;

 

         DS8888.DSK.I = 0;

 

         T_Resu = SRAGM_SETGTT('DS8888':%addr(DS8888):%size(DS8888.DSK01)); // %size(I)

 

 

 

         // Lee por igual (I=1) hacia adelante hasta agotarlo

 

         down true;

 

           

            T_Resu = SRAGM_READE('DS8888':%addr(DS8888):

                                          %size(DS8888.DSK01): // %size(I)

                                          %addr(DS8888));

            if T_Resu = *ZEROS;

               leave;

            endif;

 

            . . .

 

         endfor;

 

 

Este es un ejemplo de posicionamiento justo después del final del valor de una clave parcial (En concreto después del valor de I=0 en un esquema de claves [I,J]) y un bucle de lectura hacia adelante en la segunda clave manteniendo la primera constante hasta agotarla.

 

Un ejemplo de posicionamiento al final del valor de una clave parcial y un bucle de lectura hacia atrás se encuentra en el epígrafe anterior dedicado a la instrucción SRAGM_SETGT.

 

 

Ambos ejemplos pertenecen al código del programa de servicio SRAGMV, núcleo del banco de pruebas del sistema.

 

 

 

 

Funciones relacionadas

 

   SRAGM_CHAIN   Accede a un registro por clave.

 

   SRAGM_INF     Recupera estadísticos de un fichero virtual. 

 

 

 

Además del resto del grupo SETLL y READ para accesos secuenciales.  

 

 

                                                                                                             ________

 

 

 

  SRAGM_SETLL. Prototipo

 

 

 

      * Sitúa en el índice de memoria-clave más próximo inferior (+ 1)

      *     o en el índice exacto del ítem, dejando a SRAGM preparado para

      *     responder a SRAGM_READE, etc.

      * Nota: Si sólo se desea verificar la existencia, utilícese SRAGM_SETEQ

 

     DSRAGM_SETLL      PR            10I 0                                      PosiciónItem/0=Error

     D P_pFILE                         *   VALUE OPTIONS(*STRING)               Nombre Fichero   1*I

     D P_pCLAP                         *   VALUE OPTIONS(*STRING)               Clv(Parcial)Acces2*I

     D P_LONG                        10I 0 VALUE OPTIONS(*NOPASS)               LongtdClvParcial 3*I

 

 

 

 

Ejemplo

 

 

         // Situa por SETLL (I=1)

 

         clear DS8888;

 

         DS8888.DSK.I = 1;

 

 

         T_Resu = SRAGM_SETLL('DS8888':%addr(DS8888));   // [También podría haberse situado por tamaño parcial I ]

 

 

 

         // Lee por igual (I=1) hacia adelante hasta agotarlo

 

         down true;

 

           

            T_Resu = SRAGM_READE('DS8888':%addr(DS8888):

                                          %size(DS8888.DSK01): // %size(I)

                                          %addr(DS8888));

            if T_Resu = *ZEROS;

               leave;

            endif;

 

            . . .

 

         enddo;

 

 

Este es un ejemplo de posicionamiento al comienzo del valor de una clave parcial (En concreto al comienzo del valor de I=1 en un esquema de claves [I,J] ) y un bucle de lectura hacia adelante en la segunda clave manteniendo la primera constante hasta agotarla.

 

Es el mismo ejemplo que se utilizará en SRGM_READE porque las acciones de posicionarse y luego leer por clave están ligadas.

 

 

Este tipo de implementación responde al funcionamiento natural de un bucle de lectura por igual y por tanto es el comportamiento que se programado por defecto y no precisa de adecuaciones adicionales.

 

Ejemplos de posicionamiento alternativos en la misma línea se encuentran en los epígrafes anteriores dedicados a SRAGM_SETGT y a SRAGM_SETGTT.

 

Todos estos ejemplos pertenecen al código del programa de servicio SRAGMV, núcleo del banco de pruebas del sistema.

 

 

 

Sin embargo, en la presentación de la rutina SRAGM_SETEQ se muestran otras perspectivas a la hora de afrontar el posicionado y lectura junto con ejemplos adicionales de código.

 

 

 

 

Funciones relacionadas

 

   SRAGM_CHAIN   Accede a un registro por clave.

 

   SRAGM_INF     Recupera estadísticos de un fichero virtual. 

 

 

 

Además del resto del grupo SETLL y READ para accesos secuenciales.  

 

 

                                                                                                             ________

 

 

Grupo READ

 

 

 

  SRAGM_READ. Prototipo

 

 

 

      *  Lectura secuencial de un registro de un fichero virtual

 

     DSRAGM_READ       PR            10I 0                                      0/1 Error (Eof)

     D P_pFILE                         *   VALUE OPTIONS(*STRING)               Nombre Fichero   1*I

     D P_INDI                        10I 0 VALUE                                NRR a recuperar  2*I

     D P_pDATO                         *   VALUE                                pDATOS pedidos(O)3*I

     D P_pCLAV                         *   VALUE OPTIONS(*NOPASS)               pCLAVE asociad(O)4*I

 

 

 

 

Ejemplo

 

 

         // Bucle de proceso para lectura secuencial completa de un fichero virtual

 

         T_K = *ZEROS;

 

         dow true;

 

 

            // Lee secuencialmente

 

            T_K += 1;

            T_Erro = SRAGM_READ('DS8888':T_K:%addr(DS8888));

 

 

            // Control de fin de fichero

 

            if T_Erro > *ZEROS;

 

               leave;

 

            endif;

 

 

             . . .

 

         enddo;

 

 

Este es un ejemplo de bucle de lectura secuencial completa de un fichero virtual, utilizando el formato reducido para estructuras de claves y datos solapadas, como sucede en DS8888.

 

SRAGM_READ también contempla un formato extendido para el caso en que la estructura de claves no se solape con la de datos. Es un caso infrecuente que da respuesta a las situaciones de diseño impuesto.

 

 

El ejemplo está tomado del código del programa de servicio SRAGMV, núcleo del banco de pruebas del sistema.

 

 

                                                                                                             ________

 

 

 

 

  SRAGM_READE. Prototipo

 

 

 

      * Lectura por clave de un registro de un fichero virtual

 

     DSRAGM_READE      PR            10I 0                                      PosiciónItem/0=Error

     D P_pFILE                         *   VALUE OPTIONS(*STRING)               Nombre Fichero   1*I

     D P_pCLAP                         *   VALUE OPTIONS(*STRING)               Clv(Parcial)Acces2*I

     D P_LONG                        10I 0 VALUE                                LongtdClvParcial 3*I

     D P_pDATO                         *   VALUE                                pDATOS pedidos(O)4*I

     D P_pCLAV                         *   VALUE OPTIONS(*NOPASS)               pCLAVE asociad(O)5*I

 

 

 

 

Ejemplo

 

 

         // Situa por SETLL (I=1)

 

         clear DS8888;

 

         DS8888.DSK.I = 1;

 

 

         T_Resu = SRAGM_SETLL('DS8888':%addr(DS8888):%size(DS8888.DSK01)); // %size(I)

 

 

 

         // Lee por igual (I=1) hacia adelante hasta agotarlo

 

         down true;

 

           

            T_Resu = SRAGM_READE('DS8888':%addr(DS8888):

                                          %size(DS8888.DSK01): // %size(I)

                                          %addr(DS8888));

            if T_Resu = *ZEROS;

               leave;

            endif;

 

            . . .

 

         endfor;

 

 

Este es un ejemplo de posicionamiento al comienzo del valor de una clave parcial (En concreto al comienzo del valor de I=1 en un esquema de claves [I,J]) y un bucle de lectura hacia adelante en la segunda clave manteniendo la primera constante hasta agotarla.

 

Es el mismo ejemplo que se ha utilizado en los posicionamientos porque las acciones de posicionarse y luego leer por clave están ligadas.

 

 

Todos los ejemplos pertenecen al código del programa de servicio SRAGMV, núcleo del banco de pruebas del sistema.

 

 

 

 

Funciones relacionadas

 

   SRAGM_CHAIN   Accede a un registro por clave.

 

   SRAGM_INF     Recupera estadísticos de un fichero virtual. 

 

 

 

Además del resto del grupo SETLL y READ para accesos secuenciales.  

 

 

                                                                                                             ________

 

 

 

  SRAGM_READPE. Prototipo

 

 

 

      * Lectura inversa por clave de un registro de un fichero virtual

 

     DSRAGM_READPE     PR            10I 0                                      PosiciónItem/0=Error

     D P_pFILE                         *   VALUE OPTIONS(*STRING)               Nombre Fichero   1*I

     D P_pCLAP                         *   VALUE OPTIONS(*STRING)               Clv(Parcial)Acces2*I

     D P_LONG                        10I 0 VALUE                                LongtdClvParcial 3*I

     D P_pDATO                         *   VALUE                                pDATOS pedidos(O)4*I

     D P_pCLAV                         *   VALUE OPTIONS(*NOPASS)               pCLAVE asociad(O)5*I

 

 

 

 

 

Ejemplo

 

 

         // Situa por SETGT (I=1)

 

         clear DS8888;

 

         DS8888.DSK.I = 1;

 

         T_Resu = SRAGM_SETGT('DS8888':%addr(DS8888):%size(DS8888.DSK01)); // %size(I)

 

 

 

         // Lee por igual (I=1) hacia atrás hasta agotarlo

 

         down true;

 

           

            T_Resu = SRAGM_READPE('DS8888':%addr(DS8888):

                                           %size(DS8888.DSK01): // %size(I)

                                           %addr(DS8888));

            if T_Resu = *ZEROS;

               leave;

            endif;

 

            . . .

 

         endfor;

 

 

Este es un ejemplo de posicionamiento al final del valor de una clave parcial (En concreto al final del valor de I=1 en un esquema de claves [I,J]) y un bucle de lectura hacia atrás en la segunda clave manteniendo la primera constante hasta agotarla.

 

Es el mismo ejemplo que se ha utilizado en los posicionamientos porque las acciones de posicionarse y luego leer por clave están ligadas.

 

 

Estos ejemplos pertenecen al código del programa de servicio SRAGMV, núcleo del banco de pruebas del sistema.

 

 

 

 

Funciones relacionadas

 

   SRAGM_CHAIN   Accede a un registro por clave.

 

   SRAGM_INF     Recupera estadísticos de un fichero virtual. 

 

 

 

Además del resto del grupo SETLL y READ para accesos secuenciales.  

 

 

                                                                                                             ________