/* calfunc02.h */
/* 19 Jan 2004, -JW */
/* Changed function prototypes sub_off_cal, sub_off_SC_cal */
//calfunc02.h, modifed from CalFunc01.h by jw, June 2001.
#define CALFUNC02

extern "C" {
#ifndef FF_IGPP
#include "..\ff_user\time_igpp.h"
#include "..\ff_user\ff_igpp.h"
#endif
}

typedef struct {
	double time;
	float bx;
	float by;
	float bz;
	unsigned int magstat;
	unsigned int senstat;  //senstat is either FGMSTATUS or VHMSTATUS
} MAGDATA;


//Declarations for functions defined in file calfunc02.cpp:

	FF_ID * open_input_ff (char * ffname);
	FF_ID * open_output_ff (char * ffname, int ncols, int recl);
	long get_nrows (FF_ID *id);
	int get_ncols (FF_ID *id);
	int get_recl (FF_ID *id);
	int copy_col_desc (FF_ID *idin, FF_ID *idout);
	void copy_info_abs (FF_ID *idin, FF_ID *idout, double time1, double time2);
	int get_magdata (FF_ID *idin, MAGDATA *p, int swap);
	int put_magdata (FF_ID *idout, MAGDATA *p, int swap);
	unsigned getbits (unsigned x, unsigned p, unsigned n);
	unsigned putbits (unsigned x, unsigned p, unsigned n, unsigned y);
	int get_range (MAGDATA *p, int sensor);
	void put_status (MAGDATA *pdata_rec, unsigned id_calfile);	
		
	FF_ID * calibrate (FF_ID *Cal_id, VHM_CAL *pcal_rec, MAGDATA *pdata_rec, int irange);	

	FF_ID * open_cal();
	void read_cal(FF_ID *, VHM_CAL *);
	void sub_off_cal(double, VHM_CAL *, VHM_CAL *, MAGDATA *,int);
	void sub_off_SC_cal(double, VHM_CAL *, VHM_CAL *, MAGDATA *);
	void rot_Ort_Sen_cal(VHM_CAL *, MAGDATA *,int);
	void rot_SC_cal(VHM_CAL *, MAGDATA *);
	int is_valid (MAGDATA *pdata_rec, int sensor);
