Blame manual/xtract-typefun.awk

Packit 6c4009
#!/usr/local/bin/gawk -f
Packit 6c4009
BEGIN {
Packit 6c4009
  last_node="";
Packit 6c4009
}
Packit 6c4009
Packit 6c4009
/^@node/ {
Packit 6c4009
  name = $0;
Packit 6c4009
  sub(/^@node +/, "", name);
Packit 6c4009
  sub(/[@,].*$/, "", name);
Packit 6c4009
  last_node = name;
Packit 6c4009
}
Packit 6c4009
Packit 6c4009
/^@deftype(fn|vr)/ {
Packit 6c4009
# The string we want is $4, except that if there were brace blocks
Packit 6c4009
# before that point then it gets shifted to the right, since awk
Packit 6c4009
# doesn't know from brace blocks.
Packit 6c4009
  id = 4; check = 2; squig = 0;
Packit 6c4009
  while(check < id)
Packit 6c4009
  {
Packit 6c4009
    if($check ~ /{/) squig++;
Packit 6c4009
    if($check ~ /}/) squig--;
Packit 6c4009
    if(squig) id++;
Packit 6c4009
    check++;
Packit 6c4009
  }
Packit 6c4009
Packit 6c4009
  gsub(/[(){}*]/, "", $id);
Packit 6c4009
  printf ("* %s: (libc)%s.\n", $id, last_node);
Packit 6c4009
}
Packit 6c4009
Packit 6c4009
/^@deftypefun/ {
Packit 6c4009
# Likewise, except it's $3 theoretically.
Packit 6c4009
  id = 3; check = 2; squig = 0;
Packit 6c4009
  while(check < id)
Packit 6c4009
  {
Packit 6c4009
    if($check ~ /{/) squig++;
Packit 6c4009
    if($check ~ /}/) squig--;
Packit 6c4009
    if(squig) id++;
Packit 6c4009
    check++;
Packit 6c4009
  }
Packit 6c4009
Packit 6c4009
  gsub(/[(){}*]/, "", $id);
Packit 6c4009
  printf ("* %s: (libc)%s.\n", $id, last_node);
Packit 6c4009
}