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 + -
显示快捷键?