apostila de natural2

64
1. Introdução....................................................3 2. Ambiente Natural..............................................4 2.1 Objetos Natural...............................................4 2.2 Menu Principal................................................5 2.3 Menu Para Funções de Desenvolvimento..........................6 2.3.1 Editor de programas, subprogramas e outros..................7 2.3.4 Terceira tela do Editor de mapas...........................10 2.3.5 Editor de Data Áreas.......................................11 2.4 Alguns Comandos do Ambiente Natural..........................11 2.5 Recorrendo a Ajuda (HELP)....................................12 2.5.1 Qual o texto de uma mensagem de erro de execução ?.........12 2.5.2 Qual a sintaxe de uma instrução Natural ?..................12 2.6 Recuperando os últimos Comandos (LAST).......................13 2.6.1 Qual o último comando que usei ?...........................13 2.6.2 Quais os últimos comandos que usei ?.......................13 2.7 Recuperando os parâmetros do meu ambiente (GLOBALS)..........13 2.8 Recuperando os objetos da biblioteca (LIST)..................14 2.8.1 Quais os objetos da biblioteca ?...........................14 2.8.2 Quais os objetos de um determinado tipo na biblioteca ?....14 2.8.3 Quais os objetos de um determinado tipo iniciados com a letra “S” na biblioteca ?...............................................15 2.9 Recuperando os objetos que possuem uma “string” (SCAN).......15 2.10 Limpando a área do editor Natural..........................16 2.11 Editando um objeto Natural (EDIT).........................16 2.12 Renomeando um objeto Natural (RENAME)....................17 2.13 Gerando APENAS o fonte de um objeto do editor Natural (EDIT) 17 2.14 Gerando o fonte e o executável de um objeto Natural (STOW) 17 2.15 Verificando a sintaxe de um programa Natural (CHECK)......18 2.16 Estruturando um objeto no editor Natural (STRUCT)........18 2.17 Conhecendo o utilitário de mensagens de erro (SYSERR).....19 2.18 Terminando uma sessão Natural (FIN).......................19 2.19 Mudando de biblioteca (LOGON).............................19 2.20 Rodando um programa a partir do seu executável (EXECUTE). .19 2.21 Rodando um programa a partir do seu fonte (RUN)............19 3 Programação Natural............................................20 3.1 Modos de programação.........................................20 3.2 Variáveis de usuário.........................................20 3.2.1 Nome....................................................... 20 3.2.2 Formato.................................................... 20 3.2.3 Definição..................................................21 3.2.4 Redefinição................................................21 3.2.5 Inicialização (INIT)....................................21 3.3 Manipulação de variáveis.....................................22 3.3.1 Limpando (RESET).........................................22 3.3.2 Movendo Conteúdo (MOVE)...................................22

Upload: alesramos

Post on 05-Jul-2015

621 views

Category:

Documents


85 download

TRANSCRIPT

Page 1: Apostila de Natural2

1. Introdução.................................................................................................................................32. Ambiente Natural.....................................................................................................................42.1 Objetos Natural........................................................................................................................42.2 Menu Principal..........................................................................................................................52.3 Menu Para Funções de Desenvolvimento........................................................................62.3.1 Editor de programas, subprogramas e outros............................................................72.3.4 Terceira tela do Editor de mapas..................................................................................102.3.5 Editor de Data Áreas.........................................................................................................112.4 Alguns Comandos do Ambiente Natural.........................................................................112.5 Recorrendo a Ajuda (HELP)................................................................................................122.5.1 Qual o texto de uma mensagem de erro de execução ?.........................................122.5.2 Qual a sintaxe de uma instrução Natural ?................................................................122.6 Recuperando os últimos Comandos (LAST).................................................................132.6.1 Qual o último comando que usei ?...............................................................................132.6.2 Quais os últimos comandos que usei ?......................................................................132.7 Recuperando os parâmetros do meu ambiente (GLOBALS).....................................132.8 Recuperando os objetos da biblioteca (LIST)...............................................................142.8.1 Quais os objetos da biblioteca ?...................................................................................142.8.2 Quais os objetos de um determinado tipo na biblioteca ?....................................142.8.3 Quais os objetos de um determinado tipo iniciados com a letra “S” na biblioteca ?..........................................................................................................................................152.9 Recuperando os objetos que possuem uma “string” (SCAN)..................................152.10 Limpando a área do editor Natural...............................................................................162.11 Editando um objeto Natural (EDIT)..............................................................................162.12 Renomeando um objeto Natural (RENAME)............................................................172.13 Gerando APENAS o fonte de um objeto do editor Natural (EDIT).....................172.14 Gerando o fonte e o executável de um objeto Natural (STOW)..........................172.15 Verificando a sintaxe de um programa Natural (CHECK)......................................182.16 Estruturando um objeto no editor Natural (STRUCT)...........................................182.17 Conhecendo o utilitário de mensagens de erro (SYSERR)...................................192.18 Terminando uma sessão Natural (FIN).......................................................................192.19 Mudando de biblioteca (LOGON).................................................................................192.20 Rodando um programa a partir do seu executável (EXECUTE)..........................192.21 Rodando um programa a partir do seu fonte (RUN)................................................193 Programação Natural................................................................................................................203.1 Modos de programação.......................................................................................................203.2 Variáveis de usuário.............................................................................................................203.2.1 Nome.....................................................................................................................................203.2.2 Formato................................................................................................................................203.2.3 Definição..............................................................................................................................213.2.4 Redefinição.........................................................................................................................213.2.5 Inicialização (INIT)..........................................................................................................213.3 Manipulação de variáveis....................................................................................................223.3.1 Limpando (RESET)..........................................................................................................223.3.2 Movendo Conteúdo (MOVE)..........................................................................................223.3.3 Operações Matemáticas..................................................................................................233.3.4 Juntando Variáveis “String’s”.......................................................................................243.3.5 Alterando um caracter em uma variável ou pesquisando um caracter em uma variável 243.4 Testes Condicionais.............................................................................................................253.4.1 A instrução DECIDE ON...................................................................................................253.4.2 A instrução IF.....................................................................................................................253.4.3 Tratamento de Erro (ON ERROR)..................................................................................263.5 Trabalhando com Tela..........................................................................................................263.5.1 Chamando o Mapa (tela)..................................................................................................263.5.2 Apresentando no Mapa uma mensagem.....................................................................26

Page 2: Apostila de Natural2

Natural 2

3.5.3 Re-executando o Mapa.....................................................................................................273.5.4 Indicando o uso de PFs...................................................................................................273.5.5 Testando a PF pressionada............................................................................................273.5.6 Usando a Variável de controle.......................................................................................283.6 Processamento com Loop (laço)......................................................................................283.6.1 A instrução FOR.................................................................................................................283.6.2 A instrução REPEAT.........................................................................................................293.6.3 A instrução ESCAPE.........................................................................................................303.7 Apresentação de informações...........................................................................................303.8 Trabalhando com Arquivo Adabas...................................................................................343.8.1 Leitura de Registros.........................................................................................................343.8.1.1 A instrução Read...........................................................................................................353.8.1.1.1 READ PHYSICAL...........................................................................................................353.8.1.1.2 READ LOGICAL.............................................................................................................363.8.1.2 A instrução HISTOGRAM.............................................................................................363.8.1.3 A instrução FIND............................................................................................................373.8.1.3.1 FIND <local> WITH <condição lógica> (gera loop)...............................................383.8.1.3.2 FIND NUMBER <local> WITH <condição lógica> (não gera loop).....................393.8.1.3.3 FIND NUMBER <local> WITH <condição lógica> RETAIN AS <lista>.............39(não gera loop).....................................................................................................................................393.8.1.3.4 FIND <local> WITH <lista> (gera loop)....................................................................393.8.1.4 A instrução GET............................................................................................................403.8.2 Atualização de Registros.................................................................................................403.8.2.1 A instrução UPDATE...................................................................................................403.8.2.2 A instrução DELETE....................................................................................................413.8.2.3 A instrução STORE......................................................................................................413.8.2.4 As instruções END TRANSACTION e BACKOUT TRANSACTION...................413.8.2.5 A instrução RETRY.......................................................................................................423.9 Trabalhando com arquivos WORK...................................................................................423.9.1 Lendo arquivo work..........................................................................................................433.9.2 Gravando arquivo work...................................................................................................433.10 Usando Subrotina Interna...............................................................................................433.11 Usando Subprograma......................................................................................................444 Exemplo de Programa com Consulta Fonética.................................................................44

2

Page 3: Apostila de Natural2

Natural 2

1. Introdução

O objetivo deste curso é ensinar aos alunos conhecimentos básicos do ambiente de desenvolvimento Natural / Adabas e da linguagem de programação NATURAL 2.

Neste curso o aluno aprenderá como utilizar cada um dos editores do NATURAL 2, bem como seus comandos associados, e os comandos de sistema. Ao concluir este curso o aluno estará apto a desenvolver programas na linguagem NATURAL e acessar banco de dados ADABAS.

3

Page 4: Apostila de Natural2

Natural 2

2. Ambiente Natural

2.1 Objetos Natural

Os seguintes tipos de objetos podem ser criados dentro de uma biblioteca Natural:

P Program G Global Data Area N Subprogram L Local Data Area S Subroutine A Parameter Data Area H Helproutine Z Recording C Copycode D Description T Text 4 Class M Map

Dos tipos de objetos acima relacionados, não iremos trabalhar com alguns, que poderão ser vistos posteriormente em outros cursos.

Há, basicamente, três editores para a manipulação destes tipos de objetos: um para as áreas de dados (Data Area); um para Map e HelpMap; e o último para os demais objetos (Copycode, Description, Helproutine, Program, Subprogram e Subroutine).

A letra que está a esquerda de cada tipo de objeto no quadro acima, é utilizada no ambiente Natural para representar o tipo de objeto.

4

Page 5: Apostila de Natural2

Natural 2

2.2 Menu Principal

16:33:28 ***** NATURAL ***** 2001-01-15 User P007779 - Main Menu - Library SYSTEM Function _ Development Functions _ Development Environment Settings _ Maintenance and Transfer Utilities _ Debugging and Monitoring Utilities _ Example Libraries _ Other Products _ Help _ Exit NATURAL Session Logon accepted to library SYSTEM. Command = Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10—PF11—PF12--- Help Exit Canc

Tela com o menu principal do ambiente de desenvolvimento Natural

Neste curso vamos trabalhar apenas a primeira opção apresentada neste menu, a opção “Development Funcions” (Funções de Desenvolvimento).

Para selecionar esta opção, basta posicionar o cursor no traço a esquerda da mesma e teclar “enter”.

Nesta tela pode ser selecionada, opcionalmente, a biblioteca onde estão os objetos que vamos trabalhar. Para isso é necessário digitar o nome da biblioteca, à direita da palavra “Library”, em cima da palavra “SYSTEM”, no canto superior direito da tela.

5

Page 6: Apostila de Natural2

Natural 2

2.3 Menu Para Funções de Desenvolvimento

17:23:53 ***** NATURAL ***** 2001-01-15 User P007779 - Development Functions - Library SYSTEM Mode Structured Work area empty Code Function C Create Object E Edit Object R Rename Object D Delete Object X Execute Program L List Object(s) S List Subroutines Used ? Help . Exit Code .. _ Type .. _ Name .. ________________________________ Command ===> Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--- Help Menu Exit Canc

Esta tela permite trabalhar (criar, editar, excluir, etc...) programas, mapas e outros objetos do Natural.

6

Page 7: Apostila de Natural2

Natural 2

2.3.1 Editor de programas, subprogramas e outros

