Alters

COBOL: flujo externo


Hacía días que no escribía nada aquí... he estado algo liado...

Sin contar esta entrada, quedan solamente dos más para completar este mini - curso. Al final del mismo, siendo un poco audaces y haciendo buen uso de la lógica pragmática seréis capaces de programar en COBOL. Obviamente las técnicas avanzadas no las trataremos en este apartado; quizás más adelante hago un mini - curso de COBOL avanzado...

En fin, esta entrada será relativamente corta, vamos allá

 - Flujo externo

Flujo externo

Como flujo externo se entiende todo aquello que ocurre fuera del código que estamos editando; es decir, está fuera del alcance de la aplicación.

En java, llamar a un objeto es "usar" el flujo externo (normalmente decimos que "llamamos al método X de la Clase Y", o "delegamos en X"...). En COBOL no hay objetos en sí (aunque se pueden simular con tiempo y algo de código), pero un programa externo es algo similar a llamar a un objeto, si lo planteamos bien.

Por supuesto, el flujo externo no se basa solamente en llamar a otro archivo COBOL; podemos llamar a cualquier fichero ejecutable externo, ya veremos.

Para llamar a un archivo COBOL externo, necesitamos usar la sentencia CALL.

CALL "PROGRAMA" USING var.

Analicemos rápidamente: "PROGRAMA" es el ID (PROGRAM-ID, generalmente el mismo nombre que el archivo, por convención siempre se hace) del COBOL al que llamamos.

La parte de "USING var" es opcional. Si la usamos, estamos pasando "var" por referencia, es decir, pasamos el puntero de var (que puede ser una variable compleja) y "PROGRAMA" la recibirá.

Esto debe nos debe resultar muy familiar: FUNCIONES. Sí, pero funciones EXTERNAS, no hay que olvidarlo.

Recalco esto porque las funciones externas consumen un poco más de recursos, ya que se tienen que apliar datos, desapliar, llamar al fichero COBOL, modificar el runtime...

Volviendo al tema; para cuando usamos la cláusula "USING", la variable "var" debe estar declarada en la WSS, sino dará error.

Por otra parte, el programa "PROGRAMA" debe incluir una sección especial en la DATA SECTION:

es la llamada LINKAGE SECTION.

En ella declaramos una variable con la misma PIC que la variable que pasamos.

Finalmente, en "PROGRAMA" debemos incluir otra cláusula en la PROCEDURE, de manera que quedaría algo así:

IDENTIFICATION DIVISION.
    PROGRAM-ID. PROGRA.
    REMARKS. PRUEBA DE FLUJO

ENVIRONMENT DIVISION.

DATA DIVISION.
WORKIN-STORAGE SECTION.

LINKAGE SECTION.
01 PASO.
    02 PA1 PIC X.
    02 PA2 PIC 9.

PROCEDURE DIVISION USING PASO.

El "USING var" indica que debe meter la variable pasada en la variable indicada (PASO, en este caso). Después, podremos acceder a PASO sin problemas.

Si queremos hacer algo similar a un valor de retorno, solo tenemos que ampliar la variable a pasar, y añadir una variable que dependa de ella, coincidente al valor a retornar. Luego, en la procedure, se rellena ese campo y al salir del programa, como se pasa por parámetro, el programa principal lo recibirá.

Para llamar a otro archivo ejectuable (un exe, por ejemplo), debemos hacerlo mediante un "bridge". COBOL permite hacer un call al sistema, del siguiente método:

CALL "SYSTEM.EXE" USING str.

En este caso, USING es obligatorio (en teoría no), y le pasamos como argumento el comando a ejecutar (por ejemplo, "DIR"). De este modo, en str podemos poner una llamada a un exe, y se ejecutará sin problemas.

Como última aclaración, decir que en todo programa que llamemos (programa de COBOL), si no queremos que termine el programa, debemos cambiar el STOP RUN típico por el EXIT PROGRAM. Esto hace que COBOL retorne el flujo de ejecución una posición atrás en la pila, y por tanto, el programa anterior recobra el control.

Tal y como había dicho, esta será una entrada corta, así que aquí acaba el tema del flujo externo. Solo nos queda aprender a usar ficheros, y después haré un ejemplo completo (haré dos versiones, una compacta y la otra diversificada en varios archivos).

Así pues,
Hasta la próxima!