while(1) {
while(i < (sizeof(list) / sizeof(list[0]))) {
static char** ParseIMNameList(p, num)    char* p;    int* num;{    char	*s, *save_s, *ss, *list[32], **lp, *end;    int		i = 0;    *num = 0;    if (!p || !*p) return ((char **)NULL);    while (*p && isspace(*p)) p++;    if (!*p) return ((char **)NULL);    if ((s = XtMalloc(strlen(p) + 1)) == NULL) return((char **)NULL);    strcpy(s, p);    save_s = s;    while(1) {	list[i] = s;	ss = index(s, ',');	if (!ss) {	    end = s + strlen(s);	} else {	    end = ss;	}	while (isspace(*end)) end--;	*end = '\0';	i++;	if (!ss) break;	s = ss + 1;	while (*s && isspace(*s)) p++;	if (!*s) break;    }    if ((lp = (char **)XtMalloc(sizeof(char *) * (i + 1))) == NULL) {	XtFree(save_s);	return((char **)NULL);    }    memcpy((char *)lp, (char *)list, sizeof(char *) * i);    *(lp + i) = NULL;    *num = i;    return(lp);}