Mi primer programa COBOL en TSO

El presente post explica cómo crear y compilar un programa en COBOL bajo TSO, sin CICS ni otras aplicaciones de las que se dependan.

Asunciones Previas

Lo primero de todo es que hay que entender cómo se compila un programa COBOL. Disponemos de un fuente, lanzamos un trabajo que lo compilará y que nos generará un objeto o ejecutable. Una vez obtenido el programa objeto, haciendo un CALL a ese objeto, el programa se ejecutará mostrando un resultado.

Así que en primer lugar, debemos tener una librería donde estará nuestro fichero fuente, donde editaremos un miembro con el lenguaje de programación COBOL. Esta librería se definirá como cualquier librería de JCLs, es decir, particionada y con un blocaje fijo de 80.

En segundo lugar, necesitamos tener una librería donde, una vez compilado, dejemos el programa objeto o ejecutable resultado de nuestra programación. Esta librería, al contener un objeto, NO se debe definir como bloque fijo de 80, sino como U o no definido (Undefined). Esto es muy importante, ya que de no definir así la librería, no funcionará.

Y por último, necesitamos un JCL que llame a las herramientas de compilación y ensamblado, que lea nuestro miembro fuente en COBOL y nos deje el objeto en la librería creada con formato U, mediante las variables y parámetros oportunos.

Creación del programa COBOL (fuente)

Si no la tenemos ya, crearemos una librería particionada y con un formato de registro fijo de 80 caracteres. En nuestro ejemplo, la llamaremos TSOAD05.AD40.COBOL. Dentro de dicha librería, crearemos un miembro llamado HOLAMUN que contendrá el siguiente programa (Es el clásico HOLA MUNDO):

       IDENTIFICATION DIVISION.                                         
        PROGRAM-ID. HOLAMUN.                                            
        AUTHOR. JAVIER CASTILLA PARA EUSKAL ENCONTER Y MAINFRAMECORNER  
        INSTALLATION. IBM-ZOS.                                          
        DATE-WRITTEN. 13 FEBRERO DE 2013.                               
        DATE-COMPILED.                                                  
        SECURITY. NONE.                                                 
       ENVIRONMENT DIVISION.                                            
        CONFIGURATION SECTION.                                          
         SOURCE-COMPUTER. MIORDENADOR.                                  
         OBJECT-COMPUTER. MIORDENADOR.                                  
         SPECIAL-NAMES.                                                 
           DECIMAL-POINT IS COMMA.                                      
       DATA DIVISION.                                                   
       WORKING-STORAGE SECTION.                                         

       PROCEDURE DIVISION.                                              
       001-MAIN.                                                        

           DISPLAY "HOLA MUNDO PARA MAINFRAMECORNER.COM Y EUSKAL ENC."  
           GOBACK.

Creación del programa objeto

Este paso comprende 2 puntos: Por un lado, si no la tenemos creada ya, crear una librería de programas objetos con formato U (no me cansaré de repetirlo) y por otro, lanzar el JCL que nos leerá el miembro fuente, lo compilará y dejará el objeto en la librería de programas objetos.

Creación de la librería de Objetos

Es muy sencillo: Simplemente asignamos las pistas que consideremos oportunas a una librería particionada y definimos su formato de registro como U. En este documento, la hemos llamado TSOAD05.AD40.LOADLIB.

Submisión del JCL compilador de COBOL

Para compilar el programa, crearemos el siguiente JCL:

//TSOAD05J JOB 1AD40G12,'JAVIER CASTILLA',NOTIFY=&SYSUID,
//  MSGCLASS=Q,CLASS=A,MSGLEVEL=(1,1),REGION=0M,TIME=(0,7)
//**************************************************************
//* COMPILAR Y LINKEDITAR HOLAMUN (HOLAMUNDO EUSKAL ENC Y MFCORNER)
//* SYSLIB  ES LA LIB. DE COPYS
//* SYSIN   ES LA LIB. DE PROGRAMAS FUENTES
//* SYSLMOD ES LA LIB. DE PROGRAMAS OBJETOS O EJECUTABLES
//**************************************************************
//STEP0    EXEC IGYWCLG,PARM.COBOL='LIB,APOST,XREF,MAP,OFFSET'
//COBOL.SYSIN  DD DSN=TSOAD05.AD40.COBOL(HOLAMUN),DISP=SHR
//STEPLIB  DD DSN=TSOAD05.AD40.LOADLIB,DISP=SHR
//LKED.SYSLMOD   DD DSN=TSOAD05.AD40.LOADLIB(HOLAMUN),DISP=SHR
//

Los parámetros en negrita son los que hay que editar para que no funcione en nuestro ejemplo:

-       COBOL.SYSIN es la ficha DD donde apuntaremos a nuestro fichero COBOL fuente.

-       STEPLIB es la ficha DD donde apuntaremos a la librería de objetos.

-       LKED.SYSLMOD es la ficha DD donde definiremos el miembro objeto que se generará resultado de la compilación.

Una vez lanzado el JCL, debería acabar con Cond.Code 0. Si acaba con otro, habrá que mirar la salida del JOB para asegurarse si ha habido un error en la transcripción del programa, y corregir el programa fuente. Si consultamos la librería TSOAD05.AD40.LOADLIB, debería existir un miembro creado llamado HOLAMUN.

Ejecución del programa COBOL

Para ejecutar el programa, simplemente se realizará un TSO CALL al miembro objeto del programa. En nuestro ejemplo, el comando será:

TSO CALL ‘TSOAD05.AD40.LOADLIB(HOLAMUN)’

cobol1

Fig. 1: Resultado del CALL

Si habéis conseguido un resultado de acuerdo a la figura 1, ya sabéis compilar y crear programas en COBOL.

Otras formas de ejecutar el programa:

- Desde el ISPF yendo con =3.4 y editando la librería TSOAD05.AD40.LOADLIB y a la izquierda del miembro HOLAMUN escribís: CALL

Por último, agradecer a Javier Castilla su tiempo y pruebas, y al Foro de la Euskal Encounter por brindar la oportunidad de crear el caldo de cultivo para entusiastas del mundo de los mainframes.

About admin

Director de Proyectos de entornos Mainframe, AIX y AS/400, llevo mas de 10 años trabajando para el sector servicios y banca, así como proyectos de sistemas, renovación tecnológica, estrategias de backup, y consultoría de sistemas.