]> jfr.im git - irc/gameservirc.git/blob - gameserv/log.cpp
got tavern load and list working for the most part
[irc/gameservirc.git] / gameserv / log.cpp
1 #include "extern.h"
2 #include <cctype>
3 #include <stdio.h>
4 #include <fstream>
5
6 using std::endl;
7 using std::cerr;
8 using std::ofstream;
9 using std::ios;
10
11 void log(const char *fmt, ...)
12 {
13 if (fmt[0] == '\0')
14 return;
15
16 ofstream outfile;
17 char *ts, *output;
18 const char *t = fmt;
19
20 ts = new char[64];
21 output = new char[4096];
22
23 outfile.open("gameserv.log", ios::out | ios::app);
24
25 if (outfile.fail())
26 {
27 cerr << "Error opening gameserv.log" << endl;
28 return;
29 }
30
31 struct tm *tm;
32 time_t ti;
33 time(&ti);
34 tm = localtime(&ti);
35 strftime(ts, 64, "%m/%d/%Y %H:%M:%S", tm);
36
37 sprintf(output, "[%s]: ", ts);
38
39 va_list args;
40 va_start(args, fmt);
41
42 for (; *t; t++)
43 {
44 if (*t == '%')
45 {
46 switch(*++t) {
47 case 'd': sprintf(output, "%s%d", output, va_arg(args, int)); break;
48 case 's': sprintf(output, "%s%s", output, va_arg(args, char *)); break;
49 case 'S': sprintf(output, "%s%s", output, s_GameServ); break;
50 case 'c': sprintf(output, "%s%c", output, va_arg(args, int)); break;
51 case 'l':
52 if (*++t == 'd')
53 sprintf(output, "%s%ld", output, va_arg(args, long int)); break;
54 }
55 }
56 else
57 {
58 sprintf(output, "%s%c", output, *t);
59 }
60
61 }
62
63 outfile << output << endl;
64
65 outfile.close();
66 va_end(args);
67
68 delete [] ts;
69 delete [] output;
70 }