-rw-r--r-- | noncore/games/minesweep/minefield.cpp | 4 | ||||
-rw-r--r-- | noncore/net/opieirc/ircsession.cpp | 8 | ||||
-rw-r--r-- | noncore/todayplugins/stockticker/libstocks/csv.c | 3 |
3 files changed, 10 insertions, 5 deletions
diff --git a/noncore/games/minesweep/minefield.cpp b/noncore/games/minesweep/minefield.cpp index 72c05b0..1987ea5 100644 --- a/noncore/games/minesweep/minefield.cpp +++ b/noncore/games/minesweep/minefield.cpp | |||
@@ -515,233 +515,235 @@ void MineField::held() | |||
515 | updateMine( currRow, currCol ); | 515 | updateMine( currRow, currCol ); |
516 | ignoreClick = TRUE; | 516 | ignoreClick = TRUE; |
517 | } | 517 | } |
518 | 518 | ||
519 | 519 | ||
520 | 520 | ||
521 | 521 | ||
522 | void MineField::keyPressEvent( QKeyEvent* e ) | 522 | void MineField::keyPressEvent( QKeyEvent* e ) |
523 | { | 523 | { |
524 | #if defined(Q_WS_QWS) || defined(_WS_QWS_) | 524 | #if defined(Q_WS_QWS) || defined(_WS_QWS_) |
525 | flagAction = ( e->key() == Key_Up ) ? FlagOn : NoAction; | 525 | flagAction = ( e->key() == Key_Up ) ? FlagOn : NoAction; |
526 | #else | 526 | #else |
527 | flagAction = ( ( e->state() & ShiftButton ) == ShiftButton ) ? FlagOn : NoAction; | 527 | flagAction = ( ( e->state() & ShiftButton ) == ShiftButton ) ? FlagOn : NoAction; |
528 | #endif | 528 | #endif |
529 | } | 529 | } |
530 | 530 | ||
531 | void MineField::keyReleaseEvent( QKeyEvent* ) | 531 | void MineField::keyReleaseEvent( QKeyEvent* ) |
532 | { | 532 | { |
533 | flagAction = NoAction; | 533 | flagAction = NoAction; |
534 | } | 534 | } |
535 | 535 | ||
536 | int MineField::getHint( int row, int col ) | 536 | int MineField::getHint( int row, int col ) |
537 | { | 537 | { |
538 | int hint = 0; | 538 | int hint = 0; |
539 | for ( int c = col-1; c <= col+1; c++ ) | 539 | for ( int c = col-1; c <= col+1; c++ ) |
540 | for ( int r = row-1; r <= row+1; r++ ) { | 540 | for ( int r = row-1; r <= row+1; r++ ) { |
541 | Mine* m = mine( r, c ); | 541 | Mine* m = mine( r, c ); |
542 | if ( m && m->isMined() ) | 542 | if ( m && m->isMined() ) |
543 | hint++; | 543 | hint++; |
544 | } | 544 | } |
545 | 545 | ||
546 | return hint; | 546 | return hint; |
547 | } | 547 | } |
548 | 548 | ||
549 | void MineField::setHint( int row, int col ) | 549 | void MineField::setHint( int row, int col ) |
550 | { | 550 | { |
551 | Mine *m = mine( row, col ); | 551 | Mine *m = mine( row, col ); |
552 | if ( !m ) | 552 | if ( !m ) |
553 | return; | 553 | return; |
554 | 554 | ||
555 | int hint = getHint( row, col ); | 555 | int hint = getHint( row, col ); |
556 | 556 | ||
557 | if ( !hint ) { | 557 | if ( !hint ) { |
558 | for ( int c = col-1; c <= col+1; c++ ) | 558 | for ( int c = col-1; c <= col+1; c++ ) |
559 | for ( int r = row-1; r <= row+1; r++ ) { | 559 | for ( int r = row-1; r <= row+1; r++ ) { |
560 | Mine* m = mine( r, c ); | 560 | Mine* m = mine( r, c ); |
561 | if ( m && m->state() == Mine::Hidden ) { | 561 | if ( m && m->state() == Mine::Hidden ) { |
562 | m->activate( TRUE ); | 562 | m->activate( TRUE ); |
563 | nonminecount--; | 563 | nonminecount--; |
564 | setHint( r, c ); | 564 | setHint( r, c ); |
565 | updateCell( r, c ); | 565 | updateCell( r, c ); |
566 | } | 566 | } |
567 | } | 567 | } |
568 | } | 568 | } |
569 | 569 | ||
570 | m->setHint( hint ); | 570 | m->setHint( hint ); |
571 | updateCell( row, col ); | 571 | updateCell( row, col ); |
572 | } | 572 | } |
573 | 573 | ||
574 | /* | 574 | /* |
575 | Only place mines after first click, since it is pointless to | 575 | Only place mines after first click, since it is pointless to |
576 | kill the player before the game has started. | 576 | kill the player before the game has started. |
577 | */ | 577 | */ |
578 | 578 | ||
579 | void MineField::cellClicked( int row, int col ) | 579 | void MineField::cellClicked( int row, int col ) |
580 | { | 580 | { |
581 | if ( state() == GameOver ) | 581 | if ( state() == GameOver ) |
582 | return; | 582 | return; |
583 | if ( state() == Waiting ) { | 583 | if ( state() == Waiting ) { |
584 | Mine* m = mine( row, col ); | 584 | Mine* m = mine( row, col ); |
585 | if ( !m ) | 585 | if ( !m ) |
586 | return; | 586 | return; |
587 | m->setState( Mine::Empty ); | 587 | m->setState( Mine::Empty ); |
588 | nonminecount--; | 588 | nonminecount--; |
589 | placeMines(); | 589 | placeMines(); |
590 | setState( Playing ); | 590 | setState( Playing ); |
591 | emit gameStarted(); | 591 | emit gameStarted(); |
592 | updateMine( row, col ); | 592 | updateMine( row, col ); |
593 | } else { // state() == Playing | 593 | } else { // state() == Playing |
594 | holdTimer->stop(); | 594 | holdTimer->stop(); |
595 | if ( ignoreClick ) | 595 | if ( ignoreClick ) |
596 | ignoreClick = FALSE; | 596 | ignoreClick = FALSE; |
597 | else | 597 | else |
598 | updateMine( row, col ); | 598 | updateMine( row, col ); |
599 | } | 599 | } |
600 | } | 600 | } |
601 | 601 | ||
602 | void MineField::updateMine( int row, int col ) | 602 | void MineField::updateMine( int row, int col ) |
603 | { | 603 | { |
604 | Mine* m = mine( row, col ); | 604 | Mine* m = mine( row, col ); |
605 | if ( !m ) | 605 | if ( !m ) |
606 | return; | 606 | return; |
607 | 607 | ||
608 | bool wasFlagged = m->state() == Mine::Flagged; | 608 | bool wasFlagged = m->state() == Mine::Flagged; |
609 | bool wasEmpty = m->state() == Mine::Empty; | 609 | bool wasEmpty = m->state() == Mine::Empty; |
610 | 610 | ||
611 | m->activate( flagAction == NoAction ); | 611 | m->activate( flagAction == NoAction ); |
612 | 612 | ||
613 | if ( m->state() == Mine::Exploded ) { | 613 | if ( m->state() == Mine::Exploded ) { |
614 | emit gameOver( FALSE ); | 614 | emit gameOver( FALSE ); |
615 | setState( GameOver ); | 615 | setState( GameOver ); |
616 | return; | 616 | return; |
617 | } else if ( m->state() == Mine::Empty ) { | 617 | } else if ( m->state() == Mine::Empty ) { |
618 | setHint( row, col ); | 618 | setHint( row, col ); |
619 | if ( !wasEmpty ) | 619 | if ( !wasEmpty ) |
620 | nonminecount--; | 620 | nonminecount--; |
621 | } | 621 | } |
622 | 622 | ||
623 | if ( flagAction != NoAction ) { | 623 | if ( flagAction != NoAction ) { |
624 | if ( m->state() == Mine::Flagged ) { | 624 | if ( m->state() == Mine::Flagged ) { |
625 | if (mineguess > 0) { | 625 | if (mineguess > 0) { |
626 | --mineguess; | 626 | --mineguess; |
627 | emit mineCount( mineguess ); | 627 | emit mineCount( mineguess ); |
628 | if ( m->isMined() ) | 628 | if ( m->isMined() ) |
629 | --minecount; | 629 | --minecount; |
630 | } else { | 630 | } else { |
631 | m->setState(Mine::Hidden); | 631 | m->setState(Mine::Hidden); |
632 | } | 632 | } |
633 | } else if ( wasFlagged ) { | 633 | } else if ( wasFlagged ) { |
634 | ++mineguess; | 634 | ++mineguess; |
635 | emit mineCount( mineguess ); | 635 | emit mineCount( mineguess ); |
636 | if ( m->isMined() ) | 636 | if ( m->isMined() ) |
637 | ++minecount; | 637 | ++minecount; |
638 | } | 638 | } |
639 | } | 639 | } |
640 | 640 | ||
641 | updateCell( row, col ); | 641 | updateCell( row, col ); |
642 | 642 | ||
643 | if ( !minecount && !mineguess || !nonminecount ) { | 643 | if ( !minecount && !mineguess || !nonminecount ) { |
644 | emit gameOver( TRUE ); | 644 | emit gameOver( TRUE ); |
645 | setState( GameOver ); | 645 | setState( GameOver ); |
646 | } | 646 | } |
647 | } | 647 | } |
648 | 648 | ||
649 | void MineField::showMines() | 649 | void MineField::showMines() |
650 | { | 650 | { |
651 | for ( int c = 0; c < numCols; c++ ) | 651 | for ( int c = 0; c < numCols; c++ ) |
652 | for ( int r = 0; r < numRows; r++ ) { | 652 | for ( int r = 0; r < numRows; r++ ) { |
653 | Mine* m = mine( r, c ); | 653 | Mine* m = mine( r, c ); |
654 | if ( !m ) | 654 | if ( !m ) |
655 | continue; | 655 | continue; |
656 | if ( m->isMined() && m->state() == Mine::Hidden ) | 656 | if ( m->isMined() && m->state() == Mine::Hidden ) |
657 | m->setState( Mine::Mined ); | 657 | m->setState( Mine::Mined ); |
658 | if ( !m->isMined() && m->state() == Mine::Flagged ) | 658 | if ( !m->isMined() && m->state() == Mine::Flagged ) |
659 | m->setState( Mine::Wrong ); | 659 | m->setState( Mine::Wrong ); |
660 | 660 | ||
661 | updateCell( r, c ); | 661 | updateCell( r, c ); |
662 | } | 662 | } |
663 | } | 663 | } |
664 | 664 | ||
665 | void MineField::paletteChange( const QPalette &o ) | 665 | void MineField::paletteChange( const QPalette &o ) |
666 | { | 666 | { |
667 | Mine::paletteChange(); | 667 | Mine::paletteChange(); |
668 | QScrollView::paletteChange( o ); | 668 | QScrollView::paletteChange( o ); |
669 | } | 669 | } |
670 | 670 | ||
671 | void MineField::writeConfig(Config& cfg) const | 671 | void MineField::writeConfig(Config& cfg) const |
672 | { | 672 | { |
673 | cfg.setGroup("Field"); | 673 | cfg.setGroup("Field"); |
674 | cfg.writeEntry("Level",lev); | 674 | cfg.writeEntry("Level",lev); |
675 | QString grid=""; | 675 | QString grid=""; |
676 | if ( stat == Playing ) { | 676 | if ( stat == Playing ) { |
677 | for ( int x = 0; x < numCols; x++ ) | 677 | for ( int x = 0; x < numCols; x++ ) |
678 | for ( int y = 0; y < numRows; y++ ) { | 678 | for ( int y = 0; y < numRows; y++ ) { |
679 | char code='A'+(x*17+y*101)%21; // Reduce the urge to cheat | 679 | char code='A'+(x*17+y*101)%21; // Reduce the urge to cheat |
680 | const Mine* m = mine( y, x ); | 680 | const Mine* m = mine( y, x ); |
681 | int st = (int)m->state(); if ( m->isMined() ) st+=5; | 681 | int st = (int)m->state(); if ( m->isMined() ) st+=5; |
682 | grid += code + st; | 682 | grid += code + st; |
683 | } | 683 | } |
684 | } | 684 | } |
685 | cfg.writeEntry("Grid",grid); | 685 | cfg.writeEntry("Grid",grid); |
686 | } | 686 | } |
687 | 687 | ||
688 | void MineField::readConfig(Config& cfg) | 688 | void MineField::readConfig(Config& cfg) |
689 | { | 689 | { |
690 | cfg.setGroup("Field"); | 690 | cfg.setGroup("Field"); |
691 | lev = cfg.readNumEntry("Level",1); | 691 | lev = cfg.readNumEntry("Level",1); |
692 | setup(lev); | 692 | setup(lev); |
693 | flagAction = NoAction; | 693 | flagAction = NoAction; |
694 | ignoreClick = FALSE; | 694 | ignoreClick = FALSE; |
695 | currRow = currCol = 0; | 695 | currRow = currCol = 0; |
696 | QString grid = cfg.readEntry("Grid"); | 696 | QString grid = cfg.readEntry("Grid"); |
697 | int x; | 697 | int x; |
698 | if ( !grid.isEmpty() ) { | 698 | if ( !grid.isEmpty() ) { |
699 | int i=0; | 699 | int i=0; |
700 | minecount=0; | 700 | minecount=0; |
701 | mineguess=0; | 701 | mineguess=0; |
702 | for ( x = 0; x < numCols; x++ ) { | 702 | for ( x = 0; x < numCols; x++ ) { |
703 | for ( int y = 0; y < numRows; y++ ) { | 703 | for ( int y = 0; y < numRows; y++ ) { |
704 | char code='A'+(x*17+y*101)%21; // Reduce the urge to cheat | 704 | char code='A'+(x*17+y*101)%21; // Reduce the urge to cheat |
705 | int st = (char)(QChar)grid[i++]-code; | 705 | int st = (char)(QChar)grid[i++]-code; |
706 | Mine* m = mine( y, x ); | 706 | Mine* m = mine( y, x ); |
707 | if (!m) | ||
708 | continue; | ||
707 | if ( st >= 5 ) { | 709 | if ( st >= 5 ) { |
708 | st-=5; | 710 | st-=5; |
709 | m->setMined(TRUE); | 711 | m->setMined(TRUE); |
710 | minecount++; | 712 | minecount++; |
711 | mineguess++; | 713 | mineguess++; |
712 | } | 714 | } |
713 | m->setState((Mine::MineState)st); | 715 | m->setState((Mine::MineState)st); |
714 | switch ( m->state() ) { | 716 | switch ( m->state() ) { |
715 | case Mine::Flagged: | 717 | case Mine::Flagged: |
716 | if (m->isMined()) | 718 | if (m->isMined()) |
717 | minecount--; | 719 | minecount--; |
718 | mineguess--; | 720 | mineguess--; |
719 | break; | 721 | break; |
720 | case Mine::Empty: | 722 | case Mine::Empty: |
721 | --nonminecount; | 723 | --nonminecount; |
722 | break; | 724 | break; |
723 | default: | 725 | default: |
724 | break; | 726 | break; |
725 | } | 727 | } |
726 | } | 728 | } |
727 | } | 729 | } |
728 | for ( x = 0; x < numCols; x++ ) { | 730 | for ( x = 0; x < numCols; x++ ) { |
729 | for ( int y = 0; y < numRows; y++ ) { | 731 | for ( int y = 0; y < numRows; y++ ) { |
730 | Mine* m = mine( y, x ); | 732 | Mine* m = mine( y, x ); |
731 | if ( m->state() == Mine::Empty ) | 733 | if ( m && m->state() == Mine::Empty ) |
732 | m->setHint(getHint(y,x)); | 734 | m->setHint(getHint(y,x)); |
733 | } | 735 | } |
734 | } | 736 | } |
735 | } | 737 | } |
736 | setState( Playing ); | 738 | setState( Playing ); |
737 | emit mineCount( mineguess ); | 739 | emit mineCount( mineguess ); |
738 | } | 740 | } |
739 | 741 | ||
740 | QSize MineField::sizeHint() const | 742 | QSize MineField::sizeHint() const |
741 | { | 743 | { |
742 | if ( qApp->desktop()->width() >= 240 ) | 744 | if ( qApp->desktop()->width() >= 240 ) |
743 | return QSize(200,200); | 745 | return QSize(200,200); |
744 | else | 746 | else |
745 | return QSize(160, 160); | 747 | return QSize(160, 160); |
746 | } | 748 | } |
747 | 749 | ||
diff --git a/noncore/net/opieirc/ircsession.cpp b/noncore/net/opieirc/ircsession.cpp index c8d7869..d87ff80 100644 --- a/noncore/net/opieirc/ircsession.cpp +++ b/noncore/net/opieirc/ircsession.cpp | |||
@@ -1,216 +1,218 @@ | |||
1 | 1 | ||
2 | #include "ircsession.h" | 2 | #include "ircsession.h" |
3 | #include "ircmessageparser.h" | 3 | #include "ircmessageparser.h" |
4 | #include "ircchannelperson.h" | 4 | #include "ircchannelperson.h" |
5 | #include "ircversion.h" | 5 | #include "ircversion.h" |
6 | 6 | ||
7 | IRCSession::IRCSession(QObject *parent, IRCServer *server) | 7 | IRCSession::IRCSession(QObject *parent, IRCServer *server) |
8 | : QObject(parent) | 8 | : QObject(parent) |
9 | { | 9 | { |
10 | m_server = server; | 10 | m_server = server; |
11 | m_connection = new IRCConnection(m_server); | 11 | m_connection = new IRCConnection(m_server); |
12 | m_parser = new IRCMessageParser(this); | 12 | m_parser = new IRCMessageParser(this); |
13 | connect(m_connection, SIGNAL(messageArrived(IRCMessage*)), this, SLOT(handleMessage(IRCMessage*))); | 13 | connect(m_connection, SIGNAL(messageArrived(IRCMessage*)), this, SLOT(handleMessage(IRCMessage*))); |
14 | connect(m_parser, SIGNAL(outputReady(IRCOutput)), this, SIGNAL(outputReady(IRCOutput))); | 14 | connect(m_parser, SIGNAL(outputReady(IRCOutput)), this, SIGNAL(outputReady(IRCOutput))); |
15 | connect(m_connection, SIGNAL(outputReady(IRCOutput)), this, SIGNAL(outputReady(IRCOutput))); | 15 | connect(m_connection, SIGNAL(outputReady(IRCOutput)), this, SIGNAL(outputReady(IRCOutput))); |
16 | } | 16 | } |
17 | 17 | ||
18 | IRCSession::~IRCSession() { | 18 | IRCSession::~IRCSession() { |
19 | /* We want this to get deleted automatically */ | 19 | /* We want this to get deleted automatically */ |
20 | m_channels.setAutoDelete(TRUE); | 20 | m_channels.setAutoDelete(TRUE); |
21 | m_people.setAutoDelete(TRUE); | 21 | m_people.setAutoDelete(TRUE); |
22 | 22 | ||
23 | delete m_parser; | 23 | delete m_parser; |
24 | delete m_connection; | 24 | delete m_connection; |
25 | } | 25 | } |
26 | 26 | ||
27 | void IRCSession::beginSession() { | 27 | void IRCSession::beginSession() { |
28 | m_connection->doConnect(); | 28 | m_connection->doConnect(); |
29 | } | 29 | } |
30 | 30 | ||
31 | void IRCSession::join(QString channelname) { | 31 | void IRCSession::join(QString channelname) { |
32 | m_connection->sendLine("JOIN " + channelname); | 32 | m_connection->sendLine("JOIN " + channelname); |
33 | } | 33 | } |
34 | 34 | ||
35 | void IRCSession::quit(){ | 35 | void IRCSession::quit(){ |
36 | m_connection->sendLine("QUIT :[OI] I'm too good to need a reason"); | 36 | m_connection->sendLine("QUIT :[OI] I'm too good to need a reason"); |
37 | } | 37 | } |
38 | 38 | ||
39 | void IRCSession::quit(QString message){ | 39 | void IRCSession::quit(QString message){ |
40 | m_connection->sendLine("QUIT :" + message); | 40 | m_connection->sendLine("QUIT :" + message); |
41 | } | 41 | } |
42 | 42 | ||
43 | void IRCSession::topic(IRCChannel *channel, QString message){ | 43 | void IRCSession::topic(IRCChannel *channel, QString message){ |
44 | m_connection->sendLine("TOPIC :" + channel->channelname() + " " + message); | 44 | m_connection->sendLine("TOPIC :" + channel->channelname() + " " + message); |
45 | } | 45 | } |
46 | 46 | ||
47 | void IRCSession::mode(IRCChannel *channel, QString message){ | 47 | void IRCSession::mode(IRCChannel *channel, QString message){ |
48 | m_connection->sendLine("MODE " + channel->channelname() + " " + message); | 48 | m_connection->sendLine("MODE " + channel->channelname() + " " + message); |
49 | } | 49 | } |
50 | 50 | ||
51 | void IRCSession::mode(IRCPerson *person, QString message){ | 51 | void IRCSession::mode(IRCPerson *person, QString message){ |
52 | m_connection->sendLine("MODE " + person->nick() + " " + message); | 52 | m_connection->sendLine("MODE " + person->nick() + " " + message); |
53 | } | 53 | } |
54 | 54 | ||
55 | void IRCSession::mode(QString message){ | 55 | void IRCSession::mode(QString message){ |
56 | m_connection->sendLine("MODE " + message); | 56 | m_connection->sendLine("MODE " + message); |
57 | } | 57 | } |
58 | 58 | ||
59 | void IRCSession::raw(QString message){ | 59 | void IRCSession::raw(QString message){ |
60 | m_connection->sendLine(message); | 60 | m_connection->sendLine(message); |
61 | } | 61 | } |
62 | 62 | ||
63 | void IRCSession::kick(IRCChannel *channel, IRCPerson *person) { | 63 | void IRCSession::kick(IRCChannel *channel, IRCPerson *person) { |
64 | m_connection->sendLine("KICK " + channel->channelname() + " " + person->nick() +" :0wn3d - no reason"); | 64 | m_connection->sendLine("KICK " + channel->channelname() + " " + person->nick() +" :0wn3d - no reason"); |
65 | } | 65 | } |
66 | 66 | ||
67 | void IRCSession::op(IRCChannel *channel, IRCPerson *person) { | 67 | void IRCSession::op(IRCChannel *channel, IRCPerson *person) { |
68 | m_connection->sendLine("MODE " + channel->channelname() + " +ooo " + person->nick()); | 68 | m_connection->sendLine("MODE " + channel->channelname() + " +ooo " + person->nick()); |
69 | } | 69 | } |
70 | 70 | ||
71 | void IRCSession::kick(IRCChannel *channel, IRCPerson *person, QString message) { | 71 | void IRCSession::kick(IRCChannel *channel, IRCPerson *person, QString message) { |
72 | m_connection->sendLine("KICK " + channel->channelname() + " " + person->nick() +" :" + message); | 72 | m_connection->sendLine("KICK " + channel->channelname() + " " + person->nick() +" :" + message); |
73 | } | 73 | } |
74 | 74 | ||
75 | void IRCSession::sendMessage(IRCPerson *person, QString message) { | 75 | void IRCSession::sendMessage(IRCPerson *person, QString message) { |
76 | m_connection->sendLine("PRIVMSG " + person->nick() + " :" + message); | 76 | m_connection->sendLine("PRIVMSG " + person->nick() + " :" + message); |
77 | } | 77 | } |
78 | 78 | ||
79 | void IRCSession::sendMessage(IRCChannel *channel, QString message) { | 79 | void IRCSession::sendMessage(IRCChannel *channel, QString message) { |
80 | m_connection->sendLine("PRIVMSG " + channel->channelname() + " :" + message); | 80 | m_connection->sendLine("PRIVMSG " + channel->channelname() + " :" + message); |
81 | } | 81 | } |
82 | 82 | ||
83 | void IRCSession::sendAction(IRCChannel *channel, QString message) { | 83 | void IRCSession::sendAction(IRCChannel *channel, QString message) { |
84 | m_connection->sendLine("PRIVMSG " + channel->channelname() + " :\001ACTION " + message + "\001"); | 84 | m_connection->sendLine("PRIVMSG " + channel->channelname() + " :\001ACTION " + message + "\001"); |
85 | } | 85 | } |
86 | 86 | ||
87 | void IRCSession::sendAction(IRCPerson *person, QString message) { | 87 | void IRCSession::sendAction(IRCPerson *person, QString message) { |
88 | m_connection->sendLine("PRIVMSG " + person->nick() + " :\001ACTION " + message + "\001"); | 88 | m_connection->sendLine("PRIVMSG " + person->nick() + " :\001ACTION " + message + "\001"); |
89 | } | 89 | } |
90 | 90 | ||
91 | bool IRCSession::isSessionActive() { | 91 | bool IRCSession::isSessionActive() { |
92 | return m_connection->isConnected(); | 92 | return m_connection->isConnected(); |
93 | } | 93 | } |
94 | 94 | ||
95 | bool IRCSession::isLoggedIn() { | 95 | bool IRCSession::isLoggedIn() { |
96 | return m_connection->isLoggedIn(); | 96 | return m_connection->isLoggedIn(); |
97 | } | 97 | } |
98 | 98 | ||
99 | void IRCSession::endSession() { | 99 | void IRCSession::endSession() { |
100 | if (m_connection->isLoggedIn()) | 100 | if (m_connection->isLoggedIn()) |
101 | quit(APP_VERSION); | 101 | quit(APP_VERSION); |
102 | else | 102 | else |
103 | m_connection->close(); | 103 | m_connection->close(); |
104 | } | 104 | } |
105 | 105 | ||
106 | void IRCSession::part(IRCChannel *channel) { | 106 | void IRCSession::part(IRCChannel *channel) { |
107 | m_connection->sendLine("PART " + channel->channelname() + " :" + APP_VERSION); | 107 | m_connection->sendLine("PART " + channel->channelname() + " :" + APP_VERSION); |
108 | } | 108 | } |
109 | 109 | ||
110 | void IRCSession::setValidUsermodes(const QString &modes) { | 110 | void IRCSession::setValidUsermodes(const QString &modes) { |
111 | m_validUsermodes = modes; | 111 | m_validUsermodes = modes; |
112 | } | 112 | } |
113 | 113 | ||
114 | void IRCSession::setValidChannelmodes(const QString &modes) { | 114 | void IRCSession::setValidChannelmodes(const QString &modes) { |
115 | m_validChannelmodes = modes; | 115 | m_validChannelmodes = modes; |
116 | } | 116 | } |
117 | 117 | ||
118 | void IRCSession::updateNickname(const QString &oldNickname, const QString &newNickname) { | 118 | void IRCSession::updateNickname(const QString &oldNickname, const QString &newNickname) { |
119 | QList<IRCChannel> channels; | 119 | QList<IRCChannel> channels; |
120 | IRCOutput output; | 120 | IRCOutput output; |
121 | 121 | ||
122 | if (oldNickname == m_server->nick()) { | 122 | if (oldNickname == m_server->nick()) { |
123 | m_server->setNick(newNickname); | 123 | m_server->setNick(newNickname); |
124 | output = IRCOutput(OUTPUT_NICKCHANGE, tr("You are now known as %1").arg(newNickname)); | 124 | output = IRCOutput(OUTPUT_NICKCHANGE, tr("You are now known as %1").arg(newNickname)); |
125 | channels = m_channels; | 125 | channels = m_channels; |
126 | } | 126 | } |
127 | 127 | ||
128 | else { | 128 | else { |
129 | IRCPerson *person = getPerson(oldNickname); | 129 | IRCPerson *person = getPerson(oldNickname); |
130 | 130 | ||
131 | if(!person) { | 131 | if(!person) { |
132 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Nickname change of an unknown person"))); | 132 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Nickname change of an unknown person"))); |
133 | return; | 133 | return; |
134 | } | 134 | } |
135 | 135 | ||
136 | getChannelsByPerson(person, channels); | 136 | getChannelsByPerson(person, channels); |
137 | output = IRCOutput(OUTPUT_NICKCHANGE, tr("%1 is now known as %2").arg(oldNickname).arg(newNickname)); | 137 | output = IRCOutput(OUTPUT_NICKCHANGE, tr("%1 is now known as %2").arg(oldNickname).arg(newNickname)); |
138 | } | 138 | } |
139 | 139 | ||
140 | QListIterator<IRCChannel> it(channels); | 140 | QListIterator<IRCChannel> it(channels); |
141 | for (;it.current(); ++it) { | 141 | for (;it.current(); ++it) { |
142 | IRCChannelPerson *chanperson = it.current()->getPerson(oldNickname); | 142 | IRCChannelPerson *chanperson = it.current()->getPerson(oldNickname); |
143 | it.current()->removePerson(chanperson); | 143 | if (chanperson) { |
144 | chanperson->setNick(newNickname); | 144 | it.current()->removePerson(chanperson); |
145 | it.current()->addPerson(chanperson); | 145 | chanperson->setNick(newNickname); |
146 | it.current()->addPerson(chanperson); | ||
147 | } | ||
146 | } | 148 | } |
147 | 149 | ||
148 | emit updateChannels(); | 150 | emit updateChannels(); |
149 | output.addParam(new QString(newNickname)); | 151 | output.addParam(new QString(newNickname)); |
150 | emit outputReady(output); | 152 | emit outputReady(output); |
151 | } | 153 | } |
152 | 154 | ||
153 | IRCChannel *IRCSession::getChannel(QString channelname) { | 155 | IRCChannel *IRCSession::getChannel(QString channelname) { |
154 | QListIterator<IRCChannel> it(m_channels); | 156 | QListIterator<IRCChannel> it(m_channels); |
155 | for (; it.current(); ++it) { | 157 | for (; it.current(); ++it) { |
156 | if (it.current()->channelname() == channelname) { | 158 | if (it.current()->channelname() == channelname) { |
157 | return it.current(); | 159 | return it.current(); |
158 | } | 160 | } |
159 | } | 161 | } |
160 | return 0; | 162 | return 0; |
161 | } | 163 | } |
162 | 164 | ||
163 | IRCPerson *IRCSession::getPerson(QString nickname) { | 165 | IRCPerson *IRCSession::getPerson(QString nickname) { |
164 | QListIterator<IRCPerson> it(m_people); | 166 | QListIterator<IRCPerson> it(m_people); |
165 | for (; it.current(); ++it) { | 167 | for (; it.current(); ++it) { |
166 | if (it.current()->nick() == nickname) { | 168 | if (it.current()->nick() == nickname) { |
167 | return it.current(); | 169 | return it.current(); |
168 | } | 170 | } |
169 | } | 171 | } |
170 | return 0; | 172 | return 0; |
171 | } | 173 | } |
172 | 174 | ||
173 | void IRCSession::getChannelsByPerson(IRCPerson *person, QList<IRCChannel> &channels) { | 175 | void IRCSession::getChannelsByPerson(IRCPerson *person, QList<IRCChannel> &channels) { |
174 | QListIterator<IRCChannel> it(m_channels); | 176 | QListIterator<IRCChannel> it(m_channels); |
175 | for (; it.current(); ++it) { | 177 | for (; it.current(); ++it) { |
176 | if (it.current()->getPerson(person->nick()) != 0) { | 178 | if (it.current()->getPerson(person->nick()) != 0) { |
177 | channels.append(it.current()); | 179 | channels.append(it.current()); |
178 | } | 180 | } |
179 | } | 181 | } |
180 | } | 182 | } |
181 | 183 | ||
182 | void IRCSession::addPerson(IRCPerson *person) { | 184 | void IRCSession::addPerson(IRCPerson *person) { |
183 | m_people.append(person); | 185 | m_people.append(person); |
184 | } | 186 | } |
185 | 187 | ||
186 | void IRCSession::addChannel(IRCChannel *channel) { | 188 | void IRCSession::addChannel(IRCChannel *channel) { |
187 | m_channels.append(channel); | 189 | m_channels.append(channel); |
188 | } | 190 | } |
189 | 191 | ||
190 | void IRCSession::removeChannel(IRCChannel *channel) { | 192 | void IRCSession::removeChannel(IRCChannel *channel) { |
191 | m_channels.remove(channel); | 193 | m_channels.remove(channel); |
192 | } | 194 | } |
193 | 195 | ||
194 | void IRCSession::removePerson(IRCPerson *person) { | 196 | void IRCSession::removePerson(IRCPerson *person) { |
195 | m_people.remove(person); | 197 | m_people.remove(person); |
196 | } | 198 | } |
197 | 199 | ||
198 | void IRCSession::handleMessage(IRCMessage *message) { | 200 | void IRCSession::handleMessage(IRCMessage *message) { |
199 | m_parser->parse(message); | 201 | m_parser->parse(message); |
200 | } | 202 | } |
201 | 203 | ||
202 | void IRCSession::whois(const QString &nickname) { | 204 | void IRCSession::whois(const QString &nickname) { |
203 | m_connection->whois(nickname); | 205 | m_connection->whois(nickname); |
204 | } | 206 | } |
205 | 207 | ||
206 | void IRCSession::sendCTCPPing(const QString &nickname) { | 208 | void IRCSession::sendCTCPPing(const QString &nickname) { |
207 | m_connection->sendCTCPPing(nickname); | 209 | m_connection->sendCTCPPing(nickname); |
208 | } | 210 | } |
209 | 211 | ||
210 | void IRCSession::sendCTCPRequest(const QString &nickname, const QString &type, const QString &args) { | 212 | void IRCSession::sendCTCPRequest(const QString &nickname, const QString &type, const QString &args) { |
211 | m_connection->sendCTCPRequest(nickname, type, args); | 213 | m_connection->sendCTCPRequest(nickname, type, args); |
212 | } | 214 | } |
213 | 215 | ||
214 | void IRCSession::sendCTCPReply(const QString &nickname, const QString &type, const QString &args) { | 216 | void IRCSession::sendCTCPReply(const QString &nickname, const QString &type, const QString &args) { |
215 | m_connection->sendCTCPReply(nickname, type, args); | 217 | m_connection->sendCTCPReply(nickname, type, args); |
216 | } | 218 | } |
diff --git a/noncore/todayplugins/stockticker/libstocks/csv.c b/noncore/todayplugins/stockticker/libstocks/csv.c index 6170bed..86d8607 100644 --- a/noncore/todayplugins/stockticker/libstocks/csv.c +++ b/noncore/todayplugins/stockticker/libstocks/csv.c | |||
@@ -125,281 +125,282 @@ stock *parse_csv_file(char *csv) | |||
125 | /* if 4 "N/A" then ok because Mutual funds have */ | 125 | /* if 4 "N/A" then ok because Mutual funds have */ |
126 | /* if 5 "N/A" then ok because currencies have */ | 126 | /* if 5 "N/A" then ok because currencies have */ |
127 | /* So if >5 then stock not valid */ | 127 | /* So if >5 then stock not valid */ |
128 | 128 | ||
129 | test = line; | 129 | test = line; |
130 | valid = 0; | 130 | valid = 0; |
131 | while ( (test = strstr(test, "N/A")) ) | 131 | while ( (test = strstr(test, "N/A")) ) |
132 | { | 132 | { |
133 | valid ++; | 133 | valid ++; |
134 | test = test +3; | 134 | test = test +3; |
135 | } | 135 | } |
136 | 136 | ||
137 | if (valid < 6) | 137 | if (valid < 6) |
138 | { | 138 | { |
139 | /* This Symbol is valid */ | 139 | /* This Symbol is valid */ |
140 | 140 | ||
141 | StockPtr = malloc_stock(); | 141 | StockPtr = malloc_stock(); |
142 | 142 | ||
143 | ptr = csv_strtok(line, ","); | 143 | ptr = csv_strtok(line, ","); |
144 | if (!ptr) return 0; | 144 | if (!ptr) return 0; |
145 | 145 | ||
146 | symbol = (char *)malloc(strlen(ptr)+1); | 146 | symbol = (char *)malloc(strlen(ptr)+1); |
147 | if (symbol==NULL) | 147 | if (symbol==NULL) |
148 | { | 148 | { |
149 | fprintf(stderr,"Memory allocating error (%s line %d)\n" | 149 | fprintf(stderr,"Memory allocating error (%s line %d)\n" |
150 | ,__FILE__, __LINE__); | 150 | ,__FILE__, __LINE__); |
151 | exit(1); | 151 | exit(1); |
152 | } | 152 | } |
153 | strcpy((char *)(symbol), ptr); | 153 | strcpy((char *)(symbol), ptr); |
154 | StockPtr->Symbol = symbol; | 154 | StockPtr->Symbol = symbol; |
155 | 155 | ||
156 | ptr = csv_strtok(NULL, ","); | 156 | ptr = csv_strtok(NULL, ","); |
157 | if (!ptr) return 0; | 157 | if (!ptr) return 0; |
158 | 158 | ||
159 | name = (char *)malloc(strlen(ptr)+1); | 159 | name = (char *)malloc(strlen(ptr)+1); |
160 | if (name==NULL) | 160 | if (name==NULL) |
161 | { | 161 | { |
162 | fprintf(stderr,"Memory allocating error (%s line %d)\n" | 162 | fprintf(stderr,"Memory allocating error (%s line %d)\n" |
163 | ,__FILE__, __LINE__); | 163 | ,__FILE__, __LINE__); |
164 | exit(1); | 164 | exit(1); |
165 | } | 165 | } |
166 | strcpy((char *)(name), ptr); | 166 | strcpy((char *)(name), ptr); |
167 | StockPtr->Name = name; | 167 | StockPtr->Name = name; |
168 | 168 | ||
169 | ptr = csv_strtok(NULL, ","); | 169 | ptr = csv_strtok(NULL, ","); |
170 | if (!ptr) return 0; | 170 | if (!ptr) return 0; |
171 | sscanf(ptr,"%f",&(StockPtr->CurrentPrice)); | 171 | sscanf(ptr,"%f",&(StockPtr->CurrentPrice)); |
172 | 172 | ||
173 | ptr = csv_strtok(NULL, ","); | 173 | ptr = csv_strtok(NULL, ","); |
174 | if (!ptr) return 0; | 174 | if (!ptr) return 0; |
175 | 175 | ||
176 | date = (char *)malloc(strlen(ptr)+1); | 176 | date = (char *)malloc(strlen(ptr)+1); |
177 | if (date==NULL) | 177 | if (date==NULL) |
178 | { | 178 | { |
179 | fprintf(stderr,"Memory allocating error (%s line %d)\n" | 179 | fprintf(stderr,"Memory allocating error (%s line %d)\n" |
180 | ,__FILE__, __LINE__); | 180 | ,__FILE__, __LINE__); |
181 | exit(1); | 181 | exit(1); |
182 | } | 182 | } |
183 | strcpy((char *)(date), ptr); | 183 | strcpy((char *)(date), ptr); |
184 | StockPtr->Date = date; | 184 | StockPtr->Date = date; |
185 | 185 | ||
186 | ptr = csv_strtok(NULL, ","); | 186 | ptr = csv_strtok(NULL, ","); |
187 | if (!ptr) return 0; | 187 | if (!ptr) return 0; |
188 | 188 | ||
189 | time = (char *)malloc(strlen(ptr)+1); | 189 | time = (char *)malloc(strlen(ptr)+1); |
190 | if (time==NULL) | 190 | if (time==NULL) |
191 | { | 191 | { |
192 | fprintf(stderr,"Memory allocating error (%s line %d)\n" | 192 | fprintf(stderr,"Memory allocating error (%s line %d)\n" |
193 | ,__FILE__, __LINE__); | 193 | ,__FILE__, __LINE__); |
194 | exit(1); | 194 | exit(1); |
195 | } | 195 | } |
196 | strcpy((char *)(time), ptr); | 196 | strcpy((char *)(time), ptr); |
197 | StockPtr->Time = time; | 197 | StockPtr->Time = time; |
198 | 198 | ||
199 | ptr = csv_strtok(NULL, ","); | 199 | ptr = csv_strtok(NULL, ","); |
200 | if (!ptr) return 0; | 200 | if (!ptr) return 0; |
201 | sscanf(ptr,"%f",&(StockPtr->Variation)); | 201 | sscanf(ptr,"%f",&(StockPtr->Variation)); |
202 | 202 | ||
203 | StockPtr->Pourcentage = 100 * StockPtr->Variation / | 203 | StockPtr->Pourcentage = 100 * StockPtr->Variation / |
204 | (StockPtr->CurrentPrice - StockPtr->Variation); | 204 | (StockPtr->CurrentPrice - StockPtr->Variation); |
205 | 205 | ||
206 | StockPtr->LastPrice = StockPtr->CurrentPrice - StockPtr->Variation; | 206 | StockPtr->LastPrice = StockPtr->CurrentPrice - StockPtr->Variation; |
207 | 207 | ||
208 | ptr = csv_strtok(NULL, ","); | 208 | ptr = csv_strtok(NULL, ","); |
209 | if (!ptr) return 0; | 209 | if (!ptr) return 0; |
210 | sscanf(ptr,"%f",&(StockPtr->OpenPrice)); | 210 | sscanf(ptr,"%f",&(StockPtr->OpenPrice)); |
211 | 211 | ||
212 | ptr = csv_strtok(NULL, ","); | 212 | ptr = csv_strtok(NULL, ","); |
213 | if (!ptr) return 0; | 213 | if (!ptr) return 0; |
214 | sscanf(ptr,"%f",&(StockPtr->MaxPrice)); | 214 | sscanf(ptr,"%f",&(StockPtr->MaxPrice)); |
215 | 215 | ||
216 | ptr = csv_strtok(NULL, ","); | 216 | ptr = csv_strtok(NULL, ","); |
217 | if (!ptr) return 0; | 217 | if (!ptr) return 0; |
218 | sscanf(ptr,"%f",&(StockPtr->MinPrice)); | 218 | sscanf(ptr,"%f",&(StockPtr->MinPrice)); |
219 | 219 | ||
220 | ptr = csv_strtok(NULL, ","); | 220 | ptr = csv_strtok(NULL, ","); |
221 | if (!ptr) return 0; | 221 | if (!ptr) return 0; |
222 | StockPtr->Volume = atoi(ptr); | 222 | StockPtr->Volume = atoi(ptr); |
223 | 223 | ||
224 | if( !FirstStockPtr ) | 224 | if( !FirstStockPtr ) |
225 | { | 225 | { |
226 | FirstStockPtr = StockPtr; | 226 | FirstStockPtr = StockPtr; |
227 | StockPtr->PreviousStock = 0; | 227 | StockPtr->PreviousStock = 0; |
228 | } | 228 | } |
229 | 229 | ||
230 | StockPtr->NextStock = 0; | 230 | StockPtr->NextStock = 0; |
231 | 231 | ||
232 | if (LastStockPtr) | 232 | if (LastStockPtr) |
233 | { | 233 | { |
234 | LastStockPtr->NextStock = StockPtr; | 234 | LastStockPtr->NextStock = StockPtr; |
235 | StockPtr->PreviousStock = LastStockPtr; | 235 | StockPtr->PreviousStock = LastStockPtr; |
236 | } | 236 | } |
237 | 237 | ||
238 | LastStockPtr = StockPtr; | 238 | LastStockPtr = StockPtr; |
239 | 239 | ||
240 | } | 240 | } |
241 | else | 241 | else |
242 | { | 242 | { |
243 | /* this symbol is not valid */ | 243 | /* this symbol is not valid */ |
244 | /* Set the stock struct just with Symbol, all other are NULL */ | 244 | /* Set the stock struct just with Symbol, all other are NULL */ |
245 | /* This can be used to see if the symbol has been reached are not */ | 245 | /* This can be used to see if the symbol has been reached are not */ |
246 | 246 | ||
247 | StockPtr = malloc_stock(); | 247 | StockPtr = malloc_stock(); |
248 | 248 | ||
249 | ptr = csv_strtok(line, ","); | 249 | ptr = csv_strtok(line, ","); |
250 | if (!ptr) return 0; | 250 | if (!ptr) return 0; |
251 | 251 | ||
252 | symbol = (char *)malloc(strlen(ptr)+1); | 252 | symbol = (char *)malloc(strlen(ptr)+1); |
253 | if (symbol==NULL) | 253 | if (symbol==NULL) |
254 | { | 254 | { |
255 | fprintf(stderr,"Memory allocating error (%s line %d)\n" | 255 | fprintf(stderr,"Memory allocating error (%s line %d)\n" |
256 | ,__FILE__, __LINE__); | 256 | ,__FILE__, __LINE__); |
257 | exit(1); | 257 | exit(1); |
258 | } | 258 | } |
259 | strcpy((char *)(symbol), ptr); | 259 | strcpy((char *)(symbol), ptr); |
260 | StockPtr->Symbol = symbol; | 260 | StockPtr->Symbol = symbol; |
261 | 261 | ||
262 | if( !FirstStockPtr ) | 262 | if( !FirstStockPtr ) |
263 | { | 263 | { |
264 | FirstStockPtr = StockPtr; | 264 | FirstStockPtr = StockPtr; |
265 | StockPtr->PreviousStock = 0; | 265 | StockPtr->PreviousStock = 0; |
266 | } | 266 | } |
267 | 267 | ||
268 | StockPtr->NextStock = 0; | 268 | StockPtr->NextStock = 0; |
269 | 269 | ||
270 | if (LastStockPtr) | 270 | if (LastStockPtr) |
271 | { | 271 | { |
272 | LastStockPtr->NextStock = StockPtr; | 272 | LastStockPtr->NextStock = StockPtr; |
273 | StockPtr->PreviousStock = LastStockPtr; | 273 | StockPtr->PreviousStock = LastStockPtr; |
274 | } | 274 | } |
275 | 275 | ||
276 | LastStockPtr = StockPtr; | 276 | LastStockPtr = StockPtr; |
277 | } | 277 | } |
278 | 278 | ||
279 | end_line++; | 279 | end_line++; |
280 | line = end_line; | 280 | line = end_line; |
281 | 281 | ||
282 | } | 282 | } |
283 | 283 | ||
284 | return (FirstStockPtr); | 284 | return (FirstStockPtr); |
285 | } | 285 | } |
286 | 286 | ||
287 | /*****************************************************************************/ | 287 | /*****************************************************************************/ |
288 | /* Parses the history quotes file and return a stock structure list. */ | 288 | /* Parses the history quotes file and return a stock structure list. */ |
289 | /*****************************************************************************/ | 289 | /*****************************************************************************/ |
290 | stock *parse_csv_history_file(char *csv_file) | 290 | stock *parse_csv_history_file(char *csv_file) |
291 | { | 291 | { |
292 | 292 | ||
293 | char *line; | 293 | char *line; |
294 | char *end_line; | 294 | char *end_line; |
295 | char *ptr; | 295 | char *ptr; |
296 | 296 | ||
297 | int day; | 297 | int day; |
298 | char smonth[10]; | 298 | char smonth[10]; |
299 | int month; | 299 | int month; |
300 | int year; | 300 | int year; |
301 | 301 | ||
302 | char *date; | 302 | char *date; |
303 | 303 | ||
304 | int i; | 304 | int i; |
305 | int test; | 305 | int test; |
306 | 306 | ||
307 | stock *StockPtr=NULL; | 307 | stock *StockPtr=NULL; |
308 | stock *LastStockPtr=NULL; | 308 | stock *LastStockPtr=NULL; |
309 | 309 | ||
310 | /* Used to return the pointer to the list */ | 310 | /* Used to return the pointer to the list */ |
311 | stock *FirstStockPtr=NULL; | 311 | stock *FirstStockPtr=NULL; |
312 | 312 | ||
313 | line = csv_file; | 313 | line = csv_file; |
314 | end_line = csv_file; | 314 | end_line = csv_file; |
315 | 315 | ||
316 | /* do not use the first line */ | 316 | /* do not use the first line */ |
317 | end_line = strstr(line, "\n"); | 317 | if (!(end_line = strstr(line, "\n"))) |
318 | return 0; | ||
318 | *end_line = 0; | 319 | *end_line = 0; |
319 | end_line++; | 320 | end_line++; |
320 | line = end_line; | 321 | line = end_line; |
321 | 322 | ||
322 | while ((end_line = strstr(line, "\n"))) | 323 | while ((end_line = strstr(line, "\n"))) |
323 | { | 324 | { |
324 | *end_line = 0; | 325 | *end_line = 0; |
325 | 326 | ||
326 | StockPtr = malloc_stock(); | 327 | StockPtr = malloc_stock(); |
327 | 328 | ||
328 | /* Date */ | 329 | /* Date */ |
329 | ptr = strtok(line, ","); | 330 | ptr = strtok(line, ","); |
330 | if (!ptr) return 0; | 331 | if (!ptr) return 0; |
331 | 332 | ||
332 | sscanf(ptr,"%d-%3s-%d",&day,smonth,&year); | 333 | sscanf(ptr,"%d-%3s-%d",&day,smonth,&year); |
333 | 334 | ||
334 | i=0; | 335 | i=0; |
335 | 336 | ||
336 | #ifdef __UNIX__ | 337 | #ifdef __UNIX__ |
337 | while((test=strcasecmp(months[i], smonth))) i++; | 338 | while((test=strcasecmp(months[i], smonth))) i++; |
338 | #elif __WINDOWS__ | 339 | #elif __WINDOWS__ |
339 | while(test=_mbsnbicmp(months[i], smonth, strlen(months[i]))) i++; | 340 | while(test=_mbsnbicmp(months[i], smonth, strlen(months[i]))) i++; |
340 | #endif | 341 | #endif |
341 | 342 | ||
342 | month = i+1; | 343 | month = i+1; |
343 | 344 | ||
344 | date = (char *)malloc(DATE_LENGTH); | 345 | date = (char *)malloc(DATE_LENGTH); |
345 | if (date==NULL) | 346 | if (date==NULL) |
346 | { | 347 | { |
347 | fprintf(stderr,"Memory allocating error (%s line %d)\n" | 348 | fprintf(stderr,"Memory allocating error (%s line %d)\n" |
348 | ,__FILE__, __LINE__); | 349 | ,__FILE__, __LINE__); |
349 | exit(1); | 350 | exit(1); |
350 | } | 351 | } |
351 | sprintf(date,"%.2d%.2d%.2d", year, month, day); | 352 | sprintf(date,"%.2d%.2d%.2d", year, month, day); |
352 | StockPtr->Date = date; | 353 | StockPtr->Date = date; |
353 | 354 | ||
354 | /* Open */ | 355 | /* Open */ |
355 | ptr = strtok(NULL, ","); | 356 | ptr = strtok(NULL, ","); |
356 | if (!ptr) return 0; | 357 | if (!ptr) return 0; |
357 | sscanf(ptr,"%f",&(StockPtr->OpenPrice)); | 358 | sscanf(ptr,"%f",&(StockPtr->OpenPrice)); |
358 | 359 | ||
359 | /* High */ | 360 | /* High */ |
360 | ptr = strtok(NULL, ","); | 361 | ptr = strtok(NULL, ","); |
361 | if (!ptr) return 0; | 362 | if (!ptr) return 0; |
362 | sscanf(ptr,"%f",&(StockPtr->MaxPrice)); | 363 | sscanf(ptr,"%f",&(StockPtr->MaxPrice)); |
363 | 364 | ||
364 | /* Low */ | 365 | /* Low */ |
365 | ptr = strtok(NULL, ","); | 366 | ptr = strtok(NULL, ","); |
366 | if (!ptr) return 0; | 367 | if (!ptr) return 0; |
367 | sscanf(ptr,"%f",&(StockPtr->MinPrice)); | 368 | sscanf(ptr,"%f",&(StockPtr->MinPrice)); |
368 | 369 | ||
369 | /* Close */ | 370 | /* Close */ |
370 | ptr = strtok(NULL, ","); | 371 | ptr = strtok(NULL, ","); |
371 | if (!ptr) return 0; | 372 | if (!ptr) return 0; |
372 | sscanf(ptr,"%f",&(StockPtr->LastPrice)); | 373 | sscanf(ptr,"%f",&(StockPtr->LastPrice)); |
373 | 374 | ||
374 | /* Volume */ | 375 | /* Volume */ |
375 | 376 | ||
376 | ptr = strtok(NULL, ","); | 377 | ptr = strtok(NULL, ","); |
377 | if (!ptr) | 378 | if (!ptr) |
378 | /* It seems to be an indice */ | 379 | /* It seems to be an indice */ |
379 | /* No volume for indices */ | 380 | /* No volume for indices */ |
380 | StockPtr->Volume = 0; | 381 | StockPtr->Volume = 0; |
381 | else | 382 | else |
382 | StockPtr->Volume = atoi(ptr); | 383 | StockPtr->Volume = atoi(ptr); |
383 | 384 | ||
384 | if( !FirstStockPtr ) | 385 | if( !FirstStockPtr ) |
385 | { | 386 | { |
386 | FirstStockPtr = StockPtr; | 387 | FirstStockPtr = StockPtr; |
387 | StockPtr->PreviousStock = 0; | 388 | StockPtr->PreviousStock = 0; |
388 | } | 389 | } |
389 | 390 | ||
390 | StockPtr->NextStock = 0; | 391 | StockPtr->NextStock = 0; |
391 | 392 | ||
392 | if (LastStockPtr) | 393 | if (LastStockPtr) |
393 | { | 394 | { |
394 | LastStockPtr->NextStock = StockPtr; | 395 | LastStockPtr->NextStock = StockPtr; |
395 | StockPtr->PreviousStock = LastStockPtr; | 396 | StockPtr->PreviousStock = LastStockPtr; |
396 | } | 397 | } |
397 | 398 | ||
398 | LastStockPtr = StockPtr; | 399 | LastStockPtr = StockPtr; |
399 | 400 | ||
400 | end_line++; | 401 | end_line++; |
401 | line = end_line; | 402 | line = end_line; |
402 | } | 403 | } |
403 | 404 | ||
404 | return (FirstStockPtr); | 405 | return (FirstStockPtr); |
405 | } | 406 | } |