|
|
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 o
Length: 3218 (0xc92)
Types: TextFile
Names: »or_rbits2or.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
└─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z«
└─⟦e5a54fb17⟧
└─⟦this⟧ »pp-5.0/Lib/or/or_rbits2or.c«
/* or_rbits2or.c: maps bits into OR */
# ifndef lint
static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Lib/or/RCS/or_rbits2or.c,v 5.0 90/09/20 16:08:36 pp Exp Locker: pp $";
# endif
/*
* $Header: /cs/research/pp/hubris/pp-beta/Lib/or/RCS/or_rbits2or.c,v 5.0 90/09/20 16:08:36 pp Exp Locker: pp $
*
* $Log: or_rbits2or.c,v $
* Revision 5.0 90/09/20 16:08:36 pp
* rcsforce : 5.0 public release
*
*/
#include "or.h"
#include "util.h"
#include "table.h"
static Table *tb_rfc2or = NULLTBL;
extern char *rfc2or_tbl,
or_error[];
/* --------------------- Begin Routines -------------------------------- */
int or_rbits2or (local, domain, or)
char *local;
char *domain;
OR_ptr *or;
{
OR_ptr ptr,
tptr;
char buf[LINESIZE],
*p;
PP_DBG (("Lib/or_rbits2or (%s,%s)", local, domain));
if (tb_rfc2or == NULLTBL) {
if ((tb_rfc2or = tb_nm2struct (rfc2or_tbl)) == NULLTBL) {
PP_LOG (LLOG_EXCEPTIONS, ("Lib/or_rbits2or: rfc2or table NULL!"));
return NOTOK;
}
}
*or = NULLOR;
for (p = domain; *p != '\0';) {
if (tb_k2val (tb_rfc2or, p, buf) == OK)
break;
p = index (p, '.');
if (p == NULLCP)
break;
else
p++;
}
if (p == NULLCP || *p == '\0') {
sprintf(or_error,
"No translation of '%s' to X400 address", domain);
return NOTOK;
}
else {
if (lexequ (buf, "local") == 0)
*or = NULLOR;
else {
*or = or_dmn2or (buf);
if (*or == NULLOR) {
PP_LOG (LLOG_EXCEPTIONS,
("Lib/or_rbits2or: fmt err '%s':'%s'",
p, buf));
sprintf(or_error,
"format error '%s':'%s'",
p, buf);
return NOTOK;
} /* --- end of if --- */
} /* --- end of else --- */
if (p != domain) {
/* --- Must add more bits --- */
int i;
int tconst;
int type;
int oargc;
char *oargv[50];
p--;
*p = '\0';
oargc = sstr2arg (domain, 49, oargv, ".");
if (*or != NULLOR) {
ptr = *or;
tconst = (or_lastpart (ptr)) -> or_type;
}
else
tconst = OR_OU;
for (i = oargc - 1; i >= 0; i--) {
tconst++;
if (tconst > OR_OU)
type = OR_OU;
else
type = tconst;
if (!or_isdomsyntax (oargv[i])) {
PP_LOG (LLOG_EXCEPTIONS,
("Lib/or_rbits2or: dmn syntax err"));
sprintf(or_error,
"domain syntax error '%s'",
oargv[i]);
return NOTOK;
}
ptr = or_new (type, NULLCP, oargv[i]);
*or = or_add (*or, ptr, FALSE);
if (*or == NULLOR)
return NOTOK;
} /* --- end of for --- */
} /* --- end of if --- */
} /* --- end of else --- */
/* --- Add in the local bits --- */
if ((ptr = or_std2or (local)) == NULLOR) {
PP_LOG (LLOG_EXCEPTIONS,
("Lib/or_rbits2or: local syntax err '%s'", local));
sprintf(or_error,
"local syntax error '%s'",
local);
return NOTOK;
}
for (; ptr != NULLOR ;) {
tptr = ptr -> or_next;
if ((ptr -> or_type == OR_DD) || (ptr -> or_type == OR_OU))
*or = or_add (*or, ptr, FALSE);
else
*or = or_add (*or, ptr, TRUE);
if (*or == NULLOR)
return NOTOK;
ptr = tptr;
}
if (or_delete_atsigns (or) == NOTOK)
return NOTOK;
*or = or_default (*or);
return OK;
}