|
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; }