#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

#include <dbDefs.h>
#include <registryFunction.h>
#include <subRecord.h>
#include <aSubRecord.h>
#include <epicsExport.h>

int DDRwavDebug;

static long DDRwavInit(aSubRecord *precord)
{

  if (DDRwavDebug)
    printf("Record %s called DDRwavInit(%p)\n",
           precord->name, (void*) precord);
  return 0;
}

static long DDRwavProcess(aSubRecord *precord)
{
        unsigned long i;
        long  anord;
long *din; epicsFloat64 *ain,*bin,*cin;
epicsFloat64 *aout;
double cfac,off;
ain = (epicsFloat64 *)precord->a; /* new wave */
bin = (double *)precord->b; /* conv factor */ cin = (double *)precord->c; /* offset */
din = (long*)precord->d; /* new wave nord */
anord = din[0];
/*printf("din = %ld\n",din[0]); */
cfac = bin[0];off = cin[0];
if (anord>20000) anord=20000; aout = (epicsFloat64 *)precord->vala; for (i=0;i<anord;i++) { aout[i]=ain[i]*cfac-off; } precord->neva = anord; return 0L;
}epicsExportAddress(int, DDRwavDebug); epicsRegisterFunction(DDRwavInit); epicsRegisterFunction(DDRwavProcess);