fsm-dot.awk

来自「一个著名的SIP协议栈」· AWK 代码 · 共 38 行

AWK
38
字号
# For making the Preparse FSM diagram
BEGIN {
  if ( output == "Preparse.ps" )
  {
    doSpecial = 1;
  }
  printf "digraph pp_fsm {\nsize=\"10,8\"\n";
  if ( doSpecial ) 
    {
      printf "rotate=90\n";
      printf "ratio=0.8\n";
    }
  printf "compound=true\nfontsize=18\nfontname=\"Helvetica\"\n";
  printf "node [ fontname=\"Helvetica\" ]\n";
  printf "graph	[\nfontsize=8\nfontname=\"Helvetica\"\nlabelfontsize=8\n";
  printf "labelfontname=\"Helvetica\"\n]\n";
  printf "edge\n[\nfontname=\"Helvetica\"\nfontsize=8\n	arrowhead=normal\n]\n";
}

/^[ ]*AE\(/ {
  line = gensub("\/\/.*$","",g);
  line = gensub("^[ ]*AE\\(","","g",line);
  line = gensub("[\);]","","g",line);
  line = gensub("act","","g",line);

  split(line,f,",");

  if (f[3] == "XC") f[3] = "*";

  if (f[2] != "X")
    printf "%s -> %s [ label=\"%s, %s (%s)\"]\n", f[1], f[4], f[3], f[5], f[2];
  else
    printf "%s -> %s [ label=\"%s, %s\"]\n", f[1], f[4], f[3], f[5];
}
END {
  print "}";
};

⌨️ 快捷键说明

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