country.c

来自「ftam等标准协议服务器和客户端的源代码。」· C语言 代码 · 共 376 行

C
376
字号
/* country.c - search for a country */#ifndef	lintstatic char *rcsid = "$Header: /xtel/isode/isode/others/quipu/uips/de/RCS/country.c,v 9.0 1992/06/16 12:45:59 isode Rel $";#endif/*  * $Header: /xtel/isode/isode/others/quipu/uips/de/RCS/country.c,v 9.0 1992/06/16 12:45:59 isode Rel $ * * * $Log: country.c,v $ * Revision 9.0  1992/06/16  12:45:59  isode * Release 8.0 * *//* *				  NOTICE * *    Acquisition, use, and distribution of this module and related *    materials are subject to the restrictions of a license agreement. *    Consult the Preface in the User's Manual for the full terms of *    this agreement. * */#include <signal.h>#include "quipu/util.h"#include "quipu/ds_search.h"#include "quipu/dua.h"#include "demanifest.h"#include "namelist.h"#include "filter.h"#include "destrings.h"struct ds_search_arg sarg;struct ds_search_result sresult;struct DSError serror;extern int abandoned;extern int highNumber;extern int exactMatch;extern char exactString[];struct ds_search_arg *fillMostCountrySearchArgs();void makeExplicitCoFilter();void coFilter1(), coFilter2(), coFilter3(), coFilter4();VFP explicitCo[] = {makeExplicitCoFilter, NULLVFP};VFP normalCo[] = {coFilter1, coFilter2, coFilter3, coFilter4, NULLVFP};intmakeRootCountry(clistp)struct namelist ** clistp;{	*clistp = list_alloc();	(*clistp)->name = copy_string("root");	(*clistp)->ats = NULLATTR;	(*clistp)->next = NULLLIST;	return OK;}		intlistCos(cstr, clistp)char * cstr;struct namelist ** clistp;{	clearProblemFlags();	initAlarm();		if (exactMatch == COUNTRY)	  return(listExactCos(exactString, clistp));        else if (strcmp(cstr, "*") == 0)          return(listAllCos(clistp));	else if (strcmp(cstr, "-") == 0)	  return(makeRootCountry(clistp)); /* make the root a "country" to       	                       enable searching under the root of the tree */        else          return(listMatchingCos(cstr, clistp));}voidprintListCos(cstr, clistp)char * cstr;struct namelist * clistp;{struct namelist * x;int i;	if (clistp == NULLLIST)		pageprint("No countries match entered string\n");	else	{		for (i =1, x = clistp; x != NULLLIST; i++, x = x->next)			printLastComponent(INDENTON, x->name, COUNTRY, i);		showAnyProblems(cstr);	}}voidfreeCos(listpp)struct namelist ** listpp;{struct namelist * x, * y;	x = *listpp;	while (x != NULLLIST)	{		if (x->name != NULLCP)			free(x->name);		as_free(x->ats);		y = x->next;		free((char *)x);		x = y;	}	*listpp = NULLLIST;}voidfreeCoSearchArgs(){	dn_free(sarg.sra_baseobject);}listAllCos(clistp)struct namelist ** clistp;{int ret;        sarg = * fillMostCountrySearchArgs(NULLCP, SRA_ONELEVEL);        makeAllCoFilter(&sarg.sra_filter);        ret = makeListCountries(clistp);        if (ret != OK)		logListSuccess(LIST_ERROR, "co", 0);	else		logListSuccess(LIST_OK, "co", listlen(*clistp));							freeCoSearchArgs();	alarmCleanUp();	return ret;}listMatchingCos(cstr, clistp)char * cstr;struct namelist ** clistp;{VFP * filtarray;VFP filterfunc;int filtnumber;        if (index(cstr, '*') != NULLCP) /* contains at least one asterisk */	{                filtarray = explicitCo;		filtnumber = -1;	}        else	{                filtarray = normalCo;		filtnumber = 0;	}	sarg = * fillMostCountrySearchArgs(NULLCP, SRA_ONELEVEL);        while ((filterfunc = *filtarray++) != NULLVFP)	{		filtnumber++;                filterfunc(cstr, &sarg.sra_filter);                if (makeListCountries(clistp) != OK)		{ 				freeCoSearchArgs();			logSearchSuccess(SEARCH_ERROR, "co", cstr, filtnumber, 0);			alarmCleanUp();			return NOTOK;		}                if (*clistp != NULLLIST)                        break;	}	if (*clistp != NULLLIST)		logSearchSuccess(SEARCH_OK, "co", cstr, filtnumber, listlen(*clistp));	else		logSearchSuccess(SEARCH_FAIL, "co", cstr, filtnumber, 0);	freeCoSearchArgs();	alarmCleanUp();	return OK;}listExactCos(objectstr, clistp)char * objectstr;struct namelist ** clistp;{int ret;        sarg = * fillMostCountrySearchArgs(objectstr, SRA_BASEOBJECT);        makeAllCoFilter(&sarg.sra_filter);        ret = makeListCountries(clistp);	freeCoSearchArgs();	alarmCleanUp();	return ret;}makeListCountries(clistp)struct namelist ** clistp;{entrystruct * x;int retval;	if (rebind() != OK)		return NOTOK;	retval = ds_search(&sarg, &serror, &sresult);	if ((retval == DSE_INTR_ABANDONED) &&	    (serror.dse_type == DSE_ABANDONED))		abandoned = TRUE;	correlate_search_results (&sresult);	setProblemFlags(sresult);	highNumber = 0;	for (x = sresult.CSR_entries; x != NULLENTRYINFO; x = x->ent_next) {		*clistp = list_alloc();		(*clistp)->name = dn2pstr(x->ent_dn);		(*clistp)->ats = NULLATTR;		clistp = &(*clistp)->next;		highNumber++;	}	*clistp = NULLLIST;	entryinfo_free(sresult.CSR_entries,0);	dn_free (sresult.CSR_object);	crefs_free (sresult.CSR_cr);	filter_free(sarg.sra_filter);	return OK;}struct ds_search_arg *fillMostCountrySearchArgs(objectstr, searchdepth)char * objectstr;int searchdepth;{static struct ds_search_arg arg;static CommonArgs sca = default_common_args;	arg.sra_common = sca; /* struct copy */        arg.sra_common.ca_servicecontrol.svc_timelimit = SVC_NOTIMELIMIT;        arg.sra_common.ca_servicecontrol.svc_sizelimit= SVC_NOSIZELIMIT;	arg.sra_subset = searchdepth;	arg.sra_baseobject = str2dn(objectstr);	/* specify attributes of interest */	arg.sra_eis.eis_allattributes = FALSE;	arg.sra_eis.eis_select = NULLATTR;	arg.sra_eis.eis_infotypes = EIS_ATTRIBUTESANDVALUES;	return (&arg);}makeAllCoFilter(fpp)struct s_filter ** fpp;{struct s_filter * fp;	*fpp = orfilter();	fp = (*fpp)->FUFILT = eqfilter(FILTERITEM_EQUALITY, DE_OBJECT_CLASS, DE_COUNTRY);	fp->flt_next = eqfilter(FILTERITEM_EQUALITY, DE_OBJECT_CLASS, DE_LOCALITY);}voidmakeExplicitCoFilter(cstr, fpp)char * cstr;struct s_filter ** fpp;{struct s_filter * fp, *fp2;int wildcardtype;char * ostr1, * ostr2;	wildcardtype = starstring(cstr, &ostr1, &ostr2);	*fpp = orfilter();	fp = fp2 = (*fpp)->FUFILT = andfilter();	fp = fp->FUFILT = eqfilter(FILTERITEM_EQUALITY, DE_OBJECT_CLASS, DE_COUNTRY);	switch (wildcardtype) {		case LEADSUBSTR: /* fall through */		case TRAILSUBSTR: /* fall through */		case ANYSUBSTR:			fp = fp->flt_next = subsfilter(wildcardtype, 					DE_FRIENDLY_COUNTRY, ostr1);			break;		case LEADANDTRAIL:			fp = fp->flt_next = subsfilter(LEADSUBSTR, 					DE_FRIENDLY_COUNTRY, ostr1);			fp = fp->flt_next = subsfilter(TRAILSUBSTR,					DE_FRIENDLY_COUNTRY, ostr2);                        break;	}	fp = fp2->flt_next = andfilter();	fp = fp->FUFILT = eqfilter(FILTERITEM_EQUALITY, DE_OBJECT_CLASS, DE_LOCALITY);	switch (wildcardtype) {		case LEADSUBSTR: /* fall through */		case TRAILSUBSTR: /* fall through */		case ANYSUBSTR:			fp = fp->flt_next = subsfilter(wildcardtype, 					DE_LOCALITY_NAME, ostr1);			break;		case LEADANDTRAIL:			fp = fp->flt_next = subsfilter(LEADSUBSTR, 					DE_LOCALITY_NAME, ostr1);			fp = fp->flt_next = subsfilter(TRAILSUBSTR,					DE_LOCALITY_NAME, ostr2);                        break;	}	}voidcoFilter1(cstr, fpp)char * cstr;struct s_filter ** fpp;{struct s_filter * fp, * fp2;	*fpp = orfilter();	fp = fp2 = (*fpp)->FUFILT = andfilter();	fp = fp->FUFILT = eqfilter(FILTERITEM_EQUALITY, DE_OBJECT_CLASS, DE_COUNTRY);	if ((strlen(cstr) == 2) && (check_3166(cstr)))		fp = fp->flt_next = eqfilter(FILTERITEM_EQUALITY, DE_COUNTRY_NAME, cstr);	else		fp = fp->flt_next = eqfilter(FILTERITEM_EQUALITY, DE_FRIENDLY_COUNTRY, cstr);	fp = fp2->flt_next = andfilter();	fp = fp->FUFILT = eqfilter(FILTERITEM_EQUALITY, DE_OBJECT_CLASS, DE_LOCALITY);	fp = fp->flt_next = eqfilter(FILTERITEM_EQUALITY, DE_LOCALITY_NAME, cstr);}voidcoFilter2(cstr, fpp)char * cstr;struct s_filter ** fpp;{struct s_filter * fp, * fp2;	*fpp = orfilter();	fp = fp2 = (*fpp)->FUFILT = andfilter();	fp = fp->FUFILT = eqfilter(FILTERITEM_EQUALITY, DE_OBJECT_CLASS, DE_COUNTRY);	fp = fp->flt_next = subsfilter(LEADSUBSTR, DE_FRIENDLY_COUNTRY, cstr);	fp = fp2->flt_next = andfilter();	fp = fp->FUFILT = eqfilter(FILTERITEM_EQUALITY, DE_OBJECT_CLASS, DE_LOCALITY);	fp = fp->flt_next = subsfilter(LEADSUBSTR, DE_LOCALITY_NAME, cstr);}voidcoFilter3(cstr, fpp)char * cstr;struct s_filter ** fpp;{struct s_filter * fp, * fp2;	*fpp = orfilter();	fp = fp2 = (*fpp)->FUFILT = andfilter();	fp = fp->FUFILT = eqfilter(FILTERITEM_EQUALITY, DE_OBJECT_CLASS, DE_COUNTRY);	fp = fp->flt_next = subsfilter(ANYSUBSTR, DE_FRIENDLY_COUNTRY, cstr);	fp = fp2->flt_next = andfilter();	fp = fp->FUFILT = eqfilter(FILTERITEM_EQUALITY, DE_OBJECT_CLASS, DE_LOCALITY);	fp = fp->flt_next = subsfilter(ANYSUBSTR, DE_LOCALITY_NAME, cstr);}voidcoFilter4(cstr, fpp)char * cstr;struct s_filter ** fpp;{struct s_filter * fp, * fp2;	*fpp = orfilter();	fp = fp2 = (*fpp)->FUFILT = andfilter();	fp = fp->FUFILT = eqfilter(FILTERITEM_EQUALITY, DE_OBJECT_CLASS, DE_COUNTRY);	fp = fp->flt_next = eqfilter(FILTERITEM_APPROX, DE_FRIENDLY_COUNTRY, cstr);	fp = fp2->flt_next = andfilter();	fp = fp->FUFILT = eqfilter(FILTERITEM_EQUALITY, DE_OBJECT_CLASS, DE_LOCALITY);	fp = fp->flt_next = eqfilter(FILTERITEM_APPROX, DE_LOCALITY_NAME, cstr);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?