1#!/usr/bin/perl -w
2
3# Usage: ./enum2debug.pl isakmp.h  >vpnc-debug.c 2>vpnc-debug.h
4
5use strict;
6
7my $in_enum = 0;
8my $element;
9my $arrayname;
10
11print STDERR << 'EOF';
12/* Automatically generated with enum2debug.pl: Don't edit! */
13
14struct debug_strings {
15	unsigned int id;
16	const char *string;
17};
18
19extern const char *val_to_string(unsigned int, const struct debug_strings *);
20
21EOF
22
23print << 'EOF';
24/* Automatically generated with enum2debug.pl: Don't edit! */
25
26#include <stdio.h>
27
28#include "vpnc-debug.h"
29#include "isakmp.h"
30
31const char *val_to_string(unsigned int val, const struct debug_strings *dstrings)
32{
33	static const char *unknown = " (unknown)";
34	static const char *na = "";
35	unsigned int i;
36
37	if (dstrings == NULL)
38		return na;
39
40	for (i = 0; dstrings[i].id != 0 || dstrings[i].string != NULL; i++)
41		if (dstrings[i].id == val)
42			return dstrings[i].string;
43	return unknown;
44}
45
46EOF
47
48while (<>) {
49	if (/^enum\W+(\w+)\W*/) {
50		print STDERR "extern const struct debug_strings $1_array[];\n";
51		print "const struct debug_strings $1_array[] = {\n";
52		$in_enum = 1;
53	} elsif ($in_enum && /^}/) {
54		print "\t{ 0,\t(const char *) 0 }\n};\n\n";
55		$in_enum = 0;
56	} elsif ($in_enum && /^\W*(\w+)\W*/) {
57		print "\t{ $1,\t\" ($1)\" },\n";
58	}
59}
60
61exit 0;
62
63__END__
64