#!/usr/bin/perl sub emit { return unless $in =~ /\n$_[0] /s; ($s = "\n$`") =~ s/\n\d+ /\n/gs; return unless $s =~ m#/\*\s*(([^*]|\*[^/])*)\*/[^\n]*$|//\s*(([^\n]*\n\s*//)*[^\n]*)$#s; ($s = defined $1 ? $1 : $3) =~ s/\n\s*/\n# /sg; $s =~ s#\s*//\s*# #; print "# $s\n" || die "stdout: $!"; } open(FILE,$ARGV[$#ARGV]) || die "$ARGV[$#ARGV]: $!"; while () { $in .= "$. $_"; } close FILE; print "out: $in\n"; open(PIPE,"tcc -l $$.out ".join(" ",@ARGV)."|") || die "tcc: $!"; @out = ; close PIPE; exit $? if $?; open(FILE,"$$.out") || die "$$.out: $!"; for () { $q{$1} = $2 if /^qdisc [^:]+:(\S+) .* (\d+)$/; $c{$1} = $2 if /^class [^:]+:(\S+) .* (\d+)$/; } close FILE; unlink "$$.out" || warn "unlink $$.out: $!"; for (@out) { &emit($q{$1}) if /^tc qdisc .* handle (\d+):0/; &emit($c{$1}) if /^tc class .* classid (\d+:\d+)/; print $_ || die "stdout: $!"; }