Blame manual/tsort.awk

Packit 6c4009
#!/usr/bin/awk -f
Packit 6c4009
# Generate topologically sorted list of manual chapters.
Packit 6c4009
# Copyright (C) 1998-2018 Free Software Foundation, Inc.
Packit 6c4009
# Written by Ulrich Drepper <drepper@cygnus.com>, 1998.
Packit 6c4009
Packit 6c4009
BEGIN {
Packit 6c4009
  cnt = 0
Packit 6c4009
  dnt = 0
Packit 6c4009
}
Packit 6c4009
{
Packit 6c4009
  to[dnt] = $1
Packit 6c4009
  from[dnt] = $2
Packit 6c4009
  ++dnt
Packit 6c4009
  all[cnt++] = $1
Packit 6c4009
}
Packit 6c4009
END {
Packit 6c4009
  do {
Packit 6c4009
    moved = 0
Packit 6c4009
    for (i = 0; i < dnt; ++i) {
Packit 6c4009
      for (j = 0; j < cnt; ++j) {
Packit 6c4009
	if (all[j] == from[i]) {
Packit 6c4009
	  for (k = j + 1; k < cnt; ++k) {
Packit 6c4009
	    if (all[k] == to[i]) {
Packit 6c4009
	      break;
Packit 6c4009
	    }
Packit 6c4009
	  }
Packit 6c4009
	  if (k < cnt) {
Packit 6c4009
	    for (l = k - 1; l >= j; --l) {
Packit 6c4009
	      all[l + 1] = all[l]
Packit 6c4009
	    }
Packit 6c4009
	    all[j] = to[i]
Packit 6c4009
	    break;
Packit 6c4009
	  }
Packit 6c4009
	}
Packit 6c4009
      }
Packit 6c4009
      if (j < cnt) {
Packit 6c4009
	moved = 1
Packit 6c4009
	break
Packit 6c4009
      }
Packit 6c4009
    }
Packit 6c4009
  } while (moved)
Packit 6c4009
Packit 6c4009
  for (i = 0; i < cnt; ++i) {
Packit 6c4009
    print all[i];
Packit 6c4009
  }
Packit 6c4009
}