> > + Program SAEPG100 Lib SINARM Top ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 ** ------------------------------------------------------------------ ** 0020 ** PGM. QUE CHAMA O MENU DE MANUTENCAO DO SISTEMA - 16/12/91 - ** 0030 ** ------------------------------------------------------------------ ** 0040 DEFINE DATA 0050 GLOBAL USING SAEGL001 0060 LOCAL 0070 1 #DADOS-CALL 0080 2 #COD-ORGAO-P (N05) 0090 2 #MAT-ALT-P (N07) 0100 2 #AUT-ALTERA (A01) 0110 2 #DADOS-P 0120 3 #ISN-PROP-P (P8) 0130 3 #ISN-ARMA-P (P8) 0140 3 #COD-ARMA-P (P9) 0150 3 #COD-VEND-P (N09) 0160 3 #COD-PROP-P (N09) 0170 3 #TIPO-PROP-P (A01) 0180 3 #GUARDA-IDENT (A15) 0190 3 #GUARDA-NOME (A50) 0200 3 #GUARDA-DTNASC (N08) ....+....1....+....2....+....3....+....4....+....5....+... S 185 L 1

Alguns comandos usados na linha do editor:

.In para criar “n” linhas em branco abaixo da linha onde está o comando;

.I para criar dez linhas em branco abaixo da linha onde está o comando

.I(<nome do objeto>) para incluir outro objeto dentro do editor; .X para marcar o início de um bloco (conjunto) de linhas; .y para marcar o final de um bloco (conjunto) de linhas; .C para copiar (duplicar) uma linha; .CX para copiar a linha marcada com X, para a linha abaixo da

linha deste comando .CX-Y para copiar o bloco de linhas marcados por X e Y para abaixo

da linha deste comando; .D elimina uma linha; .DX elimina a linha marcada com X; .DX-Y elimina o bloco de linhas marcado por X e Y; .P posiciona a linha onde está este comando como a primeira

linha da tela do editor; .L desfaz as alterações da linha onde está este comando; .MX move a linha marcada com X para a linha abaixo da que está

este comando;

7

Page 8: Apostila de Natural2

Natural 2

.MX-Y move o bloco de linhas marcado por X e Y para a linha abaixo da que está este comando.

Alguns comandos usados na linha de comandos do editor:

TOP posiciona no início do objeto que está sendo editado; BOTTOM posiciona no final do objeto que está sendo editado; LET desfaz as alterações em curso, as não confirmadas com

ENTER, da página do editor; GLOBALS SM=ON/OFF permite alterar o modo de programação. Se SM

igual a ON, é “structured mode”, caso contrário é “reporting mode”; SET TYPE <tipo-objeto> permite alterar o tipo do objeto;

2.3.2 Menu do editor de mapas

16:54:15 ***** NATURAL MAP EDITOR ***** 2001-01-16 User P007779 - Edit Map - Library SINARM Code Function ---- --------------------------------- D Field and Variable Definitions E Edit Map I Initialize new Map H Initialize a new Help Map M Maintenance of Profiles & Devices S Save Map T Test Map W Stow Map ? Help . Exit Code .. E Name .. SAETL170 Profile .. SYSPROF_ Command ===> Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--- Help Exit Test Edit

a letra “E” ao lado da opção Code significa que vamos editar um mapa já existente.

O mapa a ser editado é o SAETL170.

8

Page 9: Apostila de Natural2

Natural 2

2.3.3 Segunda tela do editor de mapas

