#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int process_file(FILE	*raw) {
	unsigned char sector[512];
	int i = 0;
	char of[128];
	int makertag = 11; // 5kib, should be okay
	char* ext = "NotAnImage"; // First part, the most-likely-broken FAT

	sprintf(of, "NotAnImage", i);
	FILE *img = fopen(of, "wb");
	
	fread(sector, 1, 512, raw);
	while(!feof(raw)) {
		if ((
			sector[0] == 0xff &&	// JPG
			sector[1] == 0xd8 &&
			sector[2] == 0xff &&
			sector[3] == 0xe1
			) || (
			sector[0] == 0x4d && // NEF
			sector[1] == 0x4d &&
			sector[2] == 0x00 &&
			sector[3] == 0x2a
		)) {
			if( makertag > 10 ) {
				makertag = 0;
				fclose(img);
				++i;
				sprintf(of, "save_img_%3.3d.%s", i, ext);
				if( sector[1] == 0x4d ) {
					ext = "NEF";
				}
				else {
					ext = "JPG";
				}
				img = fopen(of, "wb");
			}
		}
		makertag++;
		fwrite(sector, 1, 512, img);
		fread(sector, 1, 512, raw);
	}
	fclose(raw);
	fclose(img);
	return(0);	
}

int main( int argc, char *argv[]) {
	if(argc!=2) {
		printf("usage: %s rawfile\n", argv[0]);
		return(1);
	}
	FILE *raw = fopen(argv[1], "rb");
	process_file(raw);
}

