En relación con el post sobre Mapas Cobol que escribimos hace algún tiempo, algunos de vosotros nos habéis enviado mails preguntando cuál era la diferencia entre los Mapas Físicos y los Mapas Simbólicos. Esta era una duda que también tenía yo cuando empecé a trabajar con Cobol, pero en realidad la diferencia es muy sencilla.
Cuando creamos un Mapa Cobol, normalmente damos de alta su código en una librería MAPLIB (por ejemplo, la nuestra es LIBPR.MAPLIB.JJ00). Una vez completado dicho código, lo que hacemos es lanzar el Proceso de Compilación para Mapas, del cual ya hemos hablado en posts anteriores.
El Compilador de Mapas (DFHMAPS) es un JCL que, con su ejecución, genera varios objetos de salida. Entre ellos tenemos al Mapa Físico y al Mapa Simbólico, que es de lo que va el tema de hoy. A continuación, detallamos en qué consiste cada uno de los mapas creados.
1º) Mapa Fuente: es el objeto que codificamos nosotros y donde se especifican los campos que se van a mostrar por pantalla. Es el único mapa existente antes de la compilacion. También se denomina Mapa BMS (Basic Mapping Support). Ya hemos hablado de la Estructura de los Mapas Fuentes en posts anteriores.
2º) Mapa Simbólico: se genera tras la ejecución del Ensamblador y es un objeto que incorpora las declaraciones de las variables que hemos definido en el mapa fuente. Normalmente, este objeto se utiliza como Copy en el programa Cobol donde vamos a incluir el Mapa.
3º) Mapa Físico: se genera tras la ejecución del Linkage y el objeto creado es un módulo ejecutable. Este es el objeto que se invoca desde el programa Cobol en el momento en que se desea mostrar el Mapa por pantalla.
Como vemos, el Mapa Simbólico y el Mapa Físico no son dos tipos diferentes de Mapas, sino que son dos objetos asociados al Mapa que hemos codificado previamente. Estos objetos no van a existir hasta que no hayamos lanzado el compilador correspondiente.
Ejemplo de Mapa Simbólico
Supongamos ahora que codificamos un Mapa simple para mostrar por pantalla el mensaje "Hola Mundo". Tendríamos el siguiente código.
JJ0004M DFHMSD TYPE=DSECT,MODE=INOUT,TERM=ALL,STORAGE=AUTO,
LANG=COBOL
*
JJ0004A DFHMDI SIZE=(24,80),LINE=1,COLUMN=1,COLOR=GREEN,HILIGHT=OFF,
MAPATTS=(COLOR,HILIGHT),DSATTS=HILIGHT,CTRL=FREEKB
DFHMDF POS=(10,10),LENGTH=20,INITIAL='********************',
COLOR=BLUE,ATTRB=(ASKIP,NORM)
DFHMDF POS=(11,10),LENGTH=20,INITIAL='* *',
COLOR=BLUE,ATTRB=(ASKIP,NORM)
DFHMDF POS=(12,10),LENGTH=20,INITIAL='* > HOLA, MUNDO! *',
COLOR=BLUE,ATTRB=(ASKIP,NORM)
DFHMDF POS=(13,10),LENGTH=20,INITIAL='* *',
COLOR=BLUE,ATTRB=(ASKIP,NORM)
DFHMDF POS=(14,10),LENGTH=20,INITIAL='********************',
COLOR=BLUE,ATTRB=(ASKIP,NORM)
*
DFHMSD TYPE=FINAL
END
Tras la compilación del Mapa se nos generaría un Mapa Simbólico en la librería que hayamos definido para ello (en nuestro caso, usamos la librería LIBPR.COPYS.JJ00). El contenido de dicho mapa sería el siguiente.
EDIT LIBPR.COPYS.JJ00(JJ0004M) - 01.00 Columns 00001
Command ===> Scroll ===>
****** ***************************** Top of Data ****************
000001 01 JJ0004AI.
000002 02 FILLER PIC X(12).
000003 01 JJ0004AO REDEFINES JJ0004AI.
000004 02 FILLER PIC X(12).
****** **************************** Bottom of Data **************
Este objeto puede ser usado como Copy en cualquier programa Cobol donde se precise.
Ejemplo de Mapa Físico
Al mismo tiempo, nuestro compilador de Mapas habrá generado un Mapa Físico en la librería correspondiente (en nuestro caso se trata de la librería LIBPR.MODULOS.JJ01). El contenido de dicho mapa será el siguiente.
BROWSE LIBPR.MODULOS.JJ01(JJ0004M) Line 0000000
Command ===> Scr
********************************* Top of Data ********************
IEWPLMH ...Ì...................Ì...........ð...........m...h......
******************************** Bottom of Data ******************
Este objeto es el que se debe invocar desde el programa Cobol cuando queramos mostrar el Mapa por pantalla.
Y esta es toda la diferencia existente entre el Mapa fuente, el Mapa Simbólico y el Mapa Físico. Recordad que no se trata de tipologías diferentes de mapas, sino de objetos que quedan asociados entre sí tras realizar la compilación de un Mapset.
Pues nada, esperamos que con este post haya quedado más o menos resuelta la duda con la que comenzábamos al principio. Si no es así, no dudéis en seguir preguntando.
Saludos.
Este comentario ha sido eliminado por el autor.
ResponderEliminar