summaryrefslogtreecommitdiff
authorerik <erik>2007-01-24 19:57:51 (UTC)
committer erik <erik>2007-01-24 19:57:51 (UTC)
commit48d9219a96096cf44df8ac24413b36d1b718b1d5 (patch) (unidiff)
treeef49f0d2b778283221ebbb8634f1a59710ddd108
parent89e81059e832ff77c2f0ac8b9db12f80eafa03fc (diff)
downloadopie-48d9219a96096cf44df8ac24413b36d1b718b1d5.zip
opie-48d9219a96096cf44df8ac24413b36d1b718b1d5.tar.gz
opie-48d9219a96096cf44df8ac24413b36d1b718b1d5.tar.bz2
Each file in this commit has the issue where a function can return a
negative result but the result is used in a context that can only be positive.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/games/kpacman/score.cpp4
-rw-r--r--noncore/todayplugins/stockticker/libstocks/http.c95
2 files changed, 49 insertions, 50 deletions
diff --git a/noncore/games/kpacman/score.cpp b/noncore/games/kpacman/score.cpp
index 6878b81..737f03b 100644
--- a/noncore/games/kpacman/score.cpp
+++ b/noncore/games/kpacman/score.cpp
@@ -1,575 +1,575 @@
1 1
2#include "portable.h" 2#include "portable.h"
3 3
4#if defined( KDE2_PORT ) 4#if defined( KDE2_PORT )
5#include <score.h> 5#include <score.h>
6#include <score.moc> 6#include <score.moc>
7 7
8#include <kaccel.h> 8#include <kaccel.h>
9#include <kapp.h> 9#include <kapp.h>
10#include <kconfig.h> 10#include <kconfig.h>
11#include <kstddirs.h> 11#include <kstddirs.h>
12#include <kmessagebox.h> 12#include <kmessagebox.h>
13#elif defined( QPE_PORT ) 13#elif defined( QPE_PORT )
14#include <qaccel.h> 14#include <qaccel.h>
15#include <qpe/config.h> 15#include <qpe/config.h>
16#include "score.h" 16#include "score.h"
17#endif 17#endif
18 18
19#include <stdlib.h> 19#include <stdlib.h>
20#include <ctype.h> 20#include <ctype.h>
21 21
22#include <qtimer.h> 22#include <qtimer.h>
23 23
24 24
25Score::Score(QWidget *parent, const char *name, int Scheme, int Mode, Bitfont *font) : QWidget(parent, name) 25Score::Score(QWidget *parent, const char *name, int Scheme, int Mode, Bitfont *font) : QWidget(parent, name)
26{ 26{
27 setFocusPolicy(QWidget::StrongFocus); 27 setFocusPolicy(QWidget::StrongFocus);
28 28
29 paused = FALSE; 29 paused = FALSE;
30 30
31 lastScore = -1; 31 lastScore = -1;
32 lastPlayer = -1; 32 lastPlayer = -1;
33 33
34 cursorBlinkTimer = 0; 34 cursorBlinkTimer = 0;
35 cursorBlinkMS = -1; 35 cursorBlinkMS = -1;
36 cursor.x = -1; 36 cursor.x = -1;
37 cursor.y = -1; 37 cursor.y = -1;
38 cursor.on = FALSE; 38 cursor.on = FALSE;
39 cursor.chr = QChar('?'); 39 cursor.chr = QChar('?');
40 40
41 initKeys(); 41 initKeys();
42 42
43 scheme = Scheme; 43 scheme = Scheme;
44 mode = Mode; 44 mode = Mode;
45 confScheme(); 45 confScheme();
46 46
47 bitfont = font; 47 bitfont = font;
48 48
49 highscoreFile.setName(locateHighscoreFilePath().filePath()); 49 highscoreFile.setName(locateHighscoreFilePath().filePath());
50 read(); 50 read();
51 51
52 for (int p = 0; p < maxPlayer; p++) { 52 for (int p = 0; p < maxPlayer; p++) {
53 playerScore[p] = 0; 53 playerScore[p] = 0;
54 playerName[p] = getenv("LOGNAME"); 54 playerName[p] = getenv("LOGNAME");
55 if (playerName[p].length() < minPlayerNameLength) 55 if (playerName[p].length() < minPlayerNameLength)
56 playerName[p].setExpand(minPlayerNameLength-1, ' '); 56 playerName[p].setExpand(minPlayerNameLength-1, ' ');
57 57
58 for (uint i = 0; i < playerName[p].length(); i++) 58 for (uint i = 0; i < playerName[p].length(); i++)
59 if (playerName[p].at(i) < bitfont->firstChar() || 59 if (playerName[p].at(i) < bitfont->firstChar() ||
60 playerName[p].at(i) > bitfont->lastChar()) 60 playerName[p].at(i) > bitfont->lastChar())
61 playerName[p].at(i) = playerName[p].at(i).upper(); 61 playerName[p].at(i) = playerName[p].at(i).upper();
62 } 62 }
63} 63}
64 64
65Score::~Score() 65Score::~Score()
66{ 66{
67 // write(); 67 // write();
68} 68}
69 69
70void Score::paintEvent( QPaintEvent *e) 70void Score::paintEvent( QPaintEvent *e)
71{ 71{
72 if (rect(1, 0, tr(" 1UP ")).intersects(e->rect())) { 72 if (rect(1, 0, tr(" 1UP ")).intersects(e->rect())) {
73 QPixmap pix; 73 QPixmap pix;
74 QColor fg = BLACK; 74 QColor fg = BLACK;
75 if (cursor.on || paused || lastPlayer != 0) 75 if (cursor.on || paused || lastPlayer != 0)
76 fg = WHITE; 76 fg = WHITE;
77 pix = bitfont->text(tr(" 1UP "), fg, BLACK); 77 pix = bitfont->text(tr(" 1UP "), fg, BLACK);
78 bitBlt(this, x(1), y(0), &pix); 78 bitBlt(this, x(1), y(0), &pix);
79 } 79 }
80 80
81 if (rect(8, 0, tr(" HIGH SCORE ")).intersects(e->rect())) { 81 if (rect(8, 0, tr(" HIGH SCORE ")).intersects(e->rect())) {
82 QPixmap pix = bitfont->text(tr(" HIGH SCORE "), WHITE, BLACK); 82 QPixmap pix = bitfont->text(tr(" HIGH SCORE "), WHITE, BLACK);
83 bitBlt(this, x(8), y(0), &pix); 83 bitBlt(this, x(8), y(0), &pix);
84 } 84 }
85 85
86 if (maxPlayer > 1 && rect(21, 0, tr(" 2UP ")).intersects(e->rect())) { 86 if (maxPlayer > 1 && rect(21, 0, tr(" 2UP ")).intersects(e->rect())) {
87 QPixmap pix; 87 QPixmap pix;
88 QColor fg = BLACK; 88 QColor fg = BLACK;
89 if (cursor.on || paused || lastPlayer != 1) 89 if (cursor.on || paused || lastPlayer != 1)
90 fg = WHITE; 90 fg = WHITE;
91 pix = bitfont->text(tr(" 2UP "), fg, BLACK); 91 pix = bitfont->text(tr(" 2UP "), fg, BLACK);
92 bitBlt(this, x(21), y(0), &pix); 92 bitBlt(this, x(21), y(0), &pix);
93 } 93 }
94 94
95 QString s; 95 QString s;
96 96
97 s.sprintf("%6d0", playerScore[0]/10); 97 s.sprintf("%6d0", playerScore[0]/10);
98 if (rect(0, 1, s).intersects(e->rect())) { 98 if (rect(0, 1, s).intersects(e->rect())) {
99 QPixmap pix = bitfont->text(s, WHITE, BLACK); 99 QPixmap pix = bitfont->text(s, WHITE, BLACK);
100 bitBlt(this, x(0), y(1), &pix); 100 bitBlt(this, x(0), y(1), &pix);
101 } 101 }
102 102
103 s.sprintf("%8d0", HighScore/10); 103 s.sprintf("%8d0", HighScore/10);
104 if (rect(8, 1, s).intersects(e->rect())) { 104 if (rect(8, 1, s).intersects(e->rect())) {
105 QPixmap pix = bitfont->text(s, WHITE, BLACK); 105 QPixmap pix = bitfont->text(s, WHITE, BLACK);
106 bitBlt(this, x(8), y(1), &pix); 106 bitBlt(this, x(8), y(1), &pix);
107 } 107 }
108 108
109 if (lastScore >= 0) { 109 if (lastScore >= 0) {
110 if (rect(1, 4*1.25, tr(" CONGRATULATIONS ")).intersects(e->rect())) { 110 if (rect(1, 4*1.25, tr(" CONGRATULATIONS ")).intersects(e->rect())) {
111 QPixmap pix = bitfont->text(tr(" CONGRATULATIONS "), YELLOW, BLACK); 111 QPixmap pix = bitfont->text(tr(" CONGRATULATIONS "), YELLOW, BLACK);
112 bitBlt(this, x(1), y(4*1.25), &pix); 112 bitBlt(this, x(1), y(4*1.25), &pix);
113 } 113 }
114 if (rect(1, 6*1.25, tr(" YOU HAVE ARCHIEVED ")).intersects(e->rect())) { 114 if (rect(1, 6*1.25, tr(" YOU HAVE ARCHIEVED ")).intersects(e->rect())) {
115 QPixmap pix = bitfont->text(tr(" YOU HAVE ARCHIEVED "), CYAN, BLACK); 115 QPixmap pix = bitfont->text(tr(" YOU HAVE ARCHIEVED "), CYAN, BLACK);
116 bitBlt(this, x(1), y(6*1.25), &pix); 116 bitBlt(this, x(1), y(6*1.25), &pix);
117 } 117 }
118 if (rect(1, 7*1.25, tr(" A SCORE IN THE TOP 10. ")).intersects(e->rect())) { 118 if (rect(1, 7*1.25, tr(" A SCORE IN THE TOP 10. ")).intersects(e->rect())) {
119 QPixmap pix = bitfont->text(tr(" A SCORE IN THE TOP 10. "), CYAN, BLACK); 119 QPixmap pix = bitfont->text(tr(" A SCORE IN THE TOP 10. "), CYAN, BLACK);
120 bitBlt(this, x(1), y(7*1.25), &pix); 120 bitBlt(this, x(1), y(7*1.25), &pix);
121 } 121 }
122 if (rect(1, 8*1.25, tr(" ")).intersects(e->rect())) { 122 if (rect(1, 8*1.25, tr(" ")).intersects(e->rect())) {
123 QPixmap pix = bitfont->text(tr(" "), CYAN, BLACK); 123 QPixmap pix = bitfont->text(tr(" "), CYAN, BLACK);
124 bitBlt(this, x(1), y(8*1.25), &pix); 124 bitBlt(this, x(1), y(8*1.25), &pix);
125 } 125 }
126 } 126 }
127 127
128 if (rect(1, 9.5*1.25, tr("RNK SCORE NAME DATE")).intersects(e->rect())) { 128 if (rect(1, 9.5*1.25, tr("RNK SCORE NAME DATE")).intersects(e->rect())) {
129 QPixmap pix = bitfont->text(tr("RNK SCORE NAME DATE"), WHITE, BLACK); 129 QPixmap pix = bitfont->text(tr("RNK SCORE NAME DATE"), WHITE, BLACK);
130 bitBlt(this, x(1), y(9.5*1.25), &pix); 130 bitBlt(this, x(1), y(9.5*1.25), &pix);
131 } 131 }
132 132
133 for (int i = 0; i < 10; i++) { 133 for (int i = 0; i < 10; i++) {
134 s.sprintf("%2d%9d %-3.3s %-8.8s", 134 s.sprintf("%2d%9d %-3.3s %-8.8s",
135 i+1, hallOfFame[i].points, hallOfFame[i].name.utf8().data(), 135 i+1, hallOfFame[i].points, hallOfFame[i].name.utf8().data(),
136 formatDate(hallOfFame[i].moment.date()).data()); 136 formatDate(hallOfFame[i].moment.date()).data());
137 if (rect(1, (11+i)*1.25, s).intersects(e->rect())) { 137 if (rect(1, (11+i)*1.25, s).intersects(e->rect())) {
138 QPixmap pix = bitfont->text(s, (i == lastScore) ? YELLOW : WHITE, BLACK); 138 QPixmap pix = bitfont->text(s, (i == lastScore) ? YELLOW : WHITE, BLACK);
139 bitBlt(this, x(1), y((11+i)*1.25), &pix); 139 bitBlt(this, x(1), y((11+i)*1.25), &pix);
140 } 140 }
141 } 141 }
142 142
143 if (cursor.x != -1 && cursor.y != -1 && cursor.on) { 143 if (cursor.x != -1 && cursor.y != -1 && cursor.on) {
144 if (rect(cursor.x, (cursor.y*1.25), cursor.chr).intersects(e->rect())) { 144 if (rect(cursor.x, (cursor.y*1.25), cursor.chr).intersects(e->rect())) {
145 QPixmap pix = bitfont->text(cursor.chr, BLACK, YELLOW); 145 QPixmap pix = bitfont->text(cursor.chr, BLACK, YELLOW);
146 bitBlt(this, x(cursor.x), y(cursor.y*1.25), &pix); 146 bitBlt(this, x(cursor.x), y(cursor.y*1.25), &pix);
147 } 147 }
148 } 148 }
149 149
150 if (paused) { 150 if (paused) {
151 151
152 QPixmap pix = bitfont->text(tr("PAUSED"), RED, BLACK); 152 QPixmap pix = bitfont->text(tr("PAUSED"), RED, BLACK);
153 QRect r = bitfont->rect(tr("PAUSED")); 153 QRect r = bitfont->rect(tr("PAUSED"));
154 r.moveCenter(QPoint(this->width()/2, this->height()/2)); 154 r.moveCenter(QPoint(this->width()/2, this->height()/2));
155 155
156 bitBlt(this, r.x(), r.y(), &pix); 156 bitBlt(this, r.x(), r.y(), &pix);
157 } 157 }
158} 158}
159 159
160void Score::timerEvent(QTimerEvent*) 160void Score::timerEvent(QTimerEvent*)
161{ 161{
162 cursor.on = !cursor.on; 162 cursor.on = !cursor.on;
163 163
164 if (paused) 164 if (paused)
165 return; 165 return;
166 166
167 if (cursor.x != -1 && cursor.y != -1) 167 if (cursor.x != -1 && cursor.y != -1)
168 repaint(rect(cursor.x, cursor.y*1.25, cursor.chr), FALSE); 168 repaint(rect(cursor.x, cursor.y*1.25, cursor.chr), FALSE);
169 scrollRepeat = FALSE; 169 scrollRepeat = FALSE;
170 170
171 if (lastPlayer == 0) 171 if (lastPlayer == 0)
172 repaint(rect(1, 0, tr(" 1UP ")), FALSE); 172 repaint(rect(1, 0, tr(" 1UP ")), FALSE);
173 173
174 if (lastPlayer == 1) 174 if (lastPlayer == 1)
175 repaint(rect(21, 0, tr(" 2UP ")), FALSE); 175 repaint(rect(21, 0, tr(" 2UP ")), FALSE);
176} 176}
177 177
178void Score::keyPressEvent(QKeyEvent *k) 178void Score::keyPressEvent(QKeyEvent *k)
179{ 179{
180 if (lastScore < 0 || lastPlayer < 0 || lastPlayer >= maxPlayer || paused) { 180 if (lastScore < 0 || lastPlayer < 0 || lastPlayer >= maxPlayer || paused) {
181 k->ignore(); 181 k->ignore();
182 return; 182 return;
183 } 183 }
184 184
185 int x = cursor.x; 185 int x = cursor.x;
186 int y = cursor.y; 186 int y = cursor.y;
187 187
188 uint key = k->key(); 188 uint key = k->key();
189 189
190 if (scrollRepeat && (key == UpKey || key == Key_Up || key == DownKey || key == Key_Down)) { 190 if (scrollRepeat && (key == UpKey || key == Key_Up || key == DownKey || key == Key_Down)) {
191 k->ignore(); 191 k->ignore();
192 return; 192 return;
193 } 193 }
194 194
195 if (key != Key_Return) { 195 if (key != Key_Return) {
196 if (key == RightKey || key == Key_Right) 196 if (key == RightKey || key == Key_Right)
197 if (++cursor.x > 16) 197 if (++cursor.x > 16)
198 cursor.x = 14; 198 cursor.x = 14;
199 if (key == LeftKey || key == Key_Left) 199 if (key == LeftKey || key == Key_Left)
200 if (--cursor.x < 14) 200 if (--cursor.x < 14)
201 cursor.x = 16; 201 cursor.x = 16;
202 if (key == UpKey || key == Key_Up) 202 if (key == UpKey || key == Key_Up)
203 if (cursor.chr.unicode() < bitfont->lastChar()) 203 if (cursor.chr.unicode() < bitfont->lastChar())
204 cursor.chr = cursor.chr.unicode()+1; 204 cursor.chr = cursor.chr.unicode()+1;
205 else 205 else
206 cursor.chr = bitfont->firstChar(); 206 cursor.chr = bitfont->firstChar();
207 if (key == DownKey || key == Key_Down) 207 if (key == DownKey || key == Key_Down)
208 if (cursor.chr.unicode() > bitfont->firstChar()) 208 if (cursor.chr.unicode() > bitfont->firstChar())
209 cursor.chr = cursor.chr.unicode()-1; 209 cursor.chr = cursor.chr.unicode()-1;
210 else 210 else
211 cursor.chr = bitfont->lastChar(); 211 cursor.chr = bitfont->lastChar();
212 212
213 if (cursor.x == x && cursor.y == y && 213 if (cursor.x == x && cursor.y == y &&
214 cursor.chr == hallOfFame[lastScore].name.at(cursor.x-14)) { 214 cursor.chr == hallOfFame[lastScore].name.at(cursor.x-14)) {
215 uint ascii = k->ascii(); 215 uint ascii = k->ascii();
216 216
217 if (ascii < bitfont->firstChar() || ascii > bitfont->lastChar()) 217 if (ascii < bitfont->firstChar() || ascii > bitfont->lastChar())
218 ascii = toupper(ascii); 218 ascii = toupper(ascii);
219 219
220 if (ascii >= bitfont->firstChar() && ascii <= bitfont->lastChar()) { 220 if (ascii >= bitfont->firstChar() && ascii <= bitfont->lastChar()) {
221 cursor.chr = ascii; 221 cursor.chr = ascii;
222 hallOfFame[lastScore].name.at(cursor.x-14) = cursor.chr; 222 hallOfFame[lastScore].name.at(cursor.x-14) = cursor.chr;
223 if (++cursor.x > 16) 223 if (++cursor.x > 16)
224 cursor.x = 14; 224 cursor.x = 14;
225 } 225 }
226 } 226 }
227 } 227 }
228 228
229 if (key == Key_Return) { 229 if (key == Key_Return) {
230 playerName[lastPlayer] = hallOfFame[lastScore].name; 230 playerName[lastPlayer] = hallOfFame[lastScore].name;
231 write(); 231 write();
232 read(); 232 read();
233 lastScore = -1; 233 lastScore = -1;
234 cursor.x = -1; 234 cursor.x = -1;
235 cursor.y = -1; 235 cursor.y = -1;
236// killTimers(); 236// killTimers();
237 emit toggleNew(); 237 emit toggleNew();
238 end(); 238 end();
239 } 239 }
240 240
241 if (x != cursor.x || y != cursor.y) { 241 if (x != cursor.x || y != cursor.y) {
242 if (cursor.x != -1) 242 if (cursor.x != -1 && lastScore >= 0)
243 cursor.chr = hallOfFame[lastScore].name.at(cursor.x-14); 243 cursor.chr = hallOfFame[lastScore].name.at(cursor.x-14);
244 scrollRepeat = FALSE; 244 scrollRepeat = FALSE;
245 repaint(rect(x, y*1.25, cursor.chr), FALSE); 245 repaint(rect(x, y*1.25, cursor.chr), FALSE);
246 } else 246 } else if (lastScore >= 0)
247 hallOfFame[lastScore].name.at(cursor.x-14) = cursor.chr; 247 hallOfFame[lastScore].name.at(cursor.x-14) = cursor.chr;
248 248
249 if (key == UpKey || key == Key_Up || key == DownKey || key == Key_Down) 249 if (key == UpKey || key == Key_Up || key == DownKey || key == Key_Down)
250 scrollRepeat = TRUE; 250 scrollRepeat = TRUE;
251 else 251 else
252 repaint(rect(cursor.x, cursor.y*1.25, cursor.chr), FALSE); 252 repaint(rect(cursor.x, cursor.y*1.25, cursor.chr), FALSE);
253} 253}
254 254
255void Score::initKeys() 255void Score::initKeys()
256{ 256{
257 APP_CONFIG_BEGIN( cfg ); 257 APP_CONFIG_BEGIN( cfg );
258 QString up("Up"); 258 QString up("Up");
259 up = cfg->readEntry("upKey", (const char*) up); 259 up = cfg->readEntry("upKey", (const char*) up);
260 UpKey = KAccel::stringToKey(up); 260 UpKey = KAccel::stringToKey(up);
261 261
262 QString down("Down"); 262 QString down("Down");
263 down = cfg->readEntry("downKey", (const char*) down); 263 down = cfg->readEntry("downKey", (const char*) down);
264 DownKey = KAccel::stringToKey(down); 264 DownKey = KAccel::stringToKey(down);
265 265
266 QString left("Left"); 266 QString left("Left");
267 left = cfg->readEntry("leftKey", (const char*) left); 267 left = cfg->readEntry("leftKey", (const char*) left);
268 LeftKey = KAccel::stringToKey(left); 268 LeftKey = KAccel::stringToKey(left);
269 269
270 QString right("Right"); 270 QString right("Right");
271 right = cfg->readEntry("rightKey", (const char*) right); 271 right = cfg->readEntry("rightKey", (const char*) right);
272 RightKey = KAccel::stringToKey(right); 272 RightKey = KAccel::stringToKey(right);
273 APP_CONFIG_END( cfg ); 273 APP_CONFIG_END( cfg );
274} 274}
275 275
276void Score::confTiming(bool defGroup) 276void Score::confTiming(bool defGroup)
277{ 277{
278 APP_CONFIG_BEGIN( cfg ); 278 APP_CONFIG_BEGIN( cfg );
279 if (defGroup || cfg->hasKey("CursorBlinkMS")) 279 if (defGroup || cfg->hasKey("CursorBlinkMS"))
280 cursorBlinkMS = cfg->readNumEntry("CursorBlinkMS", 250); 280 cursorBlinkMS = cfg->readNumEntry("CursorBlinkMS", 250);
281 if (defGroup || cfg->hasKey("HallOfFameMS")) 281 if (defGroup || cfg->hasKey("HallOfFameMS"))
282 hallOfFameMS = cfg->readNumEntry("HallOfFameMS", 7000); 282 hallOfFameMS = cfg->readNumEntry("HallOfFameMS", 7000);
283 if (defGroup || cfg->hasKey("AfterPauseMS")) 283 if (defGroup || cfg->hasKey("AfterPauseMS"))
284 afterPauseMS = cfg->readNumEntry("AfterPauseMS", 1000); 284 afterPauseMS = cfg->readNumEntry("AfterPauseMS", 1000);
285 APP_CONFIG_END( cfg ); 285 APP_CONFIG_END( cfg );
286} 286}
287 287
288void Score::confScheme() 288void Score::confScheme()
289{ 289{
290 APP_CONFIG_BEGIN( cfg ); 290 APP_CONFIG_BEGIN( cfg );
291 SAVE_CONFIG_GROUP( cfg, oldgroup ); 291 SAVE_CONFIG_GROUP( cfg, oldgroup );
292 QString newgroup; 292 QString newgroup;
293 293
294 // if not set, read mode and scheme from the configfile 294 // if not set, read mode and scheme from the configfile
295 if (mode == -1 && scheme == -1) { 295 if (mode == -1 && scheme == -1) {
296 scheme = cfg->readNumEntry("Scheme", -1); 296 scheme = cfg->readNumEntry("Scheme", -1);
297 mode = cfg->readNumEntry("Mode", -1); 297 mode = cfg->readNumEntry("Mode", -1);
298 298
299 // if mode is not set in the defGroup-group, lookup the scheme group 299 // if mode is not set in the defGroup-group, lookup the scheme group
300 if (scheme != -1 || mode == -1) { 300 if (scheme != -1 || mode == -1) {
301 newgroup.sprintf("Scheme %d", scheme); 301 newgroup.sprintf("Scheme %d", scheme);
302 cfg->setGroup(newgroup); 302 cfg->setGroup(newgroup);
303 303
304 mode = cfg->readNumEntry("Mode", -1); 304 mode = cfg->readNumEntry("Mode", -1);
305 RESTORE_CONFIG_GROUP( cfg, oldgroup ); 305 RESTORE_CONFIG_GROUP( cfg, oldgroup );
306 } 306 }
307 } 307 }
308 308
309 int oldCursorBlinkMS = cursorBlinkMS; 309 int oldCursorBlinkMS = cursorBlinkMS;
310 310
311 confTiming(); 311 confTiming();
312 312
313 if (mode != -1) { 313 if (mode != -1) {
314 newgroup.sprintf("Mode %d", mode); 314 newgroup.sprintf("Mode %d", mode);
315 cfg->setGroup(newgroup); 315 cfg->setGroup(newgroup);
316 316
317 confTiming(FALSE); 317 confTiming(FALSE);
318 } 318 }
319 319
320 if (scheme != -1) { 320 if (scheme != -1) {
321 newgroup.sprintf("Scheme %d", scheme); 321 newgroup.sprintf("Scheme %d", scheme);
322 cfg->setGroup(newgroup); 322 cfg->setGroup(newgroup);
323 323
324 confTiming(FALSE); 324 confTiming(FALSE);
325 } 325 }
326 326
327 if (cursorBlinkMS != oldCursorBlinkMS) { 327 if (cursorBlinkMS != oldCursorBlinkMS) {
328 if (cursorBlinkTimer) 328 if (cursorBlinkTimer)
329 killTimer(cursorBlinkTimer); 329 killTimer(cursorBlinkTimer);
330 cursorBlinkTimer = startTimer(cursorBlinkMS); 330 cursorBlinkTimer = startTimer(cursorBlinkMS);
331 } 331 }
332 332
333 RESTORE_CONFIG_GROUP( cfg, oldgroup ); 333 RESTORE_CONFIG_GROUP( cfg, oldgroup );
334 APP_CONFIG_END( cfg ); 334 APP_CONFIG_END( cfg );
335} 335}
336 336
337void Score::setScheme(int Scheme, int Mode, Bitfont *font) 337void Score::setScheme(int Scheme, int Mode, Bitfont *font)
338{ 338{
339 mode = Mode; 339 mode = Mode;
340 scheme = Scheme; 340 scheme = Scheme;
341 341
342 confScheme(); 342 confScheme();
343 343
344 bitfont = font; 344 bitfont = font;
345 345
346 for (int p = 0; p < maxPlayer; p++) 346 for (int p = 0; p < maxPlayer; p++)
347 for (uint i = 0; i < playerName[p].length(); i++) 347 for (uint i = 0; i < playerName[p].length(); i++)
348 if (playerName[p].at(i) < bitfont->firstChar() || 348 if (playerName[p].at(i) < bitfont->firstChar() ||
349 playerName[p].at(i) > bitfont->lastChar()) 349 playerName[p].at(i) > bitfont->lastChar())
350 playerName[p].at(i) = playerName[p].at(i).upper(); 350 playerName[p].at(i) = playerName[p].at(i).upper();
351 351
352 for (int i = 0; i < 10; i++) 352 for (int i = 0; i < 10; i++)
353 for (uint j = 0; j < hallOfFame[i].name.length(); j++) 353 for (uint j = 0; j < hallOfFame[i].name.length(); j++)
354 if (hallOfFame[i].name.at(j) < bitfont->firstChar() || 354 if (hallOfFame[i].name.at(j) < bitfont->firstChar() ||
355 hallOfFame[i].name.at(j) > bitfont->lastChar()) 355 hallOfFame[i].name.at(j) > bitfont->lastChar())
356 hallOfFame[i].name.at(j) = hallOfFame[i].name.at(j).upper(); 356 hallOfFame[i].name.at(j) = hallOfFame[i].name.at(j).upper();
357 357
358 if (cursor.chr.unicode() < bitfont->firstChar() || 358 if (cursor.chr.unicode() < bitfont->firstChar() ||
359 cursor.chr.unicode() > bitfont->lastChar()) 359 cursor.chr.unicode() > bitfont->lastChar())
360 cursor.chr = cursor.chr.upper(); 360 cursor.chr = cursor.chr.upper();
361} 361}
362 362
363void Score::set(int score) 363void Score::set(int score)
364{ 364{
365 set(score, 0); 365 set(score, 0);
366} 366}
367 367
368void Score::set(int score, int player) 368void Score::set(int score, int player)
369{ 369{
370 if (player < 0 || player >= maxPlayer) 370 if (player < 0 || player >= maxPlayer)
371 return; 371 return;
372 372
373 lastPlayer = player; 373 lastPlayer = player;
374 playerScore[lastPlayer] = score; 374 playerScore[lastPlayer] = score;
375 375
376 QString s; 376 QString s;
377 377
378 s.sprintf("%6d0", playerScore[lastPlayer]/10); 378 s.sprintf("%6d0", playerScore[lastPlayer]/10);
379 repaint(rect(0, 1, s), FALSE); 379 repaint(rect(0, 1, s), FALSE);
380 380
381 if (score > HighScore) { 381 if (score > HighScore) {
382 HighScore = score; 382 HighScore = score;
383 s.sprintf("%8d0", HighScore/10); 383 s.sprintf("%8d0", HighScore/10);
384 repaint(rect(8, 1, s), FALSE); 384 repaint(rect(8, 1, s), FALSE);
385 } 385 }
386} 386}
387 387
388/* 388/*
389 * Set the score for player after the game if over. If the score is in the 389 * Set the score for player after the game if over. If the score is in the
390 * high scores then the hall of fame is updated (shifted) and the scoreboard 390 * high scores then the hall of fame is updated (shifted) and the scoreboard
391 * is shown. 391 * is shown.
392 */ 392 */
393 393
394void Score::setScore(int level, int player) 394void Score::setScore(int level, int player)
395{ 395{
396 lastScore = -1; 396 lastScore = -1;
397 397
398 if (player < 0 || player >= maxPlayer || level == 0) { 398 if (player < 0 || player >= maxPlayer || level == 0) {
399 if (level != 0) 399 if (level != 0)
400 emit toggleNew(); 400 emit toggleNew();
401 QTimer::singleShot(hallOfFameMS, this, SLOT(end())); 401 QTimer::singleShot(hallOfFameMS, this, SLOT(end()));
402 return; 402 return;
403 } 403 }
404 404
405 lastPlayer = player; 405 lastPlayer = player;
406 406
407 for (int i = 0; i < 10; i++) 407 for (int i = 0; i < 10; i++)
408 if ( playerScore[lastPlayer] > hallOfFame[i].points) { 408 if ( playerScore[lastPlayer] > hallOfFame[i].points) {
409 lastScore = i; 409 lastScore = i;
410 break; 410 break;
411 } 411 }
412 412
413 if (lastScore < 0) { 413 if (lastScore < 0) {
414 emit toggleNew(); 414 emit toggleNew();
415 QTimer::singleShot(hallOfFameMS, this, SLOT(end())); 415 QTimer::singleShot(hallOfFameMS, this, SLOT(end()));
416 return; 416 return;
417 } 417 }
418 418
419 for (int i = 9; i > lastScore && i > 0; i--) 419 for (int i = 9; i > lastScore && i > 0; i--)
420 hallOfFame[i] = hallOfFame[i-1]; 420 hallOfFame[i] = hallOfFame[i-1];
421 421
422 hallOfFame[lastScore].points = playerScore[lastPlayer]; 422 hallOfFame[lastScore].points = playerScore[lastPlayer];
423 hallOfFame[lastScore].levels = level; 423 hallOfFame[lastScore].levels = level;
424 hallOfFame[lastScore].moment = QDateTime::currentDateTime(); 424 hallOfFame[lastScore].moment = QDateTime::currentDateTime();
425 hallOfFame[lastScore].name = playerName[lastPlayer]; 425 hallOfFame[lastScore].name = playerName[lastPlayer];
426 426
427 cursor.x = 14; 427 cursor.x = 14;
428 cursor.y = 11+lastScore; 428 cursor.y = 11+lastScore;
429 cursor.chr = hallOfFame[lastScore].name.at(cursor.x-14); 429 cursor.chr = hallOfFame[lastScore].name.at(cursor.x-14);
430 430
431// startTimer(cursorBlinkMS); 431// startTimer(cursorBlinkMS);
432 setFocus(); 432 setFocus();
433} 433}
434 434
435/* 435/*
436 * Read the highscores, if no file or a file shorter than 4 bytes (versions before 0.2.4 stores only 436 * Read the highscores, if no file or a file shorter than 4 bytes (versions before 0.2.4 stores only
437 * the points of one highscore) exists - the highscores were initialized with default values. 437 * the points of one highscore) exists - the highscores were initialized with default values.
438 */ 438 */
439void Score::read() 439void Score::read()
440{ 440{
441 if (highscoreFile.exists() && highscoreFile.size() > 4) { 441 if (highscoreFile.exists() && highscoreFile.size() > 4) {
442 if (highscoreFile.open(IO_ReadOnly)) { 442 if (highscoreFile.open(IO_ReadOnly)) {
443 QDataStream s(&highscoreFile); 443 QDataStream s(&highscoreFile);
444 char *name; 444 char *name;
445 for (int i = 0; i < 10; i++) { 445 for (int i = 0; i < 10; i++) {
446 s >> hallOfFame[i].points >> hallOfFame[i].levels >> hallOfFame[i].duration >> 446 s >> hallOfFame[i].points >> hallOfFame[i].levels >> hallOfFame[i].duration >>
447 hallOfFame[i].moment >> name; 447 hallOfFame[i].moment >> name;
448 hallOfFame[i].name = QString::fromLatin1(name); 448 hallOfFame[i].name = QString::fromLatin1(name);
449 delete(name); 449 delete(name);
450 } 450 }
451 highscoreFile.close(); 451 highscoreFile.close();
452 } 452 }
453 } else { 453 } else {
454 for (int i = 0; i < 10; i++) { 454 for (int i = 0; i < 10; i++) {
455 hallOfFame[i].points = 5000; 455 hallOfFame[i].points = 5000;
456 hallOfFame[i].levels = 0; 456 hallOfFame[i].levels = 0;
457 hallOfFame[i].duration = QTime(); 457 hallOfFame[i].duration = QTime();
458 hallOfFame[i].moment = QDateTime(); 458 hallOfFame[i].moment = QDateTime();
459 hallOfFame[i].name = "???"; 459 hallOfFame[i].name = "???";
460 } 460 }
461 // write(); 461 // write();
462 } 462 }
463 463
464 for (int i = 0; i < 10; i++) 464 for (int i = 0; i < 10; i++)
465 for (uint j = 0; j < hallOfFame[i].name.length(); j++) 465 for (uint j = 0; j < hallOfFame[i].name.length(); j++)
466 if (hallOfFame[i].name.at(j) < bitfont->firstChar() || 466 if (hallOfFame[i].name.at(j) < bitfont->firstChar() ||
467 hallOfFame[i].name.at(j) > bitfont->lastChar()) 467 hallOfFame[i].name.at(j) > bitfont->lastChar())
468 hallOfFame[i].name.at(j) = hallOfFame[i].name.at(j).upper(); 468 hallOfFame[i].name.at(j) = hallOfFame[i].name.at(j).upper();
469 469
470 HighScore = hallOfFame[0].points; 470 HighScore = hallOfFame[0].points;
471} 471}
472 472
473void Score::write() 473void Score::write()
474{ 474{
475 if (highscoreFile.open(IO_WriteOnly)) { 475 if (highscoreFile.open(IO_WriteOnly)) {
476 QDataStream s(&highscoreFile); 476 QDataStream s(&highscoreFile);
477 for (int i = 0; i < 10; i++) 477 for (int i = 0; i < 10; i++)
478 s << hallOfFame[i].points << hallOfFame[i].levels << hallOfFame[i].duration << 478 s << hallOfFame[i].points << hallOfFame[i].levels << hallOfFame[i].duration <<
479 hallOfFame[i].moment << hallOfFame[i].name.latin1(); 479 hallOfFame[i].moment << hallOfFame[i].name.latin1();
480 highscoreFile.close(); 480 highscoreFile.close();
481 } 481 }
482} 482}
483 483
484void Score::setPause(bool Paused) 484void Score::setPause(bool Paused)
485{ 485{
486 paused = Paused; 486 paused = Paused;
487 487
488 QRect r = bitfont->rect(tr("PAUSED")); 488 QRect r = bitfont->rect(tr("PAUSED"));
489 r.moveCenter(QPoint(this->width()/2, this->height()/2)); 489 r.moveCenter(QPoint(this->width()/2, this->height()/2));
490 repaint(r, TRUE); 490 repaint(r, TRUE);
491 491
492 // repaint 1UP or 2UP 492 // repaint 1UP or 2UP
493 repaint(FALSE); 493 repaint(FALSE);
494} 494}
495 495
496void Score::end() 496void Score::end()
497{ 497{
498 if (paused) { 498 if (paused) {
499 QTimer::singleShot(afterPauseMS, this, SLOT(end())); 499 QTimer::singleShot(afterPauseMS, this, SLOT(end()));
500 return; 500 return;
501 } 501 }
502 502
503 // repaint 1UP or 2UP 503 // repaint 1UP or 2UP
504 lastPlayer = -1; 504 lastPlayer = -1;
505 repaint(FALSE); 505 repaint(FALSE);
506 506
507 emit forcedHallOfFame(FALSE); 507 emit forcedHallOfFame(FALSE);
508} 508}
509 509
510/* 510/*
511 * Return the date in a formatted QString. The format can be changed using internationalization 511 * Return the date in a formatted QString. The format can be changed using internationalization
512 * of the string "YY/MM/DD". Invalid QDate's where returned as "00/00/00". 512 * of the string "YY/MM/DD". Invalid QDate's where returned as "00/00/00".
513 */ 513 */
514QString Score::formatDate(QDate date) 514QString Score::formatDate(QDate date)
515{ 515{
516 QString s = tr("@YY@/@MM@/@DD@"); 516 QString s = tr("@YY@/@MM@/@DD@");
517 517
518 QString dd; 518 QString dd;
519 dd.sprintf("%02d", date.isValid() ? date.year() % 100 : 0); 519 dd.sprintf("%02d", date.isValid() ? date.year() % 100 : 0);
520 s.replace(QRegExp("@YY@"), dd); 520 s.replace(QRegExp("@YY@"), dd);
521 dd.sprintf("%02d", date.isValid() ? date.month() : 0); 521 dd.sprintf("%02d", date.isValid() ? date.month() : 0);
522 s.replace(QRegExp("@MM@"), dd); 522 s.replace(QRegExp("@MM@"), dd);
523 dd.sprintf("%02d", date.isValid() ? date.day() : 0); 523 dd.sprintf("%02d", date.isValid() ? date.day() : 0);
524 s.replace(QRegExp("@DD@"), dd); 524 s.replace(QRegExp("@DD@"), dd);
525 525
526 return s; 526 return s;
527} 527}
528 528
529QRect Score::rect(int col, float row, QString str, int align) 529QRect Score::rect(int col, float row, QString str, int align)
530{ 530{
531 QRect r = bitfont->rect(str); 531 QRect r = bitfont->rect(str);
532 r.moveBy(x(col), y(row)); 532 r.moveBy(x(col), y(row));
533 533
534 int dx = 0; 534 int dx = 0;
535 int dy = 0; 535 int dy = 0;
536 536
537 if (align & AlignLeft || align & AlignRight) { 537 if (align & AlignLeft || align & AlignRight) {
538 dx = (str.length()-1) * (bitfont->width()/2); 538 dx = (str.length()-1) * (bitfont->width()/2);
539 if (align & AlignRight) 539 if (align & AlignRight)
540 dx *= -1; 540 dx *= -1;
541 } 541 }
542 542
543 if (align & AlignTop || align & AlignBottom) { 543 if (align & AlignTop || align & AlignBottom) {
544 dy = bitfont->height()/2; 544 dy = bitfont->height()/2;
545 if (align & AlignBottom) 545 if (align & AlignBottom)
546 dy *= -1; 546 dy *= -1;
547 } 547 }
548 548
549 if (dx != 0 || dy != 0) 549 if (dx != 0 || dy != 0)
550 r.moveBy(dx, dy); 550 r.moveBy(dx, dy);
551 551
552 return r; 552 return r;
553} 553}
554 554
555int Score::x(int col) 555int Score::x(int col)
556{ 556{
557 return col*bitfont->width(); 557 return col*bitfont->width();
558} 558}
559 559
560int Score::y(float row) 560int Score::y(float row)
561{ 561{
562 return (int) (row*(bitfont->height()+bitfont->height()/4)); 562 return (int) (row*(bitfont->height()+bitfont->height()/4));
563} 563}
564 564
565/** 565/**
566 * Ermittelt die zu benutzende "highscore"-Datei, in die auch geschrieben werden kann. 566 * Ermittelt die zu benutzende "highscore"-Datei, in die auch geschrieben werden kann.
567 * Über den "highscoreFilePath"-KConfig-Eintrag, kann abweichend von der Standardlokation 567 * Über den "highscoreFilePath"-KConfig-Eintrag, kann abweichend von der Standardlokation
568 * der Standort der "highscore"-Datei spezifiziert werden. 568 * der Standort der "highscore"-Datei spezifiziert werden.
569 * Wenn die systemweite "highscore"-Datei nicht beschrieben werden kann, wird mit einer 569 * Wenn die systemweite "highscore"-Datei nicht beschrieben werden kann, wird mit einer
570 * privaten Datei gearbeitet. 570 * privaten Datei gearbeitet.
571 */ 571 */
572QFileInfo Score::locateHighscoreFilePath() 572QFileInfo Score::locateHighscoreFilePath()
573{ 573{
574 return privateHighscoreFileInfo; 574 return privateHighscoreFileInfo;
575} 575}
diff --git a/noncore/todayplugins/stockticker/libstocks/http.c b/noncore/todayplugins/stockticker/libstocks/http.c
index cc78ab7..155ce4b 100644
--- a/noncore/todayplugins/stockticker/libstocks/http.c
+++ b/noncore/todayplugins/stockticker/libstocks/http.c
@@ -1,303 +1,302 @@
1/* libstocks - Library to get current stock quotes from Yahoo Finance 1/* libstocks - Library to get current stock quotes from Yahoo Finance
2 * 2 *
3 * Copyright (C) 2000 Eric Laeuffer 3 * Copyright (C) 2000 Eric Laeuffer
4 * 4 *
5 * This library is free software; you can redistribute it and/or 5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public 6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either 7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version. 8 * version 2 of the License, or (at your option) any later version.
9 * 9 *
10 * This library is distributed in the hope that it will be useful, 10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details. 13 * Library General Public License for more details.
14 * 14 *
15 * You should have received a copy of the GNU Library General Public 15 * You should have received a copy of the GNU Library General Public
16 * License along with this library; if not, write to the 16 * License along with this library; if not, write to the
17 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 * Boston, MA 02111-1307, USA. 18 * Boston, MA 02111-1307, USA.
19 */ 19 */
20 20
21#define __HTTP_C__ 21#define __HTTP_C__
22#ifndef __UNIX__ 22#ifndef __UNIX__
23#define __UNIX__ 23#define __UNIX__
24#endif 24#endif
25 25
26#ifdef __UNIX__ 26#ifdef __UNIX__
27#include <sys/socket.h> 27#include <sys/socket.h>
28#include <netinet/in.h> 28#include <netinet/in.h>
29#include <arpa/inet.h> 29#include <arpa/inet.h>
30#include <netdb.h> 30#include <netdb.h>
31#include <unistd.h> 31#include <unistd.h>
32#elif __WINDOWS__ 32#elif __WINDOWS__
33#include <winsock.h> 33#include <winsock.h>
34#include <mbstring.h> 34#include <mbstring.h>
35#endif 35#endif
36 36
37#include <sys/types.h> 37#include <sys/types.h>
38#include <ctype.h> 38#include <ctype.h>
39#include <string.h> 39#include <string.h>
40#include <stdlib.h> 40#include <stdlib.h>
41#include <stdio.h> 41#include <stdio.h>
42 42
43#include "http.h" 43#include "http.h"
44#include "stocks.h" 44#include "stocks.h"
45 45
46#define BUF_SIZE 1024 46#define BUF_SIZE 1024
47#define HEADER_MAXBUF 512 47#define HEADER_MAXBUF 512
48 48
49/* pointer to proxy server name or NULL */ 49/* pointer to proxy server name or NULL */
50char *http_proxy_server=NULL; 50char *http_proxy_server=NULL;
51/* proxy server port number or 0 */ 51/* proxy server port number or 0 */
52int http_proxy_port=0; 52int http_proxy_port=0;
53 53
54/*****************************************************************************/ 54/*****************************************************************************/
55/* Gets the file from http://http_server/http_file */ 55/* Gets the file from http://http_server/http_file */
56/* This function is used to get quotes csv file from yahoo. */ 56/* This function is used to get quotes csv file from yahoo. */
57/* It allocates memory for the file and defines *pdata (the pointer of datas)*/ 57/* It allocates memory for the file and defines *pdata (the pointer of datas)*/
58/*****************************************************************************/ 58/*****************************************************************************/
59libstocks_return_code http_get(char *http_file, char *http_server, char **pdata) 59libstocks_return_code http_get(char *http_file, char *http_server, char **pdata)
60{ 60{
61 struct hostent *host; /* structs needed by socket */ 61 struct hostent *host; /* structs needed by socket */
62 struct sockaddr_in server; 62 struct sockaddr_in server;
63 int s; /* socket descriptor */ 63 int s; /* socket descriptor */
64 char header[HEADER_MAXBUF]; /* request header */ 64 char header[HEADER_MAXBUF]; /* request header */
65 int hlg; /* header length */ 65 int hlg; /* header length */
66 char buf[BUF_SIZE+1]; /* tempory buffer from socket read */ 66 char buf[BUF_SIZE+1]; /* tempory buffer from socket read */
67 int r; /* number of bytes read by read function */ 67 int r; /* number of bytes read by read function */
68 char *data=NULL; /* http server response */ 68 char *data=NULL; /* http server response */
69 int data_lgr; /* http server response length */ 69 int data_lgr; /* http server response length */
70 char *temp; /* pointer used to split header and csv */ 70 char *temp; /* pointer used to split header and csv */
71 int error_code; /* error code returned by http server */ 71 int error_code; /* error code returned by http server */
72 char *csv_ptr; /* pointer to the csv content */ 72 char *csv_ptr; /* pointer to the csv content */
73 int header_founded; /* test if header is founded */ 73 int header_founded; /* test if header is founded */
74 74
75#ifdef DEBUG 75#ifdef DEBUG
76 printf("*http_get\n"); 76 printf("*http_get\n");
77#endif 77#endif
78 78
79 /* get host info by name :*/ 79 /* get host info by name :*/
80 if ((host = gethostbyname( http_proxy_server ? http_proxy_server : http_server))) 80 if ((host = gethostbyname( http_proxy_server ? http_proxy_server : http_server)))
81 { 81 {
82 memset((char *) &server,0, sizeof(server)); 82 memset((char *) &server,0, sizeof(server));
83 memmove((char *) &server.sin_addr, host->h_addr, host->h_length); 83 memmove((char *) &server.sin_addr, host->h_addr, host->h_length);
84 server.sin_family = host->h_addrtype; 84 server.sin_family = host->h_addrtype;
85 server.sin_port = (unsigned short) htons( http_proxy_server ? http_proxy_port : 80 ); 85 server.sin_port = (unsigned short) htons( http_proxy_server ? http_proxy_port : 80 );
86 86
87 } else 87 }
88 { 88 else
89 89 {
90#ifdef DEBUG 90#ifdef DEBUG
91 printf(" gethostbyname : NOK\n"); 91 printf(" gethostbyname : NOK\n");
92#endif 92#endif
93 return ERRHOST; 93 return ERRHOST;
94 } 94 }
95 95
96 /* create socket */ 96 /* create socket */
97 if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) 97 if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0)
98 { 98 {
99
100#ifdef DEBUG 99#ifdef DEBUG
101 printf(" create socket : NOK\n"); 100 printf(" create socket : NOK\n");
102#endif 101#endif
103 return ERRSOCK; 102 return ERRSOCK;
104 } 103 }
105 104
106 setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, 0, 0); 105 setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, 0, 0);
107 106
108 /* connect to server */ 107 /* connect to server */
109 if (connect(s, &server, sizeof(server)) < 0) 108 if (connect(s, &server, sizeof(server)) < 0)
110 { 109 {
111#ifdef DEBUG 110#ifdef DEBUG
112 printf(" connect to server : NOK\n"); 111 printf(" connect to server : NOK\n");
113#endif 112#endif
114 113
115#ifdef __UNIX__ 114#ifdef __UNIX__
116 close(s); 115 close(s);
117#elif __WINDOWS__ 116#elif __WINDOWS__
118 closesocket(s); 117 closesocket(s);
119#endif 118#endif
120 return ERRCONN; 119 return ERRCONN;
121 } 120 }
122 121
123 /* create header */ 122 /* create header */
124 if (http_proxy_server) 123 if (http_proxy_server)
125 { 124 {
126 sprintf(header,"GET http://%.128s:80%.256s HTTP/1.0\015\012\015\012", 125 sprintf(header,"GET http://%.128s:80%.256s HTTP/1.0\015\012\015\012",
127 http_server, http_file); 126 http_server, http_file);
128 } 127 }
129 else 128 else
130 { 129 {
131 sprintf(header,"GET %s HTTP/1.0\015\012\015\012",http_file); 130 sprintf(header,"GET %s HTTP/1.0\015\012\015\012",http_file);
132 } 131 }
133 132
134 hlg=strlen(header); 133 hlg=strlen(header);
135 134
136 /* send header */ 135 /* send header */
137#ifdef __UNIX__ 136#ifdef __UNIX__
138 if (write(s,header,hlg)!=hlg) 137 if (write(s,header,hlg)!=hlg)
139#elif __WINDOWS__ 138#elif __WINDOWS__
140 if (send(s,header,hlg, 0)!=hlg) 139 if (send(s,header,hlg, 0)!=hlg)
141#endif 140#endif
142 { 141 {
143#ifdef DEBUG 142#ifdef DEBUG
144 printf(" send header : NOK\n"); 143 printf(" send header : NOK\n");
145#endif 144#endif
146 return ERRWHEA; 145 return ERRWHEA;
147 } 146 }
148 147
149 data_lgr = 0; 148 data_lgr = 0;
150 r=1; 149 r=1;
151 while(r) 150 while(r)
152 { 151 {
153 /* Clear Buffer */ 152 /* Clear Buffer */
154 memset(buf,0,BUF_SIZE+1); 153 memset(buf,0,BUF_SIZE+1);
155 154
156#ifdef __UNIX__ 155#ifdef __UNIX__
157 r=read(s,buf,BUF_SIZE); 156 r=read(s,buf,BUF_SIZE);
158#elif __WINDOWS__ 157#elif __WINDOWS__
159 r=recv(s,buf,BUF_SIZE,0); 158 r=recv(s,buf,BUF_SIZE,0);
160#endif 159#endif
161 160
162 if (r) 161 if (r > 0)
163 { 162 {
164 if(!data_lgr) 163 if(!data_lgr)
165 { 164 {
166 if((data = malloc(r+1))==NULL) 165 if((data = malloc(r+1))==NULL)
167 { 166 {
168 fprintf(stderr,"Memory allocating error (%s line %d)\n" 167 fprintf(stderr,"Memory allocating error (%s line %d)\n",
169 ,__FILE__, __LINE__); 168 __FILE__, __LINE__);
170 exit(1); 169 exit(1);
171 } 170 }
172 171
173 memcpy(data,buf,r); 172 memcpy(data,buf,r);
174 data_lgr = r; 173 data_lgr = r;
175 data[r]=0; 174 data[r]=0;
176 } 175 }
177 else 176 else
178 { 177 {
179 if((temp = malloc(r+data_lgr+1))==NULL) 178 if((temp = malloc(r+data_lgr+1))==NULL)
180 { 179 {
181 fprintf(stderr,"Memory allocating error (%s line %d)\n" 180 fprintf(stderr,"Memory allocating error (%s line %d)\n",
182 ,__FILE__, __LINE__); 181 __FILE__, __LINE__);
183 exit(1); 182 exit(1);
184 } 183 }
185 memcpy(temp, data, data_lgr); 184 memcpy(temp, data, data_lgr);
186 memcpy(temp+data_lgr, buf, r); 185 memcpy(temp+data_lgr, buf, r);
187 temp[r+data_lgr]=0; 186 temp[r+data_lgr]=0;
188 data_lgr += r; 187 data_lgr += r;
189 free(data); 188 free(data);
190 data = temp; 189 data = temp;
191 } 190 }
192 } 191 }
193 } 192 }
194 193
195 /* close socket */ 194 /* close socket */
196#ifdef __UNIX__ 195#ifdef __UNIX__
197 close(s); 196 close(s);
198#elif __WINDOWS__ 197#elif __WINDOWS__
199 closesocket(s); 198 closesocket(s);
200#endif 199#endif
201 200
202#ifdef DEBUG 201#ifdef DEBUG
203 printf("%s\n", data); 202 printf("%s\n", data);
204#endif 203#endif
205 204
206 /* get headers to test status line */ 205 /* get headers to test status line */
207 /* and to split headers and content */ 206 /* and to split headers and content */
208 207
209 temp = data; 208 temp = data;
210 header_founded = 0; 209 header_founded = 0;
211 while( !header_founded ) 210 while( !header_founded )
212 { 211 {
213 if (!temp || *temp==0) return ERRRHEA; 212 if (!temp || *temp==0) return ERRRHEA;
214 213
215 if( *temp==0x0A ) 214 if( *temp==0x0A )
216 { 215 {
217 /* test if it is the header end */ 216 /* test if it is the header end */
218 temp ++; 217 temp ++;
219 if (*temp == 0x0D) temp++; 218 if (*temp == 0x0D) temp++;
220 if (*temp == 0x0A) header_founded = 1; 219 if (*temp == 0x0A) header_founded = 1;
221 } 220 }
222 else 221 else
223 temp++; 222 temp++;
224 } 223 }
225 224
226 *temp = 0; 225 *temp = 0;
227 temp++; 226 temp++;
228 227
229 sscanf(data,"HTTP/1.%*d %03d",&error_code); 228 sscanf(data,"HTTP/1.%*d %03d",&error_code);
230 229
231 if (error_code != 200) 230 if (error_code != 200)
232 { 231 {
233#ifdef DEBUG 232#ifdef DEBUG
234 printf(" HTTP error code : %d\n", error_code); 233 printf(" HTTP error code : %d\n", error_code);
235#endif 234#endif
236 free(data); 235 free(data);
237 return ERRPAHD; 236 return ERRPAHD;
238 } 237 }
239 238
240 if ((csv_ptr = malloc(strlen(temp)+1))==NULL) 239 if ((csv_ptr = malloc(strlen(temp)+1))==NULL)
241 { 240 {
242 free(data); 241 free(data);
243 fprintf(stderr,"Memory allocating error (%s line %d)\n" 242 fprintf(stderr,"Memory allocating error (%s line %d)\n",
244 ,__FILE__, __LINE__); 243 __FILE__, __LINE__);
245 exit(1); 244 exit(1);
246 } 245 }
247 246
248 memcpy(csv_ptr, temp, strlen(temp)+1); 247 memcpy(csv_ptr, temp, strlen(temp)+1);
249 free(data); 248 free(data);
250 249
251#ifdef DEBUG 250#ifdef DEBUG
252 printf(" CSV\n"); 251 printf(" CSV\n");
253 printf("%s,\n", csv_ptr); 252 printf("%s,\n", csv_ptr);
254#endif 253#endif
255 254
256 *pdata = csv_ptr; 255 *pdata = csv_ptr;
257 256
258 return 0; 257 return 0;
259} 258}
260 259
261/******************************************************************************/ 260/******************************************************************************/
262/* Set the proxy server to use */ 261/* Set the proxy server to use */
263/******************************************************************************/ 262/******************************************************************************/
264libstocks_return_code set_proxy(char *proxy) 263libstocks_return_code set_proxy(char *proxy)
265{ 264{
266 char *ptr; 265 char *ptr;
267 char c; 266 char c;
268 267
269#ifdef DEBUG 268#ifdef DEBUG
270 printf("*set_proxy\n"); 269 printf("*set_proxy\n");
271#endif 270#endif
272 271
273 /* Parse the proxy URL - It must start with http:// */ 272 /* Parse the proxy URL - It must start with http:// */
274#ifdef __UNIX__ 273#ifdef __UNIX__
275 if (strncasecmp("http://",proxy,7)) return ERRPROX; 274 if (strncasecmp("http://",proxy,7)) return ERRPROX;
276#elif __WINDOWS__ 275#elif __WINDOWS__
277 if (_mbsnbicmp("http://",proxy,7)) return ERRPROX; 276 if (_mbsnbicmp("http://",proxy,7)) return ERRPROX;
278#endif 277#endif
279 278
280 proxy+=7; 279 proxy+=7;
281 280
282 /* find ":" in the proxy url */ 281 /* find ":" in the proxy url */
283 ptr = proxy; 282 ptr = proxy;
284 for (c=*ptr; (c && c!=':');) c=*ptr++; 283 for (c=*ptr; (c && c!=':');) c=*ptr++;
285 284
286 /* ptr points just after the ":" or at the end of proxy if : not founded */ 285 /* ptr points just after the ":" or at the end of proxy if : not founded */
287 *(ptr-1)=0; /* clear the ":" */ 286 *(ptr-1)=0; /* clear the ":" */
288 287
289 http_proxy_server=strdup(proxy); 288 http_proxy_server=strdup(proxy);
290 289
291#ifdef DEBUG 290#ifdef DEBUG
292 printf("http_proxy_server : %s\n", http_proxy_server); 291 printf("http_proxy_server : %s\n", http_proxy_server);
293#endif 292#endif
294 293
295 /* get the port number of the url */ 294 /* get the port number of the url */
296 if (sscanf(ptr,"%d",&http_proxy_port)!=1) return ERRPROX; 295 if (sscanf(ptr,"%d",&http_proxy_port)!=1) return ERRPROX;
297 296
298#ifdef DEBUG 297#ifdef DEBUG
299 printf("http_proxy_port : %d\n", http_proxy_port); 298 printf("http_proxy_port : %d\n", http_proxy_port);
300#endif 299#endif
301 300
302 return 0; 301 return 0;
303} 302}