sigtable
sigtable[sig].s_flag |= SSET;
sigtable[sig].s_func = func;
if ((sigtable[sig].s_flag & SHELD) == 0)
sigtable[sig].s_flag &= ~SDEFER;
if (sigtable[sig].s_flag & SHELD)
sigtable[sig].s_flag |= SSET;
sigtable[sig].s_flag |= SHELD;
if ((sigtable[sig].s_flag & SHELD) == 0)
sigtable[sig].s_flag &= ~SHELD;
if (sigtable[sig].s_flag & SDEFER)
if (sigtable[sig].s_func == SIG_DFL)
sigtable[sig].s_flag |= SHELD|SPAUSE;
sigtable[sig].s_flag &= ~SPAUSE;
sigtable[sig].s_flag |= SDEFER;
if (sigtable[i].s_flag & SHELD)
if ((sigtable[sig].s_flag & SSET) == 0) {
sigtable[sig].s_func = old;
sigtable[sig].s_flag |= SSET;
return(sigtable[sig].s_func);
if (sigtable[sig].s_flag & SPAUSE)
if (sigtable[sig].s_flag & SHELD) {
sigtable[sig].s_flag |= SDEFER;
if (sigtable[sig].s_func == SIG_IGN)
if (sigtable[sig].s_func == SIG_DFL) {
sigtable[sig].s_flag &= ~SDEFER;
sigtable[sig].s_flag |= SHELD;
(*sigtable[sig].s_func)(sig);
sigtable[sig].s_flag &= ~SHELD;
if (sigtable[sig].s_flag & SDEFER)
} sigtable[NSIG + 1];