Enterprise COBOL for z/OS, V4.2, Language Reference
Para qualquer descrição de dados que possua itens binários que não estejam em seus limites naturais, o compilador insere bytes livres em um registro para garantir
que todos os itens SINCRONIZADOS estejam em seus limites adequados.
Como é importante que você saiba o comprimento dos registros em um arquivo, é necessário determinar se são necessários bytes livres e, se houver, quantos bytes o
compilador adicionará.
O algoritmo que o compilador usa é o seguinte:
- O número total de bytes ocupados por todos os itens de dados elementares que precedem o item binário são adicionados, incluindo quaisquer bytes livres
adicionados anteriormente.
- Essa soma é dividida por m, onde:
- m = 2 para itens binários com comprimento de quatro dígitos ou menos
- m = 4 para itens binários de comprimento de cinco dígitos ou mais e para itens de dados COMPUTACIONAL-1
- m = 4 4 para itens de dados descritos com USAGE INDEX, USAGE POINTER, USAGE PROCEDURE-POINTER, USAGE OBJECT REFERENCE ou USAGE FUNCTION-POINTER
- m = 8 para itens de dados COMPUTACIONAL-2
- Se o restante (r) dessa divisão for igual a zero, não serão necessários bytes livres.
Se o restante não for igual a zero, o número de bytes livres que devem ser adicionados é igual a m - r.
Esses bytes de folga (slack bytes) são adicionados a cada registro imediatamente após o item de dados elementar que precede o item binário.
Eles são definidos como se constituíssem um item com um número de nível igual ao item elementar que precede imediatamente o item binário SINCRONIZADO e são
incluídos no tamanho do grupo que os contém.
Por exemplo:
05 FIELD-B PICTURE X(5).
05 FIELD-C.
10 FIELD-D PICTURE XX.
[10 SLACK-BYTES PICTURE X. INSERTED BY COMPILER]
10 FIELD-E COMPUTATIONAL PICTURE S9(6) SYNC.
01 FIELD-L.
05 FIELD-M PICTURE X(5).
05 FIELD-N PICTURE XX.
[05 SLACK-BYTES PICTURE X. INSERTED BY COMPILER]
05 FIELD-O.
10 FIELD-P COMPUTATIONAL PICTURE S9(6) SYNC.
Os Slack bytes também podem ser adicionados pelo compilador quando um item de grupo é definido com uma cláusula OCCURS e contém um item de dados binários
SYNCHRONIZED dentro dele.
Para determinar se os slack bytes (bytes livres) devem ser adicionados, a seguinte ação é executada:
- O compilador calcula o tamanho do grupo, incluindo todos os bytes de folga necessários em um registro.
- Essa soma é dividida pelo maior m exigido por qualquer item elementar do grupo.
- Se r for igual a zero, não serão necessários bytes livres.
Se r não for igual a zero, m - r bytes livres devem ser adicionados.
Os bytes de folga são inseridos no final de cada ocorrência do item de grupo que contém a cláusula OCCURS.
Por exemplo, um registro definido da seguinte maneira aparecerá no armazenamento, conforme mostrado, na figura após o registro:
05 WORK-CODE PICTURE X.
05 COMP-TABLE OCCURS 10 TIMES.
10 COMP-TYPE PICTURE X.
[10 SLACK-BYTES PIC XX. INSERTED BY COMPILER]
10 COMP-PAY PICTURE S9(4)V99 COMP SYNC.
10 COMP-HOURS PICTURE S9(3) COMP SYNC.
10 COMP-NAME PICTURE X(5).
Para alinhar COMP-PAY e COMP-HOURS em seus limites adequados, o compilador adicionou 2 bytes de folga no registro.
No exemplo anterior, sem ajustes adicionais, a segunda ocorrência de COMP-TABLE começaria 1 byte antes de um limite de duas palavras e o alinhamento de COMP-PAY e
COMP-HOURS não seria válido para nenhuma ocorrência da tabela após o primeiro.
Portanto, o compilador deve adicionar bytes livres no final do grupo, como se o registro tivesse sido gravado da seguinte maneira:
05 WORK-CODE PICTURE X.
05 COMP-TABLE OCCURS 10 TIMES.
10 COMP-TYPE PICTURE X.
[10 SLACK-BYTES PIC XX. INSERTED BY COMPILER]
10 COMP-PAY PICTURE S9(4)V99 COMP SYNC.
10 COMP-HOURS PICTURE S9(3) COMP SYNC.
10 COMP-NAME PICTURE X(5).
[10 SLACK-BYTES PIC XX. INSERTED BY COMPILER]
Neste exemplo, a segunda e cada ocorrência subsequente de COMP-TABLE começa 1 byte além de um limite de duas palavras.
O layout de armazenamento para a primeira ocorrência de COMP-TABLE agora aparecerá como mostrado na figura a seguir:

Cada ocorrência subsequente na tabela começará agora na mesma posição relativa que a primeira.
© Copyright IBM Corp.