Você está na página 1de 52

COBOL for MVS & VM

COBOL FOR MVS & VM

PRINCIPAIS DIFERENÇAS
E
PROBLEMAS MAIS COMUNS NA CONVIVÊNCIA
COM O
OS/VS COBOL
TIPO DOCUMENTO - TTAAXXX

Versão Data Autor


1.0 28/01/1999 Guillermo Gil Carral

1
COBOL for MVS & VM

ÍNDICE

INTRODUÇÃO..............................................................................................................5
OBJETIVOS................................................................................................................. 5
REFERÊNCIAS............................................................................................................. 6
GLOSSÁRIO................................................................................................................ 6
PRINCIPAIS DIFERENÇAS.......................................................................................7
ELEMENTOS DE LINGUAGEM NÃO MAIS IMPLEMENTADOS..........................................7
Report Writer............................................................................................................7
Arquivos ISAM.........................................................................................................7
Arquivos BDAM.......................................................................................................8
Communication Feature...........................................................................................9
EXAMINE.................................................................................................................9
EXHIBIT...................................................................................................................9
READY TRACE / RESET TRACE..........................................................................11
TRANSFORM..........................................................................................................12
TIME-OF-DAY.......................................................................................................13
CURRENT-DATE...................................................................................................14
D I V E R S O S.......................................................................................................15
EXTENSÕES DO OS/VS COBOL NÃO SUPORTADAS PELO COBOL FOR MVS & VM
................................................................................................................................ 17
Instrução MOVE CORRESPONDING...................................................................17
THEN como sentença de conexão..........................................................................18
Operadores Relacionais – Codificações Incorretas...............................................18
Pontos consecutivos – em qualquer Divisão do COBOL.......................................19
Ausência de ponto nos parágrafos..........................................................................19
Cláusula REDEFINES em descrições de arquivos (SD e FD)...............................19
Cláusula REDEFINES em tabelas..........................................................................20
Cláusula VALUE – Valor sinalizado em relação a cláusula PICTURE................20
Cláusula OCCURS..................................................................................................20
ELEMENTOS DE LINGUAGEM ALTERADOS................................................................22
FILE STATUS.........................................................................................................22
IF ... OTHERWISE.................................................................................................22
JUSTIFIED.............................................................................................................22
Instrução MOVE para campos definidos com P na PICTURE.............................23
Sentenças Aritméticas.............................................................................................23
Cláusula ASSIGN....................................................................................................23
Cláusula OCCURS DEPENDING ON com a frase ASCENDING/ DESCENDING
KEY.........................................................................................................................24
WHEN-COMPILED................................................................................................24
WRITE AFTER POSITIONING..............................................................................25
VALUE....................................................................................................................26
MERGE...................................................................................................................26
OPEN......................................................................................................................27

2
COBOL for MVS & VM

SEARCH..................................................................................................................27
SORT.......................................................................................................................27
SORT-RETURN......................................................................................................27
STRING...................................................................................................................27
UNSTRING.............................................................................................................28
WRITE.....................................................................................................................28
INSPECT.................................................................................................................28
PERFORM..............................................................................................................28
PERFORM - Alterações na frase VARYING/AFTER.............................................29
ELEMENTOS DE LINGUAGEM ADICIONADOS .............................................................31
TERMINADOR EXPLÍCITO..................................................................................31
PADDING CHARACTER.......................................................................................31
RECORD DELIMITER...........................................................................................32
EXTERNAL no FD..................................................................................................32
EXTERNAL na WS..................................................................................................32
GLOBAL na FD......................................................................................................32
GLOBAL na WS......................................................................................................32
NOT.........................................................................................................................33
CONTINUE.............................................................................................................33
TITLE......................................................................................................................33
DAY-OF-WEEK......................................................................................................34
EVALUATE.............................................................................................................34
INITIALIZE.............................................................................................................34
Função Intrínseca...................................................................................................35
REGISTRADORES E ENDEREÇAMENTOS........................................................35
LENGTH OF................................................................................................................................................35
ADDRESS OF.............................................................................................................................................35
POINTER.....................................................................................................................................................36
SET..............................................................................................................................................................36
MOVE.......................................................................................................................................................... 36

PROBLEMAS MAIS COMUNS NA CONVIVÊNCIA COM O OS/VS COBOL 37


PROBLEMAS DE ENDEREÇAMENTO...........................................................................37
OPÇÃO DE COMPILAÇÃO RES/NORES....................................................................38
FALHAS NA INSTRUÇÃO OPEN PARA ARQUIVOS QSAM..........................................38
Prevenindo o FILE STATUS 39 para arquivos QSAM..........................................38
Processando Arquivos Existentes................................................................................................................38
Definindo Registros de Tamanho Variável.................................................................................................39
Definindo Arquivos de Tamanho Fixo........................................................................................................40
Processando Arquivos Novos......................................................................................................................40

PROGRAMAS CICS – CONSIDERAÇÕES SOBRE A CONVERSÃO...............41


CHAMADAS DINÂMICAS (DYNAMIC CALL) QUANDO EXECUTANDO SOB O CICS.....41
SERVICE RELOAD............................................................................................... 41
REGISTRO ESPECIAL LENGTH OF.........................................................................42
RECEBENDO UMA ÁREA DE COMUNICAÇÃO.............................................................43
PROCESSANDO ÁREAS DE MEMÓRIAS COM MAIS DE 4K..........................................43
ACESSANDO ÁREAS DE MEMÓRIA ENCADEADAS.....................................................44
USANDO A CLÁUSULA OCCURS DEPENDING ON...............................................45
ANEXOS.......................................................................................................................46
ANEXO 1 - QSAM - STATUS KEY........................................................................46

3
COBOL for MVS & VM

ANEXO 2 - VSAM - STATUS KEY........................................................................47


ANEXO 3 - TABELA DE FUNÇÕES.............................................................................49
BIBLIOGRAFIA...........................................................................................................52

4
COBOL for MVS & VM

INTRODUÇÃO

OBJETIVOS

Este documento visa apresentar, de forma prática, as principais


diferenças entre o OS/VS COBOL e o COBOL for MVS & VM, de modo a
facilitar e agilizar o processo de conversão dos programas existentes e a
confecção de novos programas, bem como apresentar os problemas
mais comuns encontrados na convivência entre ambos. Este documento
não é, nem pretende ser, um trabalho completo e sim um guia de
referência para utilização do COBOL for MVS & VM. Logo este assunto
não se esgota neste documento. Maiores detalhes sobre as diferenças
entre os dois produtos COBOL (Common Business Oriented Language)
podem ser encontradas nos manuais específicos dos produtos. A
bibliografia dos manuais utilizados para confecção deste documento
encontra-se ao final do mesmo.

5
COBOL for MVS & VM

REFERÊNCIAS

Normas e Padrões correlatos Nome do Arquivo

GLOSSÁRIO

Termo Significado

6
COBOL for MVS & VM

PRINCIPAIS DIFERENÇAS

ELEMENTOS DE LINGUAGEM NÃO MAIS IMPLEMENTADOS

REPORT WRITER

Não é suportado pelo COBOL for MVS & VM. É necessário um pré
compilador para migrar os programas que o utilizem. O COBOL
Report Writer Precompiler tem duas funções. Pode ser usado para
pré compilar aplicações que utilizem o Report Writer para gerar um
código que será aceito pelo compilador do COBOL for MVS & VM, ou
pode converter permanentemente as sentenças do Report Writer para
sentenças válidas do COBOL for MVS & VM. Entretanto, esta
conversão gera um código de difícil manutenção. Quando
convertendo um código Report Writer para um código não Report
Writer o pré compilador gera nome de variáveis e de parágrafos.
Esses nomes não são significativos, dificultando a identificação
quando da necessidade de modificar os programas convertidos.
Esses nomes podem ser substituídos por outros mais significativos,
mas isso será uma atividade bastante trabalhosa e que consumirá um
tempo significativo.

Os itens da linguagem do Report Writer não mais aceitos pelo


COBOL for MVS & VM são:

Instrução GENERATE
Instrução INITIATE
Registrador especial LINE-COUNTER
Registrador especial PAGE-COUNTER
Registrador especial PRINT-SWITCH
Cláusula REPORT da entrada do FD
REPORT SECTION
Instrução TERMINATE
Declaração USE BEFORE REPORTING
Atribuição de nomes mnemônicos para literais não numéricos

ARQUIVOS ISAM

O COBOL for MVS & VM não suporta o processamento desses


arquivos. Esses arquivos devem ser convertidos para VSAM/KSDS.
Duas ferramentas podem auxiliar na conversão. O REPRO do
IDCAMS e o CCCA (COBOL and CICS/VS Command Level
Conversion Aid), dependendo do desenho da aplicação. O REPRO
do IDCAMS executará a conversão dos arquivos, salvo se existir
alguma restrição de hardware. O CCCA converte automaticamente a

