⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 int_misc.c

📁 LastWave
💻 C
📖 第 1 页 / 共 2 页
字号:
    ymd = Index2Date((((int) sec) / (3600*24)) + Date2Index(19700101));    sec -= (((int) sec) / (3600*24))*3600*24;    h = ((int) sec)/3600;    sec -= h*3600;    mn = ((int) sec)/60;    sec -= mn*60;    s = ((int) sec);    hms = h*10000+mn*100+s;    lv = TNewListv();    AppendFloat2Listv(lv,ymd);    AppendFloat2Listv(lv,hms);    SetResultValue((VALUE) lv);    return;  }  // time s2hms  if (!strcmp(action,"s2hms")) {    argv = ParseArgv(argv,tFLOAT,&sec,0);    h = ((int) sec)/3600;    sec -= h*3600;    mn = ((int) sec)/60;    sec -= mn*60;    lv = TNewListv();    AppendFloat2Listv(lv,h);    AppendFloat2Listv(lv,mn);    AppendFloat2Listv(lv,sec);    SetResultValue((VALUE) lv);    return;  }  // time date  if (!strcmp(action,"current")) {    flagDate = NO;    flagListv = NO;    flagGMT = NO;    while(opt = ParseOption(&argv)) {       switch(opt) {      case 'd':        flagDate = YES;         break;      case 'g':        flagGMT = YES;         break;      case 'l':         flagListv = YES;        break;      default : ErrorOption(opt);      }    }      NoMoreArgs(argv);      GetCurrentDate(&d,&m,&y,&h,&mn,&s,flagGMT);    if (flagDate) {      if (flagListv) {            lv = TNewListv();        AppendInt2Listv(lv,d);        AppendInt2Listv(lv,m);        AppendInt2Listv(lv,y);        AppendInt2Listv(lv,h);        AppendInt2Listv(lv,mn);        AppendInt2Listv(lv,s);        NoMoreArgs(argv);        SetResultValue(lv);        return;      }      else {        lv = TNewListv();        AppendFloat2Listv(lv,YYYYMMDD(y,m,d));        AppendFloat2Listv(lv,h*10000+mn*100+s);        SetResultValue(lv);        return;      }    }    else {      if (flagListv) {            lv = TNewListv();        AppendInt2Listv(lv,h);        AppendInt2Listv(lv,mn);        AppendInt2Listv(lv,s);        NoMoreArgs(argv);        SetResultValue(lv);        return;      }      else {        SetResultFloat(h*10000+mn*100+s);        return;      }    }    return;  }  Errorf("Unknown action '%s'",action);}  /* Test for bissextile years */static char IsBissextile(int n){  if ((n % 400 == 0) || (n % 4 == 0) && (!(n % 100 == 0))) return(YES);  else return(NO);}// Returns the year from format YYYYMMDDint YYYY(int yymmdd){    int dd,mm;    dd = yymmdd % 100;    mm = (yymmdd-dd) % 10000;    return ((yymmdd-mm-dd)/10000);}// Returns the month from format YYYYMMDDint MM(int yymmdd){    int dd;    dd = yymmdd % 100;    return (((yymmdd-dd) % 10000)/100);}// Returns the day from format YYYYMMDDint DD(int yymmdd){    return((yymmdd % 100));}// Returns the date index (i.e., number of days since 1/01/1900)#define YEAR_ORIGIN 1900int Date2Index(int yymmdd){    int yy = YYYY(yymmdd);    int mm = MM(yymmdd);    int dd = DD(yymmdd);    int nb,i;    char flagB;    if (yy < YEAR_ORIGIN) 	Errorf("Date2Index: The year must be after (or equal to) YEAR_ORIGIN");    nb=0;    for(i=YEAR_ORIGIN;i<yy;++i) {	  if (IsBissextile(i)) nb += 366;	  else nb += 365;      }      flagB = IsBissextile(yy);      for(i=1;i<mm;++i)	  switch(i)	  {	      case 1:	      case 3:	      case 5:	      case 7:	      case 8:	      case 10: 		  nb += 31;		  break;	      case 2: 		  if (flagB) nb+= 29;		  else nb += 28;		  break;	      case 4:	      case 6:	      case 9:	      case 11: 		  nb += 30;		  break;	  }      nb += dd;      return(nb);}// Returns the date under format YYYYMMDDint YYYYMMDD(int yy, int mm, int dd){    return(yy*10000+mm*100+dd);}// Inverse function of the previous oneint Index2Date(LWFLOAT ndays1){    int ndays = (int) ndays1;    int yy=YEAR_ORIGIN,mm=1,dd=1;    if (ndays != ndays1) Errorf("Index2Date() : index is a float (%g)\n",ndays1);        if (ndays < 0) Errorf("Index2Date: The year must be after TimeOrigin");    while (Date2Index(YYYYMMDD(yy,1,1)) <= ndays) yy++;    yy -= 1;    while ((Date2Index(YYYYMMDD(yy,mm,1)) <= ndays) && (mm <= 12)) mm++;    if (mm > 1) mm -= 1;    else mm = 1;    while ((Date2Index(YYYYMMDD(yy,mm,dd)) <= ndays) && (dd <= 31)) dd++;    if (dd > 1) dd -= 1;    else dd = 1;    return(YYYYMMDD(yy,mm,dd));}// Get the week day number from index#define DATEREF 20040326#define DAYREF 5int Index2Day(LWFLOAT ndays1){  static int base = -1;  int ndays = (int) ndays1;  if (ndays != ndays1) Errorf("Index2Day() : index is a float (%g)\n",ndays1);  if (base == -1) base = ((DAYREF-1) - Date2Index(DATEREF)) % 7;  return (((ndays + base) %7) + 1);}// Check if a date is a valid YYYYMMDD datechar IsValidYYYYMMDD(int yyyymmdd){    int dd,mm,yyyy;    dd = yyyymmdd % 100;    mm = (yyyymmdd-dd) % 10000;    yyyy =  (yyyymmdd-mm-dd)/10000;    mm /= 100;        if (mm<1 || mm>12) return(NO);    if (dd<1) return(NO);    switch (mm) {      case 1 : if (dd>31) return(NO); break;      case 2 :         if (dd>29) return(NO);        if (!((yyyy % 400 == 0) || (yyyy % 4 == 0) && (!(yyyy % 100 == 0))) && dd==29) return(NO);         break;      case 3 : if (dd>31) return(NO); break;      case 4 : if (dd>30) return(NO); break;      case 5 : if (dd>31) return(NO); break;      case 6 : if (dd>30) return(NO); break;      case 7 : if (dd>31) return(NO); break;      case 8 : if (dd>31) return(NO); break;      case 9 : if (dd>30) return(NO); break;      case 10 : if (dd>31) return(NO); break;      case 11 : if (dd>30) return(NO); break;      case 12 : if (dd>31) return(NO); break;    }        return(YES);}// Corresponding commandvoid C_Date(char **argv){  LISTV lv;  int d,m,y,h,mn,s,date,index;  char *action,opt;  int flagGMT,flagListv;    argv = ParseArgv(argv,tWORD,&action,-1);    // date current  if (!strcmp(action,"current")) {    flagGMT = NO;    flagListv = NO;    while(opt = ParseOption(&argv)) {       switch(opt) {      case 'l':         flagListv = YES;        break;      case 'g':         flagGMT = YES;        break;      default : ErrorOption(opt);      }    }      NoMoreArgs(argv);      GetCurrentDate(&d,&m,&y,&h,&mn,&s,flagGMT);    if (flagListv) {      lv = TNewListv();      AppendInt2Listv(lv,d);      AppendInt2Listv(lv,m);      AppendInt2Listv(lv,y);      NoMoreArgs(argv);      SetResultValue(lv);      return;    }          SetResultFloat(y*10000+m*100+d);    return;  }  // date 2index  if (!strcmp(action,"2index")) {    argv = ParseArgv(argv,tINT,&date,0);    if (!IsValidYYYYMMDD(date)) Errorf("Invalid date yyyymmdd '%d'",date);    SetResultInt(Date2Index(date));    return;  }  // date index2  if (!strcmp(action,"index2")) {    argv = ParseArgv(argv,tINT,&index,0);    SetResultInt(Index2Date(index));    return;  }  // date day  if (!strcmp(action,"day")) {    argv = ParseArgv(argv,tINT,&index,0);    SetResultInt(Index2Day(index));    return;  }    Errorf("Unknown action '%s'",action);}  /************************************************** * * Functions that deal with little/big endian * **************************************************//* Test whether we are running on big endian or little endian and set the corresponding variable */char cpuBinaryMode;void  InitCPUBinaryMode(void) {   short unsigned int i;  char *c;    i = 1;  c = (char *) (&i);  if (*c == 0) cpuBinaryMode = BinaryBigEndian;  else cpuBinaryMode = BinaryLittleEndian;}   /*  * Function to convert a Big (resp. Little) Endian array of values to a Little (resp. Big) array of values  * *    array   : is the array of values *    n       : the number of values *    sizeval : the number of bytes of each value */void BigLittleValues(void *array, int n, size_t sizeval){  size_t i;  int j;  unsigned char c;  unsigned char *pvar;    for (j=0;j<n*sizeval;j+=sizeval) {        pvar = ((unsigned char *) array) + j;      for(i=0;i<sizeval/2;i++) {      c = *(pvar+i);      *(pvar+i) = *(pvar+sizeval-1-i);      *(pvar+sizeval-1-i) = c;    }  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -