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