|
|
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 a
Length: 6450 (0x1932)
Types: TextFile
Names: »as.c«
└─⟦3d0c2be1b⟧ Bits:30001254 ISODE-5.0 Tape
└─⟦eba4602b1⟧ »./isode-5.0.tar.Z«
└─⟦d3ac74d73⟧
└─⟦this⟧ »isode-5.0/dsap/common/as.c«
/* as.c - General Attribute Sequence routines */
#ifndef lint
static char *rcsid = "$Header: /f/osi/dsap/common/RCS/as.c,v 6.0 89/03/18 23:27:21 mrose Rel $";
#endif
/*
* $Header: /f/osi/dsap/common/RCS/as.c,v 6.0 89/03/18 23:27:21 mrose Rel $
*
*
* $Log: as.c,v $
* Revision 6.0 89/03/18 23:27:21 mrose
* Release 5.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.
*
*/
/* LINTLIBRARY */
#include "quipu/util.h"
#include "quipu/attrvalue.h"
extern LLog * log_dsap;
static Attr_Sequence eptr;
#define foreach(a) for(eptr = a; eptr != NULLATTR; eptr=eptr->attr_link)
as_comp_free (as)
Attr_Sequence as;
{
AttrT_free (as->attr_type);
avs_free (as->attr_value);
/* acl_info_free (as->attr_acl); */
free ((char *) as);
}
as_free (as)
Attr_Sequence as;
{
foreach (as) {
as_comp_free (eptr);
}
}
Attr_Sequence as_comp_new (at,as,acl)
AttributeType at;
AV_Sequence as;
struct acl_info * acl;
{
Attr_Sequence ptr;
ptr = as_comp_alloc ();
as_comp_fill (ptr,at,as,acl);
ptr->attr_link = NULLATTR;
return (ptr);
}
as_decode (x)
Attr_Sequence x;
{
foreach (x) {
AttrT_decode (eptr->attr_type);
avs_decode (eptr->attr_type,eptr->attr_value);
}
}
Attr_Sequence as_merge (a,b)
Attr_Sequence a,b;
{
register Attr_Sequence aptr, bptr, result, trail;
if ( a == NULLATTR )
return (b);
if ( b == NULLATTR )
return (a);
/* start sequence off, make sure 'a' is the first */
switch (AttrT_cmp (a->attr_type,b->attr_type)) {
case 0: /* equal */
result = a;
a->attr_value = avs_merge (a->attr_value, b->attr_value);
aptr = a->attr_link;
bptr = b->attr_link;
AttrT_free (b->attr_type);
free ((char *) b);
break;
case -1:
result = b;
aptr = a;
bptr = b->attr_link;
break;
case 1:
result = a;
aptr = a->attr_link;
bptr = b;
break;
}
trail = result;
while ( (aptr != NULLATTR) && (bptr != NULLATTR) ) {
switch (AttrT_cmp (aptr->attr_type,bptr->attr_type)) {
case 0: /* equal */
aptr->attr_value = avs_merge (aptr->attr_value, bptr->attr_value);
AttrT_free (bptr->attr_type);
free ((char *) bptr);
trail->attr_link = aptr;
trail = aptr;
aptr = aptr->attr_link;
bptr = bptr->attr_link;
break;
case -1:
trail->attr_link = bptr;
trail = bptr;
bptr = bptr->attr_link;
break;
case 1:
trail->attr_link = aptr;
trail = aptr;
aptr = aptr->attr_link;
break;
}
}
if (aptr == NULLATTR)
trail->attr_link = bptr;
else
trail->attr_link = aptr;
return (result);
}
as_delnext (as)
Attr_Sequence as;
{
Attr_Sequence ptr;
if (as == NULLATTR)
DLOG (log_dsap,LLOG_DEBUG,("delnext of null as!"));
else {
ptr = as->attr_link;
if (ptr == NULLATTR)
DLOG (log_dsap,LLOG_DEBUG,("no new as to delete!"));
else {
as->attr_link = ptr->attr_link;
as_comp_free (ptr);
}
}
}
Attr_Sequence as_comp_cpy (as)
Attr_Sequence as;
{
Attr_Sequence ptr;
if (as==NULLATTR) {
DLOG (log_dsap,LLOG_DEBUG,("copy of null as"));
return (NULLATTR);
}
ptr = (Attr_Sequence) smalloc (sizeof(attrcomp));
ptr->attr_type = AttrT_cpy (as->attr_type);
ptr->attr_value = avs_cpy (as->attr_value);
ptr->attr_link = NULLATTR;
ptr->attr_acl = NULLACL_INFO;
return (ptr);
}
Attr_Sequence as_cpy (as)
Attr_Sequence as;
{
Attr_Sequence start;
Attr_Sequence ptr,ptr2;
if (as == NULLATTR) {
DLOG (log_dsap,LLOG_DEBUG,("as_cpy of null as"));
return (NULLATTR);
}
start = as_comp_cpy (as);
ptr2 = start;
foreach (as->attr_link) {
ptr = as_comp_cpy (eptr);
ptr2->attr_link = ptr;
ptr2 = ptr;
}
return (start);
}
as_cmp_comp (a,b)
Attr_Sequence a,b;
{
int i;
if (( i= AttrT_cmp (a->attr_type,b->attr_type)) != 0)
return (i);
return (avs_cmp (a->attr_value,b->attr_value));
}
as_cmp (a,b)
Attr_Sequence a,b;
{
int i;
for (; (a != NULLATTR) && (b != NULLATTR) ; a = a->attr_link, b = b->attr_link)
if ( (i =as_cmp_comp (a,b)) != 0)
return (i);
if ( (a == NULLATTR) && (b == NULLATTR) )
return (0);
else
return (a ? 1 : -1);
}
Attr_Sequence as_find_type (a,b)
Attr_Sequence a;
AttributeType b;
{
register int i;
register Attr_Sequence ptr;
/* if Attr_cmp returns <0 no point in continuing due to ordering */
for(ptr = a; ptr != NULLATTR; ptr=ptr->attr_link) {
if ( (i = AttrT_cmp (ptr->attr_type,b)) <= 0)
return (i ? NULLATTR : ptr);
}
return (NULLATTR);
}
as_comp_print (ps,as,format)
PS ps;
Attr_Sequence as;
int format;
{
AV_Sequence avs;
char buffer [LINESIZE];
extern int oidformat;
if (as!=NULLATTR) {
switch (format) {
case EDBOUT:
AttrT_print (ps,as->attr_type,format);
ps_print (ps,"= ");
avs_print (ps,as->attr_value,format);
break;
case READOUT:
if (as->attr_type->at_table == NULLTABLE_ATTR)
AttrT_decode(as->attr_type);
if (as->attr_type->at_table == NULLTABLE_ATTR)
/* can't decode */
(void) sprintf (buffer,"%s",oid2name (as->attr_type->at_oid,oidformat));
else {
(void) sprintf (buffer,"%s",attr2name (as->attr_type->at_table,oidformat));
if (as->attr_type->at_table->oa_syntax == AV_OBJECTCLASS) {
ps_printf (ps, "%-21s - ", buffer);
oc_print (ps,as->attr_value,format);
ps_print (ps,"\n");
return;
}
}
for (avs = as->attr_value; avs != NULLAV; avs = avs->avseq_next) {
ps_printf (ps, "%-21s - ", buffer);
avs_comp_print (ps, avs, format);
ps_print (ps, "\n");
}
break;
}
}
}
as_print (ps,as,format)
Attr_Sequence as;
PS ps;
int format;
{
if ( as != NULLATTR )
foreach (as)
as_comp_print (ps,eptr,format);
}
Attr_Sequence str2as (str)
register char * str;
{
register char * ptr;
char * save, val;
AttributeType at;
AV_Sequence avs;
if (str == NULLCP)
return (NULLATTR);
if ((ptr = index (str,'=')) == 0) {
parse_error ("equals missing %s",str);
return (NULLATTR);
}
save = ptr++;
if (! isspace (*--save))
save++;
val = *save;
*save = 0;
if ((at = AttrT_new (str)) == NULLAttrT) {
parse_error ("unknown attribute type '%s'",str);
*ptr = '=';
return (NULLATTR);
}
*save = val;
if ((avs = str2avs (ptr,at)) == NULLAV) {
AttrT_free (at);
return (NULLATTR);
}
return (as_comp_new (at,avs,NULLACL_INFO));
}