diff --git a/gr-utils/Makefile b/gr-utils/Makefile index 9d706dad..16fe6607 100644 --- a/gr-utils/Makefile +++ b/gr-utils/Makefile @@ -50,10 +50,10 @@ png2lz4.o: png2lz4.c loadpng.h ### -png_to_40x48d: png_to_40x48d.o - $(CC) $(LFLAGS) -o png_to_40x48d png_to_40x48d.o -lpng +png_to_40x48d: png_to_40x48d.o rle_common.o + $(CC) $(LFLAGS) -o png_to_40x48d png_to_40x48d.o rle_common.o -lpng -png_to_40x48d.o: png_to_40x48d.c +png_to_40x48d.o: png_to_40x48d.c rle_common.h $(CC) $(CFLAGS) -c png_to_40x48d.c ### diff --git a/gr-utils/png_to_40x48d.c b/gr-utils/png_to_40x48d.c index e065f01f..d6577255 100644 --- a/gr-utils/png_to_40x48d.c +++ b/gr-utils/png_to_40x48d.c @@ -12,9 +12,7 @@ #include -#define OUTPUT_C 0 -#define OUTPUT_ASM 1 - +#include "rle_common.h" static int convert_color(int color,int which) { @@ -347,163 +345,6 @@ int loadpng(char *filename, unsigned char **image_ptr, int *xsize, int *ysize, return 0; } - - - -/*****************************************/ -/* \/ \/ */ -/* Converts a PNG to RLE compressed data */ -/*****************************************/ - - -static int print_run(int count, int out_type, int run, int last) { - - int size=0; - - if (count==0) { - if (out_type==OUTPUT_C) { - printf("\n\t"); - } - else { - printf("\n\t.byte "); - } - } - else { - if (out_type==OUTPUT_C) { - } - else { - printf(", "); - } - } - - if (run==1) { - if (out_type==OUTPUT_C) { - printf("0x%02X,",last); - } - else { - printf("$%02X",last); - } - size++; - } - if (run==2) { - if (out_type==OUTPUT_C) { - printf("0x%02X,0x%02X,",last,last); - } - else { - printf("$%02X,$%02X",last,last); - } - size+=2; - } - - if ((run>2) && (run<16)) { - if (out_type==OUTPUT_C) { - printf("0x%02X,0x%02X,",0xA0|run,last); - } - else { - printf("$%02X,$%02X",0xA0|run,last); - } - size+=2; - } - - if (run>=16) { - if (out_type==OUTPUT_C) { - printf("0x%02X,0x%02X,0x%02X,",0xA0,run,last); - } - else { - printf("$%02X,$%02X,$%02X",0xA0,run,last); - } - size+=3; - } - - return size; -} - -int rle_smaller(int out_type, char *varname, - int xsize,int ysize, unsigned char *image,int high) { - - int run=0; - int x; - - int last=-1,next; - int size=0; - int count=0; - - x=0; - - /* Write out xsize and ysize */ - - if (out_type==OUTPUT_C) { - fprintf(stdout,"unsigned char %s_%s[]={\n",varname, - high?"high":"low"); - fprintf(stdout,"\t0x%X, /* ysize=%d */",xsize,ysize); - } - else { - fprintf(stdout,"%s_%s:",varname,high?"high":"low"); - fprintf(stdout,"\t.byte $%X ; ysize=%d",xsize,ysize); - } - - size+=2; - - /* Get first top/bottom color pair */ - last=image[x]; - run++; - x++; - - while(1) { - - /* get next top/bottom color pair */ - next=image[x]; - - if ((next&0xf0)==0xA0) { - fprintf(stderr,"Warning! Using color A (grey2)!\n"); - next&=~0xf0; - next|=0x50; // substitute grey1 - } - - /* If color change (or too big) then output our run */ - /* Note 0xff for run length is special case meaning "finished" */ - if ((next!=last) || (run>254)) { - - size+=print_run(count,out_type,run,last); - - count++; - run=0; - last=next; - } - - x++; - - /* If we reach the end */ - if (x>=xsize*(ysize/2)) { - run++; - - size+=print_run(count,out_type,run,last); - - break; - - } - - run++; - if (count>6) count=0; - - } - - /* Print closing marker */ - - if (out_type==OUTPUT_C) { - fprintf(stdout,"0xA1,"); - fprintf(stdout,"\t};\n"); - } else { - fprintf(stdout,"\n\t.byte $A1\n"); - } - - size+=1; - - return size; -} - - - /* Converts a PNG to RLE compressed data */ int main(int argc, char **argv) { @@ -512,6 +353,7 @@ int main(int argc, char **argv) { int xsize,ysize; int size=0; int out_type=OUTPUT_C; + char output_name[BUFSIZ]; if (argc<4) { fprintf(stderr,"Usage:\t%s type INFILE varname\n\n",argv[0]); @@ -536,11 +378,9 @@ int main(int argc, char **argv) { fprintf(stderr,"Loaded image %d by %d\n",xsize,ysize); -// size=rle_original(out_type,argv[3], -// xsize,ysize,image); - - size=rle_smaller(out_type,argv[3], - xsize,ysize,image,0); + sprintf(output_name,"%s_low",argv[3]); + size=rle_smaller(out_type,output_name, + xsize,ysize,image); fprintf(stderr,"Size %d bytes\n",size); @@ -554,8 +394,9 @@ int main(int argc, char **argv) { // size=rle_original(out_type,argv[3], // xsize,ysize,image); - size=rle_smaller(out_type,argv[3], - xsize,ysize,image,1); + sprintf(output_name,"%s_high",argv[3]); + size=rle_smaller(out_type,output_name, + xsize,ysize,image); fprintf(stderr,"Size %d bytes\n",size);