7
COBOL for MVS & VM

definição do arquivo e as sentenças de acesso (I/O) de ISAM para


VSAM/KSDS.

Os itens de linguagem do ISAM não mais aceitos pelo COBOL for


MVS & VM são:

APPLY CORE-INDEX
APPLY REORG-CRITERIA
Cláusula NOMINAL KEY
Cláusula TRACK-AREA
Cláusula USING KEY da instrução START
Declaração de arquivos ISAM
Parâmetro de organização I

ARQUIVOS BDAM

O COBOL for MVS & VM não suporta o processamento desses


arquivos. Esses arquivos devem ser convertidos para VSAM/RRDS.
O CCCA também pode ser utilizado para converter o fonte dos
programas que utilizam arquivos BDAM, desde que seja fornecido o
algoritmo da chave. Para a conversão dos arquivos existem produtos
não IBM disponíveis no mercado.

Os itens de linguagem do BDAM não mais aceitos pelo COBOL for


MVS & VM são:

Cláusula ACTUAL KEY


APPLY RECORD-OVERFLOW
Instrução SEEK
Cláusula TRACK-LIMIT
Parâmetros de organização D, R, W
Declaração de arquivos BDAM

8
COBOL for MVS & VM

COMMUNICATION FEATURE

A Communication Feature não é suportada pelo COBOL for MVS &


VM. Os programas de comunicação (TCAM) deverão utilizar outro
produto para executar as funções de comunicação.

Os itens de linguagem da Communication Feature não mais aceitos


pelo COBOL for MVS & VM são:

Instrução ACCEPT MESSAGE COUNT


COMMUNICATION SECTION
Instrução DISABLE
Instrução ENABLE
Instrução RECEIVE
Instrução SEND

EXAMINE

O COBOL for MVS & VM não aceita a instrução EXAMINE, devendo


ser substituída pela instrução INSPECT. Se a instrução no OS/VS
COBOL for similar a apresentada abaixo:

EXAMINE DATA-LENGTH TALLYING UNTIL FIRST “ “.

deve ser substituída no COBOL for MVS & VM por:

MOVE 0 TO TALLY.
INSPECT DATA-LENGTH TALLYING FOR CHARACTERS BEFORE “ “.

EXHIBIT

O COBOL for MVS & VM não aceita a instrução EXHIBIT, devendo


ser substituída pela instrução DISPLAY. Entretanto a instrução
DISPLAY não cobre todas as funções da instrução EXHIBIT.

A instrução EXHIBIT NAMED pode ser substituída diretamente pela


instrução DISPLAY, como se segue:

9
COBOL for MVS & VM

Código no OS/VS COBOL.

77 DADO1 PIC X(08).


77 DADO2 PIC X(08).

EXHIBIT NAMED DADO1 DADO2.

Código no COBOL for MVS & VM.


DISPLAY “DADO1 = “ DADO1 “ DADO2 = “ DADO2.

A instrução EXHIBIT CHANGED deve ser substituída pelas instruções


IF e DISPLAY, como se segue:

Código no OS/VS COBOL.

77 DADO1 PIC X(08).


77 DADO2 PIC X(08).

EXHIBIT CHANGED DADO1 DADO2.

Código no COBOL for MVS & VM.

77 DADO1 PIC X(08).


77 DADO2 PIC X(08).
77 DADO1-ANT PIC X(08).
77 DADO2-ANT PIC X(08).

IF DADO1 NOT EQUAL DADO1-ANT


DISPLAY DADO1
END-IF.

IF DADO2 NOT EQUAL DADO2-ANT


DISPLAY DADO2
END-IF.

MOVE DADO1 TO DADO1-ANT.


MOVE DADO2 TO DADO2-ANT.

A instrução EXHIBIT CHANGED NAMED deve ser substituída pelas


instruções IF e DISPLAY, como se segue:

Código no OS/VS COBOL.

77 DADO1 PIC X(08).


77 DADO2 PIC X(08).

10
COBOL for MVS & VM

EXHIBIT CHANGED NAMED DADO1 DADO2.

Código no COBOL for MVS & VM.

77 DADO1 PIC X(08).


77 DADO2 PIC X(08).
77 DADO1-ANT PIC X(08).
77 DADO2-ANT PIC X(08).

IF DADO1 NOT EQUAL DADO1-ANT


DISPLAY “DADO1 = “ DADO1
END-IF.

IF DADO2 NOT EQUAL DADO2-ANT


DISPLAY “DADO2 = “ DADO2
END-IF.

MOVE DADO1 TO DADO1-ANT.


MOVE DADO2 TO DADO2-ANT.

READY TRACE / RESET TRACE

O COBOL for MVS & VM não aceita essas instruções. Funções


similares podem ser executadas utilizando a declaração de “debug”
USE FOR DEBUGGING ON ALL PROCEDURES, como
exemplificado abaixo:
.
.
ENVIROMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-390 WITH DEBUGGING MODE.
.
.
DATA DIVISION.
.
.
WORKING-STORAGE SECTION.
01 TRACE-SWITCH PIC 9 VALUE ZERO.
88 TRACE-OFF VALUE 0.
88 TRACE-ON VALUE 1.
.
.
PROCEDURE DIVISION.
DECLARATIVES.

11
COBOL for MVS & VM

COBOL-DEBUG SECTION.
USE FOR DEBUGGING ON ALL PROCEDURES.
COBOL-DEBUG-PARA.
IF TRACE-ON
DISPLAY DEBUG-NAME
END-IF.
END DECLARATIVES.
.
.
PARAGRAPH-3.
.
.
MOVE 1 TO TRACE-SWITCH.
OU
SET TRACE-ON TO TRUE.
PARAGRAPH-4.
.
.
PARAGRAPH-6.
.
.
MOVE 0 TO TRACE-SWITCH.
OU
SET TRACE-OFF TO TRUE.
PARAGRAPH-7.
.
.
.

TRANSFORM

O OS/VS COBOL suporta a instrução TRANSFORM. O COBOL for


MVS & VM não suporta essa instrução, mas suporta a instrução
INSPECT. Qualquer instrução TRANSFORM deve ser substituída
pela instrução INSPECT CONVERTING:

Código no OS/VS COBOL.

77 TEXTO PIC X(9) VALUE “ABCXYZCCC”.

TRANSFORM TEXTO FROM “ABC” TO “CAT”.

O TRANSFORM verifica cada caracter , alterando cada caracter “A”


para o caracter “C”, cada “B” para “A” e cada “C” para “T”. Após a
execução da instrução acima, a variável TEXTO ficará com o seguinte
conteúdo: “CATXYZTTT”. No COBOL for M & VM teremos o mesmo
resultado utilizando a instrução abaixo:

12
COBOL for MVS & VM

Código no COBOL for MVS & VM.

77 TEXTO PIC X(9) VALUE “ABCXYZCCC”.


INSPECT TEXTO CONVERTING “ABC” TO “CAT”.

TIME-OF-DAY

O OS/VS COBOL aceita o registro especial TIME-OF-DAY. Ele é


válido somente quando utilizado com a instrução MOVE. Possui
tamanho de 6 bytes decimais no formato:

HHMMSS (hora, minuto, segundo)

Programas OS/VS COBOL com a estrutura abaixo devem ser


alterados como se segue.

Código no OS/VS COBOL.

77 HORA-EXEC PIC X(06).


.
.
.
MOVE TIME-OF-DAY TO HORA-EXEC.

13
COBOL for MVS & VM

Código no COBOL for MVS & VM.

77 HORA-EXEC PIC X(06).


.
.
.
MOVE FUNCTION CURRENT-DATE (9:6) TO HORA-EXEC.

Nota: Os registros especiais TIME-OF-DAY e TIME não são válidos


sob o CICS.

CURRENT-DATE

O OS/VS COBOL suporta o registro especial CURRENT-DATE. Ele é


válido somente quando utilizado com a instrução MOVE. Possui
tamanho de 8 bytes alfanuméricos no formato:

MM/DD/AA (mês, dia, ano)

O COBOL for MVS & VM não suporta esse registro especial, mas
suporta o registro especial DATE. Ele é válido apenas quando
utilizado com a instrução ACCEPT (não é válido sob CICS). Tem
tamanho de 6 bytes alfanuméricos no formato:
AAMMDD (ano, mês, dia)

Programas OS/VS COBOL com a estrutura abaixo devem ser


alterados como se segue.

Código no OS/VS COBOL.

77 DATA-EXEC PIC X(08).


