summaryrefslogtreecommitdiff
path: root/noncore/todayplugins
authorllornkcor <llornkcor>2002-10-31 00:09:31 (UTC)
committer llornkcor <llornkcor>2002-10-31 00:09:31 (UTC)
commit5a08fd92ac139820e1a1202d0b4b67190f24ccdb (patch) (side-by-side diff)
treee9c0692cf445a886cd529b60f8e535922a7f5d4d /noncore/todayplugins
parentad396dd7b58fc772423f95be050f645fc7a6d9b9 (diff)
downloadopie-5a08fd92ac139820e1a1202d0b4b67190f24ccdb.zip
opie-5a08fd92ac139820e1a1202d0b4b67190f24ccdb.tar.gz
opie-5a08fd92ac139820e1a1202d0b4b67190f24ccdb.tar.bz2
added - initial check in
Diffstat (limited to 'noncore/todayplugins') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/todayplugins/stockticker/libstocks/.cvsignore3
-rw-r--r--noncore/todayplugins/stockticker/libstocks/csv.c402
-rw-r--r--noncore/todayplugins/stockticker/libstocks/csv.h36
-rw-r--r--noncore/todayplugins/stockticker/libstocks/currency.c66
-rw-r--r--noncore/todayplugins/stockticker/libstocks/history.c149
-rw-r--r--noncore/todayplugins/stockticker/libstocks/http.c300
-rw-r--r--noncore/todayplugins/stockticker/libstocks/http.h35
-rw-r--r--noncore/todayplugins/stockticker/libstocks/lists.c123
-rw-r--r--noncore/todayplugins/stockticker/libstocks/lists.h35
-rw-r--r--noncore/todayplugins/stockticker/libstocks/stocks.c347
-rw-r--r--noncore/todayplugins/stockticker/libstocks/stocks.h116
-rw-r--r--noncore/todayplugins/stockticker/opie-today-stocktickerplugin.control8
-rw-r--r--noncore/todayplugins/stockticker/stockticker.pro2
-rw-r--r--noncore/todayplugins/stockticker/stockticker/.cvsignore3
-rw-r--r--noncore/todayplugins/stockticker/stockticker/inputDialog.cpp143
-rw-r--r--noncore/todayplugins/stockticker/stockticker/inputDialog.h30
-rw-r--r--noncore/todayplugins/stockticker/stockticker/main.cpp25
-rw-r--r--noncore/todayplugins/stockticker/stockticker/stockticker.pro10
-rw-r--r--noncore/todayplugins/stockticker/stocktickerlib/.cvsignore3
-rw-r--r--noncore/todayplugins/stockticker/stocktickerlib/stocktickerlib.pro27
-rw-r--r--noncore/todayplugins/stockticker/stocktickerlib/stocktickerplugin.cpp56
-rw-r--r--noncore/todayplugins/stockticker/stocktickerlib/stocktickerplugin.h47
-rw-r--r--noncore/todayplugins/stockticker/stocktickerlib/stocktickerpluginimpl.cpp45
-rw-r--r--noncore/todayplugins/stockticker/stocktickerlib/stocktickerpluginimpl.h40
-rw-r--r--noncore/todayplugins/stockticker/stocktickerlib/stocktickerpluginwidget.cpp239
-rw-r--r--noncore/todayplugins/stockticker/stocktickerlib/stocktickerpluginwidget.h62
-rw-r--r--noncore/todayplugins/stockticker/stocktickerlib/stocktimerpluginwidget.h45
-rw-r--r--noncore/todayplugins/stockticker/stocktickerlib/ticker.cpp93
-rw-r--r--noncore/todayplugins/stockticker/stocktickerlib/ticker.h32
29 files changed, 2522 insertions, 0 deletions
diff --git a/noncore/todayplugins/stockticker/libstocks/.cvsignore b/noncore/todayplugins/stockticker/libstocks/.cvsignore
new file mode 100644
index 0000000..c9bb88e
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/libstocks/.cvsignore
@@ -0,0 +1,3 @@
+Makefile*
+moc_*
+*.moc \ No newline at end of file
diff --git a/noncore/todayplugins/stockticker/libstocks/csv.c b/noncore/todayplugins/stockticker/libstocks/csv.c
new file mode 100644
index 0000000..99a44e4
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/libstocks/csv.c
@@ -0,0 +1,402 @@
+/* libstocks - Library to get current stock quotes from Yahoo Finance
+ *
+ * Copyright (C) 2000 Eric Laeuffer
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#define __CSV_C__
+
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#ifdef __WINDOWS__
+#include <mbstring.h>
+#endif
+
+#include "csv.h"
+#include "stocks.h"
+#include "lists.h"
+
+#define DATE_LENGTH 7 /*YYMMDD*/
+
+const char *months[12]=
+{
+ "Jan",
+ "Feb",
+ "Mar",
+ "Apr",
+ "May",
+ "Jun",
+ "Jul",
+ "Aug",
+ "Sep",
+ "Oct",
+ "Nov",
+ "Dec"
+};
+
+/*****************************************************************************/
+/* Replacement of the strtok function. This one forgets "delim" when it is */
+/* between two commas. */
+/* Thanks to Julio Lucas who has told me the bug and has proposed me a patch */
+/*****************************************************************************/
+char *csv_strtok(char *s, char *delim)
+{
+ static char *next=NULL;
+ char *temp, *first;
+ int comma=0;
+
+ if (s!=NULL) first=s;
+ else first=next;
+
+ temp=first;
+ if (*temp=='\0') return NULL;
+
+ while (*temp!='\0' && ((*temp!=*delim) || comma))
+ {
+ if (*temp=='"') comma ^= 1;
+ temp++;
+ }
+
+ if (*temp=='\0') next=temp;
+ else
+ {
+ *temp='\0';
+ next=temp+1;
+ }
+
+ return first;
+}
+
+/*****************************************************************************/
+/* Parses the csv file and return a list of stocks structure. */
+/* *csv points on the csv file in memory */
+/* count defines the country, because csv depends on the country */
+/*****************************************************************************/
+stock *parse_csv_file(char *csv)
+{
+ char *line;
+ char *end_line;
+
+ char *ptr;
+
+ char *date;
+ char *time;
+ char *name;
+ char *symbol;
+
+ stock *StockPtr=NULL;
+ stock *LastStockPtr=NULL;
+
+ /* Used to return the pointer to the list */
+ stock *FirstStockPtr=NULL;
+
+ /* used to see if symbol is valid */
+ int valid;
+ char *test;
+
+ line = csv;
+ end_line = csv;
+
+ while ((end_line = strstr(line, "\n")))
+ {
+ *end_line = 0;
+
+ /* Check if symbol valid */
+ /* if 1 "N/A" then ok because Indices have N/A for volume */
+ /* if 4 "N/A" then ok because Mutual funds have */
+ /* if 5 "N/A" then ok because currencies have */
+ /* So if >5 then stock not valid */
+
+ test = line;
+ valid = 0;
+ while ( (test = strstr(test, "N/A")) )
+ {
+ valid ++;
+ test = test +3;
+ }
+
+ if (valid < 6)
+ {
+ /* This Symbol is valid */
+
+ StockPtr = malloc_stock();
+
+ ptr = csv_strtok(line, ",");
+ if (!ptr) return 0;
+
+ symbol = (char *)malloc(strlen(ptr)+1);
+ if (symbol==NULL)
+ {
+ fprintf(stderr,"Memory allocating error (%s line %d)\n"
+ ,__FILE__, __LINE__);
+ exit(1);
+ }
+ strcpy((char *)(symbol), ptr);
+ StockPtr->Symbol = symbol;
+
+ ptr = csv_strtok(NULL, ",");
+ if (!ptr) return 0;
+
+ name = (char *)malloc(strlen(ptr)+1);
+ if (name==NULL)
+ {
+ fprintf(stderr,"Memory allocating error (%s line %d)\n"
+ ,__FILE__, __LINE__);
+ exit(1);
+ }
+ strcpy((char *)(name), ptr);
+ StockPtr->Name = name;
+
+ ptr = csv_strtok(NULL, ",");
+ if (!ptr) return 0;
+ sscanf(ptr,"%f",&(StockPtr->CurrentPrice));
+
+ ptr = csv_strtok(NULL, ",");
+ if (!ptr) return 0;
+
+ date = (char *)malloc(strlen(ptr)+1);
+ if (date==NULL)
+ {
+ fprintf(stderr,"Memory allocating error (%s line %d)\n"
+ ,__FILE__, __LINE__);
+ exit(1);
+ }
+ strcpy((char *)(date), ptr);
+ StockPtr->Date = date;
+
+ ptr = csv_strtok(NULL, ",");
+ if (!ptr) return 0;
+
+ time = (char *)malloc(strlen(ptr)+1);
+ if (time==NULL)
+ {
+ fprintf(stderr,"Memory allocating error (%s line %d)\n"
+ ,__FILE__, __LINE__);
+ exit(1);
+ }
+ strcpy((char *)(time), ptr);
+ StockPtr->Time = time;
+
+ ptr = csv_strtok(NULL, ",");
+ if (!ptr) return 0;
+ sscanf(ptr,"%f",&(StockPtr->Variation));
+
+ StockPtr->Pourcentage = 100 * StockPtr->Variation /
+ (StockPtr->CurrentPrice - StockPtr->Variation);
+
+ StockPtr->LastPrice = StockPtr->CurrentPrice - StockPtr->Variation;
+
+ ptr = csv_strtok(NULL, ",");
+ if (!ptr) return 0;
+ sscanf(ptr,"%f",&(StockPtr->OpenPrice));
+
+ ptr = csv_strtok(NULL, ",");
+ if (!ptr) return 0;
+ sscanf(ptr,"%f",&(StockPtr->MaxPrice));
+
+ ptr = csv_strtok(NULL, ",");
+ if (!ptr) return 0;
+ sscanf(ptr,"%f",&(StockPtr->MinPrice));
+
+ ptr = csv_strtok(NULL, ",");
+ if (!ptr) return 0;
+ StockPtr->Volume = atoi(ptr);
+
+ if( !FirstStockPtr )
+ {
+ FirstStockPtr = StockPtr;
+ StockPtr->PreviousStock = 0;
+ }
+
+ StockPtr->NextStock = 0;
+
+ if (LastStockPtr)
+ {
+ LastStockPtr->NextStock = StockPtr;
+ StockPtr->PreviousStock = LastStockPtr;
+ }
+
+ LastStockPtr = StockPtr;
+
+ }
+ else
+ {
+ /* this symbol is not valid */
+ /* Set the stock struct just with Symbol, all other are NULL */
+ /* This can be used to see if the symbol has been reached are not */
+
+ StockPtr = malloc_stock();
+
+ ptr = csv_strtok(line, ",");
+ if (!ptr) return 0;
+
+ symbol = (char *)malloc(strlen(ptr)+1);
+ if (symbol==NULL)
+ {
+ fprintf(stderr,"Memory allocating error (%s line %d)\n"
+ ,__FILE__, __LINE__);
+ exit(1);
+ }
+ strcpy((char *)(symbol), ptr);
+ StockPtr->Symbol = symbol;
+
+ if( !FirstStockPtr )
+ {
+ FirstStockPtr = StockPtr;
+ StockPtr->PreviousStock = 0;
+ }
+
+ StockPtr->NextStock = 0;
+
+ if (LastStockPtr)
+ {
+ LastStockPtr->NextStock = StockPtr;
+ StockPtr->PreviousStock = LastStockPtr;
+ }
+
+ LastStockPtr = StockPtr;
+ }
+
+ end_line++;
+ line = end_line;
+
+ }
+
+ return (FirstStockPtr);
+}
+
+/*****************************************************************************/
+/* Parses the history quotes file and return a stock structure list. */
+/*****************************************************************************/
+stock *parse_csv_history_file(char *csv_file)
+{
+
+ char *line;
+ char *end_line;
+ char *ptr;
+
+ int day;
+ char smonth[10];
+ int month;
+ int year;
+
+ char *date;
+
+ int i;
+ int test;
+
+ stock *StockPtr=NULL;
+ stock *LastStockPtr=NULL;
+
+ /* Used to return the pointer to the list */
+ stock *FirstStockPtr=NULL;
+
+ line = csv_file;
+ end_line = csv_file;
+
+ /* do not use the first line */
+ end_line = strstr(line, "\n");
+ *end_line = 0;
+ end_line++;
+ line = end_line;
+
+ while ((end_line = strstr(line, "\n")))
+ {
+ *end_line = 0;
+
+ StockPtr = malloc_stock();
+
+ /* Date */
+ ptr = strtok(line, ",");
+ if (!ptr) return 0;
+
+ sscanf(ptr,"%d-%3s-%d",&day,smonth,&year);
+
+ i=0;
+
+#ifdef __UNIX__
+ while((test=strcasecmp(months[i], smonth))) i++;
+#elif __WINDOWS__
+ while(test=_mbsnbicmp(months[i], smonth, strlen(months[i]))) i++;
+#endif
+
+ month = i+1;
+
+ date = (char *)malloc(DATE_LENGTH);
+ if (date==NULL)
+ {
+ fprintf(stderr,"Memory allocating error (%s line %d)\n"
+ ,__FILE__, __LINE__);
+ exit(1);
+ }
+ sprintf(date,"%.2d%.2d%.2d", year, month, day);
+ StockPtr->Date = date;
+
+ /* Open */
+ ptr = strtok(NULL, ",");
+ if (!ptr) return 0;
+ sscanf(ptr,"%f",&(StockPtr->OpenPrice));
+
+ /* High */
+ ptr = strtok(NULL, ",");
+ if (!ptr) return 0;
+ sscanf(ptr,"%f",&(StockPtr->MaxPrice));
+
+ /* Low */
+ ptr = strtok(NULL, ",");
+ if (!ptr) return 0;
+ sscanf(ptr,"%f",&(StockPtr->MinPrice));
+
+ /* Close */
+ ptr = strtok(NULL, ",");
+ if (!ptr) return 0;
+ sscanf(ptr,"%f",&(StockPtr->LastPrice));
+
+ /* Volume */
+
+ ptr = strtok(NULL, ",");
+ if (!ptr)
+ /* It seems to be an indice */
+ /* No volume for indices */
+ StockPtr->Volume = 0;
+ else
+ StockPtr->Volume = atoi(ptr);
+
+ if( !FirstStockPtr )
+ {
+ FirstStockPtr = StockPtr;
+ StockPtr->PreviousStock = 0;
+ }
+
+ StockPtr->NextStock = 0;
+
+ if (LastStockPtr)
+ {
+ LastStockPtr->NextStock = StockPtr;
+ StockPtr->PreviousStock = LastStockPtr;
+ }
+
+ LastStockPtr = StockPtr;
+
+ end_line++;
+ line = end_line;
+ }
+
+ return (FirstStockPtr);
+}
diff --git a/noncore/todayplugins/stockticker/libstocks/csv.h b/noncore/todayplugins/stockticker/libstocks/csv.h
new file mode 100644
index 0000000..4205c61
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/libstocks/csv.h
@@ -0,0 +1,36 @@
+/* libstocks - Library to get current stock quotes from Yahoo Finance
+ *
+ * Copyright (C) 2000 Eric Laeuffer
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __CSV_H__
+#define __CSV_H__
+
+#ifndef __CSV_C__
+#define PUBEXT_CSV extern
+#else
+#define PUBEXT_CSV
+#endif
+
+#include "stocks.h"
+
+PUBEXT_CSV stock *parse_csv_file(char *);
+PUBEXT_CSV char *csv_strtok(char *, char *);
+PUBEXT_CSV stock *parse_csv_history_file(char *);
+
+#endif /* __CSV_H__ */
diff --git a/noncore/todayplugins/stockticker/libstocks/currency.c b/noncore/todayplugins/stockticker/libstocks/currency.c
new file mode 100644
index 0000000..9a08a9d
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/libstocks/currency.c
@@ -0,0 +1,66 @@
+/* libstocks - Library to get current stock quotes from Yahoo Finance
+ *
+ * Copyright (C) 2000 Eric Laeuffer
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#define __CURRENCY_C__
+
+
+#include <stdio.h>
+#include <string.h>
+#include <malloc.h>
+#include <stdlib.h>
+
+#include "stocks.h"
+
+/*****************************************************************************/
+/* returns the currency exchange rate of "from" currency into */
+/* "into" currency. */
+/*****************************************************************************/
+libstocks_return_code get_currency_exchange(char *from,
+ char *into,
+ float *exchange)
+{
+ char *symbol;
+ stock *data;
+ libstocks_return_code error;
+
+ if((symbol = (char *)malloc(strlen(from)+strlen(into)+3))==NULL)
+ {
+ fprintf(stderr,"Memory allocating error (%s line %d)\n"
+ ,__FILE__, __LINE__);
+ exit(1);
+ }
+
+ strcpy(symbol, from);
+ strcat(symbol, into);
+ strcat(symbol, "=X");
+
+ error = get_stocks(symbol, &data);
+ if (error)
+ {
+ *exchange = 0;
+ return(error);
+ }
+
+ free_stocks(data);
+
+ *exchange = data->CurrentPrice;
+ return(error);
+
+}
diff --git a/noncore/todayplugins/stockticker/libstocks/history.c b/noncore/todayplugins/stockticker/libstocks/history.c
new file mode 100644
index 0000000..61f57d1
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/libstocks/history.c
@@ -0,0 +1,149 @@
+/* libstocks - Library to get current stock quotes from Yahoo Finance
+ *
+ * Copyright (C) 2000 Eric Laeuffer
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#define __HISTORY_C__
+
+#include <string.h>
+#include <stdlib.h>
+
+#ifdef __WINDOWS__
+#include <malloc.h>
+#endif
+
+#include "stocks.h"
+#include "http.h"
+#include "csv.h"
+
+const char history_stocks_server[]="chart.yahoo.com";
+const char url_history_beg[]="/table.csv?s=";
+
+/*****************************************************************************/
+/* Gets the stock history csv file and return in csv_file the result. */
+/* The stock is defined by its symbol. */
+/* The history file starts at date1 and stops at date2. */
+/*****************************************************************************/
+libstocks_return_code get_history_csv(char *symbol,
+ char *date1,
+ char *date2,
+ char **csv_file)
+{
+ char *data;
+ char url[80];
+
+ char adate[12];
+
+ char *y1, *y2;
+ char *m1, *m2;
+ char *d1, *d2;
+
+ libstocks_return_code error;
+
+ char *test;
+
+ strcpy(url, url_history_beg);
+ strcat(url, symbol);
+
+ strcpy(adate, date1);
+
+ y1=strtok(adate, "/");
+ if(!y1) return ERRDATE;
+ m1 = strtok(NULL, "/");
+ if(!m1) return ERRDATE;
+ d1 = strtok(NULL, "/");
+ if(!m1) return ERRDATE;
+
+ strcat(url, "&a=");
+ strcat(url, m1);
+ strcat(url, "&b=");
+ strcat(url, d1);
+ strcat(url, "&c=");
+ strcat(url, y1);
+
+ strcpy(adate, date2);
+
+ y2=strtok(adate, "/");
+ if(!y2) return ERRDATE;
+ m2 = strtok(NULL, "/");
+ if(!m2) return ERRDATE;
+ d2 = strtok(NULL, "/");
+ if(!d2) return ERRDATE;
+
+ strcat(url, "&d=");
+ strcat(url, m2);
+ strcat(url, "&e=");
+ strcat(url, d2);
+ strcat(url, "&f=");
+ strcat(url, y2);
+ strcat(url, "&g=d&q=q&y=0&x=.csv");
+
+ error=http_get(url, (char *)history_stocks_server, &data);
+ if (error) return error;
+
+ /* tests if data is valid */
+
+ /* The server returns "No data available for symbol" */
+ /* when the stock is not available */
+ test = strstr(data, "No data available");
+ if (test)
+ {
+ free(data);
+ return ERRDATA;
+ }
+
+ /* The server return "No Prices in this date range" */
+ /* when dates have not the good range */
+ test = strstr(data, "No Prices in this date range");
+ if (test)
+ {
+ free(data);
+ return ERRRANG;
+ }
+
+ *csv_file = data;
+
+ return(0);
+}
+
+/*****************************************************************************/
+/* Gets the stock history and return a stock structure list. */
+/* The stock is defined by its symbol. */
+/* The history file starts at date1 and stops at date2. */
+/*****************************************************************************/
+libstocks_return_code get_stock_history(char *symbol,
+ char *date1,
+ char *date2,
+ stock **stock_history)
+{
+ libstocks_return_code error;
+ char *csv_file;
+ stock *stock_parsed;
+
+ error = get_history_csv(symbol, date1, date2, &csv_file);
+ if (error) return error;
+
+ stock_parsed = parse_csv_history_file(csv_file);
+
+ free(csv_file);
+
+ if (!stock_parsed) return ERRPCSV;
+ *stock_history = stock_parsed;
+
+ return(0);
+}
diff --git a/noncore/todayplugins/stockticker/libstocks/http.c b/noncore/todayplugins/stockticker/libstocks/http.c
new file mode 100644
index 0000000..462080d
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/libstocks/http.c
@@ -0,0 +1,300 @@
+/* libstocks - Library to get current stock quotes from Yahoo Finance
+ *
+ * Copyright (C) 2000 Eric Laeuffer
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#define __HTTP_C__
+
+#ifdef __UNIX__
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+#include <unistd.h>
+#elif __WINDOWS__
+#include <winsock.h>
+#include <mbstring.h>
+#endif
+
+#include <sys/types.h>
+#include <ctype.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "http.h"
+#include "stocks.h"
+
+#define BUF_SIZE 1024
+#define HEADER_MAXBUF 512
+
+/* pointer to proxy server name or NULL */
+char *http_proxy_server=NULL;
+/* proxy server port number or 0 */
+int http_proxy_port=0;
+
+/*****************************************************************************/
+/* Gets the file from http://http_server/http_file */
+/* This function is used to get quotes csv file from yahoo. */
+/* It allocates memory for the file and defines *pdata (the pointer of datas)*/
+/*****************************************************************************/
+libstocks_return_code http_get(char *http_file, char *http_server, char **pdata)
+{
+ struct hostent *host; /* structs needed by socket */
+ struct sockaddr_in server;
+ int s; /* socket descriptor */
+ char header[HEADER_MAXBUF]; /* request header */
+ int hlg; /* header length */
+ char buf[BUF_SIZE+1]; /* tempory buffer from socket read */
+ int r; /* number of bytes read by read function */
+ char *data=NULL; /* http server response */
+ int data_lgr; /* http server response length */
+ char *temp; /* pointer used to split header and csv */
+ int error_code; /* error code returned by http server */
+ char *csv_ptr; /* pointer to the csv content */
+ int header_founded; /* test if header is founded */
+
+#ifdef DEBUG
+ printf("*http_get\n");
+#endif
+
+ /* get host info by name :*/
+ if ((host = gethostbyname( http_proxy_server ? http_proxy_server : http_server)))
+ {
+ memset((char *) &server,0, sizeof(server));
+ memmove((char *) &server.sin_addr, host->h_addr, host->h_length);
+ server.sin_family = host->h_addrtype;
+ server.sin_port = (unsigned short) htons( http_proxy_server ? http_proxy_port : 80 );
+
+ } else
+ {
+
+#ifdef DEBUG
+ printf(" gethostbyname : NOK\n");
+#endif
+ return ERRHOST;
+ }
+
+ /* create socket */
+ if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0)
+ {
+
+#ifdef DEBUG
+ printf(" create socket : NOK\n");
+#endif
+ return ERRSOCK;
+ }
+
+ setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, 0, 0);
+
+ /* connect to server */
+ if (connect(s, &server, sizeof(server)) < 0)
+ {
+#ifdef DEBUG
+ printf(" connect to server : NOK\n");
+#endif
+
+#ifdef __UNIX__
+ close(s);
+#elif __WINDOWS__
+ closesocket(s);
+#endif
+ return ERRCONN;
+ }
+
+ /* create header */
+ if (http_proxy_server)
+ {
+ sprintf(header,"GET http://%.128s:80%.256s HTTP/1.0\015\012\015\012",
+ http_server, http_file);
+ }
+ else
+ {
+ sprintf(header,"GET %s HTTP/1.0\015\012\015\012",http_file);
+ }
+
+ hlg=strlen(header);
+
+ /* send header */
+#ifdef __UNIX__
+ if (write(s,header,hlg)!=hlg)
+#elif __WINDOWS__
+ if (send(s,header,hlg, 0)!=hlg)
+#endif
+ {
+#ifdef DEBUG
+ printf(" send header : NOK\n");
+#endif
+ return ERRWHEA;
+ }
+
+ data_lgr = 0;
+ r=1;
+ while(r)
+ {
+ /* Clear Buffer */
+ memset(buf,0,BUF_SIZE+1);
+
+#ifdef __UNIX__
+ r=read(s,buf,BUF_SIZE);
+#elif __WINDOWS__
+ r=recv(s,buf,BUF_SIZE,0);
+#endif
+
+ if (r)
+ {
+ if(!data_lgr)
+ {
+ if((data = malloc(r+1))==NULL)
+ {
+ fprintf(stderr,"Memory allocating error (%s line %d)\n"
+ ,__FILE__, __LINE__);
+ exit(1);
+ }
+
+ memcpy(data,buf,r);
+ data_lgr = r;
+ data[r]=0;
+ }
+ else
+ {
+ if((temp = malloc(r+data_lgr+1))==NULL)
+ {
+ fprintf(stderr,"Memory allocating error (%s line %d)\n"
+ ,__FILE__, __LINE__);
+ exit(1);
+ }
+ memcpy(temp, data, data_lgr);
+ memcpy(temp+data_lgr, buf, r);
+ temp[r+data_lgr]=0;
+ data_lgr += r;
+ free(data);
+ data = temp;
+ }
+ }
+ }
+
+ /* close socket */
+#ifdef __UNIX__
+ close(s);
+#elif __WINDOWS__
+ closesocket(s);
+#endif
+
+#ifdef DEBUG
+ printf("%s\n", data);
+#endif
+
+ /* get headers to test status line */
+ /* and to split headers and content */
+
+ temp = data;
+ header_founded = 0;
+ while( !header_founded )
+ {
+ if (*temp==0) return ERRRHEA;
+
+ if( *temp==0x0A )
+ {
+ /* test if it is the header end */
+ temp ++;
+ if (*temp == 0x0D) temp++;
+ if (*temp == 0x0A) header_founded = 1;
+ }
+ else
+ temp++;
+ }
+
+ *temp = 0;
+ temp++;
+
+ sscanf(data,"HTTP/1.%*d %03d",&error_code);
+
+ if (error_code != 200)
+ {
+#ifdef DEBUG
+ printf(" HTTP error code : %d\n", error_code);
+#endif
+ free(data);
+ return ERRPAHD;
+ }
+
+ if ((csv_ptr = malloc(strlen(temp)+1))==NULL)
+ {
+ free(data);
+ fprintf(stderr,"Memory allocating error (%s line %d)\n"
+ ,__FILE__, __LINE__);
+ exit(1);
+ }
+
+ memcpy(csv_ptr, temp, strlen(temp)+1);
+ free(data);
+
+#ifdef DEBUG
+ printf(" CSV\n");
+ printf("%s,\n", csv_ptr);
+#endif
+
+ *pdata = csv_ptr;
+
+ return 0;
+}
+
+/******************************************************************************/
+/* Set the proxy server to use */
+/******************************************************************************/
+libstocks_return_code set_proxy(char *proxy)
+{
+ char *ptr;
+ char c;
+
+#ifdef DEBUG
+ printf("*set_proxy\n");
+#endif
+
+ /* Parse the proxy URL - It must start with http:// */
+#ifdef __UNIX__
+ if (strncasecmp("http://",proxy,7)) return ERRPROX;
+#elif __WINDOWS__
+ if (_mbsnbicmp("http://",proxy,7)) return ERRPROX;
+#endif
+
+ proxy+=7;
+
+ /* find ":" in the proxy url */
+ ptr = proxy;
+ for (c=*ptr; (c && c!=':');) c=*ptr++;
+
+ /* ptr points just after the ":" or at the end of proxy if : not founded */
+ *(ptr-1)=0; /* clear the ":" */
+
+ http_proxy_server=strdup(proxy);
+
+#ifdef DEBUG
+ printf("http_proxy_server : %s\n", http_proxy_server);
+#endif
+
+ /* get the port number of the url */
+ if (sscanf(ptr,"%d",&http_proxy_port)!=1) return ERRPROX;
+
+#ifdef DEBUG
+ printf("http_proxy_port : %d\n", http_proxy_port);
+#endif
+
+ return 0;
+}
diff --git a/noncore/todayplugins/stockticker/libstocks/http.h b/noncore/todayplugins/stockticker/libstocks/http.h
new file mode 100644
index 0000000..33346f3
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/libstocks/http.h
@@ -0,0 +1,35 @@
+/* libstocks - Library to get current stock quotes from Yahoo Finance
+ *
+ * Copyright (C) 2000 Eric Laeuffer
+ *
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __HTTP_H__
+#define __HTTP_H__
+
+#ifndef __HTTP_C__
+#define PUBEXT_HTTP extern
+#else
+#define PUBEXT_HTTP
+#endif
+
+#include "stocks.h"
+
+PUBEXT_HTTP libstocks_return_code http_get(char *, char *, char **);
+
+#endif /* __HTTP_H__ */
diff --git a/noncore/todayplugins/stockticker/libstocks/lists.c b/noncore/todayplugins/stockticker/libstocks/lists.c
new file mode 100644
index 0000000..1ed66b3
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/libstocks/lists.c
@@ -0,0 +1,123 @@
+/* libstocks - Library to get current stock quotes from Yahoo Finance
+ *
+ * Copyright (C) 2000 Eric Laeuffer
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#define __LISTS_C__
+
+#include <malloc.h>
+#include <stdio.h>
+#include <string.h>
+
+#ifdef __WINDOWS__
+#include <stdlib.h>
+#endif
+
+#include "stocks.h"
+#include "lists.h"
+
+/******************************************************************************/
+/* Finds a stock in the stocks list and return the stock pointer. */
+/* *stocks points to the stocks list */
+/* *stock_to_find is the stock to find :)) */
+/******************************************************************************/
+stock *find_stock(stock *stocks, char *stock_to_find)
+{
+ char *test=NULL;
+
+ while(stocks != NULL)
+ {
+ test = strstr(stocks->Symbol, stock_to_find);
+ if(test) return(stocks);
+ stocks = stocks->NextStock;
+ }
+
+ return(0);
+}
+
+/******************************************************************************/
+/* Allocate memory for a stock structure and return the pointer of this */
+/* structure. */
+/******************************************************************************/
+stock *malloc_stock(void)
+{
+ stock *stockptr;
+
+ if((stockptr = (stock *)malloc(sizeof(stock)))==NULL)
+ {
+ fprintf(stderr,"Memory allocating error (%s line %d)\n"
+ ,__FILE__, __LINE__);
+ exit(1);
+ }
+
+ stockptr->Symbol=NULL;
+ stockptr->Name=NULL;
+ stockptr->Time=NULL;
+ stockptr->Date=NULL;
+ stockptr->CurrentPrice=0;
+ stockptr->LastPrice=0;
+ stockptr->OpenPrice=0;
+ stockptr->MinPrice=0;
+ stockptr->MaxPrice=0;
+ stockptr->Variation=0;
+ stockptr->Pourcentage=0;
+ stockptr->Volume=0;
+ stockptr->PreviousStock=0;
+ stockptr->NextStock=0;
+
+ return(stockptr);
+}
+
+/******************************************************************************/
+/* Deallocates a stock structure. */
+/* *stocks_to_free is the pointer of the structure to free */
+/******************************************************************************/
+void free_stocks(stock *stock_to_free)
+{
+ stock *next_stock;
+
+ while(stock_to_free)
+ {
+ next_stock = stock_to_free->NextStock;
+ free(stock_to_free->Symbol);
+ free(stock_to_free->Name);
+ free(stock_to_free->Time);
+ free(stock_to_free->Date);
+ free(stock_to_free);
+ stock_to_free = next_stock;
+ }
+}
+
+/******************************************************************************/
+/* Returns the next stock structure from the list. */
+/* *the_stocks points to the list. */
+/******************************************************************************/
+stock *next_stock(stock *the_stock)
+{
+ return((stock *)(the_stock->NextStock));
+}
+
+/******************************************************************************/
+/* Returns the previous stock structure from the list. */
+/* *the_stocks points to the list. */
+/******************************************************************************/
+stock *previous_stock(stock *the_stock)
+{
+ return((stock *)(the_stock->PreviousStock));
+}
+
diff --git a/noncore/todayplugins/stockticker/libstocks/lists.h b/noncore/todayplugins/stockticker/libstocks/lists.h
new file mode 100644
index 0000000..0132317
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/libstocks/lists.h
@@ -0,0 +1,35 @@
+/* libstocks - Library to get current stock quotes from Yahoo Finance
+ *
+ * Copyright (C) 2000 Eric Laeuffer
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __LISTS_H__
+#define __LISTS_H__
+
+#ifndef __LISTS_C__
+#define PUBEXT_LISTS extern
+#else
+#define PUBEXT_LISTS
+#endif
+
+#include "stocks.h"
+
+PUBEXT_LISTS stock *malloc_stock(void);
+
+
+#endif /* __LISTS_H */
diff --git a/noncore/todayplugins/stockticker/libstocks/stocks.c b/noncore/todayplugins/stockticker/libstocks/stocks.c
new file mode 100644
index 0000000..eb04ba9
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/libstocks/stocks.c
@@ -0,0 +1,347 @@
+/* libstocks - Library to get current stock quotes from Yahoo Finance
+ *
+ * Copyright (C) 2000 Eric Laeuffer
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#define __STOCKS_C__
+
+#include <stdio.h>
+#include <string.h>
+#include <malloc.h>
+#include <stdlib.h>
+
+#ifdef __WINDOWS__
+#include <mbstring.h>
+#endif
+
+#include "http.h"
+#include "csv.h"
+
+#include "stocks.h"
+
+/*
+s = symbol
+n = name
+l1 = last trade
+d1 = date
+t1 = time
+c1 = variation
+o = open
+h = higher price
+g = lower price
+v = volume
+*/
+
+const char yahoo_us_stocks_server[]="finance.yahoo.com";
+const char yahoo_eu_stocks_server[]="finance.yahoo.com";
+//const char yahoo_eu_stocks_server[]="fr.finance.yahoo.com";
+
+const char yahoo_url_beg[]="/d/quotes.csv?s=";
+const char yahoo_url_end[]="&f=snl1d1t1c1ohgv&e=.csv";
+
+typedef enum {
+ YAHOO_EUROPE,
+ YAHOO_US
+} yahoo_source;
+
+#define YAHOO_US_EXT_NB 11
+const char *yahoo_us_ext[YAHOO_US_EXT_NB] =
+{
+ ".US", /* United States */
+ ".TO", /* Canada */
+ ".M", /* Canada */
+ ".V", /* Canada */
+ ".AL", /* Canada */
+ ".MX", /* Mexico */
+ ".SA", /* Brasil */
+ ".BA", /* Argentina */
+ ".CR", /* Venezuela */
+ ".SN", /* Chili */
+ ".AX" /* Australia */
+};
+
+/*****************************************************************************/
+/* Finds, according to the symbol extension, the http source of the quotes. */
+/* Actually just finance.yahoo.com and fr.finance.yahoo.com are supported. */
+/* The function returns the country source (US or EUROPE). */
+/*****************************************************************************/
+yahoo_source find_yahoo_source(char *symbol)
+{
+ char *ptr;
+ int i;
+ int test;
+
+ ptr = strrchr(symbol, '.');
+
+ /* If no extension we suppose it is a US stock */
+ if (!ptr) return YAHOO_US;
+
+ /* extension is found */
+
+ /* Test if it is canadian stock */
+ for (i=0; i<YAHOO_US_EXT_NB; i++)
+ {
+
+#ifdef __UNIX__
+ test = strcasecmp(yahoo_us_ext[i], ptr);
+#elif __WINDOWS__
+ test = _mbsnbicmp(yahoo_us_ext[i], ptr, strlen(yahoo_us_ext[i]));
+#endif
+
+ if (!test) return YAHOO_US;
+ }
+
+ /* We suppose now it is a European stock */
+ return YAHOO_EUROPE;
+}
+
+/*****************************************************************************/
+/* Gets quotes csv file, parses the file and create the quotes list */
+/* *stocks points to the stocks to fetch */
+/* *stock_datas points to the beginning of the list */
+/* count allows to connect to all country servers */
+/*****************************************************************************/
+libstocks_return_code download_stocks(char *stocks,
+ stock **stock_datas,
+ yahoo_source source)
+{
+ char *stocks_server=NULL;
+ char *url_beg=NULL;
+ char *url_end=NULL;
+
+ char *url;
+ char *data;
+
+ libstocks_return_code error;
+
+#ifdef DEBUG
+ printf("*download_stocks\n");
+#endif
+
+ switch (source)
+ {
+ case YAHOO_US:
+ stocks_server = (char *)yahoo_us_stocks_server;
+ break;
+
+ case YAHOO_EUROPE:
+ stocks_server = (char *)yahoo_eu_stocks_server;
+ break;
+ default:
+ stocks_server = (char *)yahoo_us_stocks_server;
+ break;
+
+ }
+
+ url_beg = (char *)yahoo_url_beg;
+ url_end = (char *)yahoo_url_end;
+
+ url = (char *)malloc(strlen(url_beg)
+ +strlen(url_end)
+ +strlen(stocks)+1);
+ if (url==NULL)
+ {
+ fprintf(stderr,"Memory allocating error (%s line %d)\n"
+ ,__FILE__, __LINE__);
+ exit(1);
+ }
+
+ strcpy(url, url_beg);
+ strcat(url, stocks);
+ strcat(url, url_end);
+
+ error=http_get(url, stocks_server, &data);
+
+ free(url);
+
+ if (error) return error;
+
+ *stock_datas = parse_csv_file(data);
+
+ free(data);
+
+ if (!(*stock_datas)) return ERRPCSV;
+
+ return 0;
+
+}
+
+/*****************************************************************************/
+/* Gets quotes from yahoo */
+/* Choses to fetch European or US depending on the symbol extension */
+/* and merges the two lists to one */
+/* *stocks points to the stocks to fetch */
+/* *stock_datas points to the beginning of the list */
+/*****************************************************************************/
+libstocks_return_code get_stocks(const char *stocks, stock **stock_datas)
+{
+ char *tok_ptr;
+ char *eu_quotes=NULL;
+ char *eu_quotes_temp=NULL;
+ int lgr_eu_quotes=0;
+
+ char *us_quotes=NULL;
+ char *us_quotes_temp=NULL;
+ int lgr_us_quotes=0;
+
+ char *symbol;
+
+ yahoo_source source;
+
+ int lgr_symbol=0;
+
+ libstocks_return_code error;
+
+ stock *stocks_tmp=NULL;
+ stock *stocks_tmp2=NULL;
+ stock *stocks_getted=NULL;
+ stock *last_stock=NULL;
+
+#ifdef DEBUG
+ printf("*get_stocks\n");
+#endif
+
+ /* to preserve stocks */
+ tok_ptr = malloc(strlen(stocks)+1);
+ if(tok_ptr==NULL)
+ {
+ fprintf(stderr,"Memory allocating error (%s line %d)\n"
+ ,__FILE__, __LINE__);
+ exit(1);
+ }
+ strcpy(tok_ptr, stocks);
+
+ while( (symbol = strtok(tok_ptr, "+"))!=0)
+ {
+ /* clear tok_ptr for next strtok */
+ tok_ptr = NULL;
+
+ /* look for "." in the symbol */
+ source = find_yahoo_source(symbol);
+
+ switch (source)
+ {
+ case YAHOO_US:
+
+ if (us_quotes)
+ {
+ lgr_us_quotes = strlen(us_quotes);
+ lgr_symbol = strlen(symbol);
+
+ us_quotes_temp = malloc(lgr_us_quotes + lgr_symbol +2);
+ if(us_quotes_temp==NULL)
+ {
+ fprintf(stderr,"Memory allocating error (%s line %d)\n"
+ ,__FILE__, __LINE__);
+ exit(1);
+ }
+ strcpy(us_quotes_temp, us_quotes);
+ strcat(us_quotes_temp,"+");
+ strcat(us_quotes_temp,symbol);
+
+ free(us_quotes);
+ us_quotes = us_quotes_temp;
+ }
+ else
+ {
+ us_quotes = malloc(strlen(symbol)+1);
+
+ if(us_quotes==NULL)
+ {
+ fprintf(stderr,"Memory allocating error (%s line %d)\n"
+ ,__FILE__, __LINE__);
+ exit(1);
+ }
+ strcpy(us_quotes, symbol);
+ }
+
+ break;
+
+ case YAHOO_EUROPE:
+
+ if (eu_quotes)
+ {
+ lgr_eu_quotes = strlen(eu_quotes);
+ lgr_symbol = strlen(symbol);
+
+ eu_quotes_temp = malloc(lgr_eu_quotes + lgr_symbol +2);
+ if(eu_quotes_temp==NULL)
+ {
+ fprintf(stderr,"Memory allocating error (%s line %d)\n"
+ ,__FILE__, __LINE__);
+ exit(1);
+ }
+ strcpy(eu_quotes_temp, eu_quotes);
+ strcat(eu_quotes_temp, "+");
+ strcat(eu_quotes_temp, symbol);
+
+ free(eu_quotes);
+ eu_quotes = eu_quotes_temp;
+ }
+ else
+ {
+ eu_quotes = malloc(strlen(symbol)+1);
+ if(eu_quotes==NULL)
+ {
+ fprintf(stderr,"Memory allocating error (%s line %d)\n"
+ ,__FILE__, __LINE__);
+ exit(1);
+ }
+ strcpy(eu_quotes, symbol);
+ }
+ break;
+ }
+ }
+
+ free(tok_ptr);
+
+ if (us_quotes)
+ {
+ /* Gets us quotes */
+ error = download_stocks(us_quotes, &stocks_tmp, YAHOO_US);
+ if (error) return error;
+ }
+
+ if (eu_quotes)
+ {
+ /* Gets european quotes */
+ error = download_stocks(eu_quotes, &stocks_getted, YAHOO_EUROPE);
+ if (error) return error;
+
+ /* concats lists if needed */
+ if (stocks_tmp)
+ {
+ stocks_tmp2 = stocks_tmp;
+
+ while(stocks_tmp2 != NULL)
+ {
+ last_stock = stocks_tmp2;
+ stocks_tmp2 = next_stock(stocks_tmp2);
+ }
+
+ last_stock->NextStock = stocks_getted;
+ stocks_getted->PreviousStock = last_stock;
+
+ }
+ else (stocks_tmp = stocks_getted);
+ }
+
+ *stock_datas = stocks_tmp;
+
+ return(0);
+}
diff --git a/noncore/todayplugins/stockticker/libstocks/stocks.h b/noncore/todayplugins/stockticker/libstocks/stocks.h
new file mode 100644
index 0000000..13250ca
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/libstocks/stocks.h
@@ -0,0 +1,116 @@
+/* libstocks - Library to get current stock quotes from Yahoo Finance
+ *
+ * Copyright (C) 2000 Eric Laeuffer
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __STOCKS_H__
+#define __STOCKS_H__
+
+/* Defines for prototypes */
+#ifndef __LISTS_C__
+#define _LISTS_C_EXT extern
+#else
+#define _LISTS_C_EXT
+#endif /* __LISTS_C__ */
+
+#ifndef __STOCKS_C__
+#define _STOCKS_C_EXT extern
+#else
+#define _STOCKS_C_EXT
+#endif /* __STOCKS_C__ */
+
+#ifndef __HTTP_C__
+#define _HTTP_C_EXT extern
+#else
+#define _HTTP_C_EXT
+#endif /* __HTTP_C__ */
+
+#ifndef __CURRENCY_C__
+#define _CURRENCY_C_EXT extern
+#else
+#define _CURRENCY_C_EXT
+#endif /* __CURRENCY_C__ */
+
+#ifndef __HISTORY_C__
+#define _HISTORY_C_EXT extern
+#else
+#define _HISTORY_C_EXT
+#endif /* __HISTORY_C__ */
+
+typedef struct stockstruct stock;
+
+struct stockstruct {
+ char *Symbol;
+ char *Name;
+ char *Time;
+ char *Date;
+ float CurrentPrice;
+ float LastPrice;
+ float OpenPrice;
+ float MinPrice;
+ float MaxPrice;
+ float Variation;
+ float Pourcentage;
+ int Volume;
+ stock *PreviousStock;
+ stock *NextStock;
+};
+
+/* Errors generates by the library */
+typedef enum {
+ NOERR = 0, /* No error */
+ ERRHOST = 1, /* No such host */
+ ERRSOCK = 2, /* Can't create socket */
+ ERRCONN = 3, /* Can't connect to host */
+ ERRWHEA = 4, /* Write error on socket while writing */
+ ERRRHEA = 5, /* Cannot find header in http response */
+ ERRPAHD = 7, /* Invalid answer from data server */
+ ERRPCSV = 8, /* Error in parsing csv file */
+ ERRPROX = 20, /* Bad proxy url */
+ ERRDATE = 30, /* Bad date format */
+ ERRDATA = 40, /* No data available */
+ ERRRANG = 50 /* No prices for this date range */
+
+} libstocks_return_code;
+
+_LISTS_C_EXT stock *next_stock(stock *);
+_LISTS_C_EXT stock *previous_stock(stock *);
+_LISTS_C_EXT void free_stocks(stock *);
+_LISTS_C_EXT stock *find_stock(stock *stocks, char *);
+
+_STOCKS_C_EXT libstocks_return_code get_stocks(const char *, stock **);
+
+_HTTP_C_EXT libstocks_return_code set_proxy(char *);
+
+
+_CURRENCY_C_EXT libstocks_return_code get_currency_exchange(char *,
+ char *,
+ float *);
+
+_HISTORY_C_EXT libstocks_return_code get_history_csv(char *,
+ char *,
+ char *,
+ char **);
+
+_HISTORY_C_EXT libstocks_return_code get_stock_history(char *,
+ char *,
+ char *,
+ stock **);
+
+
+#endif /* __STOCKS_H__ */
diff --git a/noncore/todayplugins/stockticker/opie-today-stocktickerplugin.control b/noncore/todayplugins/stockticker/opie-today-stocktickerplugin.control
new file mode 100644
index 0000000..ddfe9b0
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/opie-today-stocktickerplugin.control
@@ -0,0 +1,8 @@
+Files: plugins/today/libtodaystocktickerplugin.so* bin/stockticker
+Priority: optional
+Section: opie/applications
+Maintainer: ljp <llornkcor@handhelds.org>
+Architecture: arm
+Version: $QPE_VERSION-$SUB_VERSION
+Depends: qt-embedded (>=$QTE_VERSION), opie-today
+Description: stockticker plugin for today
diff --git a/noncore/todayplugins/stockticker/stockticker.pro b/noncore/todayplugins/stockticker/stockticker.pro
new file mode 100644
index 0000000..96319da
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/stockticker.pro
@@ -0,0 +1,2 @@
+TEMPLATE = subdirs
+unix:SUBDIRS = stockticker stocktickerlib
diff --git a/noncore/todayplugins/stockticker/stockticker/.cvsignore b/noncore/todayplugins/stockticker/stockticker/.cvsignore
new file mode 100644
index 0000000..c9bb88e
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/stockticker/.cvsignore
@@ -0,0 +1,3 @@
+Makefile*
+moc_*
+*.moc \ No newline at end of file
diff --git a/noncore/todayplugins/stockticker/stockticker/inputDialog.cpp b/noncore/todayplugins/stockticker/stockticker/inputDialog.cpp
new file mode 100644
index 0000000..ad841f2
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/stockticker/inputDialog.cpp
@@ -0,0 +1,143 @@
+#include "inputDialog.h"
+
+#include <qapplication.h>
+
+#include <qcheckbox.h>
+#include <qlayout.h>
+#include <qlineedit.h>
+#include <qlayout.h>
+#include <qvariant.h>
+#include <qpushbutton.h>
+#include <qwhatsthis.h>
+#include <qlabel.h>
+#include <qpe/config.h>
+#include <qstringlist.h>
+#include <qmainwindow.h>
+
+
+InputDialog::InputDialog( )
+ : QMainWindow( 0x0, 0x0, WStyle_ContextHelp ) {
+ setCaption( tr("Enter Stock Symbols"));
+
+ connect( qApp,SIGNAL( aboutToQuit()),SLOT( cleanUp()) );
+
+ QGridLayout *layout = new QGridLayout( this );
+ layout->setSpacing(6);
+ layout->setMargin( 2);
+
+ LineEdit1 = new QLineEdit( this, "LineEdit1" );
+ LineEdit1->setFocus();
+ QWhatsThis::add( LineEdit1, tr("Enter the stock symbols you want to be shown here."));
+
+ layout->addMultiCellWidget( LineEdit1, 0, 0, 0, 3);
+
+ Config cfg( "stockticker");
+ cfg.setGroup( "Symbols" );
+ QString symbollist;
+ symbollist = cfg.readEntry("Symbols", "");
+ LineEdit1->setText(symbollist);
+
+ QLabel *label;
+ label = new QLabel(this);
+ label->setText( tr("Enter stock symbols seperated\nby a space."));
+ label->setMaximumHeight(60);
+ layout->addMultiCellWidget( label, 1, 1, 0, 3);
+
+ cfg.setGroup( "Fields" );
+
+ timeCheck= new QCheckBox ( "Time",this );
+ timeCheck->setChecked( cfg.readBoolEntry("timeCheck",1));
+ layout->addMultiCellWidget(timeCheck, 2, 2, 0, 0 );
+ QWhatsThis::add( timeCheck, tr("Toggles Time Field"));
+
+ dateCheck= new QCheckBox ( "Date", this );
+ dateCheck->setChecked( cfg.readBoolEntry("dateCheck",1));
+ layout->addMultiCellWidget( dateCheck, 2, 2, 1, 1 );
+ QWhatsThis::add(dateCheck, tr("Toggles date field"));
+
+ symbolCheck= new QCheckBox ( "Symbol", this );
+ symbolCheck->setChecked( cfg.readBoolEntry("symbolCheck",1));
+ layout->addMultiCellWidget( symbolCheck, 3, 3, 0, 0 );
+ QWhatsThis::add(symbolCheck, tr("Toggles Symbol field"));
+
+ nameCheck= new QCheckBox ( "Name", this );
+ nameCheck->setChecked( cfg.readBoolEntry("nameCheck",1));
+ layout->addMultiCellWidget( nameCheck, 3, 3, 1, 1 );
+ QWhatsThis::add(nameCheck, tr("Toggles Name field"));
+
+ currentPriceCheck= new QCheckBox ( "Current Price", this );
+ currentPriceCheck->setChecked( cfg.readBoolEntry("currentPriceCheck",1));
+ layout->addMultiCellWidget( currentPriceCheck, 4, 4, 0, 0 );
+ QWhatsThis::add(currentPriceCheck, tr("Toggles current Price field"));
+
+
+ lastPriceCheck= new QCheckBox ( "Last Price", this );
+ lastPriceCheck->setChecked( cfg.readBoolEntry("lastPriceCheck",1));
+ layout->addMultiCellWidget(lastPriceCheck, 4, 4, 1, 1);
+ QWhatsThis::add(lastPriceCheck, tr("Toggles last price field"));
+
+ openPriceCheck= new QCheckBox ( "Open Price", this);
+ openPriceCheck->setChecked( cfg.readBoolEntry("openPriceCheck",1));
+ layout->addMultiCellWidget( openPriceCheck, 5, 5, 0, 0 );
+ QWhatsThis::add(openPriceCheck, tr("Toggles opening price field"));
+
+ minPriceCheck= new QCheckBox ( "Min Price", this );
+ minPriceCheck->setChecked( cfg.readBoolEntry("minPriceCheck",1));
+ layout->addMultiCellWidget( minPriceCheck, 5, 5, 1, 1);
+ QWhatsThis::add(minPriceCheck, tr("Toggles minamum price field"));
+
+ maxPriceCheck= new QCheckBox ( "Max Price", this);
+ maxPriceCheck->setChecked( cfg.readBoolEntry("maxPriceCheck",1));
+ layout->addMultiCellWidget( maxPriceCheck, 6, 6, 0, 0 );
+ QWhatsThis::add(maxPriceCheck, tr("Toggles maximum price field"));
+
+ variationCheck= new QCheckBox ( "Variation", this );
+ variationCheck->setChecked( cfg.readBoolEntry("variationCheck",1));
+ layout->addMultiCellWidget( variationCheck, 6, 6, 1, 1 );
+ QWhatsThis::add(variationCheck, tr("Toggles daily variation field"));
+
+ volumeCheck= new QCheckBox ( "Volume", this );
+ volumeCheck->setChecked( cfg.readBoolEntry("volumeCheck",1));
+ layout->addMultiCellWidget( volumeCheck , 7, 7, 0, 0);
+ QWhatsThis::add(volumeCheck, tr("Toggles volume field"));
+
+
+ QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Expanding );
+ layout->addItem( spacer, 8, 0 );
+
+}
+
+QString InputDialog::text() const {
+ return LineEdit1->text();
+}
+
+InputDialog::~InputDialog() {
+}
+
+void InputDialog::cleanUp(){
+ Config cfg( "stockticker");
+ cfg.setGroup( "Symbols" );
+ QString outText = text().upper();
+ outText.stripWhiteSpace();
+ cfg.writeEntry("Symbols", outText );
+ qDebug( "<<<<<<<<<<<>>>>>>>>>>>>"+text());
+
+ cfg.setGroup( "Fields" );
+
+ cfg.writeEntry("timeCheck",timeCheck->isChecked());
+ cfg.writeEntry("dateCheck",dateCheck->isChecked());
+ cfg.writeEntry("symbolCheck",symbolCheck->isChecked());
+ cfg.writeEntry("nameCheck",nameCheck->isChecked());
+ cfg.writeEntry("currentPriceCheck",currentPriceCheck->isChecked());
+ cfg.writeEntry("lastPriceCheck",lastPriceCheck->isChecked());
+ cfg.writeEntry("openPriceCheck",openPriceCheck->isChecked());
+ cfg.writeEntry("minPriceCheck",minPriceCheck->isChecked());
+ cfg.writeEntry("maxPriceCheck",maxPriceCheck->isChecked());
+ cfg.writeEntry("variationCheck",variationCheck->isChecked());
+ cfg.writeEntry("volumeCheck",volumeCheck->isChecked());
+
+
+ cfg.write();
+}
+
+
diff --git a/noncore/todayplugins/stockticker/stockticker/inputDialog.h b/noncore/todayplugins/stockticker/stockticker/inputDialog.h
new file mode 100644
index 0000000..8fda6ad
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/stockticker/inputDialog.h
@@ -0,0 +1,30 @@
+
+#ifndef INPUTDIALOG_H
+#define INPUTDIALOG_H
+
+#include <qvariant.h>
+#include <qdialog.h>
+#include <qmainwindow.h>
+
+class QLineEdit;
+class QCheckBox;
+
+class InputDialog : public QMainWindow {
+ Q_OBJECT
+
+public:
+ InputDialog( );
+// InputDialog( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+ ~InputDialog();
+ QString text()const;
+
+private:
+ QLineEdit* LineEdit1;
+ QCheckBox *timeCheck, *dateCheck, *symbolCheck, *nameCheck, *currentPriceCheck, *lastPriceCheck, *openPriceCheck, *minPriceCheck, *maxPriceCheck, *variationCheck, *volumeCheck;
+private slots:
+ void cleanUp();
+protected slots:
+
+};
+
+#endif // INPUTDIALOG_H
diff --git a/noncore/todayplugins/stockticker/stockticker/main.cpp b/noncore/todayplugins/stockticker/stockticker/main.cpp
new file mode 100644
index 0000000..da8da66
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/stockticker/main.cpp
@@ -0,0 +1,25 @@
+
+/***************************************************************************
+ main.cpp - description
+ -------------------
+ begin : March 10, 2002
+ copyright : (C) 2002 by llornkcor
+ email : ljp@llornkcor.com
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ ***************************************************************************/
+#include <qpe/qpeapplication.h>
+#include "inputDialog.h"
+
+int main(int argc, char *argv[])
+{
+ QPEApplication a(argc, argv);
+
+ InputDialog input;
+ a.showMainWidget( &input);
+ return a.exec();
+}
+
+
diff --git a/noncore/todayplugins/stockticker/stockticker/stockticker.pro b/noncore/todayplugins/stockticker/stockticker/stockticker.pro
new file mode 100644
index 0000000..0e970f1
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/stockticker/stockticker.pro
@@ -0,0 +1,10 @@
+TEMPLATE = app
+CONFIG = qt warn_on release
+HEADERS = inputDialog.h
+SOURCES = inputDialog.cpp main.cpp
+INTERFACES =
+TARGET = stockticker
+INCLUDEPATH += $(OPIEDIR)/include
+DEPENDPATH += $(OPIEDIR)/include
+LIBS+= -lqpe
+DESTDIR = $(OPIEDIR)/bin
diff --git a/noncore/todayplugins/stockticker/stocktickerlib/.cvsignore b/noncore/todayplugins/stockticker/stocktickerlib/.cvsignore
new file mode 100644
index 0000000..c9bb88e
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/stocktickerlib/.cvsignore
@@ -0,0 +1,3 @@
+Makefile*
+moc_*
+*.moc \ No newline at end of file
diff --git a/noncore/todayplugins/stockticker/stocktickerlib/stocktickerlib.pro b/noncore/todayplugins/stockticker/stocktickerlib/stocktickerlib.pro
new file mode 100644
index 0000000..28ef072
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/stocktickerlib/stocktickerlib.pro
@@ -0,0 +1,27 @@
+TEMPLATE = lib
+CONFIG -= moc
+CONFIG += qt debug
+
+HEADERS = stocktickerplugin.h stocktickeruginimpl.h stocktickerpluginwidget.h ticker.h \
+ ../libstocks/csv.h \
+ ../libstocks/http.h \
+ ../libstocks/lists.h \
+ ../libstocks/stocks.h
+SOURCES = stocktickerplugin.cpp stocktickerpluginimpl.cpp stocktickerpluginwidget.cpp ticker.cpp \
+ ../libstocks/csv.c \
+ ../libstocks/currency.c \
+ ../libstocks/history.c \
+ ../libstocks/http.c \
+ ../libstocks/lists.c \
+ ../libstocks/stocks.c
+
+INCLUDEPATH += $(OPIEDIR)/include \
+ ../ ../library
+DEPENDPATH += $(OPIEDIR)/include \
+ ../ ../library
+
+LIBS+= -lqpe -lopie
+TMAKE_CFLAGS += -D__UNIX__
+
+DESTDIR = $(OPIEDIR)/plugins/today
+TARGET = todaystocktickerplugin
diff --git a/noncore/todayplugins/stockticker/stocktickerlib/stocktickerplugin.cpp b/noncore/todayplugins/stockticker/stocktickerlib/stocktickerplugin.cpp
new file mode 100644
index 0000000..82dfb13
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/stocktickerlib/stocktickerplugin.cpp
@@ -0,0 +1,56 @@
+/*
+ * stocktickerplugin.cpp
+ *
+ * copyright : (c) 2002 by L.J. Potter
+ * email : llornkcor@handhelds.org
+ *
+ */
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+
+#include "stocktickerplugin.h"
+#include "stocktickerpluginwidget.h"
+
+
+StockTickerPlugin::StockTickerPlugin() {
+}
+
+StockTickerPlugin::~StockTickerPlugin() {
+}
+
+QString StockTickerPlugin::pluginName() const {
+ return QObject::tr( "StockTicker plugin" );
+}
+
+double StockTickerPlugin::versionNumber() const {
+ return 0.6;
+}
+
+QString StockTickerPlugin::pixmapNameWidget() const {
+ return "pass";
+}
+
+QWidget* StockTickerPlugin::widget( QWidget * wid ) {
+ return new StockTickerPluginWidget( wid, "StockTicker " );
+}
+
+QString StockTickerPlugin::pixmapNameConfig() const {
+ return 0l;
+}
+
+TodayConfigWidget* StockTickerPlugin::configWidget( QWidget* wid ) {
+ return 0l;
+}
+
+QString StockTickerPlugin::appName() const {
+ return "stockticker";
+}
+
+
diff --git a/noncore/todayplugins/stockticker/stocktickerlib/stocktickerplugin.h b/noncore/todayplugins/stockticker/stocktickerlib/stocktickerplugin.h
new file mode 100644
index 0000000..9f174bf
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/stocktickerlib/stocktickerplugin.h
@@ -0,0 +1,47 @@
+/*
+ * stocktickerplugin.h
+ *
+ * copyright : (c) 2002 by L.J. Potter
+ * email : llornkcor@handhelds.org
+ *
+ */
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+
+#ifndef STOCKTICKER_PLUGIN_H
+#define STOCKTICKER_PLUGIN_H
+
+#include <qstring.h>
+#include <qwidget.h>
+
+#include <opie/tododb.h>
+#include <opie/oclickablelabel.h>
+
+#include <opie/todayplugininterface.h>
+#include <opie/todayconfigwidget.h>
+
+class StockTickerPlugin : public TodayPluginObject {
+
+public:
+ StockTickerPlugin();
+ ~StockTickerPlugin();
+
+ QString pluginName() const;
+ double versionNumber() const;
+ QString pixmapNameWidget() const;
+ QWidget* widget(QWidget *);
+ QString pixmapNameConfig() const;
+ TodayConfigWidget* configWidget(QWidget *);
+ QString appName() const;
+
+
+};
+
+#endif
diff --git a/noncore/todayplugins/stockticker/stocktickerlib/stocktickerpluginimpl.cpp b/noncore/todayplugins/stockticker/stocktickerlib/stocktickerpluginimpl.cpp
new file mode 100644
index 0000000..9a640d4
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/stocktickerlib/stocktickerpluginimpl.cpp
@@ -0,0 +1,45 @@
+/*
+ * stocktickerpluginimpl.cpp
+ *
+ * copyright : (c) 2002 by L.J. Potter
+ * email : llornkcor@handhelds.org
+ *
+ */
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+
+
+#include "stocktickerplugin.h"
+#include "stocktickerpluginimpl.h"
+
+StockTickerPluginImpl::StockTickerPluginImpl() {
+ stocktickerPlugin = new StockTickerPlugin();
+}
+
+StockTickerPluginImpl::~StockTickerPluginImpl() {
+}
+
+
+TodayPluginObject* StockTickerPluginImpl::guiPart() {
+ return stocktickerPlugin;
+}
+
+QRESULT StockTickerPluginImpl::queryInterface( const QUuid & uuid, QUnknownInterface **iface ) {
+ *iface = 0;
+ if ( ( uuid == IID_QUnknown ) || ( uuid == IID_TodayPluginInterface ) ) {
+ *iface = this, (*iface)->addRef();
+ }
+ return QS_OK;
+
+}
+
+Q_EXPORT_INTERFACE() {
+ Q_CREATE_INSTANCE( StockTickerPluginImpl );
+}
diff --git a/noncore/todayplugins/stockticker/stocktickerlib/stocktickerpluginimpl.h b/noncore/todayplugins/stockticker/stocktickerlib/stocktickerpluginimpl.h
new file mode 100644
index 0000000..300c545
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/stocktickerlib/stocktickerpluginimpl.h
@@ -0,0 +1,40 @@
+/*
+ * stocktickerpluginimpl.h
+ *
+ * copyright : (c) 2002 by L.J. Potter
+ * email : llornkcor@handhelds.org
+ *
+ */
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef STOCKTICKER_PLUGIN_IMPL_H
+#define STOCKTICKER_PLUGIN_IMPL_H
+
+#include <opie/todayplugininterface.h>
+
+class StockTickerPlugin;
+
+class StockTickerPluginImpl : public TodayPluginInterface{
+
+public:
+ StockTickerPluginImpl();
+ virtual ~StockTickerPluginImpl();
+
+ QRESULT queryInterface( const QUuid &, QUnknownInterface** );
+ Q_REFCOUNT
+
+ virtual TodayPluginObject *guiPart();
+
+private:
+ StockTickerPlugin *stocktickerPlugin;
+ ulong ref;
+};
+
+#endif
diff --git a/noncore/todayplugins/stockticker/stocktickerlib/stocktickerpluginwidget.cpp b/noncore/todayplugins/stockticker/stocktickerlib/stocktickerpluginwidget.cpp
new file mode 100644
index 0000000..3eaade4
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/stocktickerlib/stocktickerpluginwidget.cpp
@@ -0,0 +1,239 @@
+/*
+ * stocktickerpluginwidget.cpp
+ *
+ * copyright : (c) 2002 by L.J. Potter
+ * email : llornkcor@handhelds.org
+ *
+ */
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include <qvaluelist.h>
+#include <qtl.h>
+#include <qstring.h>
+#include <qstringlist.h>
+#include <qobject.h>
+#include <qlayout.h>
+#include <qlineedit.h>
+#include <qregexp.h>
+
+#include <qpe/config.h>
+#include <qpe/timestring.h>
+#include <qpe/qcopenvelope_qws.h>
+
+#include "ticker.h"
+
+extern "C" {
+#include "libstocks/stocks.h"
+}
+
+#include "stocktickerpluginwidget.h"
+
+StockTickerPluginWidget::StockTickerPluginWidget( QWidget *parent, const char* name)
+ : QWidget(parent, name ) {
+ init();
+}
+
+StockTickerPluginWidget::~StockTickerPluginWidget() {
+}
+
+void StockTickerPluginWidget::init() {
+
+ QHBoxLayout* layout = new QHBoxLayout( this );
+
+ stocktickerTicker = new Ticker(this);
+ stocktickerTicker->setMinimumHeight(15);
+ connect( stocktickerTicker, SIGNAL( mousePressed()), this, SLOT( doStocks() ));
+
+ layout->addWidget( stocktickerTicker);
+}
+
+void StockTickerPluginWidget::doStocks() {
+
+ Config cfg( "stockticker");
+ cfg.setGroup( "Symbols" );
+ QString symbollist;
+ symbollist = cfg.readEntry("Symbols", "");
+ symbollist.replace(QRegExp(" "),"+");//seperated by +
+// qDebug(symbollist);
+
+ getStocks( symbollist.latin1());
+
+ stocktickerTicker->setText( output );
+}
+
+void StockTickerPluginWidget::getStocks( const char *blah) {
+
+ stock *stocks_quotes=NULL;
+ stock *stocks_tmp;
+
+ QString tempString;
+ output = "";
+
+ libstocks_return_code error;
+
+ Config cfg( "stockticker");
+ cfg.setGroup( "Fields" );
+ bool dotimeCheck, dodateCheck, dosymbolCheck, donameCheck;
+ bool docurrentPriceCheck, dolastPriceCheck, doopenPriceCheck;
+ bool dominPriceCheck, domaxPriceCheck, dovariationCheck, dovolumeCheck;
+
+ dotimeCheck=dodateCheck=dosymbolCheck=donameCheck= docurrentPriceCheck=dolastPriceCheck=doopenPriceCheck=dominPriceCheck=domaxPriceCheck=dovariationCheck=dovolumeCheck=false;
+
+ dotimeCheck=cfg.readBoolEntry("timeCheck",1);
+ dodateCheck=cfg.readBoolEntry("dateCheck",1);
+ dosymbolCheck=cfg.readBoolEntry("symbolCheck",1);
+ donameCheck=cfg.readBoolEntry("nameCheck",1);
+ docurrentPriceCheck=cfg.readBoolEntry("currentPriceCheck",1);
+ dolastPriceCheck=cfg.readBoolEntry("lastPriceCheck",1);
+ doopenPriceCheck=cfg.readBoolEntry("openPriceCheck",1);
+ dominPriceCheck=cfg.readBoolEntry("minPriceCheck",1);
+ domaxPriceCheck=cfg.readBoolEntry("maxPriceCheck",1);
+ dovariationCheck=cfg.readBoolEntry("variationCheck",1);
+ dovolumeCheck=cfg.readBoolEntry("volumeCheck",1);
+
+ DefProxy();
+ char *stock_liste = (char *)blah;
+ /* Get the stocks and process errors */
+ error = get_stocks( stock_liste, &stocks_quotes);
+
+ if (error) {
+ printf("Error in getting stocks (%d)\n", error);
+ tempString.sprintf("Error in getting stocks (%d)\n", error);
+ output =tempString;
+ return;
+// exit(1);
+ }
+
+ stocks_tmp = stocks_quotes;
+
+ /* Displays the stocks */
+ while(stocks_tmp!=0){
+
+ if (stocks_tmp->Time) {
+// printf("%s ", stocks_tmp->Time);
+ tempString.sprintf("|| %s ", stocks_tmp->Time);
+ tempString.replace(QRegExp("\""),"");
+ if( dotimeCheck)
+ output +=tempString;
+ }
+ if (stocks_tmp->Date) {
+// printf("%s ", stocks_tmp->Date);
+ tempString.sprintf("| %s ", stocks_tmp->Date);
+ tempString.replace(QRegExp("\""),"");
+ if(dodateCheck)
+ output +=tempString;
+ }
+// printf("\n");
+
+// printf("----------------------------------------\n");
+
+ if ( strlen(stocks_tmp->Symbol) > 20 ) {
+// printf("| Symbol | %.20s |\n",stocks_tmp->Symbol);
+ tempString.sprintf("| Symbol %s ",stocks_tmp->Symbol);
+ if(dosymbolCheck)
+ output +=tempString;
+ }
+ else {
+// printf("| Symbol | %-20s |\n",stocks_tmp->Symbol);
+ tempString.sprintf("| Symbol %s ",stocks_tmp->Symbol);
+ if(dosymbolCheck)
+ output +=tempString;
+ }
+
+ if (stocks_tmp->Name) {
+ if ( strlen(stocks_tmp->Name) > 20 ) {
+// printf("| Name %.20s |\n",stocks_tmp->Name);
+ tempString.sprintf("| Name %s ",stocks_tmp->Name);
+ tempString.stripWhiteSpace();
+ if(donameCheck)
+ output +=tempString;
+ } else {
+// printf("| Name | %-20s |\n",stocks_tmp->Name);
+ tempString.sprintf("| Name %s ",stocks_tmp->Name);
+ tempString.stripWhiteSpace();
+ if(donameCheck)
+ output +=tempString;
+ }
+ }
+ else {
+// printf("| Name | |\n");
+ tempString.sprintf("| Name | |");
+ if(donameCheck)
+ output +=tempString;
+ }
+
+// printf("| Price | %-7.2f |\n", stocks_tmp->CurrentPrice);
+ tempString.sprintf("| Price %-7.2f ", stocks_tmp->CurrentPrice);
+ if(docurrentPriceCheck)
+ output +=tempString;
+
+// printf("| Yesterday | %-7.2f |\n",stocks_tmp->LastPrice);
+ tempString.sprintf("| Yesterday %-7.2f ",stocks_tmp->LastPrice);
+ if(dolastPriceCheck)
+ output +=tempString;
+
+// printf("| Open | %-7.2f |\n",stocks_tmp->OpenPrice);
+ tempString.sprintf("| Open %-7.2f ",stocks_tmp->OpenPrice);
+ if(doopenPriceCheck)
+ output +=tempString;
+
+// printf("| Min | %-7.2f |\n", stocks_tmp->MinPrice);
+ tempString.sprintf("| Min %-7.2f ", stocks_tmp->MinPrice);
+ if(dominPriceCheck)
+ output +=tempString;
+
+// printf("| Max | %-7.2f |\n",stocks_tmp->MaxPrice);
+ tempString.sprintf("| Max %-7.2f ",stocks_tmp->MaxPrice);
+ if(domaxPriceCheck)
+ output +=tempString;
+
+// printf("| Var | %-6.2f (%5.2f %%) |\n", stocks_tmp->Variation, stocks_tmp->Pourcentage);
+ tempString.sprintf("| Var %-6.2f (%5.2f %%) ", stocks_tmp->Variation, stocks_tmp->Pourcentage);
+ if(dovariationCheck)
+ output +=tempString;
+
+// printf("| Volume | %-9d |\n", stocks_tmp->Volume);
+ tempString.sprintf("| Volume %-9d ", stocks_tmp->Volume);
+ if(dovolumeCheck)
+ output +=tempString;
+
+// printf("----------------------------------------\n\n");
+ tempString.sprintf("||==++==");
+ output +=tempString;
+
+ /* Simple function which help to browse in the stocks list */
+ stocks_tmp = next_stock(stocks_tmp);
+ }
+
+ /* frees stocks */
+ free_stocks(stocks_quotes);
+
+}
+
+void StockTickerPluginWidget::DefProxy(void) {
+ char *proxy;
+ libstocks_return_code error;
+
+ /* Proxy support */
+ /* Checks for "http_proxy" environment variable */
+ proxy = getenv("http_proxy");
+ if(proxy) {
+ /* printf("proxy set\n"); */
+ error = set_proxy(proxy);
+ if (error) {
+// printf("Proxy error (%d)\n", error);
+ QString tempString;
+ tempString.sprintf("Proxy error (%d)\n", error);
+ output = tempString;
+ return;
+// exit(1);
+ }
+ }
+}
diff --git a/noncore/todayplugins/stockticker/stocktickerlib/stocktickerpluginwidget.h b/noncore/todayplugins/stockticker/stocktickerlib/stocktickerpluginwidget.h
new file mode 100644
index 0000000..6524ae4
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/stocktickerlib/stocktickerpluginwidget.h
@@ -0,0 +1,62 @@
+/*
+ * stocktickerpluginwidget.h
+ *
+ * copyright : (c) 2002 by L.J. Potter
+ * email : lornkcor@handhelds.org
+ *
+ */
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+
+#ifndef STOCKTICKERL_PLUGIN_WIDGET_H
+#define STOCKTICKERL_PLUGIN_WIDGET_H
+
+#include <qstring.h>
+#include <qwidget.h>
+#include <qlineedit.h>
+
+#include <opie/tododb.h>
+#include <opie/oclickablelabel.h>
+
+#include <sys/types.h>
+#include <sys/uio.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "ticker.h"
+
+/* extern "C" { */
+/* #include "stocks.h" */
+/* } */
+
+class StockTickerPluginWidget : public QWidget {
+
+ Q_OBJECT
+
+public:
+ StockTickerPluginWidget( QWidget *parent, const char *name );
+ ~StockTickerPluginWidget();
+ QString output;
+
+protected slots:
+ void doStocks();
+
+private:
+ Ticker *stocktickerTicker;
+
+ void init();
+ void getStocks( const char *stock_liste);
+ void DefProxy(void);
+
+};
+
+#endif
diff --git a/noncore/todayplugins/stockticker/stocktickerlib/stocktimerpluginwidget.h b/noncore/todayplugins/stockticker/stocktickerlib/stocktimerpluginwidget.h
new file mode 100644
index 0000000..2feef80
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/stocktickerlib/stocktimerpluginwidget.h
@@ -0,0 +1,45 @@
+/*
+ * mailpluginwidget.h
+ *
+ * copyright : (c) 2002 by Maximilian Reiß
+ * email : harlekin@handhelds.org
+ *
+ */
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+
+#ifndef MAIL_PLUGIN_WIDGET_H
+#define MAIL_PLUGIN_WIDGET_H
+
+#include <qstring.h>
+#include <qwidget.h>
+
+#include <opie/tododb.h>
+#include <opie/oclickablelabel.h>
+
+class MailPluginWidget : public QWidget {
+
+ Q_OBJECT
+
+
+public:
+ MailPluginWidget( QWidget *parent, const char *name );
+ ~MailPluginWidget();
+
+protected slots:
+ void startMail();
+
+private:
+ OClickableLabel *mailLabel;
+ void readConfig();
+ void getInfo();
+};
+
+#endif
diff --git a/noncore/todayplugins/stockticker/stocktickerlib/ticker.cpp b/noncore/todayplugins/stockticker/stocktickerlib/ticker.cpp
new file mode 100644
index 0000000..6e6273b
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/stocktickerlib/ticker.cpp
@@ -0,0 +1,93 @@
+/*
+                This file is part of the Opie Project
+
+              Copyright (c) 2002 Max Reiss <harlekin@handhelds.org>
+ Copyright (c) 2002 L. Potter <ljp@llornkcor.com>
+ Copyright (c) 2002 Holger Freyther <zecke@handhelds.org>
+ =.
+ .=l.
+           .>+-=
+ _;:,     .>    :=|. This program is free software; you can
+.> <`_,   >  .   <= redistribute it and/or modify it under
+:`=1 )Y*s>-.--   : the terms of the GNU General Public
+.="- .-=="i,     .._ License as published by the Free Software
+ - .   .-<_>     .<> Foundation; either version 2 of the License,
+     ._= =}       : or (at your option) any later version.
+    .%`+i>       _;_.
+    .i_,=:_.      -<s. This program is distributed in the hope that
+     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
+    : ..    .:,     . . . without even the implied warranty of
+    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
+  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
+..}^=.=       =       ; Library General Public License for more
+++=   -.     .`     .: details.
+ :     =  ...= . :.=-
+ -.   .:....=;==+<; You should have received a copy of the GNU
+  -_. . .   )=.  = Library General Public License along with
+    --        :-=` this library; see the file COPYING.LIB.
+ If not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+*/
+
+#include <qpe/qpeapplication.h>
+#include <qpe/resource.h>
+#include <qpe/config.h>
+
+#include <qwidget.h>
+#include <qpixmap.h>
+#include <qbutton.h>
+#include <qpainter.h>
+#include <qframe.h>
+#include <qlayout.h>
+#include <qdir.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "ticker.h"
+
+Ticker::Ticker( QWidget* parent=0 ) : QFrame( parent ) {
+ setFrameStyle( NoFrame/*WinPanel | Sunken */);
+}
+
+Ticker::~Ticker() {
+}
+
+void Ticker::setText( const QString& text ) {
+
+ pos = 0; // reset it everytime the text is changed
+ scrollText = text;
+
+ int pixelLen = fontMetrics().width( text );
+ QPixmap pm( pixelLen, contentsRect().height() );
+ pm.fill( QColor( 167, 212, 167 ) );
+ QPainter pmp( &pm );
+ pmp.setPen( Qt::black );
+ pmp.drawText( 0, 0, pixelLen, contentsRect().height(), AlignVCenter, scrollText );
+ pmp.end();
+ scrollTextPixmap = pm;
+
+ killTimers();
+ if ( pixelLen > contentsRect().width() )
+ startTimer( 50 );
+ update();
+}
+
+
+void Ticker::timerEvent( QTimerEvent * ) {
+ pos = ( pos <= 0 ) ? scrollTextPixmap.width() : pos - 1;
+ repaint( FALSE );
+}
+
+void Ticker::drawContents( QPainter *p ) {
+ int pixelLen = scrollTextPixmap.width();
+ p->drawPixmap( pos, contentsRect().y(), scrollTextPixmap );
+ if ( pixelLen > contentsRect().width() ) // Scrolling
+ p->drawPixmap( pos - pixelLen, contentsRect().y(), scrollTextPixmap );
+}
+
+void Ticker::mouseReleaseEvent( QMouseEvent * e) {
+ qDebug("<<<<<<<>>>>>>>>>");
+ emit mousePressed();
+}
diff --git a/noncore/todayplugins/stockticker/stocktickerlib/ticker.h b/noncore/todayplugins/stockticker/stocktickerlib/ticker.h
new file mode 100644
index 0000000..3b68928
--- a/dev/null
+++ b/noncore/todayplugins/stockticker/stocktickerlib/ticker.h
@@ -0,0 +1,32 @@
+#ifndef TICKER_H
+#define TICKER_H
+
+#include <qwidget.h>
+#include <qpainter.h>
+#include <qdrawutil.h>
+#include <qpixmap.h>
+#include <qstring.h>
+#include <qslider.h>
+#include <qframe.h>
+#include <qlineedit.h>
+
+class Ticker : public QFrame {
+ Q_OBJECT
+
+public:
+ Ticker( QWidget* parent=0 );
+ ~Ticker();
+ void setText( const QString& text ) ;
+signals:
+ void mousePressed();
+protected:
+ void timerEvent( QTimerEvent * );
+ void drawContents( QPainter *p );
+ void mouseReleaseEvent ( QMouseEvent *);
+private:
+ QString scrollText;
+ QPixmap scrollTextPixmap;
+ int pos;//, pixelLen;
+};
+
+#endif