// // W_InitMultipleFiles // Pass a null terminated list of files to use. // All files are optional, but at least one file // must be found. // Files with a .wad extension are idlink files // with multiple lumps. // Other files are single lumps with the base filename // for the lump name. // Lump names can appear multiple times. // The name searcher looks backwards, so a later file // does override all earlier ones. // void W_InitMultipleFiles (char **filenames) { int size; // open all the files, load headers, and count lumps numlumps = 0; // will be realloced as lumps are added lumpinfo = malloc(1); for (; *filenames; filenames++) W_AddFile(*filenames); if (!numlumps) I_Error("W_InitFiles: no files found"); // merge the sprites and flats namespaces W_MergeLumps("S_START", "S_END"); W_MergeLumps("F_START", "F_END"); // set up caching size = numlumps * sizeof(*lumpcache); lumpcache = malloc(size); if (!lumpcache) I_Error("Couldn't allocate lumpcache"); memset(lumpcache, 0, size); W_InitLumpHash(); }
// // W_InitMultipleFiles // Pass a null terminated list of files to use. // All files are optional, but at least one file // must be found. // Files with a .wad extension are idlink files // with multiple lumps. // Other files are single lumps with the base filename // for the lump name. // Lump names can appear multiple times. // The name searcher looks backwards, so a later file // does override all earlier ones. // std::vector<std::string> W_InitMultipleFiles (std::vector<std::string> &filenames) { size_t size, i; // open all the files, load headers, and count lumps // will be realloced as lumps are added numlumps = 0; if(lumpinfo) { free(lumpinfo); lumpinfo = 0; } std::vector<std::string> hashes(filenames); // open each file once, load headers, and count lumps int j = 0; std::vector<std::string> loaded; for(i = 0; i < filenames.size(); i++) { if(std::find(loaded.begin(), loaded.end(), filenames[i].c_str()) == loaded.end()) { hashes[j++] = W_AddFile(filenames[i].c_str()); loaded.push_back(filenames[i].c_str()); } } filenames = loaded; hashes.resize(j); if (!numlumps) I_Error ("W_InitFiles: no files found"); // [RH] Set namespace markers to global for everything for (i = 0; i < numlumps; i++) lumpinfo[i].namespc = ns_global; // [RH] Merge sprite and flat groups. // (We don't need to bother with patches, since // Doom doesn't use markers to identify them.) W_MergeLumps ("S_START", "S_END", ns_sprites); // denis - fixme - security W_MergeLumps ("F_START", "F_END", ns_flats); W_MergeLumps ("C_START", "C_END", ns_colormaps); // set up caching if(lumpcache) free(lumpcache); size = numlumps * sizeof(*lumpcache); lumpcache = (void **)Malloc (size); if (!lumpcache) I_Error ("Couldn't allocate lumpcache"); memset (lumpcache,0, size); return hashes; }