|
|
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: 3741 (0xe9d)
Types: TextFile
Names: »or_util.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_util.c«
/* or_util.c: or-name utility routines */
# ifndef lint
static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Lib/or/RCS/or_util.c,v 5.0 90/09/20 16:08:53 pp Exp Locker: pp $";
# endif
/*
* $Header: /cs/research/pp/hubris/pp-beta/Lib/or/RCS/or_util.c,v 5.0 90/09/20 16:08:53 pp Exp Locker: pp $
*
* $Log: or_util.c,v $
* Revision 5.0 90/09/20 16:08:53 pp
* rcsforce : 5.0 public release
*
*/
/*
OR Name handling Utilities
*/
#include "util.h"
#include "or.h"
char *or_type2name (type)
int type;
{
typestruct *ptr;
PP_DBG (("or_util.c/or_type2name()"));
for (ptr = typetab; (ptr -> ty_string) != NULLCP; ptr++)
if (type == ptr->ty_int)
return (ptr->ty_string);
return NULLCP;
}
int or_name2type (name)
char *name;
{
typestruct *ptr;
PP_DBG (("or_util.c/or_name2type (%s)", name ? name : "null"));
if (!isstr (name))
return NOTOK;
for (ptr = typetab; (ptr -> ty_string) != NULLCP; ptr++)
if (lexequ (name, ptr->ty_string) == 0)
return (ptr->ty_int);
return NOTOK;
}
/*
Strcat + dot quoting
*/
void dstrcat (s1, s2)
char *s1;
char *s2;
{
register char *p, *q;
p = s1 + strlen (s1);
for (q = s2; *q != '\0';)
switch (*q) {
case '.':
case '"':
case '\\':
/*
Shouldn't be any backslashes tho...
*/
*p++ = '\\';
default:
*p++ = *q++;
break;
}
*p = '\0';
PP_DBG (("or_util.c/dstrcat(%s, %s)", s1, s2));
}
/*
Strcat + dollar quoting
*/
void qstrcat (s1, s2)
char *s1;
char *s2;
{
register char *p,
*q;
PP_DBG (("qstrcat()"));
p = s1 + strlen (s1);
for (q = s2; *q != '\0';)
switch (*q) {
case '/':
case '=':
*p++ = '$';
default:
*p++ = *q++;
break;
}
*p = '\0';
}
int or_gettoken (str, delim, buf)
char **str;
char delim;
char *buf;
{
char *ind = *str,
*x;
x = buf;
if (*ind == '\0')
return NOTOK;
for (; (*ind != delim) && (*ind != '\0'); ind++, buf++)
*buf = *ind;
if (*ind != '\0') ind++;
*str = ind;
*buf = '\0';
PP_DBG (("or_util.c/or_gettoken (%s)", x));
return OK;
}
int or_ddvalid_chk (key, buf)
char *key;
char *buf;
{
int retval;
switch (retval = cmd_srch (key, ortbl_ddvalid)) {
case OR_DDVALID_RFC822:
case OR_DDVALID_JNT:
case OR_DDVALID_UUCP:
case OR_DDVALID_LIST:
case OR_DDVALID_ROLE:
case OR_DDVALID_FAX:
case OR_DDVALID_ATTN:
(void) strcpy (buf, rcmd_srch (retval, ortbl_ddvalid));
return OK;
default:
return NOTOK;
}
/*NOTREACHED*/
}
int or_str_isps (str)
char *str;
{
while (*str && or_isps (*str))
str ++;
return *str == '\0';
}
int or_str_isns (str)
char *str;
{
while (*str && or_isns (*str))
str ++;
return *str == '\0';
}
int or_type2charset (type)
int type;
{
typestruct *ptr;
PP_DBG (("or_util.c/or_type2charset()"));
for (ptr = typetab; (ptr -> ty_string) != NULLCP; ptr++)
if (type == ptr->ty_int)
return (ptr->ty_charset);
return 0;
}
int or_checktypes (or, buf)
OR_ptr or;
char *buf;
{
for (; or; or = or -> or_next) {
switch (or -> or_encoding) {
case OR_ENC_PS:
if (!or_str_isps (or -> or_value)) {
(void) sprintf (buf, "Attribute %s=%s is not a Printable String",
or_type2name (or -> or_type),
or -> or_value);
return NOTOK;
}
break;
case OR_ENC_NUM:
if (!or_str_isns (or -> or_value)) {
(void) sprintf (buf, "Attribute %s=%s in not a Numeric String",
or_type2name (or -> or_type),
or -> or_value);
return NOTOK;
}
break;
case OR_ENC_TTX:
case OR_ENC_TTX_AND_OR_PS:
case OR_ENC_INT:
case OR_ENC_PSAP:
default:
break;
}
}
return OK;
}