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 u

⟦8ee189570⟧ TextFile

    Length: 6321 (0x18b1)
    Types: TextFile
    Names: »user.c«

Derivation

└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
    └─⟦35176feda⟧ »EurOpenD22/isode/isode-6.tar.Z« 
        └─⟦de7628f85⟧ 
            └─⟦this⟧ »isode-6.0/quipu/dish/user.c« 

TextFile

/* user.c - */

#ifndef	lint
static char *rcsid = "$Header: /f/osi/quipu/dish/RCS/user.c,v 7.2 90/01/11 18:37:47 mrose Exp $";
#endif

/* 
 * $Header: /f/osi/quipu/dish/RCS/user.c,v 7.2 90/01/11 18:37:47 mrose Exp $
 *
 *
 * $Log:	user.c,v $
 * Revision 7.2  90/01/11  18:37:47  mrose
 * real-sync
 * 
 * Revision 7.1  89/12/19  16:21:07  mrose
 * sync
 * 
 * Revision 7.0  89/11/23  22:20:25  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.
 *
 */


#include "quipu/util.h"
#include "quipu/read.h"
#include "quipu/sequence.h"

#include "isoaddrs.h"

static struct dua_sequence * current_sequence = NULL_DS;
static struct dua_sequence * top_sequence = NULL_DS;

#define	OPT	(!frompipe || rps -> ps_byteno == 0 ? opt : rps)
#define	RPS	(!frompipe || opt -> ps_byteno == 0 ? rps : opt)
extern	char	frompipe;
extern	PS	opt, rps;

call_ds (argc,argv)
int argc;
char ** argv;
{
extern char bound;
extern char * myname;
extern char * dsa_address;
extern char * isodeversion;
extern char * dsapversion;
extern char * quipuversion;
extern DN 	fixed_pos;
extern DN 	user_name;
extern struct PSAPaddr dsa_bound;

	if (argc > 1) {
		if (test_arg (argv[1],"-sequence",1)) {
			show_sequence (argv[2]);
			return;
		} else if (test_arg (argv[1], "-alias", 1)) {
		        new_alias (argv[2]);
			return;
		} else if (test_arg (argv[1], "-version", 1)) {
		    ps_printf (RPS,"ISODE version %s\n",isodeversion);
		    ps_printf (RPS,"DSAP  version %s\n",dsapversion);
		    ps_printf (RPS,"QUIPU version %s\n",quipuversion);
		    return;
		} else if (test_arg (argv[1], "-user", 1)) {
			dn_print (RPS, user_name, EDBOUT);
			ps_print (RPS, "\n");
			return;
		} else {
			Usage (argv[0]);
			return;
		}
	}

	if (bound) {
	        ps_printf (RPS, "Connected to ");
		if (strcmp (myname, dsa_address))
		    ps_printf (RPS, "%s at ", myname);
		ps_printf (RPS, "%s\n", pa2str (&dsa_bound));
	}
	else 
		ps_print (RPS,"Not connected to a DSA (cache exists)\n");
	ps_print (RPS,"Current position: @");
	dn_print (RPS, fixed_pos, EDBOUT);
	ps_print (RPS, "\nUser name: @");
	dn_print (RPS, user_name, EDBOUT);
	ps_print (RPS, "\n");
	if (current_sequence != NULL_DS)
		ps_printf (RPS,"Current sequence '%s'\n",current_sequence->ds_name);
}


set_sequence (str)
char * str;
{
struct dua_sequence *ptr;

	if (lexequ (str,"reset") == 0) {
                if (current_sequence == NULL_DS)
                        return;
                current_sequence->ds_data = NULL_DE;
                current_sequence->ds_last = NULL_DE;
		return;
	}

	for (ptr = top_sequence; ptr != NULL_DS; ptr=ptr->ds_next)
		if (lexequ (ptr->ds_name,str) == 0) {
			current_sequence = ptr;
			return;
		}

	ptr = ds_alloc();
	ptr->ds_name = strdup (str);
	ptr->ds_data = NULL_DE;
	ptr->ds_last = NULL_DE;
	ptr->ds_next = top_sequence;
	top_sequence = ptr;
	current_sequence = ptr;
}

unset_sequence ()
{
	current_sequence = NULL_DS;
}

