libipvlbi.h
来自「实现ipvlbi数据记录」· C头文件 代码 · 共 980 行 · 第 1/3 页
H
980 行
/**************************************************************//* *//* 俬俹亅倁俴俛俬梡僀儞僋儖乕僪僼傽僀儖 libipvlbi.h *//* 僒儞僾儔乕儃乕僪傾僋僙僗埲奜 *//* *//* Version: 2002-10-08 *//* *//* Copyright (c) 2002 T.Kondo/CRL All Right Reserved *//* *//**************************************************************//* *//* 俬俹亅倁俴俛俬梡僿僢僟乕僼傽僀儖 *//* 僒儞僾儔乕儃乕僪傾僋僙僗埲奜 *//* by T.Kondo 2001.8.26 *//* 2002.5.26 *//* 2002.7.06 *//* */#ifndef _LIBIPVLBI_#define _LIBIPVLBI_#ifndef FILEMAXSIZE#define FILEMAXSIZE 2000000000 // File maximum limit size in bytes#endif#ifndef PIRA#define PIRA 1.745329252E-2 // PI/180 degree to radian#endif#ifndef PIDE#define PIDE 57.29577951 // 180/PI radian to degree#endif#ifndef TWOPI#define TWOPI 6.283185307 // 2PI#endif#ifndef PI#define PI 3.141592653#endif#ifndef MAXSTAR#define MAXSTAR 1500 // Maximum star numbers in schedule file#endif#ifndef MAXOBS#define MAXOBS 2000 // Maximum observation (scan) numbers is schedule file#endif#ifdef WIN32typedef unsigned int u_int32_t;#endiftypedef struct schedule{ char expcode[11]; // experiment code char starnam1[MAXSTAR][11]; // star name1 char starnam2[MAXSTAR][11]; // star name2 double ra[MAXSTAR]; // star position RA in degree double dec[MAXSTAR]; // " DEC in degree double epo[MAXSTAR]; // " Epoch int nstar; // mu,ber of stars char statnam[20][11]; // station name double xyz[20][3]; // station position (x,y,z) in m char statid[20][2]; // station ID (A1) int nstation; // number of stations double freqtab[16]; // frequency table int nfreq; // number of frequency char obsstar[MAXOBS][11]; // Obs schedule Star name int starid[MAXOBS]; // Star ID (entry at starpos table) int start[MAXOBS][5]; // start time YY, DDD, HH, MM, SS int dura[MAXOBS]; // obs duration char obsid[MAXOBS][21]; // station IDs participated in this obs int nobs; // Number of Observations } sked_data_t;// following 2 functions uses "timeval" structure that is available only// on FreeBSD or linux#ifndef WIN32void sec2ymds(struct timeval *tv, int *year, int* month, int* mday, int* hh, int* mm, int* ss);void getsystimef(int* year, int* month, int* mday, int* hh, int* mm, int* ss, float *fsec, float *tofset);#endiflong int nint(double x);void read1line(char *line);int leaf_year_check(int year); // 偆傞偆擭偺偽偁偄丂侽傪儕僞乕儞void sec2hms(long int sec, int* hh, int* mm, int* ss);void ddd2md(int year, int ddd, int* month, int* mday);void md2ddd(int year, int* ddd, int month, int mday);void timecorrect(int* year, int* month, int* mday, int* hh, int* mm, int* ss, int* secadd);void readskd(char* fname, sked_data_t *skd);void parsebit32n(unsigned char* bit32, int* spatn, int* smplbit, int* sfreq, int* numch, long int* seconds);void headerchkn(unsigned char* bit64, int* iok, int* spatn, int* smplbit, int* sfreq, int* numch, long int* seconds, int* hh, int* mm, int* ss);void parseADdata(u_int32_t *ia, int numb, int adbit, int *xdata, int *npos);void parseADdata_2(unsigned char *ia, int numb, int adbit, int *xdata, int *npos);void parseADdata_3(unsigned char *ia, int numb, int adbit, int *xdata, int *npos);long int nint(double x){ double t; long int j; //t=x; t=fabs(x)+0.5; // abs 偺傒偱偼惍悢偵側偭偰偟傑偆偺偱fabs傪巊偆偙偲 //cout << "x=" << x << " t=" << t << '\n' ; // debug j=(long int)t; if( x < 0) j=-j; return j;}void read1line(char *line){ //char cbuf[128]; //char *pibuf=cbuf; char c; /* 侾暥帤偢偮夵峴僐乕僪偑棃傞傑偱撉傒崬傒 */ while(1) { scanf("%c",&c); if(c=='\n' || c=='\r') goto exitread; //*pibuf++ =c; *line++ =c; } exitread: //*pibuf='\0'; //strcpy(line,cbuf); *line='\0';}void sec2hms(long int sec, int* hh, int* mm, int* ss){ long int j; *hh=sec/3600 ; j=sec-*hh*(long)3600; *mm=(int)(j/60) ; *ss=(int)(j-*mm*(long)60) ;}int leaf_year_check(int year) // 偆傞擭偺偽偁偄丂侽傪儕僞乕儞{ /* leaf year check */ if (year-(year/4)*4 == 0) { if (year-(year/100)*100 == 0) { if (year-(year/400)*400 == 0) { return 0;} return -1; } return 0; } return -1;}void ddd2md(int year, int ddd, int* month, int* mday){ int md[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; int i,td,wd ; /* leaf year check */ if (leaf_year_check(year)==0) { md[1]=29; } *month=0; *mday=0; td=ddd; for (i=0; i< 12; i++) { wd=td-md[i]; if (wd <=0) { *mday=td; *month=i+1; goto exithere; } td=wd; } exithere:; }void md2ddd(int year, int* ddd, int month, int mday){ int md[12] = {0,31,28,31,30,31,30,31,31,30,31,30}; int i; /* leaf year check */ if (leaf_year_check(year)==0) { md[2]=29; } *ddd=0; for (i=0; i< month; i++) { *ddd=*ddd+md[i]; } *ddd += mday; }#ifndef WIN32 void sec2ymds(struct timeval *tv, int *year, int* month, int* mday, int* hh, int* mm, int* ss){ // tv.tv_sec is seconds from 1970/1/1 0h UTC int eday,edayold, secofday, secinh, yyyy, tday; eday = tv->tv_sec/86400 ; secofday=tv->tv_sec-eday*86400 ; *hh = secofday/3600 ; secinh = secofday-(*hh)*3600 ; *mm = secinh/60 ; *ss = secinh-(*mm)*60; yyyy=1970; loop1: edayold=eday; /* leaf year check */ tday=365 ; if (leaf_year_check(yyyy)==0) {tday=366; } eday=edayold-tday; if (eday > 0 ) { yyyy++; goto loop1; } ddd2md(yyyy, edayold, &(*month), &(*mday)); *year =yyyy; }#endifvoid timecorrect(int* year, int* month, int* mday, int* hh, int* mm, int* ss, int* secadd){ //char cbuf[60]; int seconds, tday, yyyy, allday; seconds=(*hh)*3600+(*mm)*60+(*ss); seconds += *secadd; yyyy=*year; md2ddd(yyyy, &tday, *month, *mday); if (seconds >= 86400) { tday=tday+1; seconds=seconds-86400; } else if ( seconds < 0 ) { tday=tday-1; seconds=seconds+86400; } yyyy=*year; allday=365; if (leaf_year_check(yyyy)==0) { allday=366; } if (tday <=0 ) { *year -= 1; } else if ( tday > allday) { *year += 1; tday=tday-allday; } sec2hms(seconds, hh, mm, ss); yyyy=*year; ddd2md(*year, tday, &(*month), &(*mday));}#ifndef WIN32 void getsystimef(int* year, int* month, int* mday, int* hh, int* mm, int* ss, float *fsec, float *tofset) { struct timeval tv; struct timezone tz; int iwork; //float fsec, tofset ; float fwork; //int month,mday; gettimeofday(&tv,&tz); // 偙偺娭悢丄俀侽侽侽擭傪塠擭偱偼側偄偲尒側偟偰偄傞傛偆両 tv.tv_sec += 86400; // Now is after 2000, so I add 1 day (86400sec) *fsec=tv.tv_usec/1000000.0+ (*tofset); fwork=*fsec; iwork=(int)fwork; if (fwork < 0.0 ) { iwork -= 1; } tv.tv_sec += iwork; *fsec=fwork-(float)iwork; //printf("FSEC = %f\n",*fsec); //sec2ymds(&tv, &(*year), &(*month), &(*mday), &(*hh), &(*mm), &(*ss)); sec2ymds(&tv, year, month, mday, hh, mm, ss); }#endifvoid readskd(char* fname, sked_data_t *skd){ //sked_data_t skd; char line[500]; char cbuf[21]; //char* spc=" " ; // 20" " char spc[]=" " ; // 20" " char starnam[11]; char altnam[11]; char wstatnam[20][11]; // station name work char wstatid[20][2]; char s1[21]; char s2[21]; char s3[21]; char s4[61]; //char* fname="D:/IPVLBI/data/tds16a.dat"; int i,k; int i1,i2,i3,i4,i5 ; // work integers double d1,d2,d3 ; // work doubles
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?