-rw-r--r-- | noncore/todayplugins/stockticker/libstocks/csv.c | 323 | ||||
-rw-r--r-- | noncore/todayplugins/stockticker/libstocks/http.c | 87 |
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; } |