cp = Var_Subst(cgn->name, &pgn->context, TRUE);
cp = Var_Subst(cgn->name, &pgn->context, true);
SuffExpandVarChildren(after, cgn, pgn)    LstNode	after;    GNode	*cgn;    GNode	*pgn;{    GNode	*gn;		/* New source 8) */    char	*cp;		/* Expanded value */    LIST	members;    if (DEBUG(SUFF))	printf("Expanding \"%s\"...", cgn->name);    cp = Var_Subst(cgn->name, &pgn->context, TRUE);    if (cp == NULL) {	printf("Problem substituting in %s", cgn->name);	printf("\n");	return;    }    Lst_Init(&members);    if (cgn->type & OP_ARCHV) {	/*	 * Node was an archive(member) target, so we want to call	 * on the Arch module to find the nodes for us, expanding	 * variables in the parent's context.	 */	char	*sacrifice = cp;	(void)Arch_ParseArchive(&sacrifice, &members, &pgn->context);    } else {	/* Break the result into a vector of strings whose nodes	 * we can find, then add those nodes to the members list.	 * Unfortunately, we can't use brk_string because it	 * doesn't understand about variable specifications with	 * spaces in them...  */	char	    *start, *cp2;	for (start = cp; *start == ' ' || *start == '\t'; start++)	    continue;	for (cp2 = start; *cp2 != '\0';) {	    if (isspace(*cp2)) {		/* White-space -- terminate element, find the node,		 * add it, skip any further spaces.  */		gn = Targ_FindNode(start, cp2, TARG_CREATE);		cp2++;		Lst_AtEnd(&members, gn);		while (isspace(*cp2))		    cp2++;		/* Adjust cp2 for increment at start of loop, but		 * set start to first non-space.  */		start = cp2;	    } else if (*cp2 == '$')		/* Start of a variable spec -- contact variable module		 * to find the end so we can skip over it.  */		cp2 += Var_ParseSkip(cp2, &pgn->context, NULL);	    else if (*cp2 == '\\' && cp2[1] != '\0')		/* Escaped something -- skip over it.  */		cp2+=2;	}	if (cp2 != start) {	    /* Stuff left over -- add it to the list too.  */	    gn = Targ_FindNode(start, cp2, TARG_CREATE);	    Lst_AtEnd(&members, gn);	}    }    /* Add all elements of the members list to the parent node.  */    while ((gn = (GNode *)Lst_DeQueue(&members)) != NULL) {	if (DEBUG(SUFF))	    printf("%s...", gn->name);	if (Lst_Member(&pgn->children, gn) == NULL) {	    Lst_Append(&pgn->children, after, gn);	    after = Lst_Adv(after);	    Lst_AtEnd(&gn->parents, pgn);	    pgn->unmade++;	}    }    /* Free the result.  */    free(cp);    if (DEBUG(SUFF))	printf("\n");}