#!/usr/bin/perl
my
%deplist
;
open
(CLASS,
">tommath_class.h"
) or
die
"Couldn't open tommath_class.h for writing\n"
;
print
CLASS
"#if !(defined(LTM1) && defined(LTM2) && defined(LTM3))\n#if defined(LTM2)\n#define LTM3\n#endif\n#if defined(LTM1)\n#define LTM2\n#endif\n#define LTM1\n\n#if defined(LTM_ALL)\n"
;
foreach
my
$filename
(
glob
"bn*.c"
) {
my
$define
=
$filename
;
print
"Processing $filename\n"
;
$define
=~
tr
/[a-z]/[A-Z]/;
$define
=~
tr
/\./_/;
print
CLASS
"#define $define\n"
;
my
$apply
= 0;
open
(SRC,
"<$filename"
);
open
(OUT,
">tmp"
);
my
$line
= <SRC>;
if
(
$line
=~ /include/) {
print
OUT
$line
;
}
else
{
print
OUT
"#include <tommath.h>\n#ifdef $define\n$line"
;
$apply
= 1;
}
while
(<SRC>) {
if
(!(
$_
=~ /tommath\.h/)) {
print
OUT
$_
;
}
}
if
(
$apply
== 1) {
print
OUT
"#endif\n"
;
}
close
SRC;
close
OUT;
unlink
(
$filename
);
rename
(
"tmp"
,
$filename
);
}
print
CLASS
"#endif\n\n"
;
foreach
my
$filename
(
glob
"bn*.c"
) {
open
(SRC,
"<$filename"
) or
die
"Can't open source file!\n"
;
$filename
=~
tr
/[a-z]/[A-Z]/;
$filename
=~
tr
/\./_/;
print
CLASS
"#if defined($filename)\n"
;
my
$list
=
$filename
;
while
(<SRC>) {
my
$line
=
$_
;
while
(
$line
=~ m/(fast_)*(s_)
*mp
\_[a-z_0-9]*/) {
$line
= $';
if
(!($& eq
"mp_digit"
) && !($& eq
"mp_word"
) && !($& eq
"mp_int"
)) {
my
$a
= $&;
$a
=~
tr
/[a-z]/[A-Z]/;
$a
=
"BN_"
.
$a
.
"_C"
;
if
(!(
$list
=~ /
$a
/)) {
print
CLASS
" #define $a\n"
;
}
$list
=
$list
.
","
.
$a
;
}
}
}
@deplist
{
$filename
} =
$list
;
print
CLASS
"#endif\n\n"
;
close
SRC;
}
print
CLASS
"#ifdef LTM3\n#define LTM_LAST\n#endif\n#include <tommath_superclass.h>\n#include <tommath_class.h>\n#else\n#define LTM_LAST\n#endif\n"
;
close
CLASS;
open
(OUT,
">callgraph.txt"
);
$indent
= 0;
foreach
(
keys
%deplist
) {
$list
=
""
;
draw_func(
@deplist
{
$_
});
print
OUT
"\n\n"
;
}
close
(OUT);
sub
draw_func()
{
my
@funcs
=
split
(
","
,
$_
[0]);
if
(
$list
=~ /
@funcs
[0]/) {
return
;
}
else
{
$list
=
$list
.
@funcs
[0];
}
if
(
$indent
== 0) { }
elsif
(
$indent
>= 1) {
print
OUT
"| "
x (
$indent
- 1) .
"+--->"
; }
print
OUT
@funcs
[0] .
"\n"
;
shift
@funcs
;
my
$temp
=
$list
;
foreach
my
$i
(
@funcs
) {
++
$indent
;
draw_func(
@deplist
{
$i
});
--
$indent
;
}
$list
=
$temp
;
}