-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathhook.pl
67 lines (54 loc) · 1.42 KB
/
hook.pl
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
################################################################################
#
# PROGRAM: hook.pl
#
################################################################################
#
# DESCRIPTION: Generate code for CBC hooks
#
################################################################################
#
# Copyright (c) 2002-2020 Marcus Holland-Moritz. All rights reserved.
# This program is free software; you can redistribute it and/or modify
# it under the same terms as Perl itself.
#
################################################################################
use Devel::Tokenizer::C;
my @hooks = qw(
pack
unpack
pack_ptr
unpack_ptr
);
my $file = shift;
if ($file =~ /\.h$/i) {
open OUT, ">$file" or die "$file: $!";
my $hooks = join ",\n", map { " HOOKID_$_" } @hooks;
print OUT <<ENDC;
enum HookId {
$hooks,
HOOKID_COUNT,
HOOKID_INVALID
};
ENDC
close OUT;
}
if ($file =~ /\.c$/i) {
my $switch = Devel::Tokenizer::C->new(TokenFunc => sub { "return HOOKID_$_[0];\n" },
TokenString => 'hook')
->add_tokens(@hooks)->generate;
open OUT, ">$file" or die "$file: $!";
my $s_hookids = join ",\n", map { qq( "$_") } @hooks;
print OUT <<END;
static const char *gs_HookIdStr[] = {
$s_hookids
};
static enum HookId get_hook_id(const char *hook)
{
$switch
unknown:
return HOOKID_INVALID;
}
END
close OUT;
}