add_sequence (adn)
DN adn;
{
struct dua_seq_entry * ptr;
register int x=1;

	if (current_sequence == NULL_DS)
		return (0);
	
	for (ptr=current_sequence->ds_data; ptr != NULL_DE; ptr=ptr->de_next,x++) 
		if (dn_cmp (adn,ptr->de_name) == 0)
			return (x);

	ptr = de_alloc();
	ptr->de_name = dn_cpy (adn);
	ptr->de_next = NULL_DE;
	if (current_sequence->ds_data == NULL_DE) 
		current_sequence->ds_data = ptr;
	else
		current_sequence->ds_last->de_next = ptr;
	current_sequence->ds_last = ptr;
		
	return (x);
}

DN sequence_dn(y)
int y;
{
struct dua_seq_entry * ptr;
register int x = 1;

	if (current_sequence == NULL_DS)
		return (NULLDN);

	for (ptr=current_sequence->ds_data; 
		(ptr != NULL_DE) && (x<y); 
		ptr=ptr->de_next,x++) 
			;		

	if (ptr == NULL_DE)
		return (NULLDN);
	if ( x == y )
		return (ptr->de_name);
	return (NULLDN);
			
}


show_sequence (str)
char * str;
{
struct dua_seq_entry * ptr;
register int x = 1;

	if (str != NULLCP)
		set_sequence (str);

	if (current_sequence == NULL_DS) {
		ps_print (OPT,"No sequence set!\n");
		return;
	}

	if (strcmp (current_sequence -> ds_name, "default"))
	    ps_printf (RPS,"Sequence %s contains:-\n",
		       current_sequence->ds_name);

	for (ptr=current_sequence->ds_data; ptr != NULL_DE; ptr=ptr->de_next, x++) {
		ps_printf (RPS,"%-3d @",x);
		dn_print (RPS,ptr->de_name,EDBOUT);
		ps_print (RPS,"\n");
	}
}

/* \f

 */

static new_alias (cp)
char   *cp;
{
    int	    seqno;
    DN	    sdn;

    if ((sdn = str2dn (*cp != '@' ? cp : cp + 1)) == NULLDN) {
	ps_printf (OPT, "Invalid DN for alias: %s\n", cp);
	return;
    }

    set_sequence ("default");
    if (seqno = add_sequence (sdn)) {
	ps_printf (RPS, "%-3d @", seqno);
	dn_print (RPS, sdn, EDBOUT);
	ps_print (RPS, "\n");
    }
}

dish_error (ps,error)
PS ps;
struct DSError * error;
{
struct access_point * ap;
extern char neverefer;
extern int chase_flag;

	if (error->dse_type == DSE_ABANDONED) {
		ps_print (ps,"(DAP call interrupted - abandon successful)\n");
		return (0);
	}

	if (error->dse_type == DSE_ABANDON_FAILED) {
		ps_print (ps,"(DAP call interrupted - abandon unsuccessful)\n");
		return (0);
	}

	if (error->dse_type == DSE_INTRERROR) {
		ps_print (ps,"(DAP call interrupted)\n");
		return (0);
	}

	if ((error->dse_type != DSE_REFERRAL) 
		|| ((chase_flag == 0) && neverefer) 
		|| (chase_flag == 1)) {
		ds_error (ps,error);
		return (0);
	}


	if (error->ERR_REFERRAL.DSE_ref_candidates == NULLCONTINUATIONREF) {
		ps_print (ps,"*** Referral error (but no reference !!!) ***\n");
		return (0);
	}

	for (ap = error->ERR_REFERRAL.DSE_ref_candidates->cr_accesspoints; 
				ap != NULLACCESSPOINT; ap=ap->ap_next) {

		if (chase_flag != 2) {
			ps_print (ps,"Referral to ");
			(void) dn_decode (ap->ap_name);
			dn_print (ps,ap->ap_name,EDBOUT);

			if (yesno (". Chase ? ") == FALSE) 	
				continue;
		} else if (!frompipe) {
			ps_print (ps,"Referring to ");
			(void) dn_decode (ap->ap_name);
			dn_print (ps,ap->ap_name,EDBOUT);
			ps_print (ps,"...\n");
			(void) ps_flush (ps);
		}

		if (referral_bind (ap->ap_address) != 0) 
			return (1);

		if (chase_flag == 2)
			break; /* only try first - otherwise possible looping */
	}
	return (0);
}