|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T f
Length: 5368 (0x14f8)
Types: TextFile
Names: »filter.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
└─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z«
└─⟦e5a54fb17⟧
└─⟦this⟧ »pp-5.0/Chans/dirlist/filter.c«
/* filter.c - Directory Operation Filters */
# ifndef lint
static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Chans/dirlist/RCS/filter.c,v 5.0 90/09/20 15:45:50 pp Exp Locker: pp $";
# endif
/*
* $Header: /cs/research/pp/hubris/pp-beta/Chans/dirlist/RCS/filter.c,v 5.0 90/09/20 15:45:50 pp Exp Locker: pp $
*
* $Log: filter.c,v $
* Revision 5.0 90/09/20 15:45:50 pp
* rcsforce : 5.0 public release
*
*/
/*
* 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.
*
*/
/* LINTLIBRARY */
#include <isode/quipu/util.h>
#include <isode/quipu/ds_search.h>
extern LLog * log_dsap;
filter_free (filt)
Filter filt;
{
register Filter ptr;
register Filter next;
for (ptr = filt; ptr != NULLFILTER; ptr=next) {
if (ptr->flt_type == FILTER_ITEM) {
switch (ptr->FUITEM.fi_type) {
case FILTERITEM_EQUALITY:
case FILTERITEM_GREATEROREQUAL:
case FILTERITEM_LESSOREQUAL:
case FILTERITEM_APPROX:
AttrT_free (ptr->FUITEM.UNAVA.ava_type);
AttrV_free (ptr->FUITEM.UNAVA.ava_value);
break;
case FILTERITEM_PRESENT:
AttrT_free (ptr->FUITEM.UNTYPE);
break;
case FILTERITEM_SUBSTRINGS:
AttrT_free (ptr->FUITEM.UNSUB.fi_sub_type);
avs_free (ptr->FUITEM.UNSUB.fi_sub_initial);
avs_free (ptr->FUITEM.UNSUB.fi_sub_any);
avs_free (ptr->FUITEM.UNSUB.fi_sub_final);
break;
}
} else
filter_free (ptr->flt_un.flt_un_filter);
next = ptr->flt_next;
free ((char *) ptr);
}
}
filter_append (a,b)
Filter a,b;
{
register Filter ptr,trail;
if ( a == NULLFILTER)
DLOG (log_dsap,LLOG_DEBUG,("appending to null filter !"));
for (ptr=a; ptr!= NULLFILTER; ptr=ptr->flt_next)
trail = ptr;
trail->flt_next = b;
}
Filter strfilter (at,s,type)
AttributeType at;
char * s;
char type;
{
Filter filt;
if (type == FILTERITEM_SUBSTRINGS) {
filt = filter_alloc ();
filt->flt_next = NULLFILTER;
filt->flt_type = FILTER_ITEM;
filt->FUITEM.fi_type = FILTERITEM_SUBSTRINGS;
filt->FUITEM.UNSUB.fi_sub_initial = NULLAV;
filt->FUITEM.UNSUB.fi_sub_final = NULLAV;
filt->FUITEM.UNSUB.fi_sub_type = AttrT_cpy (at);
filt->FUITEM.UNSUB.fi_sub_any = str2avs(s,
filt->FUITEM.UNSUB.fi_sub_type);
} else {
filt = filter_alloc ();
filt->flt_next = NULLFILTER;
filt->flt_type = FILTER_ITEM;
filt->FUITEM.fi_type = type;
filt->FUITEM.UNAVA.ava_type = AttrT_cpy (at);
filt->FUITEM.UNAVA.ava_value = str2AttrV(s,
filt->FUITEM.UNAVA.ava_type->at_table->oa_syntax);
}
return filt;
}
Filter ocfilter (s)
char * s;
{
Filter filt;
filt = filter_alloc ();
filt->flt_next = NULLFILTER;
filt->flt_type = FILTER_ITEM;
filt->FUITEM.fi_type = FILTERITEM_EQUALITY;
if ((filt->FUITEM.UNAVA.ava_type = AttrT_new ("ObjectClass")) == NULLAttrT) {
LLOG (log_dsap,LLOG_EXCEPTIONS,("ObjectClass attribute unknown"))
return NULLFILTER;
}
filt->FUITEM.UNAVA.ava_value = str2AttrV(s,
filt->FUITEM.UNAVA.ava_type->at_table->oa_syntax);
if (filt->FUITEM.UNAVA.ava_value == NULLAttrV) {
LLOG (log_dsap,LLOG_EXCEPTIONS,("'%s' unknown",s));
return NULLFILTER;
}
return filt;
}
Filter joinfilter (f, type)
Filter f;
char type;
{
Filter filt;
filt = filter_alloc ();
filt->flt_next = NULLFILTER;
filt->flt_type = type;
filt->FUFILT = f;
return filt;
}
print_filter (nps, fi, level)
PS nps;
register Filter fi;
int level;
{
char *cp;
register Filter fi2;
register struct filter_item *fi3;
switch (fi -> flt_type) {
case FILTER_ITEM:
fi3 = &fi -> FUITEM;
if (level)
ps_print (nps, "(");
switch (fi3 -> fi_type) {
case FILTERITEM_APPROX:
cp = "~=";
goto item;
case FILTERITEM_EQUALITY:
cp = "=";
goto item;
case FILTERITEM_GREATEROREQUAL:
cp = ">=";
goto item;
case FILTERITEM_LESSOREQUAL:
cp = ">=";
item: ;
AttrT_print (nps, fi3 -> UNAVA.ava_type, EDBOUT);
ps_print (nps, cp);
AttrV_print (nps, fi3 -> UNAVA.ava_value, EDBOUT);
break;
case FILTERITEM_SUBSTRINGS:
AttrT_print (nps, fi3 -> UNSUB.fi_sub_type, EDBOUT);
ps_print (nps, "=");
avs_print_aux (nps, fi3 -> UNSUB.fi_sub_initial,EDBOUT,"*");
ps_print (nps, "*");
avs_print_aux (nps, fi3 -> UNSUB.fi_sub_any, EDBOUT, "*");
ps_print (nps, "*");
avs_print_aux (nps, fi3 -> UNSUB.fi_sub_final, EDBOUT, "*");
break;
case FILTERITEM_PRESENT:
AttrT_print (nps, fi3 -> UNTYPE, EDBOUT);
ps_print (nps, "=*");
break;
default:
ps_printf (nps,
"[internal error--malformed filter item type 0x%x]",
fi3 -> fi_type);
break;
}
if (level)
ps_print (nps, ")");
break;
case FILTER_AND:
cp = "&";
goto op;
case FILTER_OR:
cp = "|";
goto op;
case FILTER_NOT:
cp = "!";
op: ;
ps_printf (nps, "(%s", cp);
level++;
for (fi2 = fi -> FUFILT; fi2; fi2 = fi2 -> flt_next) {
ps_print (nps, " ");
print_filter (nps, fi2, level);
}
ps_print (nps, ")");
break;
default:
ps_printf (nps, "[internal error--malformed filter type 0x%x]",
fi -> flt_type);
}
}