2013-09-19 13:06:46 +07:00

72 lines
1.2 KiB
C++

#include <stdio.h>
#include <malloc>
#include <map>
#include "amx.h"
class LogFile;
static std::map<AMX*, LogFile*> lookup;
class LogFile {
public:
LogFile()
{
f = tmpfile();
}
~LogFile()
{
fclose(f);
}
private:
write(AMX* amx, cell params[])
{
int r = 0;
char *pstr;
amx_StrParam(amx, params[1], pstr);
if (pstr != NULL)
r = fprintf(f, "%s", pstr);
return r;
}
FILE *f;
public:
static cell n_write(AMX* amx, cell params[])
{
std::map<AMX*, LogFile*>::iterator p = lookup.find(amx);
if (p != lookup.end())
return p->second->write(amx, params);
return 0;
}
};
extern "C"
int amx_LogFileInit(AMX* amx)
{
LogFile* lf = new LogFile;
if (lf) {
lookup.insert(std::make_pair(amx, lf));
static AMX_NATIVE_INFO nativelist[] = {
{ "write", LogFile::n_write },
{ 0, 0 } /* terminator */
};
return amx_Register(amx, nativelist, -1);
} /* if */
return AMX_ERR_MEMORY;
}
extern "C"
int amx_LogFileExit(AMX* amx)
{
std::map<AMX*, LogFile*>::iterator p = lookup.find(amx);
if (p != lookup.end()) {
delete p->second;
lookup.erase(p);
} /* if */
return AMX_ERR_NONE;
}