Formato do Arquivo de Eventos

O Arquivo de Eventos contém informações que permitem ao editor localizar, no arquivo de origem, quaisquer símbolos ou linhas que causaram a exibição da mensagem e relacionar mensagens que referem-se à origem expandida da posição correspondente em um determinado arquivo de origem. O Arquivo de Eventos destina-se a fornecer informações úteis que possam ser lidas pela máquina para determinadas classes de ferramentas. O arquivo de listagem do processador, por outro lado, destina-se à leitura pelo usuário. Já que o Arquivo de Eventos possui um formato comum a todos os processadores, não é necessário que as ferramentas gravem o código específico para processadores para obter as informações de que necessitam.

O Arquivo de Eventos é gerado de modo seqüencial. Cada processador simplesmente anexa novos registros a ele. Quando um evento importante ocorre, um registro é gravado no Arquivo de Eventos.

Atualmente, os seguintes tipos de registros são definidos:
  • Registro de Time Stamp
  • Registro de Processador
  • Registro de ID do Arquivo
  • Registro de Fim do Arquivo
  • Registro de Informações de Erro
  • Registro do Programa
  • Registro de Definição do Mapeamento
  • Registro de Início do Mapeamento
  • Registro de Fim do Mapeamento
  • Registro de Código de Feedback

Como diferentes tipos de registros serão incluídos nesse único arquivo, a primeira palavra em cada registro identificará o tipo de registro. Nos diagramas de sintaxe, cada símbolo deve ser separado por exatamente um espaço em branco.

Registro de Time Stamp

Esse registro indica quando o Arquivo de Eventos foi criado e permite a um aplicativo determinar se esse arquivo é atual (se o registro de data e hora for mais antigo que o arquivo indicado no registro de ID do Arquivo, o Arquivo de Eventos poderá estar incorreto para esse arquivo). Esse registro será sempre o primeiro no Arquivo de Eventos.

Nota: Esse registro não é gravado por um processador; é gravado pelo originador de chamada do primeiro processador. Isso permite que cada processador anexe ao Arquivo de Eventos sem a necessidade de determinar se o arquivo existe.

O registro é definido da seguinte maneira:

**––– TIMESTAMP ––– version ––– timestamp ––––*|

máx.
A revisão desse registro, utilizada para compatibilidade ascendente. A versão atual é "1".
timestamp
A data e hora de criação do Arquivos de Eventos no formato aaaammddhhmmss.

Registro de Processador

Esse registro indica que um novo processador foi chamado. Um sempre seguirá o registro de data e hora no Arquivo de Eventos (embora possa haver mais de um).

O registro do processador é definido como segue:

**––– PROCESSOR ––– version ––– output-id ––– line-class –––*|

máx.
A revisão desse registro, utilizada para compatibilidade ascendente. A versão atual é "1".
output-id
O ID de arquivo de um arquivo de saída gerado por esse processador. Se a saída desse processador for pretendida para utilização como entrada para um outro processador, esse ID de arquivo representará esse arquivo e o registro de ID do arquivo seguirá esse registro. Se este for o último processador a ser chamado, para o qual o editor deve exibir mensagens, o ID do arquivo será 0.
line-class
Método utilizado para numerar linhas. Especifique zero se um arquivo temporário ou interno contendo uma representação de fonte expandida estiver sendo utilizado; o número representa o número da linha na fonte expandida. Especifique um se o número representar o número da linha física no arquivo fonte indicado no campo ID do arquivo fonte.
Nota: Se se pretende utilizar a saída de um processador como a entrada de outro, o registro FILEID para a saída deve conter um nome, mesmo se a saída não for colocada em um arquivo real. Esse mesmo nome deve ser utilizado no registro FILEID de entrada do processador que está utilizando a saída.

Registro de ID do Arquivo

Esse registro contém o nome completo do arquivo fonte processado e associa um inteiro ao nome do arquivo. Deve haver um registro desse tipo para cada arquivo fonte processado (o arquivo fonte principal bem como qualquer unidade fonte (membros copylib) incluída e macros).

Nota: Se um arquivo for incluído diversas vezes durante o processamento, um registro do ID do arquivo deve ser gravado para cada inclusão.

O registro de ID do arquivo é definido como segue:

**––– FILEID ––– version ––– source-id ––– line ––– length ––––*
 *––– filename ––– sourcefile timestamp ––– temp flag ––*|

Se o registro do ID do arquivo exceder o comprimento permitido pelo comprimento do registro do arquivo de eventos (o que pode ocorrer ao compilar arquivos IFS), o registro do ID do arquivo deve ser seguido de um ou mais registros contínuos de ID do arquivo no seguinte formato:

**––– FILEIDCONT ––– version ––– source-id ––– line ––– length ––––*
 *––– filename ––– sourcefile timestamp ––– temp flag ––*|

Por exemplo:

