#!/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 $?