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 c

⟦5fe6ef46f⟧ TextFile

    Length: 3106 (0xc22)
    Types: TextFile
    Names: »ca.c«

Derivation

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

TextFile

/* ca.c - General Directory Name routines */

#ifndef lint
static char *rcsid = "$Header: /f/osi/dsap/common/RCS/ca.c,v 6.0 89/03/18 23:27:26 mrose Rel $";
#endif

/*
 * $Header: /f/osi/dsap/common/RCS/ca.c,v 6.0 89/03/18 23:27:26 mrose Rel $
 *
 *
 * $Log:	ca.c,v $
 * Revision 6.0  89/03/18  23:27:26  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/common.h"
#include "quipu/dsargument.h"

extern char	* mydsaname;

struct common_args      * get_ca_ref(dsarg)
struct ds_op_arg        * dsarg;
{
    struct common_args  * ca;

    switch(dsarg->dca_dsarg.arg_type)
    {
    case OP_READ :
	ca = &(dsarg->dca_dsarg.arg_rd.rda_common);
    break;
    case OP_COMPARE :
	ca = &(dsarg->dca_dsarg.arg_cm.cma_common);
    break;
    case OP_ABANDON :
	ca = NULL_COMMONARG;
    break;
    case OP_LIST :
	ca = &(dsarg->dca_dsarg.arg_ls.lsa_common);
    break;
    case OP_SEARCH :
	ca = &(dsarg->dca_dsarg.arg_sr.sra_common);
    break;
    case OP_ADDENTRY :
	ca = &(dsarg->dca_dsarg.arg_ad.ada_common);
    break;
    case OP_REMOVEENTRY :
	ca = &(dsarg->dca_dsarg.arg_rm.rma_common);
    break;
    case OP_MODIFYENTRY :
	ca = &(dsarg->dca_dsarg.arg_me.mea_common);
    break;
    case OP_MODIFYRDN :
	ca = &(dsarg->dca_dsarg.arg_mr.mra_common);
    break;
    case OP_GETEDB :
	ca = NULL_COMMONARG;
    break;
    }
    return(ca);
}

cha_loopdetected(cha)
struct chain_arg	* cha;
{
    struct trace_info	  ti_elem_s;
    struct trace_info	* ti_elem = &(ti_elem_s);

    ti_elem->ti_dsa = str2dn(mydsaname);
    ti_elem->ti_target = dn_cpy(cha->cha_target);
    ti_elem->ti_progress.op_resolution_phase = cha->cha_progress.op_resolution_phase;
    ti_elem->ti_progress.op_nextrdntoberesolved = cha->cha_progress.op_nextrdntoberesolved;

    return(ti_is_elem(ti_elem, cha->cha_trace));
}

ti_is_elem(ti, ti_list)
struct trace_info	* ti;
struct trace_info	* ti_list;
{
    struct trace_info	* tip;

    for(tip = ti_list; tip!=NULLTRACEINFO; tip=tip->ti_next)
    {
	dn_decode(tip->ti_dsa);
	if(dn_cmp(ti->ti_dsa, tip->ti_dsa) != 0)
	    continue;

	dn_decode(tip->ti_target);
	if(dn_cmp(ti->ti_target, tip->ti_target) != 0)
	    continue;

	if(ti->ti_progress.op_resolution_phase == tip->ti_progress.op_resolution_phase)
	    continue;

	if(ti->ti_progress.op_nextrdntoberesolved == tip->ti_progress.op_nextrdntoberesolved)
	    return(1);
    }

    return(0);
}

struct trace_info	* ti_cpy(ti)
struct trace_info	* ti;
{
    struct trace_info	* ret_ti;

    if(ti == NULLTRACEINFO)
	return(NULLTRACEINFO);

    ret_ti = (struct trace_info *) malloc(sizeof(struct trace_info));

    ret_ti->ti_target = dn_cpy(ti->ti_target);
    ret_ti->ti_dsa = dn_cpy(ti->ti_dsa);
    ret_ti->ti_progress = ti->ti_progress;
    ret_ti->ti_next = ti_cpy(ti->ti_next);

    return(ret_ti);
}