FILEID     0 001 000000 383 /home/USER/directory/directory2/directory3/directory4asdfjkaskldjfhakjsdf haslkdjf alksjdfh laksjdf/directory5/dir9 askdjfhaksdjfhkalsjdfhlkajsdfhlajdshflkajshdflkajshdflkjahsdflkjhasdlfkjhaslkdfhalksdjfhalksdhfklashdfkashdflkahsdflkjhasdlkfhalskdfjha
FILEIDCONT 0 001 000000 000 lskfhalskdfhalsdhfalksdjfhlaksfhlasasdkjfhaksdjfhlkasjdfhlkajshdflkajshdfkjashdflkjhasdlkfhsadjkfdfhlakdshflkhs/REM1C01501.RPGLE 20030404130518 0

O comprimento deve sempre ser utilizado para determinar o nome do arquivo, já que nomes de arquivo IFS podem conter espaços, conforme mostrado no exemplo acima.

máx.
A revisão desse registro, utilizada para compatibilidade ascendente. A versão atual é "1".
source-id
Um identificador de arquivo expressado como um inteiro para ser utilizado no lugar do nome do arquivo e correlacionar um registro de erro com o arquivo fonte no qual houve a ocorrência, sem a necessidade de utilizar o nome do arquivo com base em caractere. Utilize zero se não souber o arquivo de entrada, como um arquivo de entrada de uma saída de usuário.
linha
Número da linha do arquivo fonte no qual um novo arquivo é referenciado ou zero se o arquivo não tiver sido referenciado a partir de um arquivo.
tamanho
Comprimento do nome do arquivo; o comprimento máximo é 255. Em um registro FILEIDCONT, o comprimento é sempre zero já que ele é determinado pelo registro do ID do arquivo.
filename
O nome deve ser o nome de arquivo físico completamente qualificado. Se não houver um (por exemplo, obtenção de texto do usuário) ou o nome não puder ser determinado, coloque uma cadeia nula para esse valor.

O nome pode incluir servername.

sourcefile timestamp
Esse é o registro de data e hora no arquivo fonte.
temp flag
Este campo é definido como 1 para indicar que a origem é um arquivo temporário, caso contrário, é definido como 0. O arquivo de origem temporário só pode ser aberto no modo de navegação. Atualmente, o flag de arquivo temporário é utilizado para referenciar saída gerada pelo pré-processador SQL.

Registro de Fim do Arquivo

Esse registro indica se o arquivo de inclusão está terminando. Ele fornece um método de determinar o aninhamento dos arquivos de inclusão, de modo que uma programa possa navegar de volta para a cadeia de inclusão. Isso é útil quando o arquivo de inclusão não contém informações suficientes para determinar o que causou o erro.

O registro de fim do arquivo é definido como segue:

**––– FILEEND ––– version ––– file-id ––– expansion –––*|

máx.
A revisão desse registro, utilizada para compatibilidade ascendente. A versão atual é "1".
file-id
O ID de arquivo desse arquivo.
expansion
Número de linhas fonte expandidas nesse arquivo, incluindo inclusões aninhadas e expansões de macro.
Nota: Todo registro de ID de arquivo precisa ter um registro de fim de arquivo correspondente, exceto para o ID de arquivo que segue o registro do processador para definir o arquivo de saída.

Registro de Informações de Erro

Um registro desse tipo contém informações necessárias para localizar um símbolo ou uma linha que está causando uma mensagem no arquivo fonte, bem como informações suficientes para permitir que a própria mensagem seja exibida. Essas informações incluem informações sobre local (como em qual arquivo e linha ocorreu o erro) e informações relacionadas ao próprio erro (como o número, o texto e a gravidade da mensagem).

O registro de informações sobre o erro é definido como segue:

**––– ERROR ––– version ––– file-id ––– annot-class –––*
 *––– stmt-line ––– start-err-line ––– token-start ––– end-err-line ––– token-end –––*
 *––– msg-id ––– sev-char ––– sev-num ––– length ––– msg –––*|

