|  | 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 u
    Length: 5408 (0x1520)
    Types: TextFile
    Names: »util.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
    └─⟦35176feda⟧ »EurOpenD22/isode/isode-6.tar.Z« 
        └─⟦de7628f85⟧ 
            └─⟦this⟧ »isode-6.0/dsap/common/util.c« 
/* util.c - General utility routines */
#ifndef lint
static char *rcsid = "$Header: /f/osi/dsap/common/RCS/util.c,v 7.0 89/11/23 21:44:40 mrose Rel $";
#endif
/*
 * $Header: /f/osi/dsap/common/RCS/util.c,v 7.0 89/11/23 21:44:40 mrose Rel $
 *
 *
 * $Log:	util.c,v $
 * Revision 7.0  89/11/23  21:44:40  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/commonarg.h"
#include "quipu/malloc.h"
#include "tsap.h"
#include <varargs.h>
extern LLog * log_dsap;
char * SkipSpace (ptr)
register char * ptr;
{
	if (ptr == NULLCP)
		return (NULLCP);
	while ( isspace (*ptr))
		ptr++;
	return (ptr);
}
void StripSpace (b)
register char *b;
/* copy b to a less spaces and comments */
{
register char *a;
	if (*b == COMMENT ) {
		*b = 0;
		return;
	}
	while ((! isspace(*b)) && (*b))
		b++;
	if (!*b)
		return;         /* nothing needs doing */
	a = b;
	for (;;) {
		if (isspace (*b))
			b++;
		else if ( (!*b) || (*b == COMMENT))
			break;
		else
			*a++ = *b++;
		}
	*a = 0;
}
void StripSpace2 (b)
register char *b;
/* copy b to a less spaces and comments */
{
register char *a;
	while ((! isspace(*b)) && (*b))
		b++;
	if (!*b)
		return;         /* nothing needs doing */
	a = b;
	for (;;) {
		if (isspace (*b))
			b++;
		else if (!*b)
			break;
		else
			*a++ = *b++;
		}
	*a = 0;
}
char * TidyString (a)
register char * a;
{
register char * b;
char * c;
register int i = 0;
	if (!*a)
		return (a);
	/* remove white space from front of string */
	while (isspace (*a))
		a++;
	/* now continue removing multiple and trailing spaces */
	c = a, b = a;
	while (*a) {
		if (isspace (*a)) {
			*b = ' ';       /* make sure not a tab etc */
			while (isspace (*++a))
				i = 1;
			if (*a)
				b++;
			else
				break;
		}
		if (i == 1)
			*b = *a;
		a++, b++;
	}
	*b = 0;
	if (*--b == '\n')
		*b-- = 0;
	if (*b == ' ')
		*b = 0;
	return (c);
}
test_prim_pe (pe,class,id)
PE pe;
PElementClass class;
PElementID id;
{
	if (pe == NULLPE)
		return FALSE;
	if (pe->pe_form != PE_FORM_PRIM) {
		LLOG (log_dsap,LLOG_EXCEPTIONS,("Primative Attribute Value expected"));
		return FALSE;
	}
	if ( PE_ID (pe -> pe_class, pe -> pe_id) != PE_ID (class, id) ) {
		LLOG (log_dsap,LLOG_EXCEPTIONS,("Bad class/ID in Attribute Value"));
		return FALSE;
	}
	return (TRUE);
	
}
#ifndef lint
ps_printf (va_alist)
va_dcl
{
	PS ps;
	char buffer [8192]; 	/* How big should this go !!! */
	va_list ap;
	va_start (ap);
	ps = va_arg (ap, PS);
	_asprintf (buffer,NULLCP,ap);
	ps_print (ps,buffer);
	va_end (ap) ;
}
#else
/* VARARGS2 */
ps_printf (ps,fmt)
PS ps;
char * fmt;
{
(void) ps_printf (ps,fmt) ;
}
#endif
fatal (code,fmt)
int  code;
char *fmt;
{
static char buf [80] = "FATAL ERROR: ";
	(void) strcat (buf,fmt);
	LLOG (log_dsap,LLOG_FATAL,(fmt));
	(void) fflush (stdout);
	(void) fprintf (stderr,"%s\n",buf);
	stop_listeners ();
	exit (code);
}
pslog (lp,event,str,func,ptr)
LLog * lp;
int event;
char * str;
int (*func) ();         /* assumes func (PS ,dataptr,(int) format); */
caddr_t ptr;
{
	/* log info to pstream */
PS ps;
char buffer [LINESIZE];
    if (!(lp -> ll_events & event))
	return;
    if ((ps = ps_alloc (str_open)) == NULLPS) {
	LLOG (lp,LLOG_EXCEPTIONS,("pslog: can't allocate pstream"));
	return ;
    }
    if (str_setup (ps,buffer,LINESIZE,1) == NOTOK) {
	LLOG (lp,LLOG_EXCEPTIONS,("pslog: can't setup pstream"));
	return ;
    }
    (*func) (ps,ptr,EDBOUT);
    *ps->ps_ptr = 0;
    ps_free (ps);
    LLOG (lp,event,("%s: %s",str,buffer));
}
stop_listeners ()
{
struct TSAPdisconnect	  td_s;
struct TSAPdisconnect	* td = &(td_s);
	/* close all listeners */
	(void) TNetClose (NULLTA,td);
}
quipu_pe_cmp (a,b)
register PE a,b;
{
char *p,*q;
register int j,i;
	/* based on ISODE pe_cmp */
	if ( a == NULLPE) {
		if ( b == NULLPE )
			return (0);
		else 
			return (1);
	}
	if ( b == NULLPE)
		return (-1);
	if (a->pe_class != b->pe_class)
		if (a->pe_class >  b->pe_class)
			return (1) ;
		else
			return (-1);
	if (a->pe_form != b->pe_form)
		if (a->pe_form >  b->pe_form)
			return (1) ;
		else
			return (-1);
	if (a->pe_id != b->pe_id)
		if (a->pe_id >  b->pe_id)
			return (1) ;
		else
			return (-1);
	switch ( a->pe_form ) {
	    case PE_FORM_ICONS:
	    	if (a->pe_ilen != a->pe_ilen)
			return (a->pe_ilen > b->pe_ilen ? 1 : -1);
	    case PE_FORM_PRIM:
		if ( (i=a->pe_len) != b->pe_len)
			if (  i > b->pe_len )
				return (1);
			else
				return (-1);
		p = (char *) a->pe_prim;
		q = (char *) b->pe_prim;
		for (j=0; j<i; j++) {
			if (*p != *q)
				if ( *p > *q )
					return (1);
				else
					return (-1);
			p++;
			q++;
		}
		return (0) ;
	    case PE_FORM_CONS:
		for (a=a->pe_cons,b=b->pe_cons; a; a=a->pe_next,b=b->pe_next)
			if ((i = quipu_pe_cmp (a,b)) != 0)
				return (i);
		return (b ? 1 : 0);
	    default:
		return (1);
	}
}
ava_decode (purported)
ava *purported;
{
	return (AttrV_decode (purported->ava_type, purported->ava_value));
}
IFP acl_fn = NULLIFP;
struct acl_info * acl_dflt ()
{
	if (acl_fn == NULLIFP)
		return ((struct acl_info *) NULL);
	else
		return ((struct acl_info *)(*acl_fn)());
}