#include "pads_dcm.h"
#include "pads_prt.h"
#include "windmisc.h"
#include "pckt_prt.h"



FILE *pads_fp;
FILE *pads_raw_fp;
FILE *pads_log_fp;
FILE *pads_spec_fp;

int print_pads_packet(packet *pk)
{
	static PADdata pad;
	
	if(pads_fp || pads_spec_fp){
		pads_decom(pk,&pad);
		print_pad_structure(pads_fp,&pad);
		print_pad_spectra(pads_spec_fp,&pad);
	}
	if(pads_raw_fp || pads_log_fp){
		print_packet_header(pads_log_fp,pk);
		print_generic_packet(pads_raw_fp,pk,15);
	}
	return(0);
}

int print_pad_spectra(FILE *fp,PADdata *pad)
{
	int e,a,ne;
	double f;
	if(fp==0)
		return(0);
	ne = pad->num_energies;
	fprintf(fp,"%9.0f ",pad->time1);
	for(e=0;e<ne;e++){
		f = 0;
		for(a=0;a<pad->num_angles;a++){
			f += pad->flux[a*ne+e];
		}
		fprintf(fp," %5.0f",f);
	}
	fprintf(fp,"\n");
	return(1);
}


int print_pad_structure(FILE *fp,PADdata *pad)
{
	int e,a,n,ne,na,ns;
	double ta,nrg,flx;

	if(fp==0)
		return(0);

	fprintf(fp,"\n`%s - ",time_to_YMDHMS(pad->time1));
	fprintf(fp,"%s   ",time_to_YMDHMS(pad->time2));
	fprintf(fp,"  %d-%d  ",pad->t_start,pad->t_stop);
	fprintf(fp,"\n");
	
	ne = pad->num_energies;
	na = pad->num_angles;
	ns = pad->num_samples;

	fprintf(fp,"`       ");
	for(a=0;a<na;a++)
		fprintf(fp," %5g",pad->angles[a]);
	fprintf(fp,"\n");
	for(e=0;e<ne;e++){
		nrg = pad->energies[e];
		fprintf(fp,"%5.0f ",nrg);
		for(a=0;a<na;a++){
			flx = pad->flux[a*ne+e];
			fprintf(fp," %5g",flx);
		}
		fprintf(fp,"\n");
	}
#if 1
	fprintf(fp,"` area:");
	ta = 0;
	for(a=0;a<na;a++){
		fprintf(fp," %5g",pad->area[a]);
		ta += pad->area[a];
	}
	fprintf(fp,"\n`total area: %4f\n",ta);
#endif
#if 0
	for(n=0;n< ns;n++){
		fprintf(fp,"`bth=%3d  bph=%3d \n",bdir[2*a+1],bdir[2*a]);
	}
	fprintf(fp,"\n");
#endif
	return(1);
}






#if 0

print_c_tables(FILE *fp)
{	
	int i;
	for(i=0;i<11*10;i++){
		fprintf(fp," %5d,",w_el[i]);
		if(i%10 ==9)
			fprintf(fp,"\n");
	}
	fprintf(fp,"\n");
	for(i=0;i<65;i++){
		fprintf(fp," %5d,",cos_[i]);
		if(i%8 ==7)
			fprintf(fp,"\n");
	}
	fprintf(fp,"\n");
	fprintf(fp,"\n");
	for(i=0;i<48;i++){
		fprintf(fp," %6d,",sin_cos_sec[i]);
		if(i%8 ==7)
			fprintf(fp,"\n");
	}
	fprintf(fp,"\n");
}

print_asm_tables(FILE *fp)
{	
	int i;
	fprintf(fp,"\ttitle\twel.tbl\n");
	fprintf(fp,"w_el");
	for(i=0;i<11*10;i++){
		if(i%5 ==0)
			fprintf(fp,"\tdw\t");
		fprintf(fp,"  %05xh",w_el[i]);
		if(i%5 ==4)
			fprintf(fp,"\n");
		else
			fprintf(fp,",");
	}
	fprintf(fp,"\n");
	fprintf(fp,"cos_");
	for(i=0;i<65;i++){
		if(i%8 ==0)
			fprintf(fp,"\tdw\t");
		fprintf(fp,"  %05xh",cos_[i]);
		if(i%8 ==7)
			fprintf(fp,"\n");
		else
			fprintf(fp,",");
	}
	fprintf(fp,"\n");
	fprintf(fp,"sin_cos_sec");
	for(i=0;i<48;i++){
		if(i%8 ==0)
			fprintf(fp,"\tdw\t");
		fprintf(fp,"  %05xh",sin_cos_sec[i]);
		if(i%8 ==7)
			fprintf(fp,"\n");
		else
			fprintf(fp,",");
	}
	fprintf(fp,"nesteps	db	0,0,15,30\n");
	fprintf(fp,"tstrt	db	0,16,16,32\n");
	fprintf(fp,"tstop	db	16,32,40,40\n");
	fprintf(fp,"nthta	db	16,24,24,24\n");
	fprintf(fp,"\n");
}