máx.
A revisão desse registro, utilizada para compatibilidade ascendente. A versão atual é "1".
file-id
O número de ID do arquivo fonte que contém esse erro.
annot-class
Indica onde em uma listagem de mensagens essa mensagem deve ser colocada quando o Arquivo de Eventos é carregado na janela Lista de Erros. As posições são definidas como segue:
0
Parte superior da lista. Geralmente utilizada para mensagens importantes não associadas a uma linha específica de um arquivo. A seqüência de ordenação para várias instâncias de mensagens desse tipo não é definida. Como nenhum texto geralmente corresponde a esse tipo de erro, não é possível localizá-lo na janela de edição.
1
Meio da lista. Geralmente utilizada para mensagens associadas com uma única linha ou símbolo. Várias mensagens desse tipo são ordenadas por número de linha e coluna.
2
Parte inferior da lista. Geralmente utilizada para mensagens menos importantes não associadas a uma linha específica de um arquivo. A seqüência de ordenação para várias instâncias de mensagens desse tipo não é definida. Como nenhum texto geralmente corresponde a esse tipo de erro, não é possível localizá-lo na janela de edição.
stmt-line
Número (no arquivo fonte associado ao número de ID de arquivo fonte acima) da primeira linha da instrução que contém o erro. Essa posição é necessária no caso de o erro não ocorrer na primeira linha da instrução. Esse número é interpretado utilizando-se o campo classe da linha.
start-err-line
Número da linha (no arquivo fonte associado ao número de ID de arquivo fonte acima) que contém o início do erro. Esse número é interpretado utilizando-se o campo classe da linha.
token-start
Coluna (ou caractere na linha) do início do símbolo que está com erro. Se esse dado não estiver disponível, um valor zero fará com que a linha inteira seja marcada como erro.
end-err-line
Número da linha (no arquivo fonte associado ao número de ID de arquivo fonte acima) que contém o fim do erro. Esse número é interpretado utilizando-se o campo classe da linha.
token-end
Coluna (ou caractere na linha) do fim do símbolo que está com erro. Se esse dado não estiver disponível, um valor zero fará com que a linha inteira seja marcada como erro.
msg-id
ID da Mensagem (por exemplo, AMPX999).
sev-char
Letra do código de gravidade (I, W, E, S ou T).
sev-num
O número do nível de gravidade. Em alguns sistemas, esse é o código de retorno associado à letra do código de gravidade (por exemplo, I=0, W=4, E=8, S=12, T=16).
tamanho
O comprimento real do texto da mensagem (o próximo campo). O comprimento máximo é 1024 bytes.
msg
O texto da mensagem de erro. É necessário que qualquer substituição de campo já tenho sido feita.
Nota: Erros que estendem arquivos podem não ser sinalizados devidamente, porque o registro de erros só permite que um file-id seja especificado

Registro do Programa

Esse registro indica que um novo programa no mesmo arquivo fonte está sendo compilado. Ele é utilizado quando vários programas estão contidos em um único arquivo. Quando esse registro é gravado, presume-se que a linha da fonte expandida comece novamente em 1. Não é necessário indicar o primeiro programa no arquivo.

Nota: Todos os registros de ERRO de um programa devem vir após o registro de PROGRAMA daquele programa e antes de qualquer registro de PROGRAMA de outros programas.

O registro do programa é definido como segue:

**––– PROGRAM ––– version ––– line –––*|

máx.
A revisão desse registro, utilizada para compatibilidade ascendente. A versão atual é "1".
linha
A posição de início desse programa no arquivo.

Registro de Definição do Mapeamento

Esse registro indica se uma macro está sendo definida. Ele é usado para permitir que os erros sejam refletidos de volta para uma definição de macro, em vez de refletidos para o local de utilização da macro.

O registro de definição do mapeamento é definido como segue:

**––– MAPDEFINE ––– version ––– macro-id ––– line ––– length ––– macro-name –––*|

máx.
A revisão desse registro, utilizada para compatibilidade ascendente. A versão atual é "1".
macro-id
Inteiro que representa essa definição de macro. Deve ser incrementado de modo seqüencial dentro de um arquivo específico.
linha
Linha física no arquivo atual onde começa a definição de macro.
tamanho
Comprimento do nome da macro.
macro-name
O nome da macro que está sendo definida.

Registro de Início do Mapeamento

Esse registro indica que uma expansão de fonte está começando. É utilizado nos casos de substituição textual.

O registro de início do mapeamento é definido como segue:

**––– MAPSTART ––– version ––– macro-id ––– line –––*|

máx.
A revisão desse registro, utilizada para compatibilidade ascendente. A versão atual é "1".
macro-id
Identificador de uma macro especificada em um registro de definição de mapeamento.
linha
Linha física no arquivo atual onde começa a expansão (por exemplo, chamada de macro).

Registro de Fim do Mapeamento

Esse registro indica que uma expansão de fonte está concluída. É utilizado no fim de uma substituição textual para mostrar quantas linhas foram criadas.

O registro de início do mapeamento é definido como segue:

**––– MAPEND ––– version ––– macro-id ––– line ––– expansion –––*|

máx.
A revisão desse registro, utilizada para compatibilidade ascendente. A versão atual é "1".
macro-id
Identificador de uma macro especificada em um registro de definição de mapeamento.
linha
Linha física no arquivo atual onde começa a expansão (por exemplo, chamada de macro).
expansion
Número de linhas resultante dessa expansão de macro, incluindo expansões aninhadas.

Registro de Código de Feedback

Esse registro contém o código de retorno e o código de motivo no ponto de parada da compilação.

O registro de código de feedback é definido como segue:

**––– FEEDBACK ––– version ––– return-code ––– reason-code –––*|

máx.
A revisão desse registro, utilizada para compatibilidade ascendente. A versão atual é "1".
return-code
Código de retorno fornecido pelo processador.
reason-code
Código de motivo fornecido pelo processador.