File: prcs-keys.c

package info (click to toggle)
prcs 1.2.11-7
  • links: PTS
  • area: main
  • in suites: slink
  • size: 2,748 kB
  • ctags: 3,097
  • sloc: cpp: 16,675; ansic: 5,725; sh: 4,887; lisp: 1,449; lex: 344; perl: 131; makefile: 131; pascal: 85
file content (95 lines) | stat: -rw-r--r-- 2,208 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/* -*- C -*- code produced by gperf version 2.1 (K&R C version) */
/* -- modified jmacd@cs.berkeley.edu */
/* Command-line: jgperf -A -C -a -r -k1,9 -N is_builtin_keyword -H is_builtin_keyword_hash  */



#define MIN_WORD_LENGTH 2
#define MAX_WORD_LENGTH 19
#define MIN_HASH_VALUE 4
#define MAX_HASH_VALUE 26
/*
   14 keywords
   23 is the maximum key range
*/

int
is_builtin_keyword_hash (register const char *str, register int len)
{
  static const unsigned char hash_table[] =
    {
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 14, 11, 26,  8, 26,
     12, 26, 26,  2, 26, 26, 26, 26, 26, 26,
      4, 26,  2,  3, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26,  1, 26, 26,
     26,  8, 26, 26, 26,  0, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26,  4, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26,
    };
  register int hval = len;

  switch (hval)
    {
      default:
      case 9:
        hval += hash_table[str[8]];
      case 8:
      case 7:
      case 6:
      case 5:
      case 4:
      case 3:
      case 2:
      case 1:
        hval += hash_table[str[0]];
    }
  return hval ;
}

const char *
is_builtin_keyword (register const char *str, register int len)
{

   const char * wordlist[] =
    {
      "", "", "", "", 
      "Id", 
      "", "", "", "", 
      "Source", 
      "Revision", 
      "Project", 
      "Date", 
      "", "", "", 
      "ProjectDate", 
      "", 
      "Format", 
      "Basename", 
      "Author", 
      "ProjectAuthor", 
      "", 
      "ProjectMinorVersion", 
      "ProjectMajorVersion", 
      "ProjectHeader", 
      "ProjectVersion", 
    };

  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
    {
      register int key = is_builtin_keyword_hash (str, len);

      if (key <= MAX_HASH_VALUE && key >= MIN_HASH_VALUE)
        {
          register const char *s = wordlist[key];

          if (*s == *str && !strcmp (str + 1, s + 1))
            return s;
        }
    }
  return 0;
}