diff --git a/Makefile b/Makefile index b4751a43..85c7690d 100644 --- a/Makefile +++ b/Makefile @@ -5,19 +5,21 @@ all: cd asoft_presenter && make cd dos33fs-utils && make cd hgr-utils && make + cd gr-utils && make install: cd asoft_basic-utils && make install cd asoft_presenter && make install cd dos33fs-utils && make install cd hgr-utils && make install - + cd gr-utils && make install clean: cd asoft_basic-utils && make clean cd asoft_presenter && make clean cd dos33fs-utils && make clean cd hgr-utils && make clean + cd gr-utils && make clean rm -f *~ test: diff --git a/gr-utils/Makefile b/gr-utils/Makefile new file mode 100644 index 00000000..d3637d59 --- /dev/null +++ b/gr-utils/Makefile @@ -0,0 +1,18 @@ +include ../Makefile.inc + +all: png2gr + +png2gr: png2gr.o + $(CC) $(LFLAGS) -lpng -o png2gr png2gr.o + +png2gr.o: png2gr.c + $(CC) $(CFLAGS) -c png2gr.c + + +install: + cp png2gr $(INSTALL_LOC) + +clean: + rm -f *~ *.o png2gr + + diff --git a/gr-utils/png2gr.c b/gr-utils/png2gr.c new file mode 100644 index 00000000..9f65c429 --- /dev/null +++ b/gr-utils/png2gr.c @@ -0,0 +1,203 @@ +#include +#include + +#include +#include +#include +#include +#include + +#include + +/* TODO: */ +/* 40x48 images */ +/* 80x40, 80x48 double-highres images */ + +int main(int argc, char **argv) { + + int image[40][40]; + int x,y; + FILE *infile,*outfile; + int debug=0; + + if (argc<3) { + fprintf(stderr,"Usage:\t%s INFILE OUTFILE\n\n",argv[0]); + exit(-1); + } + + outfile=fopen(argv[2],"w"); + if (outfile==NULL) { + fprintf(stderr,"Error! Could not open %s\n",argv[2]); + exit(-1); + } + + int width, height; + png_byte color_type; + png_byte bit_depth; + + png_structp png_ptr; + png_infop info_ptr; + int number_of_passes; + png_bytep * row_pointers; + + unsigned char header[8]; + + /* open file and test for it being a png */ + infile = fopen(argv[1], "rb"); + if (infile==NULL) { + fprintf(stderr,"Error! Could not open %s\n",argv[1]); + exit(-1); + } + + /* Check the header */ + fread(header, 1, 8, infile); + if (png_sig_cmp(header, 0, 8)) { + fprintf(stderr,"Error! %s is not a PNG file\n",argv[1]); + exit(-1); + } + + /* initialize stuff */ + png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + if (!png_ptr) { + fprintf(stderr,"Error create_read_struct\n"); + exit(-1); + } + + info_ptr = png_create_info_struct(png_ptr); + if (!info_ptr) { + fprintf(stderr,"Error png_create_info_struct\n"); + exit(-1); + } + + png_init_io(png_ptr, infile); + png_set_sig_bytes(png_ptr, 8); + + png_read_info(png_ptr, info_ptr); + + width = png_get_image_width(png_ptr, info_ptr); + height = png_get_image_height(png_ptr, info_ptr); + color_type = png_get_color_type(png_ptr, info_ptr); + bit_depth = png_get_bit_depth(png_ptr, info_ptr); + + if (debug) { + printf("PNG: width=%d height=%d depth=%d\n",width,height,bit_depth); + } + + number_of_passes = png_set_interlace_handling(png_ptr); + png_read_update_info(png_ptr, info_ptr); + + row_pointers = (png_bytep*) malloc(sizeof(png_bytep) * height); + for (y=0; y0x3f8) break; + enough++; + if (enough>119) { + fputc(0,outfile); + fputc(0,outfile); + fputc(0,outfile); + fputc(0,outfile); + fputc(0,outfile); + fputc(0,outfile); + fputc(0,outfile); + fputc(0,outfile); + enough=0; + } + + col++; + if (col>39) { + col=0; + row+=16; + if (row>47) row-=46; + } + } + + fclose(outfile); + + return 0; +}