1#!/usr/bin/perl
2
3print "/*\n";
4print " * Autogenerated by get-signals.pl from ../../doc/signals.txt,\n";
5print " * do not edit.\n";
6print " */\n\n";
7print "static PERL_SIGNAL_ARGS_REC perl_signal_args[] =\n{\n";
8
9while (<STDIN>) {
10	chomp;
11
12	next if (!/^ "([^"]*)"(<.*>)?(?:,\s*(.*))?/);
13	next if (/\.\.\./);
14	next if (/\(/);
15
16	$signal = $1;
17	$_ = $3;
18
19	s/GList \* of ([^,]*)/glistptr_\1/g;
20	s/GSList of (\w+)s/gslist_\1/g;
21
22	s/char \*[^,]*/string/g;
23	s/ulong \*[^,]*/ulongptr/g;
24	s/int \*[^,]*/intptr/g;
25	s/int [^,]*/int/g;
26
27	my %map = (
28		# core
29		CHATNET_REC   => 'iobject',
30		SERVER_REC    => 'iobject',
31		RECONNECT_REC => 'iobject',
32		CHANNEL_REC   => 'iobject',
33		QUERY_REC     => 'iobject',
34		COMMAND_REC   => 'Irssi::Command',
35		NICK_REC      => 'iobject',
36		LOG_REC	      => 'Irssi::Log',
37		RAWLOG_REC    => 'Irssi::Rawlog',
38		IGNORE_REC    => 'Irssi::Ignore',
39		MODULE_REC    => 'Irssi::Module',
40		TLS_REC       => 'iobject',
41
42		# irc
43		BAN_REC		    => 'Irssi::Irc::Ban',
44		NETSPLIT_REC	    => 'Irssi::Irc::Netsplit',
45		NETSPLIT_SERVER_REC => 'Irssi::Irc::Netsplitserver',
46
47		# irc modules
48		DCC_REC	       => 'siobject',
49		AUTOIGNORE_REC => 'Irssi::Irc::Autoignore',
50		NOTIFYLIST_REC => 'Irssi::Irc::Notifylist',
51		CLIENT_REC     => 'Irssi::Irc::Client',
52
53		# fe-common
54		THEME_REC     => 'Irssi::UI::Theme',
55		KEYINFO_REC   => 'Irssi::UI::Keyinfo',
56		PROCESS_REC   => 'Irssi::UI::Process',
57		TEXT_DEST_REC => 'Irssi::UI::TextDest',
58		WINDOW_REC    => 'Irssi::UI::Window',
59		WI_ITEM_REC   => 'iobject',
60
61		# fe-text
62		TEXTBUFFER_VIEW_REC => 'Irssi::TextUI::TextBufferView',
63		LINE_REC	    => 'Irssi::TextUI::Line',
64
65		# perl
66		PERL_SCRIPT_REC => 'Irssi::Script',
67	);
68	my $k = join '|', sort { length $b <=> length $a } keys %map;
69	s/($k)[^,]*/$map{$1}/g;
70
71	s/([\w\*:]+)(,|$)/"\1"\2/g;
72	if ($_ eq "") {
73		print "	   { \"$signal\", { NULL } },\n";
74	} else {
75		print "	   { \"$signal\", { $_, NULL } },\n";
76	}
77}
78
79print "\n    { NULL }\n};\n";
80