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