.
.
.
MOVE CURRENT-DATE TO DATA-EXEC.

14
COBOL for MVS & VM

Código no COBOL for MVS & VM.

01 DATA-EXEC.
03 MES PIC X(02).
03 FILLER PIC X(01) VALUE “/”.
03 DIA PIC X(02).
03 FILLER PIC X(01) VALUE “/”.
03 ANO PIC X(02).

01 DATA-ACCEPT.
03 ANO PIC X(02).
03 MES PIC X(02).
03 DIA PIC X(02).
.
.
.
ACCEPT DATA-ACCEPT FROM DATE.
MOVE CORRESPONDING DATA-ACCEPT TO DATA-EXEC.

DIVERSOS

Elementos Observações
ASSIGN ... OR Para utilizar esta cláusula no COBOL for
MVS & VM o OR deve ser removido.
ASSIGN TO integer Para utilizar esta cláusula no COBOL for
system-name MVS & VM o integer deve ser removido.
O integer era tratado como comentário no
OS/VS COBOL.
ASSIGN ... FOR O OS/VS COBOL aceita a frase e trata-a
MULTIPLE REEL/UNIT como documentacional. O COBOL for
MVS & VM não aceita esta frase, portanto
deve ser removida.
Instrução CLOSE – O OS/VS COBOL aceita as frases WITH
com as frases WITH POSITIONING e DISP como extensões da
POSITIONING e DISP instrução CLOSE. No COBOL for MVS &
VM essas frases não são aceitas, devendo
ser removidas.
Cláusula FILE-LIMIT do O OS/VS COBOL aceita a cláusula e trata-
parágrafo FILE- a como comentário. O COBOL for MVS &
CONTROL VM não aceita, portanto deve ser
removida.

15
COBOL for MVS & VM

REMARKS Comentariar, colocando um * (asterisco)


na coluna 7, ou será interpretado como
sendo um comentário do elemento
anterior.
Cláusula LABEL A cláusula LABEL RECORD deve ser
RECORD em uma retirada das entradas de descrição dos
entrada SD arquivos de SORT/MERGE.
Instrução NOTE Todas as instruções NOTE devem ser
removidas ou comentariadas.
Instrução ON Funções similares são providas pelas
instruções IF e EVALUATE.
Cláusula RECORD Numa variação do ANSI COBOL 74, a
CONTAINS n cláusula RECORD CONTAINS n
CHARACTERS CHARACTERS era alterada implicitamente
quando a cláusula OCCURS DEPENDING
ON fosse especificada no FD, produzindo
um arquivo de tamanho variável, apesar de
todos os registros terem o mesmo
tamanho (tamanho fixo). Sob o COBOL for
MVS & VM a cláusula RECORD
CONTAINS n CHARACTERS sempre
produz um arquivo de tamanho FIXO.
Cláusula LABEL No COBOL for MVS & VM essas frases
RECORD não são aceitas, devendo ser removidas.
com as frases Não esquecer de verificar as variáveis
TOTALING/TOTALED associadas com essas frases.
AREA
Frase GIVING da O COBOL for MVS & VM não suporta essa
declaração USE frase, portanto deve ser removida. A
AFTER STANDARD cláusula FILE STATUS do parágrafo FILE
ERROR CONTROL deve ser utilizada para
substituir a frase GIVING. A cláusula FILE
STATUS fornece informações após cada
operação de acesso aos arquivos.
Instrução OPEN com Essas opções não são aceitas pelo
LEAVE, REREAD e COBOL for MVS & VM e devem ser
DISP. removidas.

16
COBOL for MVS & VM

USE BEFORE O OS/VS COBOL aceita a sentença. O


STANDARD LABEL COBOL for MVS & VM não suporta essa
sentença, por isso deve ser removida. O
COBOL for MVS & VM não suporta rótulos
(labels) não padronizados (standard). Não
é possível processar arquivos com rótulos
(label) não padronizados (non-standard)
com o COBOL for MVS & VM.
Sentença START . . . O OS/VS COBOL permite a sentença
USING KEY START com a frase USING KEY. No
COBOL for MVS & VM a sentença START
deve utilizar a frase KEY IS. O USING não
é aceito pelo COBOL for MVS & VM.

EXTENSÕES DO OS/VS COBOL NÃO SUPORTADAS PELO COBOL


FOR MVS & VM

INSTRUÇÃO MOVE CORRESPONDING

O COBOL for MVS & VM não permite especificar mais do que um


campo receptor. Um programa em OS/VS COBOL que possua a
instrução:

MOVE CORRESPONDING GROUP-ITEM-A


TO GROUP-ITEM-B GROUP-ITEM-C.

Ao ser convertido para o COBOL for MVS & VM deverá ter a instrução
acima modificada para:

MOVE CORRESPONDING GROUP-ITEM-A TO GROUP-ITEM-B.


MOVE CORRESPONDING GROUP-ITEM-A TO GROUP-ITEM-C.

17
COBOL for MVS & VM

THEN COMO SENTENÇA DE CONEXÃO

O OS/VS COBOL aceita o uso da sentença de conexão THEN, como


exemplificado a seguir:.

MOVE A TO B THEN ADD C TO D.

O COBOL for MVS & VM não aceita, de modo que as instruções


acima deverão ser alteradas para:

MOVE A TO B.
ADD C TO D.

OPERADORES RELACIONAIS – CODIFICAÇÕES INCORRETAS

 Alguns usos incorretos de parênteses em condições relacionais são


aceitas pelo OS/VS COBOL, mas são tratadas como erro pelo
COBOL for MVS & VM.

Ex.: (A = 0 AND B) = 0
A = B AND (< C OR D)

 Releases anteriores ao release 2.4 do OS/VS COBOL aceitavam


operadores inválidos nas condições da relação. Na tabela abaixo
estão listados os operadores que não mais são aceitos, com os
respectivos códigos válidos.

OS/VS COBOL 2.3 COBOL for MVS & VM


= TO = ou EQUAL TO
> THAN > ou GREATHER THAN
< THAN < ou LESS THAN

18
COBOL for MVS & VM

PONTOS CONSECUTIVOS – EM QUALQUER DIVISÃO DO COBOL

O OS/VS COBOL permite que se codifique dois pontos consecutivos


em qualquer de suas divisões. O COBOL for MVS & VM emite uma
mensagem de aviso (W-level) se existirem dois pontos consecutivos
em uma linha da PROCEDURE DIVISION e uma mensagem de erro
(S-level) se existirem dois pontos consecutivos na ENVIRONMENT
DIVISION ou na DATA DIVISION.

O código apresentado a seguir compila sem erro no OS/VS COBOL,


mas no COBOL for MVS & VM a compilação terminará com erro S-
level (RC=12).

WORKING-STORAGE SECTION.

01 A PIC 9. .
.
.
MOVE1 TO A.
.
.
GOBACK.

AUSÊNCIA DE PONTO NOS PARÁGRAFOS

Releases anteriores ao release 2.4 do OS/VS COBOL aceitavam


nomes de parágrafos sem o ponto. No release 2.4 do OS/VS
COBOL, um parágrafo sem ponto gera uma mensagem de aviso
(warning). No COBOL for MVS & VM é gerado uma mensagem de
erro (E-level).

CLÁUSULA REDEFINES EM DESCRIÇÕES DE ARQUIVOS (SD E FD)

Releases anteriores ao release 2.4 do OS/VS COBOL aceitavam a


cláusula REDEFINES no nível 01 das descrições dos arquivos (SD ou
FD). O release 2.4 do OS/VS COBOL e o COBOL for MVS & VM não
aceitam.

A seqüência de código a seguir, é inválida:

SD ....
01 SORT-REC-HEADER.
05 SORT-KEY PIC X(20).

19
COBOL for MVS & VM

05 SORT-HEADER-INFO PIC X(40).


05 FILLER PIC X(20).
01 SORT-REC-DETAIL REDEFINES SORT-REC-HEADER.
05 FILLER PIC X(20).
05 SORT-DETAIL-INFO PIC X(60).

Para obter-se uma função similar, no COBOL for MVS & VM, a
cláusula REDEFINES deve ser removida.

CLÁUSULA REDEFINES EM TABELAS

O OS/VS COBOL permite a especificação de tabelas dentro do


escopo da cláusula REDEFINES. O COBOL for MVS & VM não
permite. O exemplo abaixo gera uma mensagem de aviso (W-level)
no OS/VS COBOL (RC=4), no COBOL for MVS & VM gera uma
mensagem de erro (S-level) e a compilação termina com RC=12.

Ex.: 01 TAB.
03 CAMPO-TAB OCCURS 10.
05 CAMPO PIC X.
03 CAMPO-RED REDEFINES CAMPO-TAB PIC X.

CLÁUSULA VALUE – VALOR SINALIZADO EM RELAÇÃO A CLÁUSULA


PICTURE

No OS/VS COBOL, o literal da cláusula VALUE pode ser sinalizado


mesmo que a cláusula PICTURE não seja sinalizada. No COBOL for
MVS & VM, o literal da cláusula VALUE tem de ser compatível com o
definido na cláusula PICTURE. Se a definição da cláusula PICTURE
for não sinalizada, o sinal deve ser removido do literal da cláusula
VALUE.

CLÁUSULA OCCURS

O OS/VS COBOL permite que após a cláusula OCCURS sejam


codificadas frases fora da ordenação padrão.

Por exemplo, o código abaixo é permitido no OS/VS COBOL, mas no


COBOL for MVS & VM irá gerar mensagens de erro (E-level e S-
level):

20
COBOL for MVS & VM

WORKING-STORAGE SECTION.
01 D PIC 9(03).
01 A.
02 B OCCURS 1 TO 200 TIMES
ASCENDING KEY C
DEPENDING ON D
INDEXED BY H.
03 C PIC 9(02).

Reordenando as frase após a cláusula OCCURS ter-se-á uma


codificação similar, aceita pelo COBOL for MVS & VM:

WORKING-STORAGE SECTION.
01 D PIC 9(03).
01 A.
02 B OCCURS 1 TO 200 TIMES
DEPENDING ON D
ASCENDING KEY C
INDEXED BY H.
03 C PIC 9(02).

21
COBOL for MVS & VM

ELEMENTOS DE LINGUAGEM ALTERADOS

FILE STATUS

Os STATUS KEY de retorno do QSAM e do VSAM foram alterados e


estão mais específicos. Vide tabela de STATUS KEY nos anexos 1 e
2.

IF ... OTHERWISE

Substituir o OTHERWISE por ELSE.

JUSTIFIED

Sob o OS/VS COBOL com a opção de compilação LANGLVL(1), se a


cláusula JUSTIFIED for utilizada com a cláusula VALUE, o dado
inicial é alinhado a direita. No COBOL for MVS & VM se as cláusulas
VALUE e JUSTIFIED são utilizadas para itens alfabéticos ou
alfanuméricos, o dado inicial é alinhado a esquerda.

Por exemplo no OS/VS COBOL, teríamos:

77 TEXTO PIC X(9) JUSTIFIED VALUE “FIRST”.

Resultando no valor FIRST ocupando as 5 últimas posições do


campo.

bbbbFIRST

No COBOL for MVS & VM, teríamos:

77 TEXTO PIC X(9) JUSTIFIED VALUE “FIRST”.

resultando no valor FIRST ocupando as primeiras posições do campo.

FIRSTbbbb

Para obter-se o mesmo resultado, teria-se de codificar como se


segue.

77 TEXTO PIC X(9) JUSTIFIED VALUE “ FIRST”.

22
COBOL for MVS & VM

INSTRUÇÃO MOVE PARA CAMPOS DEFINIDOS COM P NA PICTURE

A movimentação ou comparação do conteúdo de um campo definido


com P na PICTURE para um campo alfanumérico, no OS/VS COBOL,
com a opção de compilação LANGLVL(1), tinha os zeros finais
suprimidos. No COBOL for MVS & VM os zeros finais são movidos e
incluídos nas comparações.
EX:
05 SEND-FIELD PIC 999PPP VALUE 123000.
05 RECV-FIELD PIC XXXXXX.
.
.
MOVE SEND-FIELD TO RECV-FIELD.

No OS/VS COBOL, o código acima resultará no valor 123bbb para o


campo RECV-FIELD. No COBOL for MVS & VM o campo RECV-
FIELD conterá o valor 123000.

SENTENÇAS ARITMÉTICAS

O COVOL for MVS & VM suporta os seguintes itens aritméticos com


maior precisão:

 Usando itens de dados com ponto flutuante


 Usando literais com ponto flutuante
 Usando exponenciação

Programas que utilizem sentenças aritméticas que contenham os


itens acima deverão ser testados para garantir que a maior precisão
não trará impactos negativos na execução dos mesmos.

CLÁUSULA ASSIGN

O COBOL for MVS & VM somente aceita o seguinte formato para a


cláusula ASSIGN:

ASSIGN TO assignment-name.

Onde assignment-name pode ter os seguintes formatos:

23
COBOL for MVS & VM

Arquivo QSAM [comentário-][S-]nome

Arquivo VSAM [comentário-]AS-]nome

Arquivo VSAM Indexado ou Relativo [comentário-]nome

Se o programa em OS/VS COBOL usa outro formato na cláusula


ASSIGN, o mesmo deve ser alterado para o formato aceito pelo
COBOL for MVS & VM.

CLÁUSULA OCCURS DEPENDING ON COM A FRASE ASCENDING/


DESCENDING KEY

O OS/VS COBOL aceita a chave com tamanho variável na frase


ASCENDING/DESCENDING KEY da cláusula OCCURS DEPENDING
ON como uma extensão da IBM. No COBOL for MVS & VM a frase
ASCENDING/DESCENDING KEY da cláusula OCCURS DEPENDING
ON não pode especificar a chave com tamanho variável.

WHEN-COMPILED

As regras para utilização deste registrador especial são as mesmas.


Entretanto, os formatos dos dados são diferentes.

No OS/VS COBOL o formato é:

hh.mm.ssMMM DD, YYYY (hora.minuto.segundoMês Dia, Ano)

exemplo de utilização:

01 DATA-COMPL PIC X(20).


.
.
MOVE WHEN-COMPILED TO DATA-COMPL.
DISPLAY ‘PGM COMPILADO EM ’ DATA-COMPL.

No COBOL for MVS & VM o formato é:

MM/DD/YYhh.mm.ss (Mês/Dia/Anohora.minuto.segundo)

24
COBOL for MVS & VM

exemplo de utilização:

01 DATA-COMPL PIC X(16).


.
.
MOVE WHEN-COMPILED TO DATA-COMPL.
DISPLAY ‘PGM COMPILADO EM ’ DATA-COMPL.

NOTA:
No COBOL for MVS & VM foi disponibilizado a função WHEN-
COMPILED que fornece a mesma informação no formato:

YYYYMMDDhhmmssccdhgmg

Onde:

YYYY = Ano
MM = Mês
DD = Dia
hh = hora
mm = minuto
ss = segundo
cc = centésimo de segundo
d = sinal(+ ou -)
gh = diferença em horas ref. horário de Greenwich
gm = diferença em minutos ref. horário de Greenwich

exemplo de utilização:

DISPLAY ‘PGM COMPILADO EM ’


FUNCTION WHEN-COMPILED.
WRITE AFTER POSITIONING

O OS/VS COBOL suporta a instrução WRITE com a frase AFTER


POSITIONING. O COBOL for MVS & VM não suporta. No COBOL
for MVS & VM deve ser usado a instrução WRITE ... AFTER
ADVANCING.
Os exemplos abaixo apresentam as frase POSITIONING do OS/VS
COBOL e as frases equivalentes no COBOL for MVS & VM.

Usando WRITE...AFTER ADVANCING com literais.

OS/VS COBOL COBOL for MVS & VM

AFTER POSITIONING 0 AFTER ADVANCING PAGE


AFTER POSITIONING 1 AFTER ADVANCING 1 LINE
AFTER POSITIONING 2 AFTER ADVANCING 2 LINES
AFTER POSITIONING 3 AFTER ADVANCING 3 LINES

25
COBOL for MVS & VM

Usando WRITE...AFTER ADVANCING com variáveis.

WRITE OUTPUT-REC AFTER POSITIONING SK-CC.

OS/VS COBOL SK-CC COBOL for MVS & VM

AFTER POSITIONING SK-CC 1 AFTER ADVANCING PAGE


AFTER POSITIONING SK-CC ‘ ‘ AFTER ADVANCING 1 LINE
AFTER POSITIONING SK-CC 0 AFTER ADVANCING 2 LINES
AFTER POSITIONING SK-CC - AFTER ADVANCING 3 LINES

NOTA: Com o COBOL for MVS & VM, channel skipping somente é
suportado com referência no SPECIAL-NAMES.

VALUE

Sob o COBOL for MVS & VM passa a suportar a inicialização de


variáveis com nulo. A cláusula passa a aceitar três formatos,
exemplificados abaixo.

Formato 1 - Literal Value.

VALUE literal.

Formato 2 - Condition-Name Value.

88 Condition-Name VALUE literal.


OU
88 Condition-Name VALUE literal1 THRU literal2.

Formato 3 - NULL Value.

VALUE NULL. OU VALUE NULLS.

