[med-svn] [edfbrowser] 02/04: New upstream version 1.61+dfsg

Andreas Tille tille at debian.org
Fri Dec 15 12:26:46 UTC 2017


This is an automated email from the git hooks/post-receive script.

tille pushed a commit to branch master
in repository edfbrowser.

commit b3c838badfe4e540798173fc158ed055ef14fdc7
Author: Andreas Tille <tille at debian.org>
Date:   Fri Dec 15 13:02:41 2017 +0100

    New upstream version 1.61+dfsg
---
 edflib.c | 6783 --------------------------------------------------------------
 edflib.h |  626 ------
 2 files changed, 7409 deletions(-)

diff --git a/edflib.c b/edflib.c
deleted file mode 100644
index 31e65f4..0000000
--- a/edflib.c
+++ /dev/null
@@ -1,6783 +0,0 @@
-/*
-*****************************************************************************
-*
-* Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 Teunis van Beelen
-* All rights reserved.
-*
-* email: teuniz at gmail.com
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions are met:
-*     * Redistributions of source code must retain the above copyright
-*       notice, this list of conditions and the following disclaimer.
-*     * Redistributions in binary form must reproduce the above copyright
-*       notice, this list of conditions and the following disclaimer in the
-*       documentation and/or other materials provided with the distribution.
-*
-* THIS SOFTWARE IS PROVIDED BY Teunis van Beelen ''AS IS'' AND ANY
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-* DISCLAIMED. IN NO EVENT SHALL Teunis van Beelen BE LIABLE FOR ANY
-* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-*****************************************************************************
-*/
-
-
-
-
-/* compile with options "-D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE" */
-
-
-
-
-#include "edflib.h"
-
-
-#define EDFLIB_VERSION 112
-#define EDFLIB_MAXFILES 64
-
-
-#if defined(__APPLE__) || defined(__MACH__) || defined(__APPLE_CC__)
-
-#define fopeno fopen
-
-#else
-
-#define fseeko fseeko64
-#define ftello ftello64
-#define fopeno fopen64
-
-#endif
-
-
-#ifdef _WIN32
-
-#ifndef __MINGW32__
-/* needed for visual c */
-#undef fseeko
-#define fseeko _fseeki64
-
-#undef ftello
-#define ftello _ftelli64
-
-#undef fopeno
-#define fopeno fopen
-
-#endif
-
-#endif
-
-
-
-/* max size of annotationtext */
-#define EDFLIB_WRITE_MAX_ANNOTATION_LEN 40
-
-/* bytes in datarecord for EDF annotations, must be a multiple of three and two */
-#define EDFLIB_ANNOTATION_BYTES 114
-
-#define EDFLIB_ANNOT_MEMBLOCKSZ 1000
-
-
-struct edfparamblock{
-        char   label[17];
-        char   transducer[81];
-        char   physdimension[9];
-        double phys_min;
-        double phys_max;
-        int    dig_min;
-        int    dig_max;
-        char   prefilter[81];
-        int    smp_per_record;
-        char   reserved[33];
-        double offset;
-        int    buf_offset;
-        double bitvalue;
-        int    annotation;
-        long long sample_pntr;
-      };
-
-struct edfhdrblock{
-        FILE      *file_hdl;
-        char      path[1024];
-        int       writemode;
-        char      version[32];
-        char      patient[81];
-        char      recording[81];
-        char      plus_patientcode[81];
-        char      plus_gender[16];
-        char      plus_birthdate[16];
-        char      plus_patient_name[81];
-        char      plus_patient_additional[81];
-        char      plus_startdate[16];
-        char      plus_admincode[81];
-        char      plus_technician[81];
-        char      plus_equipment[81];
-        char      plus_recording_additional[81];
-        long long l_starttime;
-        int       startdate_day;
-        int       startdate_month;
-        int       startdate_year;
-        int       starttime_second;
-        int       starttime_minute;
-        int       starttime_hour;
-        char      reserved[45];
-        int       hdrsize;
-        int       edfsignals;
-        long long datarecords;
-        int       recordsize;
-        int       annot_ch[EDFLIB_MAXSIGNALS];
-        int       nr_annot_chns;
-        int       mapped_signals[EDFLIB_MAXSIGNALS];
-        int       edf;
-        int       edfplus;
-        int       bdf;
-        int       bdfplus;
-        int       discontinuous;
-        int       signal_write_sequence_pos;
-        long long starttime_offset;
-        double    data_record_duration;
-        long long long_data_record_duration;
-        int       annots_in_file;
-        int       annotlist_sz;
-        int       total_annot_bytes;
-        int       eq_sf;
-        struct edfparamblock *edfparam;
-      };
-
-
-static struct edf_annotationblock{
-        long long onset;
-        char duration[16];
-        char annotation[EDFLIB_MAX_ANNOTATION_LEN + 1];
-       } *annotationslist[EDFLIB_MAXFILES];
-
-
-static struct edf_write_annotationblock{
-        long long onset;
-        long long duration;
-        char annotation[EDFLIB_WRITE_MAX_ANNOTATION_LEN + 1];
-       } *write_annotationslist[EDFLIB_MAXFILES];
-
-static int edf_files_open=0;
-
-static struct edfhdrblock *hdrlist[EDFLIB_MAXFILES];
-
-
-static struct edfhdrblock * edflib_check_edf_file(FILE *, int *);
-static int edflib_is_integer_number(char *);
-static int edflib_is_number(char *);
-static long long edflib_get_long_duration(char *);
-static int edflib_get_annotations(struct edfhdrblock *, int, int);
-static int edflib_is_duration_number(char *);
-static int edflib_is_onset_number(char *);
-static long long edflib_get_long_time(char *);
-static int edflib_write_edf_header(struct edfhdrblock *);
-static void edflib_latin1_to_ascii(char *, int);
-static void edflib_latin12utf8(char *, int);
-static void edflib_remove_padding_trailing_spaces(char *);
-static int edflib_atoi_nonlocalized(const char *);
-static double edflib_atof_nonlocalized(const char *);
-static int edflib_sprint_number_nonlocalized(char *, double);
-/*
-static int edflib_sprint_int_number_nonlocalized(char *, int, int, int);
-*/
-static int edflib_sprint_ll_number_nonlocalized(char *, long long, int, int);
-static int edflib_fprint_int_number_nonlocalized(FILE *, int, int, int);
-static int edflib_fprint_ll_number_nonlocalized(FILE *, long long, int, int);
-
-
-
-
-
-int edflib_is_file_used(const char *path)
-{
-  int i, file_used=0;
-
-  for(i=0; i<EDFLIB_MAXFILES; i++)
-  {
-    if(hdrlist[i]!=NULL)
-    {
-      if(!(strcmp(path, hdrlist[i]->path)))
-      {
-        file_used = 1;
-
-        break;
-      }
-    }
-  }
-
-  return(file_used);
-}
-
-
-int edflib_get_number_of_open_files()
-{
-  return(edf_files_open);
-}
-
-
-int edflib_get_handle(int file_number)
-{
-  int i, file_count=0;
-
-  for(i=0; i<EDFLIB_MAXFILES; i++)
-  {
-    if(hdrlist[i]!=NULL)
-    {
-      if(file_count++ == file_number)
-      {
-        return(i);
-      }
-    }
-  }
-
-  return(-1);
-}
-
-
-int edfopen_file_readonly(const char *path, struct edf_hdr_struct *edfhdr, int read_annotations)
-{
-  int i, j,
-      channel,
-      edf_error;
-
-  FILE *file;
-
-  struct edfhdrblock *hdr;
-
-
-  if(read_annotations<0)
-  {
-    edfhdr->filetype = EDFLIB_INVALID_READ_ANNOTS_VALUE;
-
-    return(-1);
-  }
-
-  if(read_annotations>2)
-  {
-    edfhdr->filetype = EDFLIB_INVALID_READ_ANNOTS_VALUE;
-
-    return(-1);
-  }
-
-  memset(edfhdr, 0, sizeof(struct edf_hdr_struct));
-
-  if(edf_files_open>=EDFLIB_MAXFILES)
-  {
-    edfhdr->filetype = EDFLIB_MAXFILES_REACHED;
-
-    return(-1);
-  }
-
-  for(i=0; i<EDFLIB_MAXFILES; i++)
-  {
-    if(hdrlist[i]!=NULL)
-    {
-      if(!(strcmp(path, hdrlist[i]->path)))
-      {
-        edfhdr->filetype = EDFLIB_FILE_ALREADY_OPENED;
-
-        return(-1);
-      }
-    }
-  }
-
-  file = fopeno(path, "rb");
-  if(file==NULL)
-  {
-    edfhdr->filetype = EDFLIB_NO_SUCH_FILE_OR_DIRECTORY;
-
-    return(-1);
-  }
-
-  hdr = edflib_check_edf_file(file, &edf_error);
-  if(hdr==NULL)
-  {
-    edfhdr->filetype = edf_error;
-
-    fclose(file);
-
-    return(-1);
-  }
-
-  if(hdr->discontinuous)
-  {
-    edfhdr->filetype = EDFLIB_FILE_IS_DISCONTINUOUS;
-
-    free(hdr->edfparam);
-    free(hdr);
-
-    fclose(file);
-
-    return(-1);
-  }
-
-  hdr->writemode = 0;
-
-  for(i=0; i<EDFLIB_MAXFILES; i++)
-  {
-    if(hdrlist[i]==NULL)
-    {
-      hdrlist[i] = hdr;
-
-      edfhdr->handle = i;
-
-      break;
-    }
-  }
-
-  if((hdr->edf)&&(!(hdr->edfplus)))
-  {
-    edfhdr->filetype = EDFLIB_FILETYPE_EDF;
-  }
-
-  if(hdr->edfplus)
-  {
-    edfhdr->filetype = EDFLIB_FILETYPE_EDFPLUS;
-  }
-
-  if((hdr->bdf)&&(!(hdr->bdfplus)))
-  {
-    edfhdr->filetype = EDFLIB_FILETYPE_BDF;
-  }
-
-  if(hdr->bdfplus)
-  {
-    edfhdr->filetype = EDFLIB_FILETYPE_BDFPLUS;
-  }
-
-  edfhdr->edfsignals = hdr->edfsignals - hdr->nr_annot_chns;
-  edfhdr->file_duration = hdr->long_data_record_duration * hdr->datarecords;
-  edfhdr->startdate_day = hdr->startdate_day;
-  edfhdr->startdate_month = hdr->startdate_month;
-  edfhdr->startdate_year = hdr->startdate_year;
-  edfhdr->starttime_hour = hdr->starttime_hour;
-  edfhdr->starttime_second = hdr->starttime_second;
-  edfhdr->starttime_minute = hdr->starttime_minute;
-  edfhdr->starttime_subsecond = hdr->starttime_offset;
-  edfhdr->datarecords_in_file = hdr->datarecords;
-  edfhdr->datarecord_duration = hdr->long_data_record_duration;
-
-  annotationslist[edfhdr->handle] = NULL;
-
-  hdr->annotlist_sz = 0;
-
-  hdr->annots_in_file = 0;
-
-  edfhdr->annotations_in_file = 0LL;
-
-  if((!(hdr->edfplus))&&(!(hdr->bdfplus)))
-  {
-    strcpy(edfhdr->patient, hdr->patient);
-    strcpy(edfhdr->recording, hdr->recording);
-    edfhdr->patientcode[0] = 0;
-    edfhdr->gender[0] = 0;
-    edfhdr->birthdate[0] = 0;
-    edfhdr->patient_name[0] = 0;
-    edfhdr->patient_additional[0] = 0;
-    edfhdr->admincode[0] = 0;
-    edfhdr->technician[0] = 0;
-    edfhdr->equipment[0] = 0;
-    edfhdr->recording_additional[0] = 0;
-  }
-  else
-  {
-    edfhdr->patient[0] = 0;
-    edfhdr->recording[0] = 0;
-    strcpy(edfhdr->patientcode, hdr->plus_patientcode);
-    strcpy(edfhdr->gender, hdr->plus_gender);
-    strcpy(edfhdr->birthdate, hdr->plus_birthdate);
-    strcpy(edfhdr->patient_name, hdr->plus_patient_name);
-    strcpy(edfhdr->patient_additional, hdr->plus_patient_additional);
-    strcpy(edfhdr->admincode, hdr->plus_admincode);
-    strcpy(edfhdr->technician, hdr->plus_technician);
-    strcpy(edfhdr->equipment, hdr->plus_equipment);
-    strcpy(edfhdr->recording_additional, hdr->plus_recording_additional);
-
-    if((read_annotations==EDFLIB_READ_ANNOTATIONS)||(read_annotations==EDFLIB_READ_ALL_ANNOTATIONS))
-    {
-      if(edflib_get_annotations(hdr, edfhdr->handle, read_annotations))
-      {
-        edfhdr->filetype = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-
-        fclose(file);
-
-        free(hdr->edfparam);
-        free(hdr);
-
-        return(-1);
-      }
-    }
-
-    edfhdr->annotations_in_file = hdr->annots_in_file;
-  }
-
-  strcpy(hdr->path, path);
-
-  edf_files_open++;
-
-  j = 0;
-
-  for(i=0; i<hdr->edfsignals; i++)
-  {
-    if(!(hdr->edfparam[i].annotation))
-    {
-      hdr->mapped_signals[j++] = i;
-    }
-  }
-
-  for(i=0; i<edfhdr->edfsignals; i++)
-  {
-    channel = hdr->mapped_signals[i];
-
-    strcpy(edfhdr->signalparam[i].label, hdr->edfparam[channel].label);
-    strcpy(edfhdr->signalparam[i].transducer, hdr->edfparam[channel].transducer);
-    strcpy(edfhdr->signalparam[i].physdimension, hdr->edfparam[channel].physdimension);
-    strcpy(edfhdr->signalparam[i].prefilter, hdr->edfparam[channel].prefilter);
-    edfhdr->signalparam[i].smp_in_file = hdr->edfparam[channel].smp_per_record * hdr->datarecords;
-    edfhdr->signalparam[i].phys_max = hdr->edfparam[channel].phys_max;
-    edfhdr->signalparam[i].phys_min = hdr->edfparam[channel].phys_min;
-    edfhdr->signalparam[i].dig_max = hdr->edfparam[channel].dig_max;
-    edfhdr->signalparam[i].dig_min = hdr->edfparam[channel].dig_min;
-    edfhdr->signalparam[i].smp_in_datarecord = hdr->edfparam[channel].smp_per_record;
-  }
-
-  return(0);
-}
-
-
-int edfclose_file(int handle)
-{
-  struct edf_write_annotationblock *annot2;
-
-  int i, j, k, n, p,
-      datrecsize,
-      nmemb;
-
-  long long offset,
-            datarecords;
-
-  char str[EDFLIB_ANNOTATION_BYTES * 2];
-
-  struct edfhdrblock *hdr;
-
-
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  hdr = hdrlist[handle];
-
-  if(hdr->writemode)
-  {
-    if(hdr->datarecords == 0LL)
-    {
-      if(edflib_write_edf_header(hdr))
-      {
-        return(-1);
-      }
-
-      for(k=0; k<hdr->annots_in_file; k++)
-      {
-        annot2 = write_annotationslist[handle] + k;
-
-        p = edflib_fprint_ll_number_nonlocalized(hdr->file_hdl, (hdr->datarecords * hdr->long_data_record_duration) / EDFLIB_TIME_DIMENSION, 0, 1);
-
-        if(hdr->long_data_record_duration % EDFLIB_TIME_DIMENSION)
-        {
-          fputc('.', hdr->file_hdl);
-          p++;
-          p += edflib_fprint_ll_number_nonlocalized(hdr->file_hdl, (hdr->datarecords * hdr->long_data_record_duration) % EDFLIB_TIME_DIMENSION, 7, 0);
-        }
-        fputc(20, hdr->file_hdl);
-        fputc(20, hdr->file_hdl);
-        p += 2;
-        for(; p<hdr->total_annot_bytes; p++)
-        {
-          fputc(0, hdr->file_hdl);
-        }
-
-        hdr->datarecords++;
-      }
-    }
-
-    if(hdr->datarecords<100000000LL)
-    {
-      fseeko(hdr->file_hdl, 236LL, SEEK_SET);
-      p = edflib_fprint_int_number_nonlocalized(hdr->file_hdl, (int)(hdr->datarecords), 0, 0);
-      if(p < 2)
-      {
-        fputc(' ', hdr->file_hdl);
-      }
-    }
-
-    datarecords = 0LL;
-
-    offset = (long long)((hdr->edfsignals + hdr->nr_annot_chns + 1) * 256);
-
-    datrecsize = hdr->total_annot_bytes;
-
-    for(i=0; i<hdr->edfsignals; i++)
-    {
-      if(hdr->edf)
-      {
-        offset += (long long)(hdr->edfparam[i].smp_per_record * 2);
-
-        datrecsize += (hdr->edfparam[i].smp_per_record * 2);
-      }
-      else
-      {
-        offset += (long long)(hdr->edfparam[i].smp_per_record * 3);
-
-        datrecsize += (hdr->edfparam[i].smp_per_record * 3);
-      }
-    }
-
-    j = 0;
-
-    for(k=0; k<hdr->annots_in_file; k++)
-    {
-      annot2 = write_annotationslist[handle] + k;
-
-      p = 0;
-
-      if(j==0)  // first annotation signal
-      {
-        if(fseeko(hdr->file_hdl, offset, SEEK_SET))
-        {
-          break;
-        }
-
-        p += edflib_sprint_ll_number_nonlocalized(str, (datarecords * hdr->long_data_record_duration) / EDFLIB_TIME_DIMENSION, 0, 1);
-
-        if(hdr->long_data_record_duration % EDFLIB_TIME_DIMENSION)
-        {
-          str[p++] = '.';
-          n = edflib_sprint_ll_number_nonlocalized(str + p, (datarecords * hdr->long_data_record_duration) % EDFLIB_TIME_DIMENSION, 7, 0);
-          p += n;
-        }
-        str[p++] = 20;
-        str[p++] = 20;
-        str[p++] =  0;
-      }
-
-      n = edflib_sprint_ll_number_nonlocalized(str + p, annot2->onset / 10000LL, 0, 1);
-      p += n;
-      if(annot2->onset % 10000LL)
-      {
-        str[p++] = '.';
-        n = edflib_sprint_ll_number_nonlocalized(str + p, annot2->onset % 10000LL, 4, 0);
-        p += n;
-      }
-      if(annot2->duration>=0LL)
-      {
-        str[p++] = 21;
-        n = edflib_sprint_ll_number_nonlocalized(str + p, annot2->duration / 10000LL, 0, 0);
-        p += n;
-        if(annot2->duration % 10000LL)
-        {
-          str[p++] = '.';
-          n = edflib_sprint_ll_number_nonlocalized(str + p, annot2->duration % 10000LL, 4, 0);
-          p += n;
-        }
-      }
-      str[p++] = 20;
-      for(i=0; i<EDFLIB_WRITE_MAX_ANNOTATION_LEN; i++)
-      {
-        if(annot2->annotation[i]==0)
-        {
-          break;
-        }
-
-        str[p++] = annot2->annotation[i];
-      }
-      str[p++] = 20;
-
-      for(; p<EDFLIB_ANNOTATION_BYTES; p++)
-      {
-        str[p] = 0;
-      }
-
-      nmemb = fwrite(str, EDFLIB_ANNOTATION_BYTES, 1, hdr->file_hdl);
-
-      if(nmemb != 1)
-      {
-        break;
-      }
-
-      j++;
-
-      if(j >= hdr->nr_annot_chns)
-      {
-        j = 0;
-
-        offset += datrecsize;
-
-        datarecords++;
-
-        if(datarecords>=hdr->datarecords)
-        {
-          break;
-        }
-      }
-    }
-
-    free(write_annotationslist[handle]);
-  }
-  else
-  {
-    free(annotationslist[handle]);
-  }
-
-  fclose(hdr->file_hdl);
-
-  free(hdr->edfparam);
-
-  free(hdr);
-
-  hdrlist[handle] = NULL;
-
-  edf_files_open--;
-
-  return(0);
-}
-
-
-long long edfseek(int handle, int edfsignal, long long offset, int whence)
-{
-  long long smp_in_file;
-
-  int channel;
-
-
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(edfsignal<0)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->writemode)
-  {
-    return(-1);
-  }
-
-  if(edfsignal>=(hdrlist[handle]->edfsignals - hdrlist[handle]->nr_annot_chns))
-  {
-    return(-1);
-  }
-
-  channel = hdrlist[handle]->mapped_signals[edfsignal];
-
-  smp_in_file = hdrlist[handle]->edfparam[channel].smp_per_record * hdrlist[handle]->datarecords;
-
-  if(whence==EDFSEEK_SET)
-  {
-    hdrlist[handle]->edfparam[channel].sample_pntr = offset;
-  }
-
-  if(whence==EDFSEEK_CUR)
-  {
-    hdrlist[handle]->edfparam[channel].sample_pntr += offset;
-  }
-
-  if(whence==EDFSEEK_END)
-  {
-    hdrlist[handle]->edfparam[channel].sample_pntr =
-      (hdrlist[handle]->edfparam[channel].smp_per_record * hdrlist[handle]->datarecords) + offset;
-  }
-
-  if(hdrlist[handle]->edfparam[channel].sample_pntr > smp_in_file)
-  {
-    hdrlist[handle]->edfparam[channel].sample_pntr = smp_in_file;
-  }
-
-  if(hdrlist[handle]->edfparam[channel].sample_pntr < 0LL)
-  {
-    hdrlist[handle]->edfparam[channel].sample_pntr = 0LL;
-  }
-
-  return(hdrlist[handle]->edfparam[channel].sample_pntr);
-}
-
-
-long long edftell(int handle, int edfsignal)
-{
-  int channel;
-
-
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(edfsignal<0)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->writemode)
-  {
-    return(-1);
-  }
-
-  if(edfsignal>=(hdrlist[handle]->edfsignals - hdrlist[handle]->nr_annot_chns))
-  {
-    return(-1);
-  }
-
-  channel = hdrlist[handle]->mapped_signals[edfsignal];
-
-  return(hdrlist[handle]->edfparam[channel].sample_pntr);
-}
-
-
-void edfrewind(int handle, int edfsignal)
-{
-  int channel;
-
-
-  if(handle<0)
-  {
-    return;
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return;
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return;
-  }
-
-  if(edfsignal<0)
-  {
-    return;
-  }
-
-  if(hdrlist[handle]->writemode)
-  {
-    return;
-  }
-
-  if(edfsignal>=(hdrlist[handle]->edfsignals - hdrlist[handle]->nr_annot_chns))
-  {
-    return;
-  }
-
-  channel = hdrlist[handle]->mapped_signals[edfsignal];
-
-  hdrlist[handle]->edfparam[channel].sample_pntr = 0LL;
-}
-
-
-int edfread_physical_samples(int handle, int edfsignal, int n, double *buf)
-{
-  int bytes_per_smpl=2,
-      tmp,
-      i,
-      channel;
-
-  double phys_bitvalue,
-         phys_offset;
-
-  long long smp_in_file,
-            offset,
-            sample_pntr,
-            smp_per_record,
-            jump;
-
-  struct edfhdrblock *hdr;
-
-  union {
-          unsigned int one;
-          signed int one_signed;
-          unsigned short two[2];
-          signed short two_signed[2];
-          unsigned char four[4];
-        } var;
-
-  FILE *file;
-
-
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(edfsignal<0)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->writemode)
-  {
-    return(-1);
-  }
-
-  if(edfsignal>=(hdrlist[handle]->edfsignals - hdrlist[handle]->nr_annot_chns))
-  {
-    return(-1);
-  }
-
-  channel = hdrlist[handle]->mapped_signals[edfsignal];
-
-  if(n<0LL)
-  {
-    return(-1);
-  }
-
-  if(n==0LL)
-  {
-    return(0LL);
-  }
-
-  hdr = hdrlist[handle];
-
-  if(hdr->edf)
-  {
-    bytes_per_smpl = 2;
-  }
-
-  if(hdr->bdf)
-  {
-    bytes_per_smpl = 3;
-  }
-
-  smp_in_file = hdr->edfparam[channel].smp_per_record * hdr->datarecords;
-
-  if((hdr->edfparam[channel].sample_pntr + n) > smp_in_file)
-  {
-    n = smp_in_file - hdr->edfparam[channel].sample_pntr;
-
-    if(n==0)
-    {
-      return(0LL);
-    }
-
-    if(n<0)
-    {
-      return(-1);
-    }
-  }
-
-  file = hdr->file_hdl;
-
-  offset = hdr->hdrsize;
-  offset += (hdr->edfparam[channel].sample_pntr / hdr->edfparam[channel].smp_per_record) * hdr->recordsize;
-  offset += hdr->edfparam[channel].buf_offset;
-  offset += ((hdr->edfparam[channel].sample_pntr % hdr->edfparam[channel].smp_per_record) * bytes_per_smpl);
-
-  fseeko(file, offset, SEEK_SET);
-
-  sample_pntr = hdr->edfparam[channel].sample_pntr;
-
-  smp_per_record = hdr->edfparam[channel].smp_per_record;
-
-  jump = hdr->recordsize - (smp_per_record * bytes_per_smpl);
-
-  phys_bitvalue = hdr->edfparam[channel].bitvalue;
-
-  phys_offset = hdr->edfparam[channel].offset;
-
-  if(hdr->edf)
-  {
-    for(i=0; i<n; i++)
-    {
-      if(!(sample_pntr%smp_per_record))
-      {
-        if(i)
-        {
-          fseeko(file, jump, SEEK_CUR);
-        }
-      }
-
-      var.four[0] = fgetc(file);
-      tmp = fgetc(file);
-      if(tmp==EOF)
-      {
-        return(-1);
-      }
-      var.four[1] = tmp;
-
-      buf[i] = phys_bitvalue * (phys_offset + (double)var.two_signed[0]);
-
-      sample_pntr++;
-    }
-  }
-
-  if(hdr->bdf)
-  {
-    for(i=0; i<n; i++)
-    {
-      if(!(sample_pntr%smp_per_record))
-      {
-        if(i)
-        {
-          fseeko(file, jump, SEEK_CUR);
-        }
-      }
-
-      var.four[0] = fgetc(file);
-      var.four[1] = fgetc(file);
-      tmp = fgetc(file);
-      if(tmp==EOF)
-      {
-        return(-1);
-      }
-      var.four[2] = tmp;
-
-      if(var.four[2]&0x80)
-      {
-        var.four[3] = 0xff;
-      }
-      else
-      {
-        var.four[3] = 0x00;
-      }
-
-      buf[i] = phys_bitvalue * (phys_offset + (double)var.one_signed);
-
-      sample_pntr++;
-    }
-  }
-
-  hdr->edfparam[channel].sample_pntr = sample_pntr;
-
-  return(n);
-}
-
-
-int edfread_digital_samples(int handle, int edfsignal, int n, int *buf)
-{
-  int bytes_per_smpl=2,
-      tmp,
-      i,
-      channel;
-
-  long long smp_in_file,
-            offset,
-            sample_pntr,
-            smp_per_record,
-            jump;
-
-  struct edfhdrblock *hdr;
-
-  union {
-          unsigned int one;
-          signed int one_signed;
-          unsigned short two[2];
-          signed short two_signed[2];
-          unsigned char four[4];
-        } var;
-
-  FILE *file;
-
-
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(edfsignal<0)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->writemode)
-  {
-    return(-1);
-  }
-
-  if(edfsignal>=(hdrlist[handle]->edfsignals - hdrlist[handle]->nr_annot_chns))
-  {
-    return(-1);
-  }
-
-  channel = hdrlist[handle]->mapped_signals[edfsignal];
-
-  if(n<0LL)
-  {
-    return(-1);
-  }
-
-  if(n==0LL)
-  {
-    return(0LL);
-  }
-
-  hdr = hdrlist[handle];
-
-  if(hdr->edf)
-  {
-    bytes_per_smpl = 2;
-  }
-
-  if(hdr->bdf)
-  {
-    bytes_per_smpl = 3;
-  }
-
-  smp_in_file = hdr->edfparam[channel].smp_per_record * hdr->datarecords;
-
-  if((hdr->edfparam[channel].sample_pntr + n) > smp_in_file)
-  {
-    n = smp_in_file - hdr->edfparam[channel].sample_pntr;
-
-    if(n==0)
-    {
-      return(0LL);
-    }
-
-    if(n<0)
-    {
-      return(-1);
-    }
-  }
-
-  file = hdr->file_hdl;
-
-  offset = hdr->hdrsize;
-  offset += (hdr->edfparam[channel].sample_pntr / hdr->edfparam[channel].smp_per_record) * hdr->recordsize;
-  offset += hdr->edfparam[channel].buf_offset;
-  offset += ((hdr->edfparam[channel].sample_pntr % hdr->edfparam[channel].smp_per_record) * bytes_per_smpl);
-
-  fseeko(file, offset, SEEK_SET);
-
-  sample_pntr = hdr->edfparam[channel].sample_pntr;
-
-  smp_per_record = hdr->edfparam[channel].smp_per_record;
-
-  jump = hdr->recordsize - (smp_per_record * bytes_per_smpl);
-
-  if(hdr->edf)
-  {
-    for(i=0; i<n; i++)
-    {
-      if(!(sample_pntr%smp_per_record))
-      {
-        if(i)
-        {
-          fseeko(file, jump, SEEK_CUR);
-        }
-      }
-
-      var.four[0] = fgetc(file);
-      tmp = fgetc(file);
-      if(tmp==EOF)
-      {
-        return(-1);
-      }
-      var.four[1] = tmp;
-
-      buf[i] = var.two_signed[0];
-
-      sample_pntr++;
-    }
-  }
-
-  if(hdr->bdf)
-  {
-    for(i=0; i<n; i++)
-    {
-      if(!(sample_pntr%smp_per_record))
-      {
-        if(i)
-        {
-          fseeko(file, jump, SEEK_CUR);
-        }
-      }
-
-      var.four[0] = fgetc(file);
-      var.four[1] = fgetc(file);
-      tmp = fgetc(file);
-      if(tmp==EOF)
-      {
-        return(-1);
-      }
-      var.four[2] = tmp;
-
-      if(var.four[2]&0x80)
-      {
-        var.four[3] = 0xff;
-      }
-      else
-      {
-        var.four[3] = 0x00;
-      }
-
-      buf[i] = var.one_signed;
-
-      sample_pntr++;
-    }
-  }
-
-  hdr->edfparam[channel].sample_pntr = sample_pntr;
-
-  return(n);
-}
-
-
-int edf_get_annotation(int handle, int n, struct edf_annotation_struct *annot)
-{
-  memset(annot, 0, sizeof(struct edf_annotation_struct));
-
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->writemode)
-  {
-    return(-1);
-  }
-
-  if(n<0)
-  {
-    return(-1);
-  }
-
-  if(n>=hdrlist[handle]->annots_in_file)
-  {
-    return(-1);
-  }
-
-  annot->onset = (annotationslist[handle] + n)->onset;
-  strcpy(annot->duration, (annotationslist[handle] + n)->duration);
-  strcpy(annot->annotation, (annotationslist[handle] + n)->annotation);
-
-  return(0);
-}
-
-
-static struct edfhdrblock * edflib_check_edf_file(FILE *inputfile, int *edf_error)
-{
-  int i, j, p, r=0, n,
-      dotposition,
-      error;
-
-  char *edf_hdr,
-       scratchpad[128],
-       scratchpad2[64];
-
-  struct edfhdrblock *edfhdr;
-
-/***************** check header ******************************/
-
-  edf_hdr = (char *)calloc(1, 256);
-  if(edf_hdr==NULL)
-  {
-    *edf_error = EDFLIB_MALLOC_ERROR;
-    return(NULL);
-  }
-
-  edfhdr = (struct edfhdrblock *)calloc(1, sizeof(struct edfhdrblock));
-  if(edfhdr==NULL)
-  {
-    free(edf_hdr);
-    *edf_error = EDFLIB_MALLOC_ERROR;
-    return(NULL);
-  }
-
-  rewind(inputfile);
-  if(fread(edf_hdr, 256, 1, inputfile)!=1)
-  {
-    *edf_error = EDFLIB_FILE_READ_ERROR;
-    free(edf_hdr);
-    free(edfhdr);
-    return(NULL);
-  }
-
-/**************************** VERSION ***************************************/
-
-  strncpy(scratchpad, edf_hdr, 8);
-  scratchpad[8] = 0;
-
-  if(((signed char *)scratchpad)[0]==-1)   /* BDF-file */
-  {
-    for(i=1; i<8; i++)
-    {
-      if((scratchpad[i]<32)||(scratchpad[i]>126))
-      {
-        *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-        free(edf_hdr);
-        free(edfhdr);
-        return(NULL);
-      }
-    }
-
-    if(strcmp(scratchpad + 1, "BIOSEMI"))
-    {
-      *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-      free(edf_hdr);
-      free(edfhdr);
-      return(NULL);
-    }
-
-    edfhdr->bdf = 1;
-  }
-  else    /* EDF-file */
-  {
-    for(i=0; i<8; i++)
-    {
-      if((scratchpad[i]<32)||(scratchpad[i]>126))
-      {
-        *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-        free(edf_hdr);
-        free(edfhdr);
-        return(NULL);
-      }
-    }
-
-    if(strcmp(scratchpad, "0       "))
-    {
-      *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-      free(edf_hdr);
-      free(edfhdr);
-      return(NULL);
-    }
-
-    edfhdr->edf = 1;
-  }
-
-  strncpy(edfhdr->version, edf_hdr, 8);
-  edfhdr->version[8] = 0;
-  if(edfhdr->bdf)  edfhdr->version[0] = '.';
-
-/********************* PATIENTNAME *********************************************/
-
-  strncpy(scratchpad, edf_hdr + 8, 80);
-  scratchpad[80] = 0;
-  for(i=0; i<80; i++)
-  {
-    if((((unsigned char *)scratchpad)[i]<32)||(((unsigned char *)scratchpad)[i]>126))
-    {
-      *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-      free(edf_hdr);
-      free(edfhdr);
-      return(NULL);
-    }
-  }
-
-  strncpy(edfhdr->patient, edf_hdr + 8, 80);
-  edfhdr->patient[80] = 0;
-
-/********************* RECORDING *********************************************/
-
-  strncpy(scratchpad, edf_hdr + 88, 80);
-  scratchpad[80] = 0;
-  for(i=0; i<80; i++)
-  {
-    if((((unsigned char *)scratchpad)[i]<32)||(((unsigned char *)scratchpad)[i]>126))
-    {
-      *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-      free(edf_hdr);
-      free(edfhdr);
-      return(NULL);
-    }
-  }
-
-  strncpy(edfhdr->recording, edf_hdr + 88, 80);
-  edfhdr->recording[80] = 0;
-
-/********************* STARTDATE *********************************************/
-
-  strncpy(scratchpad, edf_hdr + 168, 8);
-  scratchpad[8] = 0;
-  for(i=0; i<8; i++)
-  {
-    if((scratchpad[i]<32)||(scratchpad[i]>126))
-    {
-      *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-      free(edf_hdr);
-      free(edfhdr);
-      return(NULL);
-    }
-  }
-
-  error = 0;
-
-  if((edf_hdr[170]!='.')||(edf_hdr[173]!='.'))  error = 1;
-  if((edf_hdr[168]<48)||(edf_hdr[168]>57))      error = 1;
-  if((edf_hdr[169]<48)||(edf_hdr[169]>57))      error = 1;
-  if((edf_hdr[171]<48)||(edf_hdr[171]>57))      error = 1;
-  if((edf_hdr[172]<48)||(edf_hdr[172]>57))      error = 1;
-  if((edf_hdr[174]<48)||(edf_hdr[174]>57))      error = 1;
-  if((edf_hdr[175]<48)||(edf_hdr[175]>57))      error = 1;
-  strncpy(scratchpad, edf_hdr + 168, 8);
-
-  if(error)
-  {
-    scratchpad[8] = 0;
-    *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-    free(edf_hdr);
-    free(edfhdr);
-    return(NULL);
-  }
-
-  scratchpad[2] = 0;
-  scratchpad[5] = 0;
-  scratchpad[8] = 0;
-
-  if((edflib_atof_nonlocalized(scratchpad)<1)||(edflib_atof_nonlocalized(scratchpad)>31))
-  {
-    strncpy(scratchpad, edf_hdr + 168, 8);
-    scratchpad[8] = 0;
-    *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-    free(edf_hdr);
-    free(edfhdr);
-    return(NULL);
-  }
-
-  if((edflib_atof_nonlocalized(scratchpad+3)<1)||(edflib_atof_nonlocalized(scratchpad+3)>12))
-  {
-    strncpy(scratchpad, edf_hdr + 168, 8);
-    scratchpad[8] = 0;
-    *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-    free(edf_hdr);
-    free(edfhdr);
-    return(NULL);
-  }
-
-  edfhdr->startdate_day = edflib_atof_nonlocalized(scratchpad);
-  edfhdr->startdate_month = edflib_atof_nonlocalized(scratchpad + 3);
-  edfhdr->startdate_year = edflib_atof_nonlocalized(scratchpad + 6);
-  if(edfhdr->startdate_year>84)
-  {
-    edfhdr->startdate_year += 1900;
-  }
-  else
-  {
-    edfhdr->startdate_year += 2000;
-  }
-
-/********************* STARTTIME *********************************************/
-
-  strncpy(scratchpad, edf_hdr + 176, 8);
-  scratchpad[8] = 0;
-  for(i=0; i<8; i++)
-  {
-    if((scratchpad[i]<32)||(scratchpad[i]>126))
-    {
-      *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-      free(edf_hdr);
-      free(edfhdr);
-      return(NULL);
-    }
-  }
-
-  error = 0;
-
-  if((edf_hdr[178]!='.')||(edf_hdr[181]!='.'))  error = 1;
-  if((edf_hdr[176]<48)||(edf_hdr[176]>57))      error = 1;
-  if((edf_hdr[177]<48)||(edf_hdr[177]>57))      error = 1;
-  if((edf_hdr[179]<48)||(edf_hdr[179]>57))      error = 1;
-  if((edf_hdr[180]<48)||(edf_hdr[180]>57))      error = 1;
-  if((edf_hdr[182]<48)||(edf_hdr[182]>57))      error = 1;
-  if((edf_hdr[183]<48)||(edf_hdr[183]>57))      error = 1;
-
-  strncpy(scratchpad, edf_hdr + 176, 8);
-
-  if(error)
-  {
-    strncpy(scratchpad, edf_hdr + 176, 8);
-    scratchpad[8] = 0;
-    *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-    free(edf_hdr);
-    free(edfhdr);
-    return(NULL);
-  }
-
-  scratchpad[2] = 0;
-  scratchpad[5] = 0;
-  scratchpad[8] = 0;
-
-  if(edflib_atof_nonlocalized(scratchpad)>23)
-  {
-    strncpy(scratchpad, edf_hdr + 176, 8);
-    scratchpad[8] = 0;
-    *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-    free(edf_hdr);
-    free(edfhdr);
-    return(NULL);
-  }
-
-  if(edflib_atof_nonlocalized(scratchpad+3)>59)
-  {
-    strncpy(scratchpad, edf_hdr + 176, 8);
-    scratchpad[8] = 0;
-    *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-    free(edf_hdr);
-    free(edfhdr);
-    return(NULL);
-  }
-
-  if(edflib_atof_nonlocalized(scratchpad+6)>59)
-  {
-    strncpy(scratchpad, edf_hdr + 176, 8);
-    scratchpad[8] = 0;
-    *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-    free(edf_hdr);
-    free(edfhdr);
-    return(NULL);
-  }
-
-  edfhdr->starttime_hour = edflib_atof_nonlocalized(scratchpad);
-  edfhdr->starttime_minute = edflib_atof_nonlocalized(scratchpad + 3);
-  edfhdr->starttime_second = edflib_atof_nonlocalized(scratchpad + 6);
-
-  edfhdr->l_starttime = 3600 * edflib_atof_nonlocalized(scratchpad);
-  edfhdr->l_starttime += 60 * edflib_atof_nonlocalized(scratchpad + 3);
-  edfhdr->l_starttime += edflib_atof_nonlocalized(scratchpad + 6);
-
-  edfhdr->l_starttime *= EDFLIB_TIME_DIMENSION;
-
-/***************** NUMBER OF SIGNALS IN HEADER *******************************/
-
-  strncpy(scratchpad, edf_hdr + 252, 4);
-  scratchpad[4] = 0;
-  for(i=0; i<4; i++)
-  {
-    if((scratchpad[i]<32)||(scratchpad[i]>126))
-    {
-      *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-      free(edf_hdr);
-      free(edfhdr);
-      return(NULL);
-    }
-  }
-
-  if(edflib_is_integer_number(scratchpad))
-  {
-    *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-    free(edf_hdr);
-    free(edfhdr);
-    return(NULL);
-  }
-  edfhdr->edfsignals = edflib_atof_nonlocalized(scratchpad);
-  if(edfhdr->edfsignals<1)
-  {
-    *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-    free(edf_hdr);
-    free(edfhdr);
-    return(NULL);
-  }
-
-  if(edfhdr->edfsignals>EDFLIB_MAXSIGNALS)
-  {
-    *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-    free(edf_hdr);
-    free(edfhdr);
-    return(NULL);
-  }
-
-/***************** NUMBER OF BYTES IN HEADER *******************************/
-
-  strncpy(scratchpad, edf_hdr + 184, 8);
-  scratchpad[8] = 0;
-
-  for(i=0; i<8; i++)
-  {
-    if((scratchpad[i]<32)||(scratchpad[i]>126))
-    {
-      *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-      free(edf_hdr);
-      free(edfhdr);
-      return(NULL);
-    }
-  }
-
-  if(edflib_is_integer_number(scratchpad))
-  {
-    *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-    free(edf_hdr);
-    free(edfhdr);
-    return(NULL);
-  }
-
-  n  = edflib_atof_nonlocalized(scratchpad);
-  if((edfhdr->edfsignals * 256 + 256)!=n)
-  {
-    *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-    free(edf_hdr);
-    free(edfhdr);
-    return(NULL);
-  }
-
-/********************* RESERVED FIELD *************************************/
-
-  edfhdr->edfplus = 0;
-  edfhdr->discontinuous = 0;
-  strncpy(scratchpad, edf_hdr + 192, 44);
-  scratchpad[44] = 0;
-
-  for(i=0; i<44; i++)
-  {
-    if((scratchpad[i]<32)||(scratchpad[i]>126))
-    {
-      *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-      free(edf_hdr);
-      free(edfhdr);
-      return(NULL);
-    }
-  }
-
-  if(edfhdr->edf)
-  {
-    if(!strncmp(scratchpad, "EDF+C", 5))
-    {
-      edfhdr->edfplus = 1;
-    }
-
-    if(!strncmp(scratchpad, "EDF+D", 5))
-    {
-      edfhdr->edfplus = 1;
-      edfhdr->discontinuous = 1;
-    }
-  }
-
-  if(edfhdr->bdf)
-  {
-    if(!strncmp(scratchpad, "BDF+C", 5))
-    {
-      edfhdr->bdfplus = 1;
-    }
-
-    if(!strncmp(scratchpad, "BDF+D", 5))
-    {
-      edfhdr->bdfplus = 1;
-      edfhdr->discontinuous = 1;
-    }
-  }
-
-  strncpy(edfhdr->reserved, edf_hdr + 192, 44);
-  edfhdr->reserved[44] = 0;
-
-/********************* NUMBER OF DATARECORDS *************************************/
-
-  strncpy(scratchpad, edf_hdr + 236, 8);
-  scratchpad[8] = 0;
-
-  for(i=0; i<8; i++)
-  {
-    if((scratchpad[i]<32)||(scratchpad[i]>126))
-    {
-      *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-      free(edf_hdr);
-      free(edfhdr);
-      return(NULL);
-    }
-  }
-
-  if(edflib_is_integer_number(scratchpad))
-  {
-    *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-    free(edf_hdr);
-    free(edfhdr);
-    return(NULL);
-  }
-
-  edfhdr->datarecords = edflib_atof_nonlocalized(scratchpad);
-  if(edfhdr->datarecords<1)
-  {
-    *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-    free(edf_hdr);
-    free(edfhdr);
-    return(NULL);
-  }
-
-/********************* DATARECORD DURATION *************************************/
-
-  strncpy(scratchpad, edf_hdr + 244, 8);
-  scratchpad[8] = 0;
-
-  for(i=0; i<8; i++)
-  {
-    if((scratchpad[i]<32)||(scratchpad[i]>126))
-    {
-      *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-      free(edf_hdr);
-      free(edfhdr);
-      return(NULL);
-    }
-  }
-
-  if(edflib_is_number(scratchpad))
-  {
-    *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-    free(edf_hdr);
-    free(edfhdr);
-    return(NULL);
-  }
-
-  edfhdr->data_record_duration = edflib_atof_nonlocalized(scratchpad);
-  if(edfhdr->data_record_duration < -0.000001)
-  {
-    *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-    free(edf_hdr);
-    free(edfhdr);
-    return(NULL);
-  }
-
-  edfhdr->long_data_record_duration = edflib_get_long_duration(scratchpad);
-
-  free(edf_hdr);
-
-/********************* START WITH THE SIGNALS IN THE HEADER *********************/
-
-  edf_hdr = (char *)calloc(1, (edfhdr->edfsignals + 1) * 256);
-  if(edf_hdr==NULL)
-  {
-    *edf_error = EDFLIB_MALLOC_ERROR;
-    free(edfhdr);
-    return(NULL);
-  }
-
-  rewind(inputfile);
-  if(fread(edf_hdr, (edfhdr->edfsignals + 1) * 256, 1, inputfile)!=1)
-  {
-    *edf_error = EDFLIB_FILE_READ_ERROR;
-    free(edf_hdr);
-    free(edfhdr);
-    return(NULL);
-  }
-
-  edfhdr->edfparam = (struct edfparamblock *)calloc(1, sizeof(struct edfparamblock) * edfhdr->edfsignals);
-  if(edfhdr->edfparam==NULL)
-  {
-    *edf_error = EDFLIB_MALLOC_ERROR;
-    free(edf_hdr);
-    free(edfhdr);
-    return(NULL);
-  }
-
-/**************************** LABELS *************************************/
-
-  edfhdr->nr_annot_chns = 0;
-  for(i=0; i<edfhdr->edfsignals; i++)
-  {
-    strncpy(scratchpad, edf_hdr + 256 + (i * 16), 16);
-    for(j=0; j<16; j++)
-    {
-      if((scratchpad[j]<32)||(scratchpad[j]>126))
-      {
-        *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-        free(edf_hdr);
-        free(edfhdr->edfparam);
-        free(edfhdr);
-        return(NULL);
-      }
-    }
-    if(edfhdr->edfplus)
-    {
-      if(!strncmp(scratchpad, "EDF Annotations ", 16))
-      {
-        edfhdr->annot_ch[edfhdr->nr_annot_chns] = i;
-        edfhdr->nr_annot_chns++;
-        edfhdr->edfparam[i].annotation = 1;
-      }
-    }
-    if(edfhdr->bdfplus)
-    {
-      if(!strncmp(scratchpad, "BDF Annotations ", 16))
-      {
-        edfhdr->annot_ch[edfhdr->nr_annot_chns] = i;
-        edfhdr->nr_annot_chns++;
-        edfhdr->edfparam[i].annotation = 1;
-      }
-    }
-    strncpy(edfhdr->edfparam[i].label, edf_hdr + 256 + (i * 16), 16);
-    edfhdr->edfparam[i].label[16] = 0;
-  }
-  if(edfhdr->edfplus&&(!edfhdr->nr_annot_chns))
-  {
-    *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-    free(edf_hdr);
-    free(edfhdr->edfparam);
-    free(edfhdr);
-    return(NULL);
-  }
-  if(edfhdr->bdfplus&&(!edfhdr->nr_annot_chns))
-  {
-    *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-    free(edf_hdr);
-    free(edfhdr->edfparam);
-    free(edfhdr);
-    return(NULL);
-  }
-  if((edfhdr->edfsignals!=edfhdr->nr_annot_chns)||((!edfhdr->edfplus)&&(!edfhdr->bdfplus)))
-  {
-    if(edfhdr->data_record_duration<0.0000001)
-    {
-      *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-      free(edf_hdr);
-      free(edfhdr->edfparam);
-      free(edfhdr);
-      return(NULL);
-    }
-  }
-
-/**************************** TRANSDUCER TYPES *************************************/
-
-  for(i=0; i<edfhdr->edfsignals; i++)
-  {
-    strncpy(scratchpad, edf_hdr + 256 + (edfhdr->edfsignals * 16) + (i * 80), 80);
-    for(j=0; j<80; j++)
-    {
-      if((scratchpad[j]<32)||(scratchpad[j]>126))
-      {
-        *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-        free(edf_hdr);
-        free(edfhdr->edfparam);
-        free(edfhdr);
-        return(NULL);
-      }
-    }
-    strncpy(edfhdr->edfparam[i].transducer, edf_hdr + 256 + (edfhdr->edfsignals * 16) + (i * 80), 80);
-    edfhdr->edfparam[i].transducer[80] = 0;
-
-    if((edfhdr->edfplus) || (edfhdr->bdfplus))
-    {
-      if(edfhdr->edfparam[i].annotation)
-      {
-        for(j=0; j<80; j++)
-        {
-          if(edfhdr->edfparam[i].transducer[j]!=' ')
-          {
-            *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-            free(edf_hdr);
-            free(edfhdr->edfparam);
-            free(edfhdr);
-            return(NULL);
-          }
-        }
-      }
-    }
-  }
-
-/**************************** PHYSICAL DIMENSIONS *************************************/
-
-  for(i=0; i<edfhdr->edfsignals; i++)
-  {
-    strncpy(scratchpad, edf_hdr + 256 + (edfhdr->edfsignals * 96) + (i * 8), 8);
-    for(j=0; j<8; j++)
-    {
-      if((scratchpad[j]<32)||(scratchpad[j]>126))
-      {
-        *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-        free(edf_hdr);
-        free(edfhdr->edfparam);
-        free(edfhdr);
-        return(NULL);
-      }
-    }
-    strncpy(edfhdr->edfparam[i].physdimension, edf_hdr + 256 + (edfhdr->edfsignals * 96) + (i * 8), 8);
-    edfhdr->edfparam[i].physdimension[8] = 0;
-  }
-
-/**************************** PHYSICAL MINIMUMS *************************************/
-
-  for(i=0; i<edfhdr->edfsignals; i++)
-  {
-    strncpy(scratchpad, edf_hdr + 256 + (edfhdr->edfsignals * 104) + (i * 8), 8);
-    scratchpad[8] = 0;
-
-    for(j=0; j<8; j++)
-    {
-      if((scratchpad[j]<32)||(scratchpad[j]>126))
-      {
-        *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-        free(edf_hdr);
-        free(edfhdr->edfparam);
-        free(edfhdr);
-        return(NULL);
-      }
-    }
-
-    if(edflib_is_number(scratchpad))
-    {
-      *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-      free(edf_hdr);
-      free(edfhdr->edfparam);
-      free(edfhdr);
-      return(NULL);
-    }
-
-    edfhdr->edfparam[i].phys_min = edflib_atof_nonlocalized(scratchpad);
-  }
-
-/**************************** PHYSICAL MAXIMUMS *************************************/
-
-  for(i=0; i<edfhdr->edfsignals; i++)
-  {
-    strncpy(scratchpad, edf_hdr + 256 + (edfhdr->edfsignals * 112) + (i * 8), 8);
-    scratchpad[8] = 0;
-
-    for(j=0; j<8; j++)
-    {
-      if((scratchpad[j]<32)||(scratchpad[j]>126))
-      {
-        *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-        free(edf_hdr);
-        free(edfhdr->edfparam);
-        free(edfhdr);
-        return(NULL);
-      }
-    }
-
-    if(edflib_is_number(scratchpad))
-    {
-      *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-      free(edf_hdr);
-      free(edfhdr->edfparam);
-      free(edfhdr);
-      return(NULL);
-    }
-
-    edfhdr->edfparam[i].phys_max = edflib_atof_nonlocalized(scratchpad);
-    if(edfhdr->edfparam[i].phys_max==edfhdr->edfparam[i].phys_min)
-    {
-      *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-      free(edf_hdr);
-      free(edfhdr->edfparam);
-      free(edfhdr);
-      return(NULL);
-    }
-  }
-
-/**************************** DIGITAL MINIMUMS *************************************/
-
-  for(i=0; i<edfhdr->edfsignals; i++)
-  {
-    strncpy(scratchpad, edf_hdr + 256 + (edfhdr->edfsignals * 120) + (i * 8), 8);
-    scratchpad[8] = 0;
-
-    for(j=0; j<8; j++)
-    {
-      if((scratchpad[j]<32)||(scratchpad[j]>126))
-      {
-        *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-        free(edf_hdr);
-        free(edfhdr->edfparam);
-        free(edfhdr);
-        return(NULL);
-      }
-    }
-
-    if(edflib_is_integer_number(scratchpad))
-    {
-      *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-      free(edf_hdr);
-      free(edfhdr->edfparam);
-      free(edfhdr);
-      return(NULL);
-    }
-
-    n = edflib_atof_nonlocalized(scratchpad);
-    if(edfhdr->edfplus)
-    {
-      if(edfhdr->edfparam[i].annotation)
-      {
-        if(n!=-32768)
-        {
-          *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-          free(edf_hdr);
-          free(edfhdr->edfparam);
-          free(edfhdr);
-          return(NULL);
-        }
-      }
-    }
-    if(edfhdr->bdfplus)
-    {
-      if(edfhdr->edfparam[i].annotation)
-      {
-        if(n!=-8388608)
-        {
-          *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-          free(edf_hdr);
-          free(edfhdr->edfparam);
-          free(edfhdr);
-          return(NULL);
-        }
-      }
-    }
-    if(edfhdr->edf)
-    {
-      if((n>32767)||(n<-32768))
-      {
-        *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-        free(edf_hdr);
-        free(edfhdr->edfparam);
-        free(edfhdr);
-        return(NULL);
-      }
-    }
-    if(edfhdr->bdf)
-    {
-      if((n>8388607)||(n<-8388608))
-      {
-        *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-        free(edf_hdr);
-        free(edfhdr->edfparam);
-        free(edfhdr);
-        return(NULL);
-      }
-    }
-    edfhdr->edfparam[i].dig_min = n;
-  }
-
-/**************************** DIGITAL MAXIMUMS *************************************/
-
-  for(i=0; i<edfhdr->edfsignals; i++)
-  {
-    strncpy(scratchpad, edf_hdr + 256 + (edfhdr->edfsignals * 128) + (i * 8), 8);
-    scratchpad[8] = 0;
-
-    for(j=0; j<8; j++)
-    {
-      if((scratchpad[j]<32)||(scratchpad[j]>126))
-      {
-        *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-        free(edf_hdr);
-        free(edfhdr->edfparam);
-        free(edfhdr);
-        return(NULL);
-      }
-    }
-
-    if(edflib_is_integer_number(scratchpad))
-    {
-      *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-      free(edf_hdr);
-      free(edfhdr->edfparam);
-      free(edfhdr);
-      return(NULL);
-    }
-
-    n = edflib_atof_nonlocalized(scratchpad);
-    if(edfhdr->edfplus)
-    {
-      if(edfhdr->edfparam[i].annotation)
-      {
-        if(n!=32767)
-        {
-          *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-          free(edf_hdr);
-          free(edfhdr->edfparam);
-          free(edfhdr);
-          return(NULL);
-        }
-      }
-    }
-    if(edfhdr->bdfplus)
-    {
-      if(edfhdr->edfparam[i].annotation)
-      {
-        if(n!=8388607)
-        {
-          *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-          free(edf_hdr);
-          free(edfhdr->edfparam);
-          free(edfhdr);
-          return(NULL);
-        }
-      }
-    }
-    if(edfhdr->edf)
-    {
-      if((n>32767)||(n<-32768))
-      {
-        *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-        free(edf_hdr);
-        free(edfhdr->edfparam);
-        free(edfhdr);
-        return(NULL);
-      }
-    }
-    else
-    {
-      if((n>8388607)||(n<-8388608))
-      {
-        *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-        free(edf_hdr);
-        free(edfhdr->edfparam);
-        free(edfhdr);
-        return(NULL);
-      }
-    }
-    edfhdr->edfparam[i].dig_max = n;
-    if(edfhdr->edfparam[i].dig_max<(edfhdr->edfparam[i].dig_min + 1))
-    {
-      *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-      free(edf_hdr);
-      free(edfhdr->edfparam);
-      free(edfhdr);
-      return(NULL);
-    }
-  }
-
-/**************************** PREFILTER FIELDS *************************************/
-
-  for(i=0; i<edfhdr->edfsignals; i++)
-  {
-    strncpy(scratchpad, edf_hdr + 256 + (edfhdr->edfsignals * 136) + (i * 80), 80);
-    for(j=0; j<80; j++)
-    {
-      if((scratchpad[j]<32)||(scratchpad[j]>126))
-      {
-        *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-        free(edf_hdr);
-        free(edfhdr->edfparam);
-        free(edfhdr);
-        return(NULL);
-      }
-    }
-    strncpy(edfhdr->edfparam[i].prefilter, edf_hdr + 256 + (edfhdr->edfsignals * 136) + (i * 80), 80);
-    edfhdr->edfparam[i].prefilter[80] = 0;
-
-    if((edfhdr->edfplus) || (edfhdr->bdfplus))
-    {
-      if(edfhdr->edfparam[i].annotation)
-      {
-        for(j=0; j<80; j++)
-        {
-          if(edfhdr->edfparam[i].prefilter[j]!=' ')
-          {
-            *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-            free(edf_hdr);
-            free(edfhdr->edfparam);
-            free(edfhdr);
-            return(NULL);
-          }
-        }
-      }
-    }
-  }
-
-/*********************** NR OF SAMPLES IN EACH DATARECORD ********************/
-
-  edfhdr->recordsize = 0;
-
-  for(i=0; i<edfhdr->edfsignals; i++)
-  {
-    strncpy(scratchpad, edf_hdr + 256 + (edfhdr->edfsignals * 216) + (i * 8), 8);
-    scratchpad[8] = 0;
-
-    for(j=0; j<8; j++)
-    {
-      if((scratchpad[j]<32)||(scratchpad[j]>126))
-      {
-        *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-        free(edf_hdr);
-        free(edfhdr->edfparam);
-        free(edfhdr);
-        return(NULL);
-      }
-    }
-
-    if(edflib_is_integer_number(scratchpad))
-    {
-      *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-      free(edf_hdr);
-      free(edfhdr->edfparam);
-      free(edfhdr);
-      return(NULL);
-    }
-
-    n = edflib_atof_nonlocalized(scratchpad);
-    if(n<1)
-    {
-      *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-      free(edf_hdr);
-      free(edfhdr->edfparam);
-      free(edfhdr);
-      return(NULL);
-    }
-    edfhdr->edfparam[i].smp_per_record = n;
-    edfhdr->recordsize += n;
-  }
-
-  if(edfhdr->bdf)
-  {
-    edfhdr->recordsize *= 3;
-
-    if(edfhdr->recordsize > 15728640)
-    {
-      *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-      free(edf_hdr);
-      free(edfhdr->edfparam);
-      free(edfhdr);
-      return(NULL);
-    }
-  }
-  else
-  {
-    edfhdr->recordsize *= 2;
-
-    if(edfhdr->recordsize > 10485760)
-    {
-      *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-      free(edf_hdr);
-      free(edfhdr->edfparam);
-      free(edfhdr);
-      return(NULL);
-    }
-  }
-
-/**************************** RESERVED FIELDS *************************************/
-
-  for(i=0; i<edfhdr->edfsignals; i++)
-  {
-    strncpy(scratchpad, edf_hdr + 256 + (edfhdr->edfsignals * 224) + (i * 32), 32);
-    for(j=0; j<32; j++)
-    {
-      if((scratchpad[j]<32)||(scratchpad[j]>126))
-      {
-        *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-        free(edf_hdr);
-        free(edfhdr->edfparam);
-        free(edfhdr);
-        return(NULL);
-      }
-    }
-    strncpy(edfhdr->edfparam[i].reserved, edf_hdr + 256 + (edfhdr->edfsignals * 224) + (i * 32), 32);
-    edfhdr->edfparam[i].reserved[32] = 0;
-  }
-
-/********************* EDF+ PATIENTNAME *********************************************/
-
-  if(edfhdr->edfplus || edfhdr->bdfplus)
-  {
-    error = 0;
-    dotposition = 0;
-    strncpy(scratchpad, edf_hdr + 8, 80);
-    scratchpad[80] = 0;
-    for(i=0; i<80; i++)
-    {
-      if(scratchpad[i]==' ')
-      {
-        dotposition = i;
-        break;
-      }
-    }
-    dotposition++;
-    if((dotposition>73)||(dotposition<2))  error = 1;
-    if(scratchpad[dotposition + 2]!='X')
-    {
-      if(dotposition>65)  error = 1;
-    }
-    if((scratchpad[dotposition]!='M')&&(scratchpad[dotposition]!='F')&&(scratchpad[dotposition]!='X'))  error = 1;
-    dotposition++;
-    if(scratchpad[dotposition]!=' ')  error = 1;
-    if(scratchpad[dotposition + 1]=='X')
-    {
-      if(scratchpad[dotposition + 2]!=' ')  error = 1;
-      if(scratchpad[dotposition + 3]==' ')  error = 1;
-    }
-    else
-    {
-      if(scratchpad[dotposition + 12]!=' ')  error = 1;
-      if(scratchpad[dotposition + 13]==' ')  error = 1;
-      dotposition++;
-      strncpy(scratchpad2, scratchpad + dotposition, 11);
-      scratchpad2[11] = 0;
-      if((scratchpad2[2]!='-')||(scratchpad2[6]!='-'))  error = 1;
-      scratchpad2[2] = 0;
-      scratchpad2[6] = 0;
-      if((scratchpad2[0]<48)||(scratchpad2[0]>57))  error = 1;
-      if((scratchpad2[1]<48)||(scratchpad2[1]>57))  error = 1;
-      if((scratchpad2[7]<48)||(scratchpad2[7]>57))  error = 1;
-      if((scratchpad2[8]<48)||(scratchpad2[8]>57))  error = 1;
-      if((scratchpad2[9]<48)||(scratchpad2[9]>57))  error = 1;
-      if((scratchpad2[10]<48)||(scratchpad2[10]>57))  error = 1;
-      if((edflib_atof_nonlocalized(scratchpad2)<1)||(edflib_atof_nonlocalized(scratchpad2)>31))  error = 1;
-      if(strcmp(scratchpad2 + 3, "JAN"))
-        if(strcmp(scratchpad2 + 3, "FEB"))
-          if(strcmp(scratchpad2 + 3, "MAR"))
-            if(strcmp(scratchpad2 + 3, "APR"))
-              if(strcmp(scratchpad2 + 3, "MAY"))
-                if(strcmp(scratchpad2 + 3, "JUN"))
-                  if(strcmp(scratchpad2 + 3, "JUL"))
-                    if(strcmp(scratchpad2 + 3, "AUG"))
-                      if(strcmp(scratchpad2 + 3, "SEP"))
-                        if(strcmp(scratchpad2 + 3, "OCT"))
-                          if(strcmp(scratchpad2 + 3, "NOV"))
-                            if(strcmp(scratchpad2 + 3, "DEC"))
-                              error = 1;
-    }
-
-    if(error)
-    {
-      *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-      free(edf_hdr);
-      free(edfhdr->edfparam);
-      free(edfhdr);
-      return(NULL);
-    }
-
-    p = 0;
-    if(edfhdr->patient[p]=='X')
-    {
-      edfhdr->plus_patientcode[0] = 0;
-      p += 2;
-    }
-    else
-    {
-      for(i=0; i<(80-p); i++)
-      {
-        if(edfhdr->patient[i+p]==' ')
-        {
-          break;
-        }
-        edfhdr->plus_patientcode[i] = edfhdr->patient[i+p];
-        if(edfhdr->plus_patientcode[i]=='_')  edfhdr->plus_patientcode[i] = ' ';
-      }
-      edfhdr->plus_patientcode[i] = 0;
-      p += i + 1;
-    }
-
-    if(edfhdr->patient[p]=='M')
-    {
-      strcpy(edfhdr->plus_gender, "Male");
-    }
-    if(edfhdr->patient[p]=='F')
-    {
-      strcpy(edfhdr->plus_gender, "Female");
-    }
-    if(edfhdr->patient[p]=='X')
-    {
-      edfhdr->plus_gender[0] = 0;
-    }
-    for(i=0; i<(80-p);i++)
-    {
-      if(edfhdr->patient[i+p]==' ')
-      {
-        break;
-      }
-    }
-    p += i + 1;
-
-    if(edfhdr->patient[p]=='X')
-    {
-      edfhdr->plus_birthdate[0] = 0;
-      p += 2;
-    }
-    else
-    {
-      for(i=0; i<(80-p); i++)
-      {
-        if(edfhdr->patient[i+p]==' ')
-        {
-          break;
-        }
-        edfhdr->plus_birthdate[i] = edfhdr->patient[i+p];
-      }
-      edfhdr->plus_birthdate[2] = ' ';
-      edfhdr->plus_birthdate[3] += 32;
-      edfhdr->plus_birthdate[4] += 32;
-      edfhdr->plus_birthdate[5] += 32;
-      edfhdr->plus_birthdate[6] = ' ';
-      edfhdr->plus_birthdate[11] = 0;
-      p += i + 1;
-    }
-
-    for(i=0; i<(80-p);i++)
-    {
-      if(edfhdr->patient[i+p]==' ')
-      {
-        break;
-      }
-      edfhdr->plus_patient_name[i] = edfhdr->patient[i+p];
-      if(edfhdr->plus_patient_name[i]=='_')  edfhdr->plus_patient_name[i] = ' ';
-    }
-    edfhdr->plus_patient_name[i] = 0;
-    p += i + 1;
-
-    for(i=0; i<(80-p);i++)
-    {
-      edfhdr->plus_patient_additional[i] = edfhdr->patient[i+p];
-    }
-    edfhdr->plus_patient_additional[i] = 0;
-    p += i + 1;
-  }
-
-/********************* EDF+ RECORDINGFIELD *********************************************/
-
-  if(edfhdr->edfplus || edfhdr->bdfplus)
-  {
-    error = 0;
-    strncpy(scratchpad, edf_hdr + 88, 80);
-    scratchpad[80] = 0;
-    if(strncmp(scratchpad, "Startdate ", 10))  error = 1;
-    if(scratchpad[10]=='X')
-    {
-      if(scratchpad[11]!=' ')  error = 1;
-      if(scratchpad[12]==' ')  error = 1;
-      p = 12;
-    }
-    else
-    {
-      if(scratchpad[21]!=' ')  error = 1;
-      if(scratchpad[22]==' ')  error = 1;
-      p = 22;
-      strncpy(scratchpad2, scratchpad + 10, 11);
-      scratchpad2[11] = 0;
-      if((scratchpad2[2]!='-')||(scratchpad2[6]!='-'))  error = 1;
-      scratchpad2[2] = 0;
-      scratchpad2[6] = 0;
-      if((scratchpad2[0]<48)||(scratchpad2[0]>57))  error = 1;
-      if((scratchpad2[1]<48)||(scratchpad2[1]>57))  error = 1;
-      if((scratchpad2[7]<48)||(scratchpad2[7]>57))  error = 1;
-      if((scratchpad2[8]<48)||(scratchpad2[8]>57))  error = 1;
-      if((scratchpad2[9]<48)||(scratchpad2[9]>57))  error = 1;
-      if((scratchpad2[10]<48)||(scratchpad2[10]>57))  error = 1;
-      if((edflib_atof_nonlocalized(scratchpad2)<1)||(edflib_atof_nonlocalized(scratchpad2)>31))  error = 1;
-      r = 0;
-      if(!strcmp(scratchpad2 + 3, "JAN"))  r = 1;
-        else if(!strcmp(scratchpad2 + 3, "FEB"))  r = 2;
-          else if(!strcmp(scratchpad2 + 3, "MAR"))  r = 3;
-            else if(!strcmp(scratchpad2 + 3, "APR"))  r = 4;
-              else if(!strcmp(scratchpad2 + 3, "MAY"))  r = 5;
-                else if(!strcmp(scratchpad2 + 3, "JUN"))  r = 6;
-                  else if(!strcmp(scratchpad2 + 3, "JUL"))  r = 7;
-                    else if(!strcmp(scratchpad2 + 3, "AUG"))  r = 8;
-                      else if(!strcmp(scratchpad2 + 3, "SEP"))  r = 9;
-                        else if(!strcmp(scratchpad2 + 3, "OCT"))  r = 10;
-                          else if(!strcmp(scratchpad2 + 3, "NOV"))  r = 11;
-                            else if(!strcmp(scratchpad2 + 3, "DEC"))  r = 12;
-                              else error = 1;
-    }
-
-    n = 0;
-    for(i=p; i<80; i++)
-    {
-      if(i>78)
-      {
-        error = 1;
-        break;
-      }
-      if(scratchpad[i]==' ')
-      {
-        n++;
-        if(scratchpad[i + 1]==' ')
-        {
-          error = 1;
-          break;
-        }
-      }
-      if(n>1)  break;
-    }
-
-    if(error)
-    {
-      *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-      free(edf_hdr);
-      free(edfhdr->edfparam);
-      free(edfhdr);
-      return(NULL);
-    }
-
-    if(edf_hdr[98]!='X')
-    {
-      error = 0;
-
-      strncpy(scratchpad, edf_hdr + 168, 8);
-      scratchpad[2] = 0;
-      scratchpad[5] = 0;
-      scratchpad[8] = 0;
-
-      if(edflib_atof_nonlocalized(scratchpad)!=edflib_atof_nonlocalized(scratchpad2))  error = 1;
-      if(edflib_atof_nonlocalized(scratchpad+3)!=r)  error = 1;
-      if(edflib_atof_nonlocalized(scratchpad+6)!=edflib_atof_nonlocalized(scratchpad2+9))  error = 1;
-      if(error)
-      {
-        *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-        free(edf_hdr);
-        free(edfhdr->edfparam);
-        free(edfhdr);
-        return(NULL);
-      }
-
-      edfhdr->startdate_year = edflib_atof_nonlocalized(scratchpad2 + 7);
-
-      if(edfhdr->startdate_year<1970)
-      {
-        *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-        free(edf_hdr);
-        free(edfhdr->edfparam);
-        free(edfhdr);
-        return(NULL);
-      }
-    }
-
-    p = 10;
-    for(i=0; i<(80-p); i++)
-    {
-      if(edfhdr->recording[i+p]==' ')
-      {
-        break;
-      }
-      edfhdr->plus_startdate[i] = edfhdr->recording[i+p];
-    }
-    edfhdr->plus_startdate[2] = ' ';
-    edfhdr->plus_startdate[3] += 32;
-    edfhdr->plus_startdate[4] += 32;
-    edfhdr->plus_startdate[5] += 32;
-    edfhdr->plus_startdate[6] = ' ';
-    edfhdr->plus_startdate[11] = 0;
-    p += i + 1;
-
-    if(edfhdr->recording[p]=='X')
-    {
-      edfhdr->plus_admincode[0] = 0;
-      p += 2;
-    }
-    else
-    {
-      for(i=0; i<(80-p); i++)
-      {
-        if(edfhdr->recording[i+p]==' ')
-        {
-          break;
-        }
-        edfhdr->plus_admincode[i] = edfhdr->recording[i+p];
-        if(edfhdr->plus_admincode[i]=='_')  edfhdr->plus_admincode[i] = ' ';
-      }
-      edfhdr->plus_admincode[i] = 0;
-      p += i + 1;
-    }
-
-    if(edfhdr->recording[p]=='X')
-    {
-      edfhdr->plus_technician[0] = 0;
-      p += 2;
-    }
-    else
-    {
-      for(i=0; i<(80-p); i++)
-      {
-        if(edfhdr->recording[i+p]==' ')
-        {
-          break;
-        }
-        edfhdr->plus_technician[i] = edfhdr->recording[i+p];
-        if(edfhdr->plus_technician[i]=='_')  edfhdr->plus_technician[i] = ' ';
-      }
-      edfhdr->plus_technician[i] = 0;
-      p += i + 1;
-    }
-
-    if(edfhdr->recording[p]=='X')
-    {
-      edfhdr->plus_equipment[0] = 0;
-      p += 2;
-    }
-    else
-    {
-      for(i=0; i<(80-p); i++)
-      {
-        if(edfhdr->recording[i+p]==' ')
-        {
-          break;
-        }
-        edfhdr->plus_equipment[i] = edfhdr->recording[i+p];
-        if(edfhdr->plus_equipment[i]=='_')  edfhdr->plus_equipment[i] = ' ';
-      }
-      edfhdr->plus_equipment[i] = 0;
-      p += i + 1;
-    }
-
-    for(i=0; i<(80-p);i++)
-    {
-      edfhdr->plus_recording_additional[i] = edfhdr->recording[i+p];
-    }
-    edfhdr->plus_recording_additional[i] = 0;
-    p += i + 1;
-  }
-
-/********************* FILESIZE *********************************************/
-
-  edfhdr->hdrsize = edfhdr->edfsignals * 256 + 256;
-
-  fseeko(inputfile, 0LL, SEEK_END);
-  if(ftello(inputfile)!=(edfhdr->recordsize * edfhdr->datarecords + edfhdr->hdrsize))
-  {
-    *edf_error = EDFLIB_FILE_CONTAINS_FORMAT_ERRORS;
-    free(edf_hdr);
-    free(edfhdr->edfparam);
-    free(edfhdr);
-    return(NULL);
-  }
-
-  n = 0;
-
-  for(i=0; i<edfhdr->edfsignals; i++)
-  {
-    edfhdr->edfparam[i].buf_offset = n;
-    if(edfhdr->bdf)  n += edfhdr->edfparam[i].smp_per_record * 3;
-    else  n += edfhdr->edfparam[i].smp_per_record * 2;
-
-    edfhdr->edfparam[i].bitvalue = (edfhdr->edfparam[i].phys_max - edfhdr->edfparam[i].phys_min) / (edfhdr->edfparam[i].dig_max - edfhdr->edfparam[i].dig_min);
-    edfhdr->edfparam[i].offset = edfhdr->edfparam[i].phys_max / edfhdr->edfparam[i].bitvalue - edfhdr->edfparam[i].dig_max;
-  }
-
-  edfhdr->file_hdl = inputfile;
-
-  free(edf_hdr);
-
-  return(edfhdr);
-}
-
-
-
-
-static int edflib_is_integer_number(char *str)
-{
-  int i=0, l, hasspace = 0, hassign=0, digit=0;
-
-  l = strlen(str);
-
-  if(!l)  return(1);
-
-  if((str[0]=='+')||(str[0]=='-'))
-  {
-    hassign++;
-    i++;
-  }
-
-  for(; i<l; i++)
-  {
-    if(str[i]==' ')
-    {
-      if(!digit)
-      {
-        return(1);
-      }
-      hasspace++;
-    }
-    else
-    {
-      if((str[i]<48)||(str[i]>57))
-      {
-        return(1);
-      }
-      else
-      {
-        if(hasspace)
-        {
-          return(1);
-        }
-        digit++;
-      }
-    }
-  }
-
-  if(digit)  return(0);
-  else  return(1);
-}
-
-
-
-static int edflib_is_number(char *str)
-{
-  int i=0, l, hasspace = 0, hassign=0, digit=0, hasdot=0, hasexp=0;
-
-  l = strlen(str);
-
-  if(!l)  return(1);
-
-  if((str[0]=='+')||(str[0]=='-'))
-  {
-    hassign++;
-    i++;
-  }
-
-  for(; i<l; i++)
-  {
-    if((str[i]=='e')||(str[i]=='E'))
-    {
-      if((!digit)||hasexp)
-      {
-        return(1);
-      }
-      hasexp++;
-      hassign = 0;
-      digit = 0;
-
-      break;
-    }
-
-    if(str[i]==' ')
-    {
-      if(!digit)
-      {
-        return(1);
-      }
-      hasspace++;
-    }
-    else
-    {
-      if(((str[i]<48)||(str[i]>57))&&str[i]!='.')
-      {
-        return(1);
-      }
-      else
-      {
-        if(hasspace)
-        {
-          return(1);
-        }
-        if(str[i]=='.')
-        {
-          if(hasdot)  return(1);
-          hasdot++;
-        }
-        else
-        {
-          digit++;
-        }
-      }
-    }
-  }
-
-  if(hasexp)
-  {
-    if(++i==l)
-    {
-      return(1);
-    }
-
-    if((str[i]=='+')||(str[i]=='-'))
-    {
-      hassign++;
-      i++;
-    }
-
-    for(; i<l; i++)
-    {
-      if(str[i]==' ')
-      {
-        if(!digit)
-        {
-          return(1);
-        }
-        hasspace++;
-      }
-      else
-      {
-        if((str[i]<48)||(str[i]>57))
-        {
-          return(1);
-        }
-        else
-        {
-          if(hasspace)
-          {
-            return(1);
-          }
-
-          digit++;
-        }
-      }
-    }
-  }
-
-  if(digit)  return(0);
-  else  return(1);
-}
-
-
-static long long edflib_get_long_duration(char *str)
-{
-  int i, len=8, hasdot=0, dotposition=0;
-
-  long long value=0, radix;
-
-  if((str[0] == '+') || (str[0] == '-'))
-  {
-    for(i=0; i<7; i++)
-    {
-      str[i] = str[i+1];
-    }
-
-    str[7] = ' ';
-  }
-
-  for(i=0; i<8; i++)
-  {
-    if(str[i]==' ')
-    {
-      len = i;
-      break;
-    }
-  }
-
-  for(i=0; i<len; i++)
-  {
-    if(str[i]=='.')
-    {
-      hasdot = 1;
-      dotposition = i;
-      break;
-    }
-  }
-
-  if(hasdot)
-  {
-    radix = EDFLIB_TIME_DIMENSION;
-
-    for(i=dotposition-1; i>=0; i--)
-    {
-        value += ((long long)(str[i] - 48)) * radix;
-        radix *= 10;
-    }
-
-    radix = EDFLIB_TIME_DIMENSION / 10;
-
-    for(i=dotposition+1; i<len; i++)
-    {
-        value += ((long long)(str[i] - 48)) * radix;
-        radix /= 10;
-    }
-  }
-  else
-  {
-    radix = EDFLIB_TIME_DIMENSION;
-
-    for(i=len-1; i>=0; i--)
-    {
-        value += ((long long)(str[i] - 48)) * radix;
-        radix *= 10;
-    }
-  }
-
-  return(value);
-}
-
-
-int edflib_version(void)
-{
-  return(EDFLIB_VERSION);
-}
-
-
-static int edflib_get_annotations(struct edfhdrblock *edfhdr, int hdl, int read_annotations)
-{
-  int i, j, k, p, r=0, n,
-      edfsignals,
-      datarecords,
-      recordsize,
-      discontinuous,
-      *annot_ch,
-      nr_annot_chns,
-      max,
-      onset,
-      duration,
-      duration_start,
-      zero,
-      max_tal_ln,
-      error,
-      annots_in_record,
-      annots_in_tal,
-      samplesize=2;
-
-  char *scratchpad,
-       *cnv_buf,
-       *time_in_txt,
-       *duration_in_txt;
-
-
-  long long data_record_duration,
-            elapsedtime,
-            time_tmp=0;
-
-  FILE *inputfile;
-
-  struct edfparamblock *edfparam;
-
-  struct edf_annotationblock *new_annotation=NULL,
-                             *malloc_list;
-
-  inputfile = edfhdr->file_hdl;
-  edfsignals = edfhdr->edfsignals;
-  recordsize = edfhdr->recordsize;
-  edfparam = edfhdr->edfparam;
-  nr_annot_chns = edfhdr->nr_annot_chns;
-  datarecords = edfhdr->datarecords;
-  data_record_duration = edfhdr->long_data_record_duration;
-  discontinuous = edfhdr->discontinuous;
-  annot_ch = edfhdr->annot_ch;
-
-  if(edfhdr->edfplus)
-  {
-    samplesize = 2;
-  }
-  if(edfhdr->bdfplus)
-  {
-    samplesize = 3;
-  }
-
-  cnv_buf = (char *)calloc(1, recordsize);
-  if(cnv_buf==NULL)
-  {
-    return(1);
-  }
-
-  max_tal_ln = 0;
-
-  for(i=0; i<nr_annot_chns; i++)
-  {
-    if(max_tal_ln<edfparam[annot_ch[i]].smp_per_record * samplesize)  max_tal_ln = edfparam[annot_ch[i]].smp_per_record * samplesize;
-  }
-
-  if(max_tal_ln<128)  max_tal_ln = 128;
-
-  scratchpad = (char *)calloc(1, max_tal_ln + 3);
-  if(scratchpad==NULL)
-  {
-    free(cnv_buf);
-    return(1);
-  }
-
-  time_in_txt = (char *)calloc(1, max_tal_ln + 3);
-  if(time_in_txt==NULL)
-  {
-    free(cnv_buf);
-    free(scratchpad);
-    return(1);
-  }
-
-  duration_in_txt = (char *)calloc(1, max_tal_ln + 3);
-  if(duration_in_txt==NULL)
-  {
-    free(cnv_buf);
-    free(scratchpad);
-    free(time_in_txt);
-    return(1);
-  }
-
-  if(fseeko(inputfile, (long long)((edfsignals + 1) * 256), SEEK_SET))
-  {
-    free(cnv_buf);
-    free(scratchpad);
-    free(time_in_txt);
-    free(duration_in_txt);
-    return(2);
-  }
-
-  elapsedtime = 0;
-
-  for(i=0; i<datarecords; i++)
-  {
-    if(fread(cnv_buf, recordsize, 1, inputfile)!=1)
-    {
-      free(cnv_buf);
-      free(scratchpad);
-      free(time_in_txt);
-      free(duration_in_txt);
-      return(2);
-    }
-
-
-/************** process annotationsignals (if any) **************/
-
-    error = 0;
-
-    for(r=0; r<nr_annot_chns; r++)
-    {
-      n = 0;
-      zero = 0;
-      onset = 0;
-      duration = 0;
-      duration_start = 0;
-      scratchpad[0] = 0;
-      annots_in_tal = 0;
-      annots_in_record = 0;
-
-      p = edfparam[annot_ch[r]].buf_offset;
-      max = edfparam[annot_ch[r]].smp_per_record * samplesize;
-
-/************** process one annotation signal ****************/
-
-      if(cnv_buf[p + max - 1]!=0)
-      {
-        error = 5;
-        goto END;
-      }
-
-      if(!r)  /* if it's the first annotation signal, then check */
-      {       /* the timekeeping annotation */
-        error = 1;
-
-        for(k=0; k<(max-2); k++)
-        {
-          scratchpad[k] = cnv_buf[p + k];
-
-          if(scratchpad[k]==20)
-          {
-            if(cnv_buf[p + k + 1]!=20)
-            {
-              error = 6;
-              goto END;
-            }
-            scratchpad[k] = 0;
-            if(edflib_is_onset_number(scratchpad))
-            {
-              error = 36;
-              goto END;
-            }
-            else
-            {
-              time_tmp = edflib_get_long_time(scratchpad);
-              if(i)
-              {
-                if(discontinuous)
-                {
-                  if((time_tmp-elapsedtime)<data_record_duration)
-                  {
-                    error = 4;
-                    goto END;
-                  }
-                }
-                else
-                {
-                  if((time_tmp-elapsedtime)!=data_record_duration)
-                  {
-                    error = 3;
-                    goto END;
-                  }
-                }
-              }
-              else
-              {
-                if(time_tmp>=EDFLIB_TIME_DIMENSION)
-                {
-                  error = 2;
-                  goto END;
-                }
-                else
-                {
-                  edfhdr->starttime_offset = time_tmp;
-                }
-              }
-              elapsedtime = time_tmp;
-              error = 0;
-              break;
-            }
-          }
-        }
-      }
-
-      for(k=0; k<max; k++)
-      {
-        scratchpad[n] = cnv_buf[p + k];
-
-        if(!scratchpad[n])
-        {
-          if(!zero)
-          {
-            if(k)
-            {
-              if(cnv_buf[p + k - 1]!=20)
-              {
-                error = 33;
-                goto END;
-              }
-            }
-            n = 0;
-            onset = 0;
-            duration = 0;
-            duration_start = 0;
-            scratchpad[0] = 0;
-            annots_in_tal = 0;
-          }
-          zero++;
-          continue;
-        }
-        if(zero>1)
-        {
-          error = 34;
-          goto END;
-        }
-        zero = 0;
-
-        if((scratchpad[n]==20)||(scratchpad[n]==21))
-        {
-          if(scratchpad[n]==21)
-          {
-            if(duration||duration_start||onset||annots_in_tal)
-            {               /* it's not allowed to have multiple duration fields */
-              error = 35;   /* in one TAL or to have a duration field which is   */
-              goto END;     /* not immediately behind the onsetfield             */
-            }
-            duration_start = 1;
-          }
-
-          if((scratchpad[n]==20)&&onset&&(!duration_start))
-          {
-            if(r||annots_in_record)
-            {
-              if(n >= 0)
-              {
-                if(edfhdr->annots_in_file >= edfhdr->annotlist_sz)
-                {
-                  malloc_list = (struct edf_annotationblock *)realloc(annotationslist[hdl],
-                                                                      sizeof(struct edf_annotationblock) * (edfhdr->annotlist_sz + EDFLIB_ANNOT_MEMBLOCKSZ));
-                  if(malloc_list==NULL)
-                  {
-                    free(cnv_buf);
-                    free(scratchpad);
-                    free(time_in_txt);
-                    free(duration_in_txt);
-                    return(-1);
-                  }
-
-                  annotationslist[hdl] = malloc_list;
-
-                  edfhdr->annotlist_sz += EDFLIB_ANNOT_MEMBLOCKSZ;
-                }
-
-                new_annotation = annotationslist[hdl] + edfhdr->annots_in_file;
-
-                new_annotation->annotation[0] = 0;
-
-                if(duration)  strcpy(new_annotation->duration, duration_in_txt);
-                else  new_annotation->duration[0] = 0;
-
-                for(j=0; j<n; j++)
-                {
-                  if(j==EDFLIB_MAX_ANNOTATION_LEN)  break;
-                  new_annotation->annotation[j] = scratchpad[j];
-                }
-                new_annotation->annotation[j] = 0;
-
-                new_annotation->onset = edflib_get_long_time(time_in_txt);
-
-                edfhdr->annots_in_file++;
-
-                if(read_annotations==EDFLIB_READ_ANNOTATIONS)
-                {
-                  if(!(strncmp(new_annotation->annotation, "Recording ends", 14)))
-                  {
-                    if(nr_annot_chns==1)
-                    {
-                      goto END;
-                    }
-                  }
-                }
-              }
-            }
-
-            annots_in_tal++;
-            annots_in_record++;
-            n = 0;
-            continue;
-          }
-
-          if(!onset)
-          {
-            scratchpad[n] = 0;
-            if(edflib_is_onset_number(scratchpad))
-            {
-              error = 36;
-              goto END;
-            }
-            onset = 1;
-            n = 0;
-            strcpy(time_in_txt, scratchpad);
-            continue;
-          }
-
-          if(duration_start)
-          {
-            scratchpad[n] = 0;
-            if(edflib_is_duration_number(scratchpad))
-            {
-              error = 37;
-              goto END;
-            }
-
-            for(j=0; j<n; j++)
-            {
-              if(j==15)  break;
-              duration_in_txt[j] = scratchpad[j];
-              if((duration_in_txt[j]<32)||(duration_in_txt[j]>126))
-              {
-                duration_in_txt[j] = '.';
-              }
-            }
-            duration_in_txt[j] = 0;
-
-            duration = 1;
-            duration_start = 0;
-            n = 0;
-            continue;
-          }
-        }
-
-        n++;
-      }
-
- END:
-
-/****************** end ************************/
-
-      if(error)
-      {
-        free(cnv_buf);
-        free(scratchpad);
-        free(time_in_txt);
-        free(duration_in_txt);
-        return(9);
-      }
-    }
-  }
-
-  free(cnv_buf);
-  free(scratchpad);
-  free(time_in_txt);
-  free(duration_in_txt);
-
-  return(0);
-}
-
-
-static int edflib_is_duration_number(char *str)
-{
-  int i, l, hasdot = 0;
-
-  l = strlen(str);
-
-  if(!l)  return(1);
-
-  if((str[0] == '.')||(str[l-1] == '.'))  return(1);
-
-  for(i=0; i<l; i++)
-  {
-    if(str[i]=='.')
-    {
-      if(hasdot)  return(1);
-      hasdot++;
-    }
-    else
-    {
-      if((str[i]<48)||(str[i]>57))  return(1);
-    }
-  }
-
-  return(0);
-}
-
-
-
-static int edflib_is_onset_number(char *str)
-{
-  int i, l, hasdot = 0;
-
-  l = strlen(str);
-
-  if(l<2)  return(1);
-
-  if((str[0]!='+')&&(str[0]!='-'))  return(1);
-
-  if((str[1] == '.')||(str[l-1] == '.'))  return(1);
-
-  for(i=1; i<l; i++)
-  {
-    if(str[i]=='.')
-    {
-      if(hasdot)  return(1);
-      hasdot++;
-    }
-    else
-    {
-      if((str[i]<48)||(str[i]>57))  return(1);
-    }
-  }
-
-  return(0);
-}
-
-
-
-static long long edflib_get_long_time(char *str)
-{
-  int i, len, hasdot=0, dotposition=0;
-
-  long long value=0, radix;
-
-  str = str + 1;
-
-  len = strlen(str);
-
-  for(i=0; i<len; i++)
-  {
-    if(str[i]=='.')
-    {
-      hasdot = 1;
-      dotposition = i;
-      break;
-    }
-  }
-
-  if(hasdot)
-  {
-    radix = EDFLIB_TIME_DIMENSION;
-
-    for(i=dotposition-1; i>=0; i--)
-    {
-        value += ((long long)(str[i] - 48)) * radix;
-        radix *= 10;
-    }
-
-    radix = EDFLIB_TIME_DIMENSION / 10;
-
-    for(i=dotposition+1; i<len; i++)
-    {
-        value += ((long long)(str[i] - 48)) * radix;
-        radix /= 10;
-    }
-  }
-  else
-  {
-    radix = EDFLIB_TIME_DIMENSION;
-
-    for(i=len-1; i>=0; i--)
-    {
-        value += ((long long)(str[i] - 48)) * radix;
-        radix *= 10;
-    }
-  }
-
-  if(str[-1]=='-')  value = -value;
-
-  return(value);
-}
-
-
-static void edflib_latin1_to_ascii(char *str, int len)
-{
-  int i, value;
-
-  for(i=0; i<len; i++)
-  {
-    value = *((unsigned char *)(str + i));
-
-    if((value>31)&&(value<127))
-    {
-      continue;
-    }
-
-    switch(value)
-    {
-      case 128 : str[i] = 'E';  break;
-
-      case 130 : str[i] = ',';  break;
-
-      case 131 : str[i] = 'F';  break;
-
-      case 132 : str[i] = '\"';  break;
-
-      case 133 : str[i] = '.';  break;
-
-      case 134 : str[i] = '+';  break;
-
-      case 135 : str[i] = '+';  break;
-
-      case 136 : str[i] = '^';  break;
-
-      case 137 : str[i] = 'm';  break;
-
-      case 138 : str[i] = 'S';  break;
-
-      case 139 : str[i] = '<';  break;
-
-      case 140 : str[i] = 'E';  break;
-
-      case 142 : str[i] = 'Z';  break;
-
-      case 145 : str[i] = '`';  break;
-
-      case 146 : str[i] = '\'';  break;
-
-      case 147 : str[i] = '\"';  break;
-
-      case 148 : str[i] = '\"';  break;
-
-      case 149 : str[i] = '.';  break;
-
-      case 150 : str[i] = '-';  break;
-
-      case 151 : str[i] = '-';  break;
-
-      case 152 : str[i] = '~';  break;
-
-      case 154 : str[i] = 's';  break;
-
-      case 155 : str[i] = '>';  break;
-
-      case 156 : str[i] = 'e';  break;
-
-      case 158 : str[i] = 'z';  break;
-
-      case 159 : str[i] = 'Y';  break;
-
-      case 171 : str[i] = '<';  break;
-
-      case 180 : str[i] = '\'';  break;
-
-      case 181 : str[i] = 'u';  break;
-
-      case 187 : str[i] = '>';  break;
-
-      case 191 : str[i] = '\?';  break;
-
-      case 192 : str[i] = 'A';  break;
-
-      case 193 : str[i] = 'A';  break;
-
-      case 194 : str[i] = 'A';  break;
-
-      case 195 : str[i] = 'A';  break;
-
-      case 196 : str[i] = 'A';  break;
-
-      case 197 : str[i] = 'A';  break;
-
-      case 198 : str[i] = 'E';  break;
-
-      case 199 : str[i] = 'C';  break;
-
-      case 200 : str[i] = 'E';  break;
-
-      case 201 : str[i] = 'E';  break;
-
-      case 202 : str[i] = 'E';  break;
-
-      case 203 : str[i] = 'E';  break;
-
-      case 204 : str[i] = 'I';  break;
-
-      case 205 : str[i] = 'I';  break;
-
-      case 206 : str[i] = 'I';  break;
-
-      case 207 : str[i] = 'I';  break;
-
-      case 208 : str[i] = 'D';  break;
-
-      case 209 : str[i] = 'N';  break;
-
-      case 210 : str[i] = 'O';  break;
-
-      case 211 : str[i] = 'O';  break;
-
-      case 212 : str[i] = 'O';  break;
-
-      case 213 : str[i] = 'O';  break;
-
-      case 214 : str[i] = 'O';  break;
-
-      case 215 : str[i] = 'x';  break;
-
-      case 216 : str[i] = 'O';  break;
-
-      case 217 : str[i] = 'U';  break;
-
-      case 218 : str[i] = 'U';  break;
-
-      case 219 : str[i] = 'U';  break;
-
-      case 220 : str[i] = 'U';  break;
-
-      case 221 : str[i] = 'Y';  break;
-
-      case 222 : str[i] = 'I';  break;
-
-      case 223 : str[i] = 's';  break;
-
-      case 224 : str[i] = 'a';  break;
-
-      case 225 : str[i] = 'a';  break;
-
-      case 226 : str[i] = 'a';  break;
-
-      case 227 : str[i] = 'a';  break;
-
-      case 228 : str[i] = 'a';  break;
-
-      case 229 : str[i] = 'a';  break;
-
-      case 230 : str[i] = 'e';  break;
-
-      case 231 : str[i] = 'c';  break;
-
-      case 232 : str[i] = 'e';  break;
-
-      case 233 : str[i] = 'e';  break;
-
-      case 234 : str[i] = 'e';  break;
-
-      case 235 : str[i] = 'e';  break;
-
-      case 236 : str[i] = 'i';  break;
-
-      case 237 : str[i] = 'i';  break;
-
-      case 238 : str[i] = 'i';  break;
-
-      case 239 : str[i] = 'i';  break;
-
-      case 240 : str[i] = 'd';  break;
-
-      case 241 : str[i] = 'n';  break;
-
-      case 242 : str[i] = 'o';  break;
-
-      case 243 : str[i] = 'o';  break;
-
-      case 244 : str[i] = 'o';  break;
-
-      case 245 : str[i] = 'o';  break;
-
-      case 246 : str[i] = 'o';  break;
-
-      case 247 : str[i] = '-';  break;
-
-      case 248 : str[i] = '0';  break;
-
-      case 249 : str[i] = 'u';  break;
-
-      case 250 : str[i] = 'u';  break;
-
-      case 251 : str[i] = 'u';  break;
-
-      case 252 : str[i] = 'u';  break;
-
-      case 253 : str[i] = 'y';  break;
-
-      case 254 : str[i] = 't';  break;
-
-      case 255 : str[i] = 'y';  break;
-
-      default  : str[i] = ' ';  break;
-    }
-  }
-}
-
-
-static void edflib_latin12utf8(char *latin1_str, int len)
-{
-  int i, j;
-
-  unsigned char *str, tmp_str[512];
-
-
-  str = (unsigned char *)latin1_str;
-
-  j = 0;
-
-  for(i=0; i<len; i++)
-  {
-    if(str[i]==0)
-    {
-      tmp_str[j] = 0;
-
-      break;
-    }
-
-    tmp_str[j] = str[i];
-
-    if(str[i]<32) tmp_str[j] = '.';
-
-    if((str[i]>126)&&(str[i]<160))  tmp_str[j] = '.';
-
-    if(str[i]>159)
-    {
-      if((len-j)<2)
-      {
-        tmp_str[j] = ' ';
-      }
-      else
-      {
-        tmp_str[j] = 192 + (str[i]>>6);
-        j++;
-        tmp_str[j] = 128 + (str[i]&63);
-      }
-    }
-
-    j++;
-
-    if(j>=len)  break;
-  }
-
-  for(i=0; i<len; i++)
-  {
-    str[i] = tmp_str[i];
-  }
-}
-
-
-int edfopen_file_writeonly(const char *path, int filetype, int number_of_signals)
-{
-  int i, handle;
-
-  FILE *file;
-
-  struct edfhdrblock *hdr;
-
-
-  if((filetype!=EDFLIB_FILETYPE_EDFPLUS)&&(filetype!=EDFLIB_FILETYPE_BDFPLUS))
-  {
-    return(EDFLIB_FILETYPE_ERROR);
-  }
-
-  if(edf_files_open>=EDFLIB_MAXFILES)
-  {
-    return(EDFLIB_MAXFILES_REACHED);
-  }
-
-  for(i=0; i<EDFLIB_MAXFILES; i++)
-  {
-    if(hdrlist[i]!=NULL)
-    {
-      if(!(strcmp(path, hdrlist[i]->path)))
-      {
-        return(EDFLIB_FILE_ALREADY_OPENED);
-      }
-    }
-  }
-
-  if(number_of_signals<0)
-  {
-    return(EDFLIB_NUMBER_OF_SIGNALS_INVALID);
-  }
-
-  if(number_of_signals>EDFLIB_MAXSIGNALS)
-  {
-    return(EDFLIB_NUMBER_OF_SIGNALS_INVALID);
-  }
-
-  hdr = (struct edfhdrblock *)calloc(1, sizeof(struct edfhdrblock));
-  if(hdr==NULL)
-  {
-    return(EDFLIB_MALLOC_ERROR);
-  }
-
-  hdr->edfparam = (struct edfparamblock *)calloc(1, sizeof(struct edfparamblock) * number_of_signals);
-  if(hdr->edfparam==NULL)
-  {
-    free(hdr);
-
-    return(EDFLIB_MALLOC_ERROR);
-  }
-
-  hdr->writemode = 1;
-
-  hdr->edfsignals = number_of_signals;
-
-  handle = -1;
-
-  for(i=0; i<EDFLIB_MAXFILES; i++)
-  {
-    if(hdrlist[i]==NULL)
-    {
-      hdrlist[i] = hdr;
-
-      handle = i;
-
-      break;
-    }
-  }
-
-  if(handle<0)
-  {
-    free(hdr->edfparam);
-
-    free(hdr);
-
-    return(EDFLIB_MAXFILES_REACHED);
-  }
-
-  write_annotationslist[handle] = NULL;
-
-  hdr->annotlist_sz = 0;
-
-  hdr->annots_in_file = 0;
-
-  file = fopeno(path, "wb");
-  if(file==NULL)
-  {
-    free(hdr->edfparam);
-
-    free(hdr);
-
-    return(EDFLIB_NO_SUCH_FILE_OR_DIRECTORY);
-  }
-
-  hdr->file_hdl = file;
-
-  strcpy(hdr->path, path);
-
-  edf_files_open++;
-
-  if(filetype==EDFLIB_FILETYPE_EDFPLUS)
-  {
-    hdr->edf = 1;
-    hdr->edfplus = 1;
-  }
-
-  if(filetype==EDFLIB_FILETYPE_BDFPLUS)
-  {
-    hdr->bdf = 1;
-    hdr->bdfplus = 1;
-  }
-
-  hdr->long_data_record_duration = EDFLIB_TIME_DIMENSION;
-
-  hdr->data_record_duration = 1.0;
-
-  hdr->nr_annot_chns = 1;
-
-  return(handle);
-}
-
-
-int edf_set_samplefrequency(int handle, int edfsignal, int samplefrequency)
-{
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(edfsignal<0)
-  {
-    return(-1);
-  }
-
-  if(edfsignal>=hdrlist[handle]->edfsignals)
-  {
-    return(-1);
-  }
-
-  if(samplefrequency<1)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->datarecords)
-  {
-    return(-1);
-  }
-
-  hdrlist[handle]->edfparam[edfsignal].smp_per_record = samplefrequency;
-
-  return(0);
-}
-
-
-int edf_set_number_of_annotation_signals(int handle, int annot_signals)
-{
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->datarecords)
-  {
-    return(-1);
-  }
-
-  if((annot_signals < 1) || (annot_signals > 64))
-  {
-    return(-1);
-  }
-
-  hdrlist[handle]->nr_annot_chns = annot_signals;
-
-  return(0);
-}
-
-
-int edf_set_datarecord_duration(int handle, int duration)
-{
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->datarecords)
-  {
-    return(-1);
-  }
-
-  if((duration < 100) || (duration > 6000000))
-  {
-    return(-1);
-  }
-
-  hdrlist[handle]->long_data_record_duration = (long long)duration * 100LL;
-
-  if(hdrlist[handle]->long_data_record_duration < (EDFLIB_TIME_DIMENSION * 10LL))
-  {
-    hdrlist[handle]->long_data_record_duration /= 10LL;
-
-    hdrlist[handle]->long_data_record_duration *= 10LL;
-  }
-  else
-  {
-    hdrlist[handle]->long_data_record_duration /= 100LL;
-
-    hdrlist[handle]->long_data_record_duration *= 100LL;
-  }
-
-  hdrlist[handle]->data_record_duration = ((double)(hdrlist[handle]->long_data_record_duration)) / EDFLIB_TIME_DIMENSION;
-
-  return(0);
-}
-
-
-int edfwrite_digital_short_samples(int handle, short *buf)
-{
-  int  i, p,
-       error,
-       sf,
-       digmax,
-       digmin,
-       edfsignal,
-       value;
-
-  FILE *file;
-
-  struct edfhdrblock *hdr;
-
-
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->edfsignals == 0)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->bdf == 1)
-  {
-    return(-1);
-  }
-
-  hdr = hdrlist[handle];
-
-  file = hdr->file_hdl;
-
-  edfsignal = hdr->signal_write_sequence_pos;
-
-  if(!hdr->datarecords)
-  {
-    if(!edfsignal)
-    {
-      error = edflib_write_edf_header(hdr);
-
-      if(error)
-      {
-        return(error);
-      }
-    }
-  }
-
-  sf = hdr->edfparam[edfsignal].smp_per_record;
-
-  digmax = hdr->edfparam[edfsignal].dig_max;
-
-  digmin = hdr->edfparam[edfsignal].dig_min;
-
-  for(i=0; i<sf; i++)
-  {
-    value = buf[i];
-
-    if(value>digmax)
-    {
-      value = digmax;
-    }
-
-    if(value<digmin)
-    {
-      value = digmin;
-    }
-
-    fputc((value)&0xff, file);
-
-    if(fputc((value>>8)&0xff, file)==EOF)
-    {
-      return(-1);
-    }
-
-    if(hdr->bdf)
-    {
-      fputc((value>>16)&0xff, file);
-    }
-
-  }
-
-  hdr->signal_write_sequence_pos++;
-
-  if(hdr->signal_write_sequence_pos == hdr->edfsignals)
-  {
-    hdr->signal_write_sequence_pos = 0;
-
-    p = edflib_fprint_ll_number_nonlocalized(file, (hdr->datarecords * hdr->long_data_record_duration) / EDFLIB_TIME_DIMENSION, 0, 1);
-    if(hdr->long_data_record_duration % EDFLIB_TIME_DIMENSION)
-    {
-      fputc('.', file);
-      p++;
-      p += edflib_fprint_ll_number_nonlocalized(file, (hdr->datarecords * hdr->long_data_record_duration) % EDFLIB_TIME_DIMENSION, 7, 0);
-    }
-    fputc(20, file);
-    fputc(20, file);
-    p += 2;
-    for(; p<hdr->total_annot_bytes; p++)
-    {
-      fputc(0, file);
-    }
-
-    hdr->datarecords++;
-
-    fflush(file);
-  }
-
-  return(0);
-}
-
-
-int edfwrite_digital_samples(int handle, int *buf)
-{
-  int  i, p,
-       error,
-       sf,
-       digmax,
-       digmin,
-       edfsignal,
-       value;
-
-  FILE *file;
-
-  struct edfhdrblock *hdr;
-
-
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->edfsignals == 0)
-  {
-    return(-1);
-  }
-
-  hdr = hdrlist[handle];
-
-  file = hdr->file_hdl;
-
-  edfsignal = hdr->signal_write_sequence_pos;
-
-  if(!hdr->datarecords)
-  {
-    if(!edfsignal)
-    {
-      error = edflib_write_edf_header(hdr);
-
-      if(error)
-      {
-        return(error);
-      }
-    }
-  }
-
-  sf = hdr->edfparam[edfsignal].smp_per_record;
-
-  digmax = hdr->edfparam[edfsignal].dig_max;
-
-  digmin = hdr->edfparam[edfsignal].dig_min;
-
-  for(i=0; i<sf; i++)
-  {
-    value = buf[i];
-
-    if(value>digmax)
-    {
-      value = digmax;
-    }
-
-    if(value<digmin)
-    {
-      value = digmin;
-    }
-
-    fputc((value)&0xff, file);
-
-    if(fputc((value>>8)&0xff, file)==EOF)
-    {
-      return(-1);
-    }
-
-    if(hdr->bdf)
-    {
-      fputc((value>>16)&0xff, file);
-    }
-  }
-
-  hdr->signal_write_sequence_pos++;
-
-  if(hdr->signal_write_sequence_pos == hdr->edfsignals)
-  {
-    hdr->signal_write_sequence_pos = 0;
-
-    p = edflib_fprint_ll_number_nonlocalized(file, (hdr->datarecords * hdr->long_data_record_duration) / EDFLIB_TIME_DIMENSION, 0, 1);
-    if(hdr->long_data_record_duration % EDFLIB_TIME_DIMENSION)
-    {
-      fputc('.', file);
-      p++;
-      p += edflib_fprint_ll_number_nonlocalized(file, (hdr->datarecords * hdr->long_data_record_duration) % EDFLIB_TIME_DIMENSION, 7, 0);
-    }
-    fputc(20, file);
-    fputc(20, file);
-    p += 2;
-    for(; p<hdr->total_annot_bytes; p++)
-    {
-      fputc(0, file);
-    }
-
-    hdr->datarecords++;
-
-    fflush(file);
-  }
-
-  return(0);
-}
-
-
-int edf_blockwrite_digital_samples(int handle, int *buf)
-{
-  int  i, j, p,
-       error,
-       sf,
-       digmax,
-       digmin,
-       edfsignals,
-       buf_offset,
-       value;
-
-  FILE *file;
-
-  struct edfhdrblock *hdr;
-
-
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->signal_write_sequence_pos)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->edfsignals == 0)
-  {
-    return(-1);
-  }
-
-  hdr = hdrlist[handle];
-
-  file = hdr->file_hdl;
-
-  edfsignals = hdr->edfsignals;
-
-  if(!hdr->datarecords)
-  {
-    error = edflib_write_edf_header(hdr);
-
-    if(error)
-    {
-      return(error);
-    }
-  }
-
-  buf_offset = 0;
-
-  for(j=0; j<edfsignals; j++)
-  {
-    sf = hdr->edfparam[j].smp_per_record;
-
-    digmax = hdr->edfparam[j].dig_max;
-
-    digmin = hdr->edfparam[j].dig_min;
-
-    for(i=0; i<sf; i++)
-    {
-      value = buf[i + buf_offset];
-
-      if(value>digmax)
-      {
-        value = digmax;
-      }
-
-      if(value<digmin)
-      {
-        value = digmin;
-      }
-
-      fputc(value&0xff, file);
-
-      if(fputc((value>>8)&0xff, file)==EOF)
-      {
-        return(-1);
-      }
-
-      if(hdr->bdf)
-      {
-        fputc((value>>16)&0xff, file);
-      }
-    }
-
-    buf_offset += sf;
-  }
-
-  p = edflib_fprint_ll_number_nonlocalized(file, (hdr->datarecords * hdr->long_data_record_duration) / EDFLIB_TIME_DIMENSION, 0, 1);
-  if(hdr->long_data_record_duration % EDFLIB_TIME_DIMENSION)
-  {
-    fputc('.', file);
-    p++;
-    p += edflib_fprint_ll_number_nonlocalized(file, (hdr->datarecords * hdr->long_data_record_duration) % EDFLIB_TIME_DIMENSION, 7, 0);
-  }
-  fputc(20, file);
-  fputc(20, file);
-  p += 2;
-  for(; p<hdr->total_annot_bytes; p++)
-  {
-    fputc(0, file);
-  }
-
-  hdr->datarecords++;
-
-  fflush(file);
-
-  return(0);
-}
-
-
-int edf_blockwrite_digital_short_samples(int handle, short *buf)
-{
-  int  i, j, p,
-       error,
-       sf,
-       digmax,
-       digmin,
-       edfsignals,
-       buf_offset,
-       value;
-
-  FILE *file;
-
-  struct edfhdrblock *hdr;
-
-
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->signal_write_sequence_pos)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->edfsignals == 0)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->bdf == 1)
-  {
-    return(-1);
-  }
-
-  hdr = hdrlist[handle];
-
-  file = hdr->file_hdl;
-
-  edfsignals = hdr->edfsignals;
-
-  if(!hdr->datarecords)
-  {
-    error = edflib_write_edf_header(hdr);
-
-    if(error)
-    {
-      return(error);
-    }
-  }
-
-  buf_offset = 0;
-
-  for(j=0; j<edfsignals; j++)
-  {
-    sf = hdr->edfparam[j].smp_per_record;
-
-    digmax = hdr->edfparam[j].dig_max;
-
-    digmin = hdr->edfparam[j].dig_min;
-
-    for(i=0; i<sf; i++)
-    {
-      value = buf[i + buf_offset];
-
-      if(value>digmax)
-      {
-        value = digmax;
-      }
-
-      if(value<digmin)
-      {
-        value = digmin;
-      }
-
-      fputc(value&0xff, file);
-
-      if(fputc((value>>8)&0xff, file)==EOF)
-      {
-        return(-1);
-      }
-
-      if(hdr->bdf)
-      {
-        fputc((value>>16)&0xff, file);
-      }
-    }
-
-    buf_offset += sf;
-  }
-
-  p = edflib_fprint_ll_number_nonlocalized(file, (hdr->datarecords * hdr->long_data_record_duration) / EDFLIB_TIME_DIMENSION, 0, 1);
-  if(hdr->long_data_record_duration % EDFLIB_TIME_DIMENSION)
-  {
-    fputc('.', file);
-    p++;
-    p += edflib_fprint_ll_number_nonlocalized(file, (hdr->datarecords * hdr->long_data_record_duration) % EDFLIB_TIME_DIMENSION, 7, 0);
-  }
-  fputc(20, file);
-  fputc(20, file);
-  p += 2;
-  for(; p<hdr->total_annot_bytes; p++)
-  {
-    fputc(0, file);
-  }
-
-  hdr->datarecords++;
-
-  fflush(file);
-
-  return(0);
-}
-
-
-int edf_blockwrite_digital_3byte_samples(int handle, void *buf)
-{
-  int  j, p,
-       error,
-       edfsignals,
-       total_samples=0;
-
-  FILE *file;
-
-  struct edfhdrblock *hdr;
-
-
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->signal_write_sequence_pos)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->edfsignals == 0)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->bdf != 1)
-  {
-    return(-1);
-  }
-
-  hdr = hdrlist[handle];
-
-  file = hdr->file_hdl;
-
-  edfsignals = hdr->edfsignals;
-
-  if(!hdr->datarecords)
-  {
-    error = edflib_write_edf_header(hdr);
-
-    if(error)
-    {
-      return(error);
-    }
-  }
-
-  for(j=0; j<edfsignals; j++)
-  {
-    total_samples += hdr->edfparam[j].smp_per_record;
-  }
-
-  if(fwrite(buf, total_samples * 3, 1, file) != 1)
-  {
-    return(-1);
-  }
-
-  p = edflib_fprint_ll_number_nonlocalized(file, (hdr->datarecords * hdr->long_data_record_duration) / EDFLIB_TIME_DIMENSION, 0, 1);
-  if(hdr->long_data_record_duration % EDFLIB_TIME_DIMENSION)
-  {
-    fputc('.', file);
-    p++;
-    p += edflib_fprint_ll_number_nonlocalized(file, (hdr->datarecords * hdr->long_data_record_duration) % EDFLIB_TIME_DIMENSION, 7, 0);
-  }
-  fputc(20, file);
-  fputc(20, file);
-  p += 2;
-  for(; p<hdr->total_annot_bytes; p++)
-  {
-    fputc(0, file);
-  }
-
-  hdr->datarecords++;
-
-  fflush(file);
-
-  return(0);
-}
-
-
-int edfwrite_physical_samples(int handle, double *buf)
-{
-  int  i, p,
-       error,
-       sf,
-       digmax,
-       digmin,
-       value,
-       edfsignal;
-
-  double bitvalue,
-         phys_offset;
-
-  FILE *file;
-
-  struct edfhdrblock *hdr;
-
-
-
-
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->edfsignals == 0)
-  {
-    return(-1);
-  }
-
-  hdr = hdrlist[handle];
-
-  file = hdr->file_hdl;
-
-  edfsignal = hdr->signal_write_sequence_pos;
-
-  if(!hdr->datarecords)
-  {
-    if(!edfsignal)
-    {
-      error = edflib_write_edf_header(hdr);
-
-      if(error)
-      {
-        return(error);
-      }
-    }
-  }
-
-  sf = hdr->edfparam[edfsignal].smp_per_record;
-
-  digmax = hdr->edfparam[edfsignal].dig_max;
-
-  digmin = hdr->edfparam[edfsignal].dig_min;
-
-  bitvalue = hdr->edfparam[edfsignal].bitvalue;
-
-  phys_offset = hdr->edfparam[edfsignal].offset;
-
-  for(i=0; i<sf; i++)
-  {
-    value = (buf[i] / bitvalue) - phys_offset;
-
-    if(value>digmax)
-    {
-      value = digmax;
-    }
-
-    if(value<digmin)
-    {
-      value = digmin;
-    }
-
-    fputc(value&0xff, file);
-
-    if(fputc((value>>8)&0xff, file)==EOF)
-    {
-      return(-1);
-    }
-
-    if(hdr->bdf)
-    {
-      fputc((value>>16)&0xff, file);
-    }
-  }
-
-  hdr->signal_write_sequence_pos++;
-
-  if(hdr->signal_write_sequence_pos == hdr->edfsignals)
-  {
-    hdr->signal_write_sequence_pos = 0;
-
-    p = edflib_fprint_ll_number_nonlocalized(file, (hdr->datarecords * hdr->long_data_record_duration) / EDFLIB_TIME_DIMENSION, 0, 1);
-    if(hdr->long_data_record_duration % EDFLIB_TIME_DIMENSION)
-    {
-      fputc('.', file);
-      p++;
-      p += edflib_fprint_ll_number_nonlocalized(file, (hdr->datarecords * hdr->long_data_record_duration) % EDFLIB_TIME_DIMENSION, 7, 0);
-    }
-    fputc(20, file);
-    fputc(20, file);
-    p += 2;
-    for(; p<hdr->total_annot_bytes; p++)
-    {
-      fputc(0, file);
-    }
-
-    hdr->datarecords++;
-
-    fflush(file);
-  }
-
-  return(0);
-}
-
-
-int edf_blockwrite_physical_samples(int handle, double *buf)
-{
-  int  i, j, p,
-       error,
-       sf,
-       digmax,
-       digmin,
-       edfsignals,
-       buf_offset,
-       value;
-
-  double bitvalue,
-         phys_offset;
-
-  FILE *file;
-
-  struct edfhdrblock *hdr;
-
-
-
-
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->signal_write_sequence_pos)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->edfsignals == 0)
-  {
-    return(-1);
-  }
-
-  hdr = hdrlist[handle];
-
-  file = hdr->file_hdl;
-
-  edfsignals = hdr->edfsignals;
-
-  if(!hdr->datarecords)
-  {
-    error = edflib_write_edf_header(hdr);
-
-    if(error)
-    {
-      return(error);
-    }
-  }
-
-  buf_offset = 0;
-
-  for(j=0; j<edfsignals; j++)
-  {
-    sf = hdr->edfparam[j].smp_per_record;
-
-    digmax = hdr->edfparam[j].dig_max;
-
-    digmin = hdr->edfparam[j].dig_min;
-
-    bitvalue = hdr->edfparam[j].bitvalue;
-
-    phys_offset = hdr->edfparam[j].offset;
-
-    for(i=0; i<sf; i++)
-    {
-      value = (buf[i + buf_offset] / bitvalue) - phys_offset;
-
-      if(value>digmax)
-      {
-        value = digmax;
-      }
-
-      if(value<digmin)
-      {
-        value = digmin;
-      }
-
-      fputc(value&0xff, file);
-
-      if(fputc((value>>8)&0xff, file)==EOF)
-      {
-        return(-1);
-      }
-
-      if(hdr->bdf)
-      {
-        fputc((value>>16)&0xff, file);
-      }
-    }
-
-    buf_offset += sf;
-  }
-
-  p = edflib_fprint_ll_number_nonlocalized(file, (hdr->datarecords * hdr->long_data_record_duration) / EDFLIB_TIME_DIMENSION, 0, 1);
-  if(hdr->long_data_record_duration % EDFLIB_TIME_DIMENSION)
-  {
-    fputc('.', file);
-    p++;
-    p += edflib_fprint_ll_number_nonlocalized(file, (hdr->datarecords * hdr->long_data_record_duration) % EDFLIB_TIME_DIMENSION, 7, 0);
-  }
-  fputc(20, file);
-  fputc(20, file);
-  p += 2;
-  for(; p<hdr->total_annot_bytes; p++)
-  {
-    fputc(0, file);
-  }
-
-  hdr->datarecords++;
-
-  fflush(file);
-
-  return(0);
-}
-
-
-static int edflib_write_edf_header(struct edfhdrblock *hdr)
-{
-  int i, j, p, q,
-      len,
-      rest,
-      edfsignals;
-
-  char str[128];
-
-  struct tm *date_time;
-
-  time_t elapsed_time;
-
-  FILE *file;
-
-
-  file = hdr->file_hdl;
-
-  edfsignals = hdr->edfsignals;
-
-  if(edfsignals<0)
-  {
-    return(-20);
-  }
-
-  if(edfsignals>EDFLIB_MAXSIGNALS)
-  {
-    return(-21);
-  }
-
-  hdr->eq_sf = 1;
-
-  for(i=0; i<edfsignals; i++)
-  {
-    if(hdr->edfparam[i].smp_per_record<1)
-    {
-      return(-22);
-    }
-
-    if(hdr->edfparam[i].dig_max==hdr->edfparam[i].dig_min)
-    {
-      return(-23);
-    }
-
-    if(hdr->edfparam[i].dig_max<hdr->edfparam[i].dig_min)
-    {
-      return(-24);
-    }
-
-    if(hdr->edfparam[i].phys_max==hdr->edfparam[i].phys_min)
-    {
-      return(-25);
-    }
-
-    if(i > 0)
-    {
-      if(hdr->edfparam[i].smp_per_record != hdr->edfparam[i-1].smp_per_record)
-      {
-        hdr->eq_sf = 0;
-      }
-    }
-  }
-
-  for(i=0; i<edfsignals; i++)
-  {
-    hdr->edfparam[i].bitvalue = (hdr->edfparam[i].phys_max - hdr->edfparam[i].phys_min) / (hdr->edfparam[i].dig_max - hdr->edfparam[i].dig_min);
-    hdr->edfparam[i].offset = hdr->edfparam[i].phys_max / hdr->edfparam[i].bitvalue - hdr->edfparam[i].dig_max;
-  }
-
-  rewind(file);
-
-  if(hdr->edf)
-  {
-    fprintf(file, "0       ");
-  }
-  else
-  {
-    fputc(255, file);
-    fprintf(file, "BIOSEMI");
-  }
-
-  p = 0;
-
-  if(hdr->plus_birthdate[0]==0)
-  {
-    rest = 72;
-  }
-  else
-  {
-    rest = 62;
-  }
-
-  len = strlen(hdr->plus_patientcode);
-  if(len && rest)
-  {
-    if(len>rest)
-    {
-      len = rest;
-      rest = 0;
-    }
-    else
-    {
-      rest -= len;
-    }
-    strcpy(str, hdr->plus_patientcode);
-    edflib_latin1_to_ascii(str, len);
-    str[len] = 0;
-    for(i=0; i<len; i++)
-    {
-      if(str[i]==' ')
-      {
-        str[i] = '_';
-      }
-    }
-    p += fprintf(file, "%s ", str);
-  }
-  else
-  {
-    p += fprintf(file, "X ");
-  }
-
-  if(hdr->plus_gender[0]=='M')
-  {
-    fputc('M', file);
-  }
-  else
-  {
-    if(hdr->plus_gender[0]=='F')
-    {
-      fputc('F', file);
-    }
-    else
-    {
-      fputc('X', file);
-    }
-  }
-  fputc(' ', file);
-  p +=2;
-
-  if(hdr->plus_birthdate[0]==0)
-  {
-    fputc('X', file);
-    fputc(' ', file);
-
-    p +=2;
-  }
-  else
-  {
-    fputc(hdr->plus_birthdate[0], file);
-    fputc(hdr->plus_birthdate[1], file);
-    fputc('-', file);
-    q = edflib_atof_nonlocalized(&(hdr->plus_birthdate[3]));
-    switch(q)
-    {
-      case  1: fprintf(file, "JAN");  break;
-      case  2: fprintf(file, "FEB");  break;
-      case  3: fprintf(file, "MAR");  break;
-      case  4: fprintf(file, "APR");  break;
-      case  5: fprintf(file, "MAY");  break;
-      case  6: fprintf(file, "JUN");  break;
-      case  7: fprintf(file, "JUL");  break;
-      case  8: fprintf(file, "AUG");  break;
-      case  9: fprintf(file, "SEP");  break;
-      case 10: fprintf(file, "OCT");  break;
-      case 11: fprintf(file, "NOV");  break;
-      case 12: fprintf(file, "DEC");  break;
-    }
-    fputc('-', file);
-    fputc(hdr->plus_birthdate[6], file);
-    fputc(hdr->plus_birthdate[7], file);
-    fputc(hdr->plus_birthdate[8], file);
-    fputc(hdr->plus_birthdate[9], file);
-    fputc(' ', file);
-
-    p += 12;
-  }
-
-  len = strlen(hdr->plus_patient_name);
-  if(len && rest)
-  {
-    if(len>rest)
-    {
-      len = rest;
-      rest = 0;
-    }
-    else
-    {
-      rest -= len;
-    }
-    strcpy(str, hdr->plus_patient_name);
-    edflib_latin1_to_ascii(str, len);
-    str[len] = 0;
-    for(i=0; i<len; i++)
-    {
-      if(str[i]==' ')
-      {
-        str[i] = '_';
-      }
-    }
-    p += fprintf(file, "%s ", str);
-  }
-  else
-  {
-    fputc('X', file);
-
-    p++;
-  }
-
-  len = strlen(hdr->plus_patient_additional);
-  if(len && rest)
-  {
-    if(len>rest)
-    {
-      len = rest;
-    }
-    strcpy(str, hdr->plus_patient_additional);
-    edflib_latin1_to_ascii(str, len);
-    str[len] = 0;
-    p += fprintf(file, "%s", str);
-  }
-
-  for(; p<80; p++)
-  {
-    fputc(' ', file);
-  }
-
-  if(!hdr->startdate_year)
-  {
-    elapsed_time = time(NULL);
-    date_time = localtime(&elapsed_time);
-
-    hdr->startdate_year = date_time->tm_year + 1900;
-    hdr->startdate_month = date_time->tm_mon + 1;
-    hdr->startdate_day = date_time->tm_mday;
-    hdr->starttime_hour = date_time->tm_hour;
-    hdr->starttime_minute = date_time->tm_min;
-    hdr->starttime_second = date_time->tm_sec % 60;
-  }
-
-  p = 0;
-
-  p += fprintf(file, "Startdate %02u-", hdr->startdate_day);
-  switch(hdr->startdate_month)
-  {
-    case  1 : fprintf(file, "JAN");  break;
-    case  2 : fprintf(file, "FEB");  break;
-    case  3 : fprintf(file, "MAR");  break;
-    case  4 : fprintf(file, "APR");  break;
-    case  5 : fprintf(file, "MAY");  break;
-    case  6 : fprintf(file, "JUN");  break;
-    case  7 : fprintf(file, "JUL");  break;
-    case  8 : fprintf(file, "AUG");  break;
-    case  9 : fprintf(file, "SEP");  break;
-    case 10 : fprintf(file, "OCT");  break;
-    case 11 : fprintf(file, "NOV");  break;
-    case 12 : fprintf(file, "DEC");  break;
-  }
-  p += 3;
-  fputc('-', file);
-  p++;
-  p += edflib_fprint_int_number_nonlocalized(file, hdr->startdate_year, 4, 0);
-  fputc(' ', file);
-  p++;
-
-  rest = 42;
-
-  len = strlen(hdr->plus_admincode);
-  if(len && rest)
-  {
-    if(len>rest)
-    {
-      len = rest;
-      rest = 0;
-    }
-    else
-    {
-      rest -= len;
-    }
-    strcpy(str, hdr->plus_admincode);
-    edflib_latin1_to_ascii(str, len);
-    str[len] = 0;
-    for(i=0; i<len; i++)
-    {
-      if(str[i]==' ')
-      {
-        str[i] = '_';
-      }
-    }
-    p += fprintf(file, "%s ", str);
-  }
-  else
-  {
-    p += fprintf(file, "X ");
-  }
-
-  len = strlen(hdr->plus_technician);
-  if(len && rest)
-  {
-    if(len>rest)
-    {
-      len = rest;
-      rest = 0;
-    }
-    else
-    {
-      rest -= len;
-    }
-    strcpy(str, hdr->plus_technician);
-    edflib_latin1_to_ascii(str, len);
-    str[len] = 0;
-    for(i=0; i<len; i++)
-    {
-      if(str[i]==' ')
-      {
-        str[i] = '_';
-      }
-    }
-    p += fprintf(file, "%s ", str);
-  }
-  else
-  {
-    p += fprintf(file, "X ");
-  }
-
-  len = strlen(hdr->plus_equipment);
-  if(len && rest)
-  {
-    if(len>rest)
-    {
-      len = rest;
-      rest = 0;
-    }
-    else
-    {
-      rest -= len;
-    }
-    strcpy(str, hdr->plus_equipment);
-    edflib_latin1_to_ascii(str, len);
-    str[len] = 0;
-    for(i=0; i<len; i++)
-    {
-      if(str[i]==' ')
-      {
-        str[i] = '_';
-      }
-    }
-    p += fprintf(file, "%s ", str);
-  }
-  else
-  {
-    p += fprintf(file, "X ");
-  }
-
-  len = strlen(hdr->plus_recording_additional);
-  if(len && rest)
-  {
-    if(len>rest)
-    {
-      len = rest;
-    }
-    strcpy(str, hdr->plus_recording_additional);
-    edflib_latin1_to_ascii(str, len);
-    str[len] = 0;
-    p += fprintf(file, "%s", str);
-  }
-
-  for(; p<80; p++)
-  {
-    fputc(' ', file);
-  }
-
-  fprintf(file, "%02u.%02u.%02u", hdr->startdate_day, hdr->startdate_month, (hdr->startdate_year % 100));
-  fprintf(file, "%02u.%02u.%02u", hdr->starttime_hour, hdr->starttime_minute, hdr->starttime_second);
-  p = edflib_fprint_int_number_nonlocalized(file, (edfsignals + hdr->nr_annot_chns + 1) * 256, 0, 0);
-  for(; p<8; p++)
-  {
-    fputc(' ', file);
-  }
-  if(hdr->edf)
-  {
-    fprintf(file, "EDF+C");
-  }
-  else
-  {
-    fprintf(file, "BDF+C");
-  }
-  for(i=0; i<39; i++)
-  {
-    fputc(' ', file);
-  }
-  fprintf(file, "-1      ");
-  if(hdr->long_data_record_duration == EDFLIB_TIME_DIMENSION)
-  {
-    fprintf(file, "1       ");
-  }
-  else
-  {
-    edflib_sprint_number_nonlocalized(str, hdr->data_record_duration);
-    strcat(str, "        ");
-    str[8] = 0;
-    fprintf(file, "%s", str);
-  }
-  p = edflib_fprint_int_number_nonlocalized(file, edfsignals + hdr->nr_annot_chns, 0, 0);
-  for(; p<4; p++)
-  {
-    fputc(' ', file);
-  }
-
-  for(i=0; i<edfsignals; i++)
-  {
-    len = strlen(hdr->edfparam[i].label);
-    edflib_latin1_to_ascii(hdr->edfparam[i].label, len);
-    for(j=0; j<len; j++)
-    {
-      fputc(hdr->edfparam[i].label[j], file);
-    }
-    for(; j<16; j++)
-    {
-      fputc(' ', file);
-    }
-  }
-  for(j=0; j<hdr->nr_annot_chns; j++)
-  {
-    if(hdr->edf)
-    {
-      fprintf(file, "EDF Annotations ");
-    }
-    else
-    {
-      fprintf(file, "BDF Annotations ");
-    }
-  }
-  for(i=0; i<edfsignals; i++)
-  {
-    len = strlen(hdr->edfparam[i].transducer);
-    edflib_latin1_to_ascii(hdr->edfparam[i].transducer, len);
-    for(j=0; j<len; j++)
-    {
-      fputc(hdr->edfparam[i].transducer[j], file);
-    }
-    for(; j<80; j++)
-    {
-      fputc(' ', file);
-    }
-  }
-  for(j=0; j<hdr->nr_annot_chns; j++)
-  {
-    for(i=0; i<80; i++)
-    {
-      fputc(' ', file);
-    }
-  }
-  for(i=0; i<edfsignals; i++)
-  {
-    len = strlen(hdr->edfparam[i].physdimension);
-    edflib_latin1_to_ascii(hdr->edfparam[i].physdimension, len);
-    for(j=0; j<len; j++)
-    {
-      fputc(hdr->edfparam[i].physdimension[j], file);
-    }
-    for(; j<8; j++)
-    {
-      fputc(' ', file);
-    }
-  }
-  for(j=0; j<hdr->nr_annot_chns; j++)
-  {
-    fprintf(file, "        ");
-  }
-  for(i=0; i<edfsignals; i++)
-  {
-    p = edflib_sprint_number_nonlocalized(str, hdr->edfparam[i].phys_min);
-    for(; p<8; p++)
-    {
-      str[p] = ' ';
-    }
-    str[8] = 0;
-    fprintf(file, "%s", str);
-  }
-  for(j=0; j<hdr->nr_annot_chns; j++)
-  {
-    fprintf(file, "-1      ");
-  }
-  for(i=0; i<edfsignals; i++)
-  {
-    p = edflib_sprint_number_nonlocalized(str, hdr->edfparam[i].phys_max);
-    for(; p<8; p++)
-    {
-      str[p] = ' ';
-    }
-    str[8] = 0;
-    fprintf(file, "%s", str);
-  }
-  for(j=0; j<hdr->nr_annot_chns; j++)
-  {
-    fprintf(file, "1       ");
-  }
-  for(i=0; i<edfsignals; i++)
-  {
-    p = edflib_fprint_int_number_nonlocalized(file, hdr->edfparam[i].dig_min, 0, 0);
-    for(; p<8; p++)
-    {
-      fputc(' ', file);
-    }
-  }
-  for(j=0; j<hdr->nr_annot_chns; j++)
-  {
-    if(hdr->edf)
-    {
-      fprintf(file, "-32768  ");
-    }
-    else
-    {
-      fprintf(file, "-8388608");
-    }
-  }
-  for(i=0; i<edfsignals; i++)
-  {
-    p = edflib_fprint_int_number_nonlocalized(file, hdr->edfparam[i].dig_max, 0, 0);
-    for(; p<8; p++)
-    {
-      fputc(' ', file);
-    }
-  }
-  for(j=0; j<hdr->nr_annot_chns; j++)
-  {
-    if(hdr->edf)
-    {
-      fprintf(file, "32767   ");
-    }
-    else
-    {
-      fprintf(file, "8388607 ");
-    }
-  }
-  for(i=0; i<edfsignals; i++)
-  {
-    len = strlen(hdr->edfparam[i].prefilter);
-    edflib_latin1_to_ascii(hdr->edfparam[i].prefilter, len);
-    for(j=0; j<len; j++)
-    {
-      fputc(hdr->edfparam[i].prefilter[j], file);
-    }
-    for(; j<80; j++)
-    {
-      fputc(' ', file);
-    }
-  }
-  for(i=0; i<hdr->nr_annot_chns; i++)
-  {
-    for(j=0; j<80; j++)
-    {
-      fputc(' ', file);
-    }
-  }
-  for(i=0; i<edfsignals; i++)
-  {
-    p = edflib_fprint_int_number_nonlocalized(file, hdr->edfparam[i].smp_per_record, 0, 0);
-    for(; p<8; p++)
-    {
-      fputc(' ', file);
-    }
-  }
-  for(j=0; j<hdr->nr_annot_chns; j++)
-  {
-    if(hdr->edf)
-    {
-      p = edflib_fprint_int_number_nonlocalized(file, EDFLIB_ANNOTATION_BYTES / 2, 0, 0);
-      for(; p<8; p++)
-      {
-        fputc(' ', file);
-      }
-    }
-    else
-    {
-      p = edflib_fprint_int_number_nonlocalized(file, EDFLIB_ANNOTATION_BYTES / 3, 0, 0);
-      for(; p<8; p++)
-      {
-        fputc(' ', file);
-      }
-    }
-  }
-  for(i=0; i<(edfsignals * 32); i++)
-  {
-    fputc(' ', file);
-  }
-  for(i=0; i<(hdr->nr_annot_chns * 32); i++)
-  {
-    fputc(' ', file);
-  }
-
-  hdr->total_annot_bytes = EDFLIB_ANNOTATION_BYTES * hdr->nr_annot_chns;
-
-  return(0);
-}
-
-
-int edf_set_label(int handle, int edfsignal, const char *label)
-{
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(edfsignal<0)
-  {
-    return(-1);
-  }
-
-  if(edfsignal>=hdrlist[handle]->edfsignals)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->datarecords)
-  {
-    return(-1);
-  }
-
-  strncpy(hdrlist[handle]->edfparam[edfsignal].label, label, 16);
-
-  hdrlist[handle]->edfparam[edfsignal].label[16] = 0;
-
-  edflib_remove_padding_trailing_spaces(hdrlist[handle]->edfparam[edfsignal].label);
-
-  return(0);
-}
-
-
-int edf_set_physical_dimension(int handle, int edfsignal, const char *phys_dim)
-{
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(edfsignal<0)
-  {
-    return(-1);
-  }
-
-  if(edfsignal>=hdrlist[handle]->edfsignals)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->datarecords)
-  {
-    return(-1);
-  }
-
-  strncpy(hdrlist[handle]->edfparam[edfsignal].physdimension, phys_dim, 8);
-
-  hdrlist[handle]->edfparam[edfsignal].physdimension[8] = 0;
-
-  edflib_remove_padding_trailing_spaces(hdrlist[handle]->edfparam[edfsignal].physdimension);
-
-  return(0);
-}
-
-
-int edf_set_physical_maximum(int handle, int edfsignal, double phys_max)
-{
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(edfsignal<0)
-  {
-    return(-1);
-  }
-
-  if(edfsignal>=hdrlist[handle]->edfsignals)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->datarecords)
-  {
-    return(-1);
-  }
-
-  hdrlist[handle]->edfparam[edfsignal].phys_max = phys_max;
-
-  return(0);
-}
-
-
-int edf_set_physical_minimum(int handle, int edfsignal, double phys_min)
-{
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(edfsignal<0)
-  {
-    return(-1);
-  }
-
-  if(edfsignal>=hdrlist[handle]->edfsignals)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->datarecords)
-  {
-    return(-1);
-  }
-
-  hdrlist[handle]->edfparam[edfsignal].phys_min = phys_min;
-
-  return(0);
-}
-
-
-int edf_set_digital_maximum(int handle, int edfsignal, int dig_max)
-{
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(edfsignal<0)
-  {
-    return(-1);
-  }
-
-  if(edfsignal>=hdrlist[handle]->edfsignals)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->edf)
-  {
-    if(dig_max > 32767)
-    {
-      return(-1);
-    }
-  }
-  else
-  {
-    if(dig_max > 8388607)
-    {
-      return(-1);
-    }
-  }
-
-  if(hdrlist[handle]->datarecords)
-  {
-    return(-1);
-  }
-
-  hdrlist[handle]->edfparam[edfsignal].dig_max = dig_max;
-
-  return(0);
-}
-
-
-int edf_set_digital_minimum(int handle, int edfsignal, int dig_min)
-{
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(edfsignal<0)
-  {
-    return(-1);
-  }
-
-  if(edfsignal>=hdrlist[handle]->edfsignals)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->edf)
-  {
-    if(dig_min < (-32768))
-    {
-      return(-1);
-    }
-  }
-  else
-  {
-    if(dig_min < (-8388608))
-    {
-      return(-1);
-    }
-  }
-
-  if(hdrlist[handle]->datarecords)
-  {
-    return(-1);
-  }
-
-  hdrlist[handle]->edfparam[edfsignal].dig_min = dig_min;
-
-  return(0);
-}
-
-
-int edf_set_patientname(int handle, const char *patientname)
-{
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->datarecords)
-  {
-    return(-1);
-  }
-
-  strncpy(hdrlist[handle]->plus_patient_name, patientname, 80);
-
-  hdrlist[handle]->plus_patient_name[80] = 0;
-
-  edflib_remove_padding_trailing_spaces(hdrlist[handle]->plus_patient_name);
-
-  return(0);
-}
-
-
-int edf_set_patientcode(int handle, const char *patientcode)
-{
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->datarecords)
-  {
-    return(-1);
-  }
-
-  strncpy(hdrlist[handle]->plus_patientcode, patientcode, 80);
-
-  hdrlist[handle]->plus_patientcode[80] = 0;
-
-  edflib_remove_padding_trailing_spaces(hdrlist[handle]->plus_patientcode);
-
-  return(0);
-}
-
-
-int edf_set_gender(int handle, int gender)
-{
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->datarecords)
-  {
-    return(-1);
-  }
-
-  if((gender<0)||(gender>1))
-  {
-    return(-1);
-  }
-
-  if(gender)
-  {
-    hdrlist[handle]->plus_gender[0] = 'M';
-  }
-  else
-  {
-    hdrlist[handle]->plus_gender[0] = 'F';
-  }
-
-  hdrlist[handle]->plus_gender[1] = 0;
-
-  return(0);
-}
-
-
-int edf_set_birthdate(int handle, int birthdate_year, int birthdate_month, int birthdate_day)
-{
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->datarecords)
-  {
-    return(-1);
-  }
-
-  if((birthdate_year<1800) || (birthdate_year>3000) ||
-     (birthdate_month<1)   || (birthdate_month>12)  ||
-     (birthdate_day<1)     || (birthdate_day>31))
-  {
-    return(-1);
-  }
-
-  sprintf(hdrlist[handle]->plus_birthdate, "%02i.%02i.%02i%02i", birthdate_day, birthdate_month, birthdate_year / 100, birthdate_year % 100);
-
-  hdrlist[handle]->plus_birthdate[10] = 0;
-
-  return(0);
-}
-
-
-int edf_set_patient_additional(int handle, const char *patient_additional)
-{
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->datarecords)
-  {
-    return(-1);
-  }
-
-  strncpy(hdrlist[handle]->plus_patient_additional, patient_additional, 80);
-
-  hdrlist[handle]->plus_patient_additional[80] = 0;
-
-  edflib_remove_padding_trailing_spaces(hdrlist[handle]->plus_patient_additional);
-
-  return(0);
-}
-
-
-int edf_set_admincode(int handle, const char *admincode)
-{
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->datarecords)
-  {
-    return(-1);
-  }
-
-  strncpy(hdrlist[handle]->plus_admincode, admincode, 80);
-
-  hdrlist[handle]->plus_admincode[80] = 0;
-
-  edflib_remove_padding_trailing_spaces(hdrlist[handle]->plus_admincode);
-
-  return(0);
-}
-
-
-int edf_set_technician(int handle, const char *technician)
-{
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->datarecords)
-  {
-    return(-1);
-  }
-
-  strncpy(hdrlist[handle]->plus_technician, technician, 80);
-
-  hdrlist[handle]->plus_technician[80] = 0;
-
-  edflib_remove_padding_trailing_spaces(hdrlist[handle]->plus_technician);
-
-  return(0);
-}
-
-
-int edf_set_equipment(int handle, const char *equipment)
-{
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->datarecords)
-  {
-    return(-1);
-  }
-
-  strncpy(hdrlist[handle]->plus_equipment, equipment, 80);
-
-  hdrlist[handle]->plus_equipment[80] = 0;
-
-  edflib_remove_padding_trailing_spaces(hdrlist[handle]->plus_equipment);
-
-  return(0);
-}
-
-
-int edf_set_recording_additional(int handle, const char *recording_additional)
-{
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->datarecords)
-  {
-    return(-1);
-  }
-
-  strncpy(hdrlist[handle]->plus_recording_additional, recording_additional, 80);
-
-  hdrlist[handle]->plus_recording_additional[80] = 0;
-
-  edflib_remove_padding_trailing_spaces(hdrlist[handle]->plus_recording_additional);
-
-  return(0);
-}
-
-
-int edf_set_startdatetime(int handle, int startdate_year, int startdate_month, int startdate_day,
-                                      int starttime_hour, int starttime_minute, int starttime_second)
-{
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->datarecords)
-  {
-    return(-1);
-  }
-
-  if((startdate_year<1970) || (startdate_year>3000) ||
-     (startdate_month<1)   || (startdate_month>12)  ||
-     (startdate_day<1)     || (startdate_day>31)    ||
-     (starttime_hour<0)    || (starttime_hour>23)   ||
-     (starttime_minute<0)  || (starttime_minute>59) ||
-     (starttime_second<0)  || (starttime_second>59))
-  {
-    return(-1);
-  }
-
-  hdrlist[handle]->startdate_year = startdate_year;
-  hdrlist[handle]->startdate_month = startdate_month;
-  hdrlist[handle]->startdate_day = startdate_day;
-  hdrlist[handle]->starttime_hour = starttime_hour;
-  hdrlist[handle]->starttime_minute = starttime_minute;
-  hdrlist[handle]->starttime_second = starttime_second;
-
-  return(0);
-}
-
-
-int edfwrite_annotation_utf8(int handle, long long onset, long long duration, const char *description)
-{
-  int i;
-
-  struct edf_write_annotationblock *list_annot, *malloc_list;
-
-
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(onset<0LL)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->annots_in_file >= hdrlist[handle]->annotlist_sz)
-  {
-    malloc_list = (struct edf_write_annotationblock *)realloc(write_annotationslist[handle],
-                                                              sizeof(struct edf_write_annotationblock) * (hdrlist[handle]->annotlist_sz + EDFLIB_ANNOT_MEMBLOCKSZ));
-    if(malloc_list==NULL)
-    {
-      return(-1);
-    }
-
-    write_annotationslist[handle] = malloc_list;
-
-    hdrlist[handle]->annotlist_sz += EDFLIB_ANNOT_MEMBLOCKSZ;
-  }
-
-  list_annot = write_annotationslist[handle] + hdrlist[handle]->annots_in_file;
-
-  list_annot->onset = onset;
-  list_annot->duration = duration;
-  strncpy(list_annot->annotation, description, EDFLIB_WRITE_MAX_ANNOTATION_LEN);
-  list_annot->annotation[EDFLIB_WRITE_MAX_ANNOTATION_LEN] = 0;
-
-  for(i=0; ; i++)
-  {
-    if(list_annot->annotation[i] == 0)
-    {
-      break;
-    }
-
-    if(list_annot->annotation[i] < 32)
-    {
-      list_annot->annotation[i] = '.';
-    }
-  }
-
-  hdrlist[handle]->annots_in_file++;
-
-  return(0);
-}
-
-
-int edfwrite_annotation_latin1(int handle, long long onset, long long duration, const char *description)
-{
-  struct edf_write_annotationblock *list_annot, *malloc_list;
-
-  char str[EDFLIB_WRITE_MAX_ANNOTATION_LEN + 1];
-
-
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(onset<0LL)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->annots_in_file >= hdrlist[handle]->annotlist_sz)
-  {
-    malloc_list = (struct edf_write_annotationblock *)realloc(write_annotationslist[handle],
-                                                              sizeof(struct edf_write_annotationblock) * (hdrlist[handle]->annotlist_sz + EDFLIB_ANNOT_MEMBLOCKSZ));
-    if(malloc_list==NULL)
-    {
-      return(-1);
-    }
-
-    write_annotationslist[handle] = malloc_list;
-
-    hdrlist[handle]->annotlist_sz += EDFLIB_ANNOT_MEMBLOCKSZ;
-  }
-
-  list_annot = write_annotationslist[handle] + hdrlist[handle]->annots_in_file;
-
-  list_annot->onset = onset;
-  list_annot->duration = duration;
-  strncpy(str, description, EDFLIB_WRITE_MAX_ANNOTATION_LEN);
-  str[EDFLIB_WRITE_MAX_ANNOTATION_LEN] = 0;
-  edflib_latin12utf8(str, strlen(str));
-  strncpy(list_annot->annotation, str, EDFLIB_WRITE_MAX_ANNOTATION_LEN);
-  list_annot->annotation[EDFLIB_WRITE_MAX_ANNOTATION_LEN] = 0;
-
-  hdrlist[handle]->annots_in_file++;
-
-  return(0);
-}
-
-
-static void edflib_remove_padding_trailing_spaces(char *str)
-{
-  int i;
-
-  while(str[0]==' ')
-  {
-    for(i=0; ; i++)
-    {
-      if(str[i]==0)
-      {
-        break;
-      }
-
-      str[i] = str[i+1];
-    }
-  }
-
-  for(i = strlen(str); i>0; i--)
-  {
-    if(str[i-1]==' ')
-    {
-      str[i-1] = 0;
-    }
-    else
-    {
-      break;
-    }
-  }
-}
-
-
-int edf_set_prefilter(int handle, int edfsignal, const char *prefilter)
-{
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(edfsignal<0)
-  {
-    return(-1);
-  }
-
-  if(edfsignal>=hdrlist[handle]->edfsignals)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->datarecords)
-  {
-    return(-1);
-  }
-
-  strncpy(hdrlist[handle]->edfparam[edfsignal].prefilter, prefilter, 80);
-
-  hdrlist[handle]->edfparam[edfsignal].prefilter[80] = 0;
-
-  edflib_remove_padding_trailing_spaces(hdrlist[handle]->edfparam[edfsignal].prefilter);
-
-  return(0);
-}
-
-
-int edf_set_transducer(int handle, int edfsignal, const char *transducer)
-{
-  if(handle<0)
-  {
-    return(-1);
-  }
-
-  if(handle>=EDFLIB_MAXFILES)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]==NULL)
-  {
-    return(-1);
-  }
-
-  if(!(hdrlist[handle]->writemode))
-  {
-    return(-1);
-  }
-
-  if(edfsignal<0)
-  {
-    return(-1);
-  }
-
-  if(edfsignal>=hdrlist[handle]->edfsignals)
-  {
-    return(-1);
-  }
-
-  if(hdrlist[handle]->datarecords)
-  {
-    return(-1);
-  }
-
-  strncpy(hdrlist[handle]->edfparam[edfsignal].transducer, transducer, 80);
-
-  hdrlist[handle]->edfparam[edfsignal].transducer[80] = 0;
-
-  edflib_remove_padding_trailing_spaces(hdrlist[handle]->edfparam[edfsignal].transducer);
-
-  return(0);
-}
-
-
-/* minimum is the minimum digits that will be printed (minus sign not included), leading zero's will be added if necessary */
-/* if sign is zero, only negative numbers will have the sign '-' character */
-/* if sign is one, the sign '+' or '-' character will always be printed */
-/* returns the amount of characters printed */
-static int edflib_fprint_int_number_nonlocalized(FILE *file, int q, int minimum, int sign)
-{
-  int flag=0, z, i, j=0, base = 1000000000;
-
-  if(minimum < 0)
-  {
-    minimum = 0;
-  }
-
-  if(minimum > 9)
-  {
-    flag = 1;
-  }
-
-  if(q < 0)
-  {
-    fputc('-', file);
-
-    j++;
-
-    q = -q;
-  }
-  else
-  {
-    if(sign)
-    {
-      fputc('+', file);
-
-      j++;
-    }
-  }
-
-  for(i=10; i; i--)
-  {
-    if(minimum == i)
-    {
-      flag = 1;
-    }
-
-    z = q / base;
-
-    q %= base;
-
-    if(z || flag)
-    {
-      fputc('0' + z, file);
-
-      j++;
-
-      flag = 1;
-    }
-
-    base /= 10;
-  }
-
-  if(!flag)
-  {
-    fputc('0', file);
-
-    j++;
-  }
-
-  return(j);
-}
-
-
-/* minimum is the minimum digits that will be printed (minus sign not included), leading zero's will be added if necessary */
-/* if sign is zero, only negative numbers will have the sign '-' character */
-/* if sign is one, the sign '+' or '-' character will always be printed */
-/* returns the amount of characters printed */
-static int edflib_fprint_ll_number_nonlocalized(FILE *file, long long q, int minimum, int sign)
-{
-  int flag=0, z, i, j=0;
-
-  long long base = 1000000000000000000LL;
-
-  if(minimum < 0)
-  {
-    minimum = 0;
-  }
-
-  if(minimum > 18)
-  {
-    flag = 1;
-  }
-
-  if(q < 0LL)
-  {
-    fputc('-', file);
-
-    j++;
-
-    q = -q;
-  }
-  else
-  {
-    if(sign)
-    {
-      fputc('+', file);
-
-      j++;
-    }
-  }
-
-  for(i=19; i; i--)
-  {
-    if(minimum == i)
-    {
-      flag = 1;
-    }
-
-    z = q / base;
-
-    q %= base;
-
-    if(z || flag)
-    {
-      fputc('0' + z, file);
-
-      j++;
-
-      flag = 1;
-    }
-
-    base /= 10LL;
-  }
-
-  if(!flag)
-  {
-    fputc('0', file);
-
-    j++;
-  }
-
-  return(j);
-}
-
-
-/* minimum is the minimum digits that will be printed (minus sign not included), leading zero's will be added if necessary */
-/* if sign is zero, only negative numbers will have the sign '-' character */
-/* if sign is one, the sign '+' or '-' character will always be printed */
-/* returns the amount of characters printed */
-/*
-static int edflib_sprint_int_number_nonlocalized(char *str, int q, int minimum, int sign)
-{
-  int flag=0, z, i, j=0, base = 1000000000;
-
-  if(minimum < 0)
-  {
-    minimum = 0;
-  }
-
-  if(minimum > 9)
-  {
-    flag = 1;
-  }
-
-  if(q < 0)
-  {
-    str[j++] = '-';
-
-    q = -q;
-  }
-  else
-  {
-    if(sign)
-    {
-      str[j++] = '+';
-    }
-  }
-
-  for(i=10; i; i--)
-  {
-    if(minimum == i)
-    {
-      flag = 1;
-    }
-
-    z = q / base;
-
-    q %= base;
-
-    if(z || flag)
-    {
-      str[j++] = '0' + z;
-
-      flag = 1;
-    }
-
-    base /= 10;
-  }
-
-  if(!flag)
-  {
-    str[j++] = '0';
-  }
-
-  str[j] = 0;
-
-  return(j);
-}
-*/
-
-/* minimum is the minimum digits that will be printed (minus sign not included), leading zero's will be added if necessary */
-/* if sign is zero, only negative numbers will have the sign '-' character */
-/* if sign is one, the sign '+' or '-' character will always be printed */
-/* returns the amount of characters printed */
-static int edflib_sprint_ll_number_nonlocalized(char *str, long long q, int minimum, int sign)
-{
-  int flag=0, z, i, j=0;
-
-  long long base = 1000000000000000000LL;
-
-  if(minimum < 0)
-  {
-    minimum = 0;
-  }
-
-  if(minimum > 18)
-  {
-    flag = 1;
-  }
-
-  if(q < 0LL)
-  {
-    str[j++] = '-';
-
-    q = -q;
-  }
-  else
-  {
-    if(sign)
-    {
-      str[j++] = '+';
-    }
-  }
-
-  for(i=19; i; i--)
-  {
-    if(minimum == i)
-    {
-      flag = 1;
-    }
-
-    z = q / base;
-
-    q %= base;
-
-    if(z || flag)
-    {
-      str[j++] = '0' + z;
-
-      flag = 1;
-    }
-
-    base /= 10LL;
-  }
-
-  if(!flag)
-  {
-    str[j++] = '0';
-  }
-
-  str[j] = 0;
-
-  return(j);
-}
-
-
-static int edflib_sprint_number_nonlocalized(char *str, double nr)
-{
-  int flag=0, z, i, j=0, q, base = 1000000000;
-
-  double var;
-
-  q = (int)nr;
-
-  var = nr - q;
-
-  if(nr < 0.0)
-  {
-    str[j++] = '-';
-
-    if(q < 0)
-    {
-      q = -q;
-    }
-  }
-
-  for(i=10; i; i--)
-  {
-    z = q / base;
-
-    q %= base;
-
-    if(z || flag)
-    {
-      str[j++] = '0' + z;
-
-      flag = 1;
-    }
-
-    base /= 10;
-  }
-
-  if(!flag)
-  {
-    str[j++] = '0';
-  }
-
-  base = 100000000;
-
-  var *= (base * 10);
-
-  q = (int)var;
-
-  if(q < 0)
-  {
-    q = -q;
-  }
-
-  if(!q)
-  {
-    str[j] = 0;
-
-    return(j);
-  }
-
-  str[j++] = '.';
-
-  for(i=9; i; i--)
-  {
-    z = q / base;
-
-    q %= base;
-
-    str[j++] = '0' + z;
-
-    base /= 10;
-  }
-
-  str[j] = 0;
-
-  j--;
-
-  for(; j>0; j--)
-  {
-    if(str[j] == '0')
-    {
-      str[j] = 0;
-    }
-    else
-    {
-      j++;
-
-      break;
-    }
-  }
-
-  return(j);
-}
-
-
-static double edflib_atof_nonlocalized(const char *str)
-{
-  int i=0, dot_pos=-1, decimals=0, sign=1;
-
-  double value, value2=0.0;
-
-
-  value = edflib_atoi_nonlocalized(str);
-
-  while(str[i] == ' ')
-  {
-    i++;
-  }
-
-  if((str[i] == '+') || (str[i] == '-'))
-  {
-    if(str[i] == '-')
-    {
-      sign = -1;
-    }
-
-    i++;
-  }
-
-  for(; ; i++)
-  {
-    if(str[i] == 0)
-    {
-      break;
-    }
-
-    if(((str[i] < '0') || (str[i] > '9')) && (str[i] != '.'))
-    {
-      break;
-    }
-
-    if(dot_pos >= 0)
-    {
-      if((str[i] >= '0') && (str[i] <= '9'))
-      {
-        decimals++;
-      }
-      else
-      {
-        break;
-      }
-    }
-
-    if(str[i] == '.')
-    {
-      if(dot_pos < 0)
-      {
-        dot_pos = i;
-      }
-    }
-  }
-
-  if(decimals)
-  {
-    value2 = edflib_atoi_nonlocalized(str + dot_pos + 1) * sign;
-
-    i = 1;
-
-    while(decimals--)
-    {
-      i *= 10;
-    }
-
-    value2 /= i;
-  }
-
-  return(value + value2);
-}
-
-
-static int edflib_atoi_nonlocalized(const char *str)
-{
-  int i=0, value=0, sign=1;
-
-  while(str[i] == ' ')
-  {
-    i++;
-  }
-
-  if((str[i] == '+') || (str[i] == '-'))
-  {
-    if(str[i] == '-')
-    {
-      sign = -1;
-    }
-
-    i++;
-  }
-
-  for( ; ; i++)
-  {
-    if(str[i] == 0)
-    {
-      break;
-    }
-
-    if((str[i] < '0') || (str[i] > '9'))
-    {
-      break;
-    }
-
-    value *= 10;
-
-    value += (str[i] - '0');
-  }
-
-  return(value * sign);
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/edflib.h b/edflib.h
deleted file mode 100644
index 2b28798..0000000
--- a/edflib.h
+++ /dev/null
@@ -1,626 +0,0 @@
-/*
-*****************************************************************************
-*
-* Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 Teunis van Beelen
-* All rights reserved.
-*
-* email: teuniz at gmail.com
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions are met:
-*     * Redistributions of source code must retain the above copyright
-*       notice, this list of conditions and the following disclaimer.
-*     * Redistributions in binary form must reproduce the above copyright
-*       notice, this list of conditions and the following disclaimer in the
-*       documentation and/or other materials provided with the distribution.
-*
-* THIS SOFTWARE IS PROVIDED BY Teunis van Beelen ''AS IS'' AND ANY
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-* DISCLAIMED. IN NO EVENT SHALL Teunis van Beelen BE LIABLE FOR ANY
-* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-*****************************************************************************
-*/
-
-
-
-/* compile with options "-D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE" */
-
-
-
-#ifndef EDFLIB_INCLUDED
-#define EDFLIB_INCLUDED
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-
-
-#define EDFLIB_TIME_DIMENSION (10000000LL)
-#define EDFLIB_MAXSIGNALS 512
-#define EDFLIB_MAX_ANNOTATION_LEN 512
-
-#define EDFSEEK_SET 0
-#define EDFSEEK_CUR 1
-#define EDFSEEK_END 2
-
-
-
-/* the following defines are used in the member "filetype" of the edf_hdr_struct */
-/* and as return value for the function edfopen_file_readonly() */
-#define EDFLIB_FILETYPE_EDF                  0
-#define EDFLIB_FILETYPE_EDFPLUS              1
-#define EDFLIB_FILETYPE_BDF                  2
-#define EDFLIB_FILETYPE_BDFPLUS              3
-#define EDFLIB_MALLOC_ERROR                 -1
-#define EDFLIB_NO_SUCH_FILE_OR_DIRECTORY    -2
-#define EDFLIB_FILE_CONTAINS_FORMAT_ERRORS  -3
-#define EDFLIB_MAXFILES_REACHED             -4
-#define EDFLIB_FILE_READ_ERROR              -5
-#define EDFLIB_FILE_ALREADY_OPENED          -6
-#define EDFLIB_FILETYPE_ERROR               -7
-#define EDFLIB_FILE_WRITE_ERROR             -8
-#define EDFLIB_NUMBER_OF_SIGNALS_INVALID    -9
-#define EDFLIB_FILE_IS_DISCONTINUOUS       -10
-#define EDFLIB_INVALID_READ_ANNOTS_VALUE   -11
-
-/* values for annotations */
-#define EDFLIB_DO_NOT_READ_ANNOTATIONS 0
-#define EDFLIB_READ_ANNOTATIONS        1
-#define EDFLIB_READ_ALL_ANNOTATIONS    2
-
-/* the following defines are possible errors returned by edfopen_file_writeonly() */
-#define EDFLIB_NO_SIGNALS                  -20
-#define EDFLIB_TOO_MANY_SIGNALS            -21
-#define EDFLIB_NO_SAMPLES_IN_RECORD        -22
-#define EDFLIB_DIGMIN_IS_DIGMAX            -23
-#define EDFLIB_DIGMAX_LOWER_THAN_DIGMIN    -24
-#define EDFLIB_PHYSMIN_IS_PHYSMAX          -25
-
-
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
-/* For more info about the EDF and EDF+ format, visit: http://edfplus.info/specs/ */
-/* For more info about the BDF and BDF+ format, visit: http://www.teuniz.net/edfbrowser/bdfplus%20format%20description.html */
-
-
-struct edf_param_struct{         /* this structure contains all the relevant EDF-signal parameters of one signal */
-  char   label[17];              /* label (name) of the signal, null-terminated string */
-  long long smp_in_file;         /* number of samples of this signal in the file */
-  double phys_max;               /* physical maximum, usually the maximum input of the ADC */
-  double phys_min;               /* physical minimum, usually the minimum input of the ADC */
-  int    dig_max;                /* digital maximum, usually the maximum output of the ADC, can not not be higher than 32767 for EDF or 8388607 for BDF */
-  int    dig_min;                /* digital minimum, usually the minimum output of the ADC, can not not be lower than -32768 for EDF or -8388608 for BDF */
-  int    smp_in_datarecord;      /* number of samples of this signal in a datarecord */
-  char   physdimension[9];       /* physical dimension (uV, bpm, mA, etc.), null-terminated string */
-  char   prefilter[81];          /* null-terminated string */
-  char   transducer[81];         /* null-terminated string */
-      };
-
-
-struct edf_annotation_struct{                           /* this structure is used for annotations */
-        long long onset;                                /* onset time of the event, expressed in units of 100 nanoSeconds and relative to the starttime in the header */
-        char duration[16];                              /* duration time, this is a null-terminated ASCII text-string */
-        char annotation[EDFLIB_MAX_ANNOTATION_LEN + 1]; /* description of the event in UTF-8, this is a null terminated string */
-       };
-
-
-struct edf_hdr_struct{                     /* this structure contains all the relevant EDF header info and will be filled when calling the function edf_open_file_readonly() */
-  int       handle;                        /* a handle (identifier) used to distinguish the different files */
-  int       filetype;                      /* 0: EDF, 1: EDFplus, 2: BDF, 3: BDFplus, a negative number means an error */
-  int       edfsignals;                    /* number of EDF signals in the file, annotation channels are NOT included */
-  long long file_duration;                 /* duration of the file expressed in units of 100 nanoSeconds */
-  int       startdate_day;
-  int       startdate_month;
-  int       startdate_year;
-  long long starttime_subsecond;                          /* starttime offset expressed in units of 100 nanoSeconds. Is always less than 10000000 (one second). Only used by EDFplus and BDFplus */
-  int       starttime_second;
-  int       starttime_minute;
-  int       starttime_hour;
-  char      patient[81];                                  /* null-terminated string, contains patientfield of header, is always empty when filetype is EDFPLUS or BDFPLUS */
-  char      recording[81];                                /* null-terminated string, contains recordingfield of header, is always empty when filetype is EDFPLUS or BDFPLUS */
-  char      patientcode[81];                              /* null-terminated string, is always empty when filetype is EDF or BDF */
-  char      gender[16];                                   /* null-terminated string, is always empty when filetype is EDF or BDF */
-  char      birthdate[16];                                /* null-terminated string, is always empty when filetype is EDF or BDF */
-  char      patient_name[81];                             /* null-terminated string, is always empty when filetype is EDF or BDF */
-  char      patient_additional[81];                       /* null-terminated string, is always empty when filetype is EDF or BDF */
-  char      admincode[81];                                /* null-terminated string, is always empty when filetype is EDF or BDF */
-  char      technician[81];                               /* null-terminated string, is always empty when filetype is EDF or BDF */
-  char      equipment[81];                                /* null-terminated string, is always empty when filetype is EDF or BDF */
-  char      recording_additional[81];                     /* null-terminated string, is always empty when filetype is EDF or BDF */
-  long long datarecord_duration;                          /* duration of a datarecord expressed in units of 100 nanoSeconds */
-  long long datarecords_in_file;                          /* number of datarecords in the file */
-  long long annotations_in_file;                          /* number of annotations in the file */
-  struct edf_param_struct signalparam[EDFLIB_MAXSIGNALS]; /* array of structs which contain the relevant signal parameters */
-       };
-
-
-
-
-/*****************  the following functions are used to read files **************************/
-
-int edfopen_file_readonly(const char *path, struct edf_hdr_struct *edfhdr, int read_annotations);
-
-/* opens an existing file for reading */
-/* path is a null-terminated string containing the path to the file */
-/* hdr is a pointer to an edf_hdr_struct, all fields in this struct will be overwritten */
-/* the edf_hdr_struct will be filled with all the relevant header- and signalinfo/parameters */
-
-/* read_annotations must have one of the following values:      */
-/*   EDFLIB_DO_NOT_READ_ANNOTATIONS      annotations will not be read (this saves time when opening a very large EDFplus or BDFplus file */
-/*   EDFLIB_READ_ANNOTATIONS             annotations will be read immediately, stops when an annotation has */
-/*                                       been found which contains the description "Recording ends"         */
-/*   EDFLIB_READ_ALL_ANNOTATIONS         all annotations will be read immediately                           */
-
-/* returns 0 on success, in case of an error it returns -1 and an errorcode will be set in the member "filetype" of struct edf_hdr_struct */
-/* This function is required if you want to read a file */
-
-
-
-int edfread_physical_samples(int handle, int edfsignal, int n, double *buf);
-
-/* reads n samples from edfsignal, starting from the current sample position indicator, into buf (edfsignal starts at 0) */
-/* the values are converted to their physical values e.g. microVolts, beats per minute, etc. */
-/* bufsize should be equal to or bigger than sizeof(double[n]) */
-/* the sample position indicator will be increased with the amount of samples read */
-/* returns the amount of samples read (this can be less than n or zero!) */
-/* or -1 in case of an error */
-
-
-int edfread_digital_samples(int handle, int edfsignal, int n, int *buf);
-
-/* reads n samples from edfsignal, starting from the current sample position indicator, into buf (edfsignal starts at 0) */
-/* the values are the "raw" digital values */
-/* bufsize should be equal to or bigger than sizeof(int[n]) */
-/* the sample position indicator will be increased with the amount of samples read */
-/* returns the amount of samples read (this can be less than n or zero!) */
-/* or -1 in case of an error */
-
-
-long long edfseek(int handle, int edfsignal, long long offset, int whence);
-
-/* The edfseek() function sets the sample position indicator for the edfsignal pointed to by edfsignal. */
-/* The new position, measured in samples, is obtained by adding offset samples to the position specified by whence. */
-/* If whence is set to EDFSEEK_SET, EDFSEEK_CUR, or EDFSEEK_END, the offset is relative to the start of the file, */
-/* the current position indicator, or end-of-file, respectively. */
-/* Returns the current offset. Otherwise, -1 is returned. */
-/* note that every signal has it's own independent sample position indicator and edfseek() affects only one of them */
-
-
-long long edftell(int handle, int edfsignal);
-
-/* The edftell() function obtains the current value of the sample position indicator for the edfsignal pointed to by edfsignal. */
-/* Returns the current offset. Otherwise, -1 is returned */
-/* note that every signal has it's own independent sample position indicator and edftell() affects only one of them */
-
-
-void edfrewind(int handle, int edfsignal);
-
-/* The edfrewind() function sets the sample position indicator for the edfsignal pointed to by edfsignal to the beginning of the file. */
-/* It is equivalent to: (void) edfseek(int handle, int edfsignal, 0LL, EDFSEEK_SET) */
-/* note that every signal has it's own independent sample position indicator and edfrewind() affects only one of them */
-
-
-int edf_get_annotation(int handle, int n, struct edf_annotation_struct *annot);
-
-/* Fills the edf_annotation_struct with the annotation n, returns 0 on success, otherwise -1 */
-/* The string that describes the annotation/event is encoded in UTF-8 */
-/* To obtain the number of annotations in a file, check edf_hdr_struct -> annotations_in_file. */
-
-/*
-Notes:
-
-Annotationsignals
-
-EDFplus and BDFplus store the annotations in one or more signals (in order to be backwards compatibel with EDF and BDF).
-The counting of the signals in the file starts at 0. Signals used for annotations are skipped by EDFlib.
-This means that the annotationsignal(s) in the file are hided.
-Use the function edf_get_annotation() to get the annotations.
-
-So, when a file contains 5 signals and the third signal is used to store the annotations, the library will
-report that there are only 4 signals in the file.
-The library will "map" the signalnumbers as follows: 0->0, 1->1, 2->3, 3->4.
-This way you don't need to worry about which signals are annotationsignals. The library will do it for you.
-
-How the library stores time-values
-
-To avoid rounding errors, the library stores some timevalues in variables of type long long int.
-In order not to loose the subsecond precision, all timevalues have been multiplied by 10000000.
-This will limit the timeresolution to 100 nanoSeconds. To calculate the amount of seconds, divide
-the timevalue by 10000000 or use the macro EDFLIB_TIME_DIMENSION which is declared in edflib.h.
-The following variables do use this when you open a file in read mode: "file_duration", "starttime_subsecond" and "onset".
-*/
-
-/*****************  the following functions are used to read or write files **************************/
-
-int edfclose_file(int handle);
-
-/* closes (and in case of writing, finalizes) the file */
-/* returns -1 in case of an error, 0 on success */
-/* this function MUST be called when you are finished reading or writing */
-/* This function is required after reading or writing. Failing to do so will cause */
-/* unnessecary memory usage and in case of writing it will cause a corrupted and incomplete file */
-
-
-int edflib_version(void);
-
-/* Returns the version number of this library, multiplied by hundred. if version is "1.00" than it will return 100 */
-
-
-int edflib_is_file_used(const char *path);
-
-/* returns 1 if the file is used, either for reading or writing */
-/* otherwise returns 0 */
-
-
-int edflib_get_number_of_open_files(void);
-
-/* returns the number of open files, either for reading or writing */
-
-
-int edflib_get_handle(int file_number);
-
-/* returns the handle of an opened file, either for reading or writing */
-/* file_number starts with 0 */
-/* returns -1 if the file is not opened */
-
-
-/*****************  the following functions are used to write files **************************/
-
-
-int edfopen_file_writeonly(const char *path, int filetype, int number_of_signals);
-
-/* opens an new file for writing. warning, an already existing file with the same name will be silently overwritten without advance warning!! */
-/* path is a null-terminated string containing the path and name of the file */
-/* filetype must be EDFLIB_FILETYPE_EDFPLUS or EDFLIB_FILETYPE_BDFPLUS */
-/* returns a handle on success, you need this handle for the other functions */
-/* in case of an error it returns a negative number corresponding to one of the following values: */
-/* EDFLIB_MALLOC_ERROR                */
-/* EDFLIB_NO_SUCH_FILE_OR_DIRECTORY   */
-/* EDFLIB_MAXFILES_REACHED            */
-/* EDFLIB_FILE_ALREADY_OPENED         */
-/* EDFLIB_NUMBER_OF_SIGNALS_INVALID   */
-/* This function is required if you want to write a file */
-
-
-int edf_set_samplefrequency(int handle, int edfsignal, int samplefrequency);
-
-/* Sets the samplefrequency of signal edfsignal. */
-/* Returns 0 on success, otherwise -1 */
-/* This function is required for every signal and can be called only after opening a */
-/* file in writemode and before the first sample write action */
-
-
-int edf_set_physical_maximum(int handle, int edfsignal, double phys_max);
-
-/* Sets the maximum physical value of signal edfsignal. (the value of the input of the ADC when the output equals the value of "digital maximum") */
-/* Returns 0 on success, otherwise -1 */
-/* This function is required for every signal and can be called only after opening a */
-/* file in writemode and before the first sample write action */
-
-
-int edf_set_physical_minimum(int handle, int edfsignal, double phys_min);
-
-/* Sets the minimum physical value of signal edfsignal. (the value of the input of the ADC when the output equals the value of "digital minimum") */
-/* Usually this will be (-(phys_max)) */
-/* Returns 0 on success, otherwise -1 */
-/* This function is required for every signal and can be called only after opening a */
-/* file in writemode and before the first sample write action */
-
-
-int edf_set_digital_maximum(int handle, int edfsignal, int dig_max);
-
-/* Sets the maximum digital value of signal edfsignal. The maximum value is 32767 for EDF+ and 8388607 for BDF+ */
-/* Usually it's the extreme output of the ADC */
-/* Returns 0 on success, otherwise -1 */
-/* This function is required for every signal and can be called only after opening a file in writemode */
-/* and before the first sample write action */
-
-
-int edf_set_digital_minimum(int handle, int edfsignal, int dig_min);
-
-/* Sets the minimum digital value of signal edfsignal. The minimum value is -32768 for EDF+ and -8388608 for BDF+ */
-/* Usually it's the extreme output of the ADC */
-/* Usually this will be (-(dig_max + 1)) */
-/* Returns 0 on success, otherwise -1 */
-/* This function is required for every signal and can be called only after opening a file in writemode */
-/* and before the first sample write action */
-
-
-int edf_set_label(int handle, int edfsignal, const char *label);
-
-/* Sets the label (name) of signal edfsignal. ("FP1", "SaO2", etc.) */
-/* label is a pointer to a NULL-terminated ASCII-string containing the label (name) of the signal edfsignal */
-/* Returns 0 on success, otherwise -1 */
-/* This function is recommended for every signal when you want to write a file */
-/* and can be called only after opening a file in writemode and before the first sample write action */
-
-
-int edf_set_prefilter(int handle, int edfsignal, const char *prefilter);
-
-/* Sets the prefilter of signal edfsignal ("HP:0.1Hz", "LP:75Hz N:50Hz", etc.). */
-/* prefilter is a pointer to a NULL-terminated ASCII-string containing the prefilter text of the signal edfsignal */
-/* Returns 0 on success, otherwise -1 */
-/* This function is optional and can be called only after opening a file in writemode and before */
-/* the first sample write action */
-
-
-int edf_set_transducer(int handle, int edfsignal, const char *transducer);
-
-/* Sets the transducer of signal edfsignal ("AgAgCl cup electrodes", etc.). */
-/* transducer is a pointer to a NULL-terminated ASCII-string containing the transducer text of the signal edfsignal */
-/* Returns 0 on success, otherwise -1 */
-/* This function is optional and can be called only after opening a file in writemode and before */
-/* the first sample write action */
-
-
-int edf_set_physical_dimension(int handle, int edfsignal, const char *phys_dim);
-
-/* Sets the physical dimension of signal edfsignal. ("uV", "BPM", "mA", "Degr.", etc.) */
-/* phys_dim is a pointer to a NULL-terminated ASCII-string containing the physical dimension of the signal edfsignal */
-/* Returns 0 on success, otherwise -1 */
-/* This function is recommanded for every signal when you want to write a file */
-/* and can be called only after opening a file in writemode and before the first sample write action */
-
-
-int edf_set_startdatetime(int handle, int startdate_year, int startdate_month, int startdate_day,
-                                      int starttime_hour, int starttime_minute, int starttime_second);
-
-/* Sets the startdate and starttime. */
-/* year: 1970 - 3000, month: 1 - 12, day: 1 - 31 */
-/* hour: 0 - 23, minute: 0 - 59, second: 0 - 59 */
-/* If not called, the library will use the system date and time at runtime */
-/* Returns 0 on success, otherwise -1 */
-/* This function is optional and can be called only after opening a file in writemode */
-/* and before the first sample write action */
-
-
-int edf_set_patientname(int handle, const char *patientname);
-
-/* Sets the patientname. patientname is a pointer to a null-terminated ASCII-string. */
-/* Returns 0 on success, otherwise -1 */
-/* This function is optional and can be called only after opening a file in writemode */
-/* and before the first sample write action */
-
-
-int edf_set_patientcode(int handle, const char *patientcode);
-
-/* Sets the patientcode. patientcode is a pointer to a null-terminated ASCII-string. */
-/* Returns 0 on success, otherwise -1 */
-/* This function is optional and can be called only after opening a file in writemode */
-/* and before the first sample write action */
-
-
-int edf_set_gender(int handle, int gender);
-
-/* Sets the gender. 1 is male, 0 is female. */
-/* Returns 0 on success, otherwise -1 */
-/* This function is optional and can be called only after opening a file in writemode */
-/* and before the first sample write action */
-
-
-
-int edf_set_birthdate(int handle, int birthdate_year, int birthdate_month, int birthdate_day);
-
-/* Sets the birthdate. */
-/* year: 1800 - 3000, month: 1 - 12, day: 1 - 31 */
-/* This function is optional */
-/* Returns 0 on success, otherwise -1 */
-/* This function is optional and can be called only after opening a file in writemode */
-/* and before the first sample write action */
-
-
-int edf_set_patient_additional(int handle, const char *patient_additional);
-
-/* Sets the additional patientinfo. patient_additional is a pointer to a null-terminated ASCII-string. */
-/* Returns 0 on success, otherwise -1 */
-/* This function is optional and can be called only after opening a file in writemode */
-/* and before the first sample write action */
-
-
-int edf_set_admincode(int handle, const char *admincode);
-
-/* Sets the admincode. admincode is a pointer to a null-terminated ASCII-string. */
-/* Returns 0 on success, otherwise -1 */
-/* This function is optional and can be called only after opening a file in writemode */
-/* and before the first sample write action */
-
-
-int edf_set_technician(int handle, const char *technician);
-
-/* Sets the technicians name. technician is a pointer to a null-terminated ASCII-string. */
-/* Returns 0 on success, otherwise -1 */
-/* This function is optional and can be called only after opening a file in writemode */
-/* and before the first sample write action */
-
-
-int edf_set_equipment(int handle, const char *equipment);
-
-/* Sets the name of the equipment used during the aquisition. equipment is a pointer to a null-terminated ASCII-string. */
-/* Returns 0 on success, otherwise -1 */
-/* This function is optional and can be called only after opening a file in writemode */
-/* and before the first sample write action */
-
-
-int edf_set_recording_additional(int handle, const char *recording_additional);
-
-/* Sets the additional recordinginfo. recording_additional is a pointer to a null-terminated ASCII-string. */
-/* Returns 0 on success, otherwise -1 */
-/* This function is optional and can be called only after opening a file in writemode */
-/* and before the first sample write action */
-
-
-int edfwrite_physical_samples(int handle, double *buf);
-
-/* Writes n physical samples (uV, mA, Ohm) from *buf belonging to one signal */
-/* where n is the samplefrequency of that signal. */
-/* The physical samples will be converted to digital samples using the */
-/* values of physical maximum, physical minimum, digital maximum and digital minimum */
-/* The number of samples written is equal to the samplefrequency of the signal */
-/* Size of buf should be equal to or bigger than sizeof(double[samplefrequency]) */
-/* Call this function for every signal in the file. The order is important! */
-/* When there are 4 signals in the file,  the order of calling this function */
-/* must be: signal 0, signal 1, signal 2, signal 3, signal 0, signal 1, signal 2, etc. */
-/* Returns 0 on success, otherwise -1 */
-
-
-int edf_blockwrite_physical_samples(int handle, double *buf);
-
-/* Writes physical samples (uV, mA, Ohm) from *buf */
-/* buf must be filled with samples from all signals, starting with n samples of signal 0, n samples of signal 1, n samples of signal 2, etc. */
-/* where n is the samplefrequency of that signal. */
-/* buf must be filled with samples from all signals, starting with signal 0, 1, 2, etc. */
-/* one block equals one second */
-/* The physical samples will be converted to digital samples using the */
-/* values of physical maximum, physical minimum, digital maximum and digital minimum */
-/* The number of samples written is equal to the sum of the samplefrequencies of all signals */
-/* Size of buf should be equal to or bigger than sizeof(double) multiplied by the sum of the samplefrequencies of all signals */
-/* Returns 0 on success, otherwise -1 */
-
-
-int edfwrite_digital_short_samples(int handle, short *buf);
-
-/* Writes n "raw" digital samples from *buf belonging to one signal */
-/* where n is the samplefrequency of that signal. */
-/* The samples will be written to the file without any conversion. */
-/* Because the size of a short is 16-bit, do not use this function with BDF (24-bit) */
-/* The number of samples written is equal to the samplefrequency of the signal */
-/* Size of buf should be equal to or bigger than sizeof(short[samplefrequency]) */
-/* Call this function for every signal in the file. The order is important! */
-/* When there are 4 signals in the file,  the order of calling this function */
-/* must be: signal 0, signal 1, signal 2, signal 3, signal 0, signal 1, signal 2, etc. */
-/* Returns 0 on success, otherwise -1 */
-
-
-int edfwrite_digital_samples(int handle, int *buf);
-
-/* Writes n "raw" digital samples from *buf belonging to one signal */
-/* where n is the samplefrequency of that signal. */
-/* The 16 (or 24 in case of BDF) least significant bits of the sample will be written to the */
-/* file without any conversion. */
-/* The number of samples written is equal to the samplefrequency of the signal */
-/* Size of buf should be equal to or bigger than sizeof(int[samplefrequency]) */
-/* Call this function for every signal in the file. The order is important! */
-/* When there are 4 signals in the file,  the order of calling this function */
-/* must be: signal 0, signal 1, signal 2, signal 3, signal 0, signal 1, signal 2, etc. */
-/* Returns 0 on success, otherwise -1 */
-
-
-int edf_blockwrite_digital_3byte_samples(int handle, void *buf);
-
-/* Writes "raw" digital samples from *buf. */
-/* buf must be filled with samples from all signals, starting with n samples of signal 0, n samples of signal 1, n samples of signal 2, etc. */
-/* where n is the samplefrequency of that signal. */
-/* One block equals one second. One sample equals 3 bytes, order is little endian (least significant byte first) */
-/* Encoding is second's complement, most significant bit of most significant byte is the sign-bit */
-/* The samples will be written to the file without any conversion. */
-/* Because the size of a 3-byte sample is 24-bit, this function can only be used when writing a BDF file */
-/* The number of samples written is equal to the sum of the samplefrequencies of all signals. */
-/* Size of buf should be equal to or bigger than: the sum of the samplefrequencies of all signals x 3 bytes */
-/* Returns 0 on success, otherwise -1 */
-
-
-int edf_blockwrite_digital_short_samples(int handle, short *buf);
-
-/* Writes "raw" digital samples from *buf. */
-/* buf must be filled with samples from all signals, starting with n samples of signal 0, n samples of signal 1, n samples of signal 2, etc. */
-/* where n is the samplefrequency of that signal. */
-/* One block equals one second. */
-/* The samples will be written to the file without any conversion. */
-/* Because the size of a short is 16-bit, do not use this function with BDF (24-bit) */
-/* The number of samples written is equal to the sum of the samplefrequencies of all signals. */
-/* Size of buf should be equal to or bigger than sizeof(short) multiplied by the sum of the samplefrequencies of all signals */
-/* Returns 0 on success, otherwise -1 */
-
-
-int edf_blockwrite_digital_samples(int handle, int *buf);
-
-/* Writes "raw" digital samples from *buf. */
-/* buf must be filled with samples from all signals, starting with n samples of signal 0, n samples of signal 1, n samples of signal 2, etc. */
-/* where n is the samplefrequency of that signal. */
-/* One block equals one second. */
-/* The 16 (or 24 in case of BDF) least significant bits of the sample will be written to the */
-/* file without any conversion. */
-/* The number of samples written is equal to the sum of the samplefrequencies of all signals. */
-/* Size of buf should be equal to or bigger than sizeof(int) multiplied by the sum of the samplefrequencies of all signals */
-/* Returns 0 on success, otherwise -1 */
-
-
-int edfwrite_annotation_utf8(int handle, long long onset, long long duration, const char *description);
-
-/* writes an annotation/event to the file */
-/* onset is relative to the starttime and startdate of the file */
-/* onset and duration are in units of 100 microSeconds!     resolution is 0.0001 second! */
-/* for example: 34.071 seconds must be written as 340710 */
-/* if duration is unknown or not applicable: set a negative number (-1) */
-/* description is a null-terminated UTF8-string containing the text that describes the event */
-/* This function is optional and can be called only after opening a file in writemode */
-/* and before closing the file */
-
-
-int edfwrite_annotation_latin1(int handle, long long onset, long long duration, const char *description);
-
-/* writes an annotation/event to the file */
-/* onset is relative to the starttime and startdate of the file */
-/* onset and duration are in units of 100 microSeconds!     resolution is 0.0001 second! */
-/* for example: 34.071 seconds must be written as 340710 */
-/* if duration is unknown or not applicable: set a negative number (-1) */
-/* description is a null-terminated Latin1-string containing the text that describes the event */
-/* This function is optional and can be called only after opening a file in writemode */
-/* and before closing the file */
-
-
-int edf_set_datarecord_duration(int handle, int duration);
-
-/* Sets the datarecord duration. The default value is 1 second. */
-/* ATTENTION: the argument "duration" is expressed in units of 10 microSeconds! */
-/* So, if you want to set the datarecord duration to 0.1 second, you must give */
-/* the argument "duration" a value of "10000". */
-/* This function is optional, normally you don't need to change the default value. */
-/* The datarecord duration must be in the range 0.001 to 60 seconds. */
-/* Returns 0 on success, otherwise -1 */
-/* This function is NOT REQUIRED but can be called after opening a */
-/* file in writemode and before the first sample write action. */
-/* This function can be used when you want to use a samplerate */
-/* which is not an integer. For example, if you want to use a samplerate of 0.5 Hz, */
-/* set the samplefrequency to 5 Hz and the datarecord duration to 10 seconds, */
-/* or set the samplefrequency to 1 Hz and the datarecord duration to 2 seconds. */
-/* Do not use this function, except when absolutely necessary! */
-
-int edf_set_number_of_annotation_signals(int handle, int annot_signals);
-
-/* Sets the number of annotation signals. The default value is 1 */
-/* This function is optional and can be called only after opening a file in writemode */
-/* and before the first sample write action */
-/* Normally you don't need to change the default value. Only when the number of annotations */
-/* you want to write is more than the number of seconds of the duration of the recording, you can use */
-/* this function to increase the storage space for annotations */
-/* Minimum is 1, maximum is 64 */
-
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
-
-
-
-
-
-

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/edfbrowser.git



More information about the debian-med-commit mailing list