reorganize gifanalyzer.c
This commit is contained in:
		
							parent
							
								
									8c029c5993
								
							
						
					
					
						commit
						0f780f1e3f
					
				@ -3,6 +3,7 @@
 | 
				
			|||||||
/*  Grafx2 - The Ultimate 256-color bitmap paint program
 | 
					/*  Grafx2 - The Ultimate 256-color bitmap paint program
 | 
				
			||||||
 *  Gif Analyzer tool
 | 
					 *  Gif Analyzer tool
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Copyright 2018 Thomas Bernard
 | 
				
			||||||
    Copyright 2010 Adrien Destugues
 | 
					    Copyright 2010 Adrien Destugues
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Grafx2 is free software; you can redistribute it and/or
 | 
					    Grafx2 is free software; you can redistribute it and/or
 | 
				
			||||||
@ -22,14 +23,15 @@
 | 
				
			|||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
#include <stdint.h>
 | 
					#include <stdint.h>
 | 
				
			||||||
#include <math.h>
 | 
					
 | 
				
			||||||
 | 
					static void read_image(FILE * theFile);
 | 
				
			||||||
 | 
					static void read_palette(FILE * theFile, int count);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main(int argc, char* argv[])
 | 
					int main(int argc, char* argv[])
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  FILE* theFile;
 | 
					  FILE* theFile;
 | 
				
			||||||
  uint8_t buffer[256];
 | 
					  uint8_t buffer[256];
 | 
				
			||||||
  uint16_t w,h;
 | 
					  uint16_t w,h;
 | 
				
			||||||
  uint16_t x,y;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if(argc < 2)
 | 
					  if(argc < 2)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
@ -74,35 +76,71 @@ int main(int argc, char* argv[])
 | 
				
			|||||||
  if(buffer[2] != 0) printf("\t aspect ratio = %d/64\n", 15 + buffer[2]);
 | 
					  if(buffer[2] != 0) printf("\t aspect ratio = %d/64\n", 15 + buffer[2]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  printf("Color palette:\n");
 | 
					  printf("Color palette:\n");
 | 
				
			||||||
  for (int i = 0; i < color_table_size; i++)
 | 
					  read_palette(theFile, color_table_size);
 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    fread(buffer,1,3,theFile);
 | 
					 | 
				
			||||||
    /*printf("\t%d: %u %u %u\t",i,buffer[0], buffer[1], buffer[2]);*/
 | 
					 | 
				
			||||||
    printf("   %3d: #%02x%02x%02x",i,buffer[0], buffer[1], buffer[2]);
 | 
					 | 
				
			||||||
    if ((i+1)%8 ==0)puts("");
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  int i = 0;
 | 
					  int i = 0;
 | 
				
			||||||
  do {
 | 
					  do {
 | 
				
			||||||
    fread(buffer,1,1,theFile);
 | 
					    fread(buffer,1,1,theFile);
 | 
				
			||||||
 | 
					    printf("%02X ", buffer[0]);
 | 
				
			||||||
    i++;
 | 
					    i++;
 | 
				
			||||||
  } while (buffer[0] != ',');
 | 
					  } while (buffer[0] != ',');
 | 
				
			||||||
 | 
					  printf("\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (i > 1)
 | 
					  if (i > 1)
 | 
				
			||||||
    printf("Skipped %d meaningless bytes before image descriptor\n",i);
 | 
					    printf("Skipped %d meaningless bytes before image descriptor\n",i);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  read_image(theFile);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						fclose(theFile);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void read_image(FILE * theFile)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  uint8_t buffer[256];
 | 
				
			||||||
 | 
					  uint16_t x,y;
 | 
				
			||||||
 | 
					  uint16_t w,h;
 | 
				
			||||||
 | 
					  unsigned long total_bytes = 0, chunk_count = 0;
 | 
				
			||||||
 | 
					  int color_table_size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  fread(&x,2,1,theFile);
 | 
					  fread(&x,2,1,theFile);
 | 
				
			||||||
  fread(&y,2,1,theFile);
 | 
					  fread(&y,2,1,theFile);
 | 
				
			||||||
  fread(&w,2,1,theFile);
 | 
					  fread(&w,2,1,theFile);
 | 
				
			||||||
  fread(&h,2,1,theFile);
 | 
					  fread(&h,2,1,theFile);
 | 
				
			||||||
  fread(buffer,1,1,theFile);
 | 
					  fread(buffer,1,1,theFile);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  color_table_size =  1 << ((buffer[0]&0x07)+1);
 | 
				
			||||||
  printf("Image descriptor\n");
 | 
					  printf("Image descriptor\n");
 | 
				
			||||||
  printf("\tx=%d y=%d w=%d h=%d\n",x,y,w,h);
 | 
					  printf("\tx=%d y=%d w=%d h=%d\n",x,y,w,h);
 | 
				
			||||||
  printf("\t%sLocal Color Table (%d colors) %sSorted, %s\n",
 | 
					  printf("\t%sLocal Color Table (%d colors) %sSorted, %s\n",
 | 
				
			||||||
         (buffer[0]&0x80)?"":"No ", 1 << ((buffer[0]&0x07)+1),
 | 
					         (buffer[0]&0x80)?"":"No ", color_table_size,
 | 
				
			||||||
         (buffer[0]&0x20)?"":"Not ",
 | 
					         (buffer[0]&0x20)?"":"Not ",
 | 
				
			||||||
         (buffer[0]&0x40)?"Interlaced":"Progressive");
 | 
					         (buffer[0]&0x40)?"Interlaced":"Progressive");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	fclose(theFile);
 | 
					  if (buffer[0]&0x80)
 | 
				
			||||||
 | 
					    read_palette(theFile, color_table_size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  while (!feof(theFile))
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    fread(buffer,1,1,theFile);
 | 
				
			||||||
 | 
					    if (buffer[0] == 0)
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					    fread(buffer+1,1,buffer[0],theFile);
 | 
				
			||||||
 | 
					    total_bytes += buffer[0];
 | 
				
			||||||
 | 
					    chunk_count++;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  printf("  %lu bytes in %lu chunks\n", total_bytes, chunk_count);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void read_palette(FILE * theFile, int count)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  uint8_t buffer[3];
 | 
				
			||||||
 | 
					  int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for (i = 0; i < count; i++)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    fread(buffer,1,3,theFile);
 | 
				
			||||||
 | 
					    /*printf("\t%d: %u %u %u\t",i,buffer[0], buffer[1], buffer[2]);*/
 | 
				
			||||||
 | 
					    printf("   %3d: #%02x%02x%02x",i,buffer[0], buffer[1], buffer[2]);
 | 
				
			||||||
 | 
					    if ((i+1)%8 ==0)puts("");
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user