int main ( int argc, char** argv )
{
	initialiseProspector ();
	ParameterList pList ( argc, argv );
	try {
		if ( pList.getBoolValue ( "save_params" ) ) {
			init_html ( cout, "Saving Search Compare Parameters" );
			pList.removeName ( "save_params" );
			ParameterList cookieParamList ( "", false, false );		// Create empty parameter set
			cookieParamList.appendParameters ( pList );
			cookieParamList.removeName ( "accession_nums" );
			cookieParamList.removeName ( "remove" );
			cookieParamList.removeName ( "id_filter_list" );
			cookieParamList.removeName ( "data" );
			cookieParamList.removeName ( "version" );
			bool ret = cookieParamList.copyToCookie ( cout, "search_compare_params" );
			if ( !ret ) {
				ErrorHandler::genError ()->error ( "Could not save the parameters as their length exceeds the maximum cookie length.\n" );
			}
			cout << "<p>Settings saved</p>" << endl;
			cout << "<input type=\"button\" value=\"Search Form\" onclick=\"history.go(-1)\">" << endl;
			exit ( 0 );
		}
		if ( pList.empty () ) {
			ErrorHandler::genError ()->error ( "No parameters passed to Search Compare.\n" );
		}
		ProgramLink::setParams ( &pList );
		init_html_premature_stop ( "Search Compare", true );
		SearchCompareParams params ( &pList );
		sresFPR = params.getReportType () == "False Positive Rate";
		sresTime = params.getReportType () == "Time" || sresFPR;
		sresXLinks = params.getReportType () == "Crosslinked Peptides";
		sresMods = params.getReportType () == "Modifications";
		sresProt = params.getReportType () == "Protein";
		sresKeepReplicates = params.getPeptideFilter () == "Keep Replicates" || sresTime;
		sresKeepCharges = params.getPeptideFilter () == "Best Per Charge";
		sresKeepTimeReplicates = params.getPeptideFilter () == "Keep Replicates";
		sresViewer = params.getSaveFormat () == 'V';
		ujm = new UpdatingJavascriptMessage;
		vector <SearchResults*> searchResults;
		getSearchResults ( params, searchResults );
		writeReport ( params, searchResults );
		delete ujm;
		printProgramInformationHTML ( cout, "Search Compare" );
		ProteinInfo::deleteTempDirs ();
	}
	catch ( runtime_error e ) {
		pList.writeLogError ( e.what () );
	}
	return 0;
}
int main ( int argc, char** argv )
{
	initialiseProspector ();

	ParameterList paramList ( argc, argv );							// Process the cgi input including the uploaded file
	try {
		ostream& os = cout;
		if ( paramList.getBoolValue ( "save_params" ) )
			saveParams ( os, paramList );
		else
			batchSubmission ( os, paramList );
	}
	catch ( runtime_error e ) {
		paramList.writeLogError ( e.what () );
	}
	MySQLPPSDDBase::instance ( false, true );
	return 0;
}