⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dep.pl

📁 tommath库
💻 PL
字号:
#!/usr/bin/perl ## Walk through source, add labels and make classes##use strict;my %deplist;#open class file and write preamble 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;   # convert filename to upper case so we can use it as a define    $define =~ tr/[a-z]/[A-Z]/;   $define =~ tr/\./_/;   print CLASS "#define $define\n";   # now copy text and apply #ifdef as required    my $apply = 0;   open(SRC, "<$filename");   open(OUT, ">tmp");   # first line will be the #ifdef   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";# now do classes foreach my $filename (glob "bn*.c") {   open(SRC, "<$filename") or die "Can't open source file!\n";    # convert filename to upper case so we can use it as a define    $filename =~ tr/[a-z]/[A-Z]/;   $filename =~ tr/\./_/;   print CLASS "#if defined($filename)\n";   my $list = $filename;   # scan for mp_* and make classes   while (<SRC>) {      my $line = $_;      while ($line =~ m/(fast_)*(s_)*mp\_[a-z_0-9]*/) {          $line = $';          # now $& is the match, we want to skip over LTM keywords like          # mp_int, mp_word, mp_digit          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;#now let's make a cool call graph... 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;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -