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

📄 cmpt.c

📁 Wget很好的处理了http和ftp的下载,很值得学习的经典代码
💻 C
📖 第 1 页 / 共 4 页
字号:
# endif#endif/* Status of lookup: do we use the locale data or the raw data?  */enum locale_status { not, loc, raw };#ifndef __isleap/* Nonzero if YEAR is a leap year (every 4 years,   except every 100th isn't, and every 400th is).  */# define __isleap(year) \  ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0))#endif/* Compute the day of the week.  */static voidday_of_the_week (struct tm *tm){  /* We know that January 1st 1970 was a Thursday (= 4).  Compute the     the difference between this data in the one on TM and so determine     the weekday.  */  int corr_year = 1900 + tm->tm_year - (tm->tm_mon < 2);  int wday = (-473              + (365 * (tm->tm_year - 70))              + (corr_year / 4)              - ((corr_year / 4) / 25) + ((corr_year / 4) % 25 < 0)              + (((corr_year / 4) / 25) / 4)              + __mon_yday[0][tm->tm_mon]              + tm->tm_mday - 1);  tm->tm_wday = ((wday % 7) + 7) % 7;}/* Compute the day of the year.  */static voidday_of_the_year (struct tm *tm){  tm->tm_yday = (__mon_yday[__isleap (1900 + tm->tm_year)][tm->tm_mon]                 + (tm->tm_mday - 1));}static char *#ifdef _LIBCinternal_function#endifstrptime_internal __P ((const char *buf, const char *format, struct tm *tm,                        enum locale_status *decided));static char *#ifdef _LIBCinternal_function#endifstrptime_internal (rp, fmt, tm, decided)     const char *rp;     const char *fmt;     struct tm *tm;     enum locale_status *decided;{#ifdef _NL_CURRENT  const char *rp_backup;#endif  int cnt;  size_t val;  int have_I, is_pm;  int century, want_century;  int have_wday, want_xday;  int have_yday;  int have_mon, have_mday;  have_I = is_pm = 0;  century = -1;  want_century = 0;  have_wday = want_xday = have_yday = have_mon = have_mday = 0;  while (*fmt != '\0')    {      /* A white space in the format string matches 0 more or white         space in the input string.  */      if (ISSPACE (*fmt))        {          while (ISSPACE (*rp))            ++rp;          ++fmt;          continue;        }      /* Any character but `%' must be matched by the same character         in the iput string.  */      if (*fmt != '%')        {          match_char (*fmt++, *rp++);          continue;        }      ++fmt;#ifndef _NL_CURRENT      /* We need this for handling the `E' modifier.  */    start_over:#endif#ifdef _NL_CURRENT      /* Make back up of current processing pointer.  */      rp_backup = rp;#endif      switch (*fmt++)        {        case '%':          /* Match the `%' character itself.  */          match_char ('%', *rp++);          break;        case 'a':        case 'A':          /* Match day of week.  */          for (cnt = 0; cnt < 7; ++cnt)            {#ifdef _NL_CURRENT              if (*decided !=raw)                {                  if (match_string (_NL_CURRENT (LC_TIME, DAY_1 + cnt), rp))                    {                      if (*decided == not                          && strcmp (_NL_CURRENT (LC_TIME, DAY_1 + cnt),                                     weekday_name[cnt]))                        *decided = loc;                      break;                    }                  if (match_string (_NL_CURRENT (LC_TIME, ABDAY_1 + cnt), rp))                    {                      if (*decided == not                          && strcmp (_NL_CURRENT (LC_TIME, ABDAY_1 + cnt),                                     ab_weekday_name[cnt]))                        *decided = loc;                      break;                    }                }#endif              if (*decided != loc                  && (match_string (weekday_name[cnt], rp)                      || match_string (ab_weekday_name[cnt], rp)))                {                  *decided = raw;                  break;                }            }          if (cnt == 7)            /* Does not match a weekday name.  */            return NULL;          tm->tm_wday = cnt;          have_wday = 1;          break;        case 'b':        case 'B':        case 'h':          /* Match month name.  */          for (cnt = 0; cnt < 12; ++cnt)            {#ifdef _NL_CURRENT              if (*decided !=raw)                {                  if (match_string (_NL_CURRENT (LC_TIME, MON_1 + cnt), rp))                    {                      if (*decided == not                          && strcmp (_NL_CURRENT (LC_TIME, MON_1 + cnt),                                     month_name[cnt]))                        *decided = loc;                      break;                    }                  if (match_string (_NL_CURRENT (LC_TIME, ABMON_1 + cnt), rp))                    {                      if (*decided == not                          && strcmp (_NL_CURRENT (LC_TIME, ABMON_1 + cnt),                                     ab_month_name[cnt]))                        *decided = loc;                      break;                    }                }#endif              if (match_string (month_name[cnt], rp)                  || match_string (ab_month_name[cnt], rp))                {                  *decided = raw;                  break;                }            }          if (cnt == 12)            /* Does not match a month name.  */            return NULL;          tm->tm_mon = cnt;          want_xday = 1;          break;        case 'c':          /* Match locale's date and time format.  */#ifdef _NL_CURRENT          if (*decided != raw)            {              if (!recursive (_NL_CURRENT (LC_TIME, D_T_FMT)))                {                  if (*decided == loc)                    return NULL;                  else                    rp = rp_backup;                }              else                {                  if (*decided == not &&                      strcmp (_NL_CURRENT (LC_TIME, D_T_FMT), HERE_D_T_FMT))                    *decided = loc;                  want_xday = 1;                  break;                }              *decided = raw;            }#endif          if (!recursive (HERE_D_T_FMT))            return NULL;          want_xday = 1;          break;        case 'C':          /* Match century number.  */          get_number (0, 99, 2);          century = val;          want_xday = 1;          break;        case 'd':        case 'e':          /* Match day of month.  */          get_number (1, 31, 2);          tm->tm_mday = val;          have_mday = 1;          want_xday = 1;          break;        case 'F':          if (!recursive ("%Y-%m-%d"))            return NULL;          want_xday = 1;          break;        case 'x':#ifdef _NL_CURRENT          if (*decided != raw)            {              if (!recursive (_NL_CURRENT (LC_TIME, D_FMT)))                {                  if (*decided == loc)                    return NULL;                  else                    rp = rp_backup;                }              else                {                  if (*decided == not                      && strcmp (_NL_CURRENT (LC_TIME, D_FMT), HERE_D_FMT))                    *decided = loc;                  want_xday = 1;                  break;                }              *decided = raw;            }#endif          /* Fall through.  */        case 'D':          /* Match standard day format.  */          if (!recursive (HERE_D_FMT))            return NULL;          want_xday = 1;          break;        case 'k':        case 'H':          /* Match hour in 24-hour clock.  */          get_number (0, 23, 2);          tm->tm_hour = val;          have_I = 0;          break;        case 'I':          /* Match hour in 12-hour clock.  */          get_number (1, 12, 2);          tm->tm_hour = val % 12;          have_I = 1;          break;        case 'j':          /* Match day number of year.  */          get_number (1, 366, 3);          tm->tm_yday = val - 1;          have_yday = 1;          break;        case 'm':          /* Match number of month.  */          get_number (1, 12, 2);          tm->tm_mon = val - 1;          have_mon = 1;          want_xday = 1;          break;        case 'M':          /* Match minute.  */          get_number (0, 59, 2);          tm->tm_min = val;          break;        case 'n':        case 't':          /* Match any white space.  */          while (ISSPACE (*rp))            ++rp;          break;        case 'p':          /* Match locale's equivalent of AM/PM.  */#ifdef _NL_CURRENT          if (*decided != raw)            {              if (match_string (_NL_CURRENT (LC_TIME, AM_STR), rp))                {                  if (strcmp (_NL_CURRENT (LC_TIME, AM_STR), HERE_AM_STR))                    *decided = loc;                  break;                }              if (match_string (_NL_CURRENT (LC_TIME, PM_STR), rp))                {                  if (strcmp (_NL_CURRENT (LC_TIME, PM_STR), HERE_PM_STR))                    *decided = loc;                  is_pm = 1;                  break;                }              *decided = raw;            }#endif          if (!match_string (HERE_AM_STR, rp))            {              if (match_string (HERE_PM_STR, rp))                is_pm = 1;              else                return NULL;            }          break;        case 'r':#ifdef _NL_CURRENT          if (*decided != raw)            {              if (!recursive (_NL_CURRENT (LC_TIME, T_FMT_AMPM)))                {                  if (*decided == loc)                    return NULL;                  else                    rp = rp_backup;                }              else                {                  if (*decided == not &&                      strcmp (_NL_CURRENT (LC_TIME, T_FMT_AMPM),                              HERE_T_FMT_AMPM))                    *decided = loc;                  break;                }              *decided = raw;            }#endif          if (!recursive (HERE_T_FMT_AMPM))            return NULL;          break;        case 'R':          if (!recursive ("%H:%M"))

⌨️ 快捷键说明

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