/*
  This is a helper header file which contains the prototypes for some
  functions to be used in the implementation of the triple axis spectrometer
  module. For more info on the functions see the comments in the
  implementation file tasutil.c

  Initial Coding: Mark Koennecke, November 2000
  Added TASUpdate: Mark Koennecke, May 2001  

*/
#ifndef TASUSICS
#define TASUSICS

extern char *tasMotorOrder[];
extern char *tasVariableOrder[];

/* maximum number of motors in the list */
#define MAXMOT 34
/* offset to the currents, if available */
#define CURMOT 21


/*
  Note: the defines below MUST map the range between EI - HZ in the list
  of variables as defined in tas.h. Otherwise quite interesting things
  can happen. ETARGET is the variable order index for the energy targets.
*/
#define EMIN 25
#define EMAX 36
#define ETARGET 94

int isTASMotor(char *val);
int isTASCurrent(char *val);
int isTASVar(char *val);
int isTASEnergy(char *val);
void prepare2Parse(char *line);
int getSRO(SConnection * pCon, float *sroVal);
int tasNumeric(char *pText);
float readDrivable(char *val, SConnection * pCon);
void startCurrent(char *val, SConnection * pCon, float fVal);
void readConversionFactors(pTASdata self, float convH[4]);

int TASCalc(pTASdata self, SConnection * pCon,
            unsigned char tasMask[10],
            float motorTargets[20], unsigned char motorMask[20]);
int TASStart(pTASdata self, SConnection * pCon, SicsInterp * pSics,
             float motorTargets[20], unsigned char motorMask[20]);

int TASUpdate(pTASdata self, SConnection * pCon);


#endif
