You are on page 1of 120

Curso Avanado de Natural

Copyright (c) 2004, Luciano Rogrio Perdigo Braga. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License".

Copyright (c) 2004, Luciano Rogrio Perdigo Braga. E garantida a permisso para copiar, distribuir e/ou modificar este documento sob os termos da GNU Free Documentation License, verso 1.1 ou qualquer outra verso posterior publicada pela Free Software Foundation; sem obrigatoriedade de Sees Invariantes na abertura e ao final dos textos. Uma copia da licena esta includa na seo intitulada GNU Free Documentation License.

Pgina 1 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

Curso Avanado de Natural

Luciano Perdigo
natural_2-owner@yahoo.com.br Grupo no Yahoo da Linguagem Natural 2 Para mais informaes: http://br.groups.yahoo.com/group/natural_2 Enviar mensagem......: natural_2@yahoo.com.br Assinar..............: natural_2-subscribe@yahoo.com.br Cancelar Assinatura..: natural_2-unsubscribe@yahoo.com.br Proprietrio da Lista: natural_2-owner@yahoo.com.br

Pgina 2 de 120
Desenvolvido por Luciano Perdigo
Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

HISTRICO DE ATUALIZAES
DATA AUTOR ATUALIZAO

Pgina 3 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

NDICE
1. DEFINIO DE VARIVEIS ............................................................................................................... 8 1.1. 1.2. 1.3. 1.4. 1.5. 1.6. 1.7. 2. TIPO DE DADOS ................................................................................................................................... 8 INIT ..................................................................................................................................................... 8 CONST ................................................................................................................................................. 9 ARRAYS ............................................................................................................................................ 10 INICIALIZAO DE ARRAYS NO EDITOR DE DADOS ........................................................................... 12 INICIALIZAO DE VARIVEIS DE CONTROLE NO EDITOR DE DADOS ............................................... 16 AIVS APPLICATION INDEPENDENT VARIABLES .............................................................................. 18

MAPAS.................................................................................................................................................... 19 2.1. 2.2. 2.3. 2.4. 2.5. CONSIDERAES BSICAS ................................................................................................................ 19 DEFINIO DE JANELAS .................................................................................................................... 20 ATRIBUTOS DINMICOS .................................................................................................................... 22 VARIVEL DE CONTROLE .................................................................................................................. 24 REGRAS DE VALIDAO.................................................................................................................... 25

3. 4. 5. 6. 7.

PROGRAMAS........................................................................................................................................ 26 SUB-PROGRAMAS............................................................................................................................... 26 SUB-ROTINA EXTERNA .................................................................................................................... 27 COPYCODE ........................................................................................................................................... 28 HELPROUTINES .................................................................................................................................. 29 7.1. 7.2. 7.3. 7.4. 7.5. 7.6. UTILIZAO ...................................................................................................................................... 31 DEFINIO ........................................................................................................................................ 31 PASSAGEM DE CONTROLE ................................................................................................................. 31 PASSAGEM DE DADOS ....................................................................................................................... 32 PASSAGEM DE PARMETROS ............................................................................................................. 32 CONSIDERAES ............................................................................................................................... 32

8.

MANIPULAO DE DADOS.............................................................................................................. 33 8.1. 8.2. OPERAES ARITMTICAS ................................................................................................................ 33 PASSAGEM VARIVEL DE PARMETROS (ARRAY) ............................................................................ 35

9.

MANIPULAO DE STRINGS/ARRAY........................................................................................... 36 9.1. INSTRUO EXAMINE .................................................................................................................... 36 9.1.1. Opo FULL............................................................................................................................. 36 9.1.2. Opo DELETE/REPLACE...................................................................................................... 37 9.1.3. Opo GIVING NUMBER........................................................................................................ 38 9.1.4. Opo GIVING POSITION ...................................................................................................... 38 9.1.5. Opo GIVING LENGTH......................................................................................................... 39 9.1.6. Opo GIVING INDEX ............................................................................................................ 39 9.1.7. Opo SUBSTRING.................................................................................................................. 40 9.1.8. Opo PATTERN...................................................................................................................... 42 9.1.9. Opo WITH DELIMITERS ..................................................................................................... 42 9.1.10. Opo TRANSLATE ................................................................................................................. 43 9.2. INSTRUO SEPARATE................................................................................................................... 44 Pgina 4 de 120

Desenvolvido por Luciano Perdigo

Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

9.2.1. Opo WITH DELIMITERS ..................................................................................................... 46 9.2.2. Opo GIVING NUMBER........................................................................................................ 46 9.2.3. Opo LEFT JUSTIFIED ......................................................................................................... 47 9.2.4. Opo SUBSTRING.................................................................................................................. 48 9.2.5. Opo IGNORE........................................................................................................................ 48 9.2.6. Opo REMAINDER ................................................................................................................ 49 9.2.7. Opo RETAINED WITH DELIMITERS ................................................................................. 49 9.3. INSTRUO COMPRESS.................................................................................................................. 50 9.3.1. Opo DELIMITER(S) ............................................................................................................. 50 9.3.2. Opo LEAVING NO SPACE................................................................................................... 51 9.3.3. Opo NUMERIC..................................................................................................................... 52 9.4. CONCATENAO COM HFEN ............................................................................................................ 52 10. VARIVEIS E CONSTANTES ........................................................................................................ 52

10.1. VARIVEIS DE SISTEMA ................................................................................................................ 52 10.1.1. Variveis Date .......................................................................................................................... 56 10.1.2. Variveis Time.......................................................................................................................... 56 10.2. OPERAES ARITMTICAS COM VARIVEIS DATE E TIME ............................................................ 56 10.3. MOVIMENTAO COM MSCARA DE EDIO DATE E TIME .......................................................... 57 10.4. VARIVEL LGICA ........................................................................................................................ 57 11. 12. 13. 14. FUNES MATEMTICAS ........................................................................................................... 58 INSTRUO MASK ......................................................................................................................... 59 INSTRUO IF CAMPO IS... ......................................................................................................... 60 INSTRUO MOVE......................................................................................................................... 61 OPO EDITED ........................................................................................................................... 61 OPO LEFT JUSTIFIED ............................................................................................................ 62 OPO RIGHT JUSTIFIED ......................................................................................................... 62 OPO BY NAME........................................................................................................................ 63 OPO BY POSITION ................................................................................................................. 64 OPO SUBSTRING.................................................................................................................... 64 OPO ALL .................................................................................................................................. 65

14.1. 14.2. 14.3. 14.4. 14.5. 14.6. 14.7. 15. 16.

CONSIDERAES DECIDE X IF .................................................................................................. 66 COMANDOS DE ACESSO AO BANCO DE DADOS ADABAS.................................................. 67

16.1. FIND .............................................................................................................................................. 67 16.1.1. Processo de limite (ALL/operando1)........................................................................................ 67 16.1.2. Find First, Find Number, Find Unique .................................................................................... 68 16.1.3. View-name ................................................................................................................................ 68 16.1.4. Clusula PASSWORD .............................................................................................................. 69 16.1.5. Clusula CIPHER .................................................................................................................... 69 16.1.6. Clusula WITH......................................................................................................................... 70
16.1.6.1. 16.1.6.2. Critrio de bsico de pesquisa.......................................................................................................... 71 Critrio de pesquisa utilizando conexo........................................................................................... 72

16.1.7. Uso de descritores .................................................................................................................... 72 16.1.8. Sub-descritores, Super-descritores e Descritores Fonticos .................................................... 73 16.1.9. Uso de Descritores contidos dentro de um Array do DB ..................................................... 73 16.1.10. Clusula COUPLED ............................................................................................................ 74 16.1.11. Clusula SORTED BY .......................................................................................................... 75 16.1.12. Clusula RETAIN ................................................................................................................. 76 Pgina 5 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

16.1.12.1. 16.1.12.2.

Acessos/Atualizaes por outros usurios ....................................................................................... 77 Restries......................................................................................................................................... 77

16.1.13. 16.1.14.
16.1.14.1. 16.1.14.2. 16.1.14.3.

Clusula WHERE ................................................................................................................. 77 Clusula IF NO RECORDS FOUND ................................................................................... 78


Valores da Base de Dados................................................................................................................ 79 Avaliao das Funes do Sistema NATURAL .............................................................................. 79 Restries......................................................................................................................................... 79

16.1.15. 16.1.16. 16.1.17.


16.1.17.1.

Variveis do Sistema Disponveis com FIND....................................................................... 79 Vrias instrues FIND........................................................................................................ 80 FIND NUMBER.................................................................................................................... 81
Restries......................................................................................................................................... 81

16.1.18. Variveis do Sistema Disponveis com FIND....................................................................... 82 16.2. READ ............................................................................................................................................. 82 16.2.19. Processo de limite (operando1)............................................................................................ 82 16.2.20. View-name ............................................................................................................................ 83 16.2.21. PASSWORD/CHIPER .......................................................................................................... 83 16.2.22. Especificao de Seqncias ................................................................................................ 83 16.2.23. Clusula WHERE ................................................................................................................. 85 16.3. COMBINAO DE INSTRUES READ E FIND.............................................................................. 85 16.4. GET ............................................................................................................................................... 86 16.5. HISTOGRAM .................................................................................................................................. 87 16.5.1. Limite do processo de LOOP (operand1)................................................................................. 87 16.5.2. Clusula PASSWORD .............................................................................................................. 88 16.5.3. Clusula STARTING/ENDING................................................................................................. 88 16.5.4. Clusula WHERE ..................................................................................................................... 88 16.5.5. Variveis do Sistema Disponveis com HISTOGRAM.............................................................. 88 16.6. STORE ........................................................................................................................................... 89 16.6.1. View-name ................................................................................................................................ 89 16.6.2. Clusula PASSWORD/CIPHER ............................................................................................... 89 16.6.3. Clusula USING/GIVING NUMBER ....................................................................................... 89 16.6.4. Varivel do Sistema *ISN ......................................................................................................... 89 16.7. UPDATE ......................................................................................................................................... 90 16.7.1. Restries ................................................................................................................................. 90 16.7.2. Notao de Referncia.............................................................................................................. 90 16.7.3. Hold Status ............................................................................................................................... 90 16.8. DELETE ......................................................................................................................................... 91 16.8.4. Restries ................................................................................................................................. 91 16.8.5. Notao de Referncia.............................................................................................................. 91 16.8.6. Hold Status ............................................................................................................................... 92 16.9. END TRANSACTION ....................................................................................................................... 92 16.10. BACKOUT TRANSACTION .............................................................................................................. 92 17. READ WORK FILE .......................................................................................................................... 93 WORK-FILE-NUMBER..................................................................................................................... 93 OPO ONCE ............................................................................................................................... 93 AT END OF FILE ........................................................................................................................ 93

17.1. 17.2. 17.3. 18.

WRITE WORK FILE........................................................................................................................ 94 WORK-FILE-NUMBER..................................................................................................................... 94

18.1. 19.

PERFORMANCE DE APLICAES ............................................................................................. 95

19.1. PRINCPIOS BSICOS DE PROGRAMAO NATURAL 2 ................................................................... 95 19.2. OTIMIZAO DE COMANDOS DE ACESSO AO ADABAS................................................................ 95 19.2.1. Estudo de alguns casos freqentemente encontrados em PGMs .............................................. 95
19.2.1.1. Views ............................................................................................................................................... 95

Pgina 6 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

19.2.1.2. 19.2.1.3. 19.2.1.4. 19.2.1.5. 19.2.1.6. 19.2.1.7. 19.2.1.8. 19.2.1.9. 19.2.1.10.

Pesquisa de Existncia ..................................................................................................................... 96 Leitura de um nico registro com condio chave = valor .............................................................. 96 Leitura de todos os registros com condio chave = valor .............................................................. 97 Leitura dos registros com condio chave = faixa-valores............................................................... 97 Leitura dos registros com condio chave=faixa-valores, classificados por chave .......................... 97 Seleo de Registros Segundo Condio Complexa ........................................................................ 98 Leitura batch de todos os registros de um arquivo ........................................................................... 98 Utilizao dos comandos GET e GET SAME ................................................................................. 99 Utilizao de limites ........................................................................................................................ 99

19.3. CICLO DE ATUALIZAO OPES E RECOMENDAES............................................................. 100 19.3.1. Batch....................................................................................................................................... 100 19.3.2. On-line.................................................................................................................................... 100 19.4. TCNICAS DE PROGRAMAO QUE MELHORAM O DESEMPENHO.................................................. 101 19.5. ACESSO TIMO A CAMPOS MLTIPLOS E PERIDICOS .................................................................. 101 19.6. PROCESSAMENTO DE REPEAT E FOR........................................................................................ 102 19.7. PROCESSAMENTO DE ACCEPT E REJECT ................................................................................. 103 19.8. PRECISO EM OPERAES ARITMTICAS..................................................................................... 103 20. 21. 22. EXEMPLO DE GRFICO EM NATURAL.................................................................................. 105 BIBLIOGRAFIA .............................................................................................................................. 108 LICENA PBLICA GERAL GNU.............................................................................................. 109 LICENA PBLICA GERAL GNU (TRADUO)............................................................................ 109 GNU FREE DOCUMENTATION LICENSE (ORIGINAL EM INGLS) .................................................. 115

22.1. 22.2.

Pgina 7 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

1. DEFINIO DE VARIVEIS
1.1. Tipo de Dados
Os tipos de dados existentes em Natural so:
#A1 #A2 #A3 #A4 #A6 #INT1 #INT2 #INT4 #FLT4 #FLT8 #DATE #TIME #SWITCH (A10) (B4) (P4) (N7.2) (P7.2) (I1) (I2) (I4) (F4) (F8) (D) (T) (L) /* /* /* /* /* /* /* /* /* /* /* /* /* 10 posies alfanumricas. 4 posies binrias. Numrico compactado, 4 posies e 1 sinal. Numrico descompactado, 7 posies e 2 decimais. Numrico compactado, 7 posies e 2 decimais + o sinal. Inteiro, 1 byte. Inteiro, 2 bytes. Inteiro, 4 bytes. Ponto flutuante, 4 bytes. Ponto flutuante, 8 bytes. Date (Formato e tamanho interno P6). Time (Formato e tamanho interno P12). Lgico, 1 byte (TRUE or FALSE).

Os tipos de dados abaixo contm definio invlida. #A5 #INT3 #INT5 #FLT2 (N7.) (I3) (I5) (F2) /* /* /* /* definio definio definio definio invlida!!! invlida!!! invlida!!! invlida!!!

1.2. Init
Podemos inicializar uma varivel com o valor de uma varivel de sistema do Natural.

0010 0020 0030 0040 0050 Resultado: #DATA -------18112004

DEFINE DATA LOCAL 1 #DATA (D) INIT <*DATX> END-DEFINE DISPLAY #DATA END

Pgina 8 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

A opo FULL LENGTH preenche um campo alfanumrico com um caracter especificado. Se mltiplos caracteres so especificados, o grupo repetido at que o campo fique completamente preenchido. A opo LENGTH n preenche as n primeiras posies de um campo com o caracter ou grupo de caracteres especificados. Estas opes tambm so vlidas para estruturas de ARRAY.

0010 0020 0030 0040 0050 Resultado:

DEFINE DATA LOCAL 1 #CAMPO (A25) INIT FULL LENGTH <'*'> END-DEFINE DISPLAY #CAMPO END

#CAMPO ------------------------*************************

0010 0020 0030 0040 0050 Resultado:

DEFINE DATA LOCAL 1 #CAMPO (A25) INIT LENGTH 6 <'*'> END-DEFINE DISPLAY #CAMPO END

#CAMPO ------------------------******

1.3. Const
Define o contedo de uma varivel como uma constante. O contedo desta varivel no muda de valor durante a execuo do programa. Exemplo:

0010 0020 0030 0040

DEFINE DATA LOCAL 1 #VAR (N1) CONST<5> END-DEFINE END

Pgina 9 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

1.4. Arrays
Utilize arrays para armazenar tabelas na memria, onde a grande maioria dos mdulos ter acesso. Exemplos de definio de Array:

#TAB1(A5/6) #TAB2(A5/1:7,1:7) #TAB3(A5/1:4,1:4,1:4)

