Serie ficheros virtuales

 

 

 


RPG Ficheros virtuales

 

 

 

Funciones  del grupo de emulación de colas (FIFO)

 

 

        Estructura de soporte

 

        Programa de muestra

 

        Relación de prototipos

 

       SRAGM_FIFO_NEW

 

        SRAGM_FIFO_NOW

 

        SRAGM_FIFO_READ

 

        SRAGM_FIFO_WRIT

 

 

                                                                                                   ________

 

 

 

Estructura de soporte

 

 

En la presentación de las funciones de colas se va a introducir una estructura de soporte auxiliar. En el uso ordinario no se precisaría, pero en este capítulo las muestras que se van a crear se tratarán con sus instrucciones específicas de colas y además con las instrucciones generales de los ficheros virtuales, a efectos ilustrativos.

 

Para esta última visión, se va a utilizar la definición de estructura de datos DS8820c, que se compone de una subestructura de clave principal y una subestructura de datos, que se detallan a continuación:

 

 

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

      *  DS8820   *  Wk.Carga sfl CC8820

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

 

      ***

      * *  Definición fichero virtual DS8820

      ***

     D DS8820c         DS                  QUALIFIED BASED(pDS8820c)            Soporte  DS8820

     D  DSK                                LIKEDS(DSWKc)                        ClavesPF DS8820

     D  DSD                                LIKEDS(DSWKd)                        Datos    DS8820

 

      ***

      * *  Definición claves

      ***

     D DSWKc           DS                  QUALIFIED BASED(pDSWKc)

     D  CCSTAM                       24S 0                                      EstampilladoYnºorden

      *                                                                     AAAAMMDDHHMMSSNNNNNNNNNN

      *                                                                     123456789012345678901234

      *                                                                              1         2

 

      ***

      * *  Definición datos fichero virtual DS8820

      ***

     D DSWKd           DS                  QUALIFIED BASED(pDSWKd)

     D  CCDATO                       40                                         Datos almacenados

 

 

 

                                                                                                   ________

 

 

Programa de muestra

 

DS8820 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 programa de muestra CC8820 (de interfaz visual CCD8820) que se va a utilizar como referencia en este capítulo.

 

 

Veamos las instrucciones principales relativas al uso de los servicios de emulación de pilas:

 

 

         . . .

 

 

         // Crea la pila si no existe previamente

 

 

         TTNID = SRAGM_FIFO_NOW(XXFILE:%size(DSENTR));

 

         . . .

 

 

         // Bucle de presentación

 

 

            . . . (exfmt)

 

 

 

            // Recupera ítem de pila

 

            if *IN08;

 

 

               // Recupera ítem

 

               clear DSEXIT;

               TTErro = SRAGM_FIFO_READ(XXFILE:%addr(DSEXIT));

 

 

               // Recarga pantalla

 

               clear TTCLV;

               iter;

 

            endif;

 

 

 

            . . .

 

            // Graba ítem de pila

 

            if DSENTR <> *BLANKS;

               TTResu = SRAGM_FIFO_WRIT(XXFILE:%addr(DSENTR));

            endif;

 

           . . .

 

 

Con una presentación visual como sigue

 

 

 

                                                                                         ________

 

 

 

 

 

  Grupo emulación colas (FIFO: First input, first output)

 

 

 

 

      * Genera una cola FIFO virtual. Si existe previamente, la limpia.

 

     DSRAGM_FIFO_NEW   PR            10I 0                                      Identificador0=Error

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

     D P_DIMD                        10I 0 VALUE                                DIM(TAMAÑO)DATOS 2*I

     D P_MAXR                        10I 0 VALUE OPTIONS(*NOPASS)               MAXIMO NUM.ITEMS 3*I

 

 

 

 

      * Genera una cola FIFO virtual, si no existe previamente.

 

     DSRAGM_FIFO_NOW   PR            10I 0                                      Identificador0=Error

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

     D P_DIMD                        10I 0 VALUE                                DIM(TAMAÑO)DATOS 2*I

     D P_MAXR                        10I 0 VALUE OPTIONS(*NOPASS)               MAXIMO NUM.ITEMS 3*I

 

 

 

 

      * Lee un ítem de una cola virtual

 

     DSRAGM_FIFO_READ  PR            10I 0                                      0/1 Error

     D P_pFIFO                         *   VALUE OPTIONS(*STRING)               Nombre Cola     1*I

     D P_pDATO                         *   VALUE                                pDatosObtenidos 2*I

     D P_OPCI                          N   VALUE OPTIONS(*NOPASS)               0/1 Borrar Item 3*I

 

 

 

 

      * Graba un ítem en una cola virtual

 

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

     D P_pFIFO                         *   VALUE OPTIONS(*STRING)               Nombre Cola      *I

     D P_pDATO                         *   VALUE OPTIONS(*STRING)               pDatosGrabados   *I

 

 

 

 

 

                                                                                         ________

 

 

 

 

 

  SRAGM_FIFO_NEW. Prototipo

 

 

 

 

      * Genera una cola FIFO virtual. Si existe previamente, la limpia.

 

     DSRAGM_FIFO_NEW   PR            10I 0                                      Identificador0=Error

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

     D P_DIMD                        10I 0 VALUE                                DIM(TAMAÑO)DATOS 2*I

     D P_MAXR                        10I 0 VALUE OPTIONS(*NOPASS)               MAXIMO NUM.ITEMS 3*I

 

 

 

 

 

Ejemplo

 

 

         TTNID = SRAGM_FIFO_NEW(XXFILE:%size(DSENTR));

 

 

