DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T d

⟦c428bddb8⟧ TextFile

    Length: 4310 (0x10d6)
    Types: TextFile
    Names: »dn_seq.c«

Derivation

└─⟦3d0c2be1b⟧ Bits:30001254 ISODE-5.0 Tape
    └─⟦eba4602b1⟧ »./isode-5.0.tar.Z« 
        └─⟦d3ac74d73⟧ 
            └─⟦this⟧ »isode-5.0/dsap/common/dn_seq.c« 

TextFile

/* 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);
}