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