#include #include double LENGTH; char TITLE[256], EMU[256]; unsigned RECORDS; double FPS = 60; static void ReadFMV(FILE *fp) { unsigned char Header[144]; unsigned FLAGS; unsigned bytes_per_frame = 0; rewind(fp); fread(Header,1,sizeof Header, fp); if(memcmp(Header+0, "FMV", 3) != 0) return; sprintf(TITLE, "%.63s", Header+80); sprintf(EMU, "%.63s", Header+16); RECORDS = Header[10] +Header[11]*256; // +Header[12]*256*256 // +Header[13]*256*256*256; FLAGS = Header[5]; // FLAGS & 0x80 = player 1 // FLAGS & 0x40 = player 2 // FLAGS & 0x20 = FDS if(FLAGS & 0x20) ++bytes_per_frame; if(FLAGS & 0x40) ++bytes_per_frame; if(FLAGS & 0x80) ++bytes_per_frame; ++RECORDS; // Famtasia does this too fseek(fp,0,SEEK_END); LENGTH = (ftell(fp) - sizeof(Header)) / (bytes_per_frame * 60.0); } static void ReadGMV(FILE *fp) { unsigned char Header[64]; unsigned bytes_per_frame = 3; rewind(fp); fread(Header,1,sizeof Header, fp); if(memcmp(Header+0, "Gens", 4) != 0) return; sprintf(TITLE, "%.39s", Header+24); RECORDS = Header[16] +Header[17]*256 +Header[18]*256*256 +Header[19]*256*256*256; fseek(fp,0,SEEK_END); LENGTH = (ftell(fp) - sizeof(Header)) / (bytes_per_frame * 60.0); } static void ReadSMV(FILE *fp) { unsigned char Header[32]; unsigned OFS_STATE; unsigned metalen, a; rewind(fp); fread(Header,1,sizeof Header, fp); if(memcmp(Header+0, "SMV\32", 4) != 0) return; FPS = (Header[0x15] & 2) ? 50 : 60; RECORDS = Header[12] +Header[13]*256 +Header[14]*256*256 +Header[15]*256*256*256; LENGTH = Header[16] +Header[17]*256 +Header[18]*256*256 +Header[19]*256*256*256; OFS_STATE=Header[24] +Header[25]*256 +Header[26]*256*256 +Header[27]*256*256*256; LENGTH = LENGTH / FPS; metalen = OFS_STATE - sizeof(Header); for(a=0; a