15:25:25 Define Map Settings for MAP 2001-01-19 Delimiters Format Context ----------------- --------------------------- -------------------------- Cls Att CD Del Page Size ...... 23 Device Check .... ________ T D BLANK Line Size ...... 79 WRITE Statement _ T I ? Column Shift ... 0 (0/1) INPUT Statement X A D _ Layout ......... ________ Help ____________________ A I ) dynamic ....... N (Y/N) as field default N (Y/N) A N ¬ Zero Print ..... N (Y/N) M D & Case Default ... UC (UC/LC) M I : Manual Skip .... N (Y/N) Automatic Rule Rank 1 O D + Decimal Char ... , Profile Name .... SYSPROF O I ( Standard Keys .. N (Y/N) Justification .. L (L/R) Filler Characters Print Mode ..... __ ------------------------ Optional, Partial .... Control Var .... ________ Required, Partial .... Optional, Complete ... Required, Complete ... Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--- Help Exit Let

Na Segunda tela, que só é apresentada na criação de um mapa ou se for chamada na terceira tela (opção PF2 Mset), definimos as características do mapa: Quantidade de linhas (Page Size), que pode variar de 1 a 255; Quantidade de colunas (Line Size), que pode variar de 1 a 255; Como o mapa será utilizado – tela ou relatório; e outras informações.

9

Page 10: Apostila de Natural2

Natural 2

2.3.4 Terceira tela do Editor de mapas

Ob _ Ob D CLS ATT DEL CLS ATT DEL . . T D Blnk T I ? . . A D _ A I ) . . A N ¬ M D & . . M I : O D + . . O I ( . . 001 --010---+----+----+---030---+----+----+---050---+----+----+---070---+---- +XXXXXXXXXX¬X ?SINARM ?- ?SISTEMA?NACIONAL?DE?ARMAS +XXXXXXXX +XXXXXXXX SAETL170 ----------------------------(XXXXXXXXXXXXXXXXXXXXXXXXX ----------------------- RAZAO SOCIAL:&XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX C.G.C. :&00000000000000 +XXXXXX &XXXXXX ENDERECO ::XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX BAIRRO ::XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX MUNICIPIO ::XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX U.F.::XX +99999 C.E.P. ::00000000 Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--- Help Mset Exit Test Edit -- - + Full < > Let

Os comandos que podem ser utilizados nas linhas são:

..D para eliminar uma linha; ..Dn para eliminar “n” linhas; ..I para incluir uma linha; ..In para incluir “n” linhas; ..C para centralizar o conteúdo de uma linha; ..R para copiar (duplicar) uma linha; ..Rn para copiar (repetir) uma linha “n” vezes; ..P para definir a regra de validação das PFs;

Os comandos que podem ser utilizados para campos e textos são:

.D para eliminar um campo ou texto; .E para editar um campo; .M para mover um campo ou texto para o local onde está o

cursor; .A para definir um campo como matriz (array); .P para ver ou definir a regra para o campo.

10

Page 11: Apostila de Natural2

Natural 2

2.3.5 Editor de Data Áreas

Local SAE-JURI Library SINARM DBID 200 FNR 9 Command > + I T L Name F Leng Index/Init/EM/Name/Comment Top - -------------------------------- - ---- --------------------------------- V 1 SAE-JURI SAE-JURIDICA 2 COD-PROPRIETARIO P 9,0 2 CATEGORIA-PJ N 1,0 G 2 CGC 3 CGC1 P 8,0 3 CGC2 P 4,0 3 CGC3 P 2,0 2 SFPC A 6 G 2 RAZAO 3 RAZAO1 A 20 3 RAZAO2 A 30 2 ENDERECO A 40 2 BAIRRO A 30 2 CIDADE P 5,0 2 UF-END A 2 2 CEP P 8,0 2 TEL A 13 ----------------------------------------------------------------- S 24 L 1

neste exemplo o editor de data áreas está mostrando a Local SAE-JURI

2.4 Alguns Comandos do Ambiente Natural

São comandos que utilizamos para poder melhor trabalhar dentro de um ambiente Natural. Podemos dividir estes comandos em: de ajuda (HELP,LAST); de conhecimento do ambiente (GLOBALS, SYSPROF, SYSPROD); de recuperação de informação dos objetos do ambiente (LIST, SCAN); de manutenção dos objetos do ambiente (CATALOG, CHECK, CLEAR, CREATE, DELETE, EDIT, PURGE, READ, RENAME, RENUMBER, SAVE, SCRATCH, STOW, STRUCT, SYSERR,UNCATALOG); de mudança/saída do ambiente (FIN, LOGOFF, LOGON); de processamento/execução de objetos (EXECUTE, RUN).

Dos comandos acima apresentados iremos conhecer alguns, os de uso mais freqüente. Para os demais encontraremos maiores detalhes no Natural Reference Manual.

11

Page 12: Apostila de Natural2

Natural 2

2.5 Recorrendo a Ajuda (HELP)

2.5.1 Qual o texto de uma mensagem de erro de execução ?Para recuperar o texto de uma mensagem basta informar HELP n

(onde n é o número da mensagem)

Exemplo: HELP 301715:00:14 ***** NATURAL HELP UTILITY ***** 2001-01-17 Library SINARM - NATURAL System Message NAT3021 - Page 1 An invalid CID value was detected. DB/FNR :1:/:2: Tx *** Short Text *** An invalid CID value was detected. Ex *** Explanation *** A time-out occurred because a command ID was not found. This program error can be caused by: - CMD ID being assigned to another Ln command (n = 1,...9); - CMD ID being assigned to another file; - CMD ID not found for an S8 command. More ... Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--- Help Menu Exit Print + Canc

2.5.2 Qual a sintaxe de uma instrução Natural ?Para recuperar a sintaxe de uma instrução Natural basta informar

HELP <instrução>.

Exemplo: HELP IF15:19:47 ***** NATURAL HELP UTILITY ***** 2001-01-17 - IF - Page 1 ------------------------------------------------------------------------------ GENERAL SYNTAX ------------------------------------------------------------------------------ IF logical-condition THEN statement ... ELSE statement ... END-IF

Note: If no action is to be performed if condition met, specify statement IGNORE in THEN clause. ------------------------------------------------------------------------------ More ... Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--- Help Menu Exit - + Canc

12

Page 13: Apostila de Natural2

Natural 2

2.6 Recuperando os últimos Comandos (LAST)

2.6.1 Qual o último comando que usei ?Para recuperar qual foi o seu último comando utilizado no ambiente

Natural informe LAST.

Exemplo: LASTCommand ===> LIST P *

2.6.2 Quais os últimos comandos que usei ?Para recuperar os últimos doze comandos utilizados no ambiente

Natural informe LAST *.

Exemplo: LAST * LAST

_ LOGON P007779 _ LOGON SINARM _ HELP U 100 _ HELP 3017 _ HELP IF _ ? 3021 _ HELP IF _ L P * _ LIST P *

2.7 Recuperando os parâmetros do meu ambiente (GLOBALS)Para recuperar os parâmetros definidos para o seu ambiente Natural,

informe GLOBALS.

Exemplo: GLOBALS 16:09:02 ***** NATURAL GLOBALS COMMAND ***** 2001-01-17 - Session Parameters - (CC) Cond.Prog.Execution ....... OFF (MT) Max.CPU Time ....... ______60 (CF) Term.Control Character .... % (NC) Nat.Sys.Commands ........ OFF (DC) Dec. Character .............. , (OPF) Overw.Prot.Fields ...... ON (DFOUT) Date Format Output ....... S (PD) Page Dataset ............ _50 (DFSTACK) Date Format Stack Cmd .. S (PM) Print Mode ............... RP (DFTITLE) Date Format Title ...... S (PS) Page Size ............... _23 (DU) Dump Generation ......... OFF (REINP) Reinput on Error ..... ON (EJ) Page Eject ................ ON (SA) Sound Alarm ............. OFF (FS) Default Format ............ OFF (SF) Spacing Factor ........... _1 (FCDP) FC on Dyn.Prot.Fields ... ON (SL) Source Line Length ....... 72 (IA) Input Assign ................ = (SM) Structured Mode ......... ON (ID) Input Delimiter ............. / (TS) Translate Sys.Prog ...... OFF (IM) Input Mode .................. F (WH) Wait on Hold ............ OFF (LE) Limit Error ............... OFF (ZD) Zero Division ........... ON (LS) Line Size ................. _80 (ZP) Zero Printing ........... ON (LT) Limit .............. __99999999 Command ===> Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--- Help Print Exit Updat Canc

13

Page 14: Apostila de Natural2

Natural 2

2.8 Recuperando os objetos da biblioteca (LIST)O comando LIST é um dos comandos do Natural que possui uma

grande variedade de opções. Algumas serão apresentadas a seguir.

2.8.1 Quais os objetos da biblioteca ?Para recuperar quais os objetos da biblioteca, informe LIST *.

Exemplo: LIST *16:25:48 ***** NATURAL LIST COMMAND ***** 2001-01-17

User P007779 - LIST Objects in a Library - Library SINARM Cmd Name Type S/C SM Version User ID Date Time --- *________ *__________ *__ * *______ *________ *__________ *________ __ ##ACERTO Program S/C S 2.2.06 FREITAS 1997-12-16 14:45:16 __ AAAPG210 Program S/C S 2.3.03 P007779 1999-08-17 16:26:00 __ AAAPG220 Program S/C S 2.2.06 FREITAS 1997-12-03 15:59:08 __ AAAPG230 Program S/C S 2.2.08 P007779 1999-07-02 16:32:41 __ AAAPG240 Program S/C S 2.2.08 P007779 1999-03-26 12:09:59 __ AAAPG260 Program S/C S 2.2.08 P007779 1999-03-31 09:24:37 __ AAAPG630 Program S/C S 2.2.08 P007779 1999-05-27 13:20:20 __ AAATL145 Map S/C S 2.3.03 P007779 2000-01-03 17:52:23 __ AAATL635 Map S/C S 2.3.03 P007779 2000-01-03 17:50:36 __ AAPARAMT Parameter S/C 2.2.06 IRENE 1995-11-24 14:11:58 __ ANDREWK Program S S 2.3.03 ANDRE 2000-10-06 10:40:52 __ ANT-OCOR Local S/C 2.2.06 IRENE 1995-11-24 14:14:42 __ ANTPG000 Program S/C S 2.2.08 P007779 1999-07-02 15:51:41 14 Objects found Top of List. Command ===> Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--- Help Print Exit -- - + ++ Canc

2.8.2 Quais os objetos de um determinado tipo na biblioteca ?Para recuperar quais os objetos de um determinado tipo na

biblioteca, informe LIST <tipo> * (onde tipo é qualquer um dos tipo de objeto Natural)

Exemplo: LIST P * (lista todos os programas na biblioteca)17:10:55 ***** NATURAL LIST COMMAND ***** 2001-01-17 User P007779 - LIST Objects in a Library - Library SINARM Cmd Name Type S/C SM Version User ID Date Time --- *________ P__________ *__ * *______ *________ *__________ *________ __ ##ACERTO Program S/C S 2.2.06 FREITAS 1997-12-16 14:45:16 __ AAAPG210 Program S/C S 2.3.03 P007779 1999-08-17 16:26:00 __ AAAPG220 Program S/C S 2.2.06 FREITAS 1997-12-03 15:59:08 __ AAAPG230 Program S/C S 2.2.08 P007779 1999-07-02 16:32:41 __ AAAPG240 Program S/C S 2.2.08 P007779 1999-03-26 12:09:59 __ AAAPG260 Program S/C S 2.2.08 P007779 1999-03-31 09:24:37 __ AAAPG630 Program S/C S 2.2.08 P007779 1999-05-27 13:20:20 __ ANDREWK Program S S 2.3.03 ANDRE 2000-10-06 10:40:52 __ ANTPG000 Program S/C S 2.2.08 P007779 1999-07-02 15:51:41 __ ANTPG240 Program S/C S 2.3.03 P007779 1999-08-13 07:56:16 __ AUTORIZ Program S/C S 2.2.06 MAGNO 1997-02-20 15:15:39 __ BACADEL Program S/C S 2.2.06 FREITAS 1997-12-16 10:04:27 __ BACAEMPR Program S/C S 2.2.06 ANDRE 1997-11-13 17:17:08 14 Objects found Top of List. Command ===> Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--- Help Print Exit -- - + ++ Canc

14

Page 15: Apostila de Natural2

Natural 2

2.8.3 Quais os objetos de um determinado tipo iniciados com a letra “S” na biblioteca ?

Para recuperar quais os objetos de um determinado tipo na biblioteca iniciados pela letra “S” ou outra, informe LIST <tipo> S* (onde tipo é qualquer um dos tipo de objeto Natural, e o “S” é a letra com a qual se inicia o nome do objeto).

Exemplo: LIST P S* (lista todos os programas na biblioteca, cujo nome começa com a letra “S”)

17:32:17 ***** NATURAL LIST COMMAND ***** 2001-01-17 User P007779 - LIST Objects in a Library - Library SINARM Cmd Name Type S/C SM Version User ID Date Time --- S*_______ P__________ *__ * *______ *________ *__________ *________ __ SAE-RELA Program S/C S 2.2.08 P007779 1999-06-15 09:49:01 __ SAE-RELB Program S/C S 2.2.08 P007779 1999-06-15 09:49:55 __ SAE-RELC Program S/C S 2.2.08 P007779 1999-06-15 09:50:39 __ SAE-RN Program S/C S 2.2.08 P007804 1998-11-09 15:10:13 __ SAE-RN2 Program S/C S 2.2.08 P007804 1998-11-09 10:21:52 __ SAE-RN3 Program S S 2.2.08 P007804 1998-11-06 15:29:30 __ SAE-RN4 Program S/C S 2.2.08 P007804 1998-11-09 10:41:57 __ SAEARMA Program S/C S 2.2.06 FREITAS 1997-12-16 10:31:27 __ SAEARMA1 Program S/C S 2.2.06 FREITAS 1997-12-16 10:31:56 __ SAEBAT01 Program S S 2.3.03 P007779 1999-08-17 09:21:20 __ SAECGARM Program S/C S 2.2.08 P007779 1999-04-22 10:19:39 __ SAECGAR2 Program S/C S 2.2.08 ANDRE 1998-11-10 11:05:38 __ SAECLEXT Program S/C S 2.2.06 ANDRE 1997-10-08 09:36:46 __ SAECLEX1 Program S/C S 2.2.06 ANDRE 1997-11-10 15:55:53 14 Objects found Top of List. Command ===> Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--- Help Print Exit -- - + ++ Canc

2.9 Recuperando os objetos que possuem uma “string” (SCAN)O SCAN é um programa que permite recuperar/alterar todos os

objetos fonte de uma biblioteca que contenham uma determinada “string” de caracteres.

Para aciona-lo basta informar SCAN na linha de comando, que a seguinte tela será apresentada:

15

Page 16: Apostila de Natural2

Natural 2

17:50:11 ***** NATURAL SCAN COMMAND ***** 2001-01-17 User P007779 - Scan Objects in Libraries - Library SINARM Code Function T Statistic L List modules containing scan value S List found scan values ? Help . Exit Code ........... _ Scan value ..... ________________________________ Replace value .. ________________________________ Library ........ SINARM__ Object name .... _________ Selection list .. N Object type .... ______________ Absolute scan .. N Trace ........... N Command ===> Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--- Help Menu Exit

Observações: Code - deve ser preenchido com “S” para executar o scan. Scan value - é a “string” de caracteres que deseja-se procurar/alterar. Replace value - é a “string” de caracteres que substituirá a “string”

informada no Scan value. Se for apenas uma pesquisa, deixá-lo em branco. Library - é a biblioteca que deseja-se fazer o SCAN, deixar sempre o

conteúdo que aparece. Object name - é o nome de um objeto que deverá ser pesquisado, ou o

prefixo com o qual começam os objetos a serem pesquisados. Absolute scan - deve ser “N” se a “string” a ser pesquisada for parte de uma

palavra, caso contrário, “S”. Trace - para evitar que ocorra o erro 1009 (time-out) informe sempre “s”.

2.10 Limpando a área do editor NaturalPara limpar a área de edição do editor corrente do Natural. Esse

comando pode ser acionado da área de comando do editor ou da linha de comando do Natural.

Exemplo: CLEAR

2.11 Editando um objeto Natural (EDIT)Para editar e/ou criar um objeto Natural, devemos chamar seu editor

específico utilizando o comando EDIT: caso o objeto exista na biblioteca, informe EDIT <nome do objeto>; caso contrário informe EDIT n (onde n é o tipo do objeto a se criado). É um comando que pode ser utilizado na área de comandos do Natural e dentro de um editor.

16

Page 17: Apostila de Natural2

Natural 2

Exemplo:

EDIT M (para criar um novo mapa)

EDIT SAETL100 (Para editar o objeto já existente na biblioteca)

2.12 Renomeando um objeto Natural (RENAME)Para renomear um objeto Natural, quer fonte, quer executável ou

ambos, utilizamos o comando RENAME. A sua sintaxe é o nome do comando seguido pelo nome atual do objeto e o novo nome. É um comando que pode ser utilizado na área de comandos do Natural e dentro de um editor.

Exemplo:

RENAME SAETL100 SAETL200 (Modifica o nome do objeto SAETL100 para SAETL200)

2.13 Gerando APENAS o fonte de um objeto do editor Natural (EDIT)Para salvar (gravar na biblioteca) um objeto que está sendo

trabalhado dentro de uma área de edição, utilizamos o comando SAVE. Se o objeto já existe na biblioteca, basta apenas informar o nome do comando, mas se for um novo objeto deverá ser informado o nome. É um comando que pode ser utilizado tanto na área de comandos do Natural e dentro de um editor.

Exemplo:

SAVE (Salva (grava na biblioteca) um objeto já existente)

SAVE SAEPG100 (Salva (inclui na biblioteca) um objeto novo chamado SAEPG100)

2.14 Gerando o fonte e o executável de um objeto Natural (STOW)O comando STOW verifica se há algum erro de sintaxe no programa

fonte, se não houver, ele salva (grava na biblioteca) o fonte e gera (gravando na biblioteca) o executável de um objeto existente dentro da área de edição do Natural. É um comando que pode ser utilizado na área de comandos Natural e dentro de um editor.

Exemplo:

STOW (Salva (grava na biblioteca) o fonte e o executável de um objeto já existente)

17

Page 18: Apostila de Natural2

Natural 2

2.15 Verificando a sintaxe de um programa Natural (CHECK)O comando CHECK verifica se há algum erro de sintaxe no

programa fonte, se houver, ele mostra uma mensagem dizendo qual o erro ocorrido e número da linha no programa. É um comando que pode ser utilizado na área de comandos Natural e dentro de um editor.

Exemplo: CHECK (Verifica erros de sintaxe no programa)

2.16 Estruturando um objeto no editor Natural (STRUCT)O comando STRUCT estrutura as linhas de um programa fonte

fazendo um alinhamento para comandos que formam laços e para definição de estrutura de dados.

Exemplo: > STRUCT > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL 0030 1 CAMPOS 0040 2 CAMPO-1 (A1) 0050 2 CAMPO-2 (N5) 0060 END-DEFINE 0070 RESET CAMPO-1 0080 REPEAT 0090 IF CAMPO-1 = 'X' 0100 WRITE 'EH IGUAL A X' 0110 ELSE 0120 IF CAMPO-1 = ' ' 0130 WRITE 'ESTAH EM BRANCO' 0140 ELSE 0150 WRITE 'TEM OUTRA COISA' 0160 END-IF 0170 END-IF 0180 END-REPEAT 0190 END 0200 ....+....1....+....2....+....3....+....4....+....5....+... S 19 L 1

> > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL 0030 1 CAMPOS 0040 2 CAMPO-1 (A1) 0050 2 CAMPO-2 (N5) 0060 END-DEFINE 0070 RESET CAMPO-1 0080 REPEAT 0090 IF CAMPO-1 = 'X' 0100 WRITE 'EH IGUAL A X' 0110 ELSE 0120 IF CAMPO-1 = ' ' 0130 WRITE 'ESTAH EM BRANCO' 0140 ELSE 0150 WRITE 'TEM OUTRA COISA' 0160 END-IF 0170 END-IF 0180 END-REPEAT 0190 END ....+....1....+....2....+....3....+....4....+....5....+... S 19 L 1

18

Page 19: Apostila de Natural2

Natural 2

2.17 Conhecendo o utilitário de mensagens de erro (SYSERR)O SYSERR é um utilitário do ambiente Natural para manutenção do

arquivo de mensagens de erro dentro de uma biblioteca. Estas mensagens de erro podem sem emitidas de dentro de um programa.

Exemplo: SYSERR (Na linha de comando do Natural)11:35:23 ***** NATURAL SYSERR UTILITY ***** 2001-01-19 - Menu - Code Function ---- ---------------------------------------- AD Add new messages DE Delete messages DI Display messages MO Modify messages PR Print messages SC Scan in messages SE Select messages from a list TR Translate messages into another language ? Help . Exit ---- ---------------------------------------- Code .. ad Message type .... US Library ......... SINARM__ Message number .. 1___ - 9999 Language codes .. 1________ Please enter code. Command ===> Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--- Help Exit Canc

2.18 Terminando uma sessão Natural (FIN)O FIN é o comando que encerra uma sessão Natural.

Exemplo: FIN (Na linha de comando do Natural)

2.19 Mudando de biblioteca (LOGON)O comando LOGON permite que o usuário mude para outra

biblioteca. É necessário informar o nome da biblioteca, caso não seja informado o Natural assume que a biblioteca é a SYSTEM.

Exemplo: LOGON CURSO (conecta com a biblioteca CURSO)

2.20 Rodando um programa a partir do seu executável (EXECUTE)Para executar um programa a partir de seu executável utilizamos o

comando EXECUTE.

Exemplo: EXECUTE SAEPG001 (Executa o programa SAEPG001)

2.21 Rodando um programa a partir do seu fonte (RUN)Para executar um programa a partir do seu fonte, utilizamos o

comando RUN. Este comando deve ser emitido de dentro do editor de programas, com o programa a ser executado sendo editado.

Exemplo: RUN (Executa o programa que está sendo editado)

19

Page 20: Apostila de Natural2

Natural 2

3 Programação Natural

3.1 Modos de programação

Há duas formas de programar no Natural 2: a primeira, é a forma como o Natural foi criado a partir de sua primeira versão, em “Reporting Mode”; e a Segunda, em ”structured Mode”. A diferença entre os dois modos é que em um, o “Structured Mode”, algumas instruções possuem as respectivas instruções de finalização e uma área de definição de dados obrigatória para definição de variáveis e “views” utilizadas, enquanto no outro, o “Reporting Mode”, pode não existir a área de dados para definição das variáveis, pois qualquer variável pode ser definida em qualquer lugar e quando for necessário, e o agrupamento de instruções dentro de uma outra é feito utilizando as instruções DO/DOEND.

Neste curso vamos abordar somente o “Structured Mode”, pois o “Reporting Mode” já está praticamente em desuso.

3.2 Variáveis de usuário

3.2.1 Nome

O nome de uma variável definida pelo usuário pode Ter de um a 32 caracteres, entre letras, numerais e alguns caracteres especiais: “-“ hífen, “@” arroba, “_” sublinhado, “/” barra, “$” cifrão, “&” e comercial, “#” hash, “+” sinal de mais, somente se for o primeiro caracter.

Como primeiro caracter podemos utilizar um dos seguintes símbolos: qualquer letra; #; + ;&.

3.2.2 Formato

Há vários formatos de variáveis disponíveis no Natural, dos quais, conheceremos alguns. Os demais podem ser conhecidos através de leitura de manuais do Natural.

A - alfanumérico de 1 até 253 posições. B – binário de 1 até 126 posições. C – controle de atributo (veremos no item Trabalhando com tela) D – variável de data. L – variável lógica. N – numérico de 1 a 29 posições. P – numérico compactado de 1 a 29 posições. T – hora

20

Page 21: Apostila de Natural2

Natural 2

3.2.3 DefiniçãoNo modo estruturado, a definição de variáveis pode ser feita dentro

do fonte do objeto ou fora, em uma área de dados. Em ambos os casos, há a necessidade de que ou a variável ou a área de dados seja informada dentro da DEFINE DATA do programa.

> > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL 0030 1 #NUMERO (N05) 0040 1 #NOME (A30) 0050 1 #MATRIZ (B2/1:10) 0060 END-DEFINE ....+....1....+....2....+....3....+....4....+....5....+... S 19 L 1

3.2.4 RedefiniçãoA redefinição permite que uma variável que foi definida com um

formato possa ser redefinida com outro formato. Permite também que uma variável definida com um tamanho, possa ser dividida, criando outras variáveis, que são subdivisão da primeira.

A instrução utilizada para redefinir uma variável é o REDEFINE.

> > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL 0030 1 #NUMERO (N05) 0030 1 REDEFINE #NUMERO 0030 2 #NUM-RED (A05) 0040 1 #NOME (A10) 0040 1 REDEFINE #NOME 0040 2 #LETRA-1 (A01) 0040 2 #LETRA-2 (A01) 0040 2 #LETRA-3 (A01) 0040 2 #LETRA-4 (A01) 0040 2 #LETRA-5 (A01) 0040 2 #LETRA-6 (A01) 0040 2 #LETRA-7 (A01) 0040 2 #LETRA-8 (A01) 0040 2 #LETRA-9 (A01) 0040 2 #LETRA-0 (A01) 0050 1 #MATRIZ (B21:10) 0060 END-DEFINE ....+....1....+....2....+....3....+....4....+....5....+... S 19 L 1

3.2.5 Inicialização (INIT)A inicialização consiste em colocar um conteúdo inicial na variável,

no momento da sua definição.

> > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL 0030 1 #NUMERO (N05) INIT <386> 0050 1 #NOME (A10) INIT <'EDIVALDO'> 0070 1 #MATRIZ (B2/1:10) 0080 END-DEFINE ....+....1....+....2....+....3....+....4....+....5....+... S 8 L 1

21

Page 22: Apostila de Natural2

Natural 2

3.3 Manipulação de variáveis

3.3.1 Limpando (RESET)

A instrução RESET elimina o conteúdo de uma variável, deixando-a com o valor adequado a seu formato. Se a variável for numérica (formato N ou P), fica com valor zero, se for alfanumérica (formato A) fica em branco.

> > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL 0030 1 #NUMERO (N05) INIT <386> 0040 * 0050 1 #NOME (A10) INIT <'EDIVALDO'> 0060 * 0070 1 #MATRIZ (B2/1:10) 0080 END-DEFINE 0090 RESET #NUMERO 0100 RESET #NOME 0110 0120 0130 ....+....1....+....2....+....3....+....4....+....5....+... S 10 L 1

3.3.2 Movendo Conteúdo (MOVE)

A instrução MOVE permite mover o conteúdo de uma variável para outra ou várias do mesmo formato. Esta movimentação não apaga o conteúdo da variável de origem, ou seja as variáveis ficam com conteúdos iguais.

Exemplo: Movimentação simples > > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL 0030 1 #CAMPO1 (A10) 0040 1 #CAMPO2 (A10) 0050 1 #CAMPO3 (N05) 0060 1 #CAMPO4 (N05) 0070 END-DEFINE 0080 MOVE 'APRENDER' TO #CAMPO1 0090 MOVE #CAMPO1 TO #CAMPO2 0100 * 0110 MOVE 38415 TO #CAMPO3 0120 MOVE #CAMPO3 TO #CAMPO4 0130 * 0140 END 0190 0200 ....+....1....+....2....+....3....+....4....+....5....+... S 14 L 1

22

Page 23: Apostila de Natural2

Natural 2

Exemplo: movendo variáveis de mesmo nome de um grupo para outro. > > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL X 0030 1 #GRUPO1 0040 2 #CAMPO1 (A10) 0050 2 #CAMPO2 (N05) Y 0060 2 #CAMPO3 (N05) 0070 1 #GRUPO2 0080 2 #CAMPO1 (A10) 0090 2 #CAMPO2 (N05) 0100 2 #CAMPO3 (N05) 0110 END-DEFINE 0120 MOVE BY NAME #GRUPO1 TO #GRUPO2 0130 * 0140 END 0150 0160 0170 0180 0190 0200 ....+....1....+....2....+....3....+....4....+....5....+... S 14 L 1

3.3.3 Operações Matemáticas

As instruções matemáticas permitem: Adicionar (ADD); Subtrair (SUBTRACT); Multiplicar (MULTIPLY); Dividir (DIVIDE). No caso de existir a necessidade de se trabalhar com uma expressão aritmética, o ideal é montar uma expressão, utilizando a instrução COMPUTE.

> > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL 0030 1 #CAMPO1 (N05) 0040 1 #CAMPO2 (N03) 0050 END-DEFINE X 0060 ADD 8 TO #CAMPO1 /* SOMA 8 AO CONTEUDO DE #CAMPO1 Y 0070 COMPUTE #CAMPO1 = #CAMPO1 + 8 /* SOMA 8 AO CONTEUDO DE #CAMPO1 0080 * 0090 SUBTRACT 5 FROM #CAMPO2 /* SUBTRAI 5 DO CONTEUDO DO #CAMPO2 0100 COMPUTE #CAMPO2 = #CAMPO2 - 5 /* SUBTRAI 5 DO CONTEUDO DO #CAMPO2 0110 * 0120 MULTIPLY #CAMPO1 BY 7 /* MULTIPLICA O CONTEUDO 0130 COMPUTE #CAMPO1 = #CAMPO1 * 7 /* DE #CAMPO1 POR 7 0140 * 0150 DIVIDE 2 INTO #CAMPO2 /* DIVIDE O CONTEUDO DE #CAMPO2 POR 2 0160 COMPUTE #CAMPO2 = #CAMPO2 / 2 /* DIVIDE O CONTEUDO DE #CAMPO2 POR 2 0170 * 0180 COMPUTE #CAMPO1 = 10 * ((#CAMPO1 + #CAMPO1) / 2) - 5 0190 END 0200 ....+....1....+....2....+....3....+....4....+....5....+... S 19 L 1

23

Page 24: Apostila de Natural2

Natural 2

3.3.4 Juntando Variáveis “String’s”

A instrução COMPRESS permite que se faça ajuntamento de variáveis e “string’s” em uma só variável, isto é, essa instrução é usada para transferir o conteúdo de duas ou mais variáveis ou “string’s” para uma variável alfanumérica.

A instrução COMPRESS com o complemento LEAVING NO não deixará espaço em branco entre as “string’s” e variáveis combinadas. Sem o complemento, deixará espaço em branco.

> > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL 0030 1 #NOME (A10) 0040 1 #SOBRENOME (A15) 0050 1 #NOME-COMPLETO (A20) 0060 1 #TEXTO (A30) 0070 END-DEFINE 0080 MOVE 'JOAQUIM' TO #NOME 0090 MOVE 'FERREIRA' TO #SOBRENOME 0100 * 0110 COMPRESS #NOME #SOBRENOME INTO #NOME-COMPLETO Y 0120 COMPRESS 'NOME=' #NOME-COMPLETO INTO #TEXTO LEAVING NO 0130 END 0140 0150 0160 0170 0180 0190 0200 ....+....1....+....2....+....3....+....4....+....5....+... S 13 L 1

3.3.5 Alterando um caracter em uma variável ou pesquisando um caracter

em uma variável

A instrução EXAMINE é utilizada para pesquisar e/ou alterar um caracter em uma variável alfanumérica.

> > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL 0030 1 #MATRIZ (A1/5) 0040 1 #CAMPO (A05) INIT <' 5'> 0050 1 #NUMERO (N03) 0060 END-DEFINE 0070 /* PROCURANDO UM DETERMINADO CONTEUDO E SUA POSICAO 0080 EXAMINE #CAMPO FOR '5' POSITION #NUMERO 0090 /* PROCURANDO QUAL OCORRENCIA TEM O CONTEUDO 'X' 0100 MOVE 'X' TO #MATRIZ (3) 0110 EXAMINE #MATRIZ (*) FOR 'X' INDEX #NUMERO 0120 /* ALTERANDO UM CARACTER EM UMA VARIAVEL Y 0130 EXAMINE #CAMPO FOR ' ' REPLACE '0' 0140 END 0150 0160 ....+....1....+....2....+....3....+....4....+....5....+... S 14 L 1

24

Page 25: Apostila de Natural2

Natural 2

3.4 Testes CondicionaisSão instruções que permitem tomada de decisões verificando o

conteúdo das variáveis.

3.4.1 A instrução DECIDE ONA instrução DECIDE ON é utilizada para especificar múltiplas

opções a serem executadas dependendo do valor contido em uma variável.

> > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DECIDE ON FIRST VALUE OF *PF-KEY 0020 VALUE 'ENTR' WRITE 'TECLOU ENTER' 0030 VALUE 'PF01' WRITE 'TECLOU PF 1' 0040 VALUE 'PF02' WRITE 'TECLOU PF 2' 0050 VALUE 'PF03' WRITE 'TECLOU PF 3' 0060 VALUE 'PF04' WRITE 'TECLOU PF 4' 0070 VALUE 'PF05' WRITE 'TECLOU PF 5' 0100 NONE WRITE 'TECLA NAO PREVISTA' 0110 END-DECIDE 0120 END

....+....1....+....2....+....3....+....4....+....5....+... S 12 L 1

> > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL 0030 1 #ESTADO-CIVIL (N01) INIT <2> 0040 END-DEFINE 0050 DECIDE ON FIRST VALUE OF #ESTADO-CIVIL 0060 VALUE 1 WRITE 'CASADO' 0070 VALUE 2 WRITE 'SOLTEIRO' 0080 VALUE 3 WRITE 'DIVORCIADO' 0110 NONE WRITE 'ERRO NO ESTADO CIVIL' 0120 END-DECIDE 0130 END ....+....1....+....2....+....3....+....4....+....5....+... S 13 L 1

3.4.2 A instrução IFA instrução IF é utilizada para controlar a execução de uma instrução

ou um conjunto de instruções de acordo com uma condição lógica. As condições lógicas permitidas e os conectores são: igual a (=);

diferente de (NE); menor que (<); maior que (>); menor ou igual a (LE); maior ou igual a (GE). É possível utilizar os seguintes conectivos: OR e AND.

> > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL 0030 1 #ESTADO-CIVIL (N01) INIT <2> 0040 END-DEFINE 0050 IF #ESTADO-CIVIL = 1 0060 WRITE 'CASADO' 0070 END-IF 0080 IF #ESTADO-CIVIL = 2 0090 WRITE 'SOLTEIRO' 0100 ELSE 0110 WRITE #ESTADO-CIVIL 0120 END-IF 0130 END ....+....1....+....2....+....3....+....4....+....5....+... S 13 L 1

25

Page 26: Apostila de Natural2

Natural 2

3.4.3 Tratamento de Erro (ON ERROR)Os erros de processamento de um objeto podem ser tratados a fim

de evitar o seu cancelamento e não permitir que o usuário receba a mensagem diretamente do Natural.

A instrução que permite o tratamento de erro é ON ERROR e as variáveis que podem ser utilizadas dentro dela são: *ERROR LINE, numérica de 4 posições, que contém o número da linha fonte do objeto em execução que deu erro; *ERROR-NR, numérica de 7 posições, que contém o número do erro ocorrido; *PROGRAM, alfanumérico de 8 posições, que contém o nome do programa em execução no memento que ocorreu o erro.

> > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL 0030 1 #ESTADO-CIVIL (N01) INIT <2> 0040 END-DEFINE 0050 IF #ESTADO-CIVIL = 1 0060 WRITE 'CASADO' 0070 END-IF 0080 ON ERROR 0090 WRITE 'ERRO NR:' *ERROR-NR 'NA LINHA:' *ERROR-LINE 0100 'DO PROGRAMA:' *PROGRAM 0110 END-ERROR 0120 END

3.5 Trabalhando com TelaOutra facilidade do Natural é o trabalho com tela. O definição da tela

deve ser feita através do editor de mapa.

3.5.1 Chamando o Mapa (tela)Para acionar o mapa definido no editor, utilizamos a instrução INPUT

seguida do complemento USING MAP:

> > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL 0030 1 #NOME (A30) 0040 1 #CPF (N11) 0050 END-DEFINE 0060 INPUT USING MAP 'MAPA01' 0070 END

3.5.2 Apresentando no Mapa uma mensagemPara esse trabalho, usamos a instrução INPUT com o complemento

WITH TEXT:

> > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL 0030 1 #NOME (A30) 0040 1 #CPF (N11) 0050 END-DEFINE 0060 INPUT WITH TEXT 'MENSAGEM' USING MAP 'MAPA01' 0070 END

26

Page 27: Apostila de Natural2

Natural 2

3.5.3 Reexecutando o MapaA instrução REINPUT é usada para retornar e reexecutar o último

INPUT. Geralmente a utilizamos com dois complementos: uma mensagem e um indicador (MARK) da variável onde o cursor deve ser posicionado.

> > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL 0030 1 #NOME (A30) 0040 1 #CPF (N11) 0050 END-DEFINE 0060 INPUT WITH TEXT 'MENSAGEM' USING MAP 'MAPA01' 0070 REINPUT 'MENSAGEM' MARK *#NOME 0080 END

3.5.4 Indicando o uso de PFsO uso de PFs num objeto requer a indicação de qual ou quais serão

utilizadas e, se for necessário, o que cada uma indica.

> > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL 0030 1 #NOME (A30) 0040 1 #CPF (N11) 0050 END-DEFINE 0060 SET KEY ALL /* TODAS AS PFS DISPONIVEIS 0070 SET KEY PF3 /* APENAS A PF3 DISPONIVEL 0080 SET KEY PF1=HELP /* INDICA QUE A PF1 EH O HELP 0090 * 0100 INPUT WITH TEXT 'MENSAGEM' USING MAP 'MAPA01' 0110 * 0120 REINPUT 'MENSAGEM' MARK *#NOME 0130 END

3.5.5 Testando a PF pressionadaA variável de sistema do Natural que contém a PF pressionada é a

*PF-KEY (alfanumérico de 4 posições) e para testá-la usamos as instruções de teste condicional.

Os valores possíveis da *PF-KEY são: ENTR (enter); PA1 a PA3; PF1 a PF48 e CLR (clear).

0010 DEFINE DATA 0020 LOCAL 0030 1 #NOME (A30) 0040 1 #CPF (N11) 0050 END-DEFINE 0060 SET KEY ALL /* TODAS AS PFS DISPONIVEIS 0080 INPUT WITH TEXT 'MENSAGEM' USING MAP 'MAPA01' 0100 IF *PF-KEY = 'PF1' 0110 REINPUT 'PRESSIONOU A PF1' MARK *#NOME 0120 END-IF 0130 * OU ... 0140 DECIDE ON FIRST VALUE OF *PF-KEY 0150 VALUE 'PF1' REINPUT 'PRESSIONOU A PF1' 0160 VALUE 'PF2' REINPUT 'PRESSIONOU A PF2' 0170 VALUE 'PF3' REINPUT 'PRESSIONOU A PF3' 0180 NONE REINPUT 'PRESSIONOU TECLA NAO PREVISTA' 0190 END-DECIDE 0200 END

27

Page 28: Apostila de Natural2

Natural 2

3.5.6 Usando a Variável de controleA variável de controle permite modificar atributos de uma variável da

tela.A variável de controle deve ser informada no parâmetro CV do editor

de mapa.

Fld #campo Fmt A5 ------------------------------------------------------------------------------- AD= MIT_______ ZP= SG= HE= _____________________ Rls 0 AL= _____ CD= __ CV= #cv____________________________ Mod Undef PM= __ DF= DY= ______________________________ EM= _______________________________________________________________ 001 --010---+----+----+---030---+----+----+---050---+----+----+---070---+----

Os valores possíveis da variável de controle são: I, intensificado e como saída e entrada de dados; N, como saída mas sem apresentar o caracter informado; P, apenas apresentado.

> > + Program CURSO Lib CURSO All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL 0030 1 #CAMPO (A30) INIT <'ZZZZZZZZZZZZZZZZ'> 0040 1 #CV-CAMPO (C) 0050 END-DEFINE 0060 MOVE (AD=I) TO #CV-CAMPO /* INTENSIFICADO 0070 MOVE (AD=NP) TO #CV-CAMPO /* NAO VISUALIZADO E PROTEGIDO 0080 MOVE (AD=P) TO #CV-CAMPO /* PROTEGIDO 0090 MOVE (AD=N) TO #CV-CAMPO /* NAO VISUALIZADO 0100 INPUT USING MAP 'MAPA01' 0110 END ....+....1....+....2....+....3....+....4....+....5....+... S 11 L 1

3.6 Processamento com Loop (laço) Para processos repetitivos o Natural dispõe de duas instruções: FOR

e REPEAT.

3.6.1 A instrução FORÉ a instrução usada para gerar “loop” controlado pelo número de

execuções que serão feitas. Possui o seguinte formato: FOR <operando de controle> <operando de início> <operando de final> STEP operando de incremento>, onde:

Operando de controle é uma variável que controla o loop do FOR. Operando de início é um valor fixo ou uma variável cujo valor será

colocado no operando de controle. Operando de final é um valor fixo ou uma variável cujo valor será

comparado com o operando de controle, para determinar o final do FOR.

Operando de incremento é um valor fixo ou uma variável cujo valor será adicionado ou subtraído do operando de controle.

> > + Program CURSO Lib CURSO

28

Page 29: Apostila de Natural2

Natural 2

All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL 0030 1 #CONTROLE (N03) 0040 1 #INICIO (N03) INIT <01> 0050 1 #FINAL (N03) INIT <16> 0060 1 #INCREMENTO (N03) INIT <02> 0070 END-DEFINE 0080 FOR #CONTROLE #INICIO #FINAL STEP #INCREMENTO 0090 ... 0100 FOR #CONTROLE 1 10 /* #CONTROLE VARIA DE 1 A 10 INCREMENTADO DE 0110 ... /* 1 EM 1 X 0120 FOR #CONTROLE 1 10 STEP 2 /* #CONTROLE VARIA DE 1 A 10 INCREMENTADO DE Y 0130 ... /* 2 EM 2 0140 FOR #CONTROLE 10 1 STEP -2 /* #CONTROLE VARIA DE 10 A 1 DECREMENTADO DE 0150 ... /* 2 EM 2 0160 END-FOR 0170 END ....+....1....+....2....+....3....+....4....+....5....+... S 17 L 1

3.6.2 A instrução REPEATÉ a instrução usada para gerar um processamento repetitivo

controlado. Possui dois complementos , o UNTIL e o WHILE.O REPEAT pode ser usado também sem nenhum complemento e

desta forma, o bloco de instruções que estiver dentro do REPEAT será executado até encontrar uma instrução ESCAPE BOTTOM.

Na forma REPEAT UNTIL <condição lógica>, o bloco de instruções que estiver dentro do REPEAT, será executado até que seja satisfeita a condição lógica ou seja interrompido por uma instrução ESCAPE BOTTOM.

Na forma REPEAT WHILE <condição lógica>, o bloco de instruções que estiver dentro do REPEAT será executado enquanto a condição lógica estiver sendo satisfeita ou até ser interrompido por uma instrução ESCAPE BOTTOM.

> > + Program CURSO Lib CURSO All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL 0030 1 #CONT (N03) 0040 1 #FINAL (N03) INIT <16> 0050 END-DEFINE 0060 REPEAT UNTIL #CONT > #FINAL 0070 ADD 1 TO #CONT 0080 END-REPEAT 0090 REPEAT WHILE #CONT < #FINAL 0100 ADD 1 TO #CONT Y 0110 END-REPEAT 0120 REPEAT 0130 ADD 1 TO #CONT 0140 IF #CONT > #FINAL 0150 ESCAPE BOTTOM 0160 END-IF 0170 END-REPEAT 0180 END ....+....1....+....2....+....3....+....4....+....5....+... S 18 L 1

3.6.3 A instrução ESCAPEA instrução ESCAPE BOTTOM serve para encerrar o “loop” que está

ativo no momento. O computador passa a executar a instrução que está na linha seguinte ao END-xx , onde xx é o comando que gerou o “loop”.

29

Page 30: Apostila de Natural2

Natural 2

A instrução ESCAPE TOP volta a seqüência de execução ao início do “loop” ativo.

3.7 Apresentação de informaçõesUma das grandes facilidades do Natural é a possibilidade de geração

de relatórios quer para apresentar no monitor de vídeo ou em papel. A facilidade está na definição do “lay-out” do relatório e na sua produção.

Há dois comandos que permitem gerar relatório: o DISPLAY e o WRITE. Ambos os comandos geram o título do relatório, composto do número da página, da data e da hora da geração do relatório, que pode ser suprimido pelo complemento NOTITLE para qualquer uma das instruções.

A instrução DISPLAY é mais usada para apresentar variáveis num relatório. Para cada variável apresentada gera automaticamente o “header” (cabeçalho) da variável com o seu nome.

A instrução WRITE é muito utilizada para gerar relatórios formatados.

Exemplo > > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL 0030 1 #CAMPO1 (N05) INIT <28649> 0040 1 #CAMPO2 (A30) INIT <'EDSON ARANTES DO NASCIMENTO'> 0050 END-DEFINE 0060 DISPLAY NOTITLE #CAMPO1 #CAMPO2 X 0070 WRITE NOTITLE #CAMPO1 #CAMPO2 0080 END 0090 ....+....1....+....2....+....3....+....4....+....5....+... S 8 L 1

Resultado#CAMPO1 #CAMPO2 ------- ------------------------------ 28649 EDSON ARANTES DO NASCIMENTO 28649 EDSON ARANTES DO NASCIMENTO

MORE

Como a instrução WRITE é muito usada para gerar relatórios formatados é necessário conhecer os seus complementos que permitem a formatação do relatório:

nX, é a notação usada para inserir n espaços em branco entre informações.

nT, é a notação usada para definir a partir de qual coluna a variável ou “string” será impressa.

x/y, é a notação usada para indicar em qual linha e qual coluna a informação será apresentada.

‘=’, é a notação usada para indicar que o “header” (cabeçalho) da variável será o nome da própria variável.

‘texto livre’, é a notação usada para indicar o texto que será apresentado.

/, é a notação usada para indicar salto de linha.

30

Page 31: Apostila de Natural2

Natural 2

(I), é a notação usada para indicar que o texto deve ser apresentado de forma intensificada, ser for monitor de vídeo, ou negrito, se for impressão.

(AD=I) é a notação usada para indicar que a variável deve ser apresentada de forma intensificada, ser for monitor de vídeo, ou negrito, se for impressão.

Uma página para o Natural sempre contém 80 colunas e 23 linhas. Caso o relatório a ser gerado tenha mais de 80 colunas e/ou mais de 23 linhas será necessário alterar os valores iniciais utilizando a instrução FORMAT com os parâmetros PS e LS, que são respectivamente, a quantidade de linha e a quantidade de colunas do relatório.

> > + Program CURSO Lib CURSO All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL 0030 1 #NOME (A30) 0040 1 #MATRICULA (N07) 0050 END-DEFINE 0060 FORMAT PS=60 LS=132 /* PAGINA COM 60 LINHAS E 132 COLUNAS 0070 WRITE NOTITLE 0080 01T 'TEXTO NA COLUNA 1 - NORMAL' 0090 40T 'TEXTO NA COLUNA 40 - INTENSIFICADO' (I) 0100 /// 'APOS SALTO DE 3 LINHAS' 0110 6X 'APOS 6 COLUNAS' 0120 9/9 'NA LINHA 9 E COLUNA 9' // 0130 MOVE 'PRINCESA ISABEL' TO #NOME 0140 MOVE 3689403 TO #MATRICULA 0150 WRITE '=' #MATRICULA '(COM NOME DO CAMPO)' / 0160 WRITE #NOME (AD=I) '(COM CONTEUDO INTENSIFICADO)' 0170 END ....+....1....+....2....+....3....+....4....+....5....+... S 17 L 1

Exemplo da execução do programa anterior:TEXTO NA COLUNA 1 - NORMAL TEXTO NA COLUNA 40 - INTENSIFICADO APOS SALTO DE 3 LINHAS APOS 6 COLUNAS NA LINHA 9 E COLUNA 9 #MATRICULA: 3689403 (COM NOME DO CAMPO) PRINCESA ISABEL (COM CONTEUDO INTENSIFICADO) MORE

A mudança para uma nova página durante o processo de impressão ocorre automaticamente quando a quantidade de linhas impressas é igual ao valor do parâmetro PS do ambiente Natural ou quando a instrução NEWPAGE é acionada. Qualquer um desses processos gera a mudança no contador de páginas do Natural. O *PAGE-NUMBER, que pode ser utilizado no relatório impresso.

31

Page 32: Apostila de Natural2

Natural 2

Sem necessidade de artifícios de programação, a geração de cabeçalho com a de rodapé de um relatório são feitas automaticamente quando se inicia a impressão de uma nova página, via AT TOP OF PAGE, ou quando a última linha impressa é igual ao valor do parâmetro PS, via AT END OF PAGE.

> > + Program CURSO Lib CURSO All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 FORMAT PS=11 /* DEFININDO UMA PAGINA COM 10 LINHAS APENAS 0020 AT TOP OF PAGE /* QUANDO FOR INICIO DA PAGINA 0030 WRITE NOTITLE NOHDR 0040 01T 'TESTANDO O CABECALHO DE UM RELATORIO' 0050 / 01T 'INFORMANDO A DATA DE EMISSAO :' *DATX (EM=DD/MM/YYYY) 0060 / 01T 'INFORMANDO A HORA DE EMISSAO :' *TIMX (EM=HH/II/SS) 0070 / 01T 'INFORMANDO O NUMERO DA PAGINA:' *PAGE-NUMBER (EM=ZZZ.ZZ9) 0080 END-TOPPAGE 0090 AT END OF PAGE /* QUANDO FOR FIM DE PAGINA 0100 WRITE // 1T 'ESTA E" A LINHA DE RODAPé' 0110 END-ENDPAGE 0120 WRITE / 10T 'LINHA FONTE 1' 0130 WRITE / 10T 'LINHA FONTE 2' 0140 WRITE / 10T 'LINHA FONTE 3' 0150 WRITE / 10T 'LINHA FONTE 4' 0160 WRITE / 10T 'LINHA FONTE 5' 0170 WRITE / 10T 'LINHA FONTE 6' 0180 WRITE / 10T 'LINHA FONTE 7' 0190 END

TESTANDO O CABECALHO DE UM RELATORIO INFORMANDO A DATA DE EMISSAO : 25/01/2001 INFORMANDO A HORA DE EMISSAO : 18/15/12 INFORMANDO O NUMERO DA PAGINA: 1 LINHA FONTE 1 LINHA FONTE 2 LINHA FONTE 3 LINHA FONTE 4 ESTA E' A LINHA DE RODAPé

TESTANDO O CABECALHO DE UM RELATORIO INFORMANDO A DATA DE EMISSAO : 25/01/2001 INFORMANDO A HORA DE EMISSAO : 18/24/43 INFORMANDO O NUMERO DA PAGINA: 2 LINHA FONTE 5 LINHA FONTE 6 LINHA FONTE 7 ESTA E' A LINHA DE RODAPé

Na geração de um relatório encontramos freqüentemente alguns problemas que necessitam de um pouco mais de raciocínio para resolvê-los: a impressão de parte do conteúdo de um campo sem utilizar a redefinição da variável; a impressão de conteúdos editados, quer alfanuméricos ou numéricos; e a não apresentação de informações repetidas em linhas seguidas. Para resolver esses problemas devemos

32

Page 33: Apostila de Natural2

Natural 2

utilizar os seguintes, respectivamente: o parâmetro AL; o parâmetro EM ; e o parâmetro IS.

> > + Program CURSO Lib CURSO All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL 0030 1 #CAMPO1 (A70) 0040 1 #CAMPO2 (A11) 0050 1 #CAMPO3 (N08,2) 0060 END-DEFINE 0070 MOVE ALL 'X' TO #CAMPO1 0080 MOVE '00011111111' TO #CAMPO2 0090 MOVE 3863,54 TO #CAMPO3 0100 WRITE #CAMPO1 (AL=30) /* SOMENTE AS 30 PRIMEIRAS POSICOES 0110 #CAMPO2 (EM=XXX.XXX.XXX-XX) 0120 #CAMPO3 (EM=ZZ.ZZZ.ZZ9,99) 0130 END 0140 ....+....1....+....2....+....3....+....4....+....5....+... S 13 L 1

Page 1 01-01-25 19:06:55 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 000.111.111-11 3.863,54

A última instrução que veremos com relação a geração de relatório é o EJECT. Essa instrução quando utilizada gera um avanço de página sem a impressão do cabeçalho, ou seja, desconsidera o que é para ser feito dentro da instrução AT TOP OF PAGE:

> > + Program CURSO Lib CURSO All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 AT TOP OF PAGE 0020 WRITE 'CABECALHO TO TOP-PAGE' 0030 END-TOPPAGE 0040 * 0050 EJECT 0060 WRITE //// 'IMPRESSAO GERADA PELO EJECT' 0070 NEWPAGE 0080 WRITE // 'IMPRESSAO DE UMA LINHA DETALHE' 0090 END ....+....1....+....2....+....3....+....4....+....5....+... S 9 L 1

Resultado da execução do programa anterior: IMPRESSAO GERADA PELO EJECT

MORE

Page 1 01-01-25 19:20:01 CABECALHO TO TOP-PAGE IMPRESSAO DE UMA LINHA DETALHE

33

Page 34: Apostila de Natural2

Natural 2

MORE

3.8 Trabalhando com Arquivo AdabasPara se ter acesso de leitura ou gravação de um arquivo Adabas, é

necessário utilizar o objeto Natural chamado LOCAL. Na LOCAL são definidas as variáveis (com tamanho e formato) do arquivo Natural que serão acessadas pelo programa.

Local SAE-FISI Library SINARM DBID 200 FNR 9 Command > + I T L Name F Leng Index/Init/EM/Name/Comment Top - -------------------------------- - ---- --------------------------------- V 1 SAE-FISI SAE-FISICA 2 COD-PROPRIETARIO P 9,0 2 CPF-PROPRIETARIO P 11,0 2 NOME-PES A 50 2 NUM-IDENT A 15 2 ORGAO-IDENT A 10 2 UF-IDENT A 2 2 DATA-EXP-IDENT P 8,0 2 NOME-PAI A 45 2 NOME-MAE A 45 2 DATA-NASC P 8,0 2 SEXO A 1 2 PAIS-NASCIM P 4,0 2 CID-NASC P 5,0 2 UF-NASC A 2 2 ESTADO-CIVIL N 1,0 2 TIT-ELEITOR P 12,0 ----------------------------------------------------------------- S 40 L 1

Todo arquivo físico criado no adabas é armazenado nas várias estruturas do Banco de Dados :no Data Storage, onde estão os dados propriamente ditos na ordem que foram inseridos no arquivo; no Adress Converter do Associator, onde está o endereço de cada registro físico no Data Storage associado ao seu respectivo ISN; e nas Listas Invertidas, se existir chave definida para o arquivo, para cada registro do Data Storage.

3.8.1 Leitura de RegistrosHá várias instruções que permitem ler os registros de um arquivo

Adabas, via DDM. Algumas geram loop – READ, HISTOGRAM E FIND – e outra que não gera loop, o GET.

Há duas formas de sair de uma instrução que gera “loop”: a primeira, quando o “loop” finaliza normalmente; a segunda, quando é finalizada por uma instrução que é ESCAPE.

A instrução ESCAPE pode ser apresentada de duas maneiras: na primeira, ESCAPE BOTTOM(r), indica que é para finalizar o “loop” relacionado a linha do editor e executar a primeira instrução após a sentença que finaliza o loop; a segunda, ESCAPE TOP, indica que é para voltar ao início do “loop”.

É possível limitar a quantidade de registros a ser selecionados com a inclusão de parênteses com um número após a instrução.

34

Page 35: Apostila de Natural2

Natural 2

3.8.1.1 A instrução ReadHá várias extensões da instrução READ, mas veremos apenas duas,

as mais usadas: uma para leitura na ordem física de armazenamento (PHYSICAL); e a outra, na ordem seqüencial de um descritor ou superdescritor ou subdescritor (LOGICAL)

3.8.1.1.1 READ PHYSICALO READ PHYSICAL recupera os registros na ordem que os mesmos

aparecem no Data Storage, a partir do primeiro registro físico, sempre. É ideal para trabalhar com arquivos que possuem apenas uma visão lógica para efetuar recuperação de pelo menos 20% dos registros de um arquivo por ser muito rápida, visto que só acessa o Data Storage,

O uso desta instrução em conjunto com instruções de atualização requer um cuidado especial: no caso de uma alteração – UPDATE – pode gerar o “split” de bloco e produzir alterações em cascata para um mesmo registro: no caso de exclusão, NÃO UTILIZAR NUNCA, se existir mais de uma visão lógica de um arquivo físico.

> > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL USING SAE-FISI 0030 END-DEFINE 0040 READ SAE-FISI 0050 write cpf-proprietario (em=999.999.999-99) nome-pes 0060 END-READ 0070 END

Page 1 01-01-26 16:37:02 000.000.000-00 PAULO SERGIO DE VASCONCELO 000.000.000-00 PAULO SERGIO MARIANO CORREA 000.000.000-00 ARISTIDES CARDOSO DE OLIVEIRA 000.000.000-00 JOAO ZITO LUPIS 000.000.000-00 HELSSON DA SILVA 000.000.000-00 ANTONIO CORDEIRO DA SILVA 604.490.719-87 ERMINIO DA LUZ CARNEIRO 000.000.000-00 127.535.219-72 BELMIRO MENDES 000.000.000-00 ROBERTO NEGRAO ROBERTI 004.826.175-00 WASHINGTON AGUIAR TORRES 000.000.000-00 DAGOBERTO VILARINHO 000.000.000-00 WALTER MELHADO 000.000.000-00 VITOR JOSE SCORSIM CUNHA 000.000.000-00 TEREZINHA DE FATIMA DA SILVA 000.000.000-00 ALTAMIR FELIX 000.000.000-00 VALDIR LUIZ DA SILVA 000.000.000-00 JONLINEI VIEIRA 000.000.000-00 ADIVINO DOS SANTOS 000.000.000-00 NORBERTO VIEIRA YOGO 000.000.000-00 JOSE SOARES DE OLIVEIRA MORE

3.8.1.1.2 READ LOGICALO Read Logical recupera os registros na ordem de uma

determinada chave – descritor/superdescritor/ subdescritor - . permite que os registros sejam recuperados a partir de um determinado valor e pode ser utilizado com quaisquer outras instruções de atualização, sem problema nenhum.

35

Page 36: Apostila de Natural2

Natural 2

> > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL USING SAE-FISI 0030 END-DEFINE 0040 READ SAE-FISI BY CPF-PROPRIETARIO 0050 write cpf-proprietario (em=999.999.999-99) nome-pes 0060 END-READ 0070 END ....+....1....+....2....+....3....+....4....+....5....+... S 8 L 1

Resultado da execução do programa anterior:Page 1 01-01-26 16:24:14 000.000.001-91 SERGIO MURILO SANTOS 000.000.217-84 ANDRE BARRETO DE MORAES 000.001.063-40 GALDENCIO BRAZ DE MACENA 000.001.227-00 JOSE ROBERTO DA SILVA GUIMARAES 000.001.401-04 HELIO DUTRA 000.001.591-15 GENNARO CASELLA 000.002.211-04 LOMELINO DE SOUZA SANTOS FILHO 000.002.561-53 JATIR BATISTA DA CUNHA 000.003.371-53 DALMO DE ALMEIDA 000.004.185-87 DILSON RIBEIRO SCHINDLER 000.004.782-10 RUMENOS SARKIS SIMAO 000.005.396-19 ROBERTO ACCIOLY VEIGA 000.005.402-00 PEDRO SMITH DO AMARAL 000.006.123-91 RUBENS CAVALCANTE CARVALHO 000.006.479-34 ANTENOR LEONARDO DE OLIVEIRA GODOI 000.006.739-35 ELOIR CESAR FERREIRA DE LIMA 000.007.119-69 ADRIANI AKEMI KOKUBO 000.007.379-25 ANDELEI CRUZ PEREIRA 000.008.412-34 IRIS PEDRO DE OLIVEIRA 000.008.761-00 JAYME RUBSTEM 000.008.842-00 ENEIDA DO ESPIRITO SANTO MORAES MORE

3.8.1.2 A instrução HISTOGRAMA instrução HISTOGRAM é usada para ler os valores de um campo

do banco de dados que foi definido como descritor, superdescritor ou subdescritor. Os valores são lidos diretamente da Lista Invertida e são apresentados na ordem crescente.

É possível dentro do loop gerado pelo HISTOGRAM utilizar as seguintes variáveis do Natural: *NUMBER, que recupera a quantidade de registros que possuem o valor da chave; e *COUNTER, que contém o número de valores já lidos.

36

Page 37: Apostila de Natural2

Natural 2

> > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL 0030 1 SAE-FISIX VIEW OF SAE-FISICA 0040 2 DATA-NASC 0050 END-DEFINE 0060 HISTOGRAM SAE-FISIX DATA-NASC 0070 WRITE *NUMBER *COUNTER DATA-NASC (EM=9999/99/99) 0080 END-HISTOGRAM 0090 END ....+....1....+....2....+....3....+....4....+....5....+... S 9 L 1

Resultado da execução do programa acima:Page 150 01-01-26 17:01:39 3 3130 1914/03/01 4 3131 1914/03/02 4 3132 1914/03/03 4 3133 1914/03/04 3 3134 1914/03/05 1 3135 1914/03/06 2 3136 1914/03/07 1 3137 1914/03/08 3 3138 1914/03/09 2 3139 1914/03/10 1 3140 1914/03/12 2 3141 1914/03/13 4 3142 1914/03/14 3 3143 1914/03/15 1 3144 1914/03/16 2 3145 1914/03/17 3 3146 1914/03/18 6 3147 1914/03/19 1 3148 1914/03/20 2 3149 1914/03/21 1 3150 1914/03/22 MORE

3.8.1.3 A instrução FINDA instrução FIND é usada para selecionar um conjunto de registros

de um arquivo de acordo com um critério de pesquisa definido para suas chaves.

Os critérios de pesquisa possíveis entre uma chave e um valor são: igual a (=); diferente de (NE); menor que (<); maior que (>); menor ou igual a (LE); maior ou igual a (GE). É possível utilizar os seguintes conectivos entre as chaves: OR e AND.

O FIND pode ser codificado de muitas formas, e vamos destacar aqui as quatro mais utilizadas.

Como há a possibilidade de que nenhum registro satisfaça o critériode pesquisa estabelecido, o Natural permite que se dê tratamento para esses casos utilizando as seguintes instruções: IF NO RECORDS ou IF *NUMBER.

A instrução IF NO RECORDS deve estar contida dentro do FIND e deve ter obrigatoriamente a instrução ESCAPE BOTTOM para evitar que execute os comandos dentro do FIND erradamente.

O IF *NUMBER deve ser colocado após a instrução que finalizar o FIND (END-FIND).

37

Page 38: Apostila de Natural2

Natural 2

> > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL USING SAE-FISI 0030 LOCAL 0040 1 #CPF (N11) INIT <9706623191> 0050 END-DEFINE 0060 FIND SAE-FISI WITH CPF-PROPRIETARIO = #CPF 0070 IF NO RECORDS FOUND 0080 WRITE 'NAO ACHEI CPF=' #CPF 0090 ESCAPE BOTTOM 0100 END-NOREC 0110 WRITE CPF-PROPRIETARIO (EM=999.999.999-99) 0120 DATA-NASC (EM=9999/99/99) NOME-PES 0130 END-FIND 0140 END ....+....1....+....2....+....3....+....4....+....5....+... S 14 L 1b

3.8.1.3.1 FIND <local> WITH <condição lógica> (gera loop)

nesta forma o FIND seleciona um conjunto de registros que atendem a <condição lógica> e vai lendo um a um para serem processados.

> > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL USING SAE-FISI 0030 END-DEFINE 0040 FIND SAE-FISI WITH CPF-PROPRIETARIO = 9706623191 0050 WRITE CPF-PROPRIETARIO (EM=999.999.999-99) 0060 DATA-NASC (EM=9999/99/99) NOME-PES 0070 END-FIND 0080 WRITE '----------------------------------------------' 0090 FIND SAE-FISI WITH DATA-NASC = 19551109 X 0100 WRITE DATA-NASC (EM=9999/99/99) NOME-PES Y 0110 END-FIND 0120 END ....+....1....+....2....+....3....+....4....+....5....+... S 12 L 1

Resultado da execução do programa anterior:Page 1 01-01-26 17:59:45 097.066.231-91 1955/11/09 PAULO AMORIM NOLETO ---------------------------------------------- 1955/11/09 APARECIDO DONIZETTE DOS SANTOS 1955/11/09 CICERO GUIMARAES VIEIRA 1955/11/09 MARCUS VENICIUS FLEMING FONSECA BARBOSA 1955/11/09 AMADO CONSTATINO DA SILVA 1955/11/09 JOSE ORESTE DA SILVA 1955/11/09 ANTONIO JURASKI 1955/11/09 LUCILO CARLOS CICERI 1955/11/09 LIBERIO BOEHM 1955/11/09 ANTONIO JOAQUIM DA SILVA 1955/11/09 ARLINDO DRZERMISKI 1955/11/09 APARECIDO DONIZETE DOS SANTOS 1955/11/09 ALONSO BRANDAO AIRES 1955/11/09 ALMIR JOSE PINTO 1955/11/09 SEBASTIAO REINALDO FERNANDES 1955/11/09 LUIZ HUMBERTO MELO DOS SANTOS 1955/11/09 CICERO MARCAL DA SILVA 1955/11/09 MOACYR BERWERTH JUNIOR 1955/11/09 REYNALDO DA SILVA AYROSA NETO 1955/11/09 JOSE LUIZ SANTOS PORTO MORE

38

Page 39: Apostila de Natural2

Natural 2

3.8.1.3.2 FIND NUMBER <local> WITH <condição lógica> (não gera loop) nesta forma o FIND conta quantos elementos tem o conjunto de

registros que atendem a <condição lógica> e apresenta este total na variável de sistema *NUMBER.

> > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL USING SAE-FISI 0030 END-DEFINE 0040 FIND NUMBER SAE-FISI WITH DATA-NASC = 19551121 0050 WRITE 'ENCONTRADOS=' *NUMBER 0060 END ....+....1....+....2....+....3....+....4....+....5....+... S 6 L 1

3.8.1.3.3 FIND NUMBER <local> WITH <condição lógica> RETAIN AS <lista> (não gera loop)

nesta forma o FIND conta quantos elementos tem o conjunto de registros que atendem a <condição lógica> e apresenta este total na variável de sistema *NUMBER, e além disso, gera em memória um arquivo com o conjunto de registros, chamado <lista>. Este arquivo criado será lido depois pelo comando FIND <local> WITH <lista>.

> > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL USING SAE-FISI 0030 END-DEFINE 0040 FIND NUMBER SAE-FISI WITH DATA-NASC = 19551121 RETAIN AS 'LISTA8' 0050 WRITE 'ENCONTRADOS=' *NUMBER 0060 END ....+....1....+....2....+....3....+....4....+....5....+... S 6 L 1

3.8.1.3.4 FIND <local> WITH <lista> (gera loop) nesta forma o FIND le uma <lista> de registros gerada pela instrução

FIND com a opção RETAIN.As <listas> criadas podem ser excluídas com o comando RELEASE

SET <lista>. > > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL USING SAE-FISI 0030 END-DEFINE 0040 FIND SAE-FISI WITH 'LISTA8' 0050 IF NO RECORDS FOUND 0060 RELEASE SET 'LISTA8' 0070 REINPUT '*** NAO HA REGISTRO PARA ESTA PESQUISA ***' ALARM 0080 END-NOREC 0090 /*... 0100 END-FIND 0110 END ....+....1....+....2....+....3....+....4....+....5....+... S 11 L 1

39

Page 40: Apostila de Natural2

Natural 2

3.8.1.4 A instrução GETA instrução GET é usada para ler um registro através do seu ISN.

Essa instrução não gera “loop”. O ISN de um registro pode ser obtido através da variável do sistema *ISN.

All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL USING SAE-FISI 0030 LOCAL 0040 1 #CPF (N11) INIT <9706623191> 0050 1 #ISN (N08) 0060 END-DEFINE 0070 FIND SAE-FISI WITH CPF-PROPRIETARIO = #CPF 0080 IF NO RECORDS FOUND 0090 WRITE 'NAO ACHEI CPF=' #CPF 0100 ESCAPE BOTTOM 0110 END-NOREC 0120 MOVE *ISN TO #ISN 0130 WRITE CPF-PROPRIETARIO (EM=999.999.999-99) 0140 DATA-NASC (EM=9999/99/99) NOME-PES 0150 END-FIND 0160 GET SAE-FISI #ISN 0170 END

3.8.2 Atualização de RegistrosAs instruções que efetuam atualização de registros – UPDATE e

DELETE – em um arquivo Adabas necessitam, obrigatoriamente, que os registros tenham sido selecionados anteriormente pelo FIND ou GET ou READ.

3.8.2.1 A instrução UPDATEA instrução UPDATE é usada para atualizar uma ou varáveis de um

registro de um arquivo Adabas.

0010 DEFINE DATA 0020 LOCAL USING SAE-FISI 0030 LOCAL 0040 1 #CPF (N11) INIT <9706623191> 0050 END-DEFINE 0060 FIND SAE-FISI WITH CPF-PROPRIETARIO = #CPF 0070 IF NO RECORDS FOUND 0080 WRITE 'NAO ACHEI CPF=' #CPF 0090 ESCAPE BOTTOM 0100 END-NOREC 0110 MOVE 'EDSON TEIXEIRA DA SILVA' TO NOME-PES 0120 UPADATE 0130 END-FIND 0140 END

40

Page 41: Apostila de Natural2

Natural 2

3.8.2.2 A instrução DELETEA instrução DELETE é usada para excluir um ou mais registros de

um arquivo Adabas.

0010 DEFINE DATA 0020 LOCAL USING SAE-FISI 0030 LOCAL 0040 1 #CPF (N11) INIT <9706623191> 0050 END-DEFINE 0060 FIND SAE-FISI WITH CPF-PROPRIETARIO = #CPF 0070 IF NO RECORDS FOUND 0080 WRITE 'NAO ACHEI CPF=' #CPF 0090 ESCAPE BOTTOM 0100 END-NOREC 0110 DELETE 0120 END-FIND 0130 END

3.8.2.3 A instrução STOREA instrução STORE é usada para incluir registros em um arquivo

Adabas.

> > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL USING SAE-FISI 0030 END-DEFINE 0040 MOVE 21425248691 TO CPF-PROPRIETARIO 0050 MOVE 'ERMENEGILDO COSTA' TO NOME-PES 0060 MOVE '244364' TO NUM-IDENT 0070 MOVE 'SSP/DF' TO ORGAO-IDENT 0080 MOVE 'DF' TO UF-IDENT 0090 MOVE 19900520 TO DATA-EXP-IDENT 0100 MOVE 'GILDO COSTA' TO NOME-PAI 0110 MOVE 'GILDA COSTA' TO NOME-MAE 0120 MOVE 19801021 TO DATA-NASC 0130 MOVE 'M' TO SEXO 0140 STORE SAE-FISI 0150 END ....+....1....+....2....+....3....+....4....+....5....+... S 15 L 1

3.8.2.4 As instruções END TRANSACTION e BACKOUT TRANSACTIONAs instruções de atualização de um arquivo Adabas no momento que

são acionadas NÃO geram, imediatamente, a atualização na base de dados, mas sim na área de WORK.

Apesar de estarem disponíveis para todos os usuários as atualizações somente serão efetivadas se forem confirmadas pela instrução END TRANSACTION, ou então canceladas pela instrução BACKOUT TRANSACTION.

A instrução END TRANSACTION avisa ao Natural que aquelas atualizações que foram efetuadas a partir do último END TRANSACTION ou BACKOUT TRANSACTION devem ser efetivadas fisicamente.

Ao contrário do END TRANSACTION, a instrução BACKOUT TRANSACTION avisa ao Natural para desconsiderar as atualizações deixando o arquivo como estava anteriormente.

> > + Program CURSO Lib SINARM

41

Page 42: Apostila de Natural2

Natural 2

All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL USING SAE-FISI 0030 LOCAL 0040 1 #CPF (N11) 0050 1 #NOME (A30) INIT <'JOAO PEDRO PEREIRA'> 0060 END-DEFINE 0070 FIND SAE-FISI WITH CPF-PROPRIETARIO = 21425248691 0080 IF NO RECORDS FOUND 0090 WRITE 'NAO ACHEI CPF=' #CPF 0100 ESCAPE BOTTOM 0110 END-NOREC 0120 MOVE #NOME TO NOME-PES 0130 UPDATE 0140 END-FIND 0150 END TRANSACTION 0160 END

....+....1....+....2....+....3....+....4....+....5....+... S 16 L 1

> > + Program CURSO Lib SINARM All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL USING SAE-FISI 0030 LOCAL 0040 1 #CPF (N11) 0050 1 #NOME (A30) INIT <'JOSE CALIXTO'> 0060 END-DEFINE 0070 FIND SAE-FISI WITH CPF-PROPRIETARIO = 21425248691 0080 IF NO RECORDS FOUND 0090 WRITE 'NAO ACHEI CPF=' #CPF 0100 ESCAPE BOTTOM 0110 END-NOREC 0120 MOVE #NOME TO NOME-PES 0130 UPDATE 0140 END-FIND 0150 BACKOUT TRANSACTION 0160 END

....+....1....+....2....+....3....+....4....+....5....+... S 16 L 1

3.8.2.5 A instrução RETRYA instrução RETRY deve ser usada dentro do bloco da instrução ON

ERROR, para verificar novamente a possibilidade de atualizar um registro que está sendo atualizado por outro usuário.

Quando se tenta atualizar um registro que já está sendo atualizado por outro, o Adabas devolve um erro 3145, que deve ser tratada no ON ERROR.

3.9 Trabalhando com arquivos WORKHa 4 instruções para geração/leitura de arquivos work: READ WORK

FILE; READ WORK FILE ONCE; WRITE WORK FILE; CLOSE WORK FILE.As instruções READ e WRITE possuem os complementos <n> e

<campos>: <n> é o número do arquivo relacionado ao cartão //cmwkfnn do JCL; <campos> é a relação de campos que formam o lay-out do registro do arquivo.

3.9.1 Lendo arquivo work

A instrução para ler um arquivo Work possui vários formatos, mas o mais utilizado deles é: READ WORK FILE <n> <campos>.

42

Page 43: Apostila de Natural2

Natural 2

Esta instrução gera um “loop” de processamento e deve ser encerrada com a instrução END-WORK.

> > + Program CURSO Lib CURSO All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL 0030 1 #REGISTRO 0040 2 #MATRICULA (N07) 0050 2 #NOME (A30) 0060 END-DEFINE 0070 READ WORK FILE 1 #REGISTRO 0080 ... 0090 END-WORK 0100 END

3.9.2 Gravando arquivo workA instrução para gravar um arquivo Work é: WRITE WORK FILE <n>

<campos>.

> > + Program CURSO Lib CURSO All ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0010 DEFINE DATA 0020 LOCAL 0030 1 #REGISTRO 0040 2 #MATRICULA (N07) 0050 2 #NOME (A30) 0060 END-DEFINE 0070 WRITE WORK FILE 1 #REGISTRO 0080 ... 0100 END ....+....1....+....2....+....3....+....4....+....5....+... S 10 L 1

3.10 Usando Subrotina InternaSe há um conjunto de instruções dentro de um objeto que aparece

repetidamente em várias partes do programa, podemos criar uma subrotina com estas instruções e chamá-la dos diversos pontos onde apareciam.

A subrotina pode ser interna ou externa, em ambos os casos será definida pela instrução DEFINE SUBROUTINE <nome-subrotina> e finalizada por END-SUBROUTINE.

Para chamá-la utilizamos a instrução PERFORM <nome-subrotina>.

0010 DEFINE DATA 0020 LOCAL 0030 1 #REGISTRO 0040 2 #MATRICULA (N07) 0050 2 #NOME (A30) 0060 END-DEFINE 0070 PERFORM ROT-MOVIMENTACAO 0080 ** ... 0090 DEFINE SUBROUTINE ROT-MOVIMENTACAO 0100 MOVE 'PEDRO PEREIRA' TO #NOME 0110 MOVE 7777777 TO #MATRICULA 0120 END-SUBROUTINE 0130 END

3.11 Usando SubprogramaO subprograma é um objeto Natural que pose ser acionado pela

instrução CALLNAT a partir de outro objeto, com passagem de parâmetros

43

Page 44: Apostila de Natural2

Natural 2

que podem ser alterados pelo subprograma e devolvidos ao objeto chamador. A sua sintaxe é CALLNAT <subprograma> <parâmetros>.

Os parâmetros são recebidos via área de comunicação do subprograma chamada de PARAMETER e nela as variáveis devem ter o mesmo formato e tamanho e estarem na mesma ordem da passada pelo objeto chamador.

Programa Chamador: 0010 DEFINE DATA 0020 LOCAL 0030 1 #MATRICULA (N07) 0040 1 #NOME (A30) 0050 END-DEFINE 0060 MOVE 'PEDRO PEREIRA' TO #NOME 0070 MOVE 7777777 TO #MATRICULA 0080 CALLNAT 'CURSOSUB' #MATRICULA #NOME 0090 END

Programa chamado 0010 DEFINE DATA 0020 PARAMETER 0030 1 #MATRICULA (N07) 0040 1 #NOME (A30) 0050 END-DEFINE 0060 WRITE #NOME 0070 WRITE #MATRICULA 0080 END

4 Exemplo de Programa com Consulta Fonética 0010 DEFINE DATA 0020 LOCAL USING SAE-FISI 0030 LOCAL 0040 1 #I (N03) 0050 1 #QTD-PARTES (N01) 0060 1 #NOME-P (A15/1:10) 0070 1 #NOME (A50) INIT <'PAULO AMORIM '> 0080 END-DEFINE 0090 CALLNAT 'SAEN0001' #NOME #NOME-P(1:10) #QTD-PARTES 0100 IF #QTD-PARTES = 0 0110 REINPUT 'ARGUMENTO DE PESQUISA INSUFICIENTE' MARK *#NOME ALARM 0120 END-IF 0130 FIND NUMBER SAE-FISI WITH NOME-PHON EQ #NOME-P(1) RETAIN AS 'LISTA' 0140 FOR #I EQ 2 TO #QTD-PARTES 0150 FIND NUMBER SAE-FISI WITH NOME-PHON EQ #NOME-P(#I) 0160 AND 'LISTA' RETAIN AS 'LISTA' 0170 END-FOR 0180 **------------------------------------------------------------------ 0190 FIND SAE-FISI WITH 'LISTA' 0200 IF NO RECORDS FOUND 0210 WRITE 'NAO CONSTA NO BANCO DE DADOS' 0220 ESCAPE BOTTOM 0230 END-NOREC 0240 WRITE CPF-PROPRIETARIO (EM=999.999.999-99) 0250 DATA-NASC (EM=9999/99/99) NOME-PES 0260 END-FIND 0270 RELEASE SET 'LISTA' 0280 END

44