COBOL - Subrutinas



Cobol subrutina es un programa que puede ser compilado con total independencia, pero no pueden ser ejecutadas independientemente. Hay dos tipos de subrutinas: subrutinas internas comorealizardeclaraciones y externas subrutinas comoLLAMAR verbo.

Llamada Verbo

Llamada verbo se usa para transferir el control de un programa a otro programa. El programa que contiene la LLAMADO verbo es el Programa de llamadas y el programa que se llama sea conocido como el Programa llamado. Programa que realiza la llamada ejecución se detendrá hasta que el programa llamado termina la ejecución. Salir del programa instrucción se utiliza en el programa llamado para transferir el control.

Programa llamado Limitaciones

Estos son los llamados requisitos del programa:

  • Varillaje sección deben ser definidos en el programa llamado. Se compone de elementos de datos en el programa. Los elementos de datos no debería tener cláusula de valor. Cláusula PIC deben ser compatibles con las variables que se pasan a través del llamado programa.

  • Procedimiento división utilizando tiene una lista de variables que se pasan en el programa que realiza la llamada y el orden debe ser el mismo que se menciona en la llamada verbo.

  • Salir del programa instrucción se utiliza en el programa llamado para transferir el control. Debe ser la última declaración en el programa llamado.

Los parámetros se pueden pasar entre los programas de dos maneras:

  • Por referencia
  • Por contenido

Llamada por referencia

Si los valores de las variables en el programa llamado son modificadas, a continuación, los nuevos valores se reflejan en el programa que realiza la llamada. SiPOR cláusula no es especificado, entonces las variables siempre se pasa por referencia.

Sintaxis

A continuación se incluye la sintaxis de la llamada a subrutina por referencia:

CALL sub-prog-name USING variable-1, variable-2.

Ejemplo

Ejemplo siguiente es el principal programa de llamadas y UTIL es el programa llamado:

IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-STUDENT-ID PIC 9(4) VALUE 1000.
   01 WS-STUDENT-NAME PIC A(15) VALUE 'Tim'.

PROCEDURE DIVISION.
   CALL 'UTIL' USING WS-STUDENT-ID, WS-STUDENT-NAME.
   DISPLAY 'Student Id : ' WS-STUDENT-ID
   DISPLAY 'Student Name : ' WS-STUDENT-NAME
STOP RUN.

Programa llamado

IDENTIFICATION DIVISION.
PROGRAM-ID. UTIL.

DATA DIVISION.
   LINKAGE SECTION.
   01 LS-STUDENT-ID PIC 9(4).
   01 LS-STUDENT-NAME PIC A(15).

PROCEDURE DIVISION USING LS-STUDENT-ID, LS-STUDENT-NAME.
   DISPLAY 'In Called Program'.
   MOVE 1111 TO LS-STUDENT-ID.
EXIT PROGRAM.

JCL para ejecutar el programa COBOL:

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=MAIN

Cuando se compila y ejecuta el programa antes mencionado, se produce el resultado siguiente:

In Called Program
Student Id : 1111
Student Name : Tim

Llamada por contenido

Si los valores de las variables en el programa llamado son modificadas, a continuación, los nuevos valores no se reflejará en el programa que realiza la llamada.

Sintaxis

A continuación se incluye la sintaxis de la llamada a subrutina por contenido:

CALL sub-prog-name USING 
BY CONTENT variable-1, BY CONTENT variable-2.

Ejemplo

Ejemplo siguiente es el principal programa de llamadas y UTIL es el programa llamado:

IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-STUDENT-ID PIC 9(4) VALUE 1000.
   01 WS-STUDENT-NAME PIC A(15) VALUE 'Tim'.

PROCEDURE DIVISION.
   CALL 'UTIL' USING BY CONTENT WS-STUDENT-ID, BY CONTENT WS-STUDENT-NAME.
   DISPLAY 'Student Id : ' WS-STUDENT-ID
   DISPLAY 'Student Name : ' WS-STUDENT-NAME
STOP RUN.

Programa llamado

IDENTIFICATION DIVISION.
PROGRAM-ID. UTIL.

DATA DIVISION.
   LINKAGE SECTION.
   01 LS-STUDENT-ID PIC 9(4).
   01 LS-STUDENT-NAME PIC A(15).

PROCEDURE DIVISION USING LS-STUDENT-ID, LS-STUDENT-NAME.
   DISPLAY 'In Called Program'.
   MOVE 1111 TO LS-STUDENT-ID.
EXIT PROGRAM.

JCL para ejecutar el programa COBOL:

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=MAIN

Cuando se compila y ejecuta el programa antes mencionado, se produce el resultado siguiente:

In Called Program
Student Id : 1000
Student Name : Tim

Tipos de llamada

Hay dos tipos de llamadas:

  • Llamada Estática se produce cuando un programa es compilado con la opción del compilador NODYNAM. Un estático llamado programa se carga en el almacenamiento en tiempo de compilación.

  • Llamada Dinámica se produce cuando se compila un programa con la DYNAM y NODLL opción del compilador. Un dinámico programa llamado se carga en el almacenamiento en tiempo de ejecución.

Advertisements