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