print_rom_arrays(FILE *fp)
{
	int i,t,n,sib,cib,max,cpa,tmax,min,tmin,imax,imin;
	fprintf(fp,"`   cos_\n");
	for(i=0;i<65;i++)
		fprintf(fp,"%2d  %3d \n",i,cos_gr[i]);
	fprintf(fp,"`   sin_sec cos_sec\n");
	for(i=0;i<24;i++)
		fprintf(fp,"%2d  %6d  %6d \n",i,sin_sec[i],cos_sec[i]);
	max = -1000;
	min = 1000;
#if 0
	for(t=0;t<=128;t++){
		mis.current_bth = t;
		init_pad_arrays();
		for(i=0;i<24;i++){
#if NEW
#if NBITS16
			cpa = (( (long)sinib[i] * cos_gr[0] + 16383) >> 15) + cosib[i];   
#else
			cpa = ((sinib[i] * cos_gr[0] + 63) >> 7) + cosib[i];   
#endif
#else
			cpa = (sinib[i] * cos_gr[0])/128 + cosib[i];
#endif
			if(cpa>max){ max=cpa;  tmax=t; imax=i; }
			if(cpa<min){ min=cpa;  tmin=t; imin=i; }
#if NEW
			cpa = ((sinib[i] * -cos_gr[0] + 63) >> 7) + cosib[i];
#else
			cpa = (sinib[i] * -cos_gr[0])/128 + cosib[i];
#endif
			if(cpa>max){ max=cpa;  tmax=t; imax=i; }
			if(cpa<min){ min=cpa;  tmin=t; imin=i; }
		}
	}
	fprintf(fp,"`cpamax=%3d at t=%d, i=%d    cpamin=%4d at t=%d, i=%d \n",max,tmax,imax,min,tmin,imin);
#endif
}


uchar cpamapth,cpamapph;
uchar cpamap[40][32];

print_cpamap(FILE *fp)
{
	int p,t;
	uchar m;
	fprintf(fp,"`th=%d , ph=%d\n",cpamapth,cpamapph);
	for(t=0;t<40;t++){
		m = 0;
		for(p=0;p<32;p++)
			m |= cpamap[t][p];
		if(m==0)
			continue;
		fprintf(fp,"%2d ",t);
		for(p=0;p<32;p++){
			if(m=cpamap[t][p])
				fprintf(fp," %3d",m);
			else
				fprintf(fp,"    ");
			cpamap[t][p] = 0;
		}
		fprintf(fp,"\n");
	}
	fprintf(fp,"\n");
}



#define T_SCALE 32767.499
#define S_SCALE 32640.
#define C_SCALE (S_SCALE*T_SCALE/32768.)


init_rom_arrays()
{
	int i,n;
	double ac;
	int flag=0;
	for(i=0;i<65;i++){
		cos_gr[i] = floor( T_SCALE * cos(2.*PI*i/256.) +.5 );
/*		if(cos_[i] != cos_gr[i]){ */
/*			flag |=1; */
/*			cos_[i] = cos_gr[i]; */
/*		} */
	}
	for(i=0;i<24;i++){
		cos_sec[i] = floor( C_SCALE * cos(PI/180.*th_e[i]) +.5 );
		sin_sec[i] = floor( S_SCALE * sin(PI/180.*th_e[i]) +.5 );	
/*		if(sin_cos_sec[2*i] != sin_sec[i]){ */
/*			flag |=2; */
/*			sin_cos_sec[2*i] = sin_sec[i]; */
/*		} */
/*		if(sin_cos_sec[2*i+1] != cos_sec[i]){ */
/*			flag |=4; */
/*			sin_cos_sec[2*i+1] = cos_sec[i]; */
/*		} */
	}
/*	flag |= init_w_el(w_el); */
/*	if(flag){ */
/*		err_out("\007 Rom Error!"); */
/*		print_c_tables(nfile("welc.tbl")); */
/*		print_asm_tables(nfile("wel.tbl")); */
/*	} */
/*	if(flag & 1) */
/*		err_out("COS_ table is incorrect!  It has been changed"); */
/*	if(flag & 2) */
/*		err_out("SIN_SEC table is incorrect!  It has been changed"); */
/*	if(flag & 4) */
/*		err_out("COS_SEC table is incorrect!  It has been changed"); */
/*	if(flag & 8) */
/*		err_out("W_EL table is incorrect!  It has been changed"); */
}


char *fstring5(char *s,double x)
{
	char *f;
	int e;
	if(x==0){
		sprintf(s,"%6.4f",0.);
		return( s );
	}
	e = floor( log10(x) );
	if(e<-3 || e>5){
		sprintf(s,"%3.1fe%-2d",x/pow((double)e,10.),e);
		return(s);
	}
	f="%6.4f";
	if(e==1)    f="%6.3f";
	if(e==2)    f="%6.2f";
	if(e==3)    f="%6.1f";
	if(e==4)    f="%6.0f";
	if(e==5)    f="%6f";
	sprintf(s,f,x);
	return(s);	
}

#endif