|
|
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 o
Length: 4690 (0x1252)
Types: TextFile
Names: »oidseq.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
└─⟦35176feda⟧ »EurOpenD22/isode/isode-6.tar.Z«
└─⟦de7628f85⟧
└─⟦this⟧ »isode-6.0/dsap/common/oidseq.c«
/* oidseq.c - OID Sequence utility routines */
#ifndef lint
static char *rcsid = "$Header: /f/osi/dsap/common/RCS/oidseq.c,v 7.1 89/12/19 16:19:27 mrose Exp $";
#endif
/*
* $Header: /f/osi/dsap/common/RCS/oidseq.c,v 7.1 89/12/19 16:19:27 mrose Exp $
*
*
* $Log: oidseq.c,v $
* Revision 7.1 89/12/19 16:19:27 mrose
* sync
*
* Revision 7.0 89/11/23 21:42:36 mrose
* Release 6.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/entry.h"
extern int oidformat;
oid_seq_free (ptr)
struct oid_seq * ptr;
{
register struct oid_seq * loop;
register struct oid_seq * next;
for (loop=ptr; loop!=NULLOIDSEQ; loop=next) {
next = loop->oid_next;
oid_free (loop->oid_oid);
free ((char *) loop);
}
}
struct oid_seq *oid_seq_merge (a,b)
struct oid_seq *a;
struct oid_seq *b;
{
register struct oid_seq *aptr, *bptr, *result, *trail;
if ( a == NULLOIDSEQ )
return (b);
if ( b == NULLOIDSEQ )
return (a);
/* start sequence off, make sure 'a' is the first */
switch (oid_cmp (a->oid_oid,b->oid_oid)) {
case 0: /* equal */
result = a;
oid_free (b->oid_oid);
free ((char *) b);
aptr = a->oid_next;
bptr = b->oid_next;
break;
case -1:
result = b;
aptr = a;
bptr = b->oid_next;
break;
case 1:
result = a;
aptr = a->oid_next;
bptr = b;
break;
}
trail = result;
while ( (aptr != NULLOIDSEQ) && (bptr != NULLOIDSEQ) ) {
switch (oid_cmp (aptr->oid_oid,bptr->oid_oid)) {
case 0: /* equal */
trail->oid_next = aptr;
trail = aptr;
oid_free (bptr->oid_oid);
free ((char *) bptr);
aptr = aptr->oid_next;
bptr = bptr->oid_next;
break;
case -1:
trail->oid_next = bptr;
trail = bptr;
bptr = bptr->oid_next;
break;
case 1:
trail->oid_next = aptr;
trail = aptr;
aptr = aptr->oid_next;
break;
}
}
if (aptr == NULLOIDSEQ)
trail->oid_next = bptr;
else
trail->oid_next = aptr;
return (result);
}
oid_seq_cmp (a,b)
struct oid_seq *a, *b;
{
struct oid_seq * aa1;
struct oid_seq * aa2;
if((a == NULLOIDSEQ) && (b == NULLOIDSEQ))
return(0);
if(a == NULLOIDSEQ)
return(-1);
if(b == NULLOIDSEQ)
return(1);
for(aa1=a; aa1 != NULLOIDSEQ; aa1=aa1->oid_next)
{
for(aa2=b; aa2 != NULLOIDSEQ; aa2=aa2->oid_next)
{
if(oid_cmp(aa1->oid_oid, aa2->oid_oid) == 0)
break;
}
if(aa2 == NULLOIDSEQ)
return(1);
}
for(aa2=b; aa2 != NULLOIDSEQ; aa2=aa2->oid_next)
{
for(aa1=a; aa1 != NULLOIDSEQ; aa1=aa1->oid_next)
{
if(oid_cmp(aa1->oid_oid, aa2->oid_oid) == 0)
break;
}
if(aa1 == NULLOIDSEQ)
return(-1);
}
return(0);
}
struct oid_seq * oid_seq_cpy (a)
struct oid_seq * a;
{
register struct oid_seq * b;
register struct oid_seq * c;
register struct oid_seq * d;
struct oid_seq * result;
result = oid_seq_alloc ();
result -> oid_oid = oid_cpy (a->oid_oid);
result -> oid_next = NULLOIDSEQ;
b = result;
for (c=a->oid_next; c!=NULLOIDSEQ; c=c->oid_next) {
d = oid_seq_alloc ();
d-> oid_oid = oid_cpy (c->oid_oid);
d-> oid_next = NULLOIDSEQ;
b-> oid_next = d;
b = d;
}
return (result);
}
oid_seq_print (ps,ptr,format)
PS ps;
register struct oid_seq * ptr;
int format;
{
ps_printf (ps,"%s",oid2name (ptr->oid_oid,oidformat));
for ( ptr=ptr->oid_next; ptr!= NULLOIDSEQ; ptr=ptr->oid_next)
if ( format == READOUT )
ps_printf (ps," AND %s",oid2name (ptr->oid_oid,oidformat));
else
ps_printf (ps,"$%s",oid2name (ptr->oid_oid,oidformat));
}
struct oid_seq * str2oidseq (str)
char * str;
{
register char *ptr;
register char *save,val;
struct oid_seq * ois = NULLOIDSEQ;
struct oid_seq * newois;
OID oid;
char * SkipSpace();
while ( (ptr = index (str,'$')) != 0) {
save = ptr++;
save--;
if (! isspace (*save))
save++;
val = *save;
*save = 0;
newois = oid_seq_alloc();
if ((oid = name2oid (SkipSpace(str))) == NULLOID) {
parse_error ("invaild name in sequence %s",str);
oid_seq_free (ois);
free ((char *) newois);
return (NULLOIDSEQ);
}
newois->oid_oid = oid_cpy(oid);
newois->oid_next = ois;
ois = newois;
*save = val;
str = ptr;
}
newois = oid_seq_alloc();
if ((oid = name2oid (SkipSpace(str))) == NULLOID) {
parse_error ("invaild name in sequence %s",str);
oid_seq_free (ois);
free ((char *) newois);
return (NULLOIDSEQ);
}
newois->oid_oid = oid_cpy(oid);
newois->oid_next = ois;
ois = newois;
return (ois);
}