rem: while((type = getopt(argc,argv,"c:C:lf:H:O:P:M:sFm:")) != EOF)
add: while((type = getopt(argc,argv,"c:C:f:H:O:P:M:sF:")) != EOF)
context: main(int argc, char **argv){	char	*data;	char	*key;	char	*bufp;	char	save_c;	long	type;	int	linenum;	ARGTYPE	cache = NULL;	ARGTYPE	cross_cache = NULL;	FILE	*logfp = NULL;	FILE	*infp = stdin;	ARGTYPE	file = NULL;	int	first_xref = TRUE;	char	*db_prefix = NULL;	ARGTYPE sn_host = NULL;	ARGTYPE sn_pid = NULL;	ARGTYPE omode = NULL;	char	lock_file[MAXPATHLEN];	int	set_sgns = FALSE;	LongString	buf;	ARGTYPE macro_file[MAX_MACRO_FILES];	int macro_file_num = 0;	LongStringInit(&buf,0);	Tcl_FindExecutable(argv[0]);#if !WIN32 && TTY_TRACE	tty = fopen("/dev/tty","w");#endif /* !WIN32 && TTY_TRACE */	while((type = getopt(argc,argv,"c:C:lf:H:O:P:M:sFm:")) != EOF)	{		switch (type)		{		case 'c':			cache = optarg;			break;		case 'C':			cross_cache = optarg;			break;		case 'l':			report_local_vars = TRUE;			break;		case 'f':			file = optarg;			break;		case 'H':			sn_host = optarg;			break;		case 'P':			sn_pid = optarg;			break;		case 'M':			omode = optarg;			break;		case 's':			set_sgns = FALSE;			break;		case 'F':			break;		case 'm':			if (macro_file_num < MAX_MACRO_FILES - 1)			{				macro_file[macro_file_num++] = optarg;			}			MacroReadFile(optarg);			break;		}	}	if (optind < argc)	{		db_prefix = argv[optind];	}	if (!db_prefix)	{		fprintf(stderr, "Usage: %s ?-c cache_size? ?-C cross_cache_size? ?-l? ?-f file? ?-m macrofile? db_prefix\n",			argv[0]);		fflush(stderr);		exit(2);	}	if (set_sgns)		set_signals();	killed = FALSE;	if (sn_host && sn_pid)	{		sprintf(lock_file,"%s.lck",db_prefix);		switch (create_lock_file(lock_file,sn_host,sn_pid))		{		case -1:			fprintf(stderr,"Could not create lock,%s\n",strerror(errno));			fflush(stderr);			exit(2);			break;		case FALSE:			fprintf(stderr,"The database is in an inconsistent state.\n");			fflush(stderr);			exit(2);			break;		}	}	else		lock_file[0] = '\0';	if (file)	{		FILE	*in;		in = fopen(file,"r");		if (in)			infp = in;	}	/*SN_DBIMP is set interactive in the tcl init procedure!*/	if (getenv("SN_DBIMP"))	{		char    tmp[MAXPATHLEN];		char    *e;		e = getenv("TMPDIR");		sprintf(tmp,"%s/dbimp_%lu.tmp",			e ? e : "/tmp",			(unsigned long)getpid());		logfp = fopen(tmp,"w+");		if (logfp)		{			chmod(tmp,0666);			fprintf(logfp,"#dbimp (pid: %lu) started database\n#prefix: <%s> cache: %s ",				(unsigned long)getpid(),				db_prefix,				cache ? cache : "#");			fprintf(logfp,"cross_cache: %s local_vars: %d file: <%s>\n",				cross_cache ? cross_cache : "#",				report_local_vars,				file ? file : "stdin");			if (macro_file_num)			{				int cou;				for (cou = 0; cou < macro_file_num; cou++)				{					fprintf(logfp,"macro file %d: <%s>\n",						cou + 1,						macro_file[cou]);				}			}			fflush(logfp);		}	}	Paf_dbimp_running = TRUE;	Paf_db_init_tables(db_prefix,cache,cross_cache);	linenum = 0;	type = -999;	switch (setjmp(BAD_IMPL_jmp_buf))	{	case PAF_PANIC_SOFT:		killed = TRUE;		fprintf(stderr,"dbimp (soft) panic");		if (filename_g)		{			fprintf(stderr,", in file: %s, at line: %d column: %d\n",				filename_g,yylineno,yycharno);		}		fprintf(stderr,"\n");		fflush(stderr);		break;	case PAF_PANIC_SIMPLE:		killed = TRUE;		break;	case PAF_PANIC_EMERGENCY:		killed = -1;		fprintf(stderr,"Run time error: %s\n",strerror(errno));		fflush(stderr);		break;	}	while (!killed && (bufp = buf.fgets(&buf,infp)))	{		if (logfp)		{			fputs(bufp,logfp);			fputs("\n",logfp);			fflush(logfp);		}		if (bufp[0] == '#' || bufp[0] == '\0')			continue;		/* Pass on status message from the parser. */		if (strncmp(bufp, "Status: ", 8) == 0) {			fprintf(stdout, "%s\n", bufp);			fflush(stdout);			continue;		}		linenum++;		key = strchr(bufp,';');		if (key)			data = strchr(key + 1,';');		else			data = NULL;		if (!key || !data)		{			fprintf(stderr,"dbimp: Error: unrecognized input \"%s\"\n",bufp);			fflush(stderr);			continue;		}		save_c = *key;		*key = '\0';		type = strtol(bufp,NULL,0);		*key = save_c;		if (type < -3)		{			fprintf(stderr,"dbimp: Error: invalid type: %ld, %s\n",type,bufp);			fflush(stderr);			continue;		}		else if (type == -1)		{			db_remove_file_def(0,data + 1);		}		else if (type == -3)		{			db_remove_file_xfer_using_keys(0,data + 1);		}		else if (type == PAF_CROSS_REF_CPP)		{			if (first_xref)			{				first_xref = FALSE;				open_tables_for_cross_ref();			}			Paf_insert_cross_ref_qry(bufp);		}		else		{			*data = '\0';			db_insert_entry(type,key + 1,data + 1);		}	}#if TTY_TRACE	if (tty)	{		fprintf(tty,"END (pid: %d) killed: %d eof: %d\n",			(int)getpid(),killed,feof(infp));	}#endif /* TTY_TRACE */	buf.free(&buf);	if (!first_xref)	{		Paf_Cpp_Cross_Ref_Clean();	}	if (Paf_db_close_tables() == -1)	{		fprintf(stderr,"Database closing error: %s\n",strerror(errno));		fflush(stderr);		killed = -1;	}	if (logfp)	{		fprintf(logfp,"#dbimp (pid: %lu) exited\n",(unsigned long)getpid());		fclose(logfp);	}	if (yyfd >= 0)	{		close(yyfd);		yyfd = -1;	}	if (lock_file[0])	{		if (killed == -1)		{			/*			 * Mark the project as unusable. We must not open the			 * file with O_TRUNC, because if the disk is already full,			 * we will get a zero size file that we cannot write.			 */			int	fd = open(lock_file,O_WRONLY,0666);			if (fd != -1)			{				char	status_buf[500];				/* Now, we just overwrite the file. The 0000000 pid indicates				 * that the project is unusable.				 */				sprintf(status_buf,"%s %s %7d\n",					sn_pid,					sn_host,					0);				write(fd,status_buf,strlen(status_buf));				close(fd);			}		}		else		{			/* Delete the lock file to indicate, that we did not crash! */			if (unlink(lock_file) == -1 && access(lock_file,F_OK) != -1)			{				/* Under Windows, somebody might have open the file. */				sleep(1);#if TTY_TRACE				if (tty)				{					fprintf(tty,"Removing lock file %d\n",(int)getpid());				}#endif /* TTY_TRACE */				unlink(lock_file);			}		}	}	fclose(infp);	/* It is important to synchronize. */	exit(killed == -1 ? 2 : 0);	return 0;}