mirror of
https://github.com/alliedmodders/amxmodx.git
synced 2024-12-27 23:35:36 +03:00
143 lines
3.0 KiB
C++
143 lines
3.0 KiB
C++
|
#include "sdk/amxxmodule.h"
|
||
|
#include "ns.h"
|
||
|
#include "TitleManager.h"
|
||
|
|
||
|
|
||
|
|
||
|
void TitleManager::LoadTitles(void)
|
||
|
{
|
||
|
if (m_Loaded!=0) // already loaded?
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
m_Loaded=1;
|
||
|
|
||
|
char FileName[128];
|
||
|
|
||
|
snprintf(FileName,127,"%s/titles.txt",MF_GetModname());
|
||
|
|
||
|
FILE *fp=fopen(FileName,"r");
|
||
|
|
||
|
if (!fp)
|
||
|
{
|
||
|
MF_Log("Unable to load \"%s\": TitleManager will not work!",FileName);
|
||
|
return;
|
||
|
};
|
||
|
|
||
|
//MF_Log("TitleManager Loading titles from \"%s\"",FileName);
|
||
|
char KeyName[512]; // last known good keyname
|
||
|
char Data[2048]; // data for the key
|
||
|
// does not support multi line data, but for
|
||
|
// location namesthat is acceptable.
|
||
|
char TempBuffer[2048]; // currently read data
|
||
|
char *TempPointer;
|
||
|
char *TempPointerEnd;
|
||
|
|
||
|
unsigned int Line=0;
|
||
|
scan_for_key:
|
||
|
KeyName[0]='\0';
|
||
|
|
||
|
while (!feof(fp))
|
||
|
{
|
||
|
Line++;
|
||
|
fgets(TempBuffer,2047,fp);
|
||
|
TempPointer=&TempBuffer[0];
|
||
|
|
||
|
// get rid of white space at the front
|
||
|
while (*TempPointer=='\0' || // terminator
|
||
|
*TempPointer==' ' || // space
|
||
|
*TempPointer=='\t') // tab
|
||
|
{
|
||
|
++TempPointer;
|
||
|
}
|
||
|
if (*TempPointer=='\0' || // terminator
|
||
|
*TempPointer=='/') // comment
|
||
|
{
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
// get rid of \r\n at the end
|
||
|
TempPointerEnd=TempPointer+strlen(TempPointer)-1;
|
||
|
while (*TempPointerEnd=='\r' ||
|
||
|
*TempPointerEnd=='\n' ||
|
||
|
*TempPointerEnd=='\t' ||
|
||
|
*TempPointerEnd==' ')
|
||
|
{
|
||
|
*TempPointerEnd--='\0';
|
||
|
}
|
||
|
|
||
|
if (*TempPointer=='{') // start of data
|
||
|
{
|
||
|
if (KeyName[0]!='\0') // do we have a keyname
|
||
|
{
|
||
|
goto scan_for_data;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
MF_Log("TitleManager: titles.txt line %u: began a data section with no key name in use!",Line);
|
||
|
goto scan_for_key;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// have a valid key name here
|
||
|
strncpy(KeyName,TempBuffer,sizeof(KeyName)-1);
|
||
|
|
||
|
// keep looping (until we hit a '{')
|
||
|
};
|
||
|
|
||
|
// if we're out here then !feof() failed
|
||
|
goto end_of_file;
|
||
|
scan_for_data:
|
||
|
Data[0]='\0';
|
||
|
|
||
|
while (!feof(fp))
|
||
|
{
|
||
|
Line++;
|
||
|
fgets(TempBuffer,2047,fp);
|
||
|
TempPointer=&TempBuffer[0];
|
||
|
|
||
|
// get rid of white space at the front
|
||
|
while (*TempPointer=='\0' || // terminator
|
||
|
*TempPointer==' ' || // space
|
||
|
*TempPointer=='\t') // tab
|
||
|
{
|
||
|
++TempPointer;
|
||
|
}
|
||
|
if (*TempPointer=='\0' || // terminator
|
||
|
*TempPointer=='/') // comment
|
||
|
{
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
// get rid of trailing whitespace
|
||
|
TempPointerEnd=TempPointer+strlen(TempPointer)-1;
|
||
|
while (*TempPointerEnd=='\r' ||
|
||
|
*TempPointerEnd=='\n' ||
|
||
|
*TempPointerEnd=='\t' ||
|
||
|
*TempPointerEnd==' ')
|
||
|
{
|
||
|
*TempPointerEnd--='\0';
|
||
|
}
|
||
|
|
||
|
if (*TempPointer=='}') // end of data
|
||
|
{
|
||
|
// insert KeyName & Data into the hash
|
||
|
String key(KeyName);
|
||
|
|
||
|
key.toLower();
|
||
|
this->m_Hash.insert(key, new String(Data));
|
||
|
|
||
|
goto scan_for_key;
|
||
|
}
|
||
|
|
||
|
// have valid data here
|
||
|
strncpy(Data,TempBuffer,sizeof(Data)-1);
|
||
|
};
|
||
|
end_of_file:
|
||
|
|
||
|
fclose(fp);
|
||
|
|
||
|
//MF_Log("TitleManager loaded %u entries from titles.txt (%u lines parsed)",m_List.size(),Line);
|
||
|
};
|