Obs.: VALUE IS NULL somente pode ser especificado para itens


elementares descritos implicitamente ou explicitamente com
USAGE IS POINTER.

MERGE

Permite vários arquivos no GIVING.

26
COBOL for MVS & VM

OPEN

Permite OPEN EXTEND para arquivos indexados e relativos.


Não aceita as opções LEAVE, REREAD, DISP nem REVERSED.

SEARCH

O COBOL for MVS & VM não permite que o campo da condição


WHEN seja o campo KEY especificado na tabela.

SORT

Permite arquivos indexados e relativos no USING/GIVING.


Permite vários arquivos no GIVING.
SORT-RETURN

No OS/VS COBOL os códigos de retorno do SORT são:

00 – Processamento efetuado com sucesso


de 02 até 12 – Erros de I/O nos arquivos
16 – Erro no processamento.

No COBOL for MVS & VM os códigos de retorno do SORT são


apenas:

00 – Processamento efetuado com sucesso


16 – Erro no processamento.

STRING

O OS/VS COBOL permite campos de origem definidos como


numéricos não inteiros. No COBOL for MVS & VM campos de origem
definidos como numéricos tem de ser inteiros.
O campo receptor pode ser um item de dados alfabético, entretanto
itens editados não são permitidos.

27
COBOL for MVS & VM

UNSTRING

A palavra “OR” tem de ser codificada entre identificadores:

Ex.:
UNSTRING AREA-A DELEMITED BY ‘-‘ OR ‘,’ INTO AREA-B.

Não pode ser usado para campo numérico editado.

WRITE

Não pode ser usado para arquivos QSAM abertos como I/O.

INSPECT

A instrução INSPECT especifica que caracteres, ou grupos de


caracteres, em um item de dados devem ser contados (TALLIED),
atualizados (REPLACED) ou ambos.

 conta as ocorrências de um caracter específico em um item de


dados
 preenche todo ou parte de um item de dados com brancos ou zeros

O CONVERTING funciona como se tivesse sido emitido um


REPLACING com uma série de frases ALL.

Ex.
INSPECT ... TALLYING ...
INSPECT ... REPLACING ...
INSPECT ... TALLYING ... REPLACING ...
INSPECT ... CONVERTING ...

PERFORM

A instrução PERFORM transfere explicitamente o controle para uma


ou mais procedures e implicitamente retorna o controle para a
próxima instrução executável após a instrução PERFORM. A
instrução PERFORM pode ser:

 Fora de linha - Quando o nome de uma procedure for fornecido

28
COBOL for MVS & VM

 Em linha - Quando o nome de uma procedure for omitido

O PERFORM (IN LINE) permite codificar comando(s) na própria


instrução PERFORM. Aceita todas as variações de testes.

Ex.:
PERFORM ...

PERFORM ... THRU ...

PERFORM ... THRU ... n TIMES

PERFORM ... THRU ...


[with test after/before]
UNTIL ...

PERFORM ... THRU ...


[with test after/before]
VARYING ... FROM ... BY ...
UNTIL ...

Exemplo PERFORM (IN-LINE).

PERFORM
UNTIL IO-STATUS EQUAL 'QC'
PERFORM R050-OBTER-MSG-FILA-IMS
THRU R050-OBTER-MSG-FILA-IMS-FIM
IF IO-STATUS EQUAL ' '
PERFORM R100-TRATAR-EMISSAO-CMD
THRU R100-TRATAR-EMISSAO-CMD-FIM
END-IF
END-PERFORM.

GOBACK.

PERFORM - ALTERAÇÕES NA FRASE VARYING/AFTER

O exemplo abaixo ilustra a diferença na execução:

Ex.:
PERFORM ROT-A VARYING X FROM 1 BY 1 UNTIL X > 3
AFTER Y FROM X BY 1 UNTIL Y > 3.

No OS/VS COBOL, o parágrafo ROT-A é executado 8 vezes com os


seguintes valores:

X: 1 1 1 2 2 2 3 3

29
COBOL for MVS & VM

Y: 1 2 3 1 2 3 2 3

No COBOL for MVS & VM, o parágrafo ROT-A é executado 6 vezes


com os seguintes valores:

X: 1 1 1 2 2 3
Y: 1 2 3 2 3 3

Para atingir o mesmo resultado obtido no OS/VS COBOL, o código do


programa no COBOL for MVS & VM deve ser alterado como se
segue:

MOVE 1 TO X, Y, Z.
PERFORM ROT-1 VARYING X FROM 1 BY 1 UNTIL X > 3
.
.
.
ROT-1.
PERFORM ROT-A VARYING Y FROM Z BY 1 UNTIL Y > 3
MOVE X TO Z.
.
.
.
ROT-A.

OU (utilizando o PERFORM in line)

MOVE 1 TO X.
PERFORM UNTIL X > 3
MOVE 1 TO Y
PERFORM UNTIL Y > 3
PERFORM ROT-A
ADD 1 TO Y
END-PERFORM
ADD 1 TO X
END-PERFORM.
.
.
.

30
COBOL for MVS & VM

ELEMENTOS DE LINGUAGEM ADICIONADOS

TERMINADOR EXPLÍCITO

As instruções abaixo ganharam terminador explícito


ADD
END-ADD
CALL END-CALL

COMPUTE END-COMPUTE

DELETE END-DELETE

DIVIDE END-DIVIDE

EVALUATE END-EVALUATE

IF END-IF

MULTIPLY END-MULTIPLY

PERFORM END-PERFORM

READ END-READ

RETURN END-RETURN

REWRITE END-REWRITE

SEARCH END-SEARCH

START END-START

STRING END-STRING

SUBTRACT END-SUBTRACT

UNSTRING END-UNSTRING

WRITE END-WRITE

PADDING CHARACTER

Especifica o caracter que será utilizado para preencher o bloco.


Usado apenas em arquivos seqüenciais.

31
COBOL for MVS & VM

RECORD DELIMITER

Indica o método para determinar o tamanho de um registro de


tamanho variável. É de uso exclusivo de arquivos seqüenciais de
tamanho variável.

EXTERNAL NO FD

A cláusula EXTERNAL especifica que um conector de arquivo é


externo e permite o compartilhamento do arquivo entre programas.
O uso da cláusula EXTERNAL não implica que o nome do conector do
arquivo associado seja um nome global.

EXTERNAL NA WS

A cláusula EXTERNAL especifica que a memória associada com o


item de dados pode ser acessada por qualquer programa dentro da
unidade de execução.
Somente pode ser especificado no nível 01 na WORKING
STORAGE.
O uso da cláusula EXTERNAL não implica que o nome do conector da
memória associada seja um nome global.

GLOBAL NA FD

A cláusula GLOBAL especifica que o nome do conector do arquivo


está disponível para todos os programas contidos no programa que a
declarou.
Indica que este conector de arquivo é um GLOBAL NAME.

GLOBAL NA WS

A cláusula GLOBAL especifica que o nome do conector de memória


está disponível para todos os programas contidos no programa que a
declarou. Indica que este conector de memória é um GLOBAL
NAME.

32
COBOL for MVS & VM

Se dois ou mais programas, dentro da mesma unidade de execução


descrevem o mesmo registro de dados externo, cada nome de
registro associado com a descrição do registro tem de ter o mesmo
nome e o registro tem de ter o mesmo número de caracteres e
formato dos dados. Entretanto, um programa que descreve um
registro externo pode conter a cláusula REDEFINES que redefina
completamente o registro externo e esta completa redefinição não
pode ocorrer em outro programa da mesma unidade de execução.

NOT

NOT AT END, NOT ON SIZE ERROR, NOT INVALID KEY, ....


NOT ON EXCEPITION, NOT ON OVERFLOW, NOT END-OF-PAGE

CONTINUE

Similar ao NEXT SENTENCE

TITLE

Colocar título no topo da página de compilação

33
COBOL for MVS & VM

DAY-OF-WEEK

Informa o dia da semana de acordo com a tabela abaixo


1 = segunda 2 = terça
3 = quarta 4 = quinta
5 = sexta 6 = sábado
7 = domingo

EVALUATE

A instrução EVALUATE fornece uma notação simples para uma série


de instruções IF.

