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 ejecucin se detendr hasta que el programa llamado termina la ejecucin. Salir del programa instruccin se utiliza en el programa llamado para transferir el control.

Programa llamado Limitaciones

Estos son los llamados requisitos del programa:

  • Varillaje seccin deben ser definidos en el programa llamado. Se compone de elementos de datos en el programa. Los elementos de datos no debera tener clusula de valor. Clusula PIC deben ser compatibles con las variables que se pasan a travs del llamado programa.

  • Procedimiento divisin 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 instruccin se utiliza en el programa llamado para transferir el control. Debe ser la ltima declaracin en el programa llamado.

Los parmetros 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 continuacin, los nuevos valores se reflejan en el programa que realiza la llamada. SiPOR clusula no es especificado, entonces las variables siempre se pasa por referencia.

Sintaxis

A continuacin 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 continuacin, los nuevos valores no se reflejar en el programa que realiza la llamada.

Sintaxis

A continuacin 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 Esttica se produce cuando un programa es compilado con la opcin del compilador NODYNAM. Un esttico llamado programa se carga en el almacenamiento en tiempo de compilacin.

  • Llamada Dinmica se produce cuando se compila un programa con la DYNAM y NODLL opcin del compilador. Un dinmico programa llamado se carga en el almacenamiento en tiempo de ejecucin.

Advertisements