]> Shamusworld >> Repos - apple2/blob - apple2/src/log.cpp
98c6658d0835cab46464f7f3369ac7dcd2ee7395
[apple2] / apple2 / src / log.cpp
1 //\r
2 // Log handler\r
3 //\r
4 // by James L. Hammons\r
5 // (C) 2006 Underground Software\r
6 //\r
7 // JLH = James L. Hammons <jlhamm@acm.org>\r
8 //\r
9 // WHO  WHEN        WHAT\r
10 // ---  ----------  ------------------------------------------------------------\r
11 // JLH  01/03/2006  Moved includes out of header file for faster compilation\r
12 //\r
13 \r
14 #include "log.h"\r
15 \r
16 #include <stdio.h>\r
17 #include <stdlib.h>\r
18 #include <stdarg.h>\r
19 #include "types.h"\r
20 \r
21 #define MAX_LOG_SIZE            10000000                                // Maximum size of log file (10 MB)\r
22 \r
23 static FILE * log_stream = NULL;\r
24 static uint32 logSize = 0;\r
25 \r
26 bool InitLog(char * path)\r
27 {\r
28         log_stream = fopen(path, "wrt");\r
29 \r
30         if (log_stream == NULL)\r
31                 return false;\r
32 \r
33         return true;\r
34 }\r
35 \r
36 void LogDone(void)\r
37 {\r
38         if (log_stream)\r
39                 fclose(log_stream);\r
40 }\r
41 \r
42 //\r
43 // This logger is used mainly to ensure that text gets written to the log file\r
44 // even if the program crashes. The performance hit is acceptable in this case!\r
45 //\r
46 void WriteLog(const char * text, ...)\r
47 {\r
48         if (!log_stream)\r
49                 return;\r
50 \r
51         va_list arg;\r
52 \r
53         va_start(arg, text);\r
54         logSize += vfprintf(log_stream, text, arg);\r
55 \r
56         if (logSize > MAX_LOG_SIZE)\r
57         {\r
58                 fflush(log_stream);\r
59                 fclose(log_stream);\r
60                 exit(1);\r
61         }//*/\r
62 \r
63         va_end(arg);\r
64         fflush(log_stream);                                     // Make sure that text is written!\r
65 }\r