コード例 #1
0
ファイル: state.c プロジェクト: Aleyr/nesemu2
int state_load(memfile_t *file)
{
	stateheader_t header;
	block_t *block;
	u32 size = 0;
	int i;

	readvar(header.ident,4);
	readvar(header.version,2);
	readvar(header.flags,2);
	readvar(header.usize,4);
	readvar(header.csize,4);
	readvar(header.crc32,4);
	log_printf("state_load:  state header loaded.  version %04X\n",header.version);

	while(memfile_eof(file) == 0 && size < header.usize) {
		if((block = block_load(file)) == 0)
			break;
		size += 8 + block->size;
		log_printf("state_load:  loaded block '%4s' (%08X) (%d bytes)\n",&block->type,block->type,block->size);
		for(i=0;blockinfo[i].type;i++) {
			if(blockinfo[i].type == block->type) {
				blockinfo[i].func(STATE_LOAD,block->data);
				break;
			}
		}
		if(blockinfo[i].type == 0) {
			log_printf("state_load:  no handler for block type '%4s' (%d bytes)\n",&block->type,block->size);
		}
		block_destroy(block);
	}

	return(0);
}
コード例 #2
0
int memfile_getc(memfile_t *mf)
{
	int ret;

	if(memfile_eof(mf) != 0) {
		log_printf("memfile_getc:  cannot read past eof\n");
		return(-1);
	}
	ret = (int)mf->data[mf->curpos];
	mf->curpos++;
	return(ret);
}
コード例 #3
0
u32 memfile_read(void *data,int chunksize,int chunks,memfile_t *mf)
{
	int size = chunksize * chunks;

	if(memfile_eof(mf) != 0) {
		log_printf("memfile_read:  cannot read past eof\n");
		return(0);
	}
	memcpy(data,mf->data + mf->curpos,size);
	mf->curpos += size;
	return(chunks);
}
コード例 #4
0
char *memfile_gets(char *str,int n,memfile_t *mf)
{
	int ch;
	char *p = str;

	memset(str,0,n);
	if(memfile_eof(mf) != 0) {
		log_printf("memfile_gets:  cannot read past eof\n");
		return(0);
	}
	for(;;) {
		ch = memfile_getc(mf);
		if(ch == -1) {
			if(p == str)
				return(0);
			return(str);
		}
		*p++ = (char)ch;
		if(--n == 0 || ch == '\n' || ch == 0)
			break;
	}
	return(str);
}