Escolar Documentos
Profissional Documentos
Cultura Documentos
Reduo de restries
O Comit passou a aceitar palavras inglesas compostas com o prefixo END para fechar o escopo de instrues em alternativa ao ponto que continua fechando o escopo de todas as instrues. Formato genrico; COMANDO END-COMANDO Condies especiais passam a aceitar opo negativa e comandos condicionais desta forma podemos encapsular comandos uns nos outros. Formato genrico; NOT AT END INVALID KEY ON SIZE ERROR
Ilustrao genrica; COMANDO condio especial COMANDO condio especial COMANDO END-COMANDO END-COMANDO NOT condio especial COMANDO END-COMANDO END-COMANDO Com estes novos recursos podemos eliminar a necessidade de criar pargrafos inconvenientes sem perder legibilidade, a utilizao de pargrafos passa a ter efeito de documentao ou para declarar rotinas reutilizveis.
Como no cdigo ASCII a letra A maiscula representada pelo valor decimal 65, ao se somar 32 em sua redefinio em USAGE COMP-X, o resultado obtido ser 97 que representa a letra a em minsculas.
3 - Referncia posicional;
como se fosse uma redefinio de referncias em tempo de execuo, para isso basta declarar entre parnteses a posio inicial e o nmero de bytes que desejamos mover (origem ou destino).
MOVE ORIGEM (INICIO-1: TAMANHO-1) TO DESTINO (INICIO-2: TAMANHO-2)
TAMANHO-1 e TAMANHO-2
MOVE MES
ANSI 85:
01 EMISSAO PIC 9(006)
Comandos estendidos
Neste mdulo, vamos estudar os principais comandos modificados pelo comit ANSI de 1985 na linguagem COBOL. A forma ANSI de 1974 continua sendo vlida, porm opcional.
O comando READ incorpora a negativa da condio de fim de arquivo (NOT AT END) e todos passam a aceitar a negativa da condio de chave invlida (NOT INVALID KEY) e a ter o escopo delimitado por END-DELETE, END-READ, END-REWRITE, END-START e ENDWRITE respectivamente.
Exemplo:
ANSI 74:
WRITE REGISTRO INVALID KEY PERFORM ERRO-DE-GRAVACAO GO TO NAO-GRAVA. PERFORM PROCESSOS. NAO-GRAVA.
ANSI 85:
WRITE REGISTRO INVALID KEY PERFORM ERRO-DE-GRAVACAO NOT INVALID KEY PERFORM PROCESSOS END-WRITE
2 - Operaes aritmticas
(ADD, COMPUTE, DIVIDE, SUBTRACT, e MULTIPLY); Todos passam a aceitar a negativa da condio de estouro de campo (NOT ON SIZE ERROR) e a ter o escopo delimitado por END-ADD, END-COMPUTE, END-DIVIDE, ENDSUBTRACT e END-MULTIPLY respectivamente.
ANSI 85:
ADD 1 TO CAMPO ON SIZE ERROR PERFORM ERRO-DE-SOMA NOT ON SIZE ERROR PERFORM PROCESSOS END-ADD
3 - IF
Passa a ter o escopo de instrues condicionais delimitado no apenas por um ponto, mas tambm pela nova clusula END-IF. Exemplo:
IF CONDIO-1 INSTRUES-1 IF CONDIO-2 INSTRUES-2 ELSE IF CONDIO-3 INSTRUES-3 ELSE INSTRUES-4 END-IF INSTRUES-5 END-IF INSTRUES-6 END-IF
4 - CALL
Incorpora em complemento a clusula USING, novas clusulas opcionais: REFERENCE Libera a subrotina chamada para manipulao total do item referenciado, sendo a especificao default, assim como no ANSI 74 quando era opo imperativa no declarada. 4.2 - BY CONTENT No permite que a subrotina chamada mude o contedo do item referenciado. 4.1 - BY
4.3 - BY VALUE Trata o item referenciado como uma literal. 4.4 -(NOT) ON [EXCEPTION|OVERFLOW] Permite a declarao de procedimentos condicionados ao sucesso ou no na chamada da subrotina. 4.5 - END-CALL Delimita o fim do escopo da clusula (NOT) ON EXCEPTION. Exemplo:
CALL "EXTENSO" USING BY REFERENCE VALOR-FRASE BY CONTENT VALOR-NUMERICO BY VALUE "REAL" BY VALUE "REAIS" ON EXCEPTION DISPLAY "Rotina de extenso no disponvel" LINE 23 COLUMN 3 WITH BEEP SIZE 70 GOBACK NOT ON EXCEPTION MOVE VALOR-FRASE TO VALOR-FRASE-NOTA-FISCAL END-CALL
5 - PERFORM
____________________________________________________________________________________________________ COBOLware Services Ltda 8
Recebe duas novas clusulas: 5.1 - END-PERFORM Elimina a necessidade da definio de um pargrafo para criar um bloco de instrues repetitivas. A clusula END-PERFORM delimita o escopo de instrues sob controle do ltimo PERFORM. Exemplo: ANSI 74:
PERFORM LEITURA THRU FIM-LEITURA UNTIL FS-ARQUIVO = "10" LEITURA. READ ARQUIVO AT END MOVE "10" TO FS-ARQUIVO. PERFORM LISTAGEM THRU FIM-LISTAGEM. FIM-LETURA. EXIT.
ANSI 85:
PERFORM UNTIL FS-ARQUIVO = "10" READ ARQUIVO AT END MOVE "10" TO FS-ARQUIVO NOT AT END PERFORM LISTAGEM THRU FIM-LISTAGEM END-READ END-PERFORM.
UNTIL condio
Deve ser usado para alterar a seqncia lgica durante os testes de validade das condies que limitam a repetio do bloco de instrues ou pargrafo.
6 - SET
Permite que uma condio (Nvel 88) seja forada para verdadeira durante o processamento, de forma a tornar a PROCEDURE DIVISION independente da DATA DIVISION. Exemplo: Definio da condio:
05 ESTADO-CIVIL PIC 9(002). 88 SOLTEIRO VALUE 0. 88 CASADO VALUE 1. 88 VIUVO VALUE 2. 88 DESQUITADO VALUE 3. 88 DIVORCIADO VALUE 4.
ANSI 74:
MOVE 1 TO ESTADO-CIVIL.
ANSI 85:
SET CASADO TO TRUE.
Novos comandos
Neste mdulo vamos estudar os principais comandos homologados pelo comit ANSI de 1985 para a linguagem COBOL.
1 - CANCEL
Eliminar mdulos externos desnecessrios para a continuidade do processamento. Exemplo:
CALL "ROTINA" CANCEL "ROTINA"
2 - CONTINUE
Preencher lacunas de codificao "vazia". Exemplo: Supondo que desejamos descobrir o tamanho da string contida na varivel CAMPO.
01 01 CAMPO PIC X(80) VALUE "COBOL ANSI". TAMANHO PIC 9(02) VALUE 0.
PERFORM VARYING TAMANHO FROM 80 BY -1 UNTIL CAMPO (TAMANHO: 1) NOT = SPACES CONTINUE END-PERFORM
Como o valor final da varivel TAMANHO atende a nossa necessidade sem nenhum comando, j que tanto a comparao quanto o decremento esto codificados atravs de clusulas do prprio comando PERFORM deveremos preencher esta lacuna com o comando CONTINUE.
3 - EVALUATE
Criado para simplificar a codificao e leitura de mltiplas decises, resolvidas at ento, com complexos ninhos de IFs. Exemplo: ANSI 74:
IF ELSE IF ELSE IF ELSE IF OPCAO = 4 PERFORM LISTA-PRODUTO THRU FIM-LISTA-PRODUTO. OPCAO = 3 PERFORM LISTA-CLIENTE THRU FIM-LISTA-CLIENTE OPCAO = 2 PERFORM LISTA-NOTA THRU FIM-LISTA-NOTA OPCAO = 1 PERFORM LISTA-PEDIDO THRU FIM-LISTA-PEDIDO
ANSI 85:
EVALUATE OPCAO WHEN 1 PERFORM WHEN 2 PERFORM WHEN 3 PERFORM WHEN 4 PERFORM END-EVALUATE EVALUATE TRUE WHEN OPCAO WHEN OPCAO WHEN OPCAO AND TESTE = = = = LISTA-PEDIDO LISTA-NOTA LISTA-CLIENTE LISTA-PRODUTO THRU THRU THRU THRU FIM-LISTA-PEDIDO FIM-LISTA-NOTA FIM-LISTA-CLIENTE FIM-LISTA-PRODUTO
1 PERFORM LISTA-PEDIDO THRU FIM-LISTA-PEDIDO 2 PERFORM LISTA-NOTA THRU FIM-LISTA-NOTA 3 OK PERFORM LISTA-CLIENTE THRU FIM-LISTA-CLIENTE WHEN OPCAO = 4 PERFORM LISTA-PRODUTO THRU FIM-LISTA-PRODUTO WHEN OPCAO = 5 CONTINUE WHEN OTHER DISPLAY Opo invlida LINE 23 COLUMN 03 END-EVALUATE
4 - INITIALIZE
Elimina as freqentes rotinas de inicializao de registros. Exemplo: rea a inicializar:
01 REGISTRO. 05 CODIGO 05 DESCRICAO 05 PRECO 05 PRECO-EM-DOLAR 05 ESTOQUES-NO-ANO. 10 QUANTIDADE PIC PIC PIC PIC 9(006). X(030). 9(007)V99 COMP-3. 9(005)V99.
ANSI 74:
MOVE 0 TO CODIGO PRECO PRECO-EM-DOLAR QUANTIDADE (1) QUANTIDADE (2) QUANTIDADE (3) QUANTIDADE (4) QUANTIDADE (5) QUANTIDADE (6) QUANTIDADE (7) QUANTIDADE (8) QUANTIDADE (9) QUANTIDADE (10) QUANTIDADE (11) QUANTIDADE (12) MOVE SPACES TO DESCRICAO
ANSI 85:
INITIALIZE REGISTRO.
Consideraes X/Open
Os comandos X/Open no so homologados pelo ANSI, contudo funcionam plenamente em todos os compiladores COBOL para arquiteturas abertas, pois a X/Open Company Limited uma entidade privada de padronizao do UNIX e suas especificaes so implementadas por todas as companhias a produtoras de compiladores COBOL para UNIX que tambm os produzem para DOS, Windows e OS/2, logo, podem ser utilizados com um excelente nvel de portabilidade.
1 - GOBACK
Serve de sinnimo aos comandos EXIT PROGRAM e STOP RUN. Este comando vlido como: EXIT PROGRAM quando executado em um sub-progaram. STOP RUN quando executado por um programa principal.
FILE STATUS FD 01
TITULOS VALUE OF FILE-ID LB-TITULOS. TITULOS-REG. 05 TITULOS-CHAVE. 10 TITULOS-DUPLICATA COMP-3 PIC 9(005). 10 TITULOS-SERIE PIC X(002). 05 TITULOS-VALOR PIC S9(009)V99. 05 TITULOS-VENCIMENTO COMP-3 PIC 9(008). 05 TITULOS-BANCO PIC 9(003).
MOVE 237 TO TITULOS-BANCO MOVE 19961006 TO TITULOS-VENCIMENTO START TITULOS KEY NOT LESS TITULOS-BANCO-VENCIMENTO.
3 - Ambiente multi-usurio
Existem trs tipos de tratamentos para travamento de arquivos ou registros em ambiente multi-usurio, AUTOMATIC, EXCLUSIVE e MANUAL. Formato genrico:
SELECT FILENAME ASSIGN ORGANIZATION RECORD KEY LOCK MODE FILE STATUS TO IS IS IS DISK INDEXED FILENAME-CHAVE [AUTOMATIC|EXCLUSIVE|MANUAL] WITH [LOCK ON MULTIPLE RECORD(S)|ROLLBACK] IS FS-FILENAME.
AUTOMATIC: Opo default para arquivos abertos como I-O, todo o registro lido ser travado.
EXCLUSIVE:
Opo default para arquivos abertos como OUTPUT, o arquivo inteiro ser de uso exclusivo para o primeiro programa que o abrir.
MANUAL:
O registro ser travado apenas quando necessrio atravs da clusula WITH LOCK do comando READ.
LOCK ON MULTIPLE RECORD(S):
O registro continuara travado mesmo quando outro for lido, o comando UNLOCK FileName destravar todos os registros ao mesmo tempo.
ROLLBACK:
Permite processamento transacional para o arquivo, os pontos de integridade ou fim de transao, podem ser marcados com o comando COMMIT, caso o sistema caia entre um COMMIT e outro, todas as alteraes no arquivo sero desconsideradas, para o uso efetivo deste recurso, ser necessria a instalao de produtos de apoio como o ACUSERVER para o ACUCOBOL, o FILESHARE para o MICRO FOCUS COBOL e o RM/Info Express para o RM/COBOL-85,.
FILE STATUS:
Se durante a abertura ou leitura o arquivo ou registro estiver travado, o FILE STATUS retornar o cdigo correspondente.
4 - SCREEN SECTION
A SCREEN SECTION uma excelente opo para o tratamento de telas, ao utiliza-la evitamos que a PROCEDURE DIVISION fique repleta de endereos de DISPLAY e ACCEPT que aumentam os custos de manuteno pois dificultam a modificao da apresentao. Estudaremos a definio de telas no mdulo de utilitrios do COBOLware, utilitrio CTAC (Codificador de Telas de Aplicao para COBOL).