rendered paste body#!/usr/bin/perl -w
# usage:
# cat /path/to/asterisk_source/include/asterisk/causes.h \
# | this_perl_script \
# > /path/to/extensions-include-foo.conf
#
# extensions.conf: (example)
# ...
# #include "/path/to/extensions-include-foo.conf"
# [macro-dial_something]
# ...
# exten => h,1,GoSub(ast_hangup_causes,hc-${HANGUPCAUSE},1)
# exten => h,n,NoOp(Hangup cause was ${HANGUPREASON})
# ...
use strict;
use vars qw( $trash $reason $code );
print <<_EOM ;
[ast_hangup_causes]
;
; Sets the variable HANGUPREASON
_EOM
while(<>) {
chop; s/^\s+//; s/\s+$//;
next unless (/^#define\s+AST_CAUSE/o && /\d+$/o);
($trash,$reason,$code) = split(/\s+/, $_);
$reason =~ s/^AST_CAUSE_//;
print <<_EOM ;
;
exten => hc-$code,1,Set(HANGUPREASON=$reason)
exten => hc-$code,n,Return()
_EOM
}
print <<_EOM ;
;
exten => hc-.,1,Set(HANGUPREASON=REASON_\${EXTEN:3}_NOTINLIST)
exten => hc-.,n,Return()
_EOM
exit $?