Simplified logic in seeking.

This commit is contained in:
n-a-c-h
2005-03-21 22:07:58 +00:00
parent df9d6d096c
commit 0eddcacd15

View File

@@ -152,6 +152,9 @@ enum zmv_video_modes { zmv_vm_ntsc, zmv_vm_pal };
#define INT_CHAP_SIZE (cur_zst_size+4+8) #define INT_CHAP_SIZE (cur_zst_size+4+8)
#define EXT_CHAP_SIZE (cur_zst_size+4+8+4) #define EXT_CHAP_SIZE (cur_zst_size+4+8+4)
#define INT_CHAP_INDEX_SIZE (zmv_vars.header.internal_chapters*4)
#define EXT_CHAP_BLOCK_SIZE (zmv_open_vars.external_chapter_count*EXT_CHAP_SIZE + 2)
struct zmv_header struct zmv_header
{ {
char magic[3]; char magic[3];
@@ -689,12 +692,13 @@ static bool zmv_open(char *filename)
fseek(zmv_vars.fp, -2, SEEK_END); fseek(zmv_vars.fp, -2, SEEK_END);
zmv_open_vars.external_chapter_count = fread2(zmv_vars.fp); zmv_open_vars.external_chapter_count = fread2(zmv_vars.fp);
fseek(zmv_vars.fp, -(zmv_vars.header.internal_chapters*4 + zmv_open_vars.external_chapter_count*EXT_CHAP_SIZE + 2), SEEK_END); fseek(zmv_vars.fp, -(INT_CHAP_INDEX_SIZE + EXT_CHAP_BLOCK_SIZE), SEEK_END);
internal_chapter_read(&zmv_vars.internal_chapters, zmv_vars.fp, zmv_vars.header.internal_chapters); internal_chapter_read(&zmv_vars.internal_chapters, zmv_vars.fp, zmv_vars.header.internal_chapters);
for (i = 0; i < zmv_open_vars.external_chapter_count; i++) for (i = 0; i < zmv_open_vars.external_chapter_count; i++)
{ {
//Seek to 4 bytes before end of chapter, since last 4 bytes is where it contains offset value
fseek(zmv_vars.fp, EXT_CHAP_SIZE-4, SEEK_CUR); fseek(zmv_vars.fp, EXT_CHAP_SIZE-4, SEEK_CUR);
internal_chapter_add_offset(&zmv_open_vars.external_chapters, fread4(zmv_vars.fp)); internal_chapter_add_offset(&zmv_open_vars.external_chapters, fread4(zmv_vars.fp));
} }
@@ -792,11 +796,7 @@ static bool zmv_next_chapter()
} }
else else
{ {
size_t ext_chapter_loc = zmv_open_vars.external_chapter_count; size_t ext_chapter_loc = EXT_CHAP_BLOCK_SIZE - internal_chapter_pos(&zmv_open_vars.external_chapters, next)*EXT_CHAP_SIZE;
ext_chapter_loc -= internal_chapter_pos(&zmv_open_vars.external_chapters, next);
ext_chapter_loc *= EXT_CHAP_SIZE;
ext_chapter_loc += 2;
fseek(zmv_vars.fp, -(ext_chapter_loc), SEEK_END); fseek(zmv_vars.fp, -(ext_chapter_loc), SEEK_END);
zst_load(zmv_vars.fp); zst_load(zmv_vars.fp);
zmv_open_vars.frames_replayed = fread4(zmv_vars.fp); zmv_open_vars.frames_replayed = fread4(zmv_vars.fp);
@@ -881,11 +881,7 @@ static void zmv_prev_chapter()
} }
else else
{ {
size_t ext_chapter_loc = zmv_open_vars.external_chapter_count; size_t ext_chapter_loc = EXT_CHAP_BLOCK_SIZE - internal_chapter_pos(&zmv_open_vars.external_chapters, prev)*EXT_CHAP_SIZE;
ext_chapter_loc -= internal_chapter_pos(&zmv_open_vars.external_chapters, prev);
ext_chapter_loc *= EXT_CHAP_SIZE;
ext_chapter_loc += 2;
fseek(zmv_vars.fp, -(ext_chapter_loc), SEEK_END); fseek(zmv_vars.fp, -(ext_chapter_loc), SEEK_END);
zst_load(zmv_vars.fp); zst_load(zmv_vars.fp);
zmv_open_vars.frames_replayed = fread4(zmv_vars.fp); zmv_open_vars.frames_replayed = fread4(zmv_vars.fp);