]> jfr.im git - irc/gameservirc.git/blame - gameserv/news.cpp
Added code for the start of the DataLayer format as well as a basic FilePlayerDAO...
[irc/gameservirc.git] / gameserv / news.cpp
CommitLineData
c260a8d7 1#include "extern.h"
c10b78ac 2#include <list>
3#include <iterator>
466692a5 4#include <fstream>
16ee6441 5#include <string>
821ea0a0 6#include <stdio.h>
466692a5 7
16ee6441 8using namespace std;
c260a8d7 9
c10b78ac 10list<string> todaysnews;
11void addNews(list<string> &news, const char *fmt, ...);
12void clearNews(list<string> &news) {news.clear();};
13void showNews(char *nick, list<string> &news);
14void saveNews(char *filename, list<string> &news);
15void loadNews(char *filename, list<string> &news);
16ee6441 16
c10b78ac 17void addNews(list<string> &news, const char *fmt, ...)
c260a8d7 18{
5de7a0b0 19 if (fmt[0] == '\0')
20 return;
21
22 va_list args;
23 char *input;
24 input = new char[1024];
25 memset(input, 0, 1024);
26 const char *t = fmt;
27
28 va_start(args, fmt);
29
30 for (; *t; t++)
c260a8d7 31 {
5de7a0b0 32 if (*t == '%')
c260a8d7 33 {
5de7a0b0 34 switch(*++t) {
35 case 'd': sprintf(input, "%s%d", input, va_arg(args, int)); break;
36 case 's': sprintf(input, "%s%s", input, va_arg(args, char *)); break;
37 case 'S': sprintf(input, "%s%s", input, s_GameServ); break;
38 case 'l':
39 if (*++t == 'd')
40 sprintf(input, "%s%ld", input, va_arg(args, long int)); break;
41 }
c260a8d7 42 }
5de7a0b0 43 else
c260a8d7 44 {
5de7a0b0 45 sprintf(input, "%s%c", input, *t);
c260a8d7 46 }
5de7a0b0 47
c260a8d7 48 }
5de7a0b0 49#ifdef DEBUGMODE
50 log("New News Item: %s", input);
51#endif
52
53 notice(s_GameServ, c_Forest, "News Flash: %s", input);
54 string *nstring;
55 nstring = new string(input);
56 news.push_back(*nstring);
57
58 delete [] input;
59 delete nstring;
60
61 va_end(args);
c260a8d7 62}
63
c10b78ac 64void showNews(char *nick, list<string> &news)
c260a8d7 65{
c10b78ac 66 if (!news.empty())
c260a8d7 67 {
c10b78ac 68 list<string>::iterator iter;
69
70 notice(s_GameServ, nick, "The Daily Happenings: ");
71 for (iter=news.begin(); iter != news.end(); iter++)
72 {
73 notice(s_GameServ, nick, "%s", (*iter).c_str());
74 }
75 notice(s_GameServ, nick, "End of News");
c260a8d7 76 }
77}
466692a5 78
c10b78ac 79void saveNews(char *filename, list<string> &news)
466692a5 80{
c10b78ac 81 ofstream outfile;
82 outfile.open(filename);
83
84 if (outfile.fail())
466692a5 85 {
c10b78ac 86 log("Error opening %s", filename);
87 return;
466692a5 88 }
c10b78ac 89
90 list<string>::iterator iter;
91 for (iter=news.begin(); iter != news.end(); iter++)
92 {
93 outfile << (*iter).c_str() << endl;
466692a5 94 }
c10b78ac 95 outfile.close();
466692a5 96}
97
c10b78ac 98void loadNews(char *filename, list<string> &news)
466692a5 99{
5de7a0b0 100 // First clear the old news out
101 news.clear();
102
103 // Now load from the file
104 ifstream infile;
105 infile.open(filename);
106 if (infile.fail())
107 {
108 log("Error opening %s", filename);
109 return;
110 }
111
112 char *buf;
113 string *str;
114 buf = new char [1024];
115
116 while (infile.getline(buf, 1024, '\n'))
117 {
118 if (buf[0] == '\0' || buf[0] == '\n')
119 {
120 delete [] buf;
121 return;
122 }
123 str = new string(buf);
124 news.push_back(*str);
125 delete str;
126 }
127
128 delete [] buf;
466692a5 129}
5aa1d28d 130
131void do_news(char *u)
132{
5de7a0b0 133 showNews(u, todaysnews);
5aa1d28d 134}