|
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 t
Length: 8574 (0x217e) Types: TextFile Names: »txt2mta.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0 └─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z« └─⟦e5a54fb17⟧ └─⟦this⟧ »pp-5.0/Lib/pp/txt2mta.c«
/* txt2p1.c: handle text to varios mta structures */ # ifndef lint static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Lib/pp/RCS/txt2mta.c,v 5.0 90/09/20 16:12:14 pp Exp Locker: pp $"; # endif /* * $Header: /cs/research/pp/hubris/pp-beta/Lib/pp/RCS/txt2mta.c,v 5.0 90/09/20 16:12:14 pp Exp Locker: pp $ * * $Log: txt2mta.c,v $ * Revision 5.0 90/09/20 16:12:14 pp * rcsforce : 5.0 public release * */ #include "util.h" #include <isode/cmd_srch.h> #include "mta.h" #include "tb_com.h" #include "tb_p1.h" #include "tb_a.h" #define txt2int(n) atoi(n) extern char *genstore (); char *utctime (); extern struct qbuf *hex2qb (); extern CMD_TABLE tbl_crit [], p1tbl_mpduid [/* mpdu-identifier */], p1tbl_trace [/* trace-information */], p1tbl_globaldomid [/* global-domain-identifier */], p1tbl_domsinfo [/* domain-supplied-info */], p1tbl_action [/* domain-supplied-info-action */], p1tbl_encinfoset [/* encode-info-types-set */], atbl_addr [/* address-lines */], tbl_bool [], atbl_mtarreq [/* mta-report-request */], atbl_usrreq [/* user-report-request */]; static int P1_txt2resp (); static int P1_txt2mtarreq (); static int P1_txt2usrreq (); /* --------------------- Text File->Memory ---------------------------- */ int txt2trace (trp, argv, argc) /* Txt->TraceInformation */ Trace **trp; char **argv; int argc; { int key; int count = 0, n; register Trace *new, *tp; PP_DBG (("Lib/pp/txt2trace(%s)", argv[0])); if (--argc < 1) return (NOTOK); /* -- create a new Trace struct -- */ new = (Trace*) smalloc (sizeof (*new)); bzero ((char*)new, sizeof (*new)); /* -- put the new Trace struct into the appropriate place -- */ if ((tp = *trp) == (Trace *)NULL) *trp = tp = new; else { /* -- point to current and put new in trace_next -- */ for (; tp->trace_next; tp=tp->trace_next); tp->trace_next = new; tp = tp -> trace_next; } while (argc > 1) { if (*argv[0] != '=') { if (cmd_srch(argv[0], p1tbl_trace) == EOB) count ++; break; } key = cmd_srch (argv[1], p1tbl_trace); switch (key) { case TRACE_MTA: tp->trace_mta = strdup (argv[2]); n = 3; break; case EOB: case EOU: return count > 0 ? count : 0; default: n = txt2globaldomid (&tp->trace_DomId, &argv[0], argc); if (n != NOTOK) { break; } n = txt2domsinfo (&tp->trace_DomSinfo, &argv[0], argc); if (n == NOTOK) return count > 0 ? count : NOTOK; break; } argc -= n; argv += n; count += n; } return count > 0 ? count : NOTOK; } int txt2globaldomid (gp, argv, argc) /* Txt->GlobalDomainIdentifier */ GlobalDomId *gp; char **argv; int argc; { int count = 0; int n; PP_DBG (("Lib/pp/txt2globaldomid(%s %d)", argv[1], argc)); while (argc > 0) { if (*argv[0] != '=') break; switch (cmd_srch (argv[1], p1tbl_globaldomid)) { case GLOBAL_COUNTRY: gp->global_Country = strdup (argv[2]); n = 3; break; case GLOBAL_ADMIN: gp->global_Admin = strdup (argv[2]); n = 3; break; case GLOBAL_PRIVATE: gp->global_Private = strdup (argv[2]); n = 3; break; default: return count > 0 ? count : NOTOK; } count += n; argc -= n; argv += n; } return (count > 0 ? count : NOTOK); } int txt2domsinfo (di, argv, argc) /* Txt->DomainSuppliedInfo */ DomSupInfo *di; char **argv; int argc; { int n, count = 0; char *p; PP_DBG (("Lib/pp/txt2domsinfo(%s)", argv[0])); while (argc > 0) { if (*argv[0] == '=') p = argv[1]; else p = argv[0]; switch (cmd_srch (p, p1tbl_domsinfo)) { case DSI_TIME: txt2time (argv[2], &di->dsi_time); n = 3; break; case DSI_DEFERRED: txt2time (argv[2], &di->dsi_deferred); n = 3; break; case DSI_ACTION: di->dsi_action = txt2int (argv[2]); n = 3; break; case DSI_CONVERTED: n = txt2encodedinfo(&di->dsi_converted, &argv[1], argc - 1); if (n == NOTOK) return n; n ++; break; case DSI_ATTEMPTED: n = txt2globaldomid (&di->dsi_attempted_md, &argv[1], argc - 1); if (n == NOTOK) return n; n ++; break; default: return count > 0 ? count : NOTOK; } argc -= n; argv += n; count += n; } return (count > 0 ? count : NOTOK); } int txt2encodedinfo (ep, argv, argc) /* Txt->EncodedInformationTypes */ EncodedIT *ep; char **argv; int argc; { int count = 0, n; PP_DBG (("Lib/pp/txt2encodedinfo('%s', %d)", argv[0], argc)); while (argc > 0) { if (*argv[0] != '=') return NOTOK; switch (cmd_srch (argv[1], p1tbl_encinfoset)) { case EI_G3NONBASIC: ep->eit_g3parms = txt2int (argv[2]); n = 3; break; case EI_TELETEXNONBASIC: ep->eit_tTXparms = txt2int (argv[2]); n = 3; break; case EI_PRESENTATION: ep->eit_presentation = txt2int (argv[2]); n = 3; break; case EI_BIT_STRING: txt2listbpt (&ep->eit_types, argv[2]); n = 3; break; default: return count > 0 ? count : NOTOK; } argc -= n; argv += n; count += n; } return (count > 0 ? count : NOTOK); } int txt2listbpt (bpt, str) /* Txt -> A List of BodyPartTypes */ LIST_BPT **bpt; char *str; { LIST_BPT *np, *nl = NULLIST_BPT; int i, j; char *buf[30]; PP_DBG (("Lib/pp/txt2listbpt(%s)", str)); /* read string which is delimitted by ',' example: tlx,ia5, etc... */ j = sstr2arg (str, 30, buf, ","); for (i = 0; i < j; i++) { np = list_bpt_new (buf[i]); list_bpt_add (&nl, np); } *bpt = nl; return (OK); } int txt2mpduid (mep, argv, argc) /* Txt->MPDUIdentifier */ register MPDUid *mep; char **argv; int argc; { int n, count = 0; PP_DBG (("Lib/pp/txt2mpduid(%s)", argv[0])); while (argc > 0) { if (*argv[0] != '=') break; switch (cmd_srch (argv[1], p1tbl_mpduid)) { case MPDUID_STRING: mep->mpduid_string = strdup (argv[2]); n = 3; break; default: n = txt2globaldomid (&mep->mpduid_DomId, &argv[0], argc); if (n == NOTOK) return count > 0 ? count : NOTOK; break; } argc -= n; argv += n; count += n; } return count > 0 ? count : NOTOK; } /* Txt->Responsibility, Mta-report-request & User-report-request */ int txt2repreq (field, argv, argc) int *field; char **argv; int argc; { int val; PP_DBG (("Lib/pp/txt2repreq(%s %d)", argv[0], argc)); if (--argc < 1) return (NOTOK); if (*argv[0] != '=') return NOTOK; switch (cmd_srch (argv[1], atbl_addr)) { case AD_RESPONSIBILITY: if (P1_txt2resp (&val, argv[2]) == NOTOK) return (NOTOK); break; case AD_MTA_REP_REQ: if (P1_txt2mtarreq (&val, argv[2]) == NOTOK) return (NOTOK); break; case AD_USR_REP_REQ: if (P1_txt2usrreq (&val, argv[2]) == NOTOK) return (NOTOK); break; default: return (NOTOK); } PP_DBG (("Lib/pp/txt2repreq(%s %d)", argv[1], val)); *field = val; return (3); } static int P1_txt2resp (val, keywd) /* Txt->Responsibility */ int *val; char *keywd; { PP_DBG (("Lib/pp/P1_txt2resp(%s)", keywd)); switch (*val = cmd_srch (keywd, tbl_bool)) { case YES: case NO: return (OK); default: return (NOTOK); } } static int P1_txt2mtarreq (val, keywd) /* Txt->Mta-report-request */ int *val; char *keywd; { PP_DBG (("Lib/pp/P1_txt2mtarreq(%s)", keywd)); switch (*val = cmd_srch (keywd, atbl_mtarreq)) { case AD_MTA_NONE: *val = AD_MTA_BASIC; case AD_MTA_BASIC: case AD_MTA_CONFIRM: case AD_MTA_AUDIT_CONFIRM: return (OK); default: return (NOTOK); } } static int P1_txt2usrreq (val, keywd) /* Txt->Usr-report-request */ int *val; char *keywd; { PP_DBG (("Lib/pp/txt2usrreq(%s)", keywd)); switch (*val = cmd_srch (keywd, atbl_usrreq)) { case AD_USR_NONE: *val = AD_USR_BASIC; case AD_USR_NOREPORT: case AD_USR_BASIC: case AD_USR_CONFIRM: return (OK); default: return (NOTOK); } } int txt2time (str, tp) char *str; UTC *tp; { return (rfc2UTC (str, tp)); } Extension *txt2extension (argv, argc) char *argv[]; int argc; { Extension *ext; ext = (Extension *)smalloc (sizeof *ext); ext -> ext_int = txt2int (argv[0]); ext -> ext_oid = str2oid (argv[1]); ext -> ext_value = hex2qb (argv[2]); ext -> ext_criticality = cmd_srch (argv[3], tbl_crit); return ext; }