Professional Documents
Culture Documents
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
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
HISTRICO DE ATUALIZAES
DATA AUTOR ATUALIZAO
Pgina 3 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48
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
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
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
16.1.12.1. 16.1.12.2.
16.1.13. 16.1.14.
16.1.14.1. 16.1.14.2. 16.1.14.3.
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
18.1. 19.
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
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
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.
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
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.
DEFINE DATA LOCAL 1 #CAMPO (A25) INIT FULL LENGTH <'*'> END-DEFINE DISPLAY #CAMPO END
#CAMPO ------------------------*************************
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:
Pgina 9 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48
1.4. Arrays
Utilize arrays para armazenar tabelas na memria, onde a grande maioria dos mdulos ter acesso. Exemplos de definio de Array:
Uma varivel definida como array pode ser referenciada da seguinte maneira:
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:
DEFINE DATA LOCAL 1 #T (N3) CONST <50> 1 #A1 (A3/#T) 1 #A2 (I4/#T) END-DEFINE
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
'=' #VAR3 (1,1) / '=' #VAR3 (2,1) / '=' #VAR3 (3,1) / '=' #VAR3 (4,1)
#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
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'>
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
A A A A A
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 > +
L 1
Com a execuo do comando de linha .E, uma tela com um menu de opes exibida:
08:53:10
17/11/2004
Pgina 12 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48
Local
LCARRO
Library XXXPRG
DBID
29 FNR
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:
***** 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)
***** 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
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 > +
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 > +
L 1
> All
Pgina 14 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48
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
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
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
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 > +
L 1
09:04:00
***** EDIT FIELD ***** - Initial Values and Edit Mask LCARRO Library XXXPRG DBID
17/11/2004
Local
29 FNR
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
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.
#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
(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 > +
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
L 1
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,
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
AUTO
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.
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
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
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
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
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
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
2.4.
Varivel de Controle
Alm de proporcionar definio dinmica de atributos para o campo, a varivel de controle
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.
Pgina 24 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48
Cls Att CD T D T I A D A I A N M D M I O D O I
Page Size ...... Line Size ...... Column Shift ... Layout ......... dynamic ....... Zero Print ..... Case Default ... Manual Skip .... Decimal Char ... Standard Keys .. Justification .. Print Mode .....
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 ...
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
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
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
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
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
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
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:
***** 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
Name .. testeh__
Profile .. SYSPROF_
Pgina 29 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48
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 ...
............................................... ............................................... 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---+----
Pgina 30 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48
***** 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
Code .. H
Name .. testeh__
Profile .. SYSPROF_
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
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
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
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
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
Pgina 34 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48
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
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
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.
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
* 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
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
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:
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
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
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
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
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
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
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
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
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:
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
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:
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
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
WRITE #NOME(*) / '=' #NUMBER END Resultado: LUCIANO ROSA #NUMBER: LUIZA MONICA 4 ANA LUCAS LUCIA PERDIGAO
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
Pgina 42 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48
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
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:
Pgina 43 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48
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
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
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
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
DEFINE DATA LOCAL 1 #A (A20) INIT<'LUCIANO PERDIGAO'> 1 #ARRAY (A10/2) END-DEFINE * SEPARATE #A INTO #ARRAY(*) WRITE '=' #A / '=' #ARRAY(*) END
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
DEFINE DATA LOCAL 1 #A (A32) 1 #A1 (A10) 1 #A2 (A10) 1 #A3 (A10) 1 #CONT (N3)
Pgina 46 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48
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
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
Pgina 47 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48
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
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
Pgina 48 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48
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
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
Pgina 49 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48
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
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
Pgina 50 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48
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
#DATA: 10/2/2004
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
Pgina 51 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48
#DATA: 1022004
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
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
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
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
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....:
2084 B1OQ NTRN X028862 38 1 XXXPRG 8 80 250 20 MAINFRAME MVS/ESA MVS/ESA SP7.0.4 24 2 ENTR VARSIS X
Pgina 55 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48
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
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
DATA DE HOJE: 24/11/2004 + 5 DIAS = 29/11/2004 HORA ATUAL: 16:10:37 + 60 SEGUNDOS = 16:11:37
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:
(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
*TIMX 14X 'OR *TIMX (EM=HH.II.SS.T) / *TIMX (EM=HH.II.SS' 'AP) / *TIMX (EM=HH)
HORA INTERNA
: : : :
OR
16:01:02.5
Pgina 57 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48
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
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.
13.
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
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
Pgina 61 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48
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
A opo LEFT JESTIFIED no vlida quando o campo destino numrico. Nesta situao, ocorre um erro de compilao.
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
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
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
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
Pgina 64 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48
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
#SOBRENOME: PERDIGO
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
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
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
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.
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.
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.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
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
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
0140 PASSWORD= 0150 CIPHER = #C 0160 WITH NAME = 'ARTHUR' 0170 DISPLAY PERSONNEL-ID 0180 NAME 0190 SEX 0200 CITY END-FIND END
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
Pgina 70 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48
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
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
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
() NOT AND OR
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
Pgina 72 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48
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.
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
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)
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
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.
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
* FIND(15) EMP WITH CITY = 'BRASILIA' SORTED BY NAME PERSONNEL-ID DISPLAY NAME(IS=ON) FIRST-NAME PERSONNEL-ID END-FIND END
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
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
Set-Name liberados
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.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
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
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
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.3. Restries
Esta clusula no est disponvel para as opes FIND FIRST, FIND NUMBER e FIND UNIQUE.
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 ...
40 40 40 40
37 38 39 40
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
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
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
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
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.
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
Pgina 82 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48
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
SEQUENCE
operand6
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
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
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
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
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
ISN
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.
DEFINE DATA LOCAL 1 EMP VIEW OF EMPLOYEES 2 NAME END-DEFINE * HISTOGRAM EMP NAME STARTING FROM 'MARIA' DISPLAY NAME END-HISTOGRAM END
Pgina 87 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48
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.
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.
Pgina 88 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48
*ISN
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)
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.
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 .
Pgina 90 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48
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
NAME: QQQQQQQQQQQQQQ
NAME: PERDIGAO
CITY: BRASILIA
16.8. Delete
DELETE RECORD IN STATEMENT (r)
16.8.4. Restries
A instruo DELETE no pode ser especificado na mesma linha da instruo FIND, READ ou GET.
Se nenhuma referncia for especificada, assume-se o LOOP ativo mais interno, no qual o registro foi obtido.
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.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
17.
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.
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
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
18.
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
Pgina 94 de 120
Desenvolvido por Luciano Perdigo Impresso em 13/12/2004 - 17:48
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
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)
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
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.
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
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.
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.
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
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.
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
END-FIND
O erro NAT1005 significa que o arquivo est, possivelmente, com algum problema de integridade.
19.3.
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.
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.
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.
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
devem ser complementados por funes (rotinas) padronizadas que concentraro toda e qualquer solicitao a esses objetos.
19.6.
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
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
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
* WRITE '=' #N #R := #N + 0,5 WRITE '=' #R // * WRITE '=' #N1 #R1 := #N1 + 0,05 WRITE '=' #R1 END
#N1: #R1:
1,46 1,5
20.
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
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
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
21.
BIBLIOGRAFIA
22.
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
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.
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.
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.
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.
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.
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.
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.
The Document may contain zero Invariant Sections. identify any Invariant Sections then there are none.
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.
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.
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.
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.
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.
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.
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.