]>
Commit | Line | Data |
---|---|---|
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 | 8 | using namespace std; |
c260a8d7 | 9 | |
c10b78ac | 10 | list<string> todaysnews; |
11 | void addNews(list<string> &news, const char *fmt, ...); | |
12 | void clearNews(list<string> &news) {news.clear();}; | |
13 | void showNews(char *nick, list<string> &news); | |
14 | void saveNews(char *filename, list<string> &news); | |
15 | void loadNews(char *filename, list<string> &news); | |
16ee6441 | 16 | |
c10b78ac | 17 | void 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 | 64 | void 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 | 79 | void 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 | 98 | void 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 | |
131 | void do_news(char *u) | |
132 | { | |
5de7a0b0 | 133 | showNews(u, todaysnews); |
5aa1d28d | 134 | } |