Serie ficheros virtuales

 

 

RPG Ficheros virtuales

 

 

 

Introducción

 

 

- Notas iniciales

 

- Resumen algorítmico de los ficheros virtuales

 

- Versiones de los fuentes

 

- Instrucciones de compilación

 

- Programas de muestra

 

- Índice de referencia

 

 

                                                                                                      ________

 

 

 

- Notas iniciales

 

 

En el capítulo  A.I.9 Alternativa RPG. El programa de servicio SRAGM  del blog hermano C Ficheros virtuales  de la serie  Ficheros virtuales, se hizo una breve incursión en la plataforma iSeries y la aplicación de la herramienta al lenguaje ILE-RPG.

En C Ficheros virtuales se presentaban los fundamentos, y a partir de ellos se construían unas DLL’s para poder utilizar bases de datos virtuales en el PC.

El interfaz final era SRRCW, con funciones como SRRCW_WRITE, SRRCW_CHAIN, SRRCW_SETLL, SRRCW_READE, SRRCW_UPDATE, etc.

 

Para iSeries se anticipaba en el capítulo A.I.9 la conversión de estas DLL’s en programas de servicio y un interfaz final denominado SRAGM como programa de servicio en RPG.



Estas entradas se van a extender ahora para poner de manifiesto los detalles que apenas se esbozaron entonces.

 

 

                                                                                                      ________

 

 

 

 

- Resumen algorítmico de los ficheros virtuales (Extraído de C Ficheros virtuales )

 

 

 

      Seudocódigo síntesis del procedimiento de caché


             if chain (clave) fichero

               return registro fichero;

            else
            {
              funcion (clave, datos);

              write (registro_fichero) fichero;
            }



Donde registro_fichero = clave + datos;    y   fichero =  un conjunto {registro_fichero[1..n]}      (Físico o virtual)




    La asignación dinámica de memoria

Para implementar el seudocódigo anterior con recursos virtuales, el primer problema que se debe resolver es el de la asignación dinámica de la memoria que se va consumiendo con las operaciones write.

Se resuelve utilizando las funciones malloc y realloc nativas del lenguaje C. Esta tarea se lleva a cabo internamente en el módulo SRRCM y es transparente para el usuario.



    El mecanismo de búsqueda

Tanto las claves como los datos se agregan siempre al final del espacio y se garantiza la ordenación mediante un índice auxiliar. El mecanismo se conoce como inserción dicotómica en índice. En estos procesos se utilizan las funciones de copia y desplazamiento de memoria memcpy y memmove del lenguaje C. Para la comparación se utiliza la función memcmp del lenguaje C.
 


  El esquema central de los ficheros virtuales

A partir del seudocódigo síntexis del mecanismo de caché se llega al esquema central de los ficheros virtuales. Así, partiendo de unos pocos elementos:

 

 - Un mecanismo de archivo WRITE(1)

 

          - Otro de recuperación CHAIN(2)

 

 - La disposición de una función de orden para comparar claves [memcmp](3)

 

 - Y de las funciones básicas de gestión de memoria dinámica [malloc y realloc; memcpy y memmove] (4)

 

 

 Que podemos esquematizar como sigue:


                        Registros
                   ___________________
                     Claves    Datos

(1) WRITE          [ K (3)  |    D   ]        (2) CHAIN | (5) SETLL READE UPDATE...
    [. . .                                              | (6) CRTLF CPY SAVF RSTF ...
    [. . .
    [. . .
  + [. . . (4) [  malloc, realloc, memcpy y memmove  ]
    [. . .
    [. . .
    [. . .



En donde normalmente las claves y los datos estarán construidas por subestructuras compuestas de campos, y que gráficamente podemos representar con puntos separadores:


   K       D
111.111 AAA.AAA
222.222 BBB.BBB
333.333 CCC.CCC
444.444 DDD.DDD
555.555 EEE.EEE
. . .



Entonces podemos construir todo un desarrollo de procedimientos

 

         - A nivel registro(5)                        

- A nivel global de fichero(6)

 

Hasta llegar a tener un gestor de base de datos virtual dotado de una rica familia de funciones, que se van agregando a los servicios del núcleo central WRITE y CHAIN, de forma natural, capa a capa, hasta completar el esquema anterior.

 

 

                                                                                                      ________

 



- Versiones de los fuentes

   

    Los módulos escritos en C presentados anteriormente precisan de unas pequeñas adaptaciones para ajustarse al protocolo C ANSI estándar seguido en iSeries, particularmente en el programa de servicio SRRCW, que debe prescindir de la sobrecarga de funciones y debe acudir a introducir pequeños módulos interfaz que desglosen las funciones resumidas de la versión de partida.

 

Por poner un ejemplo, el vaciado de datos de un fichero virtual se ejecuta con la instrucción SRRCW_CLRF, de prototipos sobrecargados originales:

 

 short int SRRCW_CLRF(const char *cFILE, long *lNBAJp);

 short int SRRCW_CLRF(const char *cFILE);

 

                y que ahora se convierten a

 short int SRRCW_CLRF(const char *cFILE, long *lNBAJp);

 short int SRRCW_CLRFR(const char *cFILE);

 

 

     De todas formas, la  función de “sobrecarga” será tarea ahora del programa de servicio en rpg SRAGM.

   

 

     Así, en el ejemplo, los prototipos anteriores se convierten en:

 

 

      * Limpia un fichero virtual
 
     DSRAGM_CLRF       PR            10I 0                                      0/1
ErrorProceso
     D P_pFILE                         *   VALUE OPTIONS(*STRING)               Nombre Fichero   1*I
     D P_NBorr                       10I 0       OPTIONS(*NOPASS)               NºReg.Borrados   2*O       

 

 

 

     Que puede utilizarse de forma reducida o extendida, empleando el segundo parámetro opcional, como sigue:

 
 
         SRAGM_CLRF(TTFILE);
         SRAGM_CLRF(TTFILE:TTNBOR);
 
         TTErro = SRAGM_CLRF(TTFILE);
         TTErro = SRAGM_CLRF(TTFILE:TTNBOR);

              

 



- Instrucciones de compilación

 

Se presentará un resumen de las instrucciones a seguir para compilar módulos, programas de servicio y programas ordinarios tanto en C como en ILE-RPG de la manera adecuada para poder integrar los desarrollos



 


- Programas de muestra

 Se presentarán diversas muestras orientadas al manual de uso, que se centran en un banco de pruebas del sistema, en dos vertientes, una para uso batch en pruebas industriales (CC8888) y otra con un interfaz visual de propósito pedagógico (CC8810), y otras aplicaciones que responden al siguiente menú:

 

 


Estas aplicaciones cargarán una lista de ficheros virtuales como la que sigue




- Índice de referencia

 

 Los desarrollos que se citan se han agrupado en el índice al que se accede en el enlace. Estos desarrollos se han implementado utilizando una cuenta de virtual400.com

 

 

                                                                                                      ________