Mercurial > forge
view main/system-identification/devel/tisean/source_c/routines/get_series.c @ 9894:82ff20b4d849 octave-forge
system-identitifaction: Adding devel TISEAN files
author | jpicarbajal |
---|---|
date | Wed, 28 Mar 2012 13:32:37 +0000 |
parents | |
children |
line wrap: on
line source
/* * This file is part of TISEAN * * Copyright (c) 1998-2007 Rainer Hegger, Holger Kantz, Thomas Schreiber * * TISEAN 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. * * TISEAN 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with TISEAN; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /*Author: Rainer Hegger Last modified: Sep 3, 1999 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "tsa.h" #include "tisean_cec.h" #define SIZE_STEP 1000 extern void check_alloc(void*); double *get_series(char *name,unsigned long *l,unsigned long ex, unsigned int col,unsigned int verbosity) { char *input,*format; int i; unsigned long count,allcount,max_size=SIZE_STEP,hl; int input_size=INPUT_SIZE; double *x; FILE *fin; check_alloc(input=(char*)calloc((size_t)input_size,(size_t)1)); check_alloc(format=(char*)calloc((size_t)(4*col),(size_t)1)); strcpy(format,""); for (i=1;i<col;i++) strcat(format,"%*lf"); strcat(format,"%lf"); check_alloc(x=(double*)malloc(sizeof(double)*max_size)); hl= *l; count=0; allcount=0; if (name == NULL) { for (i=0;i<ex;i++) if ((input=myfgets(input,&input_size,stdin,verbosity)) == NULL) break; while ((count < hl) && ((input=myfgets(input,&input_size,stdin,verbosity)) != NULL)) { if (count == max_size) { max_size += SIZE_STEP; check_alloc(x=(double*)realloc(x,sizeof(double)*max_size)); } allcount++; if (sscanf(input,format,&x[count]) != 1) { if (verbosity&VER_INPUT) fprintf(stderr,"Line %lu ignored: %s",allcount,input); } else count++; if ((verbosity&VER_FIRST_LINE) && (count == 0)) fprintf(stderr,"get_series: first data item used:\n%lf\n",x[0]); } } else { fin=fopen(name,"r"); for (i=0;i<ex;i++) if ((input=myfgets(input,&input_size,fin,verbosity)) == NULL) break; while ((count < hl) && ((input=myfgets(input,&input_size,fin,verbosity)) != NULL)) { if (count == max_size) { max_size += SIZE_STEP; check_alloc(x=(double*)realloc(x,sizeof(double)*max_size)); } allcount++; if (sscanf(input,format,&x[count]) != 1) { if (verbosity&VER_INPUT) fprintf(stderr,"Line %lu ignored: %s",allcount,input); } else count++; } fclose(fin); } free(input); *l = count; if (*l == 0) { fprintf(stderr,"0 lines read. It makes no sense to continue. Exiting!\n"); exit(GET_SERIES_NO_LINES); } else { if (verbosity&VER_INPUT) fprintf(stderr,"Use %lu lines.\n",*l); } if (max_size > count) check_alloc(x=(double*)realloc(x,sizeof(double)*count)); return x; } #undef SIZE_STEP