|
|
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 s
Length: 2597 (0xa25)
Types: TextFile
Names: »syn_oraddr.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
└─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z«
└─⟦e5a54fb17⟧
└─⟦this⟧ »pp-5.0/Chans/dirlist/syn_oraddr.c«
/* syn_oraddr.c: */
# ifndef lint
static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Chans/dirlist/RCS/syn_oraddr.c,v 5.0 90/09/20 15:46:05 pp Exp Locker: pp $";
# endif
/*
* $Header: /cs/research/pp/hubris/pp-beta/Chans/dirlist/RCS/syn_oraddr.c,v 5.0 90/09/20 15:46:05 pp Exp Locker: pp $
*
* $Log: syn_oraddr.c,v $
* Revision 5.0 90/09/20 15:46:05 pp
* rcsforce : 5.0 public release
*
*/
/* LINTLIBRARY */
#include "util.h"
#include <varargs.h>
#include "retcode.h"
#include "adr.h"
#include "ap.h"
#include "dlist.h"
#include <isode/quipu/attrvalue.h>
OR_ptr orAddr_parse (ptr)
char * ptr;
{
OR_ptr or;
char * str;
if (*ptr == '/') {
if ((or = or_std2or(ptr)) == NULLOR) {
parse_error ("std2or failed %s",ptr);
return (NULLOR);
}
} else {
ap_s2s (ptr, &str, CH_USA_PREF);
if (str != NULLCP)
ptr = str;
if (or_rfc2or(ptr,&or) != OK) {
parse_error ("rfc2or failed %s",ptr);
if (str != NULLCP)
free (str);
return (NULLOR);
}
if (str != NULLCP)
free (str);
}
return (or);
}
/* ARGSUSED */
orAddr_print (ps,or,format)
PS ps;
OR_ptr or;
int format;
{
char buf[LINESIZE];
/*
if ((format == READOUT) || (format == UFNOUT))
or_or2rfc (or,buf);
else
*/
or_or2std (or,buf,0);
ps_printf (ps,"%s",buf);
}
OR_ptr or_cpy (a)
OR_ptr a;
{
OR_ptr top = NULLOR;
for (; a != NULLOR; a=a->or_next)
top = or_add (top,or_dup(a),FALSE);
return (top);
}
static int my_or_cmp (or1, or2)
OR_ptr or1;
OR_ptr or2;
{
int res;
if (or1 -> or_type != or2 -> or_type)
return (or1 -> or_type > or2 -> or_type) ? 1 : -1;
if ((res = lexequ (or1 -> or_value, or2 -> or_value)) != 0)
return res;
if (or1 -> or_type == OR_DD
&& (res = lexequ (or1 -> or_ddname, or2 -> or_ddname)) != 0)
return res;
return 0;
}
orAddr_cmp (a,b)
OR_ptr a,b;
{
int res;
for (; (a != NULLOR) && (b != NULLOR) ; a = a->or_next, b = b->or_next)
if ((res = my_or_cmp (a,b)) != 0)
return res;
if (( a == NULLOR) && (b == NULLOR))
return 0;
else
return (a == NULLOR) ? 1 : -1;
}
static OR_ptr orAddr_dec (pe)
PE pe;
{
OR_ptr m = NULLOR;
if (decode_MAS_ORAddress (pe,1,NULLIP,NULLVP,&m) == NOTOK)
return (NULLOR);
return (m);
}
static PE orAddr_enc (m)
OR_ptr m;
{
PE ret_pe;
(void) encode_MAS_ORAddress (&ret_pe,0,0,NULLCP,m);
return (ret_pe);
}
orAddr_syntax ()
{
(void) add_attribute_syntax ("ORAddress",
(IFP) orAddr_enc, (IFP) orAddr_dec,
(IFP) orAddr_parse, orAddr_print,
(IFP) or_cpy, orAddr_cmp,
(IFP) or_free, NULLCP,
NULLIFP, TRUE);
}