118 lines
2.3 KiB
Perl
Executable File
118 lines
2.3 KiB
Perl
Executable File
#!/usr/bin/perl -w
|
|
|
|
use strict;
|
|
|
|
sub handle_comment {
|
|
my ($comment) = @_;
|
|
|
|
my $next_line;
|
|
do {
|
|
$next_line = <INFILE>;
|
|
chomp $next_line;
|
|
$comment .= $next_line . "\n";
|
|
} until ( $next_line =~ m/\*\// );
|
|
|
|
return $comment;
|
|
}
|
|
|
|
sub handle_define {
|
|
my ( $var, $val ) = @_;
|
|
open( OUTFILE, ">define/$var" );
|
|
print OUTFILE $val;
|
|
close(OUTFILE);
|
|
}
|
|
|
|
sub handle_multiline {
|
|
my ( $dir, $filename, $line_orig, $last_comment ) = @_;
|
|
|
|
open( OUTFILE, ">$dir/$filename" );
|
|
|
|
#print OUTFILE "\\scriptsize\n";
|
|
print OUTFILE "\\begin{footnotesize}\n";
|
|
print OUTFILE "\\begin{verbatim}\n";
|
|
|
|
#print OUTFILE "\\begin{lstlisting}[frame=htb]{$filename}\n";
|
|
print OUTFILE $last_comment;
|
|
print OUTFILE $line_orig;
|
|
my $next_line;
|
|
do {
|
|
|
|
$next_line = <INFILE>;
|
|
chomp $next_line;
|
|
|
|
print OUTFILE $next_line . "\n";
|
|
|
|
} until ( $next_line eq '};' );
|
|
|
|
# add assertion line for structs
|
|
if ( $dir eq 'struct' ) {
|
|
$next_line = <INFILE>;
|
|
print OUTFILE $next_line;
|
|
}
|
|
print OUTFILE "\\end{verbatim}\n";
|
|
|
|
#print OUTFILE "\\end{lstlisting}\n";
|
|
print OUTFILE "\\end{footnotesize}\n";
|
|
close(OUTFILE);
|
|
}
|
|
|
|
#----------------------------------------
|
|
use File::Path;
|
|
|
|
foreach my $type ( 'enum', 'struct', 'define' ) {
|
|
if ( -d $type ) {
|
|
rmtree($type);
|
|
}
|
|
mkdir $type;
|
|
}
|
|
|
|
open( INFILE, "<../../include/openflow/openflow.h" );
|
|
|
|
my $last_comment;
|
|
while (<INFILE>) {
|
|
|
|
# Good practice to store $_ value because
|
|
# subsequent operations may change it.
|
|
my ($line) = $_;
|
|
my $line_orig = $line;
|
|
my @line_split = split ' ', $line;
|
|
|
|
if ( not defined( $line_split[0] ) ) {
|
|
$last_comment = '';
|
|
}
|
|
|
|
# Handle single-line comment
|
|
elsif ( $line =~ m/^\/\*.*\*\// ) {
|
|
$last_comment = $line;
|
|
|
|
#print $last_comment;
|
|
}
|
|
|
|
# Handle multi-line comment
|
|
elsif ( $line =~ m/^\/\*/ ) {
|
|
$last_comment = handle_comment($line_orig);
|
|
|
|
#print $last_comment;
|
|
}
|
|
|
|
# Handle define
|
|
elsif ( $line_split[0] eq '#define' ) {
|
|
handle_define( $line_split[1], $line_split[2] );
|
|
$last_comment = '';
|
|
}
|
|
|
|
# Handle enum
|
|
elsif ( $line_split[0] eq 'enum' ) {
|
|
handle_multiline( 'enum', $line_split[1], $line_orig, $last_comment );
|
|
$last_comment = '';
|
|
}
|
|
|
|
# Handle struct
|
|
elsif ( $line_split[0] eq 'struct' ) {
|
|
handle_multiline( 'struct', $line_split[1], $line_orig, $last_comment );
|
|
$last_comment = '';
|
|
}
|
|
|
|
}
|
|
print "completed\n";
|