EXIRION COBOL REGULATIONS AND STANDARDS ANSI-85
1
By Rolando Fernández Benavidez
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
NO WARRANTIES OF ANY NATURE ARE EXTENDED BY THIS DOCUMENT Any product or related information described herein is only furnished pursuant and subject to the terms and conditions of a duly executed agreement to purchase or lease equipment or to license software. The only warranties made by Nova32 Development Software, if any, with respect to the products described in this document are set forth in such agreement. Nova32 Development Software cannot accept any financial or other responsibility that may be the result of your use of the information in this document or software material, including direct, special, or consequential damages. You should be very careful to ensure that the use of this information and/or software material complies with the laws, rules, and regulations of the jurisdictions with respect to which it is used. The information contained herein is subject to change without notice. Revisions may be issued to advise of such changes and/or additions. Notice to End Users: This is commercial private expense.
computer
software
or
hardware
documentation
developed
at
Use, reproduction, or disclosure by the Government is subject to the terms of Nova32 Development Software standard commercial license for the products, and where applicable, the restricted/limited rights provisions of the contract data rights clauses.
2
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernĂĄndez Benavidez in the MĂŠxico States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
INDICE
ANOTACIONES SOBRE ASPECTOS RELEVANTES DEL EXIRION COBOL. Cambios en el lenguaje cobol en 1985 ..................... Formatos de programa fuente ..............................
6 6
PROGRAMA ANIDADO. Programa anidado .........................................
6
CAMBIOS EN LA IDENTIFICATION DIVISION. Cambios en la Identification Division ....................
6
CAMBIOS EN LA DATA DIVISION. Compartición de datos .................................... Nuevas clausulas en la definición de ítems ............... Niveles de tablas ........................................
6 7 8
CAMBIOS EN LA PROCEDURE DIVISION. Operaciones de condición ................................. Otras condiciones ........................................ Terminadores explícitos de sentencias .................... Llamada a subprogramas ................................... LLamadas estáticas ....................................... LLamadas dinámicas ....................................... Sentencia cancel ......................................... Sentencia evaluate ....................................... Consideraciones sobre la evaluate ........................ Ejemplos de evaluate ................................ Sentencia initialize ..................................... Nueva opciones de la perform ............................. Aspectos adicionales ..................................... Depuración con cobol EXIRION.............................. Interactivamente .................................... Batch ............................................... Compilación ......................................... Compilaciones con programas secundarios .................. Llamada entre programas cobol EXIRION..................... Transfiriendo control a otros programas .................. Programa principal y subprogramas ........................
3
8 9 9 9 9 10 10 11 11 11 13 13 15 16 16 16 17 17 17 18 18
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
LLAMANDO PROGRAMAS. Llamando programas ....................................... Programas anidados ....................................... Estructura de programas anidados ......................... Ejemplo .................................................. Normas para el uso de estructura de programas anidados ... Llamando a programas anidados ............................ Ejemplo ..................................................
19 21 21 22 23 23 24
CALL ESTATICAS Y LINK DINAMICAS. CALL estáticas y LINK dinámicas .......................... Utilizando CALL estática ................................. Utilizando LINK dinámica ................................. Compartiendo datos usando el atributo external ........... Pasando datos mediante by refence or by content .......... Describiendo items comunes en el programa llamante ....... Describiendo datos comunes en el programa llamado ........ Linkage section ..........................................
25 25 26 27 28 29 29 30
INSTRUCCIONES DE PROGRAMAS COBOL. Instrucción inspect ...................................... 30 Instrucción initialize ................................... 31
INSTRUCCIONES DE TABLAS. Instrucción Instrucción Instrucción Instrucción
evaluate ..................................... string ....................................... unstring ..................................... read .........................................
32 33 34 35
COBOL EXIRION, SORT. File section ............................................. Procedure division ....................................... Release .................................................. Return ................................................... Sort-Return .............................................. Clausula occurs ..........................................
35 35 37 37 38 38
TABLAS. Tablas ................................................... Tablas de longitud variable .............................. Descripción de una tabla ................................. Tablas de más de una dimensión ...........................
4
41 42 43 43
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
Indexación ............................................... Declaración 'SET' ........................................ Declaración 'SEARCH' ..................................... Opción 'VARYING' ......................................... Tablas definidas con más de un índice .................... Búsqueda binaria ......................................... Declaración 'SEARCH ALL' ................................. Búsqueda dicotómica ...................................... Literales ................................................ Ficheros ESDS ............................................
44 44 45 47 48 49 50 52 53 53
PASAR DATOS EN ETM A COBOL EXIRION. Pasar datos en ETM a cobol ........................... Instrucción set .......................................... Pointer .................................................. Ejemplos .................................................
EJEMPLOS
DE
RUTINAS.
Rutina general de conversión de fechas ................... Rutina de conversión de bits a bytes ..................... Rutina general de verificación de dígitos ................ Rutinas de cálculos ...................................... Número de días entre dos fechas ..................... Número de meses entre dos fechas .................... Restar un periodo a una fecha .......................
5
54 54 54 55
55 57 58 60 60 61 62
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
CAMBIOS
EN
EL
LENGUAJE
COBOL
EN
1985
Las tres revisiones más importantes de lenguaje COBOL, publicadas por subcomité "COBOL ANS" conocido como X3.23 fueron: en 1968, en 1974 y 1985, el COBOL EXIRION es compatible con estas especificaciones.
FORMATO
DE
PROGRAMA
el en
FUENTE
ID DIVISION. ---ENVIROMMENT DIVISION. ---DATA DIVISION. ---PROCEDURE DIVISION. ---END PROGRAM Nom-prog. (idéntico al de PROGRAM-ID.)
--------------------| PROGRAMA ANIDADO | --------------------* Una secuencia de programas entrada del compilador.
CAMBIOS
EN
COBOL
LA
separados
IDENTIFICATION
| ID DIVISION. Nom-Prog is | |
* de
programa programa
ser
también
DIVISION
COMMON PROGRAM INITIAL PROGRAM
Un programa fuente puede contener a los recursos de los programas Dentro
* Se dice que un "A", sino hay otro "B".
(INITIAL) Pueden
| | |
otros y estos Referenciar alguno de los cuales están contenidos.
"B" está directamente contenido en otro contenido en el "A" que también contenga
al
* Se dice que un programa "B" esta indirectamente contenido en el "A", si existe un programa contenido en el "A" que a su vez contiene el "B".
6
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
--> COMMON B : es un también por otros.
programa
contenido
--> INITIAL B: cuando este programa es contiene se ponen en estado inicial.
en
otro y puede
llamado, él
ser
y todos
llamado
los
Estas opciones implican el introducir en los programas COBOL de recursividad, conjuntamente con la declaración "CANCEL" que comentara más adelante.
CAMBIOS
COMPARTICION
DE
EN
LA
DATA
que
la se
función
DIVISION
DATOS
*
Los datos contenidos en un referenciados por cualquier descritos.
*
Si un programa está contenido dentro de otro, ambos pueden referenciar los datos que tengan el atributo "GLOBAL".
1) NUEVAS
CLAUSULAS
EN
LA
"EXTERNAL" pueden ser programa que los tenga
DEFINICION
DE
ITEMS.
--> GLOBAL B El dato está disponible para dentro del que lo declara. atributo
de
nivel
todo
programa
contenido
01.
--> EXTERNAL B
programa
La memoria asociada con el ITEM de datos, esta asociada con la unidad de ejecución más que con el en particular dentro de la unidad de ejecución. Este ITEM dentro de No
implica
puede ser la unidad que
es
referenciado por de ejecución. global
y
es
un
cualquier programa
atributo
de nivel 01.
--> POINTER B
esta cláusula elemental, no numérico y Puede usarse ITEMS "PUNTEROS".
otros
7
define un ITEM de 4 bytes. en
operaciones
de
de
datos
"PUNTERO"
comparación
o
en
de
nivel
"MOVE" a
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
También
en :
- sentencia SET. - En una condición de relación. - En la "USING" de una "CALL", "ENTRY" "PROCEDURE DIVISION".
2) NIVELES
TABLAS.
tener
hasta
* pueden
DE
siete
* por tanto podrá haber clausulas OCCURS. * Un
número
de
ITEM
podrá
EN
LA
hasta
1) OPERACIONES
siete
referenciarse
PROCEDURE
DE
anidamientos
subscrito variable
o
uso de nombres
la de
IS
(DEPENDING
lo
8
cual
también
el mínimo
CONDICION.
[ NOT ]
| | |
GREATER THAN OR EQUAL TO ( >= ) | | LESS THAN OR EQUAL TO ( <= ) |
sentencia SET para condición. Ejemplo :
se
ON)
DIVISION
cambiar
el
estado
| SET ESTADO TO TRUE [ 88 ESTADO VALUE '2'. ] | | EQUIVALE A MOVER 2 AL NIVEL 01 DE ESTADO. con
de
indexado por 7.
|IDENTIFICADOR-1 IS [ NOT ] ALPHABETIC-LOWER | | ALPHABETIC-UPPER
|IDENTIF-1 | |
cabecera de
niveles, dimensiones.
* en las tablas de longitud ocurrencias podrá ser cero.
CAMBIOS
o
potencia
el
uso
de
los
de
los
| | |
nombres
de
condición.
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
2) OTRAS
en en en
CONDICIONES.
operaciones operaciones operaciones
3) TERMINADORES
aritméticas : de mover datos : de entrada/salida :
EXPLICITOS
DE
NOT NOT NOT NOT NOT
ON SIZE ERROR ON OVERFLOW INVALID KEY AT END AT END-OF-PAGE
SENTENCIAS
END-ADD END-DIVIDE END-PERFORM END-SEARCH END-UNSTRING
END-CALL END-EVALUATE END-READ END-START END-WRITE
END-COMPUTE END-IF END-RETURN END-STRING END-WRITE
END-DELETE END-MULTIPLY END-REWRITE END-SUBTRACT
Cuando el compilador lo asocia al último Solo son válidos en
encuentra un terminador explicito, verbo no emparejado. las sentencias con forma condicional.
Ejemplo: | ADD 1 TO CONTADOR | ON SIZE ERROR SET ERROR-OPERACION TO TRUE | END-ADD Con
su
uso
4) LLAMADA
se
A
puede
eliminar
prácticamente
el uso de "."
SUBPROGRAMAS
| CALL [ IDENTIFICADOR-1 / LITERAL ] | | USING BY REFERENCE IDENTIF-2 ................. | | * USING BY REFERENCE ADDRESS OF NOMBRE-REG ..... | | USING BY CONTENT IDENTIF-3 ....... / LITERAL / | | LENGTH OF IDENTIF-3
9
| | |
| | | | | | | | |
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
BY
la
CALL
y
REFERENCE:
el valor del parámetro pasado se evalúa en es asignado al correspondiente del programa llamado el cual puede procesarlo.
BY En el
momento
de
CONTENT:
este caso el valor pasado.
programa
llamado
no
puede
---> en tiempo de compilación se LINK_PROGRAM (llamadas dinámicas) o CALL (llamadas estáticas)
opción
el
modificar
puede
especificar
la
LLAMADAS ESTATICAS -------------------
el
último
El programa principal y el subprograma forman parte del mismo modulo, por tanto cuando el control se pasa al programa llamado este ya está en memoria, por lo que las siguientes llamadas al subprograma lo encontraran estado. (excepto cuando el programa llamado tiene el atributo "INITIAL")
en
LLAMADAS DINAMICAS ------------------El programa llamado es un módulo independiente y solo se carga en memoria cuando es llamado. Las llamadas Sucesivas lo encontraran en el último estado.
SENTENCIA CANCEL =================
|CANCEL IDENTIFI-1 / LITERAL
|
se cancela un programa llamado, de tal forma que próxima llamada lo pondrá en su estado inicial. *** los
subprogramas
*** los
efectos
han
de
terminar
con
GOBACK
la
o
EXIT
PROGRAM. siempre
son
jerárquicos, en
caso
de
programas
anidados *** todo
10
ello
fortalece
la
recursividad
en
el
COBOL
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
SENTENCIA EVALUATE ===================
|EVALUATE IDENTIFIC-1 | | LITERAL | | EXPRESION | | TRUE | | FALSE ALSO ...... (VARIOS) | | LAS MISMAS EXPRESIONES | |WHEN FRASE-1 | | ALSO FRASE-2 .....(VARIAS) | | SENTENCIA IMPERATIVA | | |[ WHEN OTHER SENTENCIA IMPERATIVA ]
--> FRASE-1
puede
ser : ANY CONDICION-1 TRUE FALSE NOT IDENTIFI-1 LITERAL EXPR.ARIT.
--> FRASE-2 puede
| | | | | | | | | | | | | | | | | | | |
THRU (las mismas )
ser : ANY CONDICION-2 TRUE FALSE NOT (igual anterior) THRU (igual)
CONSIDERACIONES SOBRE LA EVALUATE ====================================
* implanta
11
en
COBOL
una
declaración
que
facilita
la
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
"CASE"
para
y
de
las
el
clase
programación estructurada. ----> equivale otros lenguajes, cuya carencia en el COBOL se criticaba. * facilita la construcción cuales antes era necesario la "IF" anidadas.
de sentencias recurrir a
* las expresiones a evaluar se resultado objeto de la selección. * los pares de sujetos (numérico, carácter, condición * usar la conjunto * en
una
EVALUATE
llenan
pueden
seleccionar
el
especificarse
la
de
ser
compleja
de la
de
proceso
hasta
declaración
lógica
sujeto
y objetos deben TRUE o FALSE).
EVALUATE para de acciones.
a
la
de
255
selección
misma
un
sujetos
y
objetos. * la ejecución de una EVALUATE - la declaración asociada con - la declaración asociada con - ninguna condición "WHEN" es * las "WHEN" cacion, por bilidad.
finaliza cuando: una "WHEN" es seleccionada. una "WHEN OTHER" es SELECC. seleccionada.
son comprobadas en el orden de especifitanto se codificaran en orden de proba-
* Dos operandos relacionados de la misma clase.
con
una
"THRU"
deben
ser
* cualquier sujeto u objeto de selección en el cual se ha especificado como "TRUE" o "FALSE" se le asigna ese valor a los ITEMS correspondientes.
EJEMPLOS DE EVALUATE ----------------------
EVALUATE CAMPO1 WHEN 'D' MOVE 'CONDUCTOR' TO CAMPO1 WHEN 'R' MOVE 'COCHE' TO CAMPO1 WHEN SPACE MOVE SPACES TO CAMPO1 END-EVALUATE
---> USANDO IF IF CAMPO1 = 'D'
12
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
MOVE 'CONDUCTOR' TO CAMPO1 ELSE IF CAMPO1 = 'R' MOVE 'COCHE' TO CAMPO1 ELSE IF CAMPO1 = SPACE MOVE SPACES TO CAMPO1 END-IF END-IF END-IF
EVALUATE TRUE ALSO TRUE WHEN EDAD < 18 ALSO SEXO = 'M' MOVE 'CHICO JOVEN' TO CAMPO1 WHEN EDAD < 18 ALSO SEXO = 'F' MOVE 'CHICA JOVEN' TO CAMPO1 WHEN EDAD > 18 ALSO SEXO = 'M' MOVE 'SE¥OR' TO CAMPO1 WHEN EDAD > 18 ALSO SEXO = 'F' MOVE 'SE¥ORITA' TO CAMPO1 WHEN OTHER MOVE 'NO VALIDO' TO CAMPO1 END-EVALUATE
SENTENCIA INITIALIZE =====================
| | | | | | | | | | | | | | | | |
* es
INITIALIZE IDENTIF-1 ........ [ REPLACING ALPHABETIC ALPHANUMERIC NUMERIC ALPHANUMERIC-EDITED NUMERIC-EDITED DATA BY INDENTIF-A LITERAL ]
equivalente
* IDENTIF-1
puede
a
una
o
más
| | | | | | | | | | | | | | | | |
"MOVE"
ser : - Un ITEM subscrito - una tabla completa (no DEPENDING ON)
13
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
- una
estructura
* cuando se usa REPLACING IDENTIF-A/LITERAL compatibles con IDENTIF-1. * Si
no
se
usa
deben
ser
REPLACING se asume : - Blancos para los ALPHA - Zeros para los NUMERIC
NUEVAS OPCIONES DE LA PERFORM =================================
Conjuntamente con la EVALUATE refuerza el lenguaje COBOL como lenguaje adaptado a la programación estructurada. en principio distinguir entre la PERFORM en línea (la cual se representa con el delimitador END-PERFORM) y la PERFORM fuera de línea, que es la PERFORM tradicional.
* PERFORM ..... TIMES * |PERFORM [ IDENTIF-1/ENTERO-1 ] TIMES | | [ SENTENCIA IMPERATIVA ] | |END-PERFORM
* PERFORM | | | | | | | | | | | | | | |
*
Si la
CON
UNTIL :
PERFORM NOMBRE-PROC1
[ THRU NOMBRE-PROC2 ]
[ WITH TEST
BEFORE /
AFTER ]
UNTIL CONDICION-1
[ DECLARACION-IMPERATIVA
END-PERFORM ]
| | | | | | | | | | | | | | |
se especifica Nombre-Proc1 no se debe especificar declaración imperativa y la END-PERFORM.
* WITH ....
14
| | | | |
para
probar
la
condicion-1
antes
o
después
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
de la ejecución. BEFORE = DO WHILE AFTER = DO UNTIL (Al | | | | | | | | | | | | | | | | | | | | | | | |
menos
se
ejecuta
una
vez)
PERFORM PROC-1 [ THRU PROC-2 ] [ WITH TEST BEFORE / AFTER ] VARYING IDENT-1 FROM IDENT-2 INDEX-1
INDEX-2 LITERAL
BY IDENT-3
UNTIL CONDICION-1
INDEX-3
AFTER
...
FROM .....
BY ....
UNTIL ...
[ DECLARACION IMPERATIVA END-PERFORM ]
| | | | | | | | | | | | | | | | | | | | | | | |
Esta modificación de la "PERFORM" supone implantar en el COBOL el "DO WHILE" y el "DO UNTIL", cuya carencia También se le criticaba al COBOL. en resumen el COBOL85 con sus nuevas funciones y ampliaciones han cubierto los flancos que le hacían vulnerables ante las críticas respecto al desfase con las funciones que incluían los lenguaje últimamente desarrollados ( PASCAL, C).
ASPECTOS ADICIONALES =====================
1.- el PHOENIX suministra un nuevo precompilador del “DBS”, “COB2”, que esta estricto en COBOL EXIRION.
parámetro en la opción HOST del sirve para indicar si el fuente
2.- la opción de compilación DYNAM, que permite programas, al ser llamados por la sentencia CALL módulos que usen comandos ETM. 3.- para poder llevar a cabo la depuración opción TRANCE de la transacción CEDX.
15
la no
carga dinámica de es aplicable a
no se deben
compilar,
usar la
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
4.- un programa es reentrante cuando puede ser ejecutado por varios usuarios o tareas al mismo tiempo, en COBOL EXIRION, la opción es RENT. Si se especifica esta opción, también es necesario especificar la opción RESIDENT.
DEPURACION CON COBOL EXIRION ==========================
ENTORNO
|COMPILAR|SOPORTE DE |DEPURACION|DEPURACION | |MODULOS OB.|BATCH |INTERACTIVA ------------------------------------------------------------INTERACTIVO TSO | SI | SI | SI | SI | | | | ETM/OS 2.0 | NO | SI | SI | NO | | | | ETM/OS 1.0 | NO | SI | NO | SI(BTS) | | | | BATCH EXIRION | SI | SI | SI | SI | | | | Se
puede
utilizar:
INTERACTIVAMENTE ---------------* en
al
modo
FULL
SCREEN.
* en modo de edición de línea. utilizarlo de forma interactiva, el * Controlar * Alterar
y
visualizar
temporalmente
el la
flujo
programador
lógica
del del
puede:
programa. programa.
* Ejecutar y re-ejecutar todo o parte de un programa utilizando diferentes valores de datos. * Inspeccionar y modificar campos to seleccionados del programa. ------> ES
PRERREQUISITO
DISPONER
DEL
de
ISPF
datos
en
VERSION
pun-
2.
BATCH ----Las peticiones de depuración se proporcionan en un fichero, creado previa la ejecución del programa. los programas ETM se pueden depuran en modalidad BATCH.
16
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
COMPILACION ----------Las opciones de compilación pueden especificarse mediante la ficha CBL o su sinonimia PROCESS, también vía JCL en la sentencia EXEC que llama al compilador, en la PARM : //P01CL001 EXEC PGM=COBCL64 // SET COBTYPE= CXL // SET COBLIBS= 0 para modificar las opciones por defecto se cro COBTYPE, que se ensamblara y catalogara COBTYPE.
usa la macomo modulo
COMPILACIONES CON PROGRAMAS SECUNDARIOS ==========================================
cuando se hacen llamadas a programas secundarios desde programas en COBOL II, tanto si el secundario es COBOL II, como si en COBOL OS/XL65, los dos tienen que estar compilados con la misma opción RES o NORES. Si el programa secundario es COBOL OS/XL65, no se permite la compilación de este con ninguna opción de DEBUG, pues en tiempo de ejecución nos daría un ABEND de usuario 1010. Si el programa secundario esta linkeditado con la opcion RENT, y no es realmente reentrante, en tiempo de ejecución nos puede dar un abend de sistema B0A o 30A.
LLAMADAS ENTRE PROGRAMAS COBOL EXIRION =====================================
Una gramas COBOL.
es
RUN UNIT (unidad de ejecución) incluye uno o más proobjeto y puede incluir otros lenguajes diferentes al
El primer programa cobol que se ejecuta en la usualmente, el MAIN PROGRAM (programa principal).
RUN
UNIT
Cuando una RUN UNIT consiste en varios programas llamados, estos programas deben estar dispuestos para comunicarse con los otros programas. Estos necesitan transferir control y usualmente necesitan tener acceso a datos comunes.
17
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
Otro método que puede ser usado para la comunicación entre programas es el de programas COBOL anidados. Esto permite que todos los programas requeridos pro una aplicación esten contenidos dentro del MAIN PROGRAM y de este modo solo es necesario una simple compilación.
TRANSFIRIENDO CONTROL A OTROS PROGRAMAS -------------------------------------------
En la Procedure Division un MAIN subprograma, y un subprograma puede, otro programa. El programa A llama PROGRAMA LLAMANTE y el B PROGRAMA
PROGRAM puede llamar a un asimismo, todavía llamar a al B. El A se denomina LLAMADO.
El programa COBOL llamado empieza a ejecutarse al principio de la Procedure Division. Es posible especificar otro punto de entrada (ENTRY POINT) donde empiece la ejecución utilizando la etiqueta ENTRY el PROGRAMA LLAMADO. Sin embargo, esta no es una práctica recomendada en la programación estructurada. Cuando el PROGRAMA LLAMADO se ha procesado completamente puede también devolver control al LLAMANTE o finalizar la UNIT RUN. Un cutar
programa llamado no debe, directa o a su llamador. Ejemplo: EL PROGRAMA X EL Y Y EL Z
indirectamente, ejeLLAMA AL Y LLAMA AL Z LLAMA AL X
A esto se le denomina una RECURSIVE CALL. Si cutar una CALL RECURSIVA a un programa COBOL termina anormalmente (ABEND).
se intenta ejela RUN UNIT
El PROGRAMA LLAMANTE y todos los LLAMADOS deben estar (todos compilados con la opción del compilador: RESIDENT o NORESIDENT, a menos que haya sido especificada la opción MIXRES en tiempo de ejecución.
PROGRAMA PRINCIPAL Y SUBPROGRAMAS. ------------------------------------No hay sentencias especificas u opciones para identificar si un programa COBOL es principal o es un subprograma. Normalmente el primer programa COBOL que empieza la ejecución de una RUN UNIT es el MAIN PROGRAM (programa principal). Todos los otros programas COBOL en la RUN UNIT (unidad de ejecución) son Subprogramas.
18
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
Hay
diferentes
maneras
de
finalizar
un
programa:
+--------------+-------------+-------------------------------------+ |Tipo programa |Finaliza con:| Efectos que causa | +--------------+-------------+-------------------------------------+ | MAIN PROGRAM | STOP RUN | Termina la RUN UNIT y deletea | | (programa | | todos los programas llamados di- | | (programa | | los programas llamados dinamicamen- | | principal) | | namicamente en la RUN UNIT y | | | | todos los programas linkeditados | | | | con aquellos. El control es de- | | | | vuelto al llamador del programa | | | | PRINCIPAL que usualmente suele | | | | ser el sistema operativo | +--------------+-------------+-------------------------------------+ | MAIN PROGRAM | GOBACK | Tiene el mismo efecto que | | (programa | | STOP RUN | | principal) | | | +--------------+-------------+-------------------------------------+ | MAIN PROGRAM |EXIT PROGRAM | No tiene ningun efecto | | (programa | | | | principal) | | | +--------------+-------------+-------------------------------------+ | SUBPROGRAMA |EXIT PROGRAM | Devuelve control a su inmediato | | | o | llamador sin finalizar la RUN UNIT | | | GOBACK | | +--------------+-------------+-------------------------------------+ | SUBPROGRAMA | STOP RUN | el efecto es el mismo que en | | | | un programa principal: Todos los | | | | programas COBOL en la RUN UNIT | | | | son terminados y se devuelve | | | | control al llamante. | +--------------+-------------+-------------------------------------+ | SUBPROGRAMA: Una sentencia EXIT PROGRAM implícita es gene- | | rada si no hay una instrucción siguiente eje-| | cutable | +------------------------------------------------------------------+
Un subprograma es usualmente dejado en su último estado de uso (LAST-USED STATE), cuando termina con EXIT PROGRAM o GOBACK. La siguiente vez que es llamado en la RUN UNIT (unidad de ejecución) sus valores internos estarán como fueron dejados, excepto los valores de retorno para las instrucciones PERFORM que serán restaurados a su valor inicial. Por el contrario, un programa principal es inicializado cada vez que es llamado. Hay dos excepciones: 1ra.- Un subprograma que es llamado dinámicamente por un programa COBOL OS/XL65 o COBOL EXIRION y luego es cancelado, con la opción RESIDENT estará en el estado inicial la siguiente vez que es llamado. 2da.- Un
19
programa
con
el
atributo
INITIAL
estará
en
el
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
estado
inicial
cada
vez
que
es
llamado.
LLAMANDO PROGRAMAS -------------------
a
Se pueden usar diferentes métodos otro programa. Esto incluye : 1.- CALLs
a
programas
2.- CALLS
estáticas
para
transferir
control
anidados.
a
otros
programas
COBOL EXIRION VS
a
otros
programas
COBOL EXIRION VS
compilados separadamente. 3.- CALLs
dinámicas
compilados separadamente. 4.- CALLs a programas en otros FORTRAN, y COBOL OS/XL65.
lenguaje
incluyendo
PLI,
Las CALL a programas anidados te permiten crear aplicaciones utilizando las técnicas de programación estructurada. Pueden también ser utilizadas en lugar de procesos PERFORM para prevenir modificaciones a items inintencionadamente. Las CALL a programas anidados pueden usar bien la instrucción CALL -literal- o bien CALL -identificador-. Una CALL estática es utilizada para llamar a un programa compilado separadamente que es link-editado dentro del mismo módulo de carga que el programa LLAMANTE. Una CALL dinámica es utilizada para llamar a un programa compilado separadamente que ha sido link-editado en un modulo de carga separado del programa LLAMANTE. En este caso el modulo del subprograma es cargado en memoria la primera vez que es llamado. Una CALL CALL-literal NODYNAM.
estática ocurre en un programa
Las CALL estáticas son CALL dinámicas y utilizan
cuando se usa la instrucción que es compilado con la opción
ejecutadas más rápidamente u ocupan menos memoria.
que
las
El uso de la instrucción CALL -identificador- O CALL -literalcompilado con la opción DYNAM da como resultado una CALL dinámica. Se debería considerar la utilización de una call dinamica cuando: 1.- los subprogramas llamados con una instrucción CALL
20
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
-literal- son usados infrecuentemente o son muy grandes. 2.- Se quiera llamar a subprogramas en su UNUSED STATE. 3.- Se tiene un programa AMODE(24) en la misma RUN UNIT con programas COBOL EXIRION que quieren que se ejecuten en la modalidad de direccionamiento de 31 BITS. 4.- El nombre del programa que va a ser llamado se conoce en tiempo de ejecución.
PROGRAMAS ANIDADOS -------------------
Los programas anidados proporcionan un método mediante el cual se pueden crear funciones modulares (modular functions) para la aplicación mantenimiento de técnicas de programación estructurada. Se pueden utilizar como procesos PERFORM con la capacidad adicional de proteger los items locales. Los programas anidados también dan flexibilidad para depurar los programas antes de ser incluidos en la aplicación y dar la capacidad para compilar la aplicación con una simple invocación al compilador.
ESTRUCTURA DE PROGRAMAS ANIDADOS -----------------------------------
Un programa COBOL puede contener otros programas COBOL. Los programas contenidos pueden ellos mismos contener otros progragramas. Un programa contenido puede ser directamente o indirectamente contenido dentro de un programa.
21
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
EJEMPLO: -------+-- Programa X | -------| ....... | Call X1 | Call X2 | ....... | Stop run | | +-- Programa X1 | | -------| | | | ........ | | Call X11 | | Call X12 | | ........ | | Stop run | | | | +-- Programa X11 | | | -------| | | | | | ........ | | | ........ | | | Exit Program | | | | | +-- End Program X11 | | | | +-- Programa X12 | | | -------| | | | | | ........ | | | ........ | | | | | | Exit Program | | | | | +-- End Program X12 | | | +-| | +-- Programa X2 | | -------| | | | ......... | | ......... | | Exit Program | | | +-- End Program X2 | +-- End Program X
22
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernĂĄndez Benavidez in the MĂŠxico States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
NORMAS PARA EL USO DE ESTRUCTURA DE PROGRAMAS ANIDADOS --------------------------------------------------------------
de
Hay varias normas que programas anidados:
aplicar
cuando
se
utilizan
estructuras
1.- La IDENTIFICATION DIVISION es requerida en cada programa. Todas las otras divisiones son opcionales. 2.- El
nombre
de
programa
debe
ser
único.
3.- Los programas contenidos no pueden tener la COMFIGURATION SECTION. El programa outermost (mas exterior) debe especificar cualquiera de las opciones CONFIGURATION SECTION que pueda ser requerida. 4.- Cada programa contenido (llamado) es incluido en el programa continente (llamante) inmediatamente antes de su cabecera END-PROGRAM. 5.- Programas llamados con END-PROGRAM.
y
llamantes
deben
ser
terminados
LLAMANDO A PROGRAMAS ANIDADOS --------------------------------
Un programa contenido (llamado) solamente puede ser llamado directamente por su programa llamante, a menos que el llamado identificado como COMMON en su cláusula PROGRAM-ID. En este caso el programa COMMON puede también ser llamado por cualquier programa que este contenido directa o indirectamente dentro del mismo programa que el programa COMMON.
23
Solamente
programas
Las
recursivas
CALL
contenidos (llamados) pueden no
son
ser
COMMON.
permitidas.
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
EJEMPLO: -------+-- Program-id. A | ----------| | +-- Program-id. A1 | | ----------| | | | +-- Program-id. A11 | | | ----------| | | | | | +-- Program-id. | | | | ----------| | | | | | | +-- End Program | | | | | +-- End Program A11 | | | +-- End Program A1 | | +-- Program-id. A2 is | | ----------| | | +-- End Program A2 | | +-- Program-id. A3 is | | ----------| | | +-- End Program A3 | +-- End Program A
La
siguiente
tabla
describe
la
A111
A111
COMMON
COMMON
jerarquía
de
las
CALL:
+----------+----------------+-----------------------+ | El | Puede llamar | y Puede ser llamado | | Programa | a los programas| por los programas | +----------+----------------+-----------------------+ | A | A1,A2,A3 | Ninguno | +----------+----------------+-----------------------+ | A1 | A11,A12,A2,A3 | A | +----------+----------------+-----------------------+ | A11 | A111,A12,A2,A3 | A1 | +----------+----------------+-----------------------+ | A111 | A12,A2,A3 | A11 | +----------+----------------+-----------------------+ | A12 | A2,A3 | A1,A11,A111 | +----------+----------------+-----------------------+ | A2 | A3 | A,A1,A11,A111,A12,A3 | +----------+----------------+-----------------------+ | A3 | A2 | A,A1,A11,A111,A12,A2 | +----------+----------------+-----------------------+
24
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
Observar: .- que A2 no puede llamar a no estรก contenido en A2 .- que A111 no puede CALL RECURSIVA. .- que
A1
puede
llamar
llamar
a
A2
A1
a
porque
A11
no
porque
porque
A2
es
eso
es
COMMON
y
serรญa
una
COMMON.
CALL ESTATICAS Y DINAMICAS. ------------------------------
Cuando un subprograma es llamado puede estar ya en memoria y puede ser Linkeditado en el mismo mรณdulo de carga con el programa LLAMANTE (Call estรกtica) o puede ser cargado solamente al tiempo que es llamado (Call dinรกmica). Con la carga dinamica el programa llamado es cargado solamente cuando se necesita. cargado solamente cuando se necesita. El proceso de Link-edit difiere dependiendo programas con Call dinรกmica o estรกtica.
de
si
se
trata
de
UTILIZANDO CALL ESTATICA. ---------------------------
La instrucciรณn CALL-literal- (donde-literal- = nombre subprograma) es tratada por el compilador como una CALL estรกtica cuando la opciรณn del compilador NODYNAM estรก activa. Una CALL estรกtica es ejecutada mรกs rรกpidamente que una dinamica y es la preferida si la aplicaciรณn no requiere los servicios de una Call dinรกmica. Los programas llamados por una Call estรกtica no pueden ser deleteados (con cancel), por tanto el uso de CALLs estรกticas puede ocupar mรกs memoria principal. Si la memoria IS A CONCERN OF YOURS considerar el uso de CALLs dinรกmicas. Si CALLs CALLs
25
la opciรณn del compilador NODYNAM estรก activa todas del formato CALL -literal- en ese programa serรกn estรกticas.
las
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernรกndez Benavidez in the Mรฉxico States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
UTILIZANDO CALL DINAMICA. --------------------------Una Call dinámica carga el subprograma en tiempo de ejecución. El compilador de COBOL EXIRION auto determina si se trata de un llamado estático o dinámico, generalmente las llamadas con CALL serán estáticas, mientras que una llamada con LINK_PROGRAM será dinámica, sin embargo en caso de que el programa llamado sea de tipo dinámico, es posible utilizar CALL, el compilador es lo suficientemente inteligente para determinar si se trata de una llamada de tipo estática o dinámica, sin embargo para mayor facilidad de comprensión del código fuente COBOL, se recomienda usar CALL en llamadas estáticas y LINK_PROGRAM para llamadas dinámicas. Se
debe
utilizar
una
instrucción
CALL dinámica O LINK_PROGRAM
cuando: 1.- Los subprogramas llamados con CALL -literal- son usados infrecuentemente o son muy grandes. Si los subprogramas son llamados pocas veces, las CALL dinámicas tienen la ventaja de que trae el subprograma a memoria solamente cuando se necesita. 2.- Se quiera llamar a Subprogramas en su UNUSED STATE. Con el atributo INITIAL el subprograma será posicionado en su INITIAL UNUSED STATE cada vez que es llamado. Se puede, también, selectivamente preparar el ESTADO NO USADO o INICIAL mediante el proceso CALL y CANCEL. Este es un proceso más engorroso y fastidioso pero da control del estado si eso es lo esencial. Para hacer esto se utiliza una combinación de CALL dinamica y la instrucción CANCEL y se compila el programa con la opción RESIDENT. Cuando se cancela el subprograma que fue inicialmente llamado por un COBOL OS/XL65 o COBOL EXIRION, la siguiente CALL causara que el subprograma sea reinicializado a su UNUSED STATE. El comando cancel no toma acción alguna para borrar de memoria los subprogramas que fueron cargados dinamicamente y bifurcados mediante programas no COBOL. 3.- El en
26
nombre del programa a ser llamado solo se conoce tiempo de ejecución : - En este caso utiliza el formato CALL -identificador- donde -identificador- es el item que contendrá el nombre del programa llamado en tiempo de ejecución. En la práctica se debería utilizar CALL -identificador- cuando el programa a ser llamado varía, dependiendo de las condiciones del programa llamante. - CALL -identificador- es siempre dinámica, incluso si se utiliza la opción de compilación NODYNAM. Para que todas las CALL -literal- hechas en un programa sean dinámicas utilizar la opción de compilación DYNAM.
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
Cuando se utilice la opción de compilación NODYNAM, no se debe mezclar CALL -identificador- dinámica y una CALL -literalestática para el mismo subprograma. Esto desperdicia espacio porque dos copias del subprograma son cargadas en memoria y no se garantiza que el subprograma sea dejado en su LAST-USED-STATE. Cuando se tienen CALLs dinámicas en compilar utilizando la opción RESIDENT.
un
programa, se
debe
Las CALLs dinámicas toman más procesamiento pero pueden lizar menos memoria principal que las CALLs estáticas.
uti-
COMPARTIENDO DATOS USANDO EL ATRIBUTO EXTERNAL. ----------------------------------------------------
Los programas compilados separadamente (incluyendo los prograMas dentro de una secuencia batch) pueden compartir items mediante el uso del atributo EXTERNAL. EXTERNAL es especificado en el nivel del dato en la working de un programa guientes reglas:
01 de la descripción y se aplican las si-
1.- Los items subordinados a un grupo de items EXTERNAL, son ellos mismos EXTERNAL. 2.- El nombre usado para el item no puede ser usado en otro item EXTERNAL dentro del mismo programa. 3.- La cláusula VALUE no puede ser especificada para cualquier grupo de item o items subordinados EXTERNAL. Cualquier programa COBOL dentro de la RUN UNIT (Unidad de ejecución) que tenga la misma descripción para el item que el programa que contiene el item puede acceder y procesar el item.
Ejemplo: -------Si
el programa A tuviera la siguiente descripción: 01 EXT-ITEM1 PIC 99 EXTERNAL. El programa B podría acceder a ese item si tuviera misma descripción en su working.
la
Cualquier programa que pueda acceder a un item EXTERNAL puede cambiar su valor. No se debe utilizar este atributo para items que es necesario proteger.
27
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
PASANDO DATOS MEDIANTE BY REFENCE OR BY CONTENT ------------------------------------------------------
BY REFERENCE significa que el subprograma está y procesando el item en la working del programa vez de trabajar sobre una copia del dato.
refiriéndose llamante en
BY CONTENT significa que el programa llamante está pasando solamente el contenido del -literal- o -identificador-. Con una CALL ... BY CONTENT, el programa llamado no puede cambiar el valor del -literal- o -identificador- en el programa llamante, incluso si se modifica la variable en la cual se recibe el -literal- o el -identificador-. Si se quiere que compartirlos se debe
el
Cualquier programa
el subprograma reciba datos del llamante y especificar: CALL ... BY REFERENCE -IDENTIFICADOR-
cambio que llamante.
el
subprograma
haga
afecta
al
dato
en
Un -identificador- en la frase USING de la instrucción CALL ... BY REFERENCE puede ser un nombre de fichero además de un nombre de item. Si el -identificador- es un nombre de fichero para un fichero secuencial el compilador COBOL pasa la direccion de la DCB (Data Control Block) AS THIS ENTRY OF THE PARAMETER LIST. El -identificador- no puede ser el nombre de un fichero VSAM. NOTA: Este mecanismo no puede ser usado para ficheros partidos entre programas COBOL. Esto es solamente pasar la DCB a programas assembler. Si se quiere programa llamado
pasar la dirección del área de registro a un se debe especificar : CALL ... BY REFERENCE ADDRESS OF -RECORD NAME-
El subprograma recibe el pecial de dirección) para cifico.
77
El desde
se
quiere
pasar
de registro como un nivel 01 o los programas llamante y llamado.
la longitud del item se especificara: CALL ... BY CONTENT LENGTH OF -IDENTIFICADOR-
programa llamante pasa la longitud del -identificadorsu LENGTH special register (registro especial de longitud).
Cuando
28
ADDRESS SPECIAL REGISTER (Registro esel nombre de registro que se espe-
Se debe definir el nombre en la LINKAGE SECTION de Si
compara
los
literales
son
pasados
mediante
BY
CONTENT
el pro-
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
grama
llamado
no
puede
cambiar
el
valor.
Si se quiere pasar ambos (el item y su longitud) a un subprograma se especificara una combinación de BY REFERENCE y BY CONTENT, por ejemplo : CALL 'ERRPROC' USING BY REFERENCE A BY CONTENT LENGHT OF A. Los items en un programa llamante pueden estar descritos en la LINKAGE SECTION de todos los programas que llama directa o indirectamente. En este caso, la memoria para estos items es alocada en el programa llamante de nivel superior. Esto es, el programa A llama al B, el cual llama al C. Los items en el programa A pueden ser descritos en la LINKAGE SECTION de los programas B y C y estar disponibles a los tres programas.
DESCRIBIENDO ITEMS COMUNES EN EL PROGRAMA LLAMANTE --------------------------------------------------------
la
En el programa llamante, los items DATA DIVISION de la misma manera
comunes son descritos en que otros items. A menos
que ellos estén en la LINKAGE SECTION, la memoria es alocada para esos items en el programa llamante. Si se referencian datos en un fichero, este debe estar abierto cuando el dato sea referido. Se codificara la cláusula USING en las instrucciones
*****
CALL *********************
DESCRIBIENDO DATOS COMUNES EN EL PROGRAMA LLAMADO -------------------------------------------------------
En el programa llamado los items comunes son descritos la LINKAGE SECTION. Codificar la cláusula USING después de cabecera PROCEDURE DIVISION para recibir los datos.
en la
EJEMPLO: --------
29
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
Descripcion del Prog. LLAMANTE ----------------------
Descripcion del Prog. LLAMADO ----------------------
WORKING STORAGE SECTION. LINKAGE SECTION. +----------------------------+ +------------------------+ | 01 PARAM-LIST. | | 01 USING-LIST | | 05 PARTCODE PIC A. | | 10 PART-ID PIC X(5) | | 05 PARTNO PIC X(4). |---->>| 10 SALES PIC 9(5) | | 05 U-SALES PIC 9(5). | | | +----------------------------+ +------------------------+ . | . | . | . | . | . | . | . | | . | PROCEDURE DIVISION | PROCEDURE DIVISION | . | USING+----------+ . | |USING-LIST| . | +----------+ CALL CALLED-PROG +----------+ USING |PARAM-LIST| +----------+
LINKAGE SECTION -----------------
Se debe conocer lo que se va a pasar desde el programa llamante y la estructura de la LINKAGE, para aceptarlo. No importa que cláusula de la instrucción CALL se utilice para pasar los datos (BY REFERENCE o BY CONTENT). En cualquier caso el programa llamado debe describir los datos que esta recibiendo. Hace esto en la LINKAGE SECTION.
************************************************************************ INSTRUCCIONES DE PROGRAMAS COBOL EXIRION ************************************************************************
INTRUCCION INSPECT ------------------
INSPECT DATA-1 TALLYING CONTADOR FOR CHARACTERS AFTER INITIAL 'S' REPLACING ALL 'A' BY 'O' INSPECT DATA-1 TALLYING CONTADOR FOR LEADING '0' REPLACING FIRST 'A' BY '2' AFTER INITIAL 'C'
30
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
INSPECT DATA-1 REPLACING CHARACTERS BY ZEROS BEFORE INITIAL QUOTE INSPECT DATA-1 CONVERTING 'abcedfg' TO 'ABCEDFG' AFTER INITIAL '/' BEFORE INITIAL '?'
INSTRUCCION INITIALIZE ----------------------
INITIALIZE ALFANUMERIC-1 REPLACING ALPHANUMERIC DATA BY ALPHANUM-3 INITIALIZE CAMPO-NUMERICO REPLACING NUMERIC DATA BY CAMPO-NUMERICO-2 INITIALIZE CAMPO-EDICION REPLACING ALPHANUMERIC-EDITED DATA BY CAMPO-EDICIION-2
Un item de datos INDEX no se puede inicializar con INITIALIZE. La sentencia INITIALIZE no se puede usar para inicializar tablas de longitud variable (OCCURS...DEPENDING ON...)
01
TABLA-ENTRADA. 05 ENTRADA OCCURS 100 TIMES. 10 NOMBRE-TAB PIC X(5). <------ '$bbbb' o '$$$$$'. 10 NOMBRE-TAB PIX 9(5).
INITIALIZE TABLA-ENTRADA REPLACING ALPHANUMERIC DATA BY [ALL] '$'. --------------------
01
TABLA VALUE 'A'. 05 ELEMENTO OCCURS 5 TIMES PIC X.
----------|A|A|A|A|A| ----------1 2 3 4 5
INSTRUCCIONES DE TABLAS -----------------------
31
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
01 TABLA-1. 05 TABLA-ENTRY OCCURS 10 TIMES INDEXED BY IND-1. 10 TABLA-ENTRY2 OCCURS 5 TIMES ASCENDING KEY IS KEY1 INDEXED BY IND-3. 20 KEY1 PIC X(5). 20 KEY2 PIC X(10). SET IND-1 TO 2. SEARCH TABLA-1 AT END .............. WHEN tabla-ENTRY3 (IND-1, IND-2, IND-3) = '.......' WHEN ......... WHEN ......... WHEN ......... END-SEARCH.
INSTRUCCION EVALUATE. --------------------EVALUATE TRUE WHEN ESTADO-CASADO ................. WHEN ESTADO-SOLTERO ................. END-EVALUATE. EVALUATE CODIGO = 'A' WHEN TRUE .................. .................. WHEN TRUE .................. .................. END-EVALUATE.
EVALUEATE TRUE WHEN DD-31 WHEN DD-30 ............. ............. CONTINUE WHEN OTHER ............. ............. ............. END-EVALUATE.
VALOR-1 > 100 TRUE
FALSE
TRUE MM-31 MM-30
INDICADOR TRUE
ANY
TRUE AA-NORMAL AA-NORMAL
EVALUATE CANTIDAD * 4 WHEN NOT NUMERIC ..................
32
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
.................. WHEN 1 THRU 10 .................. .................. WHEN NOT 11 THRU 20 .................. .................. END-EVALUATE.
EVALUATE CAMPO-1 CAMPO-2 CAMPO-3 WHEN 1 1 1 MOVE 'A' TO INDICADOR-FINAL WHEN 1 1 0 MOVE 'B' TO INDICADOR-FINAL WHEN OTHER ................. END-EVALUATE.
EVALUATE CAMPO-1 CAMPO-2 WHEN 0 1 THRU 3 ................ ................ WHEN NUMERIC ANY ................ ................ END-EVALUEATE.
CAMPO-3 5
NOT NUMERIC
INSTRUCCION STRING. -------------------
STRING CAMPO-1 CAMPO-2 DELIMITED BY CAMPO-3 CAMPO-4 DELIMITED BY SIZE <-------- Todo INTO CAMPO-7 WITH POINTER CAMPO-8. <---------- Contiene el número de carácter a transmitir (no < 1 ni > que la variable receptora).
campo-4 campo-1 campo-2 ___________ ___________ _____ |6|7|8|9|*|0| |1|2|3|*|4|5| |A|*|B| ------------------------___________________________________ |1|2|3|A|6|7|8|9|*|0|b|b|b|b|b|b|b|b| -----------------------------------
33
campo-3 _ |*| -
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
campo-8 __ |11| -inicializar a 1 antes de la ejecución
la opción [ON OVERFLOW sentencia-imperativa] se ejecutara cuando se excedan los limites
INSTRUCCION UNSTRING. ----------------------
UNSTRING INTO
CAMPO-ORIGEN DELIMITED CAMPO-FINAL-1 DELIMITED CAMPO-FINAL-2 DELIMITED CAMPO-FINAL-3 DELIMITED CAMPO-FINAL-4 WITCH POINTER APUNTADOR TALLYING IN CONTADOR-TOTAL ON OVERFLOW GO TO .......
BY IN IN IN
DELIMITADOR OR ALLL '*' MARCA-1 COUNT IN CUENTA-1 MARCA-2 MARCA-3 COUNT IN CUENTA-3 COUNT IN CUENTA-3
delimitador en ejecución _ |?| campo-origen _________________________________ |1|2|3|*|*|4|5|6|?|?|7|A|B|C|D|E|F| ---------------------------------
campo-final-1 ___________ |1|2|3|b|b|b| -----------
marca-1 _ |*| -
campo-final-2 _________ |4|5|6|b|b| ---------
marca-2 _ |?| -
campo-final-3 _____ |b|b|b| -----
marca-3 _ |?| -
campo-final-4 _________ |7|A|B|C|D| ---------
34
cuenta-1 _ |3| -
cuenta-3 _ |0| cuenta-4 _ |5| -
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
apuntador contador-total __ __ |18| |05| <-------+------ inicializados a 1 --| antes de la ejecución. | | +------------------------------+
INSTRUCCION READ ----------------
READ nombre-fichero AT END .......... NOT AT END ...... END-READ.
C O B O L
EXIRION
:
S
O
R
T
FILE SECTION. -----------SD file-name1 DATA RECORD IS ....... 01 ......... En la SD se define el fichero que vamos a ordenar.
PROCEDURE DIVISION. ------------------
SORT file-name1 ----
ON
_ | | | | -
_ ASCENDING | --------- | DESCENDING | ---------- | --
KEY
data-name1, data-name2,....
[COLLATING SEQUENCE IS alphabet-name] --------
35
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
__ USING file-name2 ... ----INPUT PROCEDURE --------------_ | THROUGH IS section-name1 [| ------| THRU | ----
| | | | | | | | | |
__
_ | | | | --
--
__ GIVING file-name3 ... ----OUTPUT PROCEDURE ---------------_ | THROUGH IS section-name3 [| ------| THRU | ----
| | | | | | | | | |
--
*-->> FILE-NAME1 : *-->> ASCENDING DESCENDING :
*-->> DATA-NAME1 :
Indica la secuencia en la que se va a ordenar el fichero, ascendente ( de menor a moyor) o descendente. Campo en el que tenemos que basar la ordenacion, tiene que estar relacionado con el fichero, estar situado en la misma posicion y tener la misma longitud que en el fichero de entrada.
Especifica la secuencia a seguir para usar en las comparaciones no numericas para el campo clave en la opercion de ordenar.
Cuando se especifica esta opcion todos los registros en file-name2, son transferidos automaticamente a file-name1. Los ficheros de entrada tienen que tener organizacion secuencial.
*-->> INPUT PROCEDURE :
36
__ | | | | | section-name4 ] | | | | | --
Nombre del fichero definido en la SD.
*-->> COLLATING SEQUENCE :
*-->> USING :
_ | | | | --
| | | | | section-name2 ] | | | | | --
Especifica el nombre de la seccion que
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernĂĄndez Benavidez in the MĂŠxico States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
va a seleccionar o modificar registros de entrada antes que la operacion de ordenacion comienze. Puede tener uno o mas parrafos escritos consecutivamente y que no formen parte de la OUTPUT PROCEDURE. *-->> GIVING :
Cuando se especifica esta opcion todos los registros ordenados en file-name1 son transferidos automaticamente al fichero de salida file-name3. El fichero de salida debe tener organizacion secuencial, y debe estar definido en la FD.
*-->> OUTPUT PROCEDURE :
Especifica el nombre de seccion que va a seleccionar o modificar registros de salida. Puede tener uno o mas parrafos escritos consecutivamente y que no formen parte de la INPUT PROCEDURE.
RELEASE =======
Equivale a un WRITE, para grabar los registros en el fichero del SORT. RELEASE -------
record-name [FROM identifier] ----
Transfiere registros desde un area de entrada/salida a la fase inicial de una operacion de ordenacion. Solo se puede usar en SORT INPUT PROCEDURE. El record-name tiene que estar asociado al fichero definido en la SD.
RETURN ======
Equivale a una READ, para leer del fichero del SORT.
RETURN file-name RECORD -----[INTO identifier] ---AT END imperative-statement -----[END-RETURN] ----------
37
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernĂĄndez Benavidez in the MĂŠxico States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
Transfiere registros desde la fase final del sort o merge a la OTPUT PROCEDURE. Solo se puede usar en la SORT OUTPUT PROCEDURE El file-name tiene que estar definido en la SD
SORT-RETURN ===========
Equivale al return-code. Sort-return PIC S9(4).
CLAUSULA OCCURS ================
FUNCION: Permitir simplificar las inscripciones de campos de datos que se repiten con la misma descripción.
FORMATO 1: --------OCCURS ------
entero
TIMES
Entero indica el número de veces que se repite un campo con la misma descripción; su valor tiene que ser mayor que cero. EJEMPLO.
Se dispone de una cinta magnética grabada con un solo registro de 3254 caracteres cuyo contenido es el siguiente:
- Un campo de seis caracteres alfabéticos en los que figura el nombre de la empresa. - Un campo de ocho caracteres modelo de automóvil fabricado.
alfanuméricos en el que figura el
- 1080 campos de tres caracteres numéricos cada uno, cuyo contenido es el numero diario de automóviles fabricados durante los años 1971, 72 y 73 (los meses se consideran de 30 días). Se quiere, partiendo del formato de programador haga la descripción del mismo: 01
38
REGISTRO-AUTOS. 02 NOMBRE 02 MODELO 02 DIARIA1 02 DIARIA2
PICTURE PICTURE PICTURE PICTURE
dicho
registro, que el
A(6). X(8). 999. 999.
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
02 " " " 02 02 02
DIARIA3 " " " DIARIA1078 DIARIA1079 DIARIA1080
PICTURE " " " PICTURE PICTURE PICTURE
999. " " " 999. 999. 999.
Como se ve, esta descripción sería muy laboriosa y necesitaría mucho tiempo el llevarla a cabo, ya que serían necesarias varias hojas de codificación. Pero teniendo en cuenta que al ser los 1080 campos de la misma longitud, y del mismo tipo los caracteres a almacenar, se puede simplificar la descripción empleando la cláusula OCCURS, sustituyendo la anterior descripción por la equivalente: 01
REGISTRO-AUTOS. 02 NOMBRE 02 MODELO 02 DIARIA OCCURS 1080
PICTURE A(6). PICTURE X(8). PICTURE 999.
- A la descripción del campo en que entra a formar parte la clausula OCCURS se le da el nombre de tabla. - Al nombre de campo de datos, DIARIA, el cual es común para los 1080 campos se le denomina: Nombre Genérico o Sujeto, y a cada uno de los campos, elementos de la TABLA. - La cláusula OCCURS no puede especificarse en una descripción que lleve nivel 01 o 77.
FORMATO 2: --------OCCURS ------
entero-1
TO --
entero-2
TIMES DEPENDING ON ---------
nombre-de-datos-1
Este formato se emplea cuando el sujeto o nombre genérico tiene un Número variable de apariciones. Si en el ejemplo anterior, en vez de haber grabado la cinta con un único registro conteniendo la producción de 36 meses, cada uno de treinta días' se hubieran grabado 36 registros de longitud variable como consecuencia del numero diferente de días de cada mes; en este caso la descripción seria:
39
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
FD
ARCHIVO- AUTOS RECORDING V LABEL RECORD OMITTED.
01
REGISTRO-AUTOS. 02 NOMBRE PIC A(6). 02 MODELO PIC X(8). 02 NUMERO-DIAS PIC 99. 02 DIARIA OCURRS 28 TO 31 TIMES DEPENDING ON NUMERO-DIAS PIC 999.
A la vista de dicha descripción, entero-1 representa el numero mínimo de apariciones y entero-2 el número máximo. El valor mínimo que puede tomar entero-1 es cero y el valor máximo de entero-2 depende del tipo de compilador utilizado, pudiendo llegar a ser superior a 300.000. Existen compiladores para los que correcto describir: 02 02 02
entero-1
es opcional.
Siendo
MODELO PIC X(8). NUMERO-DIAS PIC 99. DIARIA OCCURS 31 TIMES DEPENDING ON NUMERO-DIAS PIC 999.
DEPENDING debe aparecer en la última inscripción de los campos de datos que constituyen el registro y, como consecuencia, nombre-de-datos-1 debe especificarse antes de la descripción del nombre genérico de la cláusula OCCURS, cuando forma parte del registro, como se muestra en el ejemplo precedente, ya que no seria correcto escribir: FD
ARCHIVO- AUTOS RECORDING V LABEL RECORD OMITTED.
01
REGISTRO-AUTOS. 02 NOMBRE PIC A(6). 02 MODELO PIC X(8). 02 DIARIA OCCURS 28 TO 31 TIMES DEPENDING ON NUMERO-DIAS PIC 999. 02 NUMERO-DIAS PIC 99.
por no ser DIARIA el ultimo campo del registro. La serie de caracteres de la cláusula PICTURE perteneciente a nombre-de-datos-1 debe ser numérica.
FORMATO 3: ---------
40
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
_ _ OCCURS entero-1 TO entero-2 TIMES | DEPENDING ON nombre-de-datos-1 | -----_ ASCENDING | --------- DESCENDING ----------
_ | INDEXED -
_ _ _ KEY IS nombre-de-datos-2 | nombre-de-datos-3 |...|...
_ _ _ BY nombre-de-indice-1 | nombre-de-indice-2 | ... | -
En este formato incluye a los dos anteriores, añadiendo la clausula ASCENDING o DESCENDING, para indicar si los elementos de la tabla están ordenados en forma ascendente o descendente por uno o varios campos (nombre-de-datos-2, nombre-de-datos-3 ...), que formen parte de dichos elementos. La utilización de este formato es obligatoria, por para localizar a un determinado elemento de la tabla, método de búsqueda binaria o dicotómica por medio de SEARCH ALL, la cual utiliza como índice para realizar al nombre-de-índice que se describe a continuación de
ejemplo, cuando se emplee el la declaración dicha búsqueda, INDEXED BY.
Los valores que pueden asignarse a entero-1 y entero-2 mismos que los especificados en el Formato-2.
son los
TABLAS ______
Una TABLA es una serie de datos con el mismo formato consecutivamente en memoria. La serie de datos, con un solo nombre.
al tener el mismo formato,
dispuestos
se puede describir
Las tablas se utilizan con mucha frecuencia en programación ya que Permiten, principalmente: - Disponer de una información rápida (están en memoria). - Acceder a un elemento por su posición relativa. Elemento de tabla es un campo de datos que, incluye una cláusula OCCURS.
en
su
descripción,
La declaración OCCURS especifica el número de elementos que existen en la tabla. (En una tabla, todas las entradas deben de tener el mismo tamaño y formato).
41
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
01
TABLADIAS. 03 UNDIA OCCURS
7
TIMES
PIC
X(9).
Esta partida establece una tabla de siete elementos cada uno de los cuales tiene nueve caracteres de longitud con lo que la tabla tendrá una longitud de 63 (9 x 7) caracteres. Al utilizar la siguientes reglas:
declaración OCCURS
se deben tener en cuenta las
- OCCURS no aparece en el nivel 01 sino en el nivel mas bajo. - La declaración PICTURE aparece en el nivel más bajo. Como hemos dicho, la reserva de memoria para cada uno de los elementos de la tabla se dispone, físicamente, en forma lineal, es decir, cada elemento se sitúa inmediatamente a continuación del anterior. 01
TABLADIAS. 03 UNDIA OCCURS
7
TIMES
PIC
X(9).
Se hace referencia a cada partida de una tabla por medio de un Número, llamado SUBINDICE, que identifica su posición en esa tabla. Por ejemplo, en la tabla anterior tendríamos: UNDIA(1) = LUNES UNDIA(3) = MIERCOLES El SUBINDICE se utiliza al nivel de la declaración OCCURS, es decir, "UNDIA(3)", pero no "TABLADIAS(3)".
TABLAS DE LONGITUD VARIABLE ===========================
La opción DEPENDING de la cláusula OCCURS define una tabla en la que el número de sus elementos va variando mientras se lleva a cabo la ejecución del programa. (Sería el caso, por ejemplo, de una tabla en la que se recogiera la fabricación de coches en un año por meses y por días laborales; está claro que en este caso la tabla podría ser de longitud variable en función del número de días laborables de cada Mes).
42
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
DESCRIPCION DE UNA TABLA ========================
La descripción de una tabla puede realizarse en la FILE SECTION o en la WORKING-STORAGE SECTION. Para llenar con datos una tabla habrá que tener en cuenta que: - Si se describe en la FILE SECTION, el llenado de la misma se hará, normalmente, desde un medio externo: cinta, disco, etc., donde estarán contenidos los datos, por medio de una declaración READ. - Si se describe en la WORKING-STORAGE SECTION, se llenara, bien con el contenido existente en otros campos de la memoria y/o los resultados producidos durante el proceso, o bien por una declaración ACCEPT o READ.
A las tablas que no se espera que cambien (tabla de constantes) se les puede dar valores en la WORKING-STORAGE SECTION de un programa utilizando la declaración REDEFINES. 01
01
TABLAMES. 02 FILLER 02 FILLER 02 FILLER 02 FILLER
PIC PIC PIC PIC
X(30) X(30) X(30) X(30)
VALUE VALUE VALUE VALUE
'ENERO 'ABRIL 'JULIO 'OCTUBRE
FEBRERO MAYO AGOSTO NOVIEMBRE
MARZO '. JUNIO '. SEPTIEMBRE'. DICIEMBRE '.
RTABLA REDEFINES TABLAMES. 02 UNMES PIC X(10) OCCURS 12 TIMES:
La cláusula REDEFINES debe seguir directamente a la partida que redefine y debe estar en el mismo nivel. Puesto que no se puede incluir una cláusula VALUE con una declaración OCCURS, esta es una técnica útil para codificar una tabla de constantes.
TABLAS DE MAS DE UNA DIMENSION ==============================
El COBOL EXIRION también permite tablas de dos y tres dimensiones. tabla unidimensional podía representar ya sea una lista de nombres de estudiantes o un conjunto de calificaciones para cada uno de los estudiantes, y una tabla tridimensional podrían incluir el nombre de cada alumno y la nota media para cada uno de los meses del curso.
Una
Para definir una tabla bidimensional, la cláusula OCCURS se utiliza dos veces. La declaración PICTURE solo se utilizara después de la última OCCURS.
43
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
01
TABLA. 02 ALUM OCCURS 50 TIMES. 03 NOTA OCCURS 10 TIMES PIC 99V99.
Con el fin de hacer referencia a una entrada en una tabla bidimensional se necesitan dos subíndices ("I" y "J") escritos de la forma (I, J). El primer subíndice se refiere a la variable descrita en la primera declaración OCCURS y debe estar seguido por una coma y un espacio. El segundo subíndice se refiere a la variable descrita por la segunda declaración OCCURS. Una tabla tridimensional se definiría de la siguiente manera: 01
TABLA. 02 ELE1 OCCURS 3 TIMES. 03 ELE2 OCCURS 3 TIMES. 04 ELE3 OCCURS 2 TIMES PIC X(8).
INDEXACION ==========
Con la declaración OCCURS se puede definir una variable INDICE (INDEX). A esta variable INDICE se le puede dar un valor en una proposición SET. El índice es muy semejante, en apariencia, al subíndice. Cuando se utiliza un índice se puede utilizar una instrucción especial (SEARCH) con la cual se incrementara la variable Índice. 01
TABLA. 02 ELE PIC 9(3) OCCURS 20 TIMES INDEXED BY K.
Esto define a TABLA con un índice "K". El elemento (ELE) aún puede Estar referenciado por medio de subíndices. (No se utiliza la cláusula PIC para describir a "K").
DECLARACION "SET" ================
Un índice no puede estar especificado en una proposición aritmética (ADD, MULTIPLY, asignar un valor a un índice o para igualar un nombre de dato se utiliza la declaración
nombre-indice-1 SET
44
una instrucción MOVE o en etc ...), entonces para el valor de un índice con SET.
nombre-indice-2 ...
TO
nombre-indice-3 identificador-3
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
identificador-2
nombre-indice-1
nombre-indice-2
SET
identificador-1
literal
UP BY
identificador
DOWN BY
literal
Los nombres de índice siempre deben tener valores entre "1" tamaño de la tabla.
y
el
El efecto de la declaración SET es transferir al operando u operandos que siguen a SET el contenido del operando que sigue a la palabra TO, es decir, es una transferencia realizada en sentido contrario a como la realiza la declaración MOVE. Si se utiliza UP BY o DOWN BY, cada vez que se ejecuta la declaración SET el contenido de los nombres-de-índice que siguen a dicha declaración se incrementan (UP BY) o decremento (DOWN BY) en el valor contenido en el identificador o literal que siga a estas dos opciones.
SET INDICE BETA TO SUM. SET INDICE TO 46. SET INDICE UP BY 2.
(Índice y Beta pasan a valer SUM). (Indices pasa a valer 46). (Índice se incrementa en 2).
01
TABLA. 02 ELE PIC 99 OCCURS 10 TIMES INDEXED BY K. .................. .................. PROCEDURE DIVISION. SET K TO ZERO. CALCULO. SET K UP BY 1. IF K NOT > N ADD ELE(K) TO TOTAL GO TO CALCULO. .................. ..................
DECLARACION "SEARCH" ====================
Lleva a cabo la búsqueda en forma secuencial de una tabla hasta que el contenido de un elemento de la misma satisfaga una determinada condición.
_
45
_
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
SEARCH identificador | AT END declaracion-imperativa-1 | declaracion-imperativa-2 WHEN condicion-1 NEXT SENTENCE _ | WHEN condicion-2 -
declaracion-imperativa-3 NEXT SENTENCE
_ | -
La tabla nombrada (identificador) es buscada desde el valor actual del índice (por tanto, si se quiere que la búsqueda empiece por el principio de la tabla, se debe inicializar el valor del índice por medio de la declaración SET). Cuando termina la declaración SEARCH, el índice tiene el valor del elemento de la tabla para el cual la condición es verdadera. Si se desea continuar una búsqueda a partir de donde se interrumpió se deja ejecutar de nuevo la declaración SEARCH sin volver a restablecer el índice. El efecto de la declaración SEARCH es el siguiente:
Se inicia una búsqueda de la tabla indicada y se prueba la condición que sigue al primer WHEN, caso de que la prueba resulte cierta se ejecuta la declaración o declaraciones que siguen a dicha condición y si no resulta cierta se realiza el mismo proceso para los sucesivos WHEN. Si la prueba resulta falsa para todas las condiciones, el índice se incrementa automáticamente en una unidad para repetir el ciclo con el segundo elemento. Si hecha la prueba de las distintas condiciones con todos los elementos de la tabla no se encuentra alguno que cumpla una de las condiciones, quiere decir que el valor buscado no existe en ningún elemento de la tabla por lo que se da por finalizada la búsqueda con lo que pasaría a ejecutar la declaración que sigue a AT END.
Es decir, de una forma más esquemática, el proceso seria: a) Se prueba cada condición o condiciones de la opción mismo orden de su escritura.
WHEN en el
b) Si no se ha satisfecho ninguna de las condiciones se incrementa el índice de la tabla para poder hacer referencia al siguiente elemento de la misma y se repite el paso a). c) Si después de la evaluación se ha satisfecho una de las Condiciones que siguen a WHEN, la búsqueda concluye pasando a ejecutarse la declaración imperativa asociada con tal condición. El índice, en ese momento, contendrá el número del elemento de la tabla que satisfizo la condición. d) Si se alcanza el final de la tabla sin haber satisfecho ninguna
46
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
condición de las que siguen a WHEN, la búsqueda concluye pasando a Ejecutarse la declaración imperativa asociada con tal condición. Si se omite AT END, la secuencia de ejecución del programa pasa a la sentencia siguiente. e) Puede suceder que, al comienzo de la búsqueda, el valor del índice sea superior al número máximo de elementos de la tabla, en cuyo caso la búsqueda concluye inmediatamente, pasando a ejecutar lo especificado en el caso d).
77 01
NOM LINEA1. 02 FILLER 02 NOMIN 02 FILLER 02 VENIM
PIC X(10)
VALUE 'JUAN GOMEZ'.
PIC PIC PIC PIC
VALUE VALUE VALUE VALUE
X(20) X(10) X(2) Z.ZZ9
SPACES. SPACES. SPACES. ZEROS.
01
TABLA. 02 ELEM OCCURS 45 TIMES INDEXED BY I. 03 NOMBRE PIC X(10). 03 VENTA PIC 9(4). ........................... ........................... PROCEDURE DIVISION. ........................... ........................... BUSQUEDA. SET I TO 1. SEARCH ELEMEN AT END GO TO NOEXISTE WHEN NOMBRE(I) = NOM MOVE NOMBRE(I) TO NOMIN MOVE VENTA(I) TO VENIM WRITE ................. GO TO FIN. NOEXISTE. ........................... ...........................
OPCION "VARYING" ================
Especificando en una declaración SEARCH la opción VARYING permite incrementar simultáneamente el índice asociado a la tabla en que se realiza la búsqueda y una variable, identificador u otro índice asociado a otra tabla. (Es frecuente el empleo de esta opción ya que hay trabajos en los que, además de buscar en una tabla al elemento que reúna determinadas condiciones, se necesita conocer el número de orden que ocupa en la misma para,
47
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
por ejemplo, acceder a otra tabla). SEARCH ELEMEN VARYING OTRO AT END ... ----
TABLAS DEFINIDAS CON MAS DE UN INDICE =====================================
En la definición de una tabla pueden utilizarse varios índices. En este caso es necesario conocer cuál de esos índices es el que va a utilizar el sistema para la búsqueda en la tabla. El empleo de uno u otro índice para realizar la búsqueda esta en función de que se especifique o no, en la declaración SEARCH, la opción VARYING, es decir:
a) Si no se especifica la opción VARYING, la búsqueda en la tabla se realizara utilizando el primer índice de los que figuran en la cláusula INDEXED BY. b) Si se especifica la opción VARYING junto con el nombre de uno de los índices que figuran en la cláusula INDEXED BY, este será el que se utilice para realizar la búsqueda. c) Puede suceder que en la opción VARYING se especifique un índice distinto de los que figuran en la definición de la tabla objeto de la búsqueda (por ejemplo, el índice de otra tabla); en este caso la búsqueda en dicha tabla se realiza, como en el apartado a), utilizando el primer índice que sigue a INDEXED BY.
01
TABLA. 02 FDIARIA OCCURS 1080 TIMES INDEXED BY I1, I2, I3. 03 AUTOS PIC 9(3). 03 CAMIONES PIC 9(2). ........................ ........................ SET I3 TO 125. SEARCH FDIARIA VARYING I3 AT END GO TO FIN WHEN ...................... ........................ ........................
(1)
SET I1 TO 125. SEARCH FDIARIA AT END GO TO FIN WHEN ...................... ........................ ........................
(2)
En (1) se utilizara I3 (de acuerdo con el apartado b)) y en (2)
48
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
se utilizara I1 (conforme con el apartado a)).
BUSQUEDA BINARIA ================
La instrucción SEARCH ejecuta una búsqueda secuencial, es decir, aun si la partida que se está buscando está cercana al final de la tabla, se examinan todas las partidas anteriores hasta que se llega a la que se busca. Este proceso se puede utilizar si los valores de los elementos de la tabla están en secuencia o si no lo están. Si las entradas de la tabla están en secuencia se puede realizar un tipo de búsqueda más eficiente llamada búsqueda BINARIA. Una búsqueda binaria requiere un campo clave en cada entrada de la tabla. Se busca comprobando primero el valor del campo clave en el punto medio de la tabla. Si el valor que se esta buscando es mayor, entonces se comprueba el valor del campo clave en el punto medio de la parte superior de la tabla. Y continua haciendo bisecciones en las partes restantes de la tabla hasta que se localiza la clave deseada. La búsqueda binaria corta drásticamente el tiempo de acceso para muchas tablas (*). La descripción de una tabla que procesara una búsqueda binaria requiere de una entrada KEY (clave) además del índice. 01
TABLA. 02 ELEMEN
PIC 9(4)
La KEY (clave) puede ser (descendente).
OCCURS 20 TIMES INDEXED BY I ASCENDING KEY IS CLA. ASCENDING (ascendente) o
DESCENDING
(*) : El número máximo de búsquedas necesarias para localizar a un elemento de la tabla que contengan un valor determinado se obtiene por la expresión: x
x-1
2
>
número de elementos de la tabla > 2
en la que "x" indica el número máximo de búsquedas; es decir, si la tabla contiene 235 elementos, el valor de "x" será igual a "8" ya que: 8 2
49
7 >
235
> 2
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
DECLARACION "SEARCH ALL" =======================
Esta declaración permite la búsqueda Descrita con la opción INDEXED BY.
binaria en una tabla
El formato de esta declaración es el siguiente: SEARCH ALL
identificador
AT END declaracion-imperativa-1 declaracion-imperativa-2 WHEN condición NEXT SENTENCE
Las direcciones de los elementos de la tabla, a los que se ha de acceder hasta localizar al que contenga un valor determinado, los calcula el sistema automáticamente. No hay que inicializar con un valor el índice con la declaración SET. El proceso que se sigue en la declaración SEARCH ALL es el mismo que en la SEARCH, es decir:
a) Se prueba cada condición de la opción WHEN en el mismo orden de su escritura. b) Si no se ha satisfecho la condición se incrementa el índice de la tabla para poder hacer referencia al siguiente elemento de la misma y se repite el paso a). c) Si después de la evaluación se ha satisfecho la condición que sigue a WHEN, la búsqueda concluye pasando a ejecutarse la declaración imperativa asociada con tal condición. El índice, en ese momento, contendrá el número del elemento de la tabla que satisfizo la condición. d) Si se alcanza el final de la tabla sin haber satisfecho la condición que sigue a WHEN, la búsqueda concluye y, por tanto, si se ha especificado la opción AT END se ejecutara la declaración imperativa que sigue a dicha opción. Si se omite AT END, la secuencia de ejecución del programa pasa a la sentencia siguiente. Pero, a diferencia de la SEARCH, en la SEARCH ALL tener en cuenta los siguientes puntos:
se
deben de
1.- Solo puede especificarse una palabra WHEN con una condición, y esta condición solo puede ser del tipo de relación EQUAL TO (=) o compuesta enlazada por el operador lógico AND. 2.- Los elementos de la tabla deben estar ordenados en forma ascendente (ASCENDING) o descendente (DESCENDING) por el contenido del campo objeto de la búsqueda.
50
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
3.- La variable condición.
77
NOM
01
TABLA. 02 ELEM
que
sea la KEY (clave) se debe incluir en la
PIC X(10)
VALUE 'JUAN GOMEZ'.
OCCURS 45 TIMES INDEXED BY I ASCENDING KEY NOMBRE. 03 NOMBRE PIC X(10). 03 VENTAS PIC 9(4). ................................... ................................... BUSQUEDA. SEARCH ALL ELEMEN AT END GO TO NOEXISTE WHEN NOMBRE(I) = NOM MOVE NOMBRE(I) TO ... MOVE VENTAS(I) TO ... GO TO FIN.
51
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
BUSQUEDA DICOTOMICA ===================
MENOR : PRIMER VALOR -1 MAYOR : ULTIMO VALOR +1
I : INDICE
______________ | | | INICIALIZAR | | MAYOR | | MENOR | -------------| | ___________________________________ _______ SI | | NO | -----MAYOR - MENOR = 1 | | ESTA | | ------| | NO | | | ____________________ | | | | | MAYOR - MENOR | | | I = ------------- | | | 2 | | -------------------| | | | | | TABLA(I) | ______ = . . > __________ | | ESTA | -------------| MOVE I | | -----. . | TO MAYOR | | BUSQUEDA ---------| | | < | | | __________ | | MOVE I | | | TO MENOR | ---------------------------------------
52
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
46
LITERALES. ____________
Para incluir un apostrofe (') en un literal hay que poner dos.
EJEMPLO: 01 LITERAL
PIC x(5)
VALUE '''DOS'''.
Si imprimimos, desplazamos o preguntamos por este valor obtendremos 'DOS'. 01
LITERAL
PIC x(5)
VALUE '''DOS'.
En este caso el resultado sera 'DOS. El doble apostrofe ('') solo ocupa una posición en el campo (').
FICHEROS ESDS. ________________
SELECT ddname ASSIGN TO AS-ddname (1) ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SECUENTIAL FILE STATUS IS status-file. (1) Si no se especifica AS- la ejecución cancelara con un FILE STATUS '39'.
FILE STATUS '35'. ___________________
El file status '35' se produce cuando tratamos de leer un fichero VSAM vacío de nueva creación. Para solucionarlo hay que definirlo como: SELECT OPTINAL ddname ASSIGN... . . FILE STATUS IS st-xxxxxxx.
Y aceptar el FILE STATUS '05' que nos devuelve cuando lo abrimos como correcto.
53
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
IF st-xxxxxx = '00' OR = '05' CORRECTO END-IF.
PASAR DATOS EN ETM COBOL EXIRION. ______________________________
INSTRUCCION SET: FORMATO 5. _________________________ | | V | >>___SET________identif-4____________TO___identif-6_____________>< |_ADDRESS OF identif-5__| |_ADDRESS OF identif-7_| |______NULL____________| -----Campo receptor-----
-----Campo emisor------
La dirección contenida en el emisor reemplaza el contenido actual del receptor. Identif-4. Debe estar definido como USAGE IS POINTER. Identif-5. Debe ser un área a nivel 01 o 77 en la LINKAGE. Identif-6. No puede contener una dirección de la propia WORKING o FILE SECTION. No puede ser un campo de coma flotante. A_OF identif-7. Pasa la dirección del identif-7, no su contenido.
ADDRESS OF... Registro especial. Por cada registro a nivel 01 o 77 de la LINKAGE existe un registro especial ADDRESS OFF. Este registro guarda la dirección del área, si este área esta redefinida la dirección ADDRESS OF será la misma para todas las definiciones de la misma.
POINTER
Un campo pointer es un item elemental no numérico de 4 bytes. Solo puede usarse en: . La instrucción SET. . En una comparación. . En la USING de una CALL o en la cabecera de la PROCEDURE. Si se quiere mover un puntero a un campo numérico el pointer
54
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
tendrá que redefinirse como PIC S9(8) COMP.
EJEMPLOS. ___________
WORKING SECTION. 01 01
APUNTADOR-1 USAGE IS POINTER. RAPUN-1 REDEFINES APUNTADOR-1 PIC S9(8) COMP.
LINKAGE SECTION. 01
DFHCOMMAREA. 03 APUN-DIRCOM USAGE IS POINTER. 03 DIRCOM REDEFINES APUN-DIRCOM PIC S9(8) COMP.
01
DATOS-RECIBIDOS. 03 MOVTOS290 03 RETORNO
PIC X(290). PIC X.
COPY CWAAREC.
PROCEDURE DIVISION. SET ADDRESS OF DATOS-RECIBIDOS TO APUN-DIRCOM. EXEC ETM ADDRESS CWA(APUNTADOR-1) END-EXEC. SET ADDRESS OF CWAARE TO APUNTADOR-1. EXEC ETM ADDRESS CWA(ADDRESS OF CWAARE) END-EXEC.
Esta instrucción es equivalente a las dos anteriores.
RUTINA GENERAL DE CONVERSION DE FECHAS **************************************
FUNCION:
Convierte fechas en función de la opción recibida.
PARAMETROS: 1. Opción (De 1 a 6) PIC X. Requerido en entrada 2. Fecha en formato juliano PIC S9(7) COMP-3
55
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
Campo de entrada/salida según opción 3. Fecha en formato DDMMAA o AAMMDD PIC X(6) Campo de entrada/salida según opción
OPCIONES : 1. 2. 3. 4. 5.
De De De De De
Juliana a AAMMDD Juliana a DDMMAA AAMMDD a Juliana DDMMAA a Juliana AAMMDD a Juliana semestral
En todas las opciones enviar el campo deseado recibiéndose el convertido en el otro campo. La opción 5 calcula la fecha juliana referida al comienzo del semestre.
FORMA DE INVOCAR: CALL 'SUTLD001' USING FECHA-OPCION FECHA-JULIANA FECHA-NORMAL
EJEMPLO: .......................................... 77 77 77
FECHA-OPCION FECHA-JULIANA FECHA-NORMAL
PIC X. PIC S9(7) COMP-3. PIC X(6).
.......................................... MOVE EIBDATE TO FECHA-JULIANA. MOVE '2' TO FECHA-OPCION. CALL 'SUTLD001' USING FECHA-OPCION FECHA-JULIANA FECHA-NORMAL. ..........................................
En este ejemplo enviamos la fecha en juliana y nos será devuelta en formato DDMMAA.
56
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
RUTINA CONVERSION DE BITS A BYTES *********************************
FUNCION:
Convierte los 8 bits de un byte a 8 bytes y viceversa.
LENGUAJE:
Assembler
PARAMETROS: 1. Opción (1 o 2) PIC X. Requerido en entrada 2. Byte que contiene los 8 bits. PIC X. Campo de entrada/salida según opción 3. Campo que contiene los 8 bytes. PIC X(8) Campo de entrada/salida según opción
OPCIONES : 1. Expande los 8 bits sobre los 8 bytes 2. Comprime los 8 bytes sobre los 8 bits. En las dos opciones enviar el campo deseado recibiéndose el convertido en el otro campo. Si la opción no fuera ni 1 ni 2 se devolvería un 9 en el propio campo de opción.
FORMA DE INVOCAR: CALL 'SUTLA002' USING W-SUTLA002
EJEMPLO: WORKING-STORAGE SECTION. COPY “CUTLD002” 01
57
W-SUTLA002.
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
03 03 03
W-OPCION W-BITS8 W-BYTES8. 05 BIT7 05 BIT6 05 BIT5 05 BIT4 05 BIT3 05 BIT2 05 BIT1 05 BIT0
PIC X. PIC X. PIC PIC PIC PIC PIC PIC PIC PIC
X. X. X. X. X. X. X. X.
.......................................... PROCEDURE DIVISION. MOVE '1' TO W-OPCION. MOVE BAINDI2I TO W-BITS8. CALL 'SUTLA002' USING W-SUTLA002. ..........................................
En este ejemplo enviamos el BAINDI2I declarado como PIC X a la rutina y nos devolverá su contenido en los 8 bytes de W-BYTES8. Todos los BAINDI2I que tengan en el organismos.
BIT7
un 1
se refieren a
RUTINA GENERAL DE VERIFICACION DE DIGITOS *****************************************
FUNCION:
Calcula digito en función de la opción recibida
LENGUAJE:
Cobol
PARAMETROS: 1. CODIGO DE RETORNO PIC X Obtenido en salida ' ' : proceso correcto '9' : digito de control enviado no coincide con el calculado (Salvo en opción 5) 2. DIGITO. PIC 9 Obtenido en salida (Resultado del cálculo)
58
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
3. OPCION. PIC x Requerido en entrada '1' : Digito de tarjetas (enviar 12 dig.) '2' : Digito de cuentas (enviar 12 " ) '3' : Digito clave SICA (enviar 9 " ) '4' : Digito de Codigo Cliente (enviar 12 " ) '5' : Digito DNI Hacienda/Comunitario (enviar 9 " ) En esta opción se mandan los datos sin digito. El retorno es 9 si lo enviado no es numérico). 4. DATOS (N. tarjeta, N. cuenta etc.) PIC X(16) Requerido en entrada
FORMA DE INVOCAR: CALL 'SUTLD005' USING RETORNO DIGITO OPCION DATOS.
EJEMPLO: .......................................... 77 77 77 77
RETORNO DIGITO OPCION DATOS
PIC PIC PIC PIC
X. 9. X. X(16).
.......................................... MOVE '1' TO OPCION. MOVE '453952000125008' TO DATOS. CALL 'SUTLD005' USING RETORNO DIGITO OPCION DATOS. IF RETORNO NOT = '9' .......................................... En este ejemplo se envía un número de tarjeta VISA con el digito incluido, para ser verificado. Si retorno not = 9 el digito es correcto. Comprobar si la cuenta es correcta devolviendo el código de retorno al calcular el digito. .......................................... 77 77 77
59
RETORNO DIGIT OPCION
PIC X. PIC 9. PIC X.
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
77
DATOS
PIC X(16).
.......................................... 01 CUENTA-DIGITO. 02 AHO PIC 999. 02 OFI PIC 999. 02 CTA PIC 9(6). 02 DIGIT PIC 9. 01 CUENTA-DIGITO2. 02 AHO PIC 999. 02 FILLER PIC X VALUE 0. 02 OFI PIC 999. 02 CTA PIC 9(6). 02 DIGIT PIC 9. CALCULAR-DIGITO. MOVE CUENTA TO CUENTA-DIGITO MOVE '2' TO OPCION MOVE CORR CUENTA-DIGITO TO CUENTA-DIGITO2 MOVE CUENTA-DIGITO2 TO DATOS CALL 'SUTLA005' USING RETORNO DIGITO OPCION DATOS. IF RETORNO = ' ' DIGITO CORRECTO - CUENTA CORRECTA ELSE DIGITO ERRONEO - CUENTA INCORRECTA.
R U T I N A S D E C A L C U L O ************************************
----NUMERO DE DIAS ENTRE DOS FECHAS ----****************************************************
WORKING-STORAGE SECTION. ******** 01 CAMPOS-NUMERICOS. 03 NUMDIAS PIC S9(5) 03 CONTANOS PIC S9(5) 03 D PIC S9(3) 03 FECHA-DESDE PIC 9(6). 03 FILLER REDEFINES FECHA-DESDE. 05 DD-DESDE PIC 99. 05 MM-DESDE PIC 99. 05 AA-DESDE PIC 99. 03 FECHA-HASTA PIC 9(6). 03 FILLER REDEFINES FECHA-HASTA. 05 DD-HASTA PIC 99. 05 MM-HASTA PIC 99. 05 AA-HASTA PIC 99.
COMP-3 VALUE +0. COMP-3 VALUE +0. COMP-3 VALUE +0.
****>>>>>>>> TABLA DE MESES CON DIAS
60
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
01 FILLER. 03 T1-DIAS PIC X(48) VALUE '013102280331043005310630073108310930103111301231'. 03 T2-DIAS REDEFINES T1-DIAS OCCURS 12 TIMES. 05 MES PIC 99. 05 DIA PIC 99.
PROCEDURE DIVISION. XXXX-CALCULO-DIAS. ****************** MOVE ZEROS TO NUMDIAS. MOVE MM-DESDE TO D. MOVE AA-DESDE TO CONTANOS. PERFORM UNTIL CONTANOS = AA-HASTA AND D = MM-HASTA ADD DIA(D) TO NUMDIAS ADD CN-1 TO D IF D > CN-12 MOVE CN-1 TO D MOVE CN-1 TO CONTANOS END-IF IF CONTANOS = CN-100 MOVE ZEROS TO CONTANOS END-IF END-PERFORM. SUBTRACT DD-DESDE ADD DD-HASTA
FROM NUMDIAS TO NUMDIAS.
XXXX-CALCULO-DIAS-EXIT. *********************** EXIT.
**************************************************** ----NUMERO DE MESES ENTRE DOS FECHAS ----**************************************************** WORKING-STORAGE SECTION. ******** 01 CAMPOS-NUMERICOS. 03 MESES PIC S9(3) 03 CONTANOS PIC S9(3) 03 FECHA-DESDE PIC 9(6). 03 FILLER REDEFINES FECHA-DESDE. 05 DD-DESDE PIC 99. 05 MM-DESDE PIC 99.
61
COMP-3 VALUE +0. COMP-3 VALUE +0.
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
05 AA-DESDE PIC 99. 03 FECHA-HASTA PIC 9(6). 03 FILLER REDEFINES FECHA-HASTA. 05 DD-HASTA PIC 99. 05 MM-HASTA PIC 99. 05 AA-HASTA PIC 99. ****>>>>>>>> TABLA DE MESES CON DIAS 01 FILLER. 03 T1-DIAS PIC X(48) VALUE '013102280331043005310630073108310930103111301231'. 03 T2-DIAS REDEFINES T1-DIAS OCCURS 12 TIMES. 05 MES PIC 99. 05 DIA PIC 99.
PROCEDURE DIVISION. XXXX-CALCULO-MESES. ******************* MOVE ZEROS TO MESES. MOVE AA-DESDE TO CONTANOS. PERFORM WITH TEST BEFORE UNTIL CONTANOS = AA-HASTA ADD CN-12 TO MESES ADD CN-1 TO CONTANOS IF CONTANOS = CN-100 SUBTRACT CN-100 FROM CONTANOS END-IF END-PERFORM. ADD MM-HASTA TO MESES. SUBTRACT MM-DESDE FROM MESES. XXXX-CALCULO-MESES-EXIT. ************************ EXIT.
**************************************************** ----RESTAR UN PERIODO A UNA FECHA ----**************************************************** WORKING-STORAGE SECTION. ******** 01 CAMPOS-NUMERICOS. 03 MESES PIC S9(3) 03 CONTANOS PIC S9(3) 03 FECHA-DESDE PIC 9(6). 03 FILLER REDEFINES FECHA-DESDE. 05 DD-DESDE PIC 99.
62
COMP-3 VALUE +0. COMP-3 VALUE +0.
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.
05 MM-DESDE PIC 99. 05 AA-DESDE PIC 99. 03 FECHA-HASTA PIC 9(6). 03 FILLER REDEFINES FECHA-HASTA. 05 DD-HASTA PIC 99. 05 MM-HASTA PIC 99. 05 AA-HASTA PIC 99. ****>>>>>>>> TABLA DE MESES CON DIAS 01 FILLER. 03 T1-DIAS PIC X(48) VALUE '013102280331043005310630073108310930103111301231'. 03 T2-DIAS REDEFINES T1-DIAS OCCURS 12 TIMES. 05 MES PIC 99. 05 DIA PIC 99.
63
EXIRION/OS and Nova32 Development Software are registered trademarks of RolandoFernández Benavidez in the México States and other countries. All other brands and products referenced in this document are acknowledged to be the trademarks or registered trademarks of their respective holders.