Lst_AtEnd(targCmds, line);
Lst_AtEnd(&targCmds, line);
Parse_File(name, stream)    char          *name;	/* the name of the file being read */    FILE *	  stream;   	/* Stream open to makefile to parse */{    register char *cp,		/* pointer into the line */                  *line;	/* the line we're working on */    inLine = FALSE;    fname = estrdup(name);#ifdef CLEANUP    Lst_AtEnd(fileNames, fname);#endif    curFILE = stream;    lineno = 0;    fatals = 0;    do {	while ((line = ParseReadLine ()) != NULL) {	    if (*line == '.') {		/*		 * Lines that begin with the special character are either		 * include or undef directives.		 */		for (cp = line + 1; isspace (*cp); cp++) {		    continue;		}		if (strncmp (cp, "include", 7) == 0) {		    ParseDoInclude (cp + 7);		    goto nextLine;		} else if (strncmp(cp, "undef", 5) == 0) {		    char *cp2;		    for (cp += 5; isspace((unsigned char) *cp); cp++) {			continue;		    }		    for (cp2 = cp; !isspace((unsigned char) *cp2) &&				   (*cp2 != '\0'); cp2++) {			continue;		    }		    *cp2 = '\0';		    Var_Delete(cp, VAR_GLOBAL);		    goto nextLine;		}	    }	    if (*line == '#') {		/* If we're this far, the line must be a comment. */		goto nextLine;	    }	    if (*line == '\t') {		/*		 * If a line starts with a tab, it can only hope to be		 * a creation command.		 */#ifndef POSIX	    shellCommand:#endif		for (cp = line + 1; isspace (*cp); cp++) {		    continue;		}		if (*cp) {		    if (inLine) {			/*			 * So long as it's not a blank line and we're actually			 * in a dependency spec, add the command to the list of			 * commands of all targets in the dependency spec			 */			Lst_ForEach(targets, ParseAddCmd, cp);#ifdef CLEANUP			Lst_AtEnd(targCmds, line);#endif			continue;		    } else {			Parse_Error (PARSE_FATAL,				     "Unassociated shell command \"%s\"",				     cp);		    }		}#ifdef SYSVINCLUDE	    } else if (strncmp (line, "include", 7) == 0 &&		       isspace((unsigned char) line[7]) &&		       strchr(line, ':') == NULL) {		/*		 * It's an S3/S5-style "include".		 */		ParseTraditionalInclude (line + 7);		goto nextLine;#endif	    } else if (Parse_IsVar (line)) {		ParseFinishLine();		Parse_DoVar (line, VAR_GLOBAL);	    } else {		/*		 * We now know it's a dependency line so it needs to have all		 * variables expanded before being parsed. Tell the variable		 * module to complain if some variable is undefined...		 * To make life easier on novices, if the line is indented we		 * first make sure the line has a dependency operator in it.		 * If it doesn't have an operator and we're in a dependency		 * line's script, we assume it's actually a shell command		 * and add it to the current list of targets.		 */#ifndef POSIX		Boolean	nonSpace = FALSE;#endif		cp = line;		if (isspace((unsigned char) line[0])) {		    while ((*cp != '\0') && isspace((unsigned char) *cp)) {			cp++;		    }		    if (*cp == '\0') {			goto nextLine;		    }#ifndef POSIX		    while ((*cp != ':') && (*cp != '!') && (*cp != '\0')) {			nonSpace = TRUE;			cp++;		    }#endif		}#ifndef POSIX		if (*cp == '\0') {		    if (inLine) {			Parse_Error (PARSE_WARNING,				     "Shell command needs a leading tab");			goto shellCommand;		    } else if (nonSpace) {			Parse_Error (PARSE_FATAL, "Missing operator");		    }		} else {#endif		    ParseFinishLine();		    cp = Var_Subst(line, VAR_CMD, TRUE);		    free (line);		    line = cp;		    /*		     * Need a non-circular list for the target nodes		     */		    if (targets)			Lst_Destroy(targets, NOFREE);		    targets = Lst_Init();		    inLine = TRUE;		    ParseDoDependency (line);#ifndef POSIX		}#endif	    }	    nextLine:	    free (line);	}	/*	 * Reached EOF, but it may be just EOF of an include file...	 */    } while (ParseEOF(1) == CONTINUE);    /*     * Make sure conditionals are clean     */    Cond_End();    if (fatals) {	fprintf (stderr, "Fatal errors encountered -- cannot continue\n");	exit (1);    }}