/* kcomp.c reads klein '.dat' files and makes the '.phd' files then '.bhd' files. */ #include #include #include #define DP100M 0.0009009 #define DEG_RAD 0.01745329251 /* converts degrees to radians */ #define DEG_M 111120 /* converts degrees to meters -- 60 nmiles */ #define FILE_HEADER 5120 #define HEADER 32 #define DATA 404 #define TRAILER 4 #define NUMPTS 50 #define MAXHDR 100 #define PIXSIZE 0.5 #define MAX_NUM 300 #define S_SIZE 40 #define HALFWIDE 100 #define BLACK 0 #define D_GREY 1 #define M_GREY 2 #define L_GREY 3 #define WHITE 4 #define BUFF 5 #define RED 6 #define ORANGE 7 #define YELLOW 8 #define GREEN 9 #define CYAN 10 #define BLUE 11 #define PURPLE 12 #define MAGENTA 13 #define BROWN 14 #define D_GREEN 15 int VGAColor[16][3]= { { 0, 0, 0}, { 46, 46, 46}, {128, 128, 128}, {191, 191, 191}, {255, 255, 255}, {105, 90, 75}, {255, 0, 0}, {255,121, 0}, {255,179, 0}, {255,245, 0}, {184,255, 0}, { 87,255, 0}, { 0,255,166}, { 0,200,255}, { 0,111,255}, { 0, 0,255} }; double Pixsize=21.53; double CLat=42.386996; double CLon=-70.806298; double Xc,Yc,Xs,Ys; double Kx,Ky; /* pixels/degree */ double Xk,Yk; /* degrees/pixel */ double Lat1,Lon1; /* upper left corner */ double Ax,By; /* -Kx*Lon1 , Ky*Lat1 */ struct file_id { char name[S_SIZE]; long size; unsigned date,time; }; extern struct file_id GF_File[MAX_NUM]; extern int GF_Order[MAX_NUM]; struct Color { unsigned char r, g, b; }Lut[256]; struct board { int row,col,color; }B_Id; int ScreenXs=640,ScreenYs=480,VideoType='X'; unsigned char Buffer[4096],DBuff[1024],HBuff[256]; struct br_header { double lat,lon; float heading,px,py; char mo,da,yr,hr,min,sec,tsec,status; }B; struct b_header { double maxlat,minlat,maxlon,minlon; double pixsize; long row,col,file_hdr,line_hdr,line_data,line_tlr; int mean,min,perc10,perc25,median,perc75,perc90,max; /* pixel values */ int numavg,numhdg; char space[96]; /* space for future expansion */ }C; int Asn[256]; FILE *FpHdr,*FpDat; double MaxLat,MinLat,MaxLon,MinLon,Row,Col; main(argc,argv) int argc; char *argv[]; { int i,i1,j,k; int numfiles; char ans; FILE *fpin,*fpout; do { printf("\n\n 1 -- scan headers\n"); printf(" 2 -- plot tracks\n"); printf(" 3 -- plot data\n"); printf("\n x -- exit program\n\n"); ans=getch(); if(ans=='1') { scan_files(); } if(ans=='2') { plot_track(); } if(ans=='3') { video_on(); set_lut(); fpin=fopen("kplot.xmg","rb"); if(fpin) { fread((char *)&CLat,sizeof(double),1,fpin); fread((char *)&CLon,sizeof(double),1,fpin); fread((char *)&Pixsize,sizeof(double),1,fpin); for(i=0;i=ScreenXs) xc=ScreenXs-xs; if((yc+ys)>=ScreenYs) yc=ScreenYs-ys; } if(ans=='l'&&xs0.50) { dxs/=dspeed; dys/=dspeed; pixsize/=dspeed; } xs=dxs; ys=dys; if(ans=='+'&&speed<128) speed*=2; if(ans=='-'&&speed>1) speed/=2; tbox_val(0,xc,yc,xs,ys,Buffer,BLACK,WHITE,64); }while(ans!=13&&ans!=27); unbox(0,xc,yc,xs,ys,Buffer); if(ans!=27) { x=xc+xs/2; y=yc+ys/2; xy_ll(x,y,&CLat,&CLon); Pixsize=pixsize; } return(ans); } /*********************************************************************** ** ** ** ** ************************************************************************/ int plot_data() { int i,i1,j,k,m; int numfiles; double x,y,lat,lon,dx,dy; FILE *fpdat; char string[100]; long line_skip=0,pixel_space=0; long Bsize=sizeof(struct br_header),Csize; float dv,v; int hdr,dat,val; numfiles=load_names("*.bhd"); sort_name(numfiles); set_map(); paint_box(0,BUFF,Buffer,0,0,ScreenXs,ScreenYs); for(i=0;iMinLon&& C.minlatMinLat) { hdr=C.line_hdr; dat=C.line_data+C.line_tlr; Csize=C.col; fseek(fpdat,C.file_hdr,SEEK_SET); line_skip=(Pixsize/C.pixsize)/2.0-1.0; pixel_space=(Pixsize/C.pixsize)/1.5; if(C.min0) { if(kbhit()>0) { if(getch()==27) { fclose(FpHdr); fclose(fpdat); return(0); } } if(line_skip>0) { fseek(fpdat,line_skip*Csize,SEEK_CUR); fseek(FpHdr,line_skip*Bsize,SEEK_CUR); } if(B.lat>MinLat&&B.latMinLon&&B.lon0) { if(kbhit()>0) { val=getch(); if(val==27) return(-2); } ll_xy(&x,&y,B.lat,B.lon); if(B.status==1) plotpt(0,(int)x,(int)y,47); else plotpt(0,(int)x,(int)y,79); } } fclose(FpHdr); } getch(); SetVideoMode(0,&B_Id); } /*********************************************************************** ** ** ** ** ************************************************************************/ int set_map() { double xc,yc,xs,ys,cosclat; double screenxs=ScreenXs,screenys=ScreenYs; cosclat=cos(CLat*DEG_RAD); Xs=Pixsize; /* meters/pixel */ Ys=Pixsize; /* meder0‡®Ä0| þf&€ˆçÃÇgŒ,3‰¬¼Îü&IÃ*********************************** */ int set_lut(type,filename) char type,*filename; { int i,j,k; for(i=0;i<16;i++) { Lut[i].r=VGAColor[i][0]; Lut[i].g=VGAColor[i][1]; Lut[i].b=VGAColor[i][2]; } for(i=0;i<64;i++) { Lut[i+16].r=i*4; Lut[i+16].g=i*4; Lut[i+16].b=i*4; } WritePalette(Lut); return(1); }