summaryrefslogtreecommitdiffstats
path: root/src/perl/get-signals.pl
diff options
context:
space:
mode:
Diffstat (limited to 'src/perl/get-signals.pl')
-rwxr-xr-xsrc/perl/get-signals.pl83
1 files changed, 83 insertions, 0 deletions
diff --git a/src/perl/get-signals.pl b/src/perl/get-signals.pl
new file mode 100755
index 0000000..f7675f1
--- /dev/null
+++ b/src/perl/get-signals.pl
@@ -0,0 +1,83 @@
+#!/usr/bin/perl
+
+print "/*\n";
+print " * Autogenerated by get-signals.pl from ../../doc/signals.txt,\n";
+print " * do not edit.\n";
+print " */\n\n";
+print "static PERL_SIGNAL_ARGS_REC perl_signal_args[] =\n{\n";
+
+while (<>) {
+ chomp;
+
+ next if (!/^ "([^"]*)"(<.*>)?(?:,\s*(.*))?/);
+ next if (/\.\.\./);
+ next if (/\(/);
+
+ $signal = $1;
+ $_ = $3;
+
+ s/GList \* of ([^,]*)s/glistptr_\1/g;
+ s/GSList of ([^,]*)s/gslist_\1/g;
+
+ s/GString \*[^,]*/gstring/g;
+
+ s/char \*[^,]*/string/g;
+ s/ulong \*[^,]*/ulongptr/g;
+ s/int \*[^,]*/intptr/g;
+ s/int [^,]*/int/g;
+
+
+ my %map = (
+ # core
+ CHATNET_REC => 'iobject',
+ SERVER_REC => 'iobject',
+ RECONNECT_REC => 'iobject',
+ CHANNEL_REC => 'iobject',
+ QUERY_REC => 'iobject',
+ COMMAND_REC => 'Irssi::Command',
+ NICK_REC => 'iobject',
+ LOG_REC => 'Irssi::Log',
+ RAWLOG_REC => 'Irssi::Rawlog',
+ IGNORE_REC => 'Irssi::Ignore',
+ MODULE_REC => 'Irssi::Module',
+ TLS_REC => 'iobject',
+
+ # irc
+ BAN_REC => 'Irssi::Irc::Ban',
+ NETSPLIT_REC => 'Irssi::Irc::Netsplit',
+ NETSPLIT_SERVER_REC => 'Irssi::Irc::Netsplitserver',
+
+ # irc modules
+ DCC_REC => 'siobject',
+ AUTOIGNORE_REC => 'Irssi::Irc::Autoignore',
+ NOTIFYLIST_REC => 'Irssi::Irc::Notifylist',
+ CLIENT_REC => 'Irssi::Irc::Client',
+
+ # fe-common
+ THEME_REC => 'Irssi::UI::Theme',
+ KEYINFO_REC => 'Irssi::UI::Keyinfo',
+ PROCESS_REC => 'Irssi::UI::Process',
+ TEXT_DEST_REC => 'Irssi::UI::TextDest',
+ LINE_INFO_META_REC => 'Irssi::UI::LineInfoMeta',
+ WINDOW_REC => 'Irssi::UI::Window',
+ WI_ITEM_REC => 'iobject',
+
+ # fe-text
+ TEXTBUFFER_VIEW_REC => 'Irssi::TextUI::TextBufferView',
+ LINE_REC => 'Irssi::TextUI::Line',
+
+ # perl
+ PERL_SCRIPT_REC => 'Irssi::Script',
+ );
+ my $k = join '|', sort { length $b <=> length $a } keys %map;
+ s/($k)[^,]*/$map{$1}/g;
+
+ s/([\w\*:]+)(,|$)/"\1"\2/g;
+ if ($_ eq "") {
+ print " { \"$signal\", { NULL } },\n";
+ } else {
+ print " { \"$signal\", { $_, NULL } },\n";
+ }
+}
+
+print "\n { NULL }\n};\n";