Ares
Functions

Includes.cpp File Reference

#include "../Ares.h"
#include "Includes.h"

Functions

 DEFINE_HOOK (474200, CCINIClass_ReadCCFile1, 6)
 DEFINE_HOOK (474314, CCINIClass_ReadCCFile2, 6)

Function Documentation

DEFINE_HOOK ( 474200  ,
CCINIClass_ReadCCFile1  ,
 
)
{
        GET(CCINIClass *, pINI, ECX);
        GET(CCFileClass *, pFile, EAX);

        const char * filename = pFile->GetFileName();

        Includes::LoadedINIs.AddItem(pINI);
        Includes::LoadedINIFiles.AddItem(_strdup(filename));
        return 0;
}
DEFINE_HOOK ( 474314  ,
CCINIClass_ReadCCFile2  ,
 
)
{
        char buffer[0x80];
        CCINIClass *xINI = Includes::LoadedINIs[Includes::LoadedINIs.Count - 1];

        if(!xINI) {
                return 0;
        }

        char section[] = "#include";

        int len = xINI->GetKeyCount(section);
        for(int i = Includes::LastReadIndex; i < len; i = Includes::LastReadIndex) {
                const char *key = xINI->GetKeyName(section, i);
                ++Includes::LastReadIndex;
                if(xINI->ReadString(section, key, "", buffer, 0x80)) {
                        bool canLoad = 1;
                        for(int j = 0; j < Includes::LoadedINIFiles.Count; ++j ) {
                                if(!strcmp(Includes::LoadedINIFiles[j], buffer)) {
                                        canLoad = 0;
                                        break;
                                }
                        }

                        if(canLoad) {
                                CCFileClass *xFile;
                                GAME_ALLOC(CCFileClass, xFile, buffer);
                                if(xFile->Exists(NULL)) {
                                        xINI->ReadCCFile(xFile);
                                }
                                GAME_DEALLOC(xFile);
                        }
                }
        }

        Includes::LoadedINIs.RemoveItem(Includes::LoadedINIs.Count - 1);
        if(!Includes::LoadedINIs.Count) {
                for(int j = Includes::LoadedINIs.Count - 1; j > 0; --j) {
                        Includes::LoadedINIs.RemoveItem(j);
                }
                for(int j = Includes::LoadedINIFiles.Count - 1; j > 0; --j) {
                        free(Includes::LoadedINIFiles[j]);
                        Includes::LoadedINIFiles.RemoveItem(j);
                }
                Includes::LastReadIndex = -1;
                return 0;
        }
        return 0;
}
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines