/*
 * include needed system headers
 */
#include <stdio.h>       /* include standard i/o library */
#include <stdlib.h>      /* include standard library */
#include <string.h>      /* include string library */
#include <unistd.h>      /* include unix standard library */
#include <sys/types.h>   /* */
#include <sys/stat.h>    /* */
#include <fcntl.h>       /* */
#include <errno.h>       /* error simbol definitions */
#include <time.h>        /* system time definitions */
#include <math.h>        /* math library */

void readsig_(float *sig_buf, int *error, int *fd)

{
    int nread;
    int i;
    unsigned short word;
    unsigned short decimals,units;
    unsigned short sig_buf_temp[1024];
    

    *error=0;

/*** read the buffer ***/
    nread=read(*fd, sig_buf_temp, 2*1024);
    if( nread==0 ) {
	printf("readsig: Unexpected end of file %d at %d \n",*fd,nread);
	*error=1;
	return ;
    }
    if ( nread != 2*1024) {
	printf("readsig: Error on reading: nread = %d \n",nread);
	*error=-1;
 	return ; 
    }


/*** correct byte ***/ //endianess...
    for(i=0; i<1024; i++) {
	word = sig_buf_temp[i];
	sig_buf_temp[i] = ( (word&0x00ff) << 8 ) | ( (word&0xff00) >> 8 );
    }


    /***interpreta*/
    for(i=0; i<1024; i++) {

	word = sig_buf_temp[i];
	units = ( (word >> 4) & 0x0fff ) ;
	decimals = (word & 0x000f) ;
	sig_buf[i] = (float)units + (float)decimals / 16.;
//	printf("%i %i %i %f \n",i,units,decimals,sig_buf[i]);
    }



//    for( i=0; i<1024; i++) printf("%x \n",sig_buf[i]);//???

    return; 
}
