* Add link target to the Makefile.
[matthijs/ABM2.git] / ABM2 / Engine / Log.cpp
1 // Log.cpp: implementation of the CLog class.\r
2 //\r
3 //////////////////////////////////////////////////////////////////////\r
4 \r
5 #include <stdarg.h>\r
6 #include "engine.h"\r
7 #include "Log.h"\r
8 \r
9 //////////////////////////////////////////////////////////////////////\r
10 // Construction/Destruction\r
11 //////////////////////////////////////////////////////////////////////\r
12 \r
13 /*\r
14 CMMPointer< CSettingVariable<std::string> > CLog::appLogName=0;\r
15 CMMPointer< CSettingVariable<std::string> > CLog::clientLogName=0;\r
16 CMMPointer< CSettingVariable<std::string> > CLog::serverLogName=0;\r
17 */\r
18 \r
19 CLog::CLog()\r
20 {\r
21 \r
22 }\r
23 \r
24 CLog &CLog::Get()\r
25 {\r
26         static CLog log;\r
27         return log;\r
28 }\r
29 \r
30 bool CLog::Init()\r
31 {\r
32         appLog.open("applog.txt");\r
33         clientLog.open("clntlog.txt");\r
34         serverLog.open("srvrlog.txt");\r
35         //user errors get logged to client\r
36 \r
37         //load the strings file\r
38         if(!LoadStrings())return false;\r
39 \r
40         return true;\r
41 }\r
42 \r
43 void CLog::Write(int target, const char *msg, ...)\r
44 {\r
45         va_list args; va_start(args,msg);\r
46         char szBuf[1024];\r
47         vsprintf_s(szBuf,1024,msg,args);\r
48 \r
49         if(target&LOG_APP)\r
50         {\r
51                 appLog<<szBuf<<"\n";\r
52 #ifdef _DEBUG\r
53                 appLog.flush();\r
54 #endif\r
55         }\r
56         if(target&LOG_CLIENT)\r
57         {\r
58                 clientLog<<szBuf<<"\n";\r
59 #ifdef _DEBUG\r
60                 clientLog.flush();\r
61 #endif\r
62         }\r
63         if(target&LOG_SERVER)\r
64         {\r
65                 serverLog<<szBuf<<"\n";\r
66 #ifdef _DEBUG\r
67                 serverLog.flush();\r
68 #endif\r
69         }\r
70         if(target&LOG_USER)\r
71         {\r
72 #ifdef WIN32\r
73                 MessageBox(NULL,(LPCTSTR)szBuf,L"Message",MB_OK);\r
74 #else\r
75         std::cout << szBuf << "\n";\r
76 #endif\r
77         }\r
78         va_end(args);\r
79 }\r
80 \r
81 void CLog::Write(int target, unsigned long msgID, ...)\r
82 {\r
83         va_list args; va_start(args, msgID);\r
84         char szBuf[1024];\r
85         vsprintf_s(szBuf,1024,logStrings[msgID].c_str(),args);\r
86         Write(target,szBuf);\r
87         va_end(args);\r
88 }\r
89 /*\r
90 #ifdef WIN32\r
91 //under Win32, the strings get read in from a string table resource\r
92 bool CLog::LoadStrings()\r
93 {\r
94         for(unsigned long i=0;i<MAX_LOG_STRINGS;i++)\r
95         {\r
96                 char szBuf[1024];\r
97                 if(!LoadString(GetModuleHandle(L"engine"),i,(LPTSTR)szBuf,1024))break; //returning 0 means no more strings\r
98                 logStrings[i]=szBuf;\r
99         }\r
100         return true;\r
101 }\r
102 \r
103 #else\r
104 *///other platforms load the strings in from strings.txt\r
105 bool CLog::LoadStrings()\r
106 {\r
107         std::ifstream in("strings.txt");\r
108         if(!in.is_open())return false;\r
109 \r
110         unsigned long index=0;\r
111 \r
112         while(!in.eof())\r
113         {\r
114                 char szBuf[1024];\r
115                 in.getline(szBuf,1024);\r
116                 logStrings[index++]=szBuf;\r
117         }\r
118 \r
119         return true;\r
120 }\r
121 \r
122 //#endif\r