|
|
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 d
Length: 4310 (0x10d6)
Types: TextFile
Names: »dn_seq.c«
└─⟦3d0c2be1b⟧ Bits:30001254 ISODE-5.0 Tape
└─⟦eba4602b1⟧ »./isode-5.0.tar.Z«
└─⟦d3ac74d73⟧
└─⟦this⟧ »isode-5.0/dsap/common/dn_seq.c«
/* dn_seq.c - General Directory Name Sequence routines */
#ifndef lint
static char *rcsid = "$Header: /f/osi/dsap/common/RCS/dn_seq.c,v 6.0 89/03/18 23:27:29 mrose Rel $";
#endif
/*
* $Header: /f/osi/dsap/common/RCS/dn_seq.c,v 6.0 89/03/18 23:27:29 mrose Rel $
*
*
* $Log: dn_seq.c,v $
* Revision 6.0 89/03/18 23:27:29 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/entry.h"
dn_seq_free (dnseq)
struct dn_seq * dnseq;
{
struct dn_seq * ptr;
for (ptr=dnseq ; ptr!=NULLDNSEQ; ptr=ptr->dns_next ) {
dn_free (ptr->dns_dn);
free ((char *) ptr);
}
}
struct dn_seq * dn_seq_cpy (dnseq)
struct dn_seq * dnseq;
{
register struct dn_seq * ptr;
struct dn_seq * ptr2;
struct dn_seq * result = NULLDNSEQ;
for (ptr=dnseq ; ptr!=NULLDNSEQ; ptr=ptr->dns_next ) {
ptr2 = dn_seq_alloc();
ptr2 -> dns_next = result;
result = ptr2;
result->dns_dn = dn_cpy (ptr->dns_dn);
}
return (result);
}
dn_seq_decode (dnseq)
struct dn_seq * dnseq;
{
register struct dn_seq * ptr;
for (ptr=dnseq ; ptr!=NULLDNSEQ; ptr=ptr->dns_next ) {
dn_decode (ptr->dns_dn);
}
}
check_dnseq (dnseq,who)
struct dn_seq * dnseq;
DN who;
{
register struct dn_seq * ptr;
for (ptr=dnseq; ptr!=NULLDNSEQ; ptr=ptr->dns_next) {
if (dn_cmp (who,ptr->dns_dn) == OK)
return (OK);
}
return (NOTOK);
}
dn_seq_cmp (a,b)
struct dn_seq * a, * b;
{
int result;
for ( ; (a!=NULLDNSEQ) && (b!=NULLDNSEQ); a=a->dns_next, b=b->dns_next )
if ((result = dn_cmp (a->dns_dn,b->dns_dn)) != 0)
return (result);
if (a == b)
return (0); /* both NULL */
return ( (a == NULLDNSEQ) ? 1 : -1 );
}
check_dnseq_prefix (dnseq,who)
struct dn_seq * dnseq;
DN who;
{
struct dn_seq * ptr;
for (ptr=dnseq; ptr!=NULLDNSEQ; ptr=ptr->dns_next) {
if (dn_cmp_prefix (ptr->dns_dn,who) == OK)
return (OK);
}
return (NOTOK);
}
dn_seq_print (ps,dnseq,format)
PS ps;
struct dn_seq * dnseq;
int format;
{
if (dnseq == NULLDNSEQ)
return;
if (format == DIROUT)
format = EDBOUT;
/* NO I have not gone off my rocker !!! */
/* We do not want dn_seq printed with a '/', but a '@' */
/* even if the output if for a directory name !!! */
dn_print (ps,dnseq->dns_dn,format);
for (dnseq=dnseq->dns_next; dnseq!=NULLDNSEQ; dnseq=dnseq->dns_next) {
ps_print (ps,"$");
dn_print (ps,dnseq->dns_dn,format);
}
}
struct dn_seq * str2dnseq (str)
register char * str;
{
register char *ptr;
register char *save,val;
struct dn_seq * dns = NULLDNSEQ;
struct dn_seq * newdns;
while ( (ptr = index (str,'$')) != 0) {
save = ptr++;
save--;
if (! isspace (*save))
save++;
val = *save;
*save = 0;
newdns = dn_seq_alloc();
if ((newdns->dns_dn = str2dn (str)) == NULLDN) {
dn_seq_free (dns);
free ((char *) newdns);
return (NULLDNSEQ);
}
newdns->dns_next = dns;
dns = newdns;
*save = val;
str = ptr;
}
if ((ptr = rindex (str,'#')) != 0) {
/* a bit or reverse compatability... */
if (*++ptr != 0) {
parse_error ("invalid # in sequence '%s'",str);
dn_seq_free (dns);
return (NULLDNSEQ);
}
else
*--ptr = 0;
}
newdns = dn_seq_alloc();
if ((newdns->dns_dn = str2dn (str)) == NULLDN) {
dn_seq_free (dns);
free ((char *) newdns);
return (NULLDNSEQ);
}
newdns->dns_next = dns;
dns = newdns;
return (dns);
}
int dn_in_dnseq(dn, dnseq)
DN dn;
struct dn_seq * dnseq;
{
struct dn_seq * ptr;
for(ptr=dnseq; ptr!=NULLDNSEQ; ptr=ptr->dns_next)
{
if(dn_cmp(dn, dnseq->dns_dn) == 0)
break;
}
if(ptr == NULLDNSEQ)
return(FALSE);
return(TRUE);
}
struct dn_seq * dn_seq_push(dn,dnseq)
DN dn;
struct dn_seq * dnseq;
{
struct dn_seq * ret;
ret = dn_seq_alloc();
ret->dns_dn = dn_cpy(dn);
ret->dns_next = dnseq;
return(ret);
}
struct dn_seq * dn_seq_pop(dnseq)
struct dn_seq * dnseq;
{
struct dn_seq * ret;
if(dnseq == NULLDNSEQ)
return(NULLDNSEQ);
ret = dnseq->dns_next;
dn_free(dnseq->dns_dn);
free((char *)dnseq);
return(ret);
}