/* Array de uma dimenso /* Array de duas dimenses /* Arrau de trs dimenses

Uma varivel definida como array pode ser referenciada da seguinte maneira:

#TABX(*) #TABY(*,*) #TABX(1) #TAB(5,#FIELDX)

Deve-se escrever rotinas padronizadas para armazenar e pesquisar tabelas. Para qualquer referncia a uma tabela genrica por parte da rotina padronizada, pode utilizar a tcnica de parametrizao de dimenses:

0010 0020 0030 0040 0050

DEFINE DATA LOCAL 1 #T (N3) CONST <50> 1 #A1 (A3/#T) 1 #A2 (I4/#T) END-DEFINE

Para inicializao de arrays bidimensionais e tri-dimensionais utilize a notao V. Exemplo:

0010 0020 0030 0040 0050 0070 0080 0100 0110

DEFINE DATA LOCAL 1 #VAR1 (A1/2,2) INIT (1,V) <'A','B'> 1 #VAR2 (N5/2,3) INIT (1,2) <200> 1 #VAR3 (A1/4,3) INIT (V,2:3) <'W','X','Y','Z'> END-DEFINE WRITE NOTITLE '=' #VAR1 (1,1) '=' #VAR1 (1,2) / '=' #VAR1 (2,1) '=' #VAR1 (2,2) WRITE /// '=' #VAR2 (1,1) '=' #VAR2 (1,2) '=' #VAR2 (1,3) / '=' #VAR2 (2,1) '=' #VAR2 (2,2) '=' #VAR2 (2,3)

Pgina 10 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

0130 0140 0150 0160 0180 Resultado:

WRITE /// WRITE WRITE WRITE END

'=' #VAR3 (1,1) / '=' #VAR3 (2,1) / '=' #VAR3 (3,1) / '=' #VAR3 (4,1)

'=' '=' '=' '='

#VAR3 #VAR3 #VAR3 #VAR3

(1,2) (2,2) (3,2) (4,2)

'=' '=' '=' '='

#VAR3 #VAR3 #VAR3 #VAR3

(1,3) (2,3) (3,3) (4,3)

#VAR1: A #VAR1: B #VAR1: #VAR1: #VAR2: #VAR2: #VAR3: #VAR3: #VAR3: #VAR3: 0 #VAR2: 0 #VAR2: #VAR3: #VAR3: #VAR3: #VAR3: W X Y Z #VAR3: #VAR3: #VAR3: #VAR3: 200 #VAR2: 0 #VAR2: W X Y Z 0 0

Exemplo de inicializao de intervalos de array com diferentes valores:

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 Resultado: A A A B B C C D D D E E E F F

DEFINE DATA LOCAL 1 #VAR1 (A1/3,5) INIT (1,1:3) <'A'> (2,1:2) <'C'> (3,1:3) <'E'> END-DEFINE WRITE #VAR1(1,*) / #VAR1(2,*) / #VAR1(3,*) END (1,4:5) <'B'> (2,3:5) <'D'> (3,4:5) <'F'>

Exemplo de inicializao de ocorrncias do array com o mesmo valor:

0010 0020 0060 0070 0080 0090 0100 Resultado: A A A A A A A A A A

DEFINE DATA LOCAL 1 #VAR1 (A1/3,5) INIT ALL <'A'> END-DEFINE WRITE #VAR1(1,*) / #VAR1(2,*) / #VAR1(3,*) END

Pgina 11 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

A A A A A

1.5. Inicializao de Arrays no Editor de Dados


Local LCARRO Library XXXPRG Command I T L Name All - -------------------------------1 #PLACA_DO_CARRO 1 #MODELO_CARRO 1 #ANO_CARRO DBID 29 FNR 4 > +

F Leng Index/Init/EM/Name/Comment - ---- --------------------------------A 7 A 15 N 4 (10)

----- Current Source Size: 145

Free: 100800 -------------------- S 3

L 1

Local LCARRO Library XXXPRG Command I T L Name All - -------------------------------1 #PLACA_DO_CARRO 1 #MODELO_CARRO . e #ANO_CARRO

DBID

29 FNR

4 > +

F Leng Index/Init/EM/Name/Comment - ---- --------------------------------A 7 A 15 N 4 (10)

----- Current Source Size: 145

Free: 100800 -------------------- S 3

L 1

Com a execuo do comando de linha .E, uma tela com um menu de opes exibida:

08:53:10

***** EDIT FIELD ***** - Initial Values and Edit Mask -

17/11/2004

Pgina 12 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

Local

LCARRO

Library XXXPRG

DBID

29 FNR

Code ----S F E P D ? . ----Code ?

Function -----------------------------Single Value Initialization Free Mode Initialization Edit Mask Definition Parameter Type Definition Delete all Definitions Help Exit -----------------------------for Field: #ANO_CARRO(N4/10)

Definition ---------no no no no

----------

A opo S abre uma tela para preenchimento dos valores de inicializao do ARRAY, por ocorrncia, como segue:

08:53:10 Local Command LCARRO +

***** EDIT FIELD ***** - Initial Values - Single Mode Library XXXPRG DBID

17/11/2004 29 FNR 4

Index #ANO_CARRO(N4/10) ---------------------- -------------------------------------------------(1) (2) (3) (4) (5) (6) (7) (8) (9) (10)

08:55:20 Local Command LCARRO +

***** EDIT FIELD ***** - Initial Values - Single Mode Library XXXPRG DBID

17/11/2004 29 FNR 4

Index ---------------------(1) (2) (3) (4) (5) (6) (7) (8) (9) (10)

#ANO_CARRO(N4/10) -------------------------------------------------1995 1996 1997 1998 1999 2000 2001 2002 2003 2004

Pgina 13 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

Na volta ao editor de Data Area, o campo estar com o label I na coluna I, mostrando que este campo tem inicializao de valores.

Local LCARRO Library XXXPRG Command I T L Name All - -------------------------------1 #PLACA_DO_CARRO 1 #MODELO_CARRO I 1 #ANO_CARRO

DBID

29 FNR

4 > +

F Leng Index/Init/EM/Name/Comment - ---- --------------------------------A 7 A 15 N 4 (10)

----- Current Source Size: 145

Free: 100840 -------------------- S 3

L 1

O comando GENERATE ou GEN gera um fonte do tipo COPYCODE com a definio do ARRAY e sua inicializao, como segue:

Local LCARRO Library XXXPRG Command gen I T L Name All - -------------------------------1 #PLACA_DO_CARRO 1 #MODELO_CARRO I 1 #ANO_CARRO

DBID

29 FNR

4 > +

F Leng Index/Init/EM/Name/Comment - ---- --------------------------------A 7 A 15 N 4 (10)

----- Current Source Size: 145

Free: 100840 -------------------- S 3

L 1

> All

> + Copycode Lib XXXPRG ....+....1....+....2....+....3....+....4....+....5....+.Mode Reporting..

Pgina 14 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150 0160 0170 0180 0190 0200

DEFINE DATA LOCAL 1 #PLACA_DO_CARRO(A7) 1 #MODELO_CARRO(A15) 1 #ANO_CARRO(N4/10) INIT (1)<1995> (2)<1996> (3)<1997> (4)<1998> (5)<1999> (6)<2000> (7)<2001> (8)<2002> (9)<2003> (10)<2004> END-DEFINE

....+..Current Source Size: 268 Char. Free: 100677 ...+... S 16

L 1

Para transformar este copycode em programa, basta utilizar o comando SET TYPE P.

> set type p > + Copycode Lib XXXPRG All ....+....1....+....2....+....3....+....4....+....5....+.Mode Reporting.. 0010 DEFINE DATA LOCAL 0020 1 #PLACA_DO_CARRO(A7) 0030 1 #MODELO_CARRO(A15) 0040 1 #ANO_CARRO(N4/10) 0050 INIT 0060 (1)<1995> 0070 (2)<1996> 0080 (3)<1997> 0090 (4)<1998> 0100 (5)<1999> 0110 (6)<2000> 0120 (7)<2001> 0130 (8)<2002> 0140 (9)<2003> 0150 (10)<2004> 0160 END-DEFINE 0170 0180 0190 0200 ....+..Current Source Size: 268 Char. Free: 100677 ...+... S 16 L 1

> All 0010 0020 0030 0040 0050 0060 0070 0080 0090 0100

> + Program Lib XXXPRG ....+....1....+....2....+....3....+....4....+....5....+.Mode Reporting.. DEFINE DATA LOCAL 1 #PLACA_DO_CARRO(A7) 1 #MODELO_CARRO(A15) 1 #ANO_CARRO(N4/10) INIT (1)<1995> (2)<1996> (3)<1997> (4)<1998> (5)<1999>

Pgina 15 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

0110 (6)<2000> 0120 (7)<2001> 0130 (8)<2002> 0140 (9)<2003> 0150 (10)<2004> 0160 END-DEFINE 0170 0180 0190 0200 ....+..Current Source Size: 268 Char. Free: 100677 ...+... S 16

L 1

1.6. Inicializao de Variveis de Controle no Editor de Dados

Local LCARRO Library XXXPRG Command I T L Name All - -------------------------------1 #PLACA_DO_CARRO 1 #MODELO_CARRO 1 #ANO_CARRO . e #CV_ANO_CARRO

DBID

29 FNR

4 > +

F Leng Index/Init/EM/Name/Comment - ---- --------------------------------A 7 A 15 N 4 (10) C

----- Current Source Size: 185

Free: 100912 -------------------- S 4

L 1

09:04:00

***** EDIT FIELD ***** - Initial Values and Edit Mask LCARRO Library XXXPRG DBID

17/11/2004

Local

29 FNR

Code ----S F E P D ? . ----Code s

Function -----------------------------Single Value Initialization Free Mode Initialization Edit Mask Definition Parameter Type Definition Delete all Definitions Help Exit -----------------------------for Field: #CV_ANO_CARRO(C)

Definition ---------no no no no

----------

Pgina 16 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

09:04:00

***** EDIT FIELD ***** - Initial Values and Edit Mask LCARRO LIBRARY XXXPRG DBID

17/11/2004

Local

29 FNR

I _ _ _ _ _ _ _ _ -

Attribute -------------------D Default Intensity N Non-Displayable B Blinking I Intensified C Italic V Reversed Video U Underlined P Write Protection --------------------

I _ _ _ _ _ _ _ -

Colour -----------NE Neutral BL Blue RE Red GR Green YE Yellow PI Pink TU Turquoise ------------

Mark attributes and/or colour for field: and hit ENTER, to return to the editor.

09:04:00

***** EDIT FIELD ***** - Initial Values and Edit Mask LCARRO LIBRARY XXXPRG DBID

17/11/2004

Local

29 FNR

I _ _ _ x _ _ _ _ -

Attribute -------------------D Default Intensity N Non-Displayable B Blinking I Intensified C Italic V Reversed Video U Underlined P Write Protection --------------------

I _ _ _ _ x _ _ -

Colour -----------NE Neutral BL Blue RE Red GR Green YE Yellow PI Pink TU Turquoise ------------

Mark attributes and/or colour for field: and hit ENTER, to return to the editor.

09:05:40 Local Command LCARRO +

***** EDIT FIELD ***** - Initial Values - Attributes Library XXXPRG

17/11/2004 DBID 29 FNR 4

#CV_ANO_CARRO(C/10) Index ---------------------(1) (2) (3) (4) (5) (6) (7) (8) Attributes B I C _ x _ _ _ _ _ x _ _ _ _ _ x _ _ _ _ _ x _ _ _ _ Colours NE BL RE GR YE PI TU _ x _ _ _ _ _ _ _ x _ _ _ _ _ _ _ x _ _ _ _ _ _ _ x _ _ _ _ _ _ _ x _ _ _ _ _ _ _ x _ _ _ _ _ x _ _ _ _ _ x _ _

D _ _ _ _ _ _ _ _

N _ _ _ _ _ _ _ _

V _ _ _ _ _ _ _ _

U _ _ _ _ _ _ _ _

P _ _ _ _ _ _ _ _

Pgina 17 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

(9) (10)

_ _

_ _

_ _

x _

_ _

_ _

_ _

_ _

_ _

_ _

_ x

x _

_ _

_ _

_ _

Local LCARRO Library XXXPRG Command I T L Name All - -------------------------------1 #PLACA_DO_CARRO 1 #MODELO_CARRO 1 #ANO_CARRO I 1 #CV_ANO_CARRO

DBID

29 FNR

4 > +

F Leng Index/Init/EM/Name/Comment - ---- --------------------------------A 7 A 15 N 4 (10) C (10)

----- Current Source Size: 208

Free: 100489 -------------------- S 4

L 1

> All 0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150 0160 0170 0180 0190 0200

> + Program Lib XXXPRG ....+....1....+....2....+....3....+....4....+....5....+.Mode Structured. DEFINE DATA LOCAL 1 #PLACA_DO_CARRO(A7) 1 #MODELO_CARRO(A15) 1 #ANO_CARRO(N4/10) INIT (1)<1995> (2)<1996> (3)<1997> (4)<1998> (5)<1999> (6)<2000> (7)<2001> (8)<2002> (9)<2003> (10)<2004> 1 #CV_ANO_CARRO(C/10) INIT (1)<(AD=I CD=BL)> (2)<(CD=RE)> (3)<(AD=I CD=GR)> (4)<(CD=YE)> (5)<(AD=I CD=PI)> (6)<(CD=TU)> (7)<(AD=I CD=PI)> (8)<(CD=YE)> (9)<(AD=I CD=GR)> (10)<(CD=RE)> END-DEFINE END

....+..Current Source Size: 441 Char. Free: 100520 ...+... S 14

L 1

1.7. AIVs Application Independent Variables


Permitidas somente no modo estruturado, estas variveis devem ser definidas com o prefixo +, e devem estar na clusula INDEPENDENT da instruo DEFINE DATA. Pgina 18 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

A clusula INDEPENDENT deve ser codificada por ltimo dentro da estrutura do DEFINE DATA. Podem ser utilizadas para comunicao entre programas que tenham GDAs (GLOBAL DATA AREA) diferentes. Isto porque, quando um programa chamado via FETCH e sua GDA diferente da GDA do chamador, os dados da GDA do programa chamador so perdidos, permanecendo as AIVs definidas nos dois programas.

2. MAPAS
2.1. Consideraes Bsicas
Todas as aplicaes que utilizem Mapas e Windows devem estabelecer um padro de desenho, preenchimento e/ou apresentao, de forma a facilitar o trabalho do usurio. Estes padres, em conjunto com outros critrios tcnicos, serviro para tomar a aplicao produtiva para o usurio e com performance para o ambiente. No caso de Mapas recomenda-se padronizar o seguinte: Ttulos Sub-Ttulos Rguas de PFs e suas funes Linha de mensagens Mensagens Texto que precede o incio da rea de preenchimento por campo.

Esta padronizao proporciona ganhos de performance, pois mapas quase iguais exigem um mnimo de transmisso e de I/O de terminal. Outro importante mecanismo, que melhora a performance e facilita as atividades dos usurios a utilizao de comandos diretos, evitando a navegao excessiva por vrios menus. A participao do usurio final muito importante no desenho de telas que contenham um grande nmero de campos de preenchimento. A ordem de colocao destes pode favorecer, e muito, o trabalho operacional, minimizando a freqncia de erros e assim melhorando a performance. No caso de Windows as caractersticas bsicas so: como: Pgina 19 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Pouca informao Facilidade na comunicao com o usurio Muito utilizada para Help de preenchimento de campos.

Algumas padronizaes criadas para os mapas devem ser tambm utilizadas para windows,

Curso Avanado de Natural

Ttulos Rguas de PFs e suas funes Linha de mensagens Mensagens

Deve-se tomar cuidado ao decidir por uma windows, levando-se em conta o percentual de espao que ela ir ocupar na tela. Para os casos em que se exibe windows sobre window (pop-up), recomenda-se que todas tenham o mesmo tamanho e sejam exibidas cobrindo umas as outras apenas parcialmente, para que o usurio saiba qual foi a sua seqncia de navegao. As windows contribuem para uma boa performance de aplicao, uma vez que utilizam buffers menores. O tamanho da linha de mensagens de uma window fica restrito ao tamanho da mesma, criando-se, s vezes, dificuldades de comunicao com o usurio. Se mltiplas windows esto visveis na tela fsica, somente a ltima se encontra ativa.

2.2.

Definio de Janelas

SIZE

Tamanho da window.

Pgina 20 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

AUTO

o tamanho da window determinado automaticamente pelo Natural. Para isso, so

utilizados alguns dados, como segue: O nmero de linhas da window ser o nmero de linhas do input, acrescido, se for o caso, de linha de PF-KEYs e linha de mensagem. O nmero de colunas da window determinado pelo tamanho da linha do input. O Natural procura, do comeo ao fim da linha, bytes significativos. Isto pode causar a truncagem de um campo de input ou output modificvel. Para que isso no acontea, deve-se colocar um caracter texto no fim da linha onde esto estes campos, ou informar explicitamente o tamanho da window no comando SIZE op1 * op2.

QUARTER OP1 * OP2

o tamanho da window ser da tela fsica. o nmero de linhas da window determinado pelo op1, e o nmero de colunas pelo

op2. Devem ser inteiros. Se uma window contiver frame, o tamanho especificado ser inclusive com o frame. O tamanho mnimo possvel duas linhas por dez colunas sem frame, e a quatro linhas por treze colunas com frame. O tamanho mximo ser o tamanho definido para a tela fsica. Se a clusula SIZE for omitida, o SIZE AUTO ser aplicado como default. BASE determina a posio da window na tela fsica. posiciona o topo esquerda da window na posio corrente do cursor. Se o

CURSOR

tamanho da window impossibilita a sua colocao na posio do cursor, o Natural tenta ajust-la para uma posio possvel. TOP / BOTTOM / LEFT / RIGHT posiciona a window no topo esquerda, rodap

esquerda, topo direita, rodap direita, respectivamente, na tela fsica. OP3 / OP4 posiciona o topo esquerda da window na especificao de linha/coluna da tela

fsica. O nmero da linha determinado pelo op3, e a coluna pelo op4. Nenhum dos operandos pode ter dgito decimal. Se o tamanho da window impossiblitar a colocao na posio da tela fsica determinada, ser retornada uma mensagem de erro. Se a clusula BASE for omitida, o BASE CURSOR ser aplicado como default. REVERSED (CD=background-color) possveis cores so: BL GR NE PI RE TU YE = = = = = = = Azul Verde Neutro Rosa Vermelha Azul Claro Amarela mostra a rea definida para a janela em vdeo reverso. As

Pgina 21 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

TITLE

com esta clusula poder ser definido um cabealho para a window. O ttulo especificado

(op5) ser exibido centralizado na linha de frame do topo da window. Este ttulo pode ser definido como texto entre apstrofes, ou com o contedo de uma varivel auxiliar. Se o ttulo for maior que a linha da window, ser truncado. O ttulo s ser exibido se a window estiver com frame, caso contrrio ser ignorado. FRAMED por default, se esta clusula for omitida, a window ter frame. Se for especificado

FRAMED OFF, todas as clusulas definidas para o frame (ttulo e informao de posio) sero desligadas. POSITION OFF no exibe informao de posio. Se a clusula no for especificada, ser

mostrado na linha do frame, direita, a posio da window na pgina lgica.

SET WINDOW nome window ou SET WINDOW OFF

O comando DEFINE WINDOW apenas especifica a janela. Para mostr-la, utiliza-se o comando SET WINDOW nome-da-window. Para desligar s emitir o comando SET WINDOW OFF. Exemplo:

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140

DEFINE DATA LOCAL 1 #I (I2) END-DEFINE * DEFINE WINDOW TESTE-JANELA SIZE 15 * 50 BASE BOTTOM RIGHT FRAMED ON * SET WINDOW 'TESTE-JANELA' FOR #I 1 5 WRITE NOTITLE 'TESTE JANELA' #I END-FOR END

2.3.

Atributos Dinmicos
Os atributos dinmicos so definidos com o parmetro DY. Utiliza caracteres especiais para indicar o incio e o fim de uma string que ter atributos

diferentes dentro de um texto. Pgina 22 de 120


Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

Possibilita o controle dinmico de: Tamanho da string de um texto na tela; Intensificao; Proteo especial do texto designado.

$XXXXXXXX Politec Informtica Ltda. $MMMMMMMMMM $XXXXXXXX @Cadastro@de@Funcionrios $XXXXXXXX ----------------------- Funcionrios - Incluir ------------------------------Cdigo................:.eXXX$XXX Nome..................:&XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Endereo..............:&XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

001

$XXXXXXXXX&X$XXXXXXXXXXXXXX -----------------------------------------------------------------------------@F1 Ajuda @F3 Sai @F4 Seleciona(+) @F5 Encerra --010---+----+----+---030---+----+----+---050---+----+----+---070---+----

Fld #CD-FUNC Fmt A6 ------------------------------------------------------------------------------AD= MDLT'_'___ ZP= SG= HE= +____________________ Rls 0 AL= _____ CD= __ CV= ________________________________ Mod User PM= __ DF= DY= ?_____________________________ EM= _______________________________________________________________ 001 --010---+----+----+---030---+----+----+---050---+----+----+---070---+---$XXXXXXXX Politec Informtica Ltda. $MMMMMMMMMM $XXXXXXXX @Cadastro@de@Funcionrios $XXXXXXXX ----------------------- Funcionrios - Incluir ------------------------------Cdigo................:.EXXXXX$XXX Nome..................:&XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Endereo..............:&XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--HELP Mset Exit <--- ---> -+ < > Let

15:42:20 Design Dynamic Attributes 19/11/2004 ------------------------------------------------------------------------------#_ Specify escape character D Default/Dark ....... _ (special character or hex value) I Intensified ........ x B Blinking ........... _ and select one attribute N Nondisplay ......... _ V Reversed Video ..... _ U Underlined ......... _ C Cursive/Italic ..... _ and/or one color NE RE Neutral ............ _ Red ................ _

Pgina 23 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

BL GR YE PI TU

Blue ............... Green .............. Yellow ............. Pink ............... Turquoise ..........

x _ _ _ _

and/or write protection P Protect ............ _ ------------------------------------------------------------------------------@_ to finish specify stop character DY= Fld #CD-FUNC Fmt A6 ------------------------------------------------------------------------------AD= MDLT'_'___ ZP= SG= HE= +____________________ Rls 0 AL= _____ CD= __ CV= ________________________________ Mod User PM= __ DF= DY= #BLI@_________________________ EM= _______________________________________________________________ 001 --010---+----+----+---030---+----+----+---050---+----+----+---070---+---$XXXXXXXX Politec Informtica Ltda. $MMMMMMMMMM $XXXXXXXX @Cadastro@de@Funcionrios $XXXXXXXX ----------------------- Funcionrios - Incluir ------------------------------Cdigo................:.EXXXXX$XXX Nome..................:&XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Endereo..............:&XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--HELP Mset Exit <--- ---> -+ < > Let

2.4.

Varivel de Controle
Alm de proporcionar definio dinmica de atributos para o campo, a varivel de controle

serve tambm para checar se algum campo sofreu alguma modificao.

IF #CV-MAPA MODIFIED Ou IF #CV-MAPA NOT MODIFIED

Poder ser verdadeiro ou falso, dependendo se o(s) campo(s) for(em) modificado(s) aps a transmisso para a tela do terminal. A definio do campo #CV-MAPA na profile do mapa permite testar se houve alguma alterao em qualquer campo do mapa.

15:52:04 Delimiters -----------------

Define Map Settings for MAP Format ---------------------------

19/11/2004 Context --------------------------

Pgina 24 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

Cls Att CD T D T I A D A I A N M D M I O D O I

Del BLANK @ _ ) & : $ (

Page Size ...... Line Size ...... Column Shift ... Layout ......... dynamic ....... Zero Print ..... Case Default ... Manual Skip .... Decimal Char ... Standard Keys .. Justification .. Print Mode .....

23 79 0 (0/1) LAYOUT__ N (Y/N) N (Y/N) UC (UC/LC) N (Y/N) , N (Y/N) L (L/R) __

Device Check .... ________ WRITE Statement _ INPUT Statement X Help ____________________ as field default N (Y/N)

Automatic Rule Rank 1 Profile Name .... SYSPROF Filler Characters -----------------------Optional, Partial .... Required, Partial .... Optional, Complete ... Required, Complete ...

Control Var .... #CV-MAPA

Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help Exit Let

2.5.

Regras de Validao
So blocos de instrues Natural que podem ser incorporados a uma varivel do mapa ou

varivel de sistema *PF-KEY. As aplicaes que utilizam Regras de Validao possuem uma estrutura mais legvel, pois a validao dos campos efetuada pelo mapa, ficando no programa apenas o processo principal. As caractersticas principais do uso das Regras de Validao so: Programas mais legveis; Facilidades de manuteno; Padro de consistncia; Consistncias logicamente independentes, com nveis de validao bem definidos; Facilidades no desenvolvimento.

As regras de validao possuem uma ordem de processamento: Rank; Posio do campo na tela. A ordem da esquerda para a direita e de cima para baixo. As PF-KEYs so consideradas como primeira posio.

Algumas consideraes sobre o Rank: Pode ser de 0 (primeiro) a 99 (ltimo); Vrias regras podem ter o mesmo Rank; O Rank das regras pode ser alterado pelo comando P=nn.

Pgina 25 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

Eles so invocados por: ..p para regras relacionadas s PF-KEYs; .p no campo para regras relacionadas ao campo; p digitado na coluna CMD da edio estendida de campo (Extended Field Edting Summary).

O & pode substituir o nome de uma varivel nas regras. Pode tambm substituir o nome da view (qualificador) de um campo de banco de dados nas regras. As regras podem ser removidas via comando UNLINK. A instruo REINPUT deve ser codificada sempre que possvel dentro das Regras de Validao, pois, desta forma seu tempo de processamento reduzido. Esta instruo num programa pode provocar mais de uma carga do mapa no Buffer Pool. Recomenda-se fazer o mximo de validaes no mapa. Porm, deve-se evitar validaes que envolvam acessos complexos Base de Dados.

3. PROGRAMAS
Os programas tem execuo independente, acionada pela digitao do nome do mdulo na linha de comando do Natural, ou atravs de chamadas FETCH. Devem sempre estar no primeiro nvel de execuo de um sistema, pois a partir deles que podemos dar incio s suas transaes. Podemos criar programas que sejam parte de uma grande funo (como se fosse uma subrotina) e sua execuo deve ser feita atravs de FETCH RETURN. Esta situao pode ocorrer se tivermos, por exemplo, uma funo que ora faa parte de uma opo de menu e, num outro ponto do sistema, seja parte de uma outra funo de menu onde termos ento um outro programa. Devemos ter como objetivo programas enxutos, legveis, modularizados, de forma tal que a manuteno seja rpida sem prejudicar a performance.

4. SUB-PROGRAMAS
So mdulos que no podem ser executados independentemente. Sua chamada atravs do comando CALLNAT. Os sub-programas devem utilizar a rea de dados global disponvel para resolver problemas complexos de armazenagem de dados em memria, j que no tem acesso aos dados globais ativos no sistema. Pgina 26 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

Normalmente utilizados como rotinas padronizadas que podem ser chamadas de qualquer ponto do sistema, os sub-programas tm como caracterstica favorvel o fato de no obrigarem a recatalogao dos mdulos que o referenciam em caso de alterao no seu processamento. Esta recatalogao s se faz necessrio se houver incluso e/ou excluso de campos na rea de parmetros do sub-programa (PARAMETER DATA AREA). A passagem de dados para os sub-programas muito eficiente, pois no h movimentao de campos, apenas o endereo em memria passado. H que considerar um OVERHEAD nas chamadas via CALLNAT, pois o Natural tem que controlar as reas dos objetos ativos, ocupando para isso uma parte da USIZE, e tambm a ordem de processamento do empilhamento ocasionado por vrias chamadas CALLNAT.

Programa Chamador: XXXPSOMA 0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 DEFINE DATA LOCAL 1 #NUM1 (N2) INIT<25> 1 #NUM2 (N2) INIT<35> 1 #SOMA (N5) END-DEFINE * CALLNAT 'XXXNSOMA' #NUM1 #NUM2 #SOMA * WRITE '=' #NUM1 / '=' #NUM2 // '=' #SOMA * END

Subprograma Chamado: XXXNSOMA 0010 0020 0030 0040 0050 0060 0070 0080 DEFINE DATA PARAMETER 1 #A (N2) 1 #B (N2) 1 #S (N5) END-DEFINE * #S := #A + #B END

Resultado: #NUM1: #NUM2: #SOMA: 25 35 60

5. SUB-ROTINA EXTERNA
Assim como o sub-programa, a sub-rotina externa no pode ser executada independentemente, pois deve ser acionada atravs do comando PERFORM. A grande novidade a passagem de parmetros no prprio comando PERFORM, o que s era possvel atravs da GDA (Global Data Area). Pgina 27 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

Os dados so recebidos na sub-rotina, atravs de uma PDA (Parameter Data Area) interna ou externa, onde os campos devero estar na mesma ordem, formato e tamanho. Igualmente aos subprogramas, no h movimentao de campos e somente o endereo passado.

Programa Chamador 0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 DEFINE DATA LOCAL 1 #NUM1 (N2) INIT<25> 1 #NUM2 (N2) INIT<35> 1 #SOMA (N5) END-DEFINE * PERFORM SOMA #NUM1 #NUM2 #SOMA * WRITE '=' #NUM1 / '=' #NUM2 // '=' #SOMA * END

Sub-Rotina Chamada 0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 DEFINE DATA PARAMETER 1 #NUM1 (N2) 1 #NUM2 (N2) 1 #SOMA (N5) END-DEFINE * DEFINE SUBROUTINE SOMA #SOMA := #NUM1 + #NUM2 END-SUBROUTINE * END

Resultado: #NUM1: #NUM2: #SOMA: 25 35 60

6. COPYCODE
So mdulos que so inseridos no cdigo objeto do fonte que est sendo catalogado, no causando, portanto, nenhum OVERHEAD em tempo de execuo. Os copycodes podem ser bem aproveitados para codificaes que se faam necessrias em vrios pontos do sistema, que tem a tendncia de no sofrerem alteraes com o passar dos tempos. A desvantagem est que cada vez que se altera o COPYCODE a mudana no reflete nos programas que usam COPYCODE at uma nova recatalogao.

Programa Principal

Pgina 28 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140

DEFINE DATA LOCAL 1 #NUM1 (N2) 1 #NUM2 (N2) 1 #SOMA (N5) END-DEFINE INCLUDE XXXC0001 * INPUT (AD=MDLT'_' ZP=OFF) 'ENTRE COM UM NMERO...:' #NUM1 / 'ENTRE COM OUTRO NMERO:' #NUM2 // '-' (27) / 'PF3 - SAI' * WRITE '=' #NUM1 / '=' #NUM2 * END

Copycode: XXXC0001 0010 SET KEY ALL 0020 SET KEY PF3 = 'XXXP9999' Programa acionado pela Copycode: XXXP9999 0010 TERMINATE 0020 END

7. HELPROUTINES
recomendvel que todo sistema on-line tenha informaes eficientes de help. Isto facilmente implementado com o uso de helproutines e helpmaps. Um helpmap criado atravs da opo H do menu principal do Editor de mapas e mantido como um outro mapa qualquer. Exemplo de helpmaps:

14:03:39 User XXXXXXX Code ---D E I H M S T W ? .

***** NATURAL MAP EDITOR ***** - Edit Map Function --------------------------------Field and Variable Definitions Edit Map Initialize new Map Initialize a new Help Map Maintenance of Profiles & Devices Save Map Test Map Stow Map Help Exit

24/11/2004 Library CURSO

Code .. H Command ===>

Name .. testeh__

Profile .. SYSPROF_

Pgina 29 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help Exit Test Edit

14:06:38 Delimiters ----------------Cls Att CD Del T D BLANK T I ? A D _ A I ) A N M D & M I : O D + O I (

Define Map Settings for HELPMAP Format --------------------------Page Size ...... 5 Line Size ...... 30 Column Shift ... 0 (0/1) Layout ......... ________ dynamic ....... N (Y/N) Zero Print ..... N (Y/N) Case Default ... UC (UC/LC) Manual Skip .... N (Y/N) Decimal Char ... , Standard Keys .. N (Y/N) Justification .. L (L/R) Print Mode ..... __ Control Var .... ________

24/11/2004

Context -------------------------Device Check .... ________ WRITE Statement _ INPUT Statement X Help as field default (Y/N) Position Line Col Automatic Rule Rank 1 Profile Name .... SYSPROF Filler Characters -----------------------Optional, Partial .... Required, Partial .... Optional, Complete ... Required, Complete ...

Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help Exit Let

............................................... ............................................... Exemplo de Helpmap ............................................... ............................................... ............................................... ............................................................................... ............................................................................... ............................................................................... ............................................................................... ............................................................................... ............................................................................... ............................................................................... ............................................................................... ............................................................................... ............................................................................... ............................................................................... ............................................................................... ............................................................................... ............................................................................... ............................................................................... ............................................................................... Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help Mset Exit Test Edit -+ Split < > Let 001 --010---+----+----+---030---+----+----+---050---+----+----+---070---+----

Exemplo de help de campos:

Pgina 30 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

14:03:39 User XXXXXXX Code ---D E I H M S T W ? .

***** NATURAL MAP EDITOR ***** - Edit Map Function --------------------------------Field and Variable Definitions Edit Map Initialize new Map Initialize a new Help Map Maintenance of Profiles & Devices Save Map Test Map Stow Map Help Exit

24/11/2004 Library CURSO

Code .. H

Name .. testeh__

Profile .. SYSPROF_

Command ===> Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help Exit Test Edit

Uma helproutine um tipo especial de sub-programa que pode ter acesso a rea de dados global. criada atravs do editor de programas, especificando-se SET TYPE HELPROUTINE.

7.1.

Utilizao
Fornecer informaes a respeito do contedo/preenchimento de um determinado campo. Exibir os valores possveis de serem colocados no campo, com opo de seleo de um dos valores apresentados. Apresentar informaes detalhadas de um campo, considerando o seu valor.

7.2.

Definio
Helpmaps menores que o mapa principal so automaticamente colocados em windows. Helpmaps menores que o mapa principal devem ser controlados pela rotina. O Natural controla automaticamente o posicionamento da window

7.3.

Passagem de Controle
O nome da rotina deve ser especificado: No nvel de mapa na profile do mapa No nvel de campo no parmetro HE do campo

A helproutine invocada: Pgina 31 de 120


Impresso em 13/12/2004 - 17:48

Desenvolvido por Luciano Perdigo

Curso Avanado de Natural

Digitando-se X no campo Pressionando-se a tecla de funo do help Com REINPUT USING HELP

7.4.

Passagem de Dados
Atravs da GDA (Global Data Area) O campo ao qual est se requerendo o Help enviado automaticamente Alm desse campo um outro pode ser passado. Deve ser especificado junto com o nome da rotina na profile do mapa no parmetro HE A helproutine deve ter uma PDA para ambos os campos

7.5.

Passagem de Parmetros
O campo que est associado a uma Helproutine no pode ser alterado na tela antes da

chamada da mesma, pois isso faria com que a helproutine no fosse acionada. Um campo que esteja na tela e tenha seu valor alterado antes da chamada da helproutine no ter esta alterao refletida na mesma, ainda que se faa parte da GDA (Global Data Area) e/ou seja passado como parmetro adicional. Igualmente, se este campo tiver seu valor alterado dentro da helproutine, no retorno da mesma, esta alterao no ser refletida na tela, que voltar com os valores originais anteriores chamada do help. Para entender este funcionamento necessrio explicar o que ocorre quando o controle passado para uma helproutine. Supondo uma tela onde j foram preenchidos alguns valores de campos e ento digitado um ? em um campo associado a uma helproutine. Neste momento, a tela congelada e os valores j preenchidos no so movidos para suas respectivas posies de memria. O controle ento transferido para a helproutine. No retorno, a tela que havia sido congelada restaurada com os valores originais dos campos. Devido forma de funcionamento das helproutines, toda vez que as mesmas so acionadas, o Natural emite comandos ADABAS de atualizao para seus arquivos de controle. Desta forma, o uso indiscriminado de helproutines, que viciem seu acionamento pelos usurios finais, deve ser evitado, pois causaria um overhead que no pode ser desconsiderado.

7.6.

Consideraes

Pgina 32 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

Quando da definio de um sistema, algumas funes aparecem em mais de um ponto do processamento. Se essas funes so dependentes de outras, como por exemplo, clculo de dgito verificador, clculo de vencimento de faturas, etc., poderemos adotar os seguintes critrios: Se esta funo pode sofrer alteraes com o passar do tempo ( devido legislao e outros motivos), necessrio que se faa opo por subprogramas ou subrotinas externas. Se a funo no sofre modificaes com o passar do tempo, por exemplo, aes a serem tomadas em caso de ON ERROR, pode-se optar por uma codificao atravs de copycode, que no tem OVERHEAD nenhum em tempo de execuo. O uso de Helproutine deve ser considerado quando a comunicao for feita com mapas. H que se saber que o uso de helproutines tem um overhead a ser considerado, pois o Natural faz I/O ao System File para congelar informaes da tela sobreposta pela tela helproutine.

8. MANIPULAO DE DADOS
8.1. Operaes Aritmticas
Os operandos dos comandos ADD, SUBTRACT, MULTIPLY, DIVIDE e COMPUTE podem ser ARRAYs aritmticos. Isto evita a codificao de loops em vrios casos. Operao aritmtica com todas a ocorrncias de array:

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150 0160 0170 0180 0190 0200 0210 0220 0230 0240 0250 0260 0270 0280

DEFINE DATA LOCAL 1 #A (N2/3,2) INIT (1,1) <1> (1,2) <1> (2,1) <2> (2,2) <0> (3,1) <3> (3,2) <2> 1 #B (N2/3,2) INIT (1,1) <3> (1,2) <6> (2,1) <4> (2,2) <8> (3,1) <8> (3,2) <3> END-DEFINE * WRITE 'VALORES INICIAIS DE #A' / '-'(22) WRITE '=' #A(1,1) '=' #A(1,2) / '=' #A(2,1) '=' #A(2,2) / '=' #A(3,1) '=' #A(3,2) * WRITE / 'VALORES INICIAIS DE #B' / '-'(22) WRITE '=' #B(1,1) '=' #B(1,2) / '=' #B(2,1) '=' #B(2,2) / '=' #B(3,1) '=' #B(3,2) * ADD #A(*,*) TO #B(*,*) * WRITE / 'VALORES FINAIS DE #B' / '-'(20) WRITE '=' #B(1,1) '=' #B(1,2) / '=' #B(2,1) '=' #B(2,2) / '=' #B(3,1) '=' #B(3,2) END

Pgina 33 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

Resultado: VALORES INICIAIS DE #A ---------------------#A: 1 #A: 1 #A: 2 #A: 0 #A: 3 #A: 2 VALORES INICIAIS DE #B ---------------------#B: 3 #B: 6 #B: 4 #B: 8 #B: 8 #B: 3 VALORES FINAIS DE #B -------------------#B: 4 #B: 7 #B: 6 #B: 8 #B: 11 #B: 5

Operao aritmtica com uma linha do array:

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150 0160 0170 0180 0190 0200 0210 0220 0230 0240 0250 0260 0270 0280 0290 0300 0310 0320

DEFINE DATA LOCAL 1 #A (N2/3,2) INIT (1,1) <1> (1,2) <1> (2,1) <2> (2,2) <0> (3,1) <3> (3,2) <2> 1 #B (N2/3,2) INIT (1,1) <3> (1,2) <6> (2,1) <4> (2,2) <8> (3,1) <8> (3,2) <3> 1 #C (N2) INIT<6> END-DEFINE * WRITE 'VALORES INICIAL DE #C' / '-'(21) WRITE '=' #C / * WRITE 'VALORES INICIAIS DE #A' / '-'(22) WRITE '=' #A(1,1) '=' #A(1,2) / '=' #A(2,1) '=' #A(2,2) / '=' #A(3,1) '=' #A(3,2) * WRITE / 'VALORES INICIAIS DE #B' / '-'(22) WRITE '=' #B(1,1) '=' #B(1,2) / '=' #B(2,1) '=' #B(2,2) / '=' #B(3,1) '=' #B(3,2) * ADD #C TO #B(1,*) * WRITE / 'VALORES FINAIS DE #B' / '-'(20) WRITE '=' #B(1,1) '=' #B(1,2) / '=' #B(2,1) '=' #B(2,2) / '=' #B(3,1) '=' #B(3,2) END

Resultado: VALORES INICIAL DE #C --------------------#C: 6 VALORES INICIAIS DE #A ----------------------

Pgina 34 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

#A: #A: #A:

1 #A: 2 #A: 3 #A:

1 0 2

VALORES INICIAIS DE #B ---------------------#B: 3 #B: 6 #B: 4 #B: 8 #B: 8 #B: 3 VALORES FINAIS DE #B -------------------#B: 9 #B: 12 #B: 4 #B: 8 #B: 8 #B: 3

Operao aritmtica com uma coluna do array:

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150 0160 0170 0180 0190

DEFINE DATA LOCAL 1 #A (N2/3,2) INIT (1,1) <1> (1,2) <1> (2,1) <2> (2,2) <0> (3,1) <3> (3,2) <2> END-DEFINE * WRITE 'VALORES INICIAIS DE #A' / '-'(22) WRITE '=' #A(1,1) '=' #A(1,2) / '=' #A(2,1) '=' #A(2,2) / '=' #A(3,1) '=' #A(3,2) * ADD 2 TO #A(*,2) * WRITE / 'VALORES FINAIS DE #A' / '-'(20) WRITE '=' #A(1,1) '=' #A(1,2) / '=' #A(2,1) '=' #A(2,2) / '=' #A(3,1) '=' #A(3,2) END

Resultado: VALORES INICIAIS DE #A ---------------------#A: 1 #A: 1 #A: 2 #A: 0 #A: 3 #A: 2 VALORES FINAIS DE #A -------------------#A: 1 #A: 6 #A: 2 #A: 5 #A: 3 #A: 7

Os demais comandos aritmticos tambm possuem a mesma facilidade.

8.2. Passagem Varivel de Parmetros (Array)


Os Arrays podem ser definidos numa PDA (Parameter Data Area) com um nmero varivel de ocorrncias, utilizando-se a notao 1:V. Exemplo: Pgina 35 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

PROGRAMA CHAMADOR ----------------0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 DEFINE DATA LOCAL 1 #TAB (A2/3,2) INIT (1,1) <'11'> (1,2) <'12'> (2,1) <'21'> (2,2) <'22'> (3,1) <'31'> (3,2) <'32'> 1 #I (N1) INIT<3> 1 #J (N1) INIT<2> END-DEFINE * CALLNAT 'NARRAY2' #TAB(*,*) #I #J END

SUBPROGRAMA ----------0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150 DEFINE DATA PARAMETER 1 #X (A2/1:V,1:V) 1 #I (N1) 1 #J (N1) LOCAL 1 #A (N1) 1 #B (N1) END-DEFINE * FOR #A 1 TO #I FOR #B 1 TO #J WRITE #X(#A,#B) END-FOR END-FOR END

9. Manipulao de Strings/Array
9.1. Instruo EXAMINE
A instruo EXAMINE pesquisa uma string em um campo, alfanumrico ou array, atravs de uma opo, e altera, deleta ou conta a quantidade de ocorrncia de um campo.

9.1.1. Opo FULL


Com a opo FULL, o caracter (espao em branco) considerado como um outro qualquer. Sem esta opo, o comando EXAMINE no considera os brancos finais do campo. Exemplo:

0010 0020 0030 0040 0050 0060 0070 0080

DEFINE DATA LOCAL 1 #A (A15) INIT<'XYZ'> 1 #B (A10) INIT<' XPTO1'> 1 #CONT (N2) END-DEFINE * EXAMINE #A FOR ' ' GIVING NUMBER #CONT WRITE 'QUANTIDADE DE ESPAO EM BRANCO SEM FULL:' #CONT

Pgina 36 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

0090 0100 0110 0120 0130 0140 0150

* EXAMINE FULL #A FOR ' ' GIVING NUMBER #CONT WRITE 'QUANTIDADE DE ESPAO EM BRANCO COM FULL:' #CONT * EXAMINE #B FOR ' ' GIVING NUMBER #CONT WRITE 'QUANTIDADE DE ESPAO EM BRANCO SEM FULL:' #CONT END

Resultado: QUANTIDADE DE ESPAO EM BRANCO SEM FULL: QUANTIDADE DE ESPAO EM BRANCO COM FULL: QUANTIDADE DE ESPAO EM BRANCO SEM FULL: 0 12 5

9.1.2. Opo DELETE/REPLACE


Com a opo DELETE/REPLACE possvel pesquisar o campo pelo valor especificado e excluir ou substituir as ocorrncias encontradas pelo valor desejado. Se for especificado FIRST para qualquer das opes, apenas a primeira ocorrncia encontrada ser excluda ou substituda. Exemplo:

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110

DEFINE DATA LOCAL 1 #A (A15) INIT<'XYZ'> 1 #B (A15) INIT<'XYZ'> END-DEFINE * EXAMINE #A FOR 'Y' DELETE WRITE '#A DEPOIS DO EXAMINE / DELETE.:' #A * EXAMINE #B FOR 'Y' REPLACE ' ' WRITE '#B DEPOIS DO EXAMINE / REPLACE:' #B END

Resultado: #A DEPOIS DO EXAMINE / DELETE.: XZ #B DEPOIS DO EXAMINE / REPLACE: X Z

Observe que DELETE e REPLACE com funcionam de forma diferente conforme o exemplo. Se for especificado FULL na opo REPLACE, os brancos no final do campo utilizado para substituio tambm sero contados. Portanto, o campo fonte pode no suportar o REPLACE devido ao tamanho. Exemplo:

0010 0020 0030 0040 0050 0060

DEFINE DATA LOCAL 1 #A (A8) INIT<'ABCDEFGH'> END-DEFINE * EXAMINE #A FOR 'B' AND REPLACE WITH FULL 'X ' WRITE '#A DEPOIS DO EXAMINE / DELETE.:' #A

Pgina 37 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

0070 END Resultado: Erro: NAT1308 Replace string does not fit into variable.

Nesta situao ocorreria uma mensagem de erro informando que o valor da substituio no cabe na varivel. Seno fosse especificado FULL o EXAMINE seria executado e o valor de #A seria AXCDEFG..
0010 0020 0030 0040 0050 0060 0070 DEFINE DATA LOCAL 1 #A (A8) INIT<'ABCDEFGH'> END-DEFINE * EXAMINE #A FOR 'B' AND REPLACE 'X ' WRITE '#A DEPOIS DO EXAMINE / DELETE.:' #A END

Resultado: #A DEPOIS DO EXAMINE / DELETE.: AXCDEFGH

9.1.3. Opo GIVING NUMBER


A opo GIVING NUMBER fornece o nmero de ocorrncias do valor pesquisado no campo fonte. Esta informao refere-se ao campo ante das possveis operaes com as opes REPLACE ou DELETE. Exemplo:

0010 0020 0030 0040 0050 0060 0070 0080 0090

DEFINE DATA LOCAL 1 #A (A15) INIT<'XYZXYZXYZXYZXYZ'> 1 #CONT (N2) END-DEFINE * EXAMINE #A FOR 'Z' REPLACE WITH 'A' GIVING NUMBER #CONT WRITE '#A DEPOIS DO EXAMINE / REPLACE:' #A // 'NUMERO DE OCORRNCIA DE B.....:' #CONT END

Resultado: #A DEPOIS DO EXAMINE / REPLACE: XYAXYAXYAXYAXYA NUMERO DE OCORRNCIA DE B.....: 5

9.1.4. Opo GIVING POSITION


A opo GIVING POSITION fornece a posio da primeira ocorrncia do valor pesquisado no campo fonte. Esta posio refere-se ao campo antes de qualquer operao com as opes REPLACE / DELETE. Exemplo: Pgina 38 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

0010 0020 0030 0040 0050 0060 0070 0080 0090

DEFINE DATA LOCAL 1 #A (A20) INIT<'XYZXYZXYZXYZXYZXYZXY'> 1 #CONT (N2) END-DEFINE * EXAMINE #A FOR 'YZ' DELETE GIVING POSITION #CONT WRITE '#A DEPOIS DO EXAMINE / DELETE........:' #A // 'POSIO DO PRIMEIRO B ANTES DO DELETE:' #CONT END

Resultado: #A DEPOIS DO EXAMINE / DELETE........: XXXXXXXY POSIO DO PRIMEIRO B ANTES DO DELETE: 2

9.1.5. Opo GIVING LENGTH


A opo GIVING LENGTH fornece o tamanho do campo pesquisado depois que todas as operaes de REPLACE / DELETE forem feitas. Exemplo:

0010 0020 0030 0040 0050 0060 0070 0080 0090

DEFINE DATA LOCAL 1 #A (A10) INIT<'XYZX'> 1 #CONT (N2) END-DEFINE * EXAMINE #A FOR 'Z' REPLACE 'K K' GIVING LENGTH #CONT WRITE '#A DEPOIS DO EXAMINE / REPLACE.......:' #A // 'O NUMERO DE CARACTERES APOS O REPLACE:' #CONT END

Resultado: #A DEPOIS DO EXAMINE / REPLACE.......: XYK KX O NUMERO DE CARACTERES APS O REPLACE: 6

9.1.6. Opo GIVING INDEX


Com a opo GIVING INDEX possvel localizar um determinado valor em um ARRAY e fornecer a primeira ocorrncia do ARRAY em que o valor de pesquisa foi encontrado. Esta opo tambm vlida para arrays multidimensionais. Exemplo 1:

0010 DEFINE DATA LOCAL 0020 1 #TAB (A1/5,3,3) INIT 0030 (1,2,3) <'A'> (5,1,2) <'B'> 0040 1 #LINHA (N2)

Pgina 39 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150 0160 0170 0180 0190 0200

1 #COLUNA (N2) 1 #PLANO (N2) END-DEFINE * EXAMINE #TAB(*,*,*) FOR 'A' GIVING INDEX #LINHA #COLUNA #PLANO WRITE 'A OCORRNCIA DO VALOR "A" ' // 'LINHA.:' #LINHA / 'COLUNA:' #COLUNA / 'PLANO.:' #PLANO / * EXAMINE #TAB(*,*,*) FOR 'B' GIVING INDEX #LINHA #COLUNA #PLANO WRITE 'A OCORRNCIA DO VALOR "B" ' // 'LINHA.:' #LINHA / 'COLUNA:' #COLUNA / 'PLANO.:' #PLANO / END

Resultado: A OCORRNCIA DO VALOR 'A' LINHA.: COLUNA: PLANO.: 1 2 3

A OCORRNCIA DO VALOR 'B' LINHA.: COLUNA: PLANO.: 5 1 2

Exemplo 2:

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140

DEFINE DATA LOCAL 1 #MARCA (A10/5) INIT <'FIAT','CITROEN','VOLVO','AUDI','FORD'> 1 #VEICULO (A15/5) INIT <'PALIO','PICASSO','REVOLUTION','A6','KA'> * 1 #MARCA_AUX (A10) 1 #INDICE (N1) END-DEFINE * #MARCA_AUX := 'AUDI' * EXAMINE #MARCA(*) #MARCA_AUX GIVING INDEX #INDICE DISPLAY #MARCA(*) #VEICULO(*) #MARCA_AUX #INDICE #MARCA(#INDICE) #VEICULO(#INDICE) END

Resultado: #MARCA #VEICULO #MARCA_AUX #INDICE #MARCA #VEICULO ---------- --------------- ---------- ------- ---------- --------------FIAT CITROEN VOLVO AUDI FORD PALIO PICASSO REVOLUTION A6 KA AUDI 4 AUDI A6

9.1.7. Opo SUBSTRING


Pgina 40 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

A opo SUBSTRING permite que uma poro do campo seja examinada. Depois do nome (operando1), deve ser especificada a primeira posio a ser examinada (operando2) e ento o tamanho (operando3) da parte do campo a ser pesquisada. Exemplo:

0010 0020 0030 0040 0050 0060 0070 0080 0090

DEFINE DATA LOCAL 1 #D (A26) INIT <'TESTECOMANDOEXAMINENOCURSO'> 1 #NUMBER (N2) 1 #POSICAO (N2) END-DEFINE * EXAMINE SUBSTRING(#D,13,7) 'MINE' GIVING #NUMBER POSITION #POSICAO WRITE #D / '=' #NUMBER / '=' #POSICAO END

Resultado: TESTECOMANDOEXAMINENOCURSO #NUMBER: 1 #POSICAO: 4

Na opo SUBSTRING pode-se codificar apenas a posio do campo onde a pesquisa deve iniciar. Neste caso, a procura comear na posio determinada e seguir at o final do campo. Exemplo:

0010 0020 0030 0040 0050 0060 0070 0080 0090

DEFINE DATA LOCAL 1 #D (A26) INIT <'TESTECOMANDOEXAMINENOCURSO'> 1 #NUMBER (N2) 1 #POSICAO (N2) END-DEFINE * EXAMINE SUBSTRING(#D,13,7) 'MINE' GIVING #NUMBER POSITION #POSICAO WRITE #D / '=' #NUMBER / '=' #POSICAO END

Resultado: TESTECOMANDOEXAMINENOCURSO #NUMBER: 1 #POSICAO: 4

Processamento de elementos de um ARRAY utilizando a opo SUBSTRING. Exemplo:

DEFINE DATA LOCAL 1 #NOME (A15/8) INIT <'LUCIANO','LUIZA','ANA','LUCIA','PERDIGAO','ROSA','MONICA','LUCAS'> 1 #NUMBER (N2) END-DEFINE * EXAMINE SUBSTRING(#NOME(*),1,2) 'LU' GIVING #NUMBER

Pgina 41 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

WRITE #NOME(*) / '=' #NUMBER END Resultado: LUCIANO ROSA #NUMBER: LUIZA MONICA 4 ANA LUCAS LUCIA PERDIGAO

9.1.8. Opo PATTERN


A opo PATTERN tem a capacidade de pesquisar um campo excluindo posies selecionadas. Os caracteres PATTERN . (ponto), ? (interrogao) e _ (underscore), representam uma posio a ser ignorada. Os caracteres * (asterisco) e % (percentual), indicam qualquer nmero de posies a serem ignoradas. Exemplo:

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150 0160 0170 0180

DEFINE DATA LOCAL 1 #TAB (A10/4) INIT<'CARRO','CARROA','GARRAFA','CAVALO'> 1 #I (N3) 1 #N (N3) END-DEFINE * FOR #I 1 4 EXAMINE #TAB(#I) PATTERN 'A.O' GIVING NUMBER #N WRITE #TAB(#I) '-' #N END-FOR * SKIP 1 * FOR #I 1 4 EXAMINE #TAB(#I) PATTERN 'A*O' GIVING NUMBER #N WRITE #TAB(#I) '-' #N END-FOR END

Resultado: CARRO CARROA GARRAFA CAVALO CARRO CARROA GARRAFA CAVALO 0 0 0 1 1 1 0 1

9.1.9. Opo WITH DELIMITERS

Pgina 42 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

A pesquisa tem como default o absolute scan, ou seja, o resultado fornecido pelo EXAMINE dado aps uma pesquisa em todo o campo. A opo WITH DELIMITERS utilizada para um valor que est entre delimitadores (espao em branco), ou qualquer outro que no seja letra ou nmero. WITH DELIMITERS operando utilizado para procurar um valor delimitado pelo caracter especificado pelo caracter especificado no operando. Exemplo:

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130

DEFINE DATA LOCAL 1 #T (A40) INIT<'-A-BC A B C .A. .B. .C. -A- -B-AB'> 1 #P1 (N3) 1 #P2 (N3) 1 #P3 (N3) END-DEFINE * EXAMINE #T 'A' GIVING NUMBER #P1 EXAMINE #T 'A' WITH DELIMITERS GIVING NUMBER #P2 EXAMINE #T 'A' WITH DELIMITERS '-' GIVING NUMBER #P3 * WRITE '=' #P1 / '=' #P2 / '=' #P3 END

Resultado: #P1: #P2: #P3: 5 4 2

9.1.10.

Opo TRANSLATE
A opo TRANSLATE utilizada para traduzir caracteres de um campo em maisculo

ou minsculo, ou em outro caracter especificado. Se for especificado INTO LOWER CASE, o contedo do operando utilizado na pesquisa ser traduzido para minsculo. Se for especificado INTO UPPER CASE, o contedo do operando utilizado na pesquisa ser traduzido para maisculo. A sintaxe EXAMINE ... TRANSLATE USING operando, tem como valores de traduo os caracteres contidos no operando, que uma tabela de traduo definida com formato (A2) ou (B2). Quando EXAMINE encontrar o primeiro caracter da tabela no campo, faz a troca do caracter do campo para o segundo caracter definido na tabela. A opo INVERTED altera a direo de troca no operando. Exemplo:

0010 DEFINE DATA LOCAL

Pgina 43 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150 0160 0170 0180 0190 0200

1 #T (A40) INIT<'-A-BC A B C .A. .B. .C. 1 #T1 (A2/3) INIT<'A1','B2','C3'> * 1 #NOME (A8) INIT<'PERDIGO'> END-DEFINE * WRITE 'VALOR DE #T ANTES PRIMEIRO EXAMINE:' #T EXAMINE #T TRANSLATE USING #T1(*) * WRITE 'VALOR DE #T ANTES SEGUNDO EXAMINE.:' #T EXAMINE #T TRANSLATE USING INVERTED #T1(*) * WRITE 'VALOR DE #T FINAL.................:' #T * SKIP 1 WRITE 'NOME ANTES DO EXAMINE.............:' #NOME EXAMINE #NOME TRANSLATE INTO LOWER CASE WRITE 'NOME APS EXAMINE.................:' #NOME END

-A- -B-AB'>

Resultado: VALOR DE #T ANTES PRIMEIRO EXAMINE: -A-BC A B C VALOR DE #T ANTES SEGUNDO EXAMINE.: -1-23 1 2 3 VALOR DE #T FINAL.................: -A-BC A B C NOME ANTES DO EXAMINE.............: PERDIGO NOME APS EXAMINE.................: perdigo .A. .B. .C. .1. .2. .3. .A. .B. .C. -A- -B-AB -1- -2-12 -A- -B-AB

9.2. Instruo SEPARATE


Separa o contedo de um campo alfanumrico em dois ou mais campos alfanumricos ou ocorrncias de um ARRAY alfanumrico. Exemplo:

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100

DEFINE DATA LOCAL 1 #A (A30) INIT<'XXXXXXXXXXXXXXX.YYYY.ZZZZZZZZZ'> 1 #A1 (A15) 1 #A2 (A15) 1 #A3 (A15) END-DEFINE * SEPARATE #A INTO #A1 #A2 #A3 WRITE '=' #A // '=' #A1 / '=' #A2 / '=' #A3 END

Resultado: #A: XXXXXXXXXXXXXXX.YYYY.ZZZZZZZZZ #A1: XXXXXXXXXXXXXXX #A2: YYYY #A3: ZZZZZZZZZ

Este exemplo mostra um SEPARATE onde h mais campos resultantes do que os possveis a partir do campo fonte. Observe que o Natural anula o valor do campo excedente aps o SEPARATE. Pgina 44 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150 0160

DEFINE DATA LOCAL 1 #A (A32) INIT<'1111111111 222'> 1 #A1 (A10) INIT<'LUCIANO'> 1 #A2 (A10) INIT<'LUCIANO'> 1 #A3 (A10) INIT<'LUCIANO'> END-DEFINE * WRITE 'ANTES DO SEPARATE' WRITE '-----------------' WRITE '=' #A // '=' #A1 / '=' #A2 / '=' #A3 SEPARATE #A INTO #A1 #A2 #A3 SKIP 1 WRITE 'APOS DO SEPARATE' WRITE '----------------' WRITE '=' #A1 / '=' #A2 / '=' #A3 END

Resultado: ANTES DO SEPARATE ----------------#A: 1111111111 222 #A1: LUCIANO #A2: LUCIANO #A3: LUCIANO APOS DO SEPARATE ---------------#A1: 1111111111 #A2: 222 #A3:

Este exemplo mostra um SEPARATE onde h tratamento de dois delimitadores consecutivos. O campo anulado, ou seja, seu contedo espaos em branco.

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100

DEFINE DATA LOCAL 1 #A (A30) INIT<'111..1111'> 1 #A1 (A20) 1 #A2 (A20) 1 #A3 (A20) END-DEFINE * SEPARATE #A INTO #A1 #A2 #A3 WRITE '=' #A // '=' #A1 / '=' #A2 / '=' #A3 END

Resultado: #A: 111..1111 #A1: 111 #A2: #A3: 1111

Este exemplo mostra um SEPARATE com manipulao de ARRAYS. Pgina 45 de 120


Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

0010 0020 0030 0040 0050 0060 0070 0080

DEFINE DATA LOCAL 1 #A (A20) INIT<'LUCIANO PERDIGAO'> 1 #ARRAY (A10/2) END-DEFINE * SEPARATE #A INTO #ARRAY(*) WRITE '=' #A / '=' #ARRAY(*) END

Resultado: #A: LUCIANO PERDIGAO #ARRAY: LUCIANO PERDIGAO

9.2.1. Opo WITH DELIMITERS


Este exemplo mostra o SEPARATE de um campo fonte em trs campos resultantes, com utilizao do delimitador @.

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100

DEFINE DATA LOCAL 1 #A (A32) INIT<'1111111111@2222222222@CCCCCCCCCC'> 1 #A1 (A10) 1 #A2 (A10) 1 #A3 (A10) END-DEFINE * SEPARATE #A INTO #A1 #A2 #A3 WITH DELIMITERS '@' WRITE '=' #A // '=' #A1 / '=' #A2 / '=' #A3 END

Resultado: #A: 1111111111@2222222222@CCCCCCCCCC #A1: 1111111111 #A2: 2222222222 #A3: CCCCCCCCCC

9.2.2. Opo GIVING NUMBER


A clusula GIVING NUMBER fornece o nmero de campos resultantes diferentes de brancos. Exemplo:

0010 0020 0030 0040 0050 0060

DEFINE DATA LOCAL 1 #A (A32) 1 #A1 (A10) 1 #A2 (A10) 1 #A3 (A10) 1 #CONT (N3)

INIT<'1111111111.22233'> INIT<'LUCIANO'> INIT<'LUCIANO'> INIT<'LUCIANO'>

Pgina 46 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

0070 0080 0090 0100 0110 0120 0130 0140 0150 0160 0170 0180

END-DEFINE * WRITE 'ANTES DO SEPARATE' WRITE '-----------------' WRITE '=' #A // '=' #A1 / '=' #A2 / '=' #A3 SEPARATE #A INTO #A1 #A2 #A3 GIVING NUMBER #CONT SKIP 1 WRITE 'APOS DO SEPARATE' WRITE '----------------' WRITE '=' #A1 / '=' #A2 / '=' #A3 // 'NMEROS DE CAMPOS RESULTANTES:' #CONT END

Resultado: ANTES DO SEPARATE ----------------#A: 1111111111.22233 #A1: LUCIANO #A2: LUCIANO #A3: LUCIANO APOS DO SEPARATE ---------------#A1: 1111111111 #A2: 22233 #A3: NMEROS DE CAMPOS RESULTANTES: 2

9.2.3. Opo LEFT JUSTIFIED


A clusula LEFT JUSTIFIED remove brancos esquerda dos sub-campos. Exemplo:

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150

DEFINE DATA LOCAL 1 #A (A30) INIT<'111. 1111. 22233'> 1 #A1 (A20) 1 #A2 (A20) 1 #A3 (A20) END-DEFINE * SEPARATE #A INTO #A1 #A2 #A3 WITH DELIMITERS '.' WRITE 'ALINHAMENTO SEM LEFT JUSTIFIED:' / #A1 '#A1' / #A2 '#A2' / #A3 '#A3' // * SEPARATE #A LEFT JUSTIFIED INTO #A1 #A2 #A3 WITH DELIMITERS '.' WRITE 'ALINHAMENTO COM LEFT JUSTIFIED:' / #A1 '#A1' / #A2 '#A2' / #A3 '#A3' // END

Resultado: ALINHAMENTO SEM LEFT 111 1111 22233 JUSTIFIED: #A1 #A2 #A3

ALINHAMENTO COM LEFT JUSTIFIED:

Pgina 47 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

111 1111 22233

#A1 #A2 #A3

9.2.4. Opo SUBSTRING


A opo SUBSTRING permite que seja feito um SEPARATE em parte de um campo. Depois do nome do campo (operando1), especifica-se a posio inicial (operando2), e ento o tamanho a pesquisar (operando3) da poro do campo a ser separada. Exemplo:

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100

DEFINE DATA LOCAL 1 #A (A20) INIT<'11111.22222.33333'> 1 #A1 (A5) 1 #A2 (A5) 1 #A3 (A5) END-DEFINE * SEPARATE SUBSTRING(#A,4,6) INTO #A1 #A2 #A3 WRITE '=' #A // '=' #A1 / '=' #A2 / '=' #A3 END

Resultado: #A: 11111.22222.33333 #A1: 11 #A2: 222 #A3:

9.2.5. Opo IGNORE


Com a opo IGNORE o Natural ignorar se no houverem campos suficientes para receber o resultado do SEPARATE. Exemplo:

0010 0020 0030 0040 0050 0060 0070 0080 0090

DEFINE DATA LOCAL 1 #A (A20) INIT<'11111.22222.33333'> 1 #A1 (A5) 1 #A2 (A5) END-DEFINE * SEPARATE #A INTO #A1 #A2 IGNORE WRITE '=' #A // '=' #A1 / '=' #A2 END

Resultado: #A: 11111.22222.33333 #A1: 11111 #A2: 22222

Pgina 48 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

9.2.6. Opo REMAINDER


Com a opo REMAINDER operando, a seo de valor que no for carregada nos campos receptores, ser carregada no operando. Este contedo do operando poder ser utilizado, por exemplo, para um subseqente SEPARATE. Exemplo:

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100

DEFINE DATA LOCAL 1 #A (A20) INIT<'RRRRR.OOOOO.AAAAA'> 1 #A1 (A5) 1 #A2 (A5) 1 #R (A5) END-DEFINE * SEPARATE #A INTO #A1 #A2 REMAINDER #R WRITE '=' #A // '=' #A1 / '=' #A2 / '=' #R END

Resultado: #A: RRRRR.OOOOO.AAAAA #A1: RRRRR #A2: OOOOO #R: AAAAA

9.2.7. Opo RETAINED WITH DELIMITERS


Normalmente os caracteres delimitadores no so carregados nos campos receptores do SEPARATE. Com a opo WITH RETAINED DELIMITERS, o delimitador ser tambm carregado no campo receptor. Exemplo:

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100

DEFINE DATA LOCAL 1 #A (A20) INIT<'RRRRR.OOOOO.AAAAA'> 1 #A1 (A5) 1 #A2 (A5) 1 #A3 (A5) END-DEFINE * SEPARATE #A INTO #A1 #A2 #A3 IGNORE WITH RETAINED DELIMITERS WRITE '=' #A // '=' #A1 / '=' #A2 / '=' #A3 END

Resultado: #A: RRRRR.OOOOO.AAAAA #A1: RRRRR #A2: . #A3: OOOOO

Pgina 49 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

9.3. Instruo COMPRESS


A instruo COMPRESS serve para concatenar o contedo de dois ou mais campos em um outro campo. Os operandos a serem combinados podem ser de qualquer formato, porm o campo resultante deve ser alfanumrico. Pode-se utilizar as variveis de sistema, como *NUMBER ou *COUNTER, diretamente no comando COMPRESS.

0010 0020 0030 0040 0050 0060 0070 0080 0090

DEFINE DATA LOCAL 1 #A (A40) INIT<'O PERDIGAO FEZ O CURSO DE NATURAL DIA'> 1 #B (N2) INIT<10> 1 #C (A50) END-DEFINE * COMPRESS #A #B TO #C LEAVING NO WRITE '=' #A / '=' #B // '=' #C END

Resultado: #A: O PERDIGAO FEZ O CURSO DE NATURAL DIA #B: 10 #C: O PERDIGAO FEZ O CURSO DE NATURAL DIA10

Exemplo de utilizao de (PM=I), para inverso dos dados. Exemplo:

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100

DEFINE DATA LOCAL 1 #NOME (A8) INIT<'LUCIANO'> 1 #SOBRENOME (A8) INIT<'PERDIGO'> 1 #NOME_COMPLETO (A30) END-DEFINE * COMPRESS #NOME(PM=I) #SOBRENOME INTO #NOME_COMPLETO WRITE '=' #NOME / '=' #SOBRENOME // '=' #NOME_COMPLETO * END

Resultado: #NOME: LUCIANO #SOBRENOME: PERDIGO #NOME_COMPLETO: ONAICUL PERDIGO

9.3.1. Opo DELIMITER(S)

Pgina 50 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

A opo DELIMITER(S) permite especificar um caracter delimitador entre cada valor no campo resultante. Se no for especificada a opo DELIMITERS(S) colocado um espao em branco entre os valores. Se for especificado DELIMITER(S) sem caracter algum, ser assumido o caracter especificado no parmetro ID=delimitador do Natural, cujo valor default , (vrgula). Se um dos operandos do comando COMPRESS for numrico e tiver seu valor zerado, o zero aparecer no campo resultante.

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100

DEFINE DATA LOCAL 1 #DIA (N2) INIT<10> 1 #MES (N2) INIT<02> 1 #ANO (N4) INIT<2004> 1 #DATA (A10) END-DEFINE * COMPRESS #DIA #MES #ANO INTO #DATA WITH DELIMITERS '/' WRITE '=' #DIA / '=' #MES / '=' #ANO // '=' #DATA END

Resultado: #DIA: #MS: #ANO: 10 2 2004

#DATA: 10/2/2004

9.3.2. Opo LEAVING NO SPACE


A opo LEAVING NO SPACE serve para suprimir o espao em branco entre dois ou mais campos concatenados.

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110

DEFINE DATA LOCAL 1 #DIA (N2) INIT<10> 1 #MES (N2) INIT<02> 1 #ANO (N4) INIT<2004> 1 #DATA (A10) END-DEFINE * COMPRESS #DIA #MES #ANO INTO #DATA LEAVING NO WRITE '=' #DIA / '=' #MES / '=' #ANO // '=' #DATA * END

Resultado: #DIA: #MS: #ANO: 10 2 2004

Pgina 51 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

#DATA: 1022004

9.3.3. Opo NUMERIC


A opo NUMERIC inclui os caracteres de sinal e decimal na concatenao de valores. Exemplo:

0010 0020 0030 0040 0050 0060 0070 0080 0081 0090 0100 0110 0120

DEFINE DATA LOCAL 1 #NUM1 (N3,2) INIT<-123,45> 1 #NUM2 (N2,2) INIT<-9,1> 1 #NUM3 (A12) END-DEFINE * COMPRESS #NUM1 #NUM2 INTO #NUM3 WITH DELIMITER '*' WRITE 'COMPRESS SEM NUMERIC:' #NUM3 * COMPRESS NUMERIC #NUM1 #NUM2 INTO #NUM3 WITH DELIMITER '*' WRITE 'COMPRESS COM NUMERIC:' #NUM3 * END

Resultado: COMPRESS SEM NUMERIC: 12345*910 COMPRESS COM NUMERIC: -123,45*-9,1

9.4. Concatenao com Hfen

0010 0020 0030 0040 0050 0060 0070 0080 0090

DEFINE DATA LOCAL 1 #S (A79) END-DEFINE * MOVE 'Este exemplo mostra uma frase concatenada com o smbolo "-" no'' programa Natural' TO #S * WRITE #S END

Resultado: Este exemplo mostra uma frase concatenada com o smbolo '-' no programa Natural

10.

VARIVEIS E CONSTANTES
10.1. Variveis de Sistema
*APPLIC-ID (A008) Pgina 52 de 120
Impresso em 13/12/2004 - 17:48

Desenvolvido por Luciano Perdigo

Curso Avanado de Natural

Nome da biblioteca Natural. *COM (A128) Representa uma rea de comunicao que pode ser utilizada para processar dados de sada de uma window. Normalmente, quando uma window est ativa, nenhum dado pode ser inputado na tela sobreposta pela window. Contudo, se o mapa contm *COM como uma varivel modificvel, ele estar disponvel para que o usurio entre com dados quando uma window estiver ativa na tela. *COUNTER (P10) Nmero de vezes que o loop foi executado em um FIND, READ, SELECT ou HISTOGRAM. No incrementado se o registro no passa pela clusula WHERE. incrementado antes do ACCEPT ou REJECT. *CURSOR (N6) Posio do cursor (linha e coluna). Exemplo: 005024 linha 5, coluna 24. *CURS-COL (P3) Coluna do cursor. Pode ser modificada. *CURS-FIELD (I4) Contm a identificao interna do campo de input no qual o cursor est posicionado. S pode ser utilizado com a funo POS, que serve para checar em que campo o cursor est posicionado. *CURS-LINE (P3) Contm o nmero da linha em que o cursor est posicionado. Pode conter tambm os seguintes valores de posicionamento: 0 topo ou rodap do frame de uma windows; -1 linha de mensagens; -2 linha de informaes / estatsticas; -3 linha de PFs (nmero); -4 linha de PFs (nome). *DATA (N3) Nmero de elementos de dados no STACK Natural para a prxima instruo INPUT. Pode conter ainda: 0 nenhum dado no Stack; -1 prximo elemento no Stack um comando. *DEVICE (A8) Tipo / modo do recurso de onde o Natural foi invocado. *ERROR-LINE (N4) Nmero da linha no programa onde ocorreu o erro. *ERROR-NR (N7) Pgina 53 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

Nmero do erro. Pode ser modificado. *ERROR-TA (A8) Nome do programa que recebe o controle quando ocorre um erro. Pode ser modificado. Permanece ativo durante a sesso. Isto evita a codificao do ON ERROR em cada programa. O *PROGRAM no est disponvel para o programa que trata o erro, ento considerar MOVE *PROGRAM TO GDA em todos os programas. *ISN (P10) Nmero do ISN (nmero seqencial nico) do registro corrente referenciado um FIND/READ ou STORE. Pode ser muito eficiente em procedimentos de ler ou reler um registro quando o ISN conhecido. Num HISTOGRAM o *ISN contm o nmero de ocorrncias associadas no valor corrente de um descritor de grupo peridico. *LANGUAGE (I1) Esta varivel contm o cdigo da linguagem de instalao do Natural. *LEVEL (N1) Contm o nvel onde um mdulo est sendo executado. *LINE-COUNT (P5) Nmero da linha corrente na pgina corrente. Se mltiplos relatrios est sendo produzidos, o (rep) deve ser especificado para identificar cada um deles. O valor mximo para *LINE-COUNT 250. *LOG-LS (N3) Contm o valor do parmetro LS (Line Size) da pgina lgica do relatrio primrio (rep=0). *LOG-PS (N3) Contm o valor do parmetro PS (Page Size) da pgina lgica do relatrio primrio (rep=0). *NUMBER (P10) Para um FIND NUMBER, o nmero de registros encontrados. Para um FIND, o nmero de registros encontrados como resultado de um critrio WITH (anterior avaliao de um critrio WHERE) Para um HISTOGRAM, o nmero de registros que contm o valor retornado. *PAGE-NUMBER (P5) Nmero de pgina corrente. Pode ser alterado. Se mltiplos relatrios esto sendo produzidos, o controle desta numerao mantido atravs de *PAGE-NUMBER(rep). *PF-NAME (A10) Contm o nome da funo de um PF-KEY, que foi definida atravs da clusula NAMED da instruo SET KEY. *PF-KEY (A4) Pgina 54 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

Tecla utilizada pelo usurio em resposta a uma instruo INPUT. Valores contidos: PA1 at PA3, PF1 at PF24, CLR, PEN, ENTR. *PROGRAM (A8) Contm o nome do programa Natural que est sendo executado. *SUBROUTINE (A32) Contm o nome interno da subrotina Natural em execuo.

*APPLIC-ID....: *APPLIC-NAME..: *COM..........: *CONVID.......: *CURSOR.......: *CURS-COL.....: *CURS-FIELD...: *CURS-LINE....: *DATA.........: *DEVICE.......: *ERROR-LINE...: *ERROR-NR.....: *ERROR-TA.....: *ETID.........: *GROUP........: *HARDCOPY.....: *HARDWARE.....: *INIT-ID......: *INIT-PROGRAM.: *INIT-USER....: *LANGUAGE.....: *LEVEL........: *LIBRARY-ID...: *LINE-COUNT...: *LINESIZE.....: *LOG-LS.......: *LOG-PS.......: *MACHINE-CLASS: *OPSYS........: *OS...........: *OSVERS.......: *PAGESIZE.....: *PAGE-NUMBER..: *PF-KEY.......: *PF-NAME......: *PROGRAM......: *SCREEN-IO....: *SERVER-TYPE..: *STARTUP......: *STEPLIB......: *SUBROUTINE...: *THIS-OBJECT..: *TPSYS........: *UI...........: *USER.........: *USER-NAME....: *WINDOW-LS....: *WINDOW-POS...: *WINDOW-PS....:

XXXPRG SYSTEM 0 1004 4 0 1 -1 COLOR 0 0 X?h? ?

2084 B1OQ NTRN X028862 38 1 XXXPRG 8 80 250 20 MAINFRAME MVS/ESA MVS/ESA SP7.0.4 24 2 ENTR VARSIS X

SISTEM 0000000000000000 CICS CHARACTER X028862 SYSTEM 80 0 24

Pgina 55 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

10.1.1.
*DATD : *DATE : *DATI : *DATJ : *DATU : *DATG : *DATN : *DATX : *DAT4D: *DAT4E: *DAT4I: *DAT4J: *DAT4U:

Variveis Date
24.11.04 24/11/04 04-11-24 04329 11/24/04 24Novembro 2004 20041124 24112004 24.11.2004 24/11/2004 2004-11-24 2004329 11/24/2004 (A8) (A8) (A8) (A5) (A8) (A15) (N8) (D) (A10) (A8) (A10) (A7) (A10) Formato DD.MM.YY Formato DD/MM/YY Formato YY-MM-DD Data Juliana no formato YYDDD Formato MM/DD/YY Formato Ddnome-msYYYY Formato YYYYMMDD Formato interno Formato DD.MM.YYYY Formato DD/MM/YYYY Formato YYYY-MM-DD Data Juliana no formato YYYYDD Formato MM/DD/YYYY

10.1.2.

Variveis Time
(A10) (B8) (N5) (N7) (T) (N7) Formato HH:MM:SS:T Valor do relgio interno da mquina Contm o n de segundos restantes da transao corrente em execuo (somente c/Natural Security) Formato HHMMSST Formato interno Tempo decorrido durante um comando SETTIME (HHMMSST)

*TIME....: 15:18:13.8 *TIMESTMP: BC2B48F0F378858E *TIME-OUT: 0 *TIMN....: 1518138 *TIMX....: 15:18:13 *TIMD: 0

10.2. Operaes Aritmticas com Variveis Date e Time


Nmeros podem ser adicionados ou subtrados de variveis com formato (D), sendo que o resultado uma data vlida. Os nmeros adicionados em variveis de formato (D) so dias, e em formato (T) so dcimos de segundo.

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140

DEFINE DATA LOCAL 1 #DATA (D) INIT<*DATX> 1 #HORA (T) INIT<*TIMX> END-DEFINE * ADD 5 TO #DATA WRITE 'DATA DE HOJE:' *DATX(EM=DD/MM/YYYY) '+ 5 DIAS =' #DATA(EM=DD/MM/YYYY) * SKIP 1 * ADD 600 TO #HORA WRITE 'HORA ATUAL:' *TIMX '+ 60 SEGUNDOS =' #HORA END

Resultado:

Pgina 56 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

DATA DE HOJE: 24/11/2004 + 5 DIAS = 29/11/2004 HORA ATUAL: 16:10:37 + 60 SEGUNDOS = 16:11:37

10.3. Movimentao com Mscara de Edio Date e Time


As variveis definidas com formatos DATE (D) e TIME (T) podem ser exibidas de formas diversas, utilizando as mscaras de edio. Exemplo:

0010 WRITE NOTITLE 0020 'DATA INTERNA :' 0030 ' :' 0040 ' :' 0050 ' ROMANA :' 0060 ' AMERICANA :' 0070 ' JULIANA :' 0080 ' GREGORIANA:' 0090 * 0100 'HORA INTERNA :' 0110 ' :' 0120 ' :' 0130 ' :' 0140 END Resultado: DATA INTERNA : : : ROMANA : AMERICANA : JULIANA : GREGORIANA:

*DATX *DATX *DATX *DATX *DATX *DATX *DATX

(DF=L) / (EM=N(9)' 'ZW.'SEMANA(S) (EM=ZZJ'.DIA 'YYYY) (EM=R) / (EM=MM/DD/YYYY) 12X (EM=YYYYJJJ) 15X (EM=ZD.''L(10)''YYYY) 5X

'YY) / 'OR 'OR 'OR

' *DAT4U / ' *DAT4J / ' *DATG /// ' *TIME /

*TIMX 14X 'OR *TIMX (EM=HH.II.SS.T) / *TIMX (EM=HH.II.SS' 'AP) / *TIMX (EM=HH)

24/11/2004 Quarta 48.SEMANA(S) 04 329.DIA 2004 MMIV 11/24/2004 OR 2004329 OR 24.Novembro2004 OR

11/24/2004 2004329 24Novembro 2004

HORA INTERNA

: : : :

16:01:02 16.01.02.5 04.01.02 PM 16

OR

16:01:02.5

10.4. Varivel Lgica


Utilizada para verificar se uma condio verdadeira (TRUE) ou falsa (FALSE). mais fcil de entender a lgica de programas que utilizam variveis lgicas do que trabalhar com flags e controles. Exemplo:

0010 0020 0030 0040 0050

DEFINE DATA LOCAL 1 #FLAG 1 #I END-DEFINE *

(L) INIT<TRUE> (N2)

Pgina 57 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

0060 FOR #I 1 3 0070 WRITE #FLAG(EM=FALSE/TRUE) '/' #FLAG(EM=ON/OFF) 5X 'INDICE' #I 0080 IF #FLAG 0090 #FLAG := FALSE 0100 ELSE 0110 #FLAG := TRUE 0120 END-IF 0130 END-FOR 0140 END Resultado: TRUE / OFF FALSE / ON TRUE / OFF INDICE INDICE INDICE 1 2 3

11.

FUNES MATEMTICAS
Valor absoluto Arco tangente Coseno Exponencial Parte fracionria Parte inteira Logaritmo natural (base e10) Sinal (+,0,-) Seno Raiz quadrada. Se o campo informado for negativo, ser tratado como positivo Tangente Valor numrico de campo alfanumrico

ABS(campo) ATN(campo) COS(campo) EXP(campo) FRAC(campo) INT(campo) LOG(campo) SGN(campo) SIN(campo) SQRT(campo) TAN(campo) VAL(campo)

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150 0160 0170 0180

DEFINE DATA LOCAL 1 #A (N2,1) INIT <10> 1 #B (N2,1) INIT <-6,3> 1 #C (N2,1) INIT <0> 1 #LOGA (N2,6) 1 #SQRTA (N2,6) 1 #TANA (N2,6) 1 #ABS (N2,1) 1 #FRAC (N2,1) 1 #INT (N2,1) 1 #SGN (N1) END-DEFINE COMPUTE #LOGA = LOG(#A) WRITE NOTITLE '=' #A 5X 'LOG' 40T #LOGA * COMPUTE #SQRTA = SQRT(#A) WRITE '=' #A 5X 'RAIZ QUADRADA' 40T #SQRTA * Pgina 58 de 120
Impresso em 13/12/2004 - 17:48

Desenvolvido por Luciano Perdigo

Curso Avanado de Natural

0190 0200 0210 0220 0230 0240 0250 0260 0270 0280 0290 0300 0310 0320 0330 0340 0350 0360 0370 0380 0390

COMPUTE WRITE * COMPUTE WRITE * COMPUTE WRITE * COMPUTE WRITE * COMPUTE WRITE * COMPUTE WRITE * COMPUTE WRITE END

#TANA

= TAN(#A) '=' #A 5X 'TANGENTE' 40T #TANA = ABS(#B) '=' #B 5X 'VALOR ABSOLUTO' 40T #ABS = FRAC(#B) '=' #B 5X 'FRAO' 40T #FRAC = INT(#B) '=' #B 5X 'INTEIRO' 40T #INT

#ABS / #FRAC

#INT

#SGN = SGN(#A) / '=' #A 5X 'SINAL' #SGN = SGN(#B) '=' #B 5X 'SINAL' = SGN(#C) '=' #C 5X 'SINAL'

40T #SGN

40T #SGN

#SGN

40T #SGN

Resultado: #A: #A: #A: #B: #B: #B: #A: #B: #C: 10,0 10,0 10,0 -6,3 -6,3 -6,3 10,0 -6,3 0,0 LOG RAIZ QUADRADA TANGENTE VALOR ABSOLUTO FRAO INTEIRO SINAL SINAL SINAL 2,302585 3,162277 0,648360 6,3 -0,3 -6,0 1 -1 0

12.

INSTRUO MASK
Permite que o contedo das posies de um campo seja checado. MASK justificado

esquerda. Sinais * (asterisco) ou % (percentual), inseridos na definio do MASK indicam que qualquer nmero de posies podem ser ignoradas na verificao. O . (ponto), , (vrgula) ou o _ (underscore), significam que esta posio no ser verificada. A checagem pode ser feita por constantes, variveis, tipos, datas e intervalos.

IF #X = MASK(..VA) Pgina 59 de 120


Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

13.

INSTRUO IF campo IS...


Verifica o formato e tamanho de uma varivel alfanumrica. Formatos: Nxx Fxx D T Pxx Ixx numrico com tamanho xx ponto flutuante com tamanho xx data hora numrico compactado com tamanho xx numrico inteiro com tamanho xx

ABS(campo) ATN(campo) COS(campo) EXP(campo) FRAC(campo) INT(campo) LOG(campo) SGN(campo) SIN(campo) SQRT(campo) TAN(campo) VAL(campo)

Valor absoluto Arco tangente Cosseno Exponencial Parte fracionria Parte inteira Logaritmo natural (base e10) Sinal (+,0,-) Seno Raiz quadrada. Se o campo informado for negativo, ser tratado como positivo Tangente Valor numrico de campo alfanumrico

Exemplo:

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150

DEFINE DATA LOCAL 1 #CAMPOA (A10) 1 #CAMPOB (N5) 1 #DATA (A10) END-DEFINE INPUT #DATA #CAMPOA IF #DATA IS (D) IF #CAMPOA IS (N5) COMPUTE #CAMPOB = VAL(#CAMPOA) WRITE NOTITLE 'FUNO VAL OK' // '=' #CAMPOA '=' #CAMPOB ELSE REINPUT 'FORMATO DO CAMPO INVALIDO (N5)' MARK *#CAMPOA END-IF ELSE REINPUT 'DATA INVALIDA. NO FORMATO (DD/MM/YYYY) ' MARK *#DATA Pgina 60 de 120

Desenvolvido por Luciano Perdigo

Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

0160 END-IF 0170 END

14.

Instruo MOVE
14.1. Opo EDITED
O comando MOVE EDITED utilizado para fazer movimentaes com edio ou deedio. Pode ser especificada uma mscara de edio para o campo fonte ou para o campo destino: CAMPO FONTE a mscara aplicada ao contedo do campo fonte e ento o

valor editado movido para o campo destino. CAMPO DESTINO a mscara de edio aplicada sobre o contedo do campo

fonte para a remoo dos caracteres de edio e o valor resultante, sem os caracteres de edio, movido para o campo destino.

Outra forma de processar o MOVE EDITED com de-edio a utilizao para inicializar variveis do tipo (D) a partir de variveis alfanumricas com caracter de edio.

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120

DEFINE DATA LOCAL 1 #A (A6) INIT<'811123'> 1 #B (A8) 1 #C (A6) END-DEFINE * MOVE EDITED #A(EM=XX/XX/XX) TO #B * MOVE EDITED #B TO #C(EM=XX/XX/XX) * WRITE '=' #A // '=' #B // '=' #C END

Resultado: #A: 811123 #B: 81/11/23 #C: 811123

0010 0020 0030 0040

DEFINE DATA LOCAL 1 #A 1 #D END-DEFINE

(A10) INIT<'23/11/2004'> (D)

Pgina 61 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

0050 0060 0070 0080 0090

* MOVE EDITED #A TO #D(EM=DD/MM/YYYY) * WRITE '=' #A // '=' #D END

Resultado: #A: 23/11/2004 #D: 23112004

14.2. Opo LEFT JUSTIFIED


Move os dados fazendo alinhamento esquerda do campo receptor. Esta opo til para mover campos de entrada, evitando ter que pesquisar por brancos digitados esquerda do valor.

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120

DEFINE DATA LOCAL 1 #NUM (N5) INIT<10> 1 #A (A10) INIT<' ABCDE'> 1 #B (A10) END-DEFINE MOVE LEFT JUSTIFIED #NUM TO #B DISPLAY '12345' #NUM '1234567890' #B * MOVE LEFT JUSTIFIED #A TO #B WRITE // '#A: +' #A '+' / '#B: +' #B '+' / END

Resultado: 12345 1234567890 ------ ---------10 10

#A: + ABCDE + #B: + ABCDE +

A opo LEFT JESTIFIED no vlida quando o campo destino numrico. Nesta situao, ocorre um erro de compilao.

14.3. Opo RIGHT JUSTIFIED


Movimenta os dados alinhando direita do campo destino.

0010 DEFINE DATA LOCAL 0020 1 #NUM (N5) INIT<10> 0030 1 #A (A10) INIT<'ABCDE'>

Pgina 62 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

0040 0050 0060 0070 0080 0090 0100 0110 0120

1 #B (A10) END-DEFINE MOVE RIGHT JUSTIFIED #NUM TO #B DISPLAY '12345' #NUM '1234567890' #B * MOVE RIGHT JUSTIFIED #A TO #B WRITE // '#A: +' #A '+' / '#B: +' #B '+' / END

Resultado: 12345 1234567890 ------ ---------10 10

#A: + ABCDE + #B: + ABCDE +

14.4. Opo BY NAME


Movimenta os campos individuais (itens elementares) de uma estrutura de dados para outra, sendo que apenas os campos cujos nomes aparecem em ambas s estruturas so movimentadas. A segunda estrutura (destino) deve ser de nvel 01. Esta opo muito til no caso de codificao de mltiplos MOVEs campo a campo. Por exemplo, quando se deseja mover os campos de uma view para um registro de workfile.

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150 0160 0170 0180 0190 0200

DEFINE DATA LOCAL 1 XXX VIEW OF PERSONNEL 2 NAME 2 SEX 2 AGE 2 PHONE 2 SALARY * 1 #REG-XXX 2 NAME (A20) 2 SEX (A1) 2 AGE (N2) 2 PHONE (A8) 2 SALARY (N6) END-DEFINE * READ XXX MOVE BY NAME XXX TO #REG-XXX END-READ END

No esquecer de sempre qualificar o nome dos campos com o nome da view, mesmo dentro do loop de leitura. Isto porque o Natural sempre assume, em princpio, que se trata de uma varivel do usurio e no um campo de view. Pgina 63 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

14.5. Opo BY POSITION


A opo BY POSITION do MOVE permite mover campos de um grupo para outro, apesar dos nomes destes campos poderem estar diferentes. As regras so as seguintes: O nmero de campos nos dois grupos precisa ser o mesmo; Os nveis dos campos precisam ser iguais

Se houver a presena de estruturas de ARRAY, eles precisam ter as mesmas dimenses.

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150 0160 0170 0180 0190 0200

DEFINE DATA LOCAL 1 XXX VIEW OF PERSONNEL 2 NAME 2 SEX 2 AGE 2 PHONE 2 SALARY * 1 #REG-XXX 2 NOME (A20) 2 SEXO (A1) 2 IDADE (N2) 2 TELEFONE (A8) 2 SALARIO (N6) END-DEFINE * READ XXX MOVE BY POSITION XXX TO #REG-XXX END-READ END

14.6. Opo SUBSTRING


Permite mover a poro de um campo para outro campo.
MOVE SUBSTRING(#A,1,5 ) TO #B

Permite mover o valor de um campo para a poro de um outro campo.


MOVE #A TO SUBSTRING(#B,1,5)

Permite mover a poro de um campo para a poro de um outro campo.


MOVE SUBSTRING(#A,7,3) TO SUBSTRING(#B,3,3)

Pgina 64 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120

DEFINE DATA LOCAL 1 #NOME (A30) INIT<'LUCIANO PERDIGO'> 1 #SOBRENOME (A30) END-DEFINE MOVE SUBSTRING(#NOME,10,8) TO #SOBRENOME * WRITE '=' #NOME // '=' #SOBRENOME // * MOVE #SOBRENOME TO SUBSTRING(#NOME,1,8) * WRITE '=' #NOME END

Resultado: #NOME: LUCIANO PERDIGO

#SOBRENOME: PERDIGO

#NOME: PERDIGO PERDIGO

14.7. Opo ALL


Move repetidas vezes o valor do campo fonte para o campo destino, at que esteja completo. Este comando pode ser usado para expressar um grfico de barras, por exemplo:

MOVE ALL /**** TO #A UNTIL #N

O tamanho da barra seria calculado pelo programa e atribudo #N, e o comando MOVE ALL desenharia o grfico. Para #N = 3, #A conteria /**. Para #N=12, #A conteria /****/****/* No utilizar este comando para branquear uma varivel alfa. Um RESET ou MOVE ALL muito mais eficiente e o efeito o mesmo. A opo UNTIL controla o nmero de caracteres a serem movidos e no o nmero de repeties do campo fonte.

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100

DEFINE DATA LOCAL 1 #A (A30) END-DEFINE MOVE ALL '#****' TO #A WRITE '=' #A / * RESET #A MOVE ALL '#****' TO #A UNTIL 10 WRITE '=' #A END

Resultado:

Pgina 65 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

#A: #****#****#****#****#****#**** #A: #****#****

15.

CONSIDERAES DECIDE x IF
O comando IF tem algumas consideraes importantes quanto performance: As condies so analisadas da esquerda para a direita; Assim que o Natural determine um IF, isto , encontre uma clusula FALSA entre clusulas combinadas por AND ou uma VERDADEIRA entre clusulas combinadas por OR, as demais condies do IF no so avaliadas. Consideremos a seguinte situao: Se uma srie de quatro condies verdadeira, deve-se executar alguma rotina, caso

contrrio nada deve ser feito. A melhor codificao do comando IF ser:

IF COND1 AND COND2 AND COND3 AND COND4

Onde COND1 a condio com maior probabilidade de ser FALSA e COND4 a mais provvel de ser VERDADEIRA. Assim o Natural poderia interromper a avaliao quando encontrasse a primeira condio FALSA. Consideremos agora o uso do comando DECIDE para esta mesma situao. Desta forma, poderamos ter a seguinte codificao:

DECIDE FOR FIRST CONDITION WHEN COND1 AND COND2 AND COND3 AND COND4 ... WHEN NONE IGNORE END-DECIDE

Ou ainda:

DECIDE FOR EVERY CONDITION WHEN COND1 WHEN COND2 WHEN COND3 WHEN COND4

Pgina 66 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

WHEN ALL WHEN NONE IGNORE END-DECIDE

A primeira codificao melhor e teria o mesmo nvel de performance que o exemplo com o comando IF. A segunda codificao funciona, porem ser menos eficiente. A grande vantagem do uso dos comandos DECIDE FOR e DECIDE ON quando se pode fazer uso das clusulas ANY, ALL e NONE. Nestes casos, a codificao com o comando IF recomendvel em casos apropriados, principalmente quando a clusula ELSE no relevante. Entretanto, na grande maioria dos casos pode-se usar o comando DECIDE, obtendo-se no s melhor legibilidade como tambm maior eficincia.

16. COMANDOS DE ACESSO AO BANCO DE DADOS ADABAS


16.1. Find
FIND |operando1| RECORDS IN FILE view-name

PASSWORD=operando2 CIPHER=operando3 WITH-clause COUPLED-clause STARTING WITH ISN=operando5 SORTED BY-clause RETAIN-clause WHERE-clause IF NO RECORDS FOUND-clause Statement... END-FIND

A instruo FIND usada para selecionar registros de arquivos da base de dados, baseado em um critrio de pesquisa que consiste de campos descritores (chaves). Esta instruo inicia um LOOP que executado a cada vez que um registro selecionado. Cada campo do registro pode ser referenciado dentro deste LOOP.

16.1.1. Processo de limite (ALL/operando1)


O nmero de registros selecionados pode ser limitado atravs do operando1, que pode ser tanto uma constante numrica ou uma varivel entre parnteses. ALL pode ser especificado opcionalmente para enfatizar que todos os registros selecionados devem ser processados. Pgina 67 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

Quando um limite for especificado via operando1, este limite se aplica ao LOOP que est sendo executado. O nmero especificado no pode exceder o valor do limite global definido tanto pela instruo LIMIT quanto pela instruo SET GLOBALS. Registros rejeitados pela clusula WHERE no so levados em conta para controlar o limite.

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150

DEFINE DATA LOCAL 1 XXX VIEW OF EMPLOYEES 2 PERSONNEL-ID 2 NAME 2 SEX 2 CITY END-DEFINE * FIND(2) XXX WITH NAME = 'ARTHUR' DISPLAY PERSONNEL-ID NAME SEX CITY END-FIND END

Resultado: PERSONNEL ID S CITY E X --------- -------------------- - -------------------50005500 50005300 ARTHUR ARTHUR M BRASILIA F BRASILIA NAME

16.1.2. Find First, Find Number, Find Unique


Estas opes so usadas para selecionar o primeiro registro de um conjunto selecionados (FIND FIRST), para determinar o nmero de registros de um conjunto selecionado (FIND NUMBER), ou para assegurar que apenas um registro satisfaz um critrio de seleo (FIND UNIQUE).

16.1.3. View-name
O nome de uma view definida em um rea de dados global ou local (global data area ou local data area). Em structured mode, o nome da view precisa ser definido na rea de dados global ou local, usando ou o editor de rea de dados ou a instruo DEFINE DATA.

Pgina 68 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

16.1.4. Clusula PASSWORD


A clusula PASSWORD usada para fornecer uma senha (password) para acessar dados de um arquivo ADABAS protegido por password. Se a PASSWORD for especificada como uma constante, ela deve ser sempre ser codificada na coluna 1 (um) de uma linha para que no aparea. Quando a PASSWORD for fornecida atravs do terminal, deve ser digitado primeiro %* para que a PASSWORD no aparea. O valor da PASSWORD no pode ser alterado durante a execuo de um LOOP.

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150 0160 0170

DEFINE DATA LOCAL 1 XXX VIEW OF EMPLOYEES 2 PERSONNEL-ID 2 NAME 2 SEX 2 CITY END-DEFINE * FIND(2) XXX PASSWORD= WITH NAME = 'ARTHUR' DISPLAY PERSONNEL-ID NAME SEX CITY END-FIND END

16.1.5. Clusula CIPHER


Esta clusula usada para acessar arquivos ADABAS cifrados. O seu uso anlogo a da clusula PASSWORD. A chave de cifragem pode ser especificado pode ser especificada como uma constante numrica ou como uma varivel definida pelo usurio com o formato (N8). O valor da chave no pode ser alterado durante a execuo de um LOOP.

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130

DEFINE DATA LOCAL 1 XXX VIEW OF EMPLOYEES 2 PERSONNEL-ID 2 NAME 2 SEX 2 CITY * 1 #C (N8) END-DEFINE * INPUT (AD=MDLT'_') 'ENTRE COM A CHAVE CIFRADA:' #C * FIND(2) XXX

Pgina 69 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

0140 PASSWORD= 0150 CIPHER = #C 0160 WITH NAME = 'ARTHUR' 0170 DISPLAY PERSONNEL-ID 0180 NAME 0190 SEX 0200 CITY END-FIND END

16.1.6. Clusula WITH

WITH LIMIT (operand4) basic-search-criterion

Esta clusula obrigatria e usada para especificar o critrio de pesquisa, que consiste de campos chaves (descritores) definidos na base de dados. Dentro do WITH podem ser usados descritores, sub-descritores, super-descritores ou descritores fonticos. O nmero de registros selecionados como resultado de uma clusula WITH pode ser limitado com o uso da palavra LIMIT junto com uma constante numrica ou uma varivel definida pelo usurio, entre parnteses, contendo o valor de limite. Se o nmero de registros selecionados exceder o limite, o programa terminar com uma mensagem de erro.

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150 0160 0170 0180

DEFINE DATA LOCAL 1 XXX VIEW OF EMPLOYEES 2 PERSONNEL-ID 2 NAME 2 SEX 2 CITY * 1 #C (N8) END-DEFINE * FIND XXX WITH LIMIT (20) NAME = 'ARTHUR' DISPLAY PERSONNEL-ID NAME SEX CITY END-FIND DISPLAY *NUMBER(0110) *COUNTER(0110) END

Resultado: NAT1005 More records found than specified in search limit.

Pgina 70 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

16.1.6.1. Critrio de bsico de pesquisa

1)

descritor[(i)]

= EQ EQUAL TO

value

OR = value THRU value BUT NOT value = EQ EQUAL TO = NE NOT EQUAL < LT LESS THAN <= LE LESS EQUAL > GT GREATER THAN >= GE GREATER EQUAL

2) descritor[(i)]

3) set-name

descritor i

descrito, sub-descritor, super-descritor ou descrito fontico ADABAS.

Um descritor contido dentro de um grupo peridico pode ser especificado com ou

sem ndice. Se o ndice no for especificado, o registro ser selecionado se o valor especificado estiver em qualquer ocorrncia. Se o ndice for especificado, o registro selecionado apenas se o valor estiver na ocorrncia espcificada pelo ndice. O ndice deve ser uma constante e no pode ser especificado um intervalo. Se um descritor estiver dentro de um campo mltiplo, o ndice no pode ser especificado. O registro ser selecionado se o valor estiver em qualquer posio do campo. Valor valor de pesquisa. Os formatos do descritor e o valor de pesquisa devem se

compatveis. set-name identifica um conjunto de registros previamente selecionados com um

FIND com a clusula RETAIN. O conjunto referenciado no FIND precisa ter sido criado do mesmo arquivo ADABAS fsico. O set-name deve ser uma constante alfanumrica (mximo de 32 caracteres) ou o contedo de uma varivel alfanumrica. Pgina 71 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

16.1.6.2. Critrio de pesquisa utilizando conexo


Critrios de pesquisa podem ser combinados usando operadores booleanos AND, OR e NOT. Podem ser usados parnteses para controlar a ordem de avaliao, que :

() NOT AND OR

Parnteses (mais alta) Negao Conexo E Conexo OU (mais baixa)

Exemplos:

FIND EMPLOYEES WITH NAME = LUCIANO FIND EMPLOYEES WITH CITY NE BRASILIA FIND EMPLOYEES WITH BIRTH = 710501 FIND EMPLOYEES WITH BIRTH = 710501 THRU 710531 FIND EMPLOYEES WITH NAME = PERDIGAO OR = LUCIANO OR = ROGERIO FIND EMPLOYEES WITH PERSONNEL-ID = 1000 THRU 1009 BUT NOT 1005 THRU 1007 FIND EMPLOYEES WITH BIRTH LT 750105 AND DEPT = DEPT05 FIND EMPLOYEES WITH JOB-TITLE = ANALISTA AND (BIRTH GT 700221 OR LANG = PORTUGUESE FIND EMPLOYEES WITH JOB-TITLE = ANALISTA AND NOT (BIRTH GT 700221 OR LANG = PORTUGUESE) FIND EMPLOYEES WITH DEPT = ABC THRU DEF AND (CITY = BRASILIA OR = CORONEL FABRICIANO) AND BIRTH GT 600101 FIND VEHICLES WITH MAKE = FIAT AND COLOR = AZUL OR = AMARELO OR = VERMELHO

16.1.7. Uso de descritores

Pgina 72 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

Os usurio podem usar campos de base de dados definidos como descritores para construrem critrios bsicos de pesquisa. Os valores usados com os descritores devem ser compatveis com o formato interno do descritor.

16.1.8. Sub-descritores, Super-descritores e Descritores Fonticos


Um sub-descritor um descritor formado de parte de um campo e o seu formato interno o mesmo do campo do qual ele deriva. Um super-descritor um descritor cujo valor formado de um ou mais campos ou partes de campos. O seu formato interno binrio se todos os campos dos quais ele deriva forem definidos com o formato numrico. Caso contrrio, o formato alfanumrico. Uma pesquisa fontica retorna todos os valores cujo som seja semelhante ao do valor procurado. Um descritor fontico tem sempre o formato alfanumrico. Valores para sub-descritores e super-descritores podem ser especificados das seguintes formas: Constantes numricas ou hexadecimais. Uma constante hexadecimal deve ser usada para super-descritores com formato binrio. Variveis definidas pelo usurio podem ser especificadas usando a instruo REDEFINE para selecionar as partes que formam o valor de um sub ou superdescritor.

16.1.9. Uso de Descritores contidos dentro de um Array do DB


Estes descritores podem ser um campo mltiplo ou estar contido em um grupo peridico. Um descritor contido dentro de um grupo peridico pode ser especificado com ou sem ndice. Se o ndice no for especificado, o registro ser selecionado se o valor estiver em qualquer ocorrncia. Se o ndice for especificado, o registro selecionado apenas se o valor estiver na ocorrncia especificada pelo ndice. O ndice deve ser uma constante e no pode ser especificado um intervalo. Se um descritor estiver dentro de um campo mltiplo, o ndice no pode ser especificado. O registro ser selecionado se o valor estiver em qualquer posio do campo.

Obs.: os seguintes exemplos assumem que o campo SALARY um descritor contido dentro de um grupo peridico e o campo LANG um campo mltiplo.

Pgina 73 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

Exemplos:

FIND EMPLOYEES WITH SALARY LT 20000 (resulta na pesquisa de todas as ocorrncias de SALARY) FIND EMPLOYEES WITH SALARY(1) LT 20000 (resulta na pesquisa somente da primeira ocorrncia) FIND EMPLOYEES WITH SALAY (1:4) LT 20000 (invlido) (no pode ser especificado um intervalo para campos dentro de grupo peridico usados como chave) FIND EMPLOYEES WITH LANG = BRAZIL (resulta na pesquisa de todos os valores de LANG) FIND EMPLOYEES WITH LANG(1) = BRAZIL (invlido) (no pode ser especificado ndice para campos mltiplos)

16.1.10. Clusula COUPLED

AND COUPLED TO FILE view-name OR

VIA descriptor1

EQ EQUAL =

descriptor2

WITH basic-search-criterion

Est clusula usada para especificar uma pesquisa que envolva o uso da facilidade de acoplamento do ADABAS, que permite que descritores de diferente arquivos sejam especificados no critrio de pesquisa de um nico FIND. Os arquivos usados com a clusula COUPLED devem ser fisicamente acoplados, usando o utilitrio ADABAS apropriado. Em um nico FIND, podem ser usadas, no mximo, 4 clusulas COUPLED. O mesmo arquivo no pode ser usado em duas diferentes clusulas COUPLED dentro do mesmo FIND. Um set-name (ver clusula RETAIN) no pode ser especificado no critrio bsico de pesquisa. A conexo de critrios, usando parnteses, no permitida no critrio bsico de pesquisa. Campos de base de dados especificados em uma clusula COUPLED no esto disponveis para referncias posteriores, a menos que um outro READ ou FIND seja usado separadamente para o arquivo acoplado.

Pgina 74 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150 0160

DEFINE DATA LOCAL 1 EMP VIEW OF EMPLOYEES 2 PERSONNEL-ID 2 NAME 2 SEX 2 CITY * 1 VEI VIEW OF VEHICLES 2 MAKE END-DEFINE * FIND EMP WITH CITY = 'BARCELONA' AND COUPLED TO VEI WITH MAKE = 'FIAT' DISPLAY NAME END-FIND END

A referncia a NAME vlida pois este campo est contido no arquivo EMPLOYEES e a referncia a MAKE invlida proque MAKE est contido no arquivo VEHICLES que foi especificado na clusula COUPLED.

16.1.11. Clusula SORTED BY

SORTED BY descriptor ...3

DESCENDING

A clusula SORTED BY usada para que o ADABAS classifique os registros selecionados baseado na seqncia de um a trs descritores, que podem ser diferentes dos usados para a seleo. Pode ser especificada classificao ascendente (default) ou descendente. Para fazer esta classificao, o ADABAS utiliza as listas invertidas, sem fazer a leitura dos registros. Se os descritores contiverem um grande nmero de valores ocorrer um grande OVERHEAD quando do uso do SORTED, porque ser preciso pesquisar a lista inteira at que todos os registros selecionados tenham sido localizados. Esta clusula no deve ser usada quando for grande o nmero de registros a serem classificados. No se pode usar campos peridicos para realizar a classificao. So aceitos campos mltiplos sem ndice. As clusulas SORTED BY e RETAIN no pode ser usadas juntas.

0010 DEFINE DATA LOCAL 0020 1 EMP VIEW OF EMPLOYEES 0030 2 PERSONNEL-ID 0040 2 FIRST-NAME 0050 2 NAME 0060 2 SEX 0070 2 CITY 0080 END-DEFINE

Pgina 75 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

0090 0100 0110 0120 0130 0140

* FIND(15) EMP WITH CITY = 'BRASILIA' SORTED BY NAME PERSONNEL-ID DISPLAY NAME(IS=ON) FIRST-NAME PERSONNEL-ID END-FIND END

Resultado: NAME FIRST-NAME PERSONNEL

ID -------------------- -------------------- --------FULANO DE TAL FULANA DE TAL SILVA MARCIO MOURA MOURA MOURA MOURA MOURA MOURA MOURA MOURA MOURA MOURA 12000002 12000003 12111 24242425 777 50001700 50001900 50002100 50002300 50002500 50002700 50002900 50003000 50003100 50003300

ADRIANA ANTONIA PAULINA ANTUNES ARTHUR

16.1.12. Clusula RETAIN

RETAIN AS operando

Usa-se esta clusula para guardar os ISNs de um grupo de registros selecionados pela clusula WITH para processamento posterior. A lista de ISNs dos registros selecionados armazenada com um conjunto de ISNs no ADABAS WORK FILE. O conjunto pode ser usado em FINDs subseqentes com critrio bsico de pesquisa para posterior refinamento do conjunto ou para posterior processamento dos registros. O conjunto criado especfico do arquivo e s pode ser usado em outro FIND que processa o mesmo arquivo. O conjunto pode ser referenciado por qualquer programa NATURAL. A grande vantagem desta clusula que o resultado de pesquisas muito grandes podem ser retidas e usadas para um posterior processamento sem necessidade de repetir toda a pesquisa. Set-Name (operado) O nome atravs do qual se identifica estes registros retidos

pode ser uma constante alfanumrica ou contedo de uma varivel alfanumrica. No checada a duplicidade de nomes de conjuntos no RETAIN. O nome do conjunto de registros sobrepe ao antigo, caso se use o mesmo nome.

Pgina 76 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

Set-Name liberados

No h limite para o nmero de conjuntos que podem ser

retidos ou o nmero de ISNs em um conjunto. Recomenda-se reter o menor nmero de registros necessrios num determinado momento a fim de no encher a WORK FILE. A lista de ISN (dos registros retidos) que no for mais utilizada pode ser liberada com a instruo RELEASE SETS. Os conjuntos retidos valem para uma sesso NATURAL e no so liberados automaticamente. Um conjunto criado por um programa poder ser referenciado por um outro.

16.1.12.1. Acessos/Atualizaes por outros usurios


Os registros identificados pelos ISNs em conjuntos retidos no so protegidos contra acessos e atualizaes efetuadas por outros usurios.

16.1.12.2. Restries
As clusulas RETAIN e SORTED BY no podem ser usadas juntas.

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150 0160 0170 0180 0190 0200

DEFINE DATA LOCAL 1 EMP VIEW OF EMPLOYEES 2 NAME 2 BIRTH 2 CITY END-DEFINE * FIND NUMBER EMP WITH BIRTH = 710230 RETAIN AS 'TESTEEMP' * IF *NUMBER(0080) = 0 STOP END-IF * FIND EMP WITH 'TESTEEMP' AND CITY = 'MADRID' DISPLAY NAME CITY BIRTH END-FIND * RELEASE SET 'TESTEEMP' END

Resultado: NAME CITY DATE

OF BIRTH -------------------- -------------------- -------FREIXOMIL MADRID 71/02/30

16.1.13. Clusula WHERE


Pgina 77 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

WHERE logical-condition

Esta clusula usada para especificar critrio de pesquisa adicional que levado em conta aps a leitura dos registros que atendam a clusula WITH, para depois em cima deste conjunto, fazer a seleo pelo WHERE. Isto ocorre antes que qualquer processamento seja feito (incluindo AT BREAK). Os campos usados na condio lgica podem ser ou no descritores. Os registros rejeitados (que no atendam a clusula WHERE) no so levados em conta para o limite especificado dentro da instruo FIND. Entretanto, so considerados para qualquer limite estabelecido numa instruo GLOBALS, LIMIT ou num limite que seja estabelecido no momento da gerao do NATURAL.

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120

DEFINE DATA LOCAL 1 EMP VIEW OF EMPLOYEES 2 NAME 2 BIRTH 2 CITY END-DEFINE * FIND EMP WITH CITY = 'BRASILIA' WHERE NAME = 'IVAN' DISPLAY NAME CITY END-FIND END

Resultado: NAME CITY

-------------------- -------------------IVAN BRASILIA

16.1.14. Clusula IF NO RECORDS FOUND

IF NO RECORDS FOUND ENTER Statement .. END-NOREC

Esta clusula usada para executar instrues se nenhum registro atender ao critrio de pesquisa especificado na clusula WITH e/ou WHERE. Pgina 78 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

As instrues estabelecidas no IF NO RECORDS FOUND so executadas antes de se iniciar as instrues do LOOP. Se nenhum processamento for necessrio dever ser usada a palavra chave ENTER.

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150

DEFINE DATA LOCAL 1 EMP VIEW OF EMPLOYEES 2 NAME 2 BIRTH 2 CITY END-DEFINE * FIND EMP WITH CITY = 'GOIANIA' IF NO WRITE 'REGISTRO INEXISTENTE.' ESCAPE BOTTOM END-NOREC DISPLAY NAME CITY BIRTH END-FIND END

16.1.14.1. Valores da Base de Dados


Os campos da base de dados que referenciam o arquivo no LOOP sero resetados, a menos que outros valores sejam assinalados dentro do IF NO RECORDS FOUND.

16.1.14.2. Avaliao das Funes do Sistema NATURAL


As funes so avaliadas uma vez para o restrito vazio que criado como resultado da clusula IF NO RECORDS FOUND.

16.1.14.3. Restries
Esta clusula no est disponvel para as opes FIND FIRST, FIND NUMBER e FIND UNIQUE.

16.1.15. Variveis do Sistema Disponveis com FIND


As variveis *ISN, *NUMBER e *COUNTER so automaticamente criadas para cada instruo FIND. Quando se usa estas variveis fora do LOOP ou com as instrues FIND UNIQUE, FIND FIRST ou FIND NUMBER deve-se referenciar o nmero da linha da instruo FIND. Pgina 79 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

O formato e tamanho default de cada uma destas variveis do Sistema (P8). Este default no pode ser alterado. *ISN Contm o ISN (internal sequence number) do registro que est sendo

processado no LOOP. Esta varivel no est disponvel para a instruo FIND NUMBER. *NUMBER clusula WITH. *COUNTER executado. Contm o nmero de vezes que o LOOP do FIND foi Contm o nmero de registros que foram selecionados pela

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110

DEFINE DATA LOCAL 1 EMP VIEW OF EMPLOYEES 2 NAME 2 BIRTH 2 CITY END-DEFINE * FIND EMP WITH CITY = 'MADRID' DISPLAY NAME CITY *ISN *NUMBER *COUNTER END-FIND END

Resultado: NAME CITY ISN NMBR CNT -------------------- -------------------- ----------- ----------- ----------DE JUAN DE LA MADRID PINERO TRANQUILINO GOMEZ ... MADRID MADRID MADRID MADRID MADRID ... 400 401 405 407 408 ... 40 40 40 40 40 ... 1 2 3 4 5 ...

SERRANO DE LA IGLESIA OSEA MARTINEZ

MADRID MADRID MADRID MADRID

495 496 498 499

40 40 40 40

37 38 39 40

16.1.16. Vrias instrues FIND


possvel criar ninhos de FINDs onde o LOOP mais interno executado para cada registro selecionado no LOOP externo.

0010 DEFINE DATA LOCAL 0020 1 EMP VIEW OF EMPLOYEES 0030 2 PERSONNEL-ID

Pgina 80 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150 0160

2 NAME 2 FIRST-NAME 1 VEI VIEW OF VEHICLES 2 PERSONNEL-ID 2 MAKE END-DEFINE * FIND EMP WITH NAME = 'IVAN' FIND VEI WITH PERSONNEL-ID = EMP.PERSONNEL-ID DISPLAY EMP.NAME VEI.MAKE END-FIND END-FIND END

Resultado: NAME MAKE -------------------- -------------------IVAN VOLVO

16.1.17. FIND NUMBER


A instruo FIND NUMBER usada para determinar o nmero de registros que satisfaam o critrio de seleo do WITH/WHERE. No gerado LOOP e nenhum campo do arquivo pesquisado estar disponvel.

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100

DEFINE DATA LOCAL 1 EMP VIEW OF EMPLOYEES 2 PERSONNEL-ID 2 NAME 2 FIRST-NAME END-DEFINE * FIND NUMBER EMP WITH NAME = 'MARIA' DISPLAY *NUMBER(0080) END

Resultado: NMBR ----------6

16.1.17.1. Restries
As clusulas SORTED BY e IF NO RECORDS FOUND no podem ser usadas com a instruo FIND NUMBER.

Pgina 81 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

16.1.18. Variveis do Sistema Disponveis com FIND


As variveis do Sistema disponveis com FIND NUMBER so: *ISN Contm o nmero de registros selecionados com a clusula WITH.

16.2. Read
READ BROWSE operand1 RECORDS IN FILE view-name

PASSWORD=operand2 CIPHER=operand3 WITH REPOSITION sequence/range-specification STARTING WITH ISN=operand4 WHERE-clause statement ... END-READ

A instruo READ usada para ler registros de um arquivo de base de dados. Os registros podem ser lidos na seqncia fsica, na seqncia de ISN ou na seqncia lgica atravs de valores de pesquisa por um determinado descritor. Esta instruo gera um LOOP de processamento.

16.2.19.

Processo de limite (operando1)

O nmero de registros a serem lidos pode ser limitado por uma constante numrica (0 a 99999999) ou uma varivel, colocada entre parnteses, seguindo a palavra READ. Qualquer limite especificado deve ser menor que o limite definido durante a instalao do NATURAL ou com a instruo LIMIT ou SET GLOBALS. Este limite sobrepe qualquer outro limite que tenha sido definido anteriormente.

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110

DEFINE DATA LOCAL 1 EMP VIEW OF EMPLOYEES 2 PERSONNEL-ID 2 NAME 2 FIRST-NAME END-DEFINE * READ(3) EMP DISPLAY PERSONNEL-ID NAME FIRST-NAME END-READ END

Resultado: PERSONNEL NAME FIRST-NAME ID --------- -------------------- --------------------

Pgina 82 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

50005600 50005500 50005300

MIRIAM ARTHUR ARTHUR

MOURA MOURA MOURA

16.2.20.

View-name

Nome da view como definida na rea globals ou local. No modo estruturado, viewname tem que ser definida na rea global ou local, usando o editor ou a instruo DEFINE DATA.

16.2.21.

PASSWORD/CHIPER

A clusula PASSWORD usada para acessar arquivos ADABAS protegidos. A clusula CIPHER usada para acessar arquivos ADABAS cifrados.

16.2.22.

Especificao de Seqncias

1. IN PHYSICAL ASCENDING DESCENDING VARIABLE operand5 2. BY WITH ISN = EQ EQUAL TO STARTING FROM

SEQUENCE

operand6

THRU operand7 ENDING AT

3. IN LOGICAL ASCENDING DESCENDING VARIABLE operand5 BY WITH descriptor

SEQUENCE

= EQ EQUAL TO STARTING FROM

operand6

THRU operand7 ENDING AT

PHYSICAL SEQUENCE usada para ler registros na ordem em que ele esto fisicamente armazenados na base de dados. Esta a seqncia default. BY ISN usada para ler registros na seqncia de ISN (Internal Sequence Number). LOGICAL SEQUENCE usada para ler registros na ordem ascendente dos valores de um descritor. Se LOGICAL for especificado com um descritor, os registros sero lidos na seqncia dos valores do descritor. Um descritor, sub-descritor ou super-descritor podem ser usados para controle de seqncia. Um descritor fontico ou um descritor dentro de um grupo peridico no pode ser usado. Se o descritor usado for definido com NULL VALUE SUPRESSION, aqueles que tem valores nulos no sero lidos. Pgina 83 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

Se o descritor usado for um campo mltiplo o mesmo registro ser lido mltiplas vezes dependendo do nmero de valores armazenados. As clusulas STARTING FROM e ENDING AT so usadas para especificar limites de valores para pesquisa. Os termos THRU e ENDING AT implicam em leitura do limite superior inclusive. Se um valor inicial for especificado, a leitura comear com o valor especificado. Se o valor inicial no for encontrado, inicia-se a partir do valor imediatamente superior. Se at ao limite superior no for encontrado valores, o LOOP no ser executado. Valores ENDING AT no podem ser especificados com o uso de sub ou super-descritores. Um campo mltiplo no pode ser usado com a opo ENDING AT. A palavra chave EQ ou = somente estabelece o valor inicial para a operao de READ. O valor final deve ser especificado com a opo ENDING AT/THRU.

0010 DEFINE DATA LOCAL 0020 1 EMP VIEW OF EMPLOYEES 0030 2 PERSONNEL-ID 0040 2 NAME 0050 2 FIRST-NAME 0060 END-DEFINE 0070 * 0080 WRITE 'READ FISICO' 0090 READ(5) EMP 0100 DISPLAY *ISN PERSONNEL-ID NAME FIRST-NAME 0110 END-READ 0120 * 0130 WRITE 'READ POR ISN' 0140 READ(5) EMP BY ISN 0150 DISPLAY *ISN PERSONNEL-ID NAME FIRST-NAME 0160 END-READ 0170 * 0180 WRITE 'READ POR NOME' 0190 READ(5) EMP BY NAME 0200 DISPLAY *ISN PERSONNEL-ID NAME FIRST-NAME END-READ * WRITE 'READ POR NOME INICIANDO DE L' READ(5) EMP BY NAME = 'L' DISPLAY *ISN PERSONNEL-ID NAME FIRST-NAME END-READ END Resultado: ISN PERSONNEL NAME FIRST-NAME ID ----------- --------- -------------------- -------------------READ FISICO 2 50005600 3 50005500 4 50005300 5 50004900 6 50004600 READ POR ISN 1 9990001 2 50005600 3 50005500 4 50005300 5 50004900 READ POR NOME

MIRIAM ARTHUR ARTHUR ARTHUR ARTHUR MIRIAM MIRIAM ARTHUR ARTHUR ARTHUR

MOURA MOURA MOURA MOURA MOURA MOURA MOURA MOURA MOURA MOURA

Pgina 84 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

1302 34356739 1413 12000001 1421 12000002 1429 12000003 1437 12000004 READ POR NOME INICIANDO DE L 658 F6113745 LAERCIO 181 50001800 LAFON 312 11400320 LANDMANN 938 30008544 LANE 256 11100309 LANKATILLEKE

LISBELA FULANO DE TAL FULANA DE TAL RUTINEIA FREI TERUYA CHRISTIANE HARRY JACQUELINE LALITH

16.2.23.

Clusula WHERE

WHERE condio-lgia

A clusula WHERE usada para especificar outros critrios de seleo que sero executados depois dos registros lidos e antes que qualquer processamento seja executado com o registro (incluindo processo de quebra). Se a instruo LIMIT ou um processo de limite for especificado na instruo READ que contm a clusula WHERE, os registros rejeitados no so levados em conta para efeito do limite especificado. Variveis do Sistema NATURAL disponveis com READ: *ISN Contm o ISN (internal sequence number) do registro que est sendo

processado no LOOP. *COUNTER executado. Contm o nmero de vezes que o LOOP do READ foi

16.3. Combinao de instrues READ e FIND


O exemplo abaixo l registros do arquivo EMPLOYEES em seqncia lgica baseado no descritor NAME. A instruo FIND ento usada para o arquivo VEHICLES usando PERSONNELID do arquivo EMPLOYEES como critrio de pesquisa. O relatrio mostra o nome (obtido do arquivo EMPLOYEES) de cada pessoa lida e o modelo do automvel (obtido do arquivo VEHICLES) pertencente a estas pessoas. Mltiplas linhas com o mesmo nome sero produzidas se a pessoa tiver mais de um automvel.

0010 DEFINE DATA LOCAL 0020 1 EMP VIEW OF EMPLOYEES 0030 2 PERSONNEL-ID

Pgina 85 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150 0160 0170 0180 0190 0200 0210 0220

2 NAME 2 FIRST-NAME * 1 VEI VIEW OF VEHICLES 2 PERSONNEL-ID 2 MAKE END-DEFINE * LIMIT 10 * READ EMP BY NAME = 'MARIA' FIND VEI WITH PERSONNEL-ID = EMP.PERSONNEL-ID IF NO ESCAPE BOTTOM END-NOREC DISPLAY EMP.PERSONNEL-ID EMP.NAME VEI.MAKE END-FIND END-READ END

Resultado: PERSONNEL NAME MAKE ID --------- -------------------- -------------------20017100 20005100 MARKUSH MARKUSH MERCEDES-BENZ FORD

16.4. Get
GET IN FILE view-name PASSWORD = operand1 CIPHER = operand2 RECORD operand3 *ISN (r)

A instruo GET usada para ler um registro a partir de seu ISN. Esta instruo no gera LOOP.

0010 0020 0030 0040 0050 0100 0110 0120 0130 0140

DEFINE DATA LOCAL 1 EMP VIEW OF EMPLOYEES 2 PERSONNEL-ID 2 NAME 2 FIRST-NAME END-DEFINE * GET EMP 1117 DISPLAY *ISN PERSONNEL-ID NAME END

Resultado:

Pgina 86 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

ISN

PERSONNEL NAME ID ----------- --------- -------------------1117 12312312 MARIA

16.5. Histogram
HISTOGRAM operand1 VALUE IN FILE view-name PASSWORD=operand2 SEQUENCE-clause VALUE FOR FIELD operand4 STARTING/ENDING-clause WHERE logical-condition Statement ... END-HISTOGRAM

A instruo HISTOGRAM usada para ler valores de campos descritores, sub-descritores ou super-descritores. Estes valores so lidos diretamente das listas invertidas do ADABAS e retornam em ordem crescente. Esta instruo gera LOOP, mas no feito nenhum acesso a registro de dados. Desta forma apenas os campos descritores usados na instruo HISTOGRAM esto disponveis.

0010 0020 0030 0040 0050 0060 0070 0080 0090

DEFINE DATA LOCAL 1 EMP VIEW OF EMPLOYEES 2 NAME END-DEFINE * HISTOGRAM EMP NAME STARTING FROM 'MARIA' DISPLAY NAME END-HISTOGRAM END

Resultado: NAME -------------------MARIA MARIA SILVA MARIO MARKUSH

16.5.1. Limite do processo de LOOP (operand1)

Pgina 87 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

O nmero de registros a serem processados com a instruo HISTOGRAM pode ser limitado especificando uma constante numrica (0 at 99999999) ou uma varivel do usurio (somente formato N ou P). O limite sobrepe qualquer limite em efeito definido previamente. O limite no pode exceder qualquer limite global que tenha sido estabelecido em parmetros ativados no NATURAL ou especificados com o comando GLOBALS ou instruo SET GLOBALS.

16.5.2. Clusula PASSWORD


A clusula PASSWORD usada para acessar arquivos ADABAS protegidos.

16.5.3. Clusula STARTING/ENDING


Pode-se estabelecer intervalos de pesquisa com o uso da palavra chave THRU ou STARTING (iniciando em) ou ENDING (terminando em), seguidos por uma constante ou uma varivel que identificar critrio adicionais que sero executados aps a leitura dos valores antes de qualquer processamento (incluindo a execuo do AT BREAK). Caso o valor de incio no seja encontrado a pesquisa comear no valor imediatamente superior. Se o limite superior no for achado a pesquisa terminar no valor imediatamente anterior aquele limite estabelecido. Valores hexadecimais so aceitos como limite de pesquisa se os descritores forem de formato alfanumrico (A) ou binrio (B).

16.5.4. Clusula WHERE

WHERE condio-lgia

A clusula WHERE usada para especificar critrios de seleo adicionais que sero executados aps a leitura dos valores e antes de qualquer processamento (incluindo a execuo do AT BREAK). O descritor usado no WHERE precisa ser o mesmo usado no HISTOGRAM.

16.5.5. Variveis do Sistema Disponveis com HISTOGRAM


O formato e tamanho default de cada uma destas variveis do Sistema (P8). Este default no pode ser alterado.

Pgina 88 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

*ISN

Indica o nmero da(s) ocorrncia(s) nas quais o critrio de pesquisa

foi encontrado. Retornar zero se o descritor no estiver em um grupo peridico. *NUMBER Indica o nmero de registros correspondente a cada quebra

ocorrida no critrio de pesquisa. *COUNTER HISTOGRAM. Contm o nmero de LOOPs executados pelo

16.6. Store
STORE RECORD IN FILE view-name PASSWORD=operand1 CIPHER=operand2 USING GIVING NUMBER operand3 (r)

A instruo STORE usada para adicionar um registro na base de dados.

16.6.1. View-name
O nome da view como definido na rea de dados local ou global. No modo estruturado, view-name deve ser o nome da view como definido na rea de dados local ou globals, usando o editor da rea de dados ou a instruo DEFINE DATA.

16.6.2. Clusula PASSWORD/CIPHER


A clusula PASSWORD usada para prover uma password quando for fazer alteraes nos dados de arquivos ADABAS que so protegidos. A clusula CIPHER usada para prover um cdigo quando for fazer alteraes nos dados de arquivos ADABAS cifrados.

16.6.3. Clusula USING/GIVING NUMBER


Esta opo usada para gravar o registro com um nmero de ISN fornecido pelo usurio. Se j existir um registro com o ISN especificado ocorrer um erro e o programa terminar a menos que ON ERROR seja especificado.

16.6.4. Varivel do Sistema *ISN


Pgina 89 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

A varivel do Sistema NATURAL *ISN contm um ADABAS ISN atribudo ao novo registro como resultado da execuo da instruo STORE. Uma referncia subseqente ao *ISN deve conter o nmero da linha da instruo STORE.

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140

DEFINE DATA LOCAL 1 EMP VIEW OF EMPLOYEES 2 PERSONNEL-ID 2 NAME 2 CITY END-DEFINE * PERSONNEL-ID := 212121 NAME := 'PERDIGAO' CITY := 'IPABA' * STORE EMP END TRANSACTION END

16.7. Update
UPDATE RECORD IN STATEMENT (r)

A instruo UPDATE usada para atualizar um ou mais registros na base de dados. O registro a ser atualizado deve ter sido previamente selecionado usando a instruo FIND, GET, READ ou STORE.

16.7.1. Restries
A instruo UPDATE no pode estar na mesma linha da instruo que obteve o registro .

16.7.2. Notao de Referncia


A notao (r) usada para indicar a instruo na qual o registro a ser modificado foi lido. Se nenhuma referncia for especificada, ser assumido o registro selecionado pelo LOOP mais interno. (r) pode ser especificado como o nmero da linha da instruo ou o label.

16.7.3. Hold Status

Pgina 90 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

O uso da instruo UPDATE faz com que cada registro lido, no correspondente FIND ou READ, seja colocado em HOLD.

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150 0160 0170 0180 0190 0200 0210

DEFINE DATA LOCAL 1 EMP VIEW OF EMPLOYEES 2 PERSONNEL-ID 2 NAME 2 CITY END-DEFINE * FIND EMP WITH PERSONNEL-ID = '230' WRITE 'ANTES DO UPDATE' WRITE '=' PERSONNEL-ID '=' NAME '=' CITY * NAME := 'PERDIGAO' CITY := 'BRASILIA' * UPDATE (0080) * WRITE // 'APOS O UPDATE' WRITE '=' PERSONNEL-ID '=' NAME '=' CITY END-FIND END TRANSACTION END

Resultado: ANTES DO UPDATE PERSONNEL ID: 230

NAME: QQQQQQQQQQQQQQ

CITY: SAO PAULO

APOS O UPDATE PERSONNEL ID: 230

NAME: PERDIGAO

CITY: BRASILIA

16.8. Delete
DELETE RECORD IN STATEMENT (r)

A instruo DELETE usada para deletar registros de uma base de dados.

16.8.4. Restries
A instruo DELETE no pode ser especificado na mesma linha da instruo FIND, READ ou GET.

16.8.5. Notao de Referncia


A notao (r) (label ou nmero) usada para referenciar a linha onde o registro foi obtido. Pgina 91 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

Se nenhuma referncia for especificada, assume-se o LOOP ativo mais interno, no qual o registro foi obtido.

16.8.6. Hold Status


Todos os registros acessados pelo FIND ou READ so colocados em HOLD, at que seja executado um END TRANSACTION a cada 100 registros, para que estes sejam deletados fisicamente, evitando que a fila onde ficam armazenados os registros a serem atualizados/deletados se sature.

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120

DEFINE DATA LOCAL 1 EMP VIEW OF EMPLOYEES 2 PERSONNEL-ID 2 NAME 2 CITY END-DEFINE * FIND EMP WITH PERSONNEL-ID = '230' DELETE (0080) END-FIND END TRANSACTION END

16.9. End Transaction


A instruo END TRANSACTION usada para indicar o fim de um transao lgica. Uma transao lgica a menor unidade de trabalho (como definida pelo usurio) que precisa ser executada em sua totalidade para assegurar que informao contida na base de dados seja logicamente consistente. A execuo bem sucedida do END TRANSACTION assegura que todas as atualizaes feitas durante a transao sejam fisicamente aplicadas as bases de dados sem levar em conta subseqentes usurios, sesses NATURAL, ADABAS ou interrupes do sistema operacional. Atualizaes para as quais o END TRANSACTION no foi completado, sero abandonadas pelo ADABAS automaticamente. Esta instruo libera os registros retidos pelo usurio durante a transao e pode ser executada sob uma condio lgica.

16.10.

Backout Transaction

A instruo BACKOUT TRANSACTION usada para abandonar todas as atualizaes feitas numa transao lgica, isto , antes do END TRANSACTION. Tambm libera todos os registros mantidos em hold durante a transao. Pgina 92 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

17.

READ WORK FILE

READ WORK FILE work-file-number ONCE AT END OF FILE Statement ... END-ENDFILE Statement... END-WORK

A instruo READ WORK FILE usada para ler dados de um arquivo seqencial no ADABAS/DB2. necessrio o uso do JCL quando o arquivo de trabalho for lido. Esta instruo somente pode ser usada dentro de um programa que ser executado em batch mode. Causa o incio de um lao de processamento (LOOP) e todos os registros do arquivo de trabalho sero lidos e executados.

17.1. Work-file-number
o nmero do arquivo de trabalho (como definido para o NATURAL) a ser lido.

17.2. Opo ONCE


ONCE usada para indicar que somente um registro ser lido. Nenhum processo de LOOP iniciado. Se ONCE for especificado, a clusula AT END OF FILE pode, tambm, ser usada.

17.3. AT END OF FILE


Se a opo ONCE for usada, esta clusula deve ser especificada para indicar a ao a ser tomada, quando a condio de final de arquivo for detectada.

0010 DEFINE DATA LOCAL 0011 1 EMP VIEW OF EMPLOYEES 0012 0013 0014 0015 * 0020 1 #REGISTRO 0030 2 #CODIGO (N5) 2 PERSONNEL-ID 2 NAME 2 CITY

Pgina 93 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

0040 0050

2 #NOME 2 #CIDADE

(A40) (A25)

0060 END-DEFINE 0070 * 0080 READ EMP BY NAME 0081 0082 0083 0084 * 0086 WRITE WORK FILE 1 #REGISTRO #CODIGO := EMP.PERSONNEL-ID #NOME #CITY := EMP.NAME := EMP.CITY

0100 END-READ 0120 END

18.

WRITE WORK FILE

WRITE WORK FILE work-file-number

A instruo WRITE WORK FILE usada para gravar registros em arquivos de trabalhos seqencial. Esta instruo aplicvel em batch mode. possvel criar e ler um arquivo de trabalho no mesmo programa.

18.1. Work-file-number
o nmero do arquivo de trabalho (como definido para o NATURAL) a ser usado.

0010 DEFINE DATA LOCAL 0070 1 #REGISTRO 0080 0090 0100 2 #CODIGO 2 #NOME 2 #CIDADE (N5) (A40) (A25)

0110 END-DEFINE 0120 * 0130 READ WORK FILE 1 #REGISTRO 0140 DISPLAY #CODIGO #NOME #CIDADE

0190 END-WORK 0200 END

Pgina 94 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

19.

PERFORMANCE DE APLICAES
19.1. Princpios Bsicos de Programao Natural 2
Esta uma sntese dos critrios que devem ser seguidos para uma programao Natural

eficiente: Utilize os comandos mais adequados para acesso ao ADABAS Evite repetir ou omitir comandos desnecessrios Evite ler/atualizar mais campos do Banco de Dados do que os estritamente necessrios Minimizem o nmero de comandos ADABAS por transao (entre um Enter e outro) Utilize os limites disponveis no Natural para os comandos de acesso ao ADABAS Otimize o ciclo de atualizao Otimize as validaes de campos Minimize os LOOPs Otimize o processamento condicional Parametrize os ARRAYs Otimize as instrues simples Otimize seu uso da preciso nas operaes aritmticas Modularize corretamente Desenhe corretamente seus mapas e windows Utilize tabelas residentes na memria para otimizar a utilizao repetitiva das mesmas

19.2. Otimizao de Comandos de Acesso ao ADABAS


A otimizao dos comandos de acesso ao ADABAS comea na definio das views, que sero utilizadas por estes comandos.

19.2.1. Estudo de alguns casos freqentemente encontrados em PGMs 19.2.1.1. Views


Raramente se justifica, do ponto de vista da aplicao, o uso de views muito extensas. Quando isto ocorrer, desconfie, no se justifica apresentar ao usurio uma quantidade muito grande de informaes. melhor para os usurios e muito melhor para o desempenho dos sistemas, ainda que exija uma programao mais trabalhosa, fornecer telas menos poludas, contendo apenas as informaes estritamente necessrias. Pgina 95 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

Somente quando o usurio solicitar algumas informaes adicionais, a aplicao as dever ler. Seguem algumas dicas: Defina uma view para cada comando de acesso, evitando usar a mesma view para mais de um comando Se uma view exigir um nmero muito elevado de campos, revise a aplicao Use labels nos comandos (para evitar referncias s linhas)

Os nomes das views devem ser pequenos

19.2.1.2. Pesquisa de Existncia


Temos as seguintes opes de programao: 1. FIND NUMBER view WITH chave = valor 2. FIND (1) view WITH chave = valor 3. READ (1) view BY chave = valor 4. HISTOGRAM (1) view FOR chave STARTING valor

A alternativa nmero 4 sempre a mais eficiente.

19.2.1.3. Leitura de um nico registro com condio chave = valor


Temos as seguintes opes de programao: 1. FIND (1) view WITH chave = valor 2. READ (1) view BY chave = valor THRU valor

Se o registro tiver uma alta probabilidade de no existir, use a opo nmero 1, pois: O FIND pesquisar a lista invertida de chave procurando valor, se no o encontrar encerra o comando O READ pesquisar a lista invertida de chave procurando valor, caso no o achar, procura o valor seguinte, lendo o registro correspondente

Se o registro tiver uma alta probabilidade de existir, use a opo nmero 2, pois o comando READ ser neste caso mais eficiente que o FIND.

Pgina 96 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

19.2.1.4. Leitura de todos os registros com condio chave = valor


Temos as seguintes opes de programao: 1. FIND view WITH chave = valor 2. READ view BY chave = valor THRU valor

Se o arquivo estiver fisicamente classificado por chave escolha a opo nmero 2. Em todos os outros casos, escolha a opo nmero 1, pois a opo 2 executa sempre uma leitura a mais. Se o arquivo estiver classificado por chave, a opo 2 ser muito eficiente, caso o mesmo estiver classificado por ISN a melhor opo ser a nmero 1. Reorganize freqentemente seus arquivos, pela chave mais utilizada ou pelo ISN.

19.2.1.5. Leitura dos registros com condio chave = faixavalores


Temos as seguintes opes de programao: 1. FIND view WITH chave = valor-i THRU valor-f 2. READ view BY chave = valor-i THRU valor-f

Se o arquivo estiver fisicamente classificado por chave escolha a opo nmero 2. Em todos os outros casos, escolha a opo 1, pois a opo 2 executa sempre uma leitura a mais.

19.2.1.6. Leitura dos registros com condio chave=faixavalores, classificados por chave
Temos as seguintes opes de programao: 1. READ view BY chave = valor-i THRU valor-f 2. READ view BY PHYSICAL WHERE chave = valor-I THRU valorf SORT BY chave USING 3. FIND view WITH chave = valor-i THRU valor-f SORT BY chave USING 4. FIND view WITH chave = valor-i THRU valor-f SORTED BY chave

Se o arquivo estiver fisicamente classificado por chave escolha sempre a opo nmero 1. Pgina 97 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

Se o nmero de registros lidos for pequeno, escolha a opo nmero 1. Se o nmero de registros lidos for grande, escolha as opes 2 ou 3, dependendo de: Se o total de registros lidos for muito maior que o total de blocos do arquivo no DATA, escolha a opo nmero 2. Caso contrrio, escolha a opo nmero 3.

19.2.1.7. Seleo de Registros Segundo Condio Complexa


Primeiro deve ser analisada a possibilidade e convenincia de simplificar a expresso pelo uso de super-descritores. Vencida esta etapa, deve ser considerada a possibilidade de separar a expresso complexa em duas, sendo que a primeira dever ter um nvel de filtragem alto, quase equivalente original, e a segunda ser apenas complementar. Temos as seguintes opes de programao: 1. FIND view WITH expresso 2. READ view PHYSICAL WHERE expresso 3. FIND view WITH sub-expresso-1 WHERE sub-expresso-2

Se todos os descritores de expresso apresentarem um nvel de filtragem equivalente, devemos adotar a opo nmero 1. Se sub-expresso-1 selecionar um nmero no muito elevado de registros, devemos adotar a opo nmero 3. Se o nmero de registros selecionados por expresso for muito maior que o total de blocos do arquivo no DATA, deveremos utilizar a opo nmero 2.

19.2.1.8. Leitura batch de todos os registros de um arquivo


Teremos as seguintes opes: 1. READ view PHYSICAL 2. READ view BY ISN... 3. READ view BY descriptor

Nunca escolha a opo nmero 1 se o programa for atualizar os registros lidos ou se o mesmo arquivo pode estar sendo atualizado concorrentemente. Escolha a opo nmero 2 ou a nmero 3, dependendo de qual seja a ordem fsica do arquivo (por ISN ou pelo descritor da opo 3).

Pgina 98 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

19.2.1.9. Utilizao dos comandos GET e GET SAME


Existem as seguintes possibilidades: GET para acesso pelo ISN GET falso para evitar que tenhamos que voltar a ler o mesmo registro para atualiz-lo GET para ler campos adicionais

GET SAME para se ler mais ocorrncias dos mesmos campos mltiplos, peridicos e/ou mltiplos em peridicos, das que tenham sido lidas, por um comando anterior, utilizando a mesma View.

19.2.1.10. Utilizao de limites


Se ao selecionar e/ou ler registros de um arquivo, ou valores de uma lista invertida, soubermos da existncia de limites (nmero mximo de registros que cumprem uma determinada condio ou que tem um certo valor), deve-se aproveitar esta informao nos programas, inserindo esses limites nos comandos apropriados. Desta forma, estaremos incluindo no programa, sem a necessidade de cdigo adicional, um mecanismo importante para detectar possveis erros de integridade lgica no arquivo. Especifique o parmetro LE=ON. Para evitar os erros que, indevidamente, este parmetro pode provocar, utilize ESCAPE BOTTOM. Exemplo: FIND(1) VIEW Processa ESCAPE BOTTOM END-FIND

Parametrize os limites e insira os parmetros nos comandos correspondentes. Exemplo:

01 #LIM-FIND (P2) CONST <50> ... FIND ( #LIM-FIND ) view WITH condio Processa Pgina 99 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

END-FIND

O erro NAT1005 significa que o arquivo est, possivelmente, com algum problema de integridade.

19.3.

Ciclo de atualizao Opes e Recomendaes


Critrio para definir freqncia de END TRANSACTION O comando END TRANSACTION, essencial para a manuteno da integridade fsica e

lgica do banco de dados ADABAS, um grande consumidor de recursos. O objetivo desta anlise minimizar sua freqncia sem por em risco a integridade do banco de dados. Tal anlise dever considerar tanto os processos on-line quanto os batch.

19.3.1.

Batch

A no emisso de comandos de END TRANSACTION para todas as alteraes lgicas efetivadas por um programa batch ter as seguintes conseqncias: No caso do processo finalizar anormalmente, o seu reinicio sofrer um atraso equivalente durao de cada transao. Este atraso no dever ser, em mdia, maior do que 1 minuto, se adotarmos um END TRANSACTION para cada 100 transaes ( no significativo ). Se o processamento batch e on-line for concorrente, os registros que permanecero em HOLD por aproximadamente 1 minuto, podero provocar conseqncias nefastas no tempo de resposta de um nmero bastante elevado de usurios. Neste caso, ser obrigatria a opo WH=OFF para o NATURAL on-line, pois evitar que os usurios deste ambiente concorrentes com o batch, ao ficarem em WAIT, prendam as THREADS e consequentemente engarrafem o ambiente todo.

Se houver concorrncia Batch e On-line, o Natural On-line dever usar WH=OFF e os processos Batch no podero adotar menos do que um END TRANSACTION para cada 10 transaes lgicas.

19.3.2.

On-line

Os programas on-line devem emitir exatamente um END TRANSACTION para todas as transaes lgicas do Banco de Dados, resultantes do ingresso, pelo operador do terminal, de uma transao lgica de usurio ( uma ou mais telas ). Exemplo: Um usurio pode digitar um pedido com muitos itens utilizando vrias telas e a menos que se adote um modelo que aceite um pedido parcial, o END TRANSACTION dever ser emitido to somente quando forem ingressados todos os itens do pedido.

Pgina 100 de 120


Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

Outro usurio que ingresse numa tela vrios lanamentos contbeis, lidos de um formulrio, dever provocar que as muitas transaes resultantes da tela sejam efetivadas em conjunto por um nico END TRANSACTION.

No h, portanto, neste caso, muita flexibilidade para que o programador possa definir a forma mais eficiente de emitir comandos END TRANSACTION. Cabe ao projetista definir a relao entre os dados ingressados nas telas e o Modelo de Dados da organizao. No se pode porm esquecer que o HOLD de registros que forem solicitados por outros usurios afeta o tempo de resposta e pode at parar o ambiente.

19.4.

Tcnicas de programao que melhoram o desempenho

Um registro que j foi lido, em qualquer local do programa, pode ser atualizado sem repetir a leitura. Evite sempre que possvel, excluir e/ou incluir muitos registros por programa. Substitua pela execuo do utilitrio ADALOD. Evite, sempre que possvel, processar por programa alteraes demoradas numa grande quantidade de registros. Considere a possibilidade de alterar uma cpia seqencial do arquivo e posteriormente efetivar a sua carga ( ADACMP e ADALOD ). Evite processar on-line o que pode ser diferido e processado em batch. Se tiver que incluir e/ou alterar registros, e muitos dos campos previstos nestas operaes forem raramente informados, programe os STORE e/ou UPDATE para serem executados em duas etapas. Primeiro execute os comandos contendo os campos que sero informados em 90% dos casos ou mais, e quando necessrio ( menos do que 10% das vezes ), emita os comandos de UPDATE com os campos restantes.

19.5.

Acesso timo a campos mltiplos e peridicos

Campos mltiplos e peridicos so recursos muito importantes para a melhora de performance das aplicaes via desnormalizao. Como contrapartida, o seu desempenho pode no atender s expectativas e a programao e manuteno pode tornar-se mais complexa se no forem tomados certos cuidados: Ler e atualizar um nmero mnimo de ocorrncias Ter rotinas padronizadas para manuseio dos campos, simplificando assim a sua programao e manuteno Parametrizar o nmero de ocorrncias processadas, para poder adaptar-se s mudanas ambientais e facilitar a sua manuteno. Ler, incluir e atualizar um nmero mnimo de ocorrncias Podem ser desenvolvidos utilitrios muito simples para minimizar o nmero de ocorrncias lidas, calculando a mdia de ocorrncias, desvio padro, curva de Gauss, etc. Para atualizar/incluir, deve-se utilizar tambm o nmero mdio de ocorrncias e se houverem mais sero emitidos comandos adicionais de atualizao. Rotinas padronizadas Quaisquer dos casos apresentados podem ser tratados por esqueletos padronizados que podem (devem ) ser utilizadas pelas equipes de programao. Isto acompanha a nova tecnologia de programao por objetos. Os campos mltiplos e/ou peridicos so elementos dos arquivos que pela sua vez so objetos ou parte de objetos. Estes objetos Pgina 101 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

devem ser complementados por funes (rotinas) padronizadas que concentraro toda e qualquer solicitao a esses objetos.

19.6.

Processamento de REPEAT e FOR


O FOR 50% menos eficiente em termos de consumo de CPU, que o REPEAT equivalente:

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150 0160

DEFINE DATA LOCAL 1 #I (N2) END-DEFINE * REPEAT UNTIL #I > 9 ADD 1 TO #I WRITE '=' #I END-REPEAT * SKIP 1 * FOR #I 1 10 WRITE '=' #I END-FOR END

Resultado: #I: #I: #I: #I: #I: #I: #I: #I: #I: #I: #I: #I: #I: #I: #I: #I: #I: #I: #I: #I: 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10

Se precisar usar o FOR descendente, no utilize a soluo abaixo e sim a ltima:

0010 0020 0030 0040 0050 0060 0070 0080

DEFINE DATA LOCAL 1 #I (N2) 1 #J (N2) END-DEFINE * FOR #I 1 10 #J := 11 - #I WRITE '=' #J

Pgina 102 de 120


Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

0090 0100 0110 0120 0130 0140 0150 0160

END-FOR * SKIP 1 * FOR #J 10 1 -1 WRITE '=' #J END-FOR END

Resultado: #J: #J: #J: #J: #J: #J: #J: #J: #J: #J: #J: #J: #J: #J: #J: #J: #J: #J: #J: #J: 10 9 8 7 6 5 4 3 2 1 10 9 8 7 6 5 4 3 2 1

19.7. Processamento de ACCEPT e REJECT


Ainda que a diferena de performance no significativa, ACCEPT e REJECT so comandos que apresentaro melhor performance se no forem misturados. O que sim pode sim pode interessar o perigo de mistur-los.

19.8. Preciso em operaes Aritmticas


Nunca utilize a opo ROUNDED, pois consome uma quantidade exagerada de CPU e no otimizvel pelo Natural nem pelo NOC (Natural Optimizer Compiler). Some 0,...5 ao valor que se quer arredondar. Sempre utilize uma posio a mais do que a preciso mxima do resultado. Esta alternativa ao ROUNDED no se aplica se o resultado tiver mais de 7 casas decimais.

0010 0020 0030 0040 0050 0060 0070

DEFINE DATA LOCAL 1 #N (N3,1) INIT<1,4> 1 #N1 (N3,2) INIT<1,46> * 1 #R (N3) 1 #R1 (N3,1) END-DEFINE

Pgina 103 de 120


Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

0080 0090 0100 0110 0120 0130 0140 0150 0160

* WRITE '=' #N #R := #N + 0,5 WRITE '=' #R // * WRITE '=' #N1 #R1 := #N1 + 0,05 WRITE '=' #R1 END

Resultado: #N: #R: 1,4 1

#N1: #R1:

1,46 1,5

Pgina 104 de 120


Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

20.

EXEMPLO DE GRFICO EM NATURAL


Abaixo mostrado um exemplo de um programa e um mapa que mostra um grfico em

NATURAL.

0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150 0160 0170 0180 0190 0200

************************************************************************ ** Programa : PERPGRAF ** Sistema : Curso Avanado de Natural. ** ** Funo : Exemplo de Grfico em Natural. ** ** Analista : Luciano Perdigo ** Autor : Luciano Perdigo ** Data : 16/12/2002 ************************************************************************ * VRS001 - 16/12/2002 - Perdigo - Implantao * DEFINE DATA LOCAL * --------------------------* Definio Variveis do mapa * --------------------------1 #GRAFICO (A2/15,10) 1 #CV-GRAFICO (C/15,10) * --------------------* Variveis de trabalho

Pgina 105 de 120


Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

0210 0220 0230 0240 0250 0260 0270 0280 0290 0300 0310 0320 0330 0340 0350 0360 0370 0380 0390 0400 0410 0420 0430 0440 0450 0460 0470 0480 0490 0500 0510 0520 0530 0540 0550 0560 0570 0580 0590 0600 0610 0620 0630 0640 0650 0660 0670 0680 0690 0700 0710 0720 0730 0740 0750 0760 0770 0780 0790 0800 0810

* 1 1 1 1 1 1

--------------------#I (I2) #J (I2) #TAMANHO-BARRA-AUX (N2,2/10) #TAMANHO-BARRA (N2/10) #A (N15,2/10) #COR (A1/10) INIT <'@','#','$','&','*','(','@','#','$','&'> END-DEFINE * SET KEY ALL SET CONTROL 'M23' * #A(1) := 4000,50 #A(2) := 0,00 #A(3) := 1000,05 #A(4) := 1100,00 #A(5) := 2500,00 #A(6) := 1400,90 #A(7) := 600,00 #A(8) := 950,20 #A(9) := 1800,45 #A(10) := 2300,00 * FOR #I 1 10 #TAMANHO-BARRA-AUX(#I) := (#A(#I) * 15) / 4000 #TAMANHO-BARRA(#I) := #TAMANHO-BARRA-AUX(#I) IF #TAMANHO-BARRA(#I) = 0 #TAMANHO-BARRA(#I) := 1 END-IF #TAMANHO-BARRA(#I) := 15 - (#TAMANHO-BARRA(#I) - 1) END-FOR * DISPLAY #TAMANHO-BARRA(*) #TAMANHO-BARRA-AUX(*) * RESET #J * REPEAT ADD 1 TO #J * ------------------------* Carrega variveis do mapa * ------------------------FOR #I #TAMANHO-BARRA(#J) 15 #CV-GRAFICO(#I,#J) := (AD=V) /** Coloca a barra em vdeo reverso #GRAFICO(#I,#J) := #COR(#J) /** Coloca a cor na barra END-FOR IF #J < 10 ESCAPE TOP END-IF * ---------* EXIBE MAPA * ---------INPUT USING MAP 'LUCMGRAF' * -----------------* TRATA PF'S DO MAPA * -----------------IF *PF-KEY = 'ENTR' OR= 'PF3' ESCAPE BOTTOM END-IF END-REPEAT END

Pgina 106 de 120


Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

Mapa para exibio do Grfico - LUCMGRAF


+XXXXXXXX XXXXXXX Informtica LTDA. +MMMMMMMMMM +XXXXXXXX ?Exemplo?de?Grfico +XXXXXXXX ------------------------- Teste Grfico em NATURAL --------------------------?5000 |+XX +XX +XX +XX +XX +XX +XX +XX +XX +XX ?Legenda: |+XX +XX +XX +XX +XX +XX +XX +XX +XX +XX ------|+XX +XX +XX +XX +XX +XX +XX +XX +XX +XX ?A - Pgm 1 |+XX +XX +XX +XX +XX +XX +XX +XX +XX +XX ?B - Pgm 2 |+XX +XX +XX +XX +XX +XX +XX +XX +XX +XX ?C - Pgm 3 |+XX +XX +XX +XX +XX +XX +XX +XX +XX +XX ?D - Pgm 4 |+XX +XX +XX +XX +XX +XX +XX +XX +XX +XX ?E - Pgm 5 ?2500 |+XX +XX +XX +XX +XX +XX +XX +XX +XX +XX ?F - Pgm 6 |+XX +XX +XX +XX +XX +XX +XX +XX +XX +XX ?G - Pgm 7 |+XX +XX +XX +XX +XX +XX +XX +XX +XX +XX ?H - Pgm 8 |+XX +XX +XX +XX +XX +XX +XX +XX +XX +XX ?I - Pgm 9 |+XX +XX +XX +XX +XX +XX +XX +XX +XX +XX ?J - Pgm 10 |+XX +XX +XX +XX +XX +XX +XX +XX +XX +XX |+XX +XX +XX +XX +XX +XX +XX +XX +XX +XX ?1 |+XX +XX +XX +XX +XX +XX +XX +XX +XX +XX __________________________________________________ ?A ?B ?C ?D ?E ?F ?G ?H ?I ?J -----------------------------------------------------------------------------?F1 Ajuda ?F3 Sai ?F5 Encerra

Arr #GRAFICO Fmt A2 ------------------------------------------------------------------------------AD= OY________ ZP= SG= HE= _____________________ Rls 0 AL= _____ CD= __ CV= #CV-GRAFICO(*,*)________________ Mod User PM= __ DF= DY= @NE#RE$BL&YE*PI(TU=___________ EM= _______________________________________________________________ 001 --010---+----+----+---030---+----+----+---050---+----+----+---070---+---+XXXXXXXX XXXXXXX Informtica LTDA. +MMMMMMMMMM +XXXXXXXX ?Exemplo?de?Grfico +XXXXXXXX ------------------------- Teste Grfico em NATURAL --------------------------?5000 |.EX +XX +XX +XX +XX +XX +XX +XX +XX +XX ?Legenda: |+XX +XX +XX +XX +XX +XX +XX +XX +XX +XX ------|+XX +XX +XX +XX +XX +XX +XX +XX +XX +XX ?A - Pgm 1 |+XX +XX +XX +XX +XX +XX +XX +XX +XX +XX ?B - Pgm 2 |+XX +XX +XX +XX +XX +XX +XX +XX +XX +XX ?C - Pgm 3 |+XX +XX +XX +XX +XX +XX +XX +XX +XX +XX ?D - Pgm 4 |+XX +XX +XX +XX +XX +XX +XX +XX +XX +XX ?E - Pgm 5 ?2500 |+XX +XX +XX +XX +XX +XX +XX +XX +XX +XX ?F - Pgm 6 |+XX +XX +XX +XX +XX +XX +XX +XX +XX +XX ?G - Pgm 7 Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--HELP Mset Exit <--- ---> -+ < > Let

Pgina 107 de 120


Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

21.

BIBLIOGRAFIA

- Apostila de Natural Avanado Politec - http://www.consist.com - Manual de Natural da Consist.

Pgina 108 de 120


Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

22.

LICENA PBLICA GERAL GNU


22.1. Licena Pblica Geral GNU (Traduo)

Esta uma traduo no oficial da Licena de Documentao Livre GNU em Portugus Brasileiro. Ela no publicada pela Free Software Foundation, e no se aplica legalmente a distribuio de textos que usem a GFDL - apenas o texto original em Ingls da GNU FDL faz isso. Entretanto, ns esperamos que esta traduo ajude falantes de portugus a entenderem melhor a GFDL. Licena de Documentao Livre GNU Verso 1.1, Maro de 2000 Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA permitido a qualquer um copiar e distribuir cpias exatas deste documento de licena, mas no permitido alter-lo.

0. INTRODUO
O propsito desta Licena deixar um manual, livro-texto ou outro documento escrito livre no sentido de liberdade: assegurar a qualquer um a efetiva liberdade de copiar ou redistribu-lo, com ou sem modificaes, comercialmente ou no. Secundariamente, esta Licena mantm para o autor e editor uma forma de ter crdito por seu trabalho, sem ser considerado responsvel pelas modificaes feitas por terceiros. Esta licena um tipo de copyleft (direitos revertidos), o que significa que derivaes do documento precisam ser livres no mesmo sentido. Ela complementa a GNU Licena Pblica Geral (GNU GPL), que um copyleft para software livre. Ns fizemos esta Licena para que seja usada em manuais de software livre, porque software livre precisa de documentao livre: um programa livre deve ser acompanhado de manuais que forneam as mesmas liberdades que o software possui. Mas esta Licena no est restrita a manuais de software; ela pode ser usada para qualquer trabalho em texto, independentemente do assunto ou se ele publicado como um livro impresso. Ns recomendamos esta Licena principalmente para trabalhos cujo propsito seja de instruo ou referncia.

1. APLICABILIDADE E DEFINIES
Esta Licena se aplica a qualquer manual ou outro texto que contenha uma nota colocada pelo detentor dos direitos autorais dizendo que ele pode ser distribudo sob os termos desta Licena. O Documento, abaixo, se refere a qualquer tal manual ou texto. Qualquer pessoa do pblico um licenciado e referida como voc. Uma Verso Modificada do Documento se refere a qualquer trabalho contendo o documento ou uma parte dele, quer copiada exatamente, quer com modificaes e/ou traduzida em outra lngua. Uma Seo Secundria um apndice ou uma seo inicial do Documento que trata exclusivamente da relao dos editores ou dos autores do Documento com o assunto geral do Documento (ou assuntos relacionados) e no contm nada que poderia ser includo diretamente nesse assunto geral. (Por exemplo, se o Documento em parte um livro texto de matemtica, a Seo Secundria pode no explicar nada de

Pgina 109 de 120


Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

matemtica). Essa relao poderia ser uma questo de ligao histrica com o assunto, ou matrias relacionadas, ou de posies legais, comerciais, filosficas, ticas ou polticas relacionadas ao mesmo. As Sees Invariantes so certas Sees Secundrias cujos ttulos so designados, como sendo de Sees Invariantes, na nota que diz que o Documento publicado sob esta Licena. Os Textos de Capa so certos trechos curtos de texto que so listados, como Textos de Capa Frontal ou Textos da Quarta Capa, na nota que diz que o texto publicado sob esta Licena. Uma cpia Transparente do Documento significa uma cpia que pode ser lida automaticamente, representada num formato cuja especificao esteja disponvel ao pblico geral, cujos contedos possam ser vistos e editados diretamente e sem mecanismos especiais com editores de texto genricos ou (para imagens compostas de pixels) programas de pintura genricos ou (para desenhos) por algum editor de desenhos grandemente difundido, e que seja passvel de servir como entrada a formatadores de texto ou para traduo automtica para uma variedade de formatos que sirvam de entrada para formatadores de texto. Uma cpia feita em um formato de arquivo outrossim Transparente cuja constituio tenha sido projetada para atrapalhar ou desencorajar modificaes subseqentes pelos leitores no Transparente. Uma cpia que no Transparente chamada de Opaca. Exemplos de formatos que podem ser usados para cpias Transparentes incluem ASCII simples sem marcaes, formato de entrada do Texinfo, formato de entrada do LaTeX, SGML ou XML usando uma DTD disponibilizada publicamente, e HTML simples, compatvel com os padres, e projetado para ser modificado por pessoas. Formatos opacos incluem PostScript, PDF, formatos proprietrios que podem ser lidos e editados apenas com processadores de texto proprietrios, SGML ou XML para os quais a DTD e/ou ferramentas de processamento e edio no estejam disponveis para o pblico, e HTML gerado automaticamente por alguns editores de texto com finalidade apenas de sada. A Pgina do Ttulo significa, para um livro impresso, a pgina do ttulo propriamente dita, mais quaisquer pginas subseqentes quantas forem necessrias para conter, de forma legvel, o material que esta Licena requer que aparea na pgina do ttulo. Para trabalhos que no tenham uma tal pgina do ttulo, Pgina do Ttulo significa o texto prximo da apario mais proeminente do ttulo do trabalho, precedendo o incio do corpo do texto.

2. FAZENDO CPIAS EXATAS


Voc pode copiar e distribuir o Documento em qualquer meio, de forma comercial ou no comercial, desde que esta Licena, as notas de copyright, e a nota de licena dizendo que esta Licena se aplica ao documento estejam reproduzidas em todas as cpias, e que voc no acrescente nenhuma outra condio quaisquer que sejam s desta Licena. Voc no pode usar medidas tcnicas para obstruir ou controlar a leitura ou confeco de cpias subseqentes das cpias que voc fizer ou distribuir. Entretanto, voc pode aceitar compensao em troca de cpias. Se voc distribuir uma quantidade grande o suficiente de cpias, voc tambm precisa respeitar as condies da seo 3. Voc tambm pode emprestar cpias, sob as mesmas condies colocadas acima, e voc tambm pode exibir cpias publicamente.

1. FAZENDO CPIAS EM QUANTIDADE


Se voc publicar cpias do Documento em nmero maior que 100, e a nota de licena do Documento obrigar Textos de Capa, voc precisa incluir as cpias em capas que tragam, clara e legivelmente, todos esses Textos de Capa: Textos de Capa da

Pgina 110 de 120


Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

Frente na capa da frente, e Textos da Quarta Capa na capa de trs. Ambas as capas tambm precisam identificar clara e legivelmente voc como o editor dessas cpias. A capa da frente precisa apresentar o ttulo completo com todas as palavras do ttulo igualmente proeminentes e visveis. Voc pode adicionar outros materiais s capas. Fazer cpias com modificaes limitadas s capas, tanto quanto estas preservem o ttulo do documento e satisfaam essas condies, pode tratado como cpia exata em outros aspectos. Se os textos requeridos em qualquer das capas for muito volumoso para caber de forma legvel, voc deve colocar os primeiros (tantos quantos couberem de forma razovel) na capa verdadeira, e continuar os outros nas pginas adjacentes. Se voc publicar ou distribuir cpias Opacas do Documento em nmero maior que 100, voc precisa ou incluir uma cpia Transparente que possa ser lida automaticamente com cada cpia Opaca, ou informar em ou com cada cpia Opaca a localizao de uma cpia Transparente completa do Documento acessvel publicamente em uma rede de computadores, qual o pblico usurio de redes tenha acesso a download gratuito e annimo utilizando padres pblicos de protocolos de rede. Se voc utilizar o segundo mtodo, voc precisa tomar cuidados razoavelmente prudentes, quando iniciar a distribuio de cpias Opacas em quantidade, para assegurar que esta cpia Transparente vai permanecer acessvel desta forma na localizao especificada por pelo menos um ano depois da ltima vez em que voc distribuir uma cpia Opaca (diretamente ou atravs de seus agentes ou distribuidores) daquela edio para o pblico. pedido, mas no obrigatrio, que voc contate os autores do Documento bem antes de redistribuir qualquer grande nmero de cpias, para lhes dar uma oportunidade de prover voc com uma verso atualizada do Documento.

4. MODIFICAES
Voc pode copiar e distribuir uma Verso Modificada do Documento sob as condies das sees 2 e 3 acima, desde que voc publique a Verso Modificada estritamente sob esta Licena, com a Verso Modificada tomando o papel do Documento, de forma a licenciar a distribuio e modificao da Verso Modificada para quem quer que possua uma cpia da mesma. Alm disso, voc precisa fazer o seguinte na verso modificada: A. Usar na Pgina de Ttulo (e nas capas, se alguma) um ttulo distinto daquele do Documento, e daqueles de verses anteriores (que deveriam, se houvesse algum, estarem listados na seo Histricos do Documento). Voc pode usar o mesmo ttulo de uma verso anterior se o editor original daquela verso lhe der permisso. B. Listar na Pgina de Ttulo, como autores, uma ou mais das pessoas ou entidades responsveis pela autoria das modificaes na Verso Modificada, conjuntamente com pelo menos cinco dos autores principais do Documento (todos os seus autores principais, se ele tiver menos que cinco). C. Colocar na Pgina de Ttulo o nome do editor da Verso Modificada, como o editor. D. Preservar todas as notas de copyright do Documento. E. Adicionar uma nota de copyright apropriada para suas prprias modificaes adjacente s outras notas de copyright. F. Incluir, imediatamente depois das notas de copyright, uma nota de licena dando ao pblico o direito de usar a Verso Modificada sob os termos desta Licena, na forma mostrada no Adendo abaixo.

Pgina 111 de 120


Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

G. Preservar nessa nota de licena as listas completas das Sees Invariantes e os Textos de Capa requeridos dados na nota de licena do Documento. H. Incluir uma cpia inalterada desta Licena. I. Preservar a seo intitulada Histrico, e seu ttulo, e adicionar mesma um item dizendo pelo menos o ttulo, ano, novos autores e editor da Verso Modificada como dados na Pgina de Ttulo. Se no houver uma sesso denominada Histrico; no Documento, criar uma dizendo o ttulo, ano, autores, e editor do Documento como dados em sua Pgina de Ttulo, ento adicionar um item descrevendo a Verso Modificada, tal como descrito na sentena anterior. J. Preservar o endereo de rede, se algum, dado no Documento para acesso pblico a uma cpia Transparente do Documento, e da mesma forma, as localizaes de rede dadas no Documento para as verses anteriores em que ele foi baseado. Elas podem ser colocadas na seo Histrico. Voc pode omitir uma localizao na rede para um trabalho que tenha sido publicado pelo menos quatro anos antes do Documento, ou se o editor original da verso a que ela ser refira der sua permisso. K. Em qualquer seo intitulada Agradecimentos; ou Dedicatrias;, preservar o ttulo da seo e preservar a seo em toda substncia e tim de cada um dos agradecimentos de contribuidores e/ou dedicatrias dados. L. Preservar todas as Sees Invariantes do Documento, inalteradas em seus textos ou em seus ttulos. Nmeros de seo ou equivalentes no so considerados parte dos ttulos da seo. M. Apagar qualquer seo intitulada includa na Verso Modificada. Endossos;. Tal sesso no pode ser

N. No re-intitular qualquer seo existente com o ttulo Endossos; ou com qualquer outro ttulo dado a uma Seo Invariante.

Se a Verso Modificada incluir novas sees iniciais ou apndices que se qualifiquem como Sees Secundrias e no contenham nenhum material copiado do Documento, voc pode optar por designar alguma ou todas aquelas sees como invariantes. Para fazer isso, adicione seus ttulos lista de Sees Invariantes na nota de licena da Verso Modificada. Esses ttulos precisam ser diferentes de qualquer outro ttulo de seo. Voc pode adicionar uma seo intitulada Endossos;, desde que ela no contenha qualquer coisa alm de endossos da sua Verso Modificada por vrias pessoas ou entidades - por exemplo, declaraes de revisores ou de que o texto foi aprovado por uma organizao como a definio oficial de um padro. Voc pode adicionar uma passagem de at cinco palavras como um Texto de Capa da Frente , e uma passagem de at 25 palavras como um Texto de Quarta Capa, ao final da lista de Textos de Capa na Verso Modificada. Somente uma passagem de Texto da Capa da Frente e uma de Texto da Quarta Capa podem ser adicionados por (ou por acordos feitos por) qualquer entidade. Se o Documento j incluir um texto de capa para a mesma capa, adicionado previamente por voc ou por acordo feito com alguma entidade para a qual voc esteja agindo, voc no pode adicionar um outro; mas voc pode trocar o antigo, com permisso explcita do editor anterior que adicionou a passagem antiga. O(s) autor(es) e editor(es) do Documento no do permisso por esta Licena para que seus nomes sejam usados para publicidade ou para assegurar ou implicar endossamento de qualquer Verso Modificada.

Pgina 112 de 120


Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

5. COMBINANDO DOCUMENTOS
Voc pode combinar o Documento com outros documentos publicados sob esta Licena, sob os termos definidos na seo 4 acima para verses modificadas, desde que voc inclua na combinao todas as Sees Invariantes de todos os documentos originais, sem modificaes, e liste todas elas como Sees Invariantes de seu trabalho combinado em sua nota de licena. O trabalho combinado precisa conter apenas uma cpia desta Licena, e Sees Invariantes Idnticas com mltiplas ocorrncias podem ser substitudas por apenas uma cpia.Se houver mltiplas Sees Invariantes com o mesmo nome mas com contedos distintos, faa o ttulo de cada seo nico adicionando ao final do mesmo, em parnteses, o nome do autor ou editor original daquela seo, se for conhecido, ou um nmero que seja nico. Faa o mesmo ajuste nos ttulos de seo na lista de Sees Invariantes nota de licena do trabalho combinado. Na combinao, voc precisa combinar quaisquer sees intituladas Histricas; dos diversos documentos originais, formando uma seo intitulada Histrico; da mesma forma combine quaisquer sees intituladas Agradecimentos, ou Dedicatrias. Voc precisa apagar todas as sees intituladas como Endosso.

6. COLETNEAS DE DOCUMENTOS
Voc pode fazer uma coletnea consistindo do Documento e outros documentos publicados sob esta Licena, e substituir as cpias individuais desta Licena nos vrios documentos com uma nica cpia includa na coletnea, desde que voc siga as regras desta Licena para cpia exata de cada um dos Documentos em todos os outros aspectos. Voc pode extrair um nico documento de tal coletnea, e distribu-lo individualmente sob esta Licena, desde que voc insira uma cpia desta Licena no documento extrado, e siga esta Licena em todos os outros aspectos relacionados cpia exata daquele documento.

7. AGREGAO COM TRABALHOS INDEPENDENTES


Uma compilao do Documento ou derivados dele com outros trabalhos ou documentos separados e independentes, em um volume ou mdia de distribuio, no conta como uma Verso Modificada do Documento, desde que no seja reclamado nenhum copyright de compilao seja reclamado pela compilao. Tal compilao chamada um agregado, e esta Licena no se aplica aos outros trabalhos auto-contidos compilados junto com o Documento, s por conta de terem sido assim compilados, e eles no so trabalhos derivados do Documento. Se o requerido para o Documento, ento, se agregado, os Textos de ao Documento dentro do agregado. Texto de Capa na seo 3 for aplicvel a essas cpias do o Documento constituir menos de um quarto de todo o Capa do Documento podem ser colocados em capas adjacentes agregado. Seno eles precisam aparecer nas capas de todo o

8. TRADUO
A traduo considerada como um tipo de modificao, ento voc pode distribuir tradues do Documento sob os termos da seo 4. A substituio de Sees Invariantes por tradues requer uma permisso especial dos detentores do copyright das mesmas, mas voc pode incluir tradues de algumas ou de todas as Sees Invariantes em adio as verses originais dessas Sees Invariantes. Voc pode incluir uma traduo desta Licena desde que voc tambm inclua a verso original em Ingls desta Licena. No caso de discordncia entre a traduo e a verso original em Ingls desta Licena, a verso original em Ingls prevalecer.

Pgina 113 de 120


Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

9. TRMINO
Voc no pode copiar, modificar, sublicenciar, ou distribuir o Documento exceto como expressamente especificado sob esta Licena. Qualquer outra tentativa de copiar, modificar, sublicenciar, ou distribuir o Documento nulo, e resultar automaticamente no trmino de seus direitos sob esta Licena. Entretanto, terceiros que tenham recebido cpias, ou direitos, de voc sob esta Licena no tero suas licenas terminadas tanto quanto esses terceiros permaneam em total acordo com esta Licena.

10. REVISES FUTURAS DESTA LICENA


A Free Software Foundation pode publicar novas verses revisadas da Licena de Documentao Livre GNU de tempos em tempos. Tais novas verses sero similares em esprito verso presente, mas podem diferir em detalhes ao abordarem novos problemas e preocupaes. Veja http://www.gnu.org/copyleft/. A cada verso da Licena dado um nmero de verso distinto. Se o Documento especificar que uma verso particular desta Licena ou qualquer verso posterior se aplica ao mesmo, voc tem a opo de seguir os termos e condies daquela verso especfica, ou de qualquer verso posterior que tenha sido publicada (no como rascunho) pela Free Software Foundation. Se o Documento no especificar um nmero de Verso desta Licena, voc pode escolher qualquer verso j publicada (no como rascunho) pela Free Software Foundation. ADENDO: Como usar esta Licena para seus documentos Para usar esta Licena num documento que voc escreveu, inclua uma cpia desta Licena no documento e ponha as seguintes notas de copyright e licenas logo apos a pgina de ttulo: Copyright (c) ANO SEU NOME. dada permisso para copiar, distribuir e/ou modificar este documento sob os termos da Licena de Documentao Livre GNU, Verso 1.1 ou qualquer verso posterior publicada pela Free Software Foundation; com as Sees Invariantes sendo LISTE SEUS TTULOS, com os Textos da Capa da Frente sendo LISTE, e com os Textos da Quarta-Capa sendo LISTE. Uma cpia da licena em est inclusa na seo entitulada Licena de Documentao Livre GNU. Se voc no tiver nenhuma Seo Invariante, escreva sem Sees Invariantes ao invs de dizer quais so invariantes. Se voc no tiver Textos de Capa da Frente, escreva sem Textos de Capa da Frente ao invs de com os Textos da Capa da Frente sendo LISTE; o mesmo para os Textos da Quarta Capa. Se o seu documento contiver exemplos no triviais de cdigo de programas, ns recomendamos a publicao desses exemplos em paralelo sob a sua escolha de licena de software livre, tal como a GNU General Public License, para permitir o seu uso em software livre.

Pgina 114 de 120


Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

22.2. GNU Free Documentation License (original em ingls) GNU Free Documentation License Version 1.2, November 2002
Copyright 59 Temple Everyone document, (C) 2000,2001,2002 Free Software Foundation, Inc. Place, Suite 330, Boston, MA 02111-1307 USA is permitted to copy and distribute verbatim copies of this license but changing it is not allowed.

0. PREAMBLE
The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

1. APPLICABILITY AND DEFINITIONS


This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant.

Pgina 115 de 120


Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

The Document may contain zero Invariant Sections. identify any Invariant Sections then there are none.

If the Document does not

The "Cover Texts" are certain short passages of text that are listed, as FrontCover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

2. VERBATIM COPYING
You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies.

Pgina 116 de 120


Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

3. COPYING IN QUANTITY
If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using publicstandard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

4. MODIFICATIONS
You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.

Pgina 117 de 120


Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

5. COMBINING DOCUMENTS
You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.

Pgina 118 de 120


Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".

6. COLLECTIONS OF DOCUMENTS
You may make a collection consisting of the Document and under this License, and replace the individual copies various documents with a single copy that is included in that you follow the rules of this License for verbatim documents in all other respects. other documents released of this License in the the collection, provided copying of each of the

You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

7. AGGREGATION WITH INDEPENDENT WORKS


A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

8. TRANSLATION
Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

9. TERMINATION Pgina 119 de 120


Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

Curso Avanado de Natural

You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

10. FUTURE REVISIONS OF THIS LICENSE


The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.

ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.

A traduo para o portugus encontra-se disponvel em http://www.cipsga.org.br. A traduo no oficial. Ela no publicada pela Free Software Foundation, e no se aplica legalmente a distribuio de textos que usem a GFDL - apenas o texto original em Ingls da GNU FDL faz isso. Entretanto, ns esperamos que esta traduo ajude a entender melhor a GFDL.

Pgina 120 de 120


Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48

You might also like