Ex.
EVALUATE TI-CMD
WHEN 'BMP '
PERFORM 2550-TRATAR-REGIOES
THRU 2550-TRATAR-REGIOES-FIM
WHEN 'DMPQ'
PERFORM 7000-TRATAR-DMPQ
THRU 7000-TRATAR-DMPQ-FIM
WHEN 'IMSC'
PERFORM 5000-TRATAR-IMSC
THRU 5000-TRATAR-IMSC-FIM
WHEN 'LINE'
PERFORM 3700-TRATAR-LINE
THRU 3700-TRATAR-LINE-FIM
WHEN 'MNUC'
PERFORM 4500-TRATAR-MNUC
THRU 4500-TRATAR-MNUC-FIM
WHEN 'MPP '
PERFORM 2550-TRATAR-REGIOES
THRU 2550-TRATAR-REGIOES-FIM
WHEN 'PSTO'
PERFORM 2500-TRATAR-PSTOP
THRU 2500-TRATAR-PSTOP-FIM
WHEN OTHER
MOVE '001E' TO NU-VAR-MSG
MOVE WK-AUX-HORA TO CA-VAR-MSG
PERFORM 9200-INSERIR-RESPOSTA
THRU 9200-INSERIR-RESPOSTA-FIM
END-EVALUATE.

INITIALIZE

Inicializa campo ou conjunto de campos com valores pré


determinados. Uma tabela inteira pode ser inicializada através desta

34
COBOL for MVS & VM

instrução. Esta instrução é funcionalmente equivalente a uma ou


mais intrusões MOVE.
Um item de dado tipo índice não pode ser inicializado através desta
instrução.

Ex.
INITIALIZE campo(s).

INITIALIZE campo(s)
REPLACING tipo(s) BY campo ou literal.

FUNÇÃO INTRÍNSECA

Função intrínseca é uma função que executa uma operação


matemática, uma operação com caracter ou uma operação lógica e
permite que o resultado derivado automaticamente da execução
possa ser referenciado.
A tabela das funções disponíveis pode ser vista no anexo 3.

REGISTRADORES E ENDEREÇAMENTOS

O COBOL for MVS & VM apresenta várias novidades nesta área,


algumas delas serão mostradas a seguir

LENGTH OF

Contém o número de bytes utilizados por um campo

Ex.
MOVE LENGTH OF CAMPO-A TO CAMPO-B.
ADD LENGTH OF CAMPO-A TO CAMPO-C.

ADDRESS OF

Contém o endereço de cada variável na LINKAGE SECTION.

Ex.
SET ADDRESS OF CAMPO-LK TO CAMPO-ADDR-WK.

35
COBOL for MVS & VM

POINTER

Indica campos definidos para armazenar endereços.

Ex.
05 CAMPO-ADDR-WK PIC X(04) POINTER VALUE NULLS.

SET

Atribui valores a campos. Possui 5 formatos.

1. SET básico
2. SET para ajustar índices
3. SET para switches externos
4. SET para nomes condicionais
5. SET para itens de dados USAGE IS POINTER

Ex.:
 SET ADDRESS OF identifier TO NULLS.
(Formato 5)
 SET variável-condicional TO TRUE.
(Formato 4)
 SET nome-mneumonico TO ON/OFF.
(Formato 3)
 SET index-name UP/DOWN BY 1.
(Formato2)
 SET index-name TO 1.
(Formato 1)

MOVE

Permite endereçar uma determinada posição de memória, não


definida explicitamente.

Ex.
MOVE variável (posição-inicial:tamanho) TO CAMPO
MOVE CAMPO-A (5:8) TO CAMPO-B.
MOVE CAMPO-A (ADDR-INI:TAM) TO CAMPO-B.

36
COBOL for MVS & VM

PROBLEMAS MAIS COMUNS NA CONVIVÊNCIA COM O OS/VS COBOL


PROBLEMAS DE ENDEREÇAMENTO

Todos os programas OS/VS COBOL são AMODE(24) e RMODE(24).


Programas OS/VS COBOL podem chamar programas COBOL for MVS
sem problemas, desde que ambos os programas acessem dados abaixo
da linha de 16 Mb. Quando um programa COBOL for MVS & VM chama
um programa OS/VS COBOL podem ocorrer erros (data exception) se
os dados ou a lista de parâmetros estiver acima da linha de 16 Mb. Os
itens de dados da WORKING STORAGE podem estar acima ou abaixo
da linha de 16 Mb dependendo das opções de compilação DATA, RENT
e RMODE.
Para evitar erros (data exception), deve-se garantir que todos os dados
e lista de parâmetros estão abaixo da linha de 16 Mb, compilando os
programas COBOL for MVS & VM com as opções de compilação
DATA(24) para programas RENT ou com RMODE(24) para programas
NORENT.
A figura abaixo mostra as diferentes combinações em função das
opções de compilação utilizadas. Todas as chamadas são dinâmicas e
representadas pelas setas. O PGM1 e o PGM5 são programas OS/VS
COBOL os itens de dados da WORKING STORAGE, dos mesmos, estão
incluídos no módulo objeto e estão abaixo da linha de 16 MB.
Programas compilados com a opção RENT, possuem os itens de dados
da WORKING STORAGE separados do módulo, a localização é definida
pela opção de compilação DATA (PGM2 e PGM3). Nos programas
compilados com a opção NORENT os itens de dados da WORKING
STORAGE são incluídos no módulo objeto e a localização depende da
opção RMODE (PGM4). Todos os CALLs da figura executarão com
sucesso exceto para o programa PGM3 chamado pelo programa PGM5.
Como o programa PGM3 foi compilado com DATA(31), os dados e a
lista de parâmetros estão localizados acima da linha de 16 Mb. Isto
significa que a lista de parâmetros não pode ser acessada pelo
programa PGM5 e o CALL irá falhar.

Nota: CALLs estáticos de programas


RENT com AMODE=31 para programas
RENT
OS/VS COBOL sempre falharão.
RMODE(ANY) RMODE(ANY)
DATA(24) DATA(31)

COBOL for COBOL for


MVS & VM MVS & VM
PGM2 PGM3

Dados D3

Linha de 16 Mb

OS/VS COBOL OS/VS COBOL


Dados D2 COBOL for MVS
PGM1 PGM5
& VM
PGM4

DADOS D1 DADOS D5
DADOS D4
37
NORENT
RMODE(24)
DATA(24/31)
COBOL for MVS & VM

OPÇÃO DE COMPILAÇÃO RES/NORES

Todos os programas COBOL for MVS & VM são RES e somente


executam sob o Language Environment. A opção de compilação
NORES do OS/VS COBOL carrega os módulos executáveis (ILBO...) no
módulo de carga do programa. Se em uma unidade de execução
existirem programas COBOL for MVS & VM chamando de forma estática
programas OS/VS COBOL com a opção NORES, ou vice versa, os
programas OS/VS COBOL devem ser regerados com a opção RES ou
relinkeditados com o Language Environment de modo que todos os
programas envolvidos na unidade de execução utilizem os mesmos
módulos (ILBO...), do Language Environment. Caso contrário, diversos
problemas de compatibilidade poderão ocorrer.
FALHAS NA INSTRUÇÃO OPEN PARA ARQUIVOS QSAM

PREVENINDO O FILE STATUS 39 PARA ARQUIVOS QSAM.

Este tópico provê um guia para ajudar a prevenir os problemas mais


comuns que resultam no FILE STATUS 39 quando do acesso a
arquivos QSAM. Esses problemas, normalmente, estão relacionados
com a mistura na definição dos atributos de organização dos
arquivos, formato do registro (fixo ou variável), tamanho do registro,
etc..

PROCESSANDO ARQUIVOS EXISTENTES

Programas que acessem arquivos existentes, devem ter a


descrição do arquivo consistente com os atributos do Data Set, por
exemplo:

Arquivos com formato O maior tamanho de registro especificado


variável no programa tem que ser 4 bytes menor

38
COBOL for MVS & VM

Format-V ou Format-S que o atributo de tamanho (LRECL) do


Data Set.
Arquivos com formato fixo O tamanho do registro especificado no
Format-F programa tem de ser exatamente igual ao
atributo de tamanho (LRECL) do Data Set.
Arquivos com formato O maior tamanho de registro especificado
indefinido no programa tem de ser exatamente igual
Format-U ao atributo de tamanho (BLKSIZE) do Data
Set.

Nota: É importante lembrar que as informações especificadas no


JCL se sobrepõem às informações do rótulo (label) do Data
Set.

DEFININDO REGISTROS DE TAMANHO VARIÁVEL

A maneira mais fácil de definir registros de tamanho variável nos


programas é usar a cláusula RECORD IS VARYING FROM inteiro-
1 TO inteiro-2 na descrição do arquivo (FD) e especificar um valor
apropriado para o inteiro-2. Por exemplo, assumindo que um
determinado atributo de tamanho de um Data Set seja 104
(LRECL=104) e tendo em mente que o maior tamanho de registro é
determinado pela cláusula RECORD IS VARYING e não pela
descrição do nível 01 do registro, pode-se definir um arquivo de
formato variável (Format-V) como mostrado abaixo:

