1. ESTRUTURA PADRÃO DE UM PROGRAMA PL/I……….............................................3 2. SINTAXE DO COMANDO PL/I.............................................................3 3. CARTÃO COMENTÁRIO OBRIGATÓRIO PELA INSTALAÇÃO.......................................3 4. IDENTIFICAÇÃO DO PROGRAMA...........................................................4 PROGRAMA PRINCIPAL...................................................................4 SUB-ROTINA INTERNA OU EXTERNA........................................................4 5. DECLARAÇÕES.........................................................................4 5.1. DECLARAÇÃO DE ARQUIVOS..........................................................4 5.2. DECLARAÇÃO DE CAMPOS............................................................5 5.3. MÁSCARA DE EDIÇÃO PARA CAMPO NUMÉRICO ZONADO (PIC)..............................6 5.4. CAMPO NUMÉRICO ZONADO (PIC) COM SINAL...........................................7 5.5. CAMPO DE TAMANHO VARIÁVEL (VARYING).............................................7 5.6. ESTRUTURAS......................................................................7 5.7. DECLARAÇÃO DE ESTRUTURA VIA "LIKE"..............................................7 5.8. REDEFINIÇÃO.....................................................................8 5.9. REDEFINIÇÃO POSICIONAL..........................................................8 5.10. IMPORTANTE / CUIDADO...........................................................8 6. COPY-BOOK (INCLUDE).................................................................8 7. TRATAMENTO DE CONDIÇÃO DE EXCEÇÃO (ON CONDITIONS)...................................8 8. MANIPULAÇÃO DE ARQUIVO..............................................................9 8.1. ARQUIVO TIPO "RECORD"...........................................................9 8.2. ARQUIVO TIPO STREAM-ORIENTED OUTPUT - SYSPRINT..................................9 9. DESVIO INCONDICIONAL...............................................................10 10. ATRIBUIÇÃO.........................................................................10 11. EXPRESSÕES E OPERAÇÕES.............................................................10 PRIORIDADE DAS EXPRESSÕES...........................................................11 PRIORIDADES DOS OPERANDOS...........................................................11 12. OPERAÇÕES DE COMPARAÇÃO............................................................11 13. COMANDO "IF".......................................................................12 14. COMANDO "SELECT"...................................................................12 15. COMANDO "DO".......................................................................12 16. BLOCOS.............................................................................13 - 1 -
PL/I ("Programming Language One", ) is a procedural
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
1. ESTRUTURA PADRÃO DE UM PROGRAMA PL/I……….........................................................................................3
2. SINTAXE DO COMANDO PL/I................................................................................................................................... 3
3. CARTÃO COMENTÁRIO OBRIGATÓRIO PELA INSTALAÇÃO..............................................................................3
4. IDENTIFICAÇÃO DO PROGRAMA............................................................................................................................ 4
PROGRAMA PRINCIPAL............................................................................................................................................... 4SUB-ROTINA INTERNA OU EXTERNA......................................................................................................................... 4
5.1. DECLARAÇÃO DE ARQUIVOS.............................................................................................................................. 45.2. DECLARAÇÃO DE CAMPOS.................................................................................................................................. 55.3. MÁSCARA DE EDIÇÃO PARA CAMPO NUMÉRICO ZONADO (PIC)....................................................................65.4. CAMPO NUMÉRICO ZONADO (PIC) COM SINAL.................................................................................................75.5. CAMPO DE TAMANHO VARIÁVEL (VARYING).....................................................................................................75.6. ESTRUTURAS......................................................................................................................................................... 75.7. DECLARAÇÃO DE ESTRUTURA VIA "LIKE".........................................................................................................75.8. REDEFINIÇÃO........................................................................................................................................................ 85.9. REDEFINIÇÃO POSICIONAL.................................................................................................................................. 85.10. IMPORTANTE / CUIDADO.................................................................................................................................... 8
7. TRATAMENTO DE CONDIÇÃO DE EXCEÇÃO (ON CONDITIONS)........................................................................8
8. MANIPULAÇÃO DE ARQUIVO.................................................................................................................................. 9
8.1. ARQUIVO TIPO "RECORD".................................................................................................................................... 98.2. ARQUIVO TIPO STREAM-ORIENTED OUTPUT - SYSPRINT...............................................................................9
11. EXPRESSÕES E OPERAÇÕES............................................................................................................................... 10
PRIORIDADE DAS EXPRESSÕES.............................................................................................................................. 11PRIORIDADES DOS OPERANDOS............................................................................................................................. 11
12. OPERAÇÕES DE COMPARAÇÃO.......................................................................................................................... 11
SEQUÊNCIA DE EXECUÇÃO DOS BLOCOS.............................................................................................................14MAPA DE BLOCOS/VARIÁVEIS GLOBAIS E LOCAIS................................................................................................14
18. RECURSOS DE DEBUG.......................................................................................................................................... 17
19. PARÂMETROS DE JOB........................................................................................................................................... 17
20. ANEXO I: PARÂMETROS DO COMPILADOR PL/I OPTIMIZING...........................................................................18
- 2 -
1. ESTRUTURA PADRÃO DE UM PROGRAMA PL/I
LABEL: PROC OPTIONS (MAIN) ; Identificação do programa
DECLARE arquivos , Declaração de variáveis campos , PICTUREs de edição , tabelas , estruturas , inicializações , redefinições , funções (BUILT-IN) , rotinas externas;
ON CONDITIONS ; Tratamento de condições
COMANDOS ; Comandos / Instruções movimentações ; expressões ; concatenação ; condições ; LOOPs ; manipulação de arquivos ; manipulação de banco de dados ; chamadas de rotinas internas; chamadas de rotinas externas; COMANDOS ;
ROT-LABEL: PROC ; Identificação da Sub-rotina interna
END ROT-LABEL ; Finalização da Sub-rotina interna
END LABEL ; Finalização do programa
2. SINTAXE DO COMANDO PL/I
<instrução> ;
Qualquer comando / comentário PL/I deverão ser codificados entre as colunas 2 a 72
O término de qualquer comando PL/I é identificado por ponto e vírgula (;)
Um comando PL/I poderá ser codificado em uma ou mais linhas
Não há posição nem caracter para indicar a continuação de um comando PL/I
O comentário em PL/I deverá estar codificado entre os caracteres "/*" (abre comentário) e os caracteres "*/" (fecha comentário)
O comentário PL/I poderá ser condificado em qualquer ponto do fonte e poderá ser de uma ou mais linhas
Não existem palavras reservadas no PL/I
O ponto decimal no PL/I é sempre o ponto (.)
Caracteres minúsculos NÃO são aceitos
3. CARTÃO COMENTÁRIO OBRIGATÓRIO PELA INSTALAÇÃO
Todo e qualquer programa PL/I da instalação deverá ter o seguinte cartão comentário codificado no início do fonte:
2 10 20 60 72 ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. /* PROGRAMA DESCRIÇÃO DO PROGRAMA USERID */ | | | | | USERID DO ANALISTA | | | DESCRIÇÃO SUMÁRIA DO PROGRAMA
- 3 -
| NOME DO PROGRAMA
4. IDENTIFICAÇÃO DO PROGRAMA
PROGRAMA PRINCIPAL
label : PROC (parâmetro) OPTIONS (MAIN);
-- PROGRAMA --
END label;
Label: De 1 a 8 caracteres alfanuméricos, iniciando sempre por um caracter alfabético
SUB-ROTINA INTERNA OU EXTERNA
label : PROC (parâmetro);
-- SUB-ROTINA --
END label;
Label: SUB-ROTINA INTERNA: De 1 a 29 caracteres alfanuméricos e caracteres especiais ('#', '@', '$' e '_'), iniciando sempre por um caracter alfabético
SUB-ROTINA EXTERNA: De 1 a 7 caracteres alfanuméricos, iniciando sempre por um caracter alfabético
29 caracteres de nome NÃO podendo iniciar por número
Caracteres alfabéticos (A ~ Z), numéricos (0 ~ 9) e alguns caracteres especiais ('#', '@', '$' e '_')
TIPO
CHARACTER (CHAR) - alfanumérico
PICTURE (PIC) – numérico zonado
DECIMAL FIXED (FIXED) – numérico compactado
DECIMAL FLOAT (FLOAT) – numérico ponto flutuante
BINARY FIXED (BIN FIXED) – numérico binário
POINTER – endereço
TAMANHO
CHAR – de 1 à 32767Ex.: CHAR(10)
PIC – de 1 a 15 (inclusive decimais)Ex.: PIC '(15)9' pic '(13)9V99' - 15 dígitos onde 13 inteiras e 2 decimais
FIXED – de 1 a 15 (inclusive decimais)Ex.: FIXED(15) FIXED(15,2) – 15 dígitos onde 13 inteiras e 2 decimais
FLOAT – de 1 a 33 (não há decimais)Ex.: FLOAT(06)
BIN FIXED – 15 (2 bytes) ou 31 (4 bytes) (não há decimais)Ex.: BIN FIXED(15) / BIN FIXED(31)Não utilizar para operações de multiplicação e divisão com campos que contenham decimais.
Especifica um campo de tamanho variável, embora seja declarado pelo máximo de dígitos que possa conter, ele assume o tamanho do conteúdo que lhe é atribuído.EX. X CHAR(10) VAR, X = 'ABC' -> TAMANHO DE X = 3 X = 'ABCDE' -> TAMANHO DE X = 5
OBS. O tamanho do campo é controlado internamente por um campo BIN FIXED(15) colocado antes do campo. Este tamanho pode ser acessado através de uma redefinição do campo.EX. TAM BIN FIXED(15) DEF X,
5.6. ESTRUTURAS
Os sub-níveis devem descrescer mas não necessita ser de modo sequencialEX. 1 ENTRADA, 1 ENTRADA, 2 AGENCIA PIC '(4)9', 3 AGENCIA PIC'9999', 2 CONTA PIC '(7)9', 3 CONTA PIC'(07)9', 2 NOME CHAR (40), 3 NOME CHAR(40), 2 ENDERECO, 3 ENDERECO, 3 RUA CHAR (30), 5 RUA CHAR(30), 3 NUMERO PIC '(6)9', 5 NUMERO PIC'(06)9', 2 DATA CHAR (6), 3 DATA CHAR(06),
5.7. DECLARAÇÃO DE ESTRUTURA VIA "LIKE"
Usado para declaração de estruturas iguais.EX. 1 ENTRADA, 2 AGENCIA PIC '(4)9', 2 ENDERECO, 3 RUA CHAR (30), 3 NUMERO PIC '(6)9', 2 DATA CHAR (6),
1 SAIDA LIKE ENTRADA,
A estrutura "SAIDA" terá os mesmos nomes, atributos e inicializações de modo idêntico da estrutura "ENTRADA".EX. 1 ENTRADA, 2 AGENCIA PIC '(4)9', 2 ENDERECO, 3 RUA CHAR (30), 3 NUMERO PIC '(6)9', 2 DATA CHAR (6),
1 AUX, 2 CHAVE CHAR (51), 2 END LIKE ENTRADA.ENDERECO,
A sub-estrutura "END" terá os mesmos campos com atributos e inicializações de modo idêntico ao sub-nível "ENDERECO".
DATA CHAR(06), 1 DATAS, 1 DATAS DEF DATA, 2 DIA PIC '99', 2 DIA PIC '99', 2 MES PIC '99', 2 MES PIC '99', 2 ANO PIC '99', 2 ANO PIC '99', DATA CHAR(06) DEF DATAS,
Toda e qualquer variável não declarada explicitamente no programa, o PL/I irá assumir (declarar) implicitamente de acordo com a seguinte regra: Toda variável iniciada pela letra "I" a "N" será assumido como sendo "BIN FIXED(15),e as outras serão assumidas como "FLOAT(6)".
6. COPY-BOOK (INCLUDE)
SINTAXE%INCLUDE MAC01 (<nome do COPY-BOOK>);
EX. DCL 1 AGE, %INCLUDE MAC01 (GEAGEAG);
7. TRATAMENTO DE CONDIÇÃO DE EXCEÇÃO (ON conditions) Devem ser condificados preferencialmente após as declarações de variáveis e antes de qualquer comando executável. Pois o tratamento de condição de exceção só é ativado quando o fluxo da execução passar pelas instruções ON condition. As instruções incorporadas nos comando ON condition serão executadas somente quando ocorrer a condição de exceção.
ON ENDFILE
Prevê condição para fim de arquivo.EX. ON ENDFILE (ARQUIVO) --COMANDO-- ;
EX. ON ENDFILE (ARQUIVO) BEGIN; --COMANDOS--; END;
ON ERROR
Prevê condição para qualquer tipo de ABEND.EX. ON ERROR SNAP BEGIN; ON ERROR SYSTEM; --COMANDOS--; CALL ABEND; END;
- 8 -
8. MANIPULAÇÃO DE ARQUIVO
8.1. ARQUIVO TIPO "RECORD"
ABRIR/FECHAR
OPEN FILE (ARQUIVO1);OPEN FILE (ARQUIVO1), FILE (ARQUIVO2);
CLOSE FILE (ARQUIVO1);CLOSE FILE (ARQUIVO1), FILE (ARQUIVO2);
LEITURA
READ FILE (ENTRADA) INTO (AREA);
READ FILE (ENTRADA) SET (P); (usado para leitura de áreas BASED)
GRAVAÇÃO
WRITE FILE (SAIDA) FROM (AREA);
8.2. ARQUIVO TIPO STREAM-ORIENTED OUTPUT - SYSPRINT
GRAVAÇÃO
PUT DATA------Imprime o nome e o conteúdo do campoEX. PUT DATA (NOME,VALOR);
DADOS: NOME = 'JOAO', VALOR = 339
EX. PUT DATA;
CUIDADO: Serão listados todos os nomes e conteúdos de todos os campos do programa
PUT LIST-------Imprime somente o conteúdo do campoEX. PUT LIST (NOME,VALOR);
RESULTADO: JOAO 339
PUT EDIT-------Imprime campos e literaisEX. PUT LIST (NOME,VALOR);
RESULTADO: JOAO 339
EX. PUT EDIT (NOME,'PAGOU',VALOR) (X(5),A(25),A(10),P'Z9.9'); | | | | | NUMERO | CARACTER | BRANCOS
---> JOAO CARLOS ARRUDA PAGOU 83.4
Opções de espacejamento de impressão válida para todos os tipos acima
SKIP Mudança de linha
SKIP(n) Salta "n" linhas
COL(n) Salta "n" colunas
PAGE Mudança de página
EX. PUT SKIP LIST(NOME,VALOR); PUT PAGE EDIT(NOME,VALOR)(A(20),SKIP(2),P'ZZZV,9');
9. DESVIO INCONDICIONAL
Comando para fazer um desvio do fluxo de execução para um LABEL qualquer especificado no comando.
GO TO <LABEL>;
EX. IF CNT > 10 THEN
GO TO ULTRAPASSOU_LIMITE;
...
- 9 -
...
ULTRAPASSOU_LIMITE: --COMANDOS—
10. ATRIBUIÇÃO
ATRIBUIÇÃO SIMPLESCAMPO = VALOR;
ATRIBUIÇÃO MÚLTIPLAPAG, NPAG = NPAG + 1;
ATRIBUIÇÃO POR IGUALDADE DE NOME (opção BY NAME)
Movimentação das variáveis de uma estrutura para outra que possuam os mesmos nomes de variáveisSAIDA = VALOR, BY NAME;
ATRIBUIÇÃO POR QUALIFICAÇÃO DE NOME
Movimentação de variáveis que possuem o mesmo nome em estruturas ou níveis diferentes.SAIDA.VALOR = ENTRADA.VALOR * 100;
11. EXPRESSÕES E OPERAÇÕES
OPERANDOS ARITMÉTICOS:
Exponenciação: **Ex: A = A ** 3
Multiplicação: *Ex: A = B * C
Divisão: /Ex: A = B / C
Infixo: +, -
Prefixo: +, -
Concatenação: ||Ex: A = 'AB', B = 'CD', C = A || B C = 'ABCD'
OPERANDOS DE COMPARAÇÃO:
Igual: =Ex: IF A = 0 THEN
Negativa: ¬Ex: IF ¬(A = 0) THEN
BIT STRING: DCL FIMARQ BIT(01) INIT('0'B); IF ¬FIMARQ THEN
Diferente: ¬=Ex: IF A ¬= 0 THEN
Maior que: >Ex: IF A > 0 THEN
Menor que: <Ex: IF A < 0 THEN
Maior igual que: >=Ex: IF A >= 0 THEN
Menor igual que: <=Ex: IF A <= 0 THEN
Não maior que: ¬>Ex: IF A ¬> 0 THEN
Não menor que: ¬<Ex: IF A ¬< 0 THEN
- 10 -
E (AND): &Ex: IF A = 0 & B = 0 THEN
Ou (OR): |Ex: IF A = 0 | B = 0 THEN
PRIORIDADE DAS EXPRESSÕES
1. Expressões entre parênteses
2. Prioridade dos operandos
3. Dentro da mesma prioridade da esquerda para a direita
PRIORIDADES DOS OPERANDOS
1. **, ¬, +(PREFIXO), -(PREFIXO)
2. *, /
3. +(INFIXO), -(INFIXO)
4. ||
5. >, >=, =, ¬=, <=, <, ¬>, ¬<
6. &
7. |
Exemplo: B | C & D -> B | (C & D)¬B | C -> ¬(B | C)
As operações de comparações são feitas da esquerda para a direita BIT a BIT.
COMPARAÇÃO ENTRE CHARACTER
A comparação é feita da esquerda para a direita, sendo um caracter dos operandos menor que o outro o campo é preenchido à direita com brancos para comparação.
COMPARAÇÃO ENTRE BIT STRING
A comparação é feita da esquerda para a direita com dígitos binários, sendo um dos operandos menor o campo é preenchido à direita com zeros binários.
COMPARAÇÃO NUMÉRICAS
A comparação é feita pelo valor númerico dos operandos.
13. COMANDO "IF"
Comando para comparação e tomada de ação de acordo com a veracidade da condição. (THEN – verdade / ELSE – falso).
- 11 -
SINTAXE
IF --<condição>-- THEN --<comando>--; ELSE --<comando>--;
14. COMANDO "SELECT"
Comando de tomada de decisão e ação em uma estrutura de "CASE" de acordo com o valor ou a veracidade da condição. (verdade executa / falso testa o próximo valor ou condição).
SINTAXESELECT (<campo>); WHEN (<valor> ou <condição>) --<comando>--; ... WHEN (<valor> ou <condição>) --<comando>--; OTHERWISE --<comando>--;END;
EXEMPLOSELECT (A); WHEN (1,2) B = A * 2; Executa se A = 1 ou A = 2 WHEN (3) B = A / 2; Executa se A = 3 OTHERWISE B = 0; Executa se A <= 0 ou A > 3END;
SELECT; WHEN (A = 1 | A = 2) B = A * 2; WHEN (A = 3) B = A / 2; OTHERWISE B = 0;END;
15. COMANDO "DO"
AGRUPAMENTOIF --CONDICAO—- THEN DO; --COMANDOS--; END;ELSE DO; --COMANDOS--; END;
Executa as instruções várias vezes quanto definido no limite de repetição especificado no comando onde a variável de controle de repetição é incrementado de acordo com o valor de incremento definido também no comando. O valor de incremento quando não é especificado assume-se o valor 1.DO I = 0 TO 10 BY 2; Executa 6 vezes com iteração de 2 --COMANDOS--; unidadesEND;
- 12 -
VARIAVEL
Executa as instruções várias vezes quantas definidas pela quantidade de valores de atribuição especificados no comando.DO I = 1,7,9,5,11; --COMANDOS--;END;
CONDICIONAL WHILE
Executa os comandos enquanto a condição especificada no comando for verdadeira.DO WHILE (--CONDICAO--); --COMANDOS--;END;
CONDICIONAL UNTIL
Executa as instruções até que a condição especificada no comando se torne verdadeira. Executa ao menos uma vez, pois o teste de validação da condição é feita no final.DO UNTIL (--CONDICAO--); --COMANDOS--;END;
CONDICIONAL MISTO
Combinações dos processos repetitivos descritos anteriormente.DO COD = 1 TO 10 WHILE (--CONDICAO--); --COMANDOS--;END;
16. BLOCOS São conjuntos de comandos em PL/I que servem para informar ao compilador a necessidade de tratamento especial durante a compilação, além da simples tradução dos comandos que contém.
Os blocos dão à linguagem a característica de se poder fazer alocação dinâmica de memõria. As variáveis alocadas no início da execução ou ativação de um bloco são desalocadas ao seu término.
Existem dois tipos de bloco: "PROCEDURE" e "BEGIN".
BEGIN
O nome (rótulo/LABEL) para estes tipo de blocos é opcional pois são ativados na sequência que aparecem no programa.
PROCEDURE
Todo programa é composto de pelo menos 1 bloco "PROCEDURE", o bloco principal (a MAIN PROCEDURE).
Obrigatoriamente estes blocos devem ter nome (rótulo/LABEL) para poderem ser ativados. Os blocos que não sejam o bloco principal são mais conhecidos como sendo uma sub-rotina interna.
Este tipo de bloco pode haver definições de variáveis locais e de manipulação de parâmetros.
A execução destes blocos são feitos através do comando "CALL". Logo estes blocos não precisam ser "SALTADOS" pela lógica do programa para atingir o final do programa.
CHAMADA DE SUB-ROTINA INTERNASem parâmetros: CALL SUB_ROTINA_INTERNA;Com parâmetros: CALL SUB_ROTINA_INTERNA(PARM1,PARM2,PARM3);
CHAMADA DE SUB-ROTINA EXTERNASem parâmetros: CALL SUBROT1;Com parâmetros: CALL SUBROT2(PARM1,PARM2,PARM3);
RECEPÇÃO DE PARÂMETROSSUBROT1: PROC(PARM1,PARM2,PARM3);DCL PARM1 CHAR(10), PARM2 PIC'9999', PARM3 FIXED(15,2);
Recomenda-se a utilização de estrutura como passagem de parâmetros, ver abaixo:- 13 -
Fornece o resultado da multiplicação entre "A" e "B" com a precisão de cálculo interno de "I" dígitos com "J" decimaisEX. RESULTADO = MULTIPLY(NUMERO1,NUMERO2,15,5);
DIVIDE(A,B,I,J)
Fornece o resultado da divisão entre "A" e "B" com a precisão de cálculo interno de "I" dígitos com "J" decimaisEX. RESULTADO = DIVIDE(NUMERO1,NUMERO2,15,5);
MOD
Fornece o resto de uma divisão.EX. RESTO = MOD(NUMERO,DIVISOR);
IF MOD(ANO,4) = 0 THEN MENSAGEM = 'ANO BISSEXTO';
ROUNDROUND(X1,X2) retorna o valor arredondado de X1, X2 indicando em qual casa a direita será efetuado o arredondamento
TRATAMENTO DE STRING
VERIFY(A,B)
Retorna a posição no STRING "A" do primeiro caracter ou BIT que não está no STRING "B". Se todos os caracteres em "A" estão em "B" o resultado é zero.EX. X = VERIFY(CAMPO,'ABHNR'); SE CAMPO = 'BRANCO' -> X = 5 SE CAMPO = 'BANHA' -> X = 0
IF VERIFY(NUM,'0123456789') ¬= 0 THEN MENSAGEM = 'NUM NAO NUMERICO';
INDEX(A,B)
Retorna a posição inicial do STRING "B" dentro do STRING "A", retorna zero se o mesmo não está presente.EX. DCL LETRA CHAR(10) INIT('ABCDEFGHI'), X = INDEX(LETRA,'E') -> X = 5 Y = INDEX(LETRA,'DE') -> Y = 4
SUBSTR(A,B,C)
A - CAMPOB - POSIÇÃO INICIALC - QUANTIDADE DE DÍGITOS
Permite o acesso a uma parte de um campo para exame ou modificação do seu conteúdo. Se "C" é omitido o resto do STRING é incluído.EX. DCL CAMPO CHAR(10) INIT('012345ABCD'), SUBSTR(CAMPO,5,3) = 'XYZ'; --> CAMPO = 01234XYZBCD
LENGTHLENGTH (X1) retorna um valor igual ao comprimento de X1.
- 15 -
HIGH(N)
Retorna um caracter STRING de tamanho n com o caracter de mais alto valor em hexadecimal "FF".
EX. DCL CAMPO CHAR (06), CAMPO = HIGH(06);
LOW(N)
Retorna um caracter STRING de tamanho n com o caracter de mais baixo valor em hexadecimal "00".
EX. DCL CAMPO CHAR (06), CAMPO = LOW(06);
TRATAMENTO DE ARRAYS
LBOUNDLBOUND (X1,N) retorna o valor de limite inferior da "N-esima" dimensao do "array" especificado como argumento
HBOUNDHBOUND (X1,N) retorna o valor de limite superior da "N-esima" dimensao do "array" especificado como argumento.
OUTROS
PLIRETC
Permite ao programa passar um código de retorno para os cartões de controle. Seta o "COND CODE" do STEP do JOB com o valor especificado.EX. DCL COND BIN FIXED(31) STATIC INIT(0), IF --CONDICAO-- THEN COND = 1; ELSE COND = 2; CALL PLIRETC (COND);
DATE
Fornece a data do dia no formato ano-mês-dia (CHAR(06) - AAMMDD).EX. DCL DATA CHAR(06), DATE BUILTIN; DATA = DATE; ---> DATA = 010227
TIME
Fornece o horário no formato hora-minuto-segundo-milésimo de segundo (CHAR(09) - HHMMSSMMM).EX. DCL HORA CHAR(09), TIME BUILTIN; HORA = TIME; ---> HORA = 091033683
18. RECURSOS DE DEBUG
SUBSCRIPTRANGE
Usado para verificar se houve estouro de alguma tabela dentro do programa, quando detectado a invasão de área a execução é interrompida.EX. /* PROGRAM PROGRAMA EXEMPLO USERID */ (SUBRG): DICONS: PROC OPTIONS (MAIN); ---- ON SUBRG BEGIN; PUT DATA (I,J,K); ---- END;
- 16 -
CHECK
Controla variáveis do programa, listando-as a cada execução de instruções onde elas aparecem.EX. /* PROGRAMA PROGRAMA EXEMPLO USERID */ (CHECK): FCINTRV: PROC OPTIONS (MAIN);
/* PROGRAMA PROGRAMA EXEMPLO USERID */ (CHECK(FATOR,TAXA,RAZAO)): ABTOTS: PROC OPTIONS (MAIN);
19. PARÂMETROS DE JOB
São informações passadas ao programa através do cartão JCL "EXEC" através de da opção "PARM"
O parâmetro no JCL deverá ser informado como mostrado no exemplo seguinte:
PRODUÇÃO// EXEC PGM=PROGRAMA,PARM='ISA(100)K,STAE,SPIE/<parâmetros>' | V O PARAMETRO DEVERÁ SER INFORMADO AQUI
DESENVOLVIMENTO// EXEC ADGO,MEMBER=PROGRAMA,NBIBL=00,PARAM='<parâmetros>' | V O PARAMETRO DEVERÁ SER INFORMADO AQUI
No programa deverá estar codifica como mostrado a seguir, sendo o parâmetro declarado obrigatoriamente como VARYING. O tamanho máximo de parâmetro que pode ser enviado do JOB para a aplicação é de 100 bytes.PROGRAMA: PROC (PARAMETRO) OPTIONS (MAIN);DCL PARAMETRO CHAR (10) VAR, 1 PARM_DEF DEF PARAMETRO, 2 TAMANHO BIN FIXED(15), 2 CAMPO CHAR (10);...IF TAMANHO = 0 THEN ... /* faltou passar parâmetro */ELSE IF CAMPO = 'PARAMETRO1' THEN ...
20. Anexo I: Parâmetros do Compilador PL/I Optimizing
Parametros mais usados
O compilador PL/I OPTIMIZING fornece uma serie de opcoes, tanto em tempo de compilacao como em tempo de execucao. As opcoes que sao fornecidas em tempo de compilacao sao chamadas de "opcoes de compilacao" e aquelas fornecidas em tempo de execucao, "opcoes em tempo de execucao".
As opcoes mais utilizadas sao as seguintes: AGGREGATE (NOGGREGATE)
indica ao compilador para listar ( AG) ou nao (NAG) a relacao das estruturas principais e tabelas do programa, bem como seus respectivos tamanhos.
COUNT (NOCOUNT) o compilador produz no objeto, codigo que a tempo de execucao conta e lista ao fim do programa quantas vezes a instrucao foi executada.
FLOW (NOFLOW) o compilador produz no objeto, codigo que ao termino do programa lista os ultimos "n" desvios executados nas ultimas "m" procedures. Formato: FLOW (n,m) - default p/ (n,m) e' (25,10)
GOSTMT (NOGOSTMT)
especifica que o numero da instrucao no programa fonte deve ser incluido em mensagens enviadas em tempo de execucao.
INCLUDE permite ao compilador o uso de texto em programas que usam a instrucao
- 17 -
(NINCLUDE)
"%INCLUDE". Para programas que utilizam esta instrucao e nao utilizam outras instrucoes do "pre-processador", este metodo e' mais rapido que utilizando o "pre-processador". Se a opcao MACRO for tambem utilizada, a opcao INCLUDE nao tem efeito.Abreviacao: INC e NOINC
INSOURCE (NOINSOURCE)
informa ao compilador para incluir uma lista do programa fonte (inclusive instrucoes do "pre-processador") na listagem da compilacao. Abreviacao: IS ou NIS
INTERRUPT (NOINTERRUPT)
PL/I intervem (INT) ou nao (NOINT) em caso de ABEND. Quando intervem, devolve o "system code" correspondente. Quando se deseja o DUMP, utilizar NOINT.
ISASIZE indica o tamanho da area ISA (Initial Storage Area), onde serao alocadas as "SAVE AREAS", "AREAS AUTOMATICAS" e "AREAS CONTROLLED".
LIST (NOLIST) indica ao compilador para incluir uma listagem do modulo objeto, em ASSEMBLER.
MACRO (NOMACRO) especifica que o programa fonte deve ser processado pelo "pre-processador".Formatos: MACRO=M ou NOMACRO (abreviaturas: M ou NM)
MAP (NOMAP) indica ao compilador para produzir uma tabela de "off sets" (localizacao das variaveis) das areas "static" e "automatic" do programa. Nao sao mostradas as areas com atributo "DEF".
REPORT (NOREPORT)
especifica que um relatorio da utilizacao de memoria pelo programa sera' gerado e listado no PLIDUMP ou PL1DUMP. Util para a determinacao do ISASIZE ideal.
SPIE (NOSPIE) especifica que quando ocorrer uma interrupcao de programa (OC1,...,OCF), as rotinas do PL/I devem interceptar, e em certas circunstancias, dar condicao ERROR
STAE (NOSTAE) especifica que quando ocorrer um ABEND (programado), as rotinas do PL/I devem interceptar e dar condicao ERROR ou produzir mensagem de diagnostico e um PLIDUMP.
OFFSET (NOOFFSET)
imprime ou nao os "off sets" das instrucoes e procedures dentro do programa.
XREF (NOXREF) (SHORT|FULL)
indica para incluir lista de referencia cruzada de variaveis (onde sao declaradas e em que instrucoes sao usadas).
As "opcoes de execucao" sao: COUNT (NOCOUNT), FLOW (NOFLOW), ISASIZE, REPORT (NOREPORT), SPIE (NOSPIE), STAE (NOSTAE).
BIBLIOGRAFIA OS PL/I OPTIMIZING COMPILER: Programmer's Guide (Chapter 4 - The Compiler) OS PL/I Checkout and Optimizing Compilers: Language Reference Manual (Section G: Built-in Functions and Pseudovariables)