Obrigado a Julio Marchi pelo espaço cedido na MSX All
 

Shape (.SHP)

  O arquivo de shapes é uma coleção de desenhos empilhados, onde cada desenho contém seu próprio header mais o mapa de padrões da screen 2. O arquivo de shape não contém o header de arquivo do MSX.

  O formato de arquivo de shape é descrito a seguir:

 


  O header de cada shape contém as seguintes informações:

Offset
(hexa)
Tamanho
(bytes)
Descrição
0 1 ID do shape
1 1 Tipo do shape (1-4)
2 1 Largura do shape em pixels
3 1 Altura do shape em blocos de 8x8

  Exemplo de header: 01 01 30 06.

  Descrição do header:

 ID do shape: 1
 Tipo do shape: 1
 Largura do shape: &H30 ou 48 pixels
 Altura do shape: &H06 ou 6 blocos de 8x8 pixels = 48 pixels


  Cada tipo de shape define a área de dados do desenho:

Tipo Dados do desenho Tamanho
(bytes)
1 Tabela de padrões Largura x Altura
2 Tabela de padrões e cores 2 x Largura x Altura
3 Tabela de padrões da máscara e padrões 2 x Largura x Altura
4 Tabela de padrões da máscara, padrões e cores 3 x Largura x Altura

  No exemplo do header fornecido, a área de dados seria composta somente da tabela de padrões da screen 2.
  O tamanho de cada tabela em bytes é obtido através da multiplicação de dois valores fornecidos pelo header: a altura e a largura. Assim, o tamanho ocupado pelos dados desse exemplo seria de 48x6 ou 288 bytes. Daí, concluímos que o desenho 1 ocupa 4+288 ou 292 bytes e que os offsets de 0 a 291 do arquivo de shape contém o desenho 1. O desenho 2 está localizado a partir do offset 292.

  0       291 292   
 | Desenho 1 | Desenho 2 | ...


  Nesse tipo de arquivo, não é possível determinar a localização direta de um "desenho N". Dessa forma, é necessário primeiro passar pelos desenhos anteriores e ir "saltando" até chegar ao desenho desejado. Para isso, basta ler o header de cada desenho, calcular o endereço do próximo desenho e deslocar o ponteiro de arquivo para lá.

  Obs: o tamanho das três tabelas é o mesmo. Assim, se o exemplo apresentado fosse do tipo 2, multiplicaríamos a largura pela altura (header) e depois o resultado por dois.

  O arquivo do tipo shape possui sempre o tamanho múltiplo de 128 bytes. Assim, é possível que o arquivo contenha lixo na área não usada. Entretanto, é fácil identificar o fim de arquivo: quando o próximo ID do shape possuir valor igual a 255 (&HFF), significa o final do arquivo.

  Máscara

  A máscara é um recurso que permite que o shape seja colado sobre a tela, copiando-se apenas os pixels desejados. Os shapes dos tipos 1 e 2 copiam para a tela toda a área do shape, inclusive o fundo de tela. Assim, toda a área do retângulo do shape é substituída na tela quando ele é copiado.
  Quando é feita a opção pelo shape do tipo 3 ou 4 no Graphos III, um editor surge após a definição da área do shape, contendo a imagem do shape monocromática (Ink) com os pixels invertidos. Essa imagem é a máscara que será utilizada para definir a área útil do shape. Os pixels apagados da máscara (valor 0) indicam a região do shape que será copiada para a tela e os pixels acesos (valor 1), não.

  Exemplo:

  Shape     Máscara

 00100000   11011111
 01010000   10101111
 10001000   01110111
 10001000   01110111
 11111000   00000111
 10001000   01110111
 10001000   01110111
 00000000   11111111


  A máscara define o contorno do desenho da letra "A". Assim, com o uso da máscara, somente os pixels da letra "A" serão desenhados sobre a tela, em vez de todo o retângulo do shape.
  A figura a seguir ilustra a superposição desse shape com uma figura, com e sem o uso da máscara.

 

  Dicas:



Marcelo Teixeira Silveira
Engenheiro de Sistemas e Computação - UERJ
Mestre em Engenharia de Computação - UERJ

© MarMSX 1999-2018