+spgrp(top, npgrp)
+register struct proc *top;
+{
+ register struct proc *pp, *p;
+ int f = 0;
+
+ for (p = top; npgrp == -1 || u.u_uid == p->p_uid ||
+ !u.u_uid || inferior(p); p = pp) {
+ if (npgrp == -1) {
+#define bit(a) (1<<(a-1))
+ p->p_sig &= ~(bit(SIGTSTP)|bit(SIGTTIN)|bit(SIGTTOU));
+ } else
+ p->p_pgrp = npgrp;
+ f++;
+ /*
+ * Search for children.
+ */
+ for (pp = proc; pp < procNPROC; pp++)
+ if (pp->p_pptr == p)
+ goto cont;
+ /*
+ * Search for siblings.
+ */
+ for (; p != top; p = p->p_pptr)
+ for (pp = p + 1; pp < procNPROC; pp++)
+ if (pp->p_pptr == p->p_pptr)
+ goto cont;
+ break;
+ cont:
+ ;
+ }
+ return (f);
+}
+