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