mcpls-core 0.8.0

Core library for MCP to LSP protocol translation
Documentation
function num(s) { return s ~ /^[0-9]+$/ }
NF == 3 && num($1) && num($2) && num($3) && $1 + 0 > 1 {
  p = $1 + 0
  pp[p] = $2 + 0
  pg[p] = $3 + 0
  seen[p] = 1
}
END {
  if (grp + 0 <= 1 || self + 0 <= 1) exit
  inS[self + 0] = 1
  do {
    changed = 0
    for (p in seen) if (!(p in inS) && (pp[p] in inS)) { inS[p] = 1; changed = 1 }
  } while (changed)
  par = parent + 0
  mpg = (par in seen) ? pg[par] : 0
  for (p in seen) {
    if (p in inS || p == par) continue
    if (pg[p] == grp + 0 || (leader != "" && p == leader + 0)) inD[p] = 1
  }
  do {
    changed = 0
    for (p in seen) if (!(p in inD) && !(p in inS) && p != par && (pp[p] in inD)) { inD[p] = 1; changed = 1 }
  } while (changed)
  for (p in inD) {
    g = pg[p]
    if (g == grp + 0 || g == self + 0) continue
    if (g > 1 && g != mpg && (g in inD)) {
      if (!(g in done)) { done[g] = 1; print "group", g }
    } else print "pid", p
  }
}