]> jfr.im git - irc/gameservirc.git/blame - gameserv/news.cpp
*** empty log message ***
[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{
466692a5 79 ofstream outfile;
80 outfile.open(filename);
81 if (outfile.fail())
82 {
83 log("Error opening %s", filename);
84 return;
85 }
86
9bcbf9a9 87 outfile << "";
88
466692a5 89 ListNode<myString> *it;
90 it = news.First();
91 while (it)
92 {
93 outfile << it->getData()->getString() << endl;
94 it = it->Next();
95 }
96 outfile.close();
97}
98
99void loadNews(char *filename, List<myString> &news)
100{
466692a5 101 // First clear the old news out
102 ListNode<myString> *it, *temp;
103 it = news.First();
104
105 while (it)
106 {
107 temp = it;
108 it = it->Next();
109 delete temp;
110 }
111
112 // Now load from the file
113 ifstream infile;
114 infile.open(filename);
115 if (infile.fail())
116 {
117 log("Error opening %s", filename);
118 return;
119 }
120
121 char *buf;
122 myString *string;
123 buf = new char [1024];
124
125 while (infile.getline(buf, 1024, '\n'))
126 {
127 string = new myString(buf);
128 news.insertAtBack(string);
129 delete string;
130 }
131
132 delete [] buf;
133}
5aa1d28d 134
135void do_news(char *u)
136{
137 showNews(u, todaysnews);
138}