Martin Rex wrote:
> Dearlove, Christopher (UK) wrote:
> >
> > I'd actually tried the authors, but no reply yet (only a few days).
> > I also tried the RFC Editor thinking they might have e.g. XML
> > from which extraction might have been easier, but also no response yet.
>
> Extracting code from text is pretty trivial.
>
> Use copy&paste from the output of below simple perl script
> (which removes the pagebreaks):
Modified script which also does the extraction of the files
into the current directory as well (below).
cc -c shatest.c sha1.c sha224-256.c sha384-512.c usha.c hmac.c hkdf.c
cc -o shatest shatest.o sha1.o sha224-256.o sha384-512.o usha.o hmac.o hkdf.o
./shatest
it seems to work (for me on Linux, at least)
-Martin
#!/usr/bin/perl
#
$rfcnum="6234";
$footerpattern="^Eastlake";
$headerpattern="^RFC ${rfcnum}";
$url = "http://tools.ietf.org/rfc/rfc${rfcnum}.txt";
open(IN,"curl '${url}'|")
|| die("Download of \"$url\" failed: $!\n");
@origdoc = <IN>;
close(IN);
@doc = ();
$show = 2;
$fname = "";
@file = ();
foreach $line ( @origdoc ) {
$line =~ tr/\r\n//d;
if ( $line =~ m/${footerpattern}/io ) {
$show = 0;
while ( $#doc >=0 && "" eq $doc[$#doc] ) {
pop(@doc);
}
while ( $#file>=0 && "" eq $file[$#file] ) {
pop(@file);
}
}
if ( $show>0 ) {
if ( 2==$show || $line ne "" ) {
push(@doc, $line);
$show = 2;
if ( $fname eq "" && $line =~ m#^/\*\*.* (\w.+) \*\*#io ) {
$fname = $1;
$fname =~ tr/a-zA-Z0-9._-//cd;
@file = ();
}
if ( "" ne $fname ) {
if ( $line =~ m/^\d/io ) {
$filedata = join("\n",@file) . "\n";
$filelen = length($filedata);
printf("Writing file \"$fname\" (len=${filelen})\n");
open(OUT,">$fname")
|| die("Could not write file \"$fname\": $!\n");
print OUT $filedata;
close(OUT);
$fname = "";
} else {
push(@file, $line);
}
}
}
}
if ( 0==$show && $line =~ m/${headerpattern}/io ) {
$show = 1;
}
}
# print join("\n",@doc), "\n";