Example #1
0
static int gsynth_read_module(FILE *fp)
{
	ModuleInfo *mi;
	Module *mod = NULL;
	char basename[32];
	char modulename[32];

	int module_id;
	fread(&module_id, 4, 1, fp); module_id = ntohl(module_id);
	fread(basename, 32, 1, fp);
	fread(modulename, 32, 1, fp);

	if(module_id) {
		mi = locate_module(basename);
		if(mi) mod = gsynth_editor->CreateModule(mi);
		if(mod) mod->GetSModule()->set_id(module_id);
	}
	else mod = gsynth_editor->GetMaster();
	if(!mod) {
		fprintf(stderr, "Can't load module \"%s\".  Aborting load.\n", basename);
		return 0;
	}
	int x, y;
	fread(&x, 4, 1, fp); x = ntohl(x);
	fread(&y, 4, 1, fp); y = ntohl(y);
	mod->Move((float)x/GSYNTH_FLOAT_SCALE, (float)y/GSYNTH_FLOAT_SCALE);
	mod->SetName(modulename);
	
	int num_patterns;
	fread(&num_patterns, 4, 1, fp); num_patterns = ntohl(num_patterns);
	for(;num_patterns;num_patterns--)
		gsynth_read_pattern(fp, mod->GetSModule());
	
	int num_entries;
	fread(&num_entries, 4, 1, fp); num_entries = ntohl(num_entries);
	for(;num_entries;num_entries--) {
		int row, patID;
		gsynth_Pattern *p;
		fread(&row, 4, 1, fp); row = ntohl(row);
		fread(&patID, 4, 1, fp); patID = ntohl(patID);
		p = locate_pattern(patID, mod->GetSModule());
		mod->GetSModule()->sequence.SetEntry(p, row);
	}

	return 1;
}