X-Git-Url: https://jfr.im/git/irc/gameservirc.git/blobdiff_plain/821ea0a0d0af9a664faaa7ea119dd490d8c2e78e..f71a53ab6e251712c26a11c0b373d41014f775d5:/gameserv/news.cpp?ds=sidebyside diff --git a/gameserv/news.cpp b/gameserv/news.cpp index 3aff621..9b7c988 100644 --- a/gameserv/news.cpp +++ b/gameserv/news.cpp @@ -1,143 +1,137 @@ #include "extern.h" +#include +#include #include +#include #include using std::ofstream; using std::ifstream; -List todaysnews; -void addNews(List &news, const char *fmt, ...); -void clearNews(List &news) {news.deleteNodes();}; -void showNews(char *nick, List &news); -void saveNews(char *filename, List &news); -void loadNews(char *filename, List &news); +using namespace std; -void addNews(List &news, const char *fmt, ...) -{ - if (fmt[0] == '\0') - return; - - va_list args; - char *input; - input = new char[1024]; - memset(input, 0, 1024); - const char *t = fmt; +list todaysnews; +void addNews(list &news, const char *fmt, ...); +void clearNews(list &news) {news.clear();}; +void showNews(char *nick, list &news); +void saveNews(char *filename, list &news); +void loadNews(char *filename, list &news); - va_start(args, fmt); - - for (; *t; t++) +void addNews(list &news, const char *fmt, ...) +{ + if (fmt[0] == '\0') + return; + + va_list args; + char *input; + input = new char[1024]; + memset(input, 0, 1024); + const char *t = fmt; + + va_start(args, fmt); + + for (; *t; t++) { - if (*t == '%') + if (*t == '%') { - switch(*++t) { - case 'd': sprintf(input, "%s%d", input, va_arg(args, int)); break; - case 's': sprintf(input, "%s%s", input, va_arg(args, char *)); break; - case 'S': sprintf(input, "%s%s", input, s_GameServ); break; - case 'l': - if (*++t == 'd') - sprintf(input, "%s%ld", input, va_arg(args, long int)); break; - } + switch(*++t) { + case 'd': sprintf(input, "%s%d", input, va_arg(args, int)); break; + case 's': sprintf(input, "%s%s", input, va_arg(args, char *)); break; + case 'S': sprintf(input, "%s%s", input, s_GameServ); break; + case 'l': + if (*++t == 'd') + sprintf(input, "%s%ld", input, va_arg(args, long int)); break; + } } - else + else { - sprintf(input, "%s%c", input, *t); + sprintf(input, "%s%c", input, *t); } - + } - #ifdef DEBUGMODE - log("New News Item: %s", input); - #endif - - myString *nstring; - nstring = new myString(input); - news.insertAtBack(nstring); - - delete [] input; - delete nstring; - -va_end(args); +#ifdef DEBUGMODE + log("New News Item: %s", input); +#endif + + notice(s_GameServ, c_Forest, "News Flash: %s", input); + string *nstring; + nstring = new string(input); + news.push_back(*nstring); + + delete [] input; + delete nstring; + + va_end(args); } -void showNews(char *nick, List &news) +void showNews(char *nick, list &news) { - if (!news.isEmpty()) + if (!news.empty()) { - ListNode *it; - it = news.First(); - - notice(s_GameServ, nick, "The Daily Happenings: "); - while (it) - { - notice(s_GameServ, nick, "%s", it->getData()->getString()); - it = it->Next(); - } - notice(s_GameServ, nick, "End of News"); + list::iterator iter; + + notice(s_GameServ, nick, "The Daily Happenings: "); + for (iter=news.begin(); iter != news.end(); iter++) + { + notice(s_GameServ, nick, "%s", (*iter).c_str()); + } + notice(s_GameServ, nick, "End of News"); } } -void saveNews(char *filename, List &news) +void saveNews(char *filename, list &news) { - ofstream outfile; - outfile.open(filename); - - if (outfile.fail()) + ofstream outfile; + outfile.open(filename); + + if (outfile.fail()) { - log("Error opening %s", filename); - return; + log("Error opening %s", filename); + return; } - - ListNode *it; - it = news.First(); - while (it) - { - outfile << it->getData()->getString() << endl; - it = it->Next(); + + list::iterator iter; + for (iter=news.begin(); iter != news.end(); iter++) + { + outfile << (*iter).c_str() << endl; } - outfile.close(); + outfile.close(); } -void loadNews(char *filename, List &news) +void loadNews(char *filename, list &news) { - // First clear the old news out - ListNode *it, *temp; - it = news.First(); - - while (it) - { - temp = it; - it = it->Next(); - delete temp; - } - - // Now load from the file - ifstream infile; - infile.open(filename); - if (infile.fail()) - { - log("Error opening %s", filename); - return; - } - - char *buf; - myString *string; - buf = new char [1024]; - - while (infile.getline(buf, 1024, '\n')) - { - if (buf[0] == '\0' || buf[0] == '\n') + // First clear the old news out + news.clear(); + + // Now load from the file + ifstream infile; + infile.open(filename); + if (infile.fail()) { - delete [] buf; - return; + log("Error opening %s", filename); + return; } - string = new myString(buf); - news.insertAtBack(string); - delete string; - } - - delete [] buf; + + char *buf; + string *str; + buf = new char [1024]; + + while (infile.getline(buf, 1024, '\n')) + { + if (buf[0] == '\0' || buf[0] == '\n') + { + delete [] buf; + return; + } + str = new string(buf); + news.push_back(*str); + delete str; + } + + delete [] buf; } void do_news(char *u) { - showNews(u, todaysnews); + showNews(u, todaysnews); }