ki.num_width + ki.name_width + mess_width + 3);
ki.num_width + ki.name_width + mess_width + 3, 1);
c_kill(wp)	char **wp;{	Trap *t = (Trap *) 0;	char *p;	int lflag = 0;	int i, n, rv, sig;	/* assume old style options if -digits or -UPPERCASE */	if ((p = wp[1]) && *p == '-' && (digit(p[1]) || isupper(p[1]))) {		if (!(t = gettrap(p + 1, TRUE))) {			bi_errorf("bad signal `%s'", p + 1);			return 1;		}		i = (wp[2] && strcmp(wp[2], "--") == 0) ? 3 : 2;	} else {		int optc;		while ((optc = ksh_getopt(wp, &builtin_opt, "ls:")) != EOF)			switch (optc) {			  case 'l':				lflag = 1;				break;			  case 's':				if (!(t = gettrap(builtin_opt.optarg, TRUE))) {					bi_errorf("bad signal `%s'",						builtin_opt.optarg);					return 1;				}				break;			  case '?':				return 1;			}		i = builtin_opt.optind;	}	if ((lflag && t) || (!wp[i] && !lflag)) {		shf_fprintf(shl_out,"Usage: kill [ -s signame | -signum | -signame ] {pid|job}...\n\       kill -l [exit_status]\n"			);		bi_errorf(null);		return 1;	}	if (lflag) {		if (wp[i]) {			for (; wp[i]; i++) {				if (!bi_getn(wp[i], &n))					return 1;				if (n > 128 && n < 128 + SIGNALS)					n -= 128;				if (n > 0 && n < SIGNALS && sigtraps[n].name)					shprintf("%s\n", sigtraps[n].name);				else					shprintf("%d\n", n);			}		} else if (Flag(FPOSIX)) {			p = null;			for (i = 1; i < SIGNALS; i++, p = space)				if (sigtraps[i].name)					shprintf("%s%s", p, sigtraps[i].name);			shprintf(newline);		} else {			int w, i;			int mess_width;			struct kill_info ki;			for (i = SIGNALS, ki.num_width = 1; i >= 10; i /= 10)				ki.num_width++;			ki.name_width = mess_width = 0;			for (i = 0; i < SIGNALS; i++) {				w = sigtraps[i].name ? strlen(sigtraps[i].name)						     : ki.num_width;				if (w > ki.name_width)					ki.name_width = w;				w = strlen(sigtraps[i].mess);				if (w > mess_width)					mess_width = w;			}			print_columns(shl_stdout, SIGNALS - 1,				kill_fmt_entry, (void *) &ki,				ki.num_width + ki.name_width + mess_width + 3);		}		return 0;	}	rv = 0;	sig = t ? t->signal : SIGTERM;	for (; (p = wp[i]); i++) {		if (*p == '%') {			if (j_kill(p, sig))				rv = 1;		} else if (!getn(p, &n)) {			bi_errorf("%s: arguments must be jobs or process ids",				p);			rv = 1;		} else {			/* use killpg if < -1 since -1 does special things for			 * some non-killpg-endowed kills			 */			if ((n < -1 ? killpg(-n, sig) : kill(n, sig)) < 0) {				bi_errorf("%s: %s", p, strerror(errno));				rv = 1;			}		}	}	return rv;}