rem: while (!IsEof(file)) {
add: while (!feof(file)) {
context: parseCascade(WScreen *scr, WMenu *menu, FILE *file, char *file_name){    char linebuf[MAXLINE];    char elinebuf[MAXLINE];    char title[MAXLINE];    char command[MAXLINE];    char shortcut[MAXLINE];    char params[MAXLINE];    char *line;        while (!IsEof(file)) {	int lsize, ok;		ok = 0;	fgets(linebuf, MAXLINE, file);	line = cropline(linebuf);	lsize = strlen(line);	do {	    if (line[lsize-1]=='\\') {		char *line2;		int lsize2;		fgets(elinebuf, MAXLINE, file);		line2=cropline(elinebuf);		lsize2=strlen(line2);		if (lsize2+lsize>MAXLINE) {		    wwarning(_("%s:maximal line size exceeded in menu config: %s"),			     file_name, line);		    ok=2;		} else {		    line[lsize-1]=0;		    lsize+=lsize2-1;		    strcat(line, line2);		}	    } else {		ok=1;	    }	} while (!ok && !IsEof(file));	if (ok==2)	  continue;		if (line[0]==0 || line[0]=='#' || (line[0]=='/' && line[1]=='/')) 	  continue;		separateline(line, title, command, params, shortcut);		if (!command[0]) {	    wwarning(_("%s:missing command in menu config: %s"), file_name,		     line);	    goto error;	}	if (strcasecmp(command, "MENU")==0) {	    WMenu *cascade;	    	    /* start submenu */	    cascade = wMenuCreate(scr, title, False);	    cascade->on_destroy = removeShortcutsForMenu;	    if (parseCascade(scr, cascade, file, file_name)==NULL) {		wMenuDestroy(cascade, True);	    } else {		wMenuEntrySetCascade(menu, 				     wMenuAddCallback(menu, title, NULL, NULL),				     cascade);	    }	} else if (strcasecmp(command, "END")==0) {	    /* end of menu */	    return menu;	    	} else {	    /* normal items */	    addMenuEntry(menu, title, shortcut[0] ? shortcut : NULL, command, 			 params[0] ? params : NULL, file_name);	}    }    wwarning(_("%s:syntax error in menu file:END declaration missing"),	     file_name);    return menu;    error:    return menu;}