|
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: 5715 (0x1653) Types: TextFile Names: »util.c«
└─⟦3d0c2be1b⟧ Bits:30001254 ISODE-5.0 Tape └─⟦eba4602b1⟧ »./isode-5.0.tar.Z« └─⟦d3ac74d73⟧ └─⟦this⟧ »isode-5.0/dsap/common/util.c«
/* util.c - General utility routines */ #ifndef lint static char *rcsid = "$Header: /f/osi/dsap/common/RCS/util.c,v 6.0 89/03/18 23:27:55 mrose Rel $"; #endif /* * $Header: /f/osi/dsap/common/RCS/util.c,v 6.0 89/03/18 23:27:55 mrose Rel $ * * * $Log: util.c,v $ * Revision 6.0 89/03/18 23:27:55 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/commonarg.h" #include <varargs.h> static LLog _ldsap_log = { "dsap.log", NULLCP, NULLCP, LLOG_FATAL, LLOG_NONE, 20, LLOGZER | LLOGCRT | LLOGCLS, NOTOK }; LLog *log_dsap = &_ldsap_log; int oidformat = 1; /* oid format, 1=part, 2=full, 3=numeric */ 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); } #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)); } quipu_oid_cmp (p,q) OID p,q; { register unsigned int *a,*b; register int j,i; if (p == NULLOID) return ((q == NULLOID) ? 0 : -1); if (q == NULLOID) return (1); /* routine base on ISODE oid_cmp - but orders OID's */ i = p->oid_nelem; j = q->oid_nelem; if ( i != j ) if ( i<j ) return (1); else return (-1); a = p->oid_elements + i - 1; b = q->oid_elements + j - 1; for (j=0; j<i ; j++) { if (*a != *b) if ( *a < *b ) return (1); else return (-1); a--; b--; } return (0); } quipu_pe_cmp (a,b) register PE a,b; { char *p,*q; register int j,i; /* based on ISODE pe_cmp */ 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_PRIM: if ( (i=a->pe_len) != b->pe_len) if ( i > b->pe_len ) return (1); else return (-1); if (a->pe_id == PE_DEFN_PRTS) return (lexnequ ((char *)a->pe_prim,(char *)b->pe_prim,i)); 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) /* NOSTRICT */ if ((i = quipu_pe_cmp (a,b) != 0)) return (i); return (a ? 1 : 0); default: return (1); } } ava_decode (purported) ava *purported; { AttrV_decode (purported->ava_type, purported->ava_value); } /* the next routines are stubs - the *real* routines are used for intense debugging. Calls to them sould be #define out, but just incase... */ #undef lmalloc #undef lfree #ifndef lint char * lmalloc (a,b,c) int a,b; char *c; { return ((char *)smalloc (b)); } lfree (a,b,c) int a; char * b, *c; { free (b); } #else char * lmalloc (a,b,c) int a,b; char *c; { return (lmalloc (a,b,c)); } lfree (a,b,c) int a; char *b, *c; { (void) lfree (a,b,c); } #endif