Os complementos de um artigo estão definidos em 4 estruturas de dados:

1.
Array de Descritivos - Array de 3000 descritivos de artigos e de complementos com 16 caracteres cada.
3000x16 bytes
Trata-se dos mesmos descritivos que estão a ser usados para os artigos, para que o terminal consiga distinguir as páginas de complementos correctamente, antes da primeira página de complementos deve ser colocado um descritivo contendo: "COMPLEMENTOS    ", seguido de um descritivo vazio. Após a última página de complementos deve ser colocado um descritivo contendo: COMPLEMENTOS FIM"
Cada página de complementos consiste em um ou mais descritivos em posições consecutivas. Um descritivo vazio marca o fim de cada página.

2.
Tipo de página - Array de 256 inteiros de 8 bits
256 bytes
Tipos possíveis:
1 - Apontador indica página com opções de escolha única (Ex. Cheio/Curto)
5 - Apontador indica página com opções de escolha múltipla (Ex. Com Natas/Em chávena fria)
129 -
Apontador indica página automática com opções de escolha única (Ex. Cheio/Curto)
133 - Apontador indica página automática com opções de escolha múltipla (Ex. Com Natas/Em chávena fria)
0 - Fim dos complementos para este artigo

3.
Apontador para a página - Array de 256 inteiros de 32 bits
256x4 bytes
Contém o índice do primeiro descritivo da página de complementos.

Os buffers para estas estruturas de dados são enviados para os terminais através da rotina já usada para transmitir os descritivos dos artigos. O mapa de posições passa a ser o seguinte:

4.
Indice da lista de Apontadores/Tipos de página para cada artigo - Array de 3040 inteiros de 8 bits

Mapa das posições:


0 a 9

Reservadas


11 a 13

NAO USADO


14

"Mesa"


15

"Prato Qtd"


16

"Enviando"


17

NAO USADO


18

NAO USADO


19

"Nº Pessoas" ou "LUGAR"


20

"Outras"


21 a 27

Nome das Funções "Outras"


28 a 29

"Reservados"


30

Metodos de Pagamento


31

"Imprime s/n"


32

Prompt "?" ( Por defeito )


33 a 3071

Descritivos de artigos de 1 a 3039


3072

1 - Pedido


3073

2 - Anulação


3074

3 - Subtotal


3075

4 - Conta


3076

5 - Transferencias


3077

6 - Pagamento Parcial


3078

7 - Outros


3079

8 - Desconto


9
9 - Configuracao


3080

1 - Comando


3081

2 - Licenca


3082

3 - Config.A


3083

4 - Config.B


3084

5 – Config.C


3085

6 - Receber PLUs


3086

7 - Apagar PLUs


10
8 - Envia PLUs+C


3087

Desistir [Enter]




3088
Array de páginas
(tipo de)
bytes 0 a 15

(...)
(...)

3103
bytes 240 a 255




3104
Array de páginas
(apontador para)
inteiros de 32 bits 0 a 3

(...)
(...)

3167
inteiros de 32 bits 252 a 255




3168
Indice no array de páginas para cada artigo
bytes 0 a 15

(...)
(..)

3358
bytes 1024 a 1039




3999
4 bytes c/ o nº de descritivos a receber


Exemplo:

Café [cheio ou curto] [em chavena frie e/ou duplo e/ou com natas]

Descritivos

100    CAFE
101    CHA
102    CEVADA
103

499    COMPLEMENTOS
500    CHEIO
501    CURTO
502
503    EM CHAVENA FRIA
504    DUPLO
505    COM NATAS
506
999    COMPLEMENTOS FIM

3088    0,   1,   5,  0,0,0,0,0,0,0,0,0,0,0,0,0
        (8 bits,  páginas de complementos para o CAFE - tipos)

3104    0, 500, 503,  0
        (32 bits, páginas de complementos para o CAFE - apontadores)

3168    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
        (indices para os plus de 0 a 15)

...
3174    0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0
        (indices para os plus 96 a 111, o 101 é o CAFE,

         o índice 1 para CAFE indica que ao CAFE se aplicam as páginas
         que estão a partir da posição 1 do array