File: makeenum

package info (click to toggle)
netsurf 1.2-1
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 4,684 kB
  • ctags: 5,455
  • sloc: ansic: 66,136; perl: 378; yacc: 376; asm: 281; makefile: 227; xml: 88; sh: 39
file content (46 lines) | stat: -rwxr-xr-x 1,444 bytes parent folder | download
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
#!/usr/bin/perl -W
#
# This file is part of NetSurf, http://netsurf-browser.org/
# Licensed under the GNU General Public License,
#                http://www.opensource.org/licenses/gpl-license
# Copyright 2003 James Bursa <bursa@users.sourceforge.net>
#

$out = shift or die "usage: makeenum leafname";

open H, ">$out.h" or die "open 'enum.h' failed";
open C, ">$out.c" or die "open 'enum.c' failed";

print C "#include <strings.h>\n";
print C "#include \"$out.h\"\n\n";

while (<>) {
    chomp;
    @enum = split;
    $name = shift @enum;
   
    @uc_enum = map uc, @enum;
    s/-/_/g foreach (@uc_enum);
    $uc_name = uc $name;
    
    print H "extern const char * const ${name}_name[];\n";
    print H "typedef enum {\n	${uc_name}_";
    print H join ",\n	${uc_name}_", @uc_enum;
    print H ",\n	${uc_name}_UNKNOWN";
    print H ",\n	${uc_name}_NOT_SET\n";
    print H "} $name;\n";
    print H "$name ${name}_parse(const char * const s, int length);\n\n";
    
    print C "/**\n * $name\n */\n\n";
    print C "const char * const ${name}_name[] = {\n	\"";
    print C join "\",\n	\"", @enum;
    print C "\"\n};\n\n";
    print C "$name ${name}_parse(const char * const s, int length)\n{\n";
    foreach $x (@enum) {
        $ux = uc $x;
	$ux =~ s/-/_/g;
	$len = length $x;
        print C "	if (length == $len && strncasecmp(s, \"$x\", $len) == 0) return ${uc_name}_$ux;\n";
    }
    print C "	return ${uc_name}_UNKNOWN;\n}\n\n";
}