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; }