summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/todayplugins/stockticker/libstocks/csv.c323
-rw-r--r--noncore/todayplugins/stockticker/libstocks/http.c87
2 files changed, 206 insertions, 204 deletions
diff --git a/noncore/todayplugins/stockticker/libstocks/csv.c b/noncore/todayplugins/stockticker/libstocks/csv.c
index 99a44e4..27bcce6 100644
--- a/noncore/todayplugins/stockticker/libstocks/csv.c
+++ b/noncore/todayplugins/stockticker/libstocks/csv.c
@@ -1,37 +1,38 @@
/* 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
+ * 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__
+#ifdef __UNIX__
#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]=
@@ -113,178 +114,178 @@ stock *parse_csv_file(char *csv)
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;
- }
+ {
+ 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));
+ {
+ /* 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;
-
- }
+ 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;
- }
+ {
+ /* 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;
@@ -308,95 +309,95 @@ stock *parse_csv_history_file(char *csv_file)
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);
- }
+ {
+ 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;
+ /* It seems to be an indice */
+ /* No volume for indices */
+ StockPtr->Volume = 0;
else
- StockPtr->Volume = atoi(ptr);
+ StockPtr->Volume = atoi(ptr);
if( !FirstStockPtr )
- {
- FirstStockPtr = StockPtr;
- StockPtr->PreviousStock = 0;
- }
+ {
+ FirstStockPtr = StockPtr;
+ StockPtr->PreviousStock = 0;
+ }
StockPtr->NextStock = 0;
if (LastStockPtr)
- {
- LastStockPtr->NextStock = StockPtr;
- StockPtr->PreviousStock = LastStockPtr;
- }
+ {
+ LastStockPtr->NextStock = StockPtr;
+ StockPtr->PreviousStock = LastStockPtr;
+ }
LastStockPtr = StockPtr;
end_line++;
line = end_line;
}
return (FirstStockPtr);
}
diff --git a/noncore/todayplugins/stockticker/libstocks/http.c b/noncore/todayplugins/stockticker/libstocks/http.c
index 462080d..3078746 100644
--- a/noncore/todayplugins/stockticker/libstocks/http.c
+++ b/noncore/todayplugins/stockticker/libstocks/http.c
@@ -1,37 +1,38 @@
/* 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
+ * 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__
+#define __UNIX__
#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>
@@ -72,35 +73,35 @@ libstocks_return_code http_get(char *http_file, char *http_server, char **pdata)
#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");
+ printf(" gethostbyname : NOK\n");
#endif
- return ERRHOST;
+ 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)
@@ -108,150 +109,150 @@ libstocks_return_code http_get(char *http_file, char *http_server, char **pdata)
#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);
+ 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");
+ 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;
- }
- }
+ {
+ 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;
- }
+ {
+ /* test if it is the header end */
+ temp ++;
+ if (*temp == 0x0D) temp++;
+ if (*temp == 0x0A) header_founded = 1;
+ }
else
- temp++;
+ 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__);
+ ,__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;
}