ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/utils/mktable.script
Revision: 1.2
Committed: Mon Mar 5 19:03:09 2007 UTC (17 years, 2 months ago) by root
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +0 -0 lines
State: FILE REMOVED
Log Message:
major clenaup in utils/

File Contents

# Content
1 #!/usr/bin/perl
2 # mktable - generate:
3 # 1. struct <def-file>_type
4 # 2. table <def-file>_table
5 # 3. table size <def-file>_size
6 # 3. enum-list <def-file>_enum, enumerator from given names
7 # from one definition file
8 #
9 # definition file:
10 # ^# hashes are allowed as comments in begining of line
11 # ^# first line declares type-member pairs separated by slash
12 # ^# typenames have to be in one part eg. "struct type" don't
13 # ^# work, typedef these instead.
14 # ^ type1/member1 type2/memeber2
15 # ^
16 # ^# in data lines, exist first name of row and then members
17 # ^# of struct in order. The name may not enclose in "'s althought
18 # ^# its type is char *.
19 # ^ name member1 member2
20 # ^ name ... ...
21 # ^ ...
22 #
23
24 if( ! $ARGV[0] ) {
25 print "Usage: mktable definition-file\n";
26 exit(2);
27 } else {
28 $def = $ARGV[0];
29 }
30
31 open(DEF,$def) || die("Can't open ".$def);
32 $line = 0;
33 $elems = 0;
34 %table;
35
36 print "/* should not be modified */\n\n";
37 &loop;
38
39 sub loop {
40 while(<DEF>) {
41 chop;
42 next if /^$/;
43 next if /^[\t ]*#/;
44 $line++;
45 @tuple = split;
46 shift @tuple if $tuple[0] eq "";
47 if($line == 1) {
48 print "typedef struct {\n";
49 print "\tchar\t*key;\n";
50 foreach $field (@tuple) {
51 # print "\"$field\"\n";
52 last if $field eq "empty";
53 ($type,$mem) = split(/\//,$field);
54 print "\t$type\t$mem;\n";
55 }
56 print "} ".$def."_type;\n\n";
57 } else {
58 $elems++;
59 $key = shift(@tuple);
60 $val = join(":",@tuple);
61 $table{$key} = $val;
62 }
63 }
64 # size
65 print "#define\t".$def."_size\t$elems\n\n";
66 # table
67 print "/* sorted */\n";
68 print $def."_type ".$def."_table[] = {\n";
69 foreach $key (sort(keys(%table))) {
70 print "\t\"$key\",\t";
71 foreach $mem (split(/:/,$table{$key})) {
72 print "$mem,\t";
73 }
74 print "\n";
75 }
76 print "}; /* ".$def."_table */\n\n";
77 # enum
78 print "typedef enum {\n";
79 foreach $key (sort(keys(%table))) {
80 print "\tinput_".$key.",\n";
81 }
82 print "} "."$def"."_enum;\n\n";
83 }
84
85
86
87
88
89
90