Merge of rewritten NS module into trunk
This commit is contained in:
142
dlls/ns/TitleManager.cpp
Normal file
142
dlls/ns/TitleManager.cpp
Normal file
@@ -0,0 +1,142 @@
|
||||
#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);
|
||||
};
|
||||
Reference in New Issue
Block a user