FILE SECTION.
FD MOVIMENTO.
RECORDING MODE IS V
RECORD IS VARYING FROM 6 TO 104 CHARACTERS.
01 REGISTRO-A PIC X(06).
01 REGISTRO-B PIC X(80).

Assumindo que o arquivo existente no exemplo anterior tenha um


formato indefinido (Format-U) ao invés de um formato variável,
pode-se definir o arquivo como mostrado a seguir:

FILE SECTION.
FD MOVIMENTO.
RECORDING MODE IS U
RECORD IS VARYING FROM 6 TO 104 CHARACTERS.
01 REGISTRO-A PIC X(06).
01 REGISTRO-B PIC X(80).

39
COBOL for MVS & VM

DEFININDO ARQUIVOS DE TAMANHO FIXO

Para definir registros de tamanho fixo, deve-se usar a cláusula


RECORD CONTAINS inteiro ou omitindo esta cláusula e
especificando todos os níveis 01 da descrição do registro com o
mesmo tamanho. Em qualquer das duas opções o tamanho do
registro tem de ser igual ao atributo de tamanho (LRECL) do Data
Set. Quando o mesmo programa é utilizado para, em diferentes
execuções, processar arquivos que possuam tamanhos de
registros diferentes, para evitar conflitos, recomenda-se que seja
codificada a cláusula RECORD CONTAINS 0.

Se o arquivo existente é um Data Set em ASCII


(DCB=(OPTCD=Q)), o programa deve ter especificado a cláusula
CODE-SET na descrição do arquivo (FD).

PROCESSANDO ARQUIVOS NOVOS

Antes de executar programas que irão gravar registros novos,


certifique-se que os atributos especificados no cartão DD não estão
em conflito com os atributos especificados no programa. Na
maioria dos casos, quando pré definindo os arquivos, somente é
necessário especificar um mínimo de parâmetros. Na ilustração
abaixo é mostrado o relacionamento entre o cartão DD, o descrito
no FILE-CONTROL e as entradas (FD) no FILE SECTION:

Cartão DD do JCL:
1
//OUTFILE DD DSN=.....,DCB=(BLKSIZE=6160),
// UNIT=SYSDA,PACE=(TRK,(45,15),RLSE),.....

Código do programa COBOL for MVS & VM:

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION. 1
FILE-CONTROL. 2
SELECT CARPOOL ASSIGN TO OUTFILE
ORGANIZATION IS SEQUENTIAL
ACCESS IS SEQUENTIAL.
...
DATA DIVISION.
FILE SECTION. 2
FD CARPOOL
LABEL RECORD STANDARD
BLOCK CONTAINS 0 CARACTERS

40
COBOL for MVS & VM

RECORD CONTAINS 80 CHARACTERS.

Onde:

(1) O ddname no cartão DD corresponde ao assignment-


name da cláusula ASSIGN.

(2) Quando um arquivo é especificado na entrada FILE-


CONTROL, tem de existir uma FD correspondente na
FILE SECTION.

PROGRAMAS CICS – CONSIDERAÇÕES SOBRE A CONVERSÃO

CHAMADAS DINÂMICAS (DYNAMIC CALL) QUANDO EXECUTANDO


SOB O CICS

 O OS/VS COBOL permite que programas emitam chamadas


dinâmicas (DYNAMIC CALL) quando executados no CICS. O
Language Environment não permite. Um programa OS/VS COBOL
executando no CICS sob o Language Environment terminará
anormalmente com o código de abend U3504.

 No CICS não se deve misturar programas OS/VS COBOL com


programas COBOL for MVS & VM na mesma unidade de execução.

SERVICE RELOAD

No OS/VS COBOL, para executar programas sob o CICS, a instrução


SERVICE RELOAD é requerida para viabilizar o endereçamento dos
itens definidos na LINKAGE SECTION. Com o COBOL for MVS & VM, a
instrução SERVICE RELOAD não mais é necessária e se existir será
tratada como comentário.

REGISTRO ESPECIAL LENGTH OF

41
COBOL for MVS & VM

Através do registro especial LENGTH OF, não é mais necessário passar


explicitamente o tamanho dos argumentos para alguns dos comandos
CICS. Pode-se usar o registro especial LENGTH OF nas instruções do
COBOL for MVS & VM em que os itens numéricos de dados estejam
explicitamente definidos. A informação é obtida através do número de
caracteres que o item de dados ocupa no programa.

42
COBOL for MVS & VM

RECEBENDO UMA ÁREA DE COMUNICAÇÃO

OS/VS COBOL COBOL for MVS & VM


LINKAGE SECTION. LINKAGE SECTION.
01 PARAMETER-LIST.
05 PARM-FILLER PIC S9(8) COMP.
05 PARM-AREA1-POINTER PIC S9(8) COMP.
05 PARM-AREA2-POINTER PIC S9(8) COMP.
01 AREA1. 01 AREA1.
05 AREA1-DATA PIC X(100). 05 AREA1-DATA PIC X(100).
01 AREA2. 01 AREA2.
05 AREA2-DATA PIC X(100). 05 AREA2-DATA PIC X(100).
. .
. .
PROCEDURE DIVISION. PROCEDURE DIVISION.
. .
. .
EXEC CICS READ DATASET("INFILE") EXEC CICS READ DATASET("INFILE")
RIDFLD(INFILE-KEY) RIDFLD(INFILE-KEY)
SET(PARM-AREA1-POINTER) SET(ADDRESS OF AREA1)
LENGTH(RECORD-LEN) LENGTH(RECORD-LEN)
END-EXEC. END-EXEC.
SERVICE RELOAD PARM-AREA1-POINTER.

PROCESSANDO ÁREAS DE MEMÓRIAS COM MAIS DE 4K

OS/VS COBOL COBOL for MVS & VM


LINKAGE SECTION. LINKAGE SECTION.
01 PARMLIST.
.
.
05 RECORD-POINTERA PIC S9(8) COMP.
05 RECORD-POINTERB PIC S9(8) COMP.
.
.
01 FILE-RECORD. 01 FILE-RECORD.
05 REC-AREA1 PIC X(2500). 05 REC-DATA1 PIC X(2500).
05 REC-AREA2 PIC X(2500). 05 REC-DATA2 PIC X(2500).
. .
. .
PROCEDURE DIVISION. PROCEDURE DIVISION.
. .
. .
EXEC CICS READ DATASET("INFILE") EXEC CICS READ DATASET("INFILE")
RIDFLD(INFILE-KEY) RIDFLD(INFILE-KEY)
SET(RECORD-POINTERA) SET(ADDRESS OF FILE-RECORD)
LENGTH(RECORD-LEN) LENGTH(RECORD-LEN)
END-EXEC. END-EXEC.
SERVICE RELOAD RECORD-POINTERA
ADD +4096 TO RECORD-POINTERA
GIVING RECORD-POINTERB
SERVICE RELOAD RECORD-POINTERB.

43
COBOL for MVS & VM

ACESSANDO ÁREAS DE MEMÓRIA ENCADEADAS

OS/VS COBOL COBOL for MVS & VM

WORKING-STORAGE SECTION. WORKING-STORAGE SECTION.


01 WS-DATA-HOLD PIC X(100). 01 WS-DATA-HOLD PIC X(100).
. .
. .
LINKAGE SECTION. LINKAGE SECTION.
01 PARAMETER-LIST. .
. .
. .
05 CHAINED-POINTER PIC S9(8) COMP. .
. .
. .
01 CHAINED-STORAGE. 01 CHAINED-STORAGE.
05 CHS-NEXT-AREA PIC S9(8) COMP. 05 CHS-NEXT-AREA USAGE IS POINTER.
05 CHS-DATA PIC X(100). 05 CHS-DATA PIC X(100)
. .
. .
PROCEDURE DIVISION. PROCEDURE DIVISION.
. .
. .
MOVE CHS-NEXT-AREA TO CHAINED-POINTER. SET ADDRESS OF CHAINED-STORAGE
TO CHS-NEXT-AREA.
ANY-PARAGRAPH-NAME. MOVE CHS-DATA TO WS-DATA-HOLD.
MOVE CHS-DATA TO WS-DATA-HOLD. .
. .
. .

44
COBOL for MVS & VM

USANDO A CLÁUSULA OCCURS DEPENDING ON

OS/VS COBOL COBOL for MVS & VM

LINKAGE SECTION. LINKAGE SECTION.


