Projeto Entendo® - Formato dos Arquivos .DAT ============================================ I) Introdução Cada jogo terá um arquivo DAT associado. Este arquivo conterá todos os arquivos que o jogo necessitará (por exemplo, imagens, sons etc.) Por motivo de velocidade, o arquivo DAT não será com- pactado. Este pequeno texto tem como objetivo descrever o formato desse arquivo. II) Cabeçalho Os primeiros 10 bytes conterão a mensagem "EntendoDAT" (sem as aspas, obviamente), que será a assinatura do arquivo. Logo após a assinatura, 2 bytes contendo a versão do arquivo DAT. Esse recurso, a princípio, não terá a menor diferença, mas novos tipos de arquivos DAT poderão ser criados no futuro (por exemplo, com compactação total ou parcial). Esses 2 bytes devem ser zerados para esta versão. Depois, haverá 2 bytes, que representarão o número de arquivos distintos contidos no arquivo DAT. Esse número deverá ser lido como unsigned int (16 bits, sem sinal). Ou seja, pode-se ter até 65535 arquivos distintos (o que parece um limite bastante razoável). Após esses 14 primeiros bytes, haverá tantos grupos de 5 bytes quanto for o número de arquivos (descrito acima). Cada grupo de 5 bytes será organizado da seguinte forma: Byte 1 - Tipo de arquivo (ver adiante) Bytes 2 a 5 - Posição absoluta do arquivo no DAT. O tipo de arquivo pode ser (até o momento): 1 - PCX (imagem) 2 - BMP (imagem) 3 - MID (música) 4 - WAV (som) Novos tipos de arquivo (AVI, JPG, MOD etc.) poderão ser acrescentados com o tempo. Obviamente o número máximo de tipos de arquivo é 255 (o 0 não pode ser usado por ser reservado para uso futuro). III) Esquema Estrutural do Cabeçalho Byte Nome Descrição ===================================================================== Bytes 0-9 Assinatura "EntendoDAT" Bytes 10-11 Versao Versão do formato DAT(zero na atual) Bytes 12-13 NumArquivos Número de arquivos armazenados Para cada i, 1 <= i <= NumArquivos: Byte 0 TipoArq Tipo de arquivo armazenado Bytes 1-4 ArqPos Posição absoluta do arquivo no DAT IV) Tamanho do Cabeçalho Fazendo uma conta simples, chegamos à conclusão de que o tamanho do cabeçalho = 14 + NumArquivos * 5 Além disso, com um raciocínio simples, concluímos que sempre o primeiro ArqPos será igual a 14 + NumArquivos * 5 (ou seja, o primeiro ArqPos é sempre igual ao tamanho do cabeçalho). A partir disso fica fácil construir os demais ArqPos. Basta fazer ArqPos[i] = ArqPos[i - 1] + filesize(Arquivo[i - 1]); Ou seja, ArqPos[i] vai ser igual ao ArqPos[i - 1] mais o tamanho (em bytes) do arquivo de índice (i - 1).