define(argv[0] + 2, &maininclist);
define(argv[0] + offset, &maininclist);
main(int argc, char *argv[]){	char	**fp = filelist;	char	**incp = includedirs;	char	*p;	struct inclist	*ip;	char	*makefile = NULL;	struct filepointer	*filecontent;	struct symtab *psymp = predefs;	char *endmarker = NULL;	char *defincdir = NULL;	char **undeflist = NULL;	int numundefs = 0, i;	ProgramName = argv[0];	while (psymp->s_name)	{	    define2(psymp->s_name, psymp->s_value, &maininclist);	    psymp++;	}	if (argc == 2 && argv[1][0] == '@') {	    struct stat ast;	    int afd;	    char *args;	    char **nargv;	    int nargc;	    char quotechar = '\0';	    nargc = 1;	    if ((afd = open(argv[1]+1, O_RDONLY)) < 0)		fatalerr("cannot open \"%s\"\n", argv[1]+1);	    fstat(afd, &ast);	    args = (char *)malloc(ast.st_size + 1);	    if ((ast.st_size = read(afd, args, ast.st_size)) < 0)		fatalerr("failed to read %s\n", argv[1]+1);	    args[ast.st_size] = '\0';	    close(afd);	    for (p = args; *p; p++) {		if (quotechar) {		    if (quotechar == '\\' ||			(*p == quotechar && p[-1] != '\\'))			quotechar = '\0';		    continue;		}		switch (*p) {		case '\\':		case '"':		case '\'':		    quotechar = *p;		    break;		case ' ':		case '\n':		    *p = '\0';		    if (p > args && p[-1])			nargc++;		    break;		}	    }	    if (p[-1])		nargc++;	    nargv = (char **)malloc(nargc * sizeof(char *));	    nargv[0] = argv[0];	    argc = 1;	    for (p = args; argc < nargc; p += strlen(p) + 1)		if (*p) nargv[argc++] = p;	    argv = nargv;	}	for(argc--, argv++; argc; argc--, argv++) {	    	/* if looking for endmarker then check before parsing */		if (endmarker && strcmp (endmarker, *argv) == 0) {		    endmarker = NULL;		    continue;		}		if (**argv != '-') {			/* treat +thing as an option for C++ */			if (endmarker && **argv == '+')				continue;			*fp++ = argv[0];			continue;		}		switch(argv[0][1]) {		case '-':			endmarker = &argv[0][2];			if (endmarker[0] == '\0') endmarker = "--";			break;		case 'D':			if (argv[0][2] == '\0') {				argv++;				argc--;			}			for (p=argv[0] + 2; *p ; p++)				if (*p == '=') {					*p = ' ';					break;				}			define(argv[0] + 2, &maininclist);			break;		case 'I':			if (incp >= includedirs + MAXDIRS)			    fatalerr("Too many -I flags.\n");			*incp++ = argv[0]+2;			if (**(incp-1) == '\0') {				*(incp-1) = *(++argv);				argc--;			}			break;		case 'U':			/* Undef's override all -D's so save them up */			numundefs++;			if (numundefs == 1)			    undeflist = malloc(sizeof(char *));			else			    undeflist = realloc(undeflist,						numundefs * sizeof(char *));			if (argv[0][2] == '\0') {				argv++;				argc--;			}			undeflist[numundefs - 1] = argv[0] + 2;			break;		case 'Y':			defincdir = argv[0]+2;			break;		/* do not use if endmarker processing */		case 'a':			if (endmarker) break;			append = TRUE;			break;		case 'w':			if (endmarker) break;			if (argv[0][2] == '\0') {				argv++;				argc--;				width = atoi(argv[0]);			} else				width = atoi(argv[0]+2);			break;		case 'o':			if (endmarker) break;			if (argv[0][2] == '\0') {				argv++;				argc--;				objsuffix = argv[0];			} else				objsuffix = argv[0]+2;			break;		case 'p':			if (endmarker) break;			if (argv[0][2] == '\0') {				argv++;				argc--;				objprefix = argv[0];			} else				objprefix = argv[0]+2;			break;		case 'v':			if (endmarker) break;			verbose = TRUE;#ifdef DEBUG			if (argv[0][2])				_debugmask = atoi(argv[0]+2);#endif			break;		case 's':			if (endmarker) break;			startat = argv[0]+2;			if (*startat == '\0') {				startat = *(++argv);				argc--;			}			if (*startat != '#')				fatalerr("-s flag's value should start %s\n",					"with '#'.");			break;		case 'f':			if (endmarker) break;			makefile = argv[0]+2;			if (*makefile == '\0') {				makefile = *(++argv);				argc--;			}			break;		case 'm':			warn_multiple = TRUE;			break;					/* Ignore -O, -g so we can just pass ${CFLAGS} to		   makedepend		 */		case 'O':		case 'g':			break;		case 'i':			if (strcmp(&argv[0][1],"include") == 0) {				char *buf;				if (argc<2)					fatalerr("option -include is a "						 "missing its parameter\n");				if (cmdinc_count >= MAXINCFILES)					fatalerr("Too many -include flags.\n");				argc--;				argv++;				buf = malloc(strlen(DASH_INC_PRE) +					     strlen(argv[0]) +					     strlen(DASH_INC_POST) + 1);                		if(!buf)					fatalerr("out of memory at "						 "-include string\n");				cmdinc_list[2 * cmdinc_count + 0] = argv[0];				cmdinc_list[2 * cmdinc_count + 1] = buf;				cmdinc_count++;				break;			}			/* intentional fall through */		default:			if (endmarker) break;	/*		fatalerr("unknown opt = %s\n", argv[0]); */			warning("ignoring option %s\n", argv[0]);		}	}	/* Now do the undefs from the command line */	for (i = 0; i < numundefs; i++)	    undefine(undeflist[i], &maininclist);	if (numundefs > 0)	    free(undeflist);	if (!defincdir) {#ifdef PREINCDIR	    if (incp >= includedirs + MAXDIRS)		fatalerr("Too many -I flags.\n");	    *incp++ = PREINCDIR;#endif#ifdef __UNIXOS2__	    {		char *emxinc = getenv("C_INCLUDE_PATH");		/* can have more than one component */		if (emxinc) {		    char *beg, *end;		    beg= (char*)strdup(emxinc);		    for (;;) {			end = (char*)strchr(beg,';');			if (end) *end = 0;		    	if (incp >= includedirs + MAXDIRS)				fatalerr("Too many include dirs\n");			*incp++ = beg;			if (!end) break;			beg = end+1;		    }		}	    }#else /* !__UNIXOS2__, does not use INCLUDEDIR at all */	    if (incp >= includedirs + MAXDIRS)		fatalerr("Too many -I flags.\n");	    *incp++ = INCLUDEDIR;#endif#ifdef EXTRAINCDIR	    if (incp >= includedirs + MAXDIRS)		fatalerr("Too many -I flags.\n");	    *incp++ = EXTRAINCDIR;#endif#ifdef POSTINCDIR	    if (incp >= includedirs + MAXDIRS)		fatalerr("Too many -I flags.\n");	    *incp++ = POSTINCDIR;#endif	} else if (*defincdir) {	    if (incp >= includedirs + MAXDIRS)		fatalerr("Too many -I flags.\n");	    *incp++ = defincdir;	}	redirect(startat, makefile);	/*	 * catch signals.	 */#ifdef USGISH/*  should really reset SIGINT to SIG_IGN if it was.  */#ifdef SIGHUP	signal (SIGHUP, catch);#endif	signal (SIGINT, catch);#ifdef SIGQUIT	signal (SIGQUIT, catch);#endif	signal (SIGILL, catch);#ifdef SIGBUS	signal (SIGBUS, catch);#endif	signal (SIGSEGV, catch);#ifdef SIGSYS	signal (SIGSYS, catch);#endif#else	sig_act.sa_handler = catch;#if defined(_POSIX_SOURCE) || !defined(X_NOT_POSIX)	sigemptyset(&sig_act.sa_mask);	sigaddset(&sig_act.sa_mask, SIGINT);	sigaddset(&sig_act.sa_mask, SIGQUIT);#ifdef SIGBUS	sigaddset(&sig_act.sa_mask, SIGBUS);#endif	sigaddset(&sig_act.sa_mask, SIGILL);	sigaddset(&sig_act.sa_mask, SIGSEGV);	sigaddset(&sig_act.sa_mask, SIGHUP);	sigaddset(&sig_act.sa_mask, SIGPIPE);#ifdef SIGSYS	sigaddset(&sig_act.sa_mask, SIGSYS);#endif#else	sig_act.sa_mask = ((1<<(SIGINT -1))			   |(1<<(SIGQUIT-1))#ifdef SIGBUS			   |(1<<(SIGBUS-1))#endif			   |(1<<(SIGILL-1))			   |(1<<(SIGSEGV-1))			   |(1<<(SIGHUP-1))			   |(1<<(SIGPIPE-1))#ifdef SIGSYS			   |(1<<(SIGSYS-1))#endif			   );#endif /* _POSIX_SOURCE */	sig_act.sa_flags = 0;	sigaction(SIGHUP, &sig_act, (struct sigaction *)0);	sigaction(SIGINT, &sig_act, (struct sigaction *)0);	sigaction(SIGQUIT, &sig_act, (struct sigaction *)0);	sigaction(SIGILL, &sig_act, (struct sigaction *)0);#ifdef SIGBUS	sigaction(SIGBUS, &sig_act, (struct sigaction *)0);#endif	sigaction(SIGSEGV, &sig_act, (struct sigaction *)0);#ifdef SIGSYS	sigaction(SIGSYS, &sig_act, (struct sigaction *)0);#endif#endif /* USGISH */	/*	 * now peruse through the list of files.	 */	for(fp=filelist; *fp; fp++) {		DBG_PRINT(stderr,"file: %s\n",*fp);		filecontent = getfile(*fp);		setfile_cmdinc(filecontent, cmdinc_count, cmdinc_list);		ip = newinclude(*fp, (char *)NULL);		find_includes(filecontent, ip, ip, 0, FALSE);		freefile(filecontent);		recursive_pr_include(ip, ip->i_file, base_name(*fp));		inc_clean();	}	if (printed)		printf("\n");	return 0;}