01 PARMLIST.
05 FILLER PIC S9(8).
05 RECORD-POINTER PIC S9(8).
.
.
01 VAR-RECORD. 01 VAR-RECORD.
05 REC-OTHER-DATA PIC X(30). 05 REC-OTHER-DATA PIC X(30).
05 REC-AMT-CNT PIC 9(4). 05 REC-AMT-CNT PIC 9(4).
05 REC-AMT PIC 9(5) 05 REC-AMT PIC 9(5)
OCCURS 1 TO 100 TIMES OCCURS 1 TO 100 TIMES
DEPENDING ON REC-AMT-CNT. DEPENDING ON REC-AMT-CNT.
. .
. .
PROCEDURE DIVISION. PROCEDURE DIVISION.
. .
. .
EXEC CICS READ DATASET("INFILE") EXEC CICS READ DATASET("INFILE")
RIDFLD(INFILE-KEY) RIDFLD(INFILE-KEY)
SET(RECORD-POINTER) SET(ADDRESS OF VAR-RECORD)
LENGTH(RECORD-LEN) LENGTH(RECORD-LEN)
END-EXEC. END-EXEC.
MOVE REC-AMT-CNT TO REC-AMT-CNT. .
MOVE REC-OTHER-DATA TO WS-DATA. .
MOVE VAR-RECORD TO WS-RECORD-HOLD. MOVE VAR-RECORD TO WS-RECORD-HOLD.
. .
. .

45
COBOL for MVS & VM

ANEXOS
ANEXO 1 - QSAM - STATUS KEY

Status Key Values -- QSAM files


COBOL for OS/VS Meaning
MVS & VM COBOL
00 00 Successful completion
04 (undefined) COBOL for MVS & VM only: Wrong length
record Successful completion
05 (undefined) Optional file not present
Successful completion
NO REWIND/REEL/UNIT/FOR REMOVAL
07 (undefined) specified for OPEN or CLOSE, but file not on a
reel/unit medium. Successful completion
10 10 At END (no next logical record) Successful
completion
30 30 Permanent error
34 34 Permanent error File boundary violation.
35 90 Nonoptional file not present
37 90 Device type conflict
38 92 OPEN attempted for file closed WITH LOCK
39 90 Conflict of fixed file attributes; OPEN fails
41 92 OPEN attempted for a file in OPEN mode
42 92 CLOSE attempted for a file not in Open mode
43 92 REWRITE attempted when last I/O statement
was not READ
44 92 Attempt to rewrite a sequential file record with
a record of a different size
46 92 Sequential READ attempted with no valid next
record
47 92 READ attempted when file not in OPEN INPUT
or I-O mode
48 92 WRITE attempted when file not in OPEN
OUTPUT, I-O, or EXTEND mode
49 92 DELETE or REWRITE attempted when file not
in OPEN I-O mode
90 90 Other errors with no further information
92 92 Logic error
96 90 No file identification (No DD statement for this
file)

46
COBOL for MVS & VM

ANEXO 2 - VSAM - STATUS KEY

Status Key Values -- VSAM Files


COBOL for OS/VS Meaning
MVS & VM COBOL
00 00 Successful completion
02 02 Duplicate key, and DUPLICATES specified.
Successful completion
04 00 Wrong length record. Successful completion
05 00 Optional file not present. Successful completion
10 10 At END (no next logical record) Successful
completion
14 (undefined) On sequential READ for relative file, size of relative
record number too large for relative key
20 20 Invalid key for a VSAM indexed or relative file
21 21 Invalid key for a VSAM indexed or relative file;
sequence error
22 22 Invalid key for a VSAM indexed or relative file;
duplicate key and duplicates not allowed
23 23 Invalid key for a VSAM indexed or relative file; no
record found
24 24 Invalid key for a VSAM indexed or relative file;
attempt to write beyond file boundaries
COBOL for MVS & VM only: for a WRITE to a relative
file, size of relative record number to large for relative
key
30 30 Permanent error
35 93 96 Nonoptional file not present
37 90 Attempt to open a file not on a mass storage device
39 95 Conflict of fixed file attributes; OPEN fails
41 92 OPEN attempted for a file in OPEN mode
42 92 CLOSE attempted for a file not in OPEN mode
43 92 REWRITE attempted when last I/O statement was
not READ or DELETE
46 94 Sequential READ attempted with no valid next record
47 92 READ attempted when file not in OPEN INPUT or I-O
mode
48 92 WRITE attempted when file not in OPEN OUTPUT, I-
O, or EXTEND mode
49 92 DELETE or REWRITE attempted when file not in
OPEN I-O mode
90 90 Other errors with no further information
91 91 VSAM password failure
93 93 VSAM resource not available
95 95 Invalid or incomplete VSAM file information
96 96 No file identification (no DD statement for this VSAM
file)

47
COBOL for MVS & VM

97 97 OPEN statement execution successful; file integrity


verified

48
COBOL for MVS & VM

ANEXO 3 - TABELA DE FUNÇÕES

A tabela abaixo apresenta uma visão geral dos tipos de argumentos,


tipos de funções e valores retornados por cada função intrínseca
disponibilizada pelo COBOL for MVS & VM.
Tipos de argumentos e tipos de funções são abreviados como se segue:

_ A = alphabetic
_ I = integer
_ N = numeric
_ X = alphanumeric.

Table of Functions

FUNCTION-NAME ARGUMENTS TYPE VALUE RETURNED


ACOS N1 N Arccosine of N1
ANNUITY N1, I2 N Ratio of annuity paid for I2 periods at
interest of N1 to initial investment of
one
ASIN N1 N Arcsine of N1
ATAN N1 N Arctangent of N1
CHAR I1 X Character in position I1 of program
collating sequence
COS N1 N Cosine of N1
CURRENT-DATE None X Current date and time and difference
from Greenwich Mean Time.
(YYYYMMDDhhmmssccdhgmg)
DATE-OF- I1 I Standard date equivalent
INTEGER (YYYYMMDD) of integer date
DAY-OF- I1 I Julian date equivalent (YYYYDDD) of
INTEGER integer date
FACTORIAL I1 I Factorial of I1
INTEGER N1 I The greatest integer not greater than
N1
INTEGER-OF- I1 I Integer date equivalent of standard
DATE date (YYYYMMDD)
INTEGER-OF- I1 I Integer date equivalent of Julian date
DAY (YYYYDDD)
INTEGER-PART N1 I Integer part of N1
LENGTH A1 or N1 I Length of argument
or X1
LOG N1 N Natural logarithm of N1
LOG10 N1 N Logarithm to base 10 of N1
LOWER-CASE A1 or X1 X All letters in the argument are set to
lowercase
MAX A1... or X Value of maximum argument; note
I1... or I that the type of function depends on
N1... or N the arguments

49
COBOL for MVS & VM

X1... X
MEAN N1... N Arithmetic mean of arguments
MEDIAN N1... N Median of arguments
MIDRANGE N1... N Mean of minimum and maximum
arguments
MIN A1... or X Value of minimum argument; note that
I1... or the type of function depends on the
N1... or arguments
X1...
MOD I1,I2 I I1 modulo I2
NUMVAL X1 N Numeric value of simple numeric string
NUMVAL-C X1 or N Numeric value of numeric string with
X1,X2 optional commas and currency sign
ORD A1 or X1 I Ordinal position of the argument in
collating sequence
ORD-MAX A1... or I Ordinal position of maximum argument
N1... or
X1...
ORD-MIN A1...or I Ordinal position of minimum argument
N1... or
X1...
PRESENT- N1 N Present value of a series of future
VALUE N2... period-end amounts, N2, at a discount
rate of N1
RANDOM I1 or N Random number
none
RANGE I1... or I Value of maximum argument minus
N1... N value of minimum argument; note that
the type of function depends on the
arguments.
REM N1,N2 N Remainder of N1/N2
REVERSE A1 or X1 X Reverse order of the characters of the
argument
SIN N1 N Sine of N1
SQRT N1 N Square root of N1
STANDARD- N1... N Standard deviation of arguments
DEVIATION

50
COBOL for MVS & VM

SUM I1... or I Sum of arguments; note that the type


N1... N of function depends on the arguments.
TAN N1 N Tangent of N1
UPPER-CASE A1 or X1 X All letters in the argument are set to
uppercase
VARIANCE N1... N Variance of arguments
WHEN- None X Date and time when program was
COMPILED compiled

51
COBOL for MVS & VM

BIBLIOGRAFIA
CÓDIGO TÍTULO
GC26-4524 IBM OS/VS COBOL TO VS COBOL II
Migration Guide
GC26-4764 COBOL/370 and COBOL for MVS & VM
Compiler and Run-Time Migration Guide
SC26-4769 IBM SAA AD/Cycle COBOL/370
Language Reference
SC28-6456 IBM OS Full American Compiler and Library, Version 4,
Programmer´s Guide
GC28-6396 IBM OS Full American National Standard COBOL
System Reference Library
GC26-4047 VS COBOL II
Application Programming Language Reference

52

Você também pode gostar