]> jfr.im git - irc/gameservirc.git/blob - gameserv/log.cpp
Cleaned up the aClient.cpp code
[irc/gameservirc.git] / gameserv / log.cpp
1 #include "extern.h"
2 #include <cctype>
3 #include <stdio.h>
4 #include <fstream>
5 #include <iostream>
6
7 using namespace std;
8
9 void log(const char *fmt, ...)
10 {
11 if (fmt[0] == '\0')
12 return;
13
14 ofstream outfile;
15 char *ts, *output;
16 const char *t = fmt;
17
18 ts = new char[64];
19 output = new char[4096];
20
21 outfile.open("gameserv.log", ios::out | ios::app);
22
23 if (outfile.fail())
24 {
25 delete []ts;
26 delete []output;
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 }