void ABLi_loadEnvironment(ABLFile* ablFile, bool malloc) { int32_t numLibs = ablFile->readLong(); int32_t numModsRegistered = ablFile->readLong(); int32_t numMods = ablFile->readLong(); int32_t i; for(i = 0; i < numLibs; i++) { uint8_t fileName[1024]; int32_t result = ablFile->readString(fileName); if(!result) { char err[255]; sprintf(err, "ABLi_loadEnvironment: Unable to read filename [Module %d]", i); ABL_Fatal(0, err); } if(malloc) { int32_t numErrors, numLinesProcessed; ABLModulePtr library = ABLi_loadLibrary((PSTR)fileName, &numErrors, &numLinesProcessed, nullptr, false, false); if(!library) { char err[255]; sprintf(err, "ABLi_loadEnvironment: Unable to load library [Module %d]", i); ABL_Fatal(0, err); } } } for(i = 0; i < (numModsRegistered - numLibs); i++) { uint8_t fileName[1024]; int32_t result = ablFile->readString(fileName); if(!result) { char err[255]; sprintf(err, "ABLi_loadEnvironment: Unable to read filename [Module %d]", i); ABL_Fatal(0, err); } int32_t numErrors, numLinesProcessed; if(malloc) { int32_t handle = ABLi_preProcess((PSTR)fileName, &numErrors, &numLinesProcessed); if(handle < 0) { char err[255]; sprintf(err, "ABLi_loadEnvironment: Unable to preprocess [Module %d]", i); ABL_Fatal(0, err); } } } //int32_t mark = ablFile->readLong(); for(i = 0; i < eternalOffset; i++) { StackItemPtr dataPtr = (StackItemPtr)stack + i; if(EternalVariablesSizes[i] > 0) ablFile->read((puint8_t)dataPtr->address, EternalVariablesSizes[i]); else ablFile->read((puint8_t)dataPtr, sizeof(StackItem)); } for(i = 0; i < numLibs; i++) { ABLModulePtr library = LibraryInstanceRegistry[i]; library->read(ablFile); } for(i = 0; i < (numMods - numLibs); i++) { ABLModulePtr module = nullptr; if(malloc) module = new ABLModule; else module = ModuleInstanceRegistry[numLibs + i]; module->read(ablFile); } }