/* Looks for multiedges and loops, and output
 * those found along with counts. If the -d flag
 * is given, edge direction is taken into account.
 */
BEGIN{
  char* ename; 
  char* n; 
  int doDir, cnt[]; 
  int loopcnt[];
  int nloops, nmulti;
  if ((ARGC > 0) && (ARGV[0] == "-d"))
    doDir = 1;
  else
    doDir = 0;
}
BEG_G{unset(cnt); unset(loopcnt); nloops = nmulti = 0;}
E{
  if (doDir || (tail.name <= head.name)) ename=tail.name+"_"+head.name;
  else ename = head.name+"_"+tail.name;
  if (tail == head) {
    loopcnt[ename] += 1;
    if (loopcnt[ename] == 1) nloops += 1;
  }
  else {
    cnt[ename] += 1;
    if (cnt[ename] == 2) nmulti += 1;
  }
}
END_G{
  printf ("graph %s: %d loops %d multiedges\n", $.name, nloops, nmulti);
  for (cnt[n]) {
    if (cnt[n] > 1)
      printf ("%s : %d\n", n, cnt[n]);
  }
  for (loopcnt[n]) {
    if (loopcnt[n] > 0)
      printf ("%s : %d\n", n, loopcnt[n]);
  }
}

