Curso de COBOL - Aula 6
Notas da aula de 20.12.2008 (Aula #6) do Curso de COBOL da
Escola Alcides Maya com o Professor Roberto Cabral de Mello Borges
Comandos de tela e teclado
 DISPLAY
 ACCEPT
 “SCREEN SECTION”
---------------------------
Sintaxe do DISPLAY:
DISPLAY (posição) (ERASE) (, variável, string) UPON mnemonico
Posição: (linha, coluna)
* ERASE +-= clearscreen 
Exemplos de DISPLAY:
 DISPLAY A, B, C.
 DISPLAY “X = ”, X.
 DISPLAY (2, 10) A
 DISPLAY (LIN, COL) B
 DISPLAY ERASE
 DISPLAY (LIN, 12) UPON TELA1
01 DATAS.
03 DATA-1.
05 DIA PIC 99.
05 MES PIC 99.
05 ANO PIC 99.
03 DATA-2.
05 DIAS PIC 999.
05 ANO-2 PIC 99.
03 HORARIO.
05 HORA PIC 99.
05 MINUTO PIC 99.
05 SEGUNDOS PIC 9999.
* Alternativa para os segundos sem centésimos:
05 SEGUNDOS PIC 99.
05 FILLER PIC 99.
03 TECLA PIC 99.
* 00-ENTERdoTecladoAlfabético, 01-ESC, 02a11-F1aF10
* (só estas são reconhecidas como dois dígitos)
77 CIDADE PIC X(25) VALUE “PORTO ALEGRE”.
77 CIDADE PIC XX VALUE “RS”.
---------------------------
Sintaxe do ACCEPT:
ACCEPT variável FROM (DATE, DAY, TIME, ESCAPE KEY).
ACCEPT (linha, coluna) variável.
ACCEPT (linha, coluna) variável WITH opção.
Opção: (PROMPT, UPDATE, AUTO-SKIP, SPACE-FILL, ZERO-FILL,
TRAILING SIGN, LENGTH-CHECK, BEEP, LEFT-JUSTIFIED,
RIGHT-JUSTIFIED, EMPTY-CHECK, NO-ECHO)
Exemplos do ACCEPT:
 ACCEPT X.
 ACCEPT DATA-1 FROM DATE. * DATE tem 6 dígitos
 ACCEPT DATA-2 FROM DAY. * DAY tem 6 dígitos
 ACCEPT HORARIO FROM TIME. * TIME tem 8 dígitos
 ACCEPT TECLA FROM ESCAPE KEY.

 ACCEPT (8, 5) x.
 ACCEPT (LIN, 9) Y.
 ACCEPT (10, COL) Z.

 ACCEPT (3, 5) NOME WITH PROMPT.
 ACCEPT (3, 50) DATA-NASC WITH PROMPT.
 ACCEPT (8, 1) CIDADE WITH UPDATE.
* traz da variável o valor atual (sugere um default) 
 ACCEPT (2, 4) CEP WITH AUTO-SKIP.
* salta direto para o próximo campo quando se termina de preencher o campo.
 ACCEPT (LIN, 4) NOME WITH SPACE-FILL.
* preenche com espaços (SPACE-FILL) ou zeros (ZERO-FILL) as posições não preenchidas
 ACCEPT (LIN, 48) FONE WITH SPACE-FILL.
* padrão para campos PIC A ou PIC X é preencher à direita, e para PIC 9, à esquerda.
 ACCEPT (LIN, 60) VALOR WITH ZERO-FILL.
 ACCEPT (LIN, 6) DATA-NASC WITH LEFT-JUSTIFY.
 ACCEPT (LIN, 20) DATA-ADM WITH RIGHT-JUSTIFY.
 ACCEPT (6, 6) VALOR WITH TRAILING-SIGN.
* “trailing” o que vem atrás (trailer) :-P  sinal vai depois (à direita) do número.
 ACCEPT (12, 15) CPF WITH LENGTH-CHECK.
* verifica o comprimento do campo (cursor fica parado no campo) ignora enter e tab.
 ACCEPT (20, 10) RESPOSTA WITH BEP
* Faz soar o “BEEP” da máquina.
 ACCEPT (4, 20) SENHA WITH NO-ECHO.
* ***** (não exibe o caractere digitado.)
 ACCEPT (LIN, 12) E-MAIL WITH EMPTY-CHECK.
* não permite sair de campos obrigatórios que estejam vazios.
---------------------------
“SCREEN SECTION”
DATA DIVISION. * tem que ser nesta ordem:
FILE SECTION.
WORKING-STORAGE SECTION.
SCREEN SECTION.
REPORT SECTION.
Sintaxe da SCREEN SECTION:
01 nome-tela (AUTO) (SECURE).
* AUTO: salta automaticamente para o próximo campo ao encerrar um campo.
* SECURE: (é o NO-ECHO) preenche todos os campos digitados com “*”.
* se a opção vai no nível 01, vale para todos os subníveis!
02 a 49 (BLANK SCREEN, LINE (PLUS #), COLUMN (PLUS #),
BLANK LINE, BELL (* BEEP), (HIGHLIGHT, BLINK),
VALUE string, PIC string,
FROM campo-1, TO campo-2, USING campo-3,
BLANK WHEN ZERO, JUSTIFIED RIGHT, AUTO, SECURE)
SCREEN SECTION.
01 LIMPA-TELA.
03 LINHA BLANK SCREEN.
01 TELA-CADASTRO.
03 LINE 2.
05 COLUMN 1 PIC X(6) VALUE “NOME: “.
05 COLUMN 7 PIC A(36) FROM NOME.
* só apresenta a informação na tela (tem que ser por campo).
05 COLUMN 7 PIC A(36) TO NOME.
* só captura as informações digitadas (tem que ser por campo – tem uns que não pode mudar!).
05 COLUMN 7 PIC A(36) USING NOME.
* apresenta e permite alterar (tem que ser por campo)! 
05 COLUMN 47 PIC X(11) VALUE “DATA-NASC”.
05 COLUMN 58 PIC 99/99/99 USING DATA-N.
05 COLUMN 68 PIC X(6) VALUE “SEXO”.
05 COLUMN 75 PIC A USING SEXO.
03 SEXO-EXTENSO.
05 FILLER PIC X(18) VALUE “MASCULINO
- “FEMININO
- “”.
03 SEXO-RED REDEFINES SEXO-EXTENSO.
05 TAB-SEXO PIC X(9) OCCURS 2 TIMES.
03 LINE 4. * linha 3 ficou “em branco” (pulamos).
05 COLUMN 1 PIC X(4) VALUE “RUA”.
05 COLUMN 5 PIC X(25) USING RUA.
05 COLUMN 32 PIC X(10) VALUE “NUM/COMPL”.
05 COLUMN 42 PIC X(10) USING COMPLEMENTO.
05 COLUMN 54 PIC X(4) VALUE “CEP”.
* cuidar para que o conteúdo dos últimos campos não passe da coluna 80
05 COLUMN 58 PIC 9(8) USING CEP HIGHLIGHT.
* HIGHLIGHT = negrito (ou HIGHLIGHT, ou BLINK) (são excludentes)
03 LINE 6. * linha 5 ficou “em branco” (pulamos).
05 COLUMN 1 PIC X(6) VALUE “FONE”.
05 COLUMN 7 PIC X(11) USING FONE JUSTIFIED RIGHT.
* se digitar sem o DDD, ficam vazias essas posições, não as últimas.
05 COLUMN 20 PIC X(7) VALUE “E-MAIL”.
05 COLUMN 27 PIC X(50) USING E-MAIL UNDERLINE.
* campo E-MAIL aparece sublinhado! (e preserva o underscore)
03 LINE 7.
05 COLUMN 1 PIC X(6) VALUE “SENHA”.
05 COLUMN 7 PIC X(12) USING SENHA SECURE.
05 COLUMN 20 PIC X(11) VALUE “NUM.FILHOS”.
05 COLUMN 32 PIC 99 USING FILHOS BLANK WHEN ZEROS.
* seria deselegante o cadastro dizer “00 filhos”
E agora, a parte mais legal!  Como fazer essa tela aparecer “na tela”?
PROCEDURE DIVISION.
DISPLAY LIMPA-TELA.
LOOP.
DISPLAY TELA-CADASTRO.
ACCEPT TELA-CADASTRO.
READ ...
---------------------------
Acesso a arquivos
 Discos: seqüencial, randômico, indexado
 Outros meios: só seqüencial
SELECT DISCO-1 ASSIGN TO DISK
ORGANIZATION IS (SEQUENTIAL, INDEXED, RELATIVE)
ACCESS MODE (SEQUENTIAL, RANDOM, DYNAMIC)
(RELATIVE KEY, RECORD KEY) chave-acesso.
* Chave-acesso é um campo do arquivo que deve ser único!
* Chave serve para READ e WRITE (“file status”)
 READ DISCO-1 INVALID KEY comando.
 READ NEXT DISCO-1 AT END comando.
 NEXT: acesso sequencial num arquivo randômico ou indexado.
Curiosidades:
 Tamanho máximo dos textos é de 1920 posições (24 linhas x 80 colunas) (80 colunas do cartão perfurado!)
 Eleições dos Estados Unidos em 2008 usaram cartões em dois estados.
 Proporções: telas-padrão: 4:3 (+-= 1,33); wide-screen: 16:9 (+-= 1,77), + próxima da proporção de ouro (1,66).
 Data do COBOL em formato “gregoriano” (usual - DATE): 20/12/08 ou formato “Juliano” (DAY) 355/08 (economiza um byte :-P e facilita operações)
 Enter do teclado numérico no mac tem função diferente do Enter do teclado alfabético – no Excel, por exemplo, entra a variável sem mudar de célula.
 PROMPT: marcador de inserção: COBOL pode marcar o campo a receber dados com “....” ou “---“ marcando quantos caracteres ou dígitos tem!
 O Hotmail não presta, nem o Terra, pq tem muuuuuuito spam, e há servidores que já deletam direto.
 Número da agência de qualquer banco tem 4 dígitos por padrão do Banco Central. Número da conta geralmente tem 6 dígitos.
 Senhas de contas em bancos têm dígitos, e outra senha tem letras. Geralmente a tela para a de letras não é amigável: embaralha letras e os números. :-P
 Padrão dos interruptores é Liga pra cima, Desliga para baixo (nos verticais); Liga para dentro, Desliga para fora (na direção da porta) (nos horizontais).
 “Síndrome de Windows”: programas que fazem perguntas bobas (“Tem certeza?”) para atividades que têm volta. (deveria perguntar só para as irreversíveis)
 Fontes de letras Verdana e Geórgia (as da Microsoft) fazem o sublinhado (underline) passar POR CIMA (esconder) o underscore! 