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