1 // Copyright (C) 1999-2000 Id Software, Inc.
2 //
3 
4 //===========================================================================
5 //
6 // Name:         l_log.c
7 // Function:     log file
8 // Programmer:   Mr Elusive
9 // Last update:  1997-12-16
10 // Tab Size:     3
11 //===========================================================================
12 
13 #include <stdlib.h>
14 #include <stdio.h>
15 #include <string.h>
16 
17 #include "qcc.h"
18 
19 int verbose = true;
20 
21 #define MAX_LOGFILENAMESIZE		1024
22 
23 typedef struct logfile_s
24 {
25 	char filename[MAX_LOGFILENAMESIZE];
26 	FILE *fp;
27 	int numwrites;
28 } logfile_t;
29 
30 logfile_t logfile;
31 
32 /*
33 =================
34 Log_Open
35 =================
36 */
Log_Open(char * filename)37 void Log_Open(char *filename)
38 {
39 	if (!filename || !strlen(filename))
40 	{
41 		printf("openlog <filename>\n");
42 		return;
43 	} //end if
44 	if (logfile.fp)
45 	{
46 		printf("log file %s is already opened\n", logfile.filename);
47 		return;
48 	} //end if
49 	logfile.fp = fopen(filename, "wb");
50 	if (!logfile.fp)
51 	{
52 		printf("can't open the log file %s\n", filename);
53 		return;
54 	} //end if
55 	strncpy(logfile.filename, filename, MAX_LOGFILENAMESIZE);
56 	printf("Opened log %s\n", logfile.filename);
57 } //end of the function Log_Create
58 
59 /*
60 =================
61 Loc_Close
62 =================
63 */
Log_Close(void)64 void Log_Close(void)
65 {
66 	if (!logfile.fp)
67 	{
68 		printf("no log file to close\n");
69 		return;
70 	} //end if
71 	if (fclose(logfile.fp))
72 	{
73 		printf("can't close log file %s\n", logfile.filename);
74 		return;
75 	} //end if
76 	logfile.fp = NULL;
77 	printf("Closed log %s\n", logfile.filename);
78 } //end of the function Log_Close
79 
80 /*
81 =================
82 Log_Shutdown
83 =================
84 */
Log_Shutdown(void)85 void Log_Shutdown(void)
86 {
87 	if (logfile.fp) Log_Close();
88 } //end of the function Log_Shutdown
89 
90 /*
91 =================
92 Log_Print
93 =================
94 */
Log_Print(char * fmt,...)95 void Log_Print(char *fmt, ...)
96 {
97 	va_list ap;
98 
99 	if (verbose)
100 	{
101 		va_start(ap, fmt);
102 		vprintf(fmt, ap);
103 		va_end(ap);
104 	} //end if
105 
106 	va_start(ap, fmt);
107 	if (logfile.fp)
108 	{
109 		vfprintf(logfile.fp, fmt, ap);
110 		fflush(logfile.fp);
111 	} //end if
112 	va_end(ap);
113 } //end of the function Log_Print
114 
115 /*
116 =================
117 Log_Write
118 =================
119 */
Log_Write(char * fmt,...)120 void Log_Write(char *fmt, ...)
121 {
122 	va_list ap;
123 
124 	if (!logfile.fp) return;
125 	va_start(ap, fmt);
126 	vfprintf(logfile.fp, fmt, ap);
127 	va_end(ap);
128 	fflush(logfile.fp);
129 } //end of the function Log_Write
130 
131 /*
132 =================
133 Log_WriteTimeStamped
134 =================
135 */
Log_WriteTimeStamped(char * fmt,...)136 void Log_WriteTimeStamped(char *fmt, ...)
137 {
138 	va_list ap;
139 
140 	if (!logfile.fp) return;
141 /*	fprintf(logfile.fp, "%d   %02d:%02d:%02d:%02d   ",
142 					logfile.numwrites,
143 					(int) (botlibglobals.time / 60 / 60),
144 					(int) (botlibglobals.time / 60),
145 					(int) (botlibglobals.time),
146 					(int) ((int) (botlibglobals.time * 100)) -
147 							((int) botlibglobals.time) * 100);*/
148 	va_start(ap, fmt);
149 	vfprintf(logfile.fp, fmt, ap);
150 	va_end(ap);
151 	logfile.numwrites++;
152 	fflush(logfile.fp);
153 } //end of the function Log_Write
154 
155 /*
156 =================
157 Log_FileStruct
158 =================
159 */
Log_FileStruct(void)160 FILE *Log_FileStruct(void)
161 {
162 	return logfile.fp;
163 } //end of the function Log_FileStruct
164 
165 /*
166 =================
167 Log_Flush
168 =================
169 */
Log_Flush(void)170 void Log_Flush(void)
171 {
172 	if (logfile.fp) fflush(logfile.fp);
173 } //end of the function Log_Flush
174 
175