En este ejemplo se genera un fichero virtual en formato de pila con el nombre que se indica en la variable XXFILE, con tamaño de datos como el de la variable de entrada en pantalla DSENTR. El número máximo de registros se toma por defecto.

 

Si XXFILE existiera previamente, SRAGM_FIFO_NEW lo limpia dejando su número de registros a cero. Si se desea respetar el contenido anterior utilícese SRAGM_FIFO_NOW.

 

TTNID recoge el identificador asignado por el sistema al nuevo fichero.

 

 

Otro ejemplo de uso sería:

 

 

              TTNID = SRAGM_FIFO_NEW('DS8820':%size(DSENTR));

 

 

              En donde el nombre se explicita como la constante 'DS8820'.

 

 

 

SRAGM_FIFO_NEW equivale a una instrucción como la siguiente

 

 

         TTNID = SRAGM_NEW(XXFILE:25:%size(DSENTR));

 

En donde se crea un fichero virtual con tamaño de clave 25 y tamaño de datos %size(DSENTR).

 

Las 25 posiciones reservadas al estampillador directo siguen el formato  AAAAMMDDHHMMSSNNNNNNNNNN\  con 

 

                  AAAAMMDD  : AAAA=Año  MM=Mes y DD=Día actuales,

                  HHMMSS    : Hora en curso,

                  NNNNNNNNNN: Contador secuencial,

  y 

                  \ = Terminador C ANSI, que se elude en presentación.

 

Normalmente los ficheros virtuales se crean con Dimensión Datos > Dimensión Claves y solapamiento de Claves y Datos. Sin embargo, en la emulación de pilas y colas no se usa el solapamiento, que se sustituye por interfaces específicas que eluden el tratamiento de claves, puesto que son de asignación automática. En cualquier caso, también pueden usarse los procedimientos ordinarios, como hace el programa de muestra CC8820.

 

 

Funciones relacionadas

 

   SRAGM_FIFO_NOW   Tiene el mismo funcionamiento que SRAGM_FIFO_NEW, pero no limpia datos previos si hay pre-existencia.

 

 

 

                                                                                         ________

 

 

 

 

 

  SRAGM_FIFO_NOW. Prototipo

 

 

 

 

      * Genera una cola FIFO virtual, si no existe previamente.

 

     DSRAGM_FIFO_NOW   PR            10I 0                                      Identificador0=Error

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

     D P_DIMD                        10I 0 VALUE                                DIM(TAMAÑO)DATOS 2*I

     D P_MAXR                        10I 0 VALUE OPTIONS(*NOPASS)               MAXIMO NUM.ITEMS 3*I

 

 

 

 

 

Ejemplo

 

 

         TTNID = SRAGM_FIFO_NEW(XXFILE:%size(DSENTR));

 

 

En este ejemplo se genera un fichero virtual en formato de pila con el nombre que se indica en la variable TTFILE con tamaño de datos como el de la variable de entrada en pantalla DSENTR. El número máximo de registros se toma por defecto. Si TTFILE existiera previamente, SRAGM_FIFO_NOW no actuaría. La alternativa SRAGM_FIFO_NEW garantiza un fichero vacío tras su ejecución.

 

 

SRAGM_FIFO_NOW internamente ejecuta un SRAGM_NID que si resulta con contenido provoca su terminación y en caso contrario emite un SRAGM_FIFO_NEW.

 

 

Las notas de SRAGM_FIFO_NEW son por tanto de aplicación también aquí.

 

 

 

                                                                                         ________

 

 

 

 

 

  SRAGM_FIFO_READ. Prototipo

 

 

 

 

      * Lee un ítem de una cola virtual

 

     DSRAGM_FIFO_READ  PR            10I 0                                      0/1 Error

     D P_pFIFO                         *   VALUE OPTIONS(*STRING)               Nombre Cola     1*I

     D P_pDATO                         *   VALUE                                pDatosObtenidos 2*I

     D P_OPCI                          N   VALUE OPTIONS(*NOPASS)               0/1 Borrar Item 3*I

 

 

 

 

Ejemplo

 

 

                  TTErro = SRAGM_FIFO_READ(XXFILE:%addr(DSEXIT));

 

 

 

En el ejemplo, se recupera el siguiente ítem de pila del montón existente en XXFILE; además el elemento extraído se consume.

 

El ejemplo está tomado del código del programa de muestra CC8820.

 

 

 

Si partimos de la situación de expuesta en la imagen

 

 

 

 

Al emitir la instrucción SRAGM_FIFO_READ pasaríamos a la situación siguiente tras consumir el primer ítem encolado:

 

 

 

Funciones relacionadas

 

  

   SRAGM_FIFO_WRIT  Graba un ítem en una pila.

 

 

 

                                                                                         ________

 

 

 

 

 

  SRAGM_FIFO_WRIT. Prototipo

 

 

 

 

      * Graba un ítem en una cola virtual

 

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

     D P_pFIFO                         *   VALUE OPTIONS(*STRING)               Nombre Cola      *I

     D P_pDATO                         *   VALUE OPTIONS(*STRING)               pDatosGrabados   *I

 

 

 

 

Ejemplo

 

 

            TTResu = SRAGM_FIFO_WRIT(XXFILE:%addr(DSENTR));

 

 

 

Con esta instrucción se graba el contenido de la variable DSENTR en la pila virtual XXFILE.

 

 

El ejemplo está tomado del código del programa de muestra CC8820. Una muestra visual tras la emisión de varias grabaciones sería

 

 

 

Es interesante comparar la forma de archivo de los ítems de cola frente a los ítems de pila que se presentan en el siguiente capítulo.

 

 

Funciones relacionadas

 

   SRAGM_FIFO_READ   Recupera un ítem de una pila

 

 

                                                                                         ________