"Fossies" - the Fresh Open Source Software Archive

Member "dateutils-0.4.6/lib/fmt-special.c" (19 Mar 2019, 8298 Bytes) of package /linux/privat/dateutils-0.4.6.tar.xz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "fmt-special.c" see the Fossies "Dox" file reference documentation and the last Fossies "Diffs" side-by-side code changes report: 0.4.1_vs_0.4.2.

    1 /* ANSI-C code produced by gperf version 3.0.4 */
    2 /* Command-line: /usr/bin/gperf -L ANSI-C --output-file fmt-special.c fmt-special.gperf  */
    3 /* Computed positions: -k'1-2,4' */
    4 
    5 #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
    6       && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
    7       && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
    8       && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
    9       && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
   10       && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
   11       && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
   12       && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
   13       && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
   14       && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
   15       && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
   16       && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
   17       && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
   18       && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
   19       && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
   20       && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
   21       && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
   22       && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
   23       && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
   24       && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
   25       && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
   26       && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
   27       && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
   28 /* The character set is not based on ISO-646.  */
   29 #error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
   30 #endif
   31 
   32 #line 1 "fmt-special.gperf"
   33 
   34 #if !defined DT_SEXY_BASE_YEAR
   35 # define DT_SEXY    DT_DUNK
   36 #endif  /* !DT_SEXY_BASE_YEAR */
   37 #line 17 "fmt-special.gperf"
   38 struct dt_fmt_special_s {
   39     const char *special;
   40     dt_dtyp_t e;
   41 };
   42 /* maximum key range = 22, duplicates = 0 */
   43 
   44 #ifndef GPERF_DOWNCASE
   45 #define GPERF_DOWNCASE 1
   46 static unsigned char gperf_downcase[256] =
   47   {
   48       0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,
   49      15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,
   50      30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,
   51      45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,
   52      60,  61,  62,  63,  64,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106,
   53     107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
   54     122,  91,  92,  93,  94,  95,  96,  97,  98,  99, 100, 101, 102, 103, 104,
   55     105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
   56     120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
   57     135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
   58     150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
   59     165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
   60     180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
   61     195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
   62     210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
   63     225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
   64     240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
   65     255
   66   };
   67 #endif
   68 
   69 #ifndef GPERF_CASE_STRCMP
   70 #define GPERF_CASE_STRCMP 1
   71 static int
   72 gperf_case_strcmp (register const char *s1, register const char *s2)
   73 {
   74   for (;;)
   75     {
   76       unsigned char c1 = gperf_downcase[(unsigned char)*s1++];
   77       unsigned char c2 = gperf_downcase[(unsigned char)*s2++];
   78       if (c1 != 0 && c1 == c2)
   79         continue;
   80       return (int)c1 - (int)c2;
   81     }
   82 }
   83 #endif
   84 
   85 #ifdef __GNUC__
   86 __inline
   87 #else
   88 #ifdef __cplusplus
   89 inline
   90 #endif
   91 #endif
   92 static unsigned int
   93 ____fmt_special (register const char *str, register unsigned int len)
   94 {
   95   static const unsigned char asso_values[] =
   96     {
   97       25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
   98       25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
   99       25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
  100       25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
  101       25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
  102       25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
  103       25, 25, 25, 25, 25,  5,  0, 25,  0,  5,
  104       25, 25, 25,  0,  4, 25,  0,  5, 25, 25,
  105       25, 25, 25,  5, 25, 10, 25,  0, 25, 10,
  106       25, 25, 25, 25, 25, 25, 25,  5,  0, 25,
  107        0,  5, 25, 25, 25,  0,  4, 25,  0,  5,
  108       25, 25, 25, 25, 25,  5, 25, 10, 25,  0,
  109       25, 10, 25, 25, 25, 25, 25, 25
  110     };
  111   register int hval = len;
  112 
  113   switch (hval)
  114     {
  115       default:
  116         hval += asso_values[(unsigned char)str[3]];
  117       /*FALLTHROUGH*/
  118       case 3:
  119       case 2:
  120         hval += asso_values[(unsigned char)str[1]];
  121       /*FALLTHROUGH*/
  122       case 1:
  123         hval += asso_values[(unsigned char)str[0]];
  124         break;
  125     }
  126   return hval;
  127 }
  128 
  129 #ifdef __GNUC__
  130 __inline
  131 #if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
  132 __attribute__ ((__gnu_inline__))
  133 #endif
  134 #endif
  135 const struct dt_fmt_special_s *
  136 __fmt_special (register const char *str, register unsigned int len)
  137 {
  138   enum
  139     {
  140       TOTAL_KEYWORDS = 14,
  141       MIN_WORD_LENGTH = 2,
  142       MAX_WORD_LENGTH = 6,
  143       MIN_HASH_VALUE = 3,
  144       MAX_HASH_VALUE = 24
  145     };
  146 
  147   static const struct dt_fmt_special_s wordlist[] =
  148     {
  149 #line 34 "fmt-special.gperf"
  150       {"ldn", DT_LDN},
  151 #line 25 "fmt-special.gperf"
  152       {"bizda", DT_BIZDA},
  153 #line 33 "fmt-special.gperf"
  154       {"lilian", DT_LDN},
  155 #line 32 "fmt-special.gperf"
  156       {"jdn", DT_JDN},
  157 #line 36 "fmt-special.gperf"
  158       {"mdn", DT_MDN},
  159 #line 28 "fmt-special.gperf"
  160       {"bizsi", DT_BIZSI},
  161 #line 30 "fmt-special.gperf"
  162       {"yd", DT_YD},
  163 #line 29 "fmt-special.gperf"
  164       {"ywd", DT_YWD},
  165 #line 26 "fmt-special.gperf"
  166       {"daisy", DT_DAISY},
  167 #line 35 "fmt-special.gperf"
  168       {"matlab", DT_MDN},
  169 #line 23 "fmt-special.gperf"
  170       {"ymd", DT_YMD},
  171 #line 24 "fmt-special.gperf"
  172       {"ymcw", DT_YMCW},
  173 #line 31 "fmt-special.gperf"
  174       {"julian", DT_JDN},
  175 #line 27 "fmt-special.gperf"
  176       {"sexy", (dt_dtyp_t)DT_SEXY}
  177     };
  178 
  179   if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  180     {
  181       register int key = ____fmt_special (str, len);
  182 
  183       if (key <= MAX_HASH_VALUE && key >= MIN_HASH_VALUE)
  184         {
  185           register const struct dt_fmt_special_s *resword;
  186 
  187           switch (key - 3)
  188             {
  189               case 0:
  190                 resword = &wordlist[0];
  191                 goto compare;
  192               case 2:
  193                 resword = &wordlist[1];
  194                 goto compare;
  195               case 3:
  196                 resword = &wordlist[2];
  197                 goto compare;
  198               case 4:
  199                 resword = &wordlist[3];
  200                 goto compare;
  201               case 5:
  202                 resword = &wordlist[4];
  203                 goto compare;
  204               case 7:
  205                 resword = &wordlist[5];
  206                 goto compare;
  207               case 9:
  208                 resword = &wordlist[6];
  209                 goto compare;
  210               case 10:
  211                 resword = &wordlist[7];
  212                 goto compare;
  213               case 12:
  214                 resword = &wordlist[8];
  215                 goto compare;
  216               case 13:
  217                 resword = &wordlist[9];
  218                 goto compare;
  219               case 15:
  220                 resword = &wordlist[10];
  221                 goto compare;
  222               case 16:
  223                 resword = &wordlist[11];
  224                 goto compare;
  225               case 17:
  226                 resword = &wordlist[12];
  227                 goto compare;
  228               case 21:
  229                 resword = &wordlist[13];
  230                 goto compare;
  231             }
  232           return 0;
  233         compare:
  234           {
  235             register const char *s = resword->special;
  236 
  237             if ((((unsigned char)*str ^ (unsigned char)*s) & ~32) == 0 && !gperf_case_strcmp (str, s))
  238               return resword;
  239           }
  240         }
  241     }
  242   return 0;
  243 }