|
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: 8166 (0x1fe6) Types: TextFile Names: »tai_chan.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0 └─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z« └─⟦e5a54fb17⟧ └─⟦this⟧ »pp-5.0/Lib/tai/tai_chan.c«
/* tai_chan.c: channel specific tailoring code */ # ifndef lint static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Lib/tai/RCS/tai_chan.c,v 5.0 90/09/20 16:16:38 pp Exp Locker: pp $"; # endif /* * $Header: /cs/research/pp/hubris/pp-beta/Lib/tai/RCS/tai_chan.c,v 5.0 90/09/20 16:16:38 pp Exp Locker: pp $ * * $Log: tai_chan.c,v $ * Revision 5.0 90/09/20 16:16:38 pp * rcsforce : 5.0 public release * */ #include "head.h" #include <isode/cmd_srch.h> #include "chan.h" #include "adr.h" extern int ch_maxchans; extern CMD_TABLE qtbl_con_type[], atbl_types[], atbl_subtypes[]; extern void err_abrt(); static char chn_str[] = "chan"; static int ch_numchans = NULL; char *tai_alloc(); /* keywords */ #define CH_NAME 1 #define CH_PROGNAME 2 #define CH_SHOW 3 #define CH_CHAN_TYPE 4 #define CH_CHAN_OUT 5 #define CH_COST 6 #define CH_SORT 7 #define CH_INFO 8 #define CH_CONTENT_IN 9 #define CH_CONTENT_OUT 10 #define CH_AD_TYPE 11 #define CH_AD_SUBTYPE 12 #define CH_AD_ORDER 13 #define CH_BPT_IN 14 #define CH_BPT_OUT 15 #define CH_TABLE 16 #define CH_XMTA 17 #define CH_ACCESS 18 #define CH_PROBE 19 #define CH_AUTHTBL 20 #define CH_DOMPARSE 21 #define CH_MAXPROC 22 #define CH_CONV 23 /* flatness */ #define CH_FLAT_P2 1 #define CH_FLAT_822 2 /* tables */ static CMD_TABLE chtbl_key[] = { "name", CH_NAME, "prog", CH_PROGNAME, "show", CH_SHOW, "type", CH_CHAN_TYPE, "chanout", CH_CHAN_OUT, "content-in", CH_CONTENT_IN, "content-out", CH_CONTENT_OUT, "cost", CH_COST, "sort", CH_SORT, "info", CH_INFO, "adr", CH_AD_TYPE, "subadr", CH_AD_SUBTYPE, "adr-order", CH_AD_ORDER, "bptin", CH_BPT_IN, "bptout", CH_BPT_OUT, "table", CH_TABLE, "mta", CH_XMTA, "access", CH_ACCESS, "probe", CH_PROBE, "auth-tbl", CH_AUTHTBL, "domain-norm", CH_DOMPARSE, "conv", CH_CONV, "maxproc", CH_MAXPROC, 0, -1 }; static CMD_TABLE chtbl_types[] = { "in", CH_IN, "out", CH_OUT, "both", CH_BOTH, "shaper", CH_SHAPER, "warn", CH_WARNING, "delete", CH_DELETE, "qmgrload", CH_QMGR_LOAD, "debris", CH_DEBRIS, "timeout", CH_TIMEOUT, 0, -1 }; static CMD_TABLE chtbl_sort[] = { "user", CH_SORT_USR, "mta", CH_SORT_MTA, "priority", CH_SORT_PRIORITY, "time", CH_SORT_TIME, "size", CH_SORT_SIZE, 0, -1 }; static CMD_TABLE chtbl_ad_order[] = { "usa", CH_USA_ONLY, "uk", CH_UK_ONLY, "usapref", CH_USA_PREF, "ukpref", CH_UK_PREF, 0, -1 }; static CMD_TABLE chtbl_access[] = { "mta", CH_MTA, "mts", CH_MTS, 0, -1 }; static CMD_TABLE chtbl_domparse[] = { "full", CH_DOMAIN_NORM_ALL, "partial", CH_DOMAIN_NORM_PARTIAL, 0, -1 }; static CMD_TABLE chtbl_conv[] = { "none", CH_CONV_NONE, "1148", CH_CONV_1148, "conv", CH_CONV_CONVERT, "loss", CH_CONV_WITHLOSS, 0, -1 }; /* --------------------- Begin Routines -------------------------------- */ chan_tai (argc, argv) int argc; char **argv; { register CHAN *cp; char *tbname = NULLCP, *arg, *p, *ch_sort_arg[CH_MAX_SORT]; int ind, val, i, n_ch_sort, retval; PP_DBG (("chan_tai()")); if (argc < 2 || lexequ (argv[0], chn_str) != 0) return (NOTOK); if (ch_numchans + 1 >= ch_maxchans) { PP_OPER (NULLCP, ("tailor: has too many channels\n")); return (NOTOK); } arg = tai_alloc (*++argv); ch_all[ch_numchans++] = cp = (CHAN *) smalloc ((sizeof (CHAN))); ch_all[ch_numchans] = NULLCHAN; /* -- Initialize the malloc'd channel -- */ bzero ((char *)cp, sizeof(*cp)); bzero (&cp->ch_sort[0], CH_MAX_SORT); cp -> ch_sort[1] = CH_SORT_TIME; cp -> ch_name = arg; cp -> ch_access = CH_MTA; cp -> ch_ad_order = CH_USA_ONLY; cp -> ch_ad_type = AD_822_TYPE; cp -> ch_domain_norm = CH_DOMAIN_NORM_PARTIAL; cp -> ch_conversion = CH_CONV_NONE; argc -= 2; argv++; for (ind = 0; ind < argc; ind++) { if ((p = index (argv[ind], '=')) == NULLCP) continue; *p++ = '\0'; PP_DBG (("tai/tai_chan %s = %s", argv[ind], p)); switch (retval = cmd_srch (argv[ind], chtbl_key)) { case CH_NAME: cp->ch_name = tai_alloc (p); break; case CH_PROGNAME: cp->ch_progname = tai_alloc (p); break; case CH_SHOW: cp->ch_show = tai_alloc (p); break; case CH_CHAN_TYPE: val = cmd_srch (p, chtbl_types); if (val == NOTOK) cp -> ch_chan_type = CH_SHAPER; else cp -> ch_chan_type = val; break; case CH_CHAN_OUT: cp->ch_chan_out = tai_alloc (p); break; case CH_COST: cp->ch_cost = atoi(p); break; case CH_SORT: n_ch_sort = sstr2arg (p, CH_MAX_SORT, ch_sort_arg, " "); if (n_ch_sort < 0 || n_ch_sort > CH_MAX_SORT) err_abrt (RP_MECH, "tai_chan.c/sort narg!"); for (i=0; i < n_ch_sort; i++) { val = cmd_srch (ch_sort_arg[i], chtbl_sort); if (val == NOTOK) err_abrt (RP_MECH, "tai_chan.c/sort arg!"); cp->ch_sort[i] = val; } break; case CH_INFO: cp->ch_info = tai_alloc (p); break; case CH_CONTENT_IN: cp->ch_content_in = tai_alloc (p); break; case CH_CONTENT_OUT: cp->ch_content_out = tai_alloc (p); break; case CH_AD_TYPE: val = cmd_srch (p, atbl_types); if (val == NOTOK) cp -> ch_ad_type = AD_ANY_TYPE; else cp -> ch_ad_type = val; break; case CH_AD_SUBTYPE: val = cmd_srch (p, atbl_subtypes); if (val == NOTOK) cp -> ch_ad_subtype = AD_NOSUBTYPE; else cp -> ch_ad_subtype = val; break; case CH_AD_ORDER: val = cmd_srch (p, chtbl_ad_order); if (val == NOTOK) cp -> ch_ad_order = CH_UK_PREF; else cp -> ch_ad_order = val; break; case CH_BPT_IN: if (txt2listbpt (&cp -> ch_bpt_in, p) == NOTOK) err_abrt (RP_MECH, "tai_chan.c/bptin types unknown"); break; case CH_BPT_OUT: if (txt2listbpt (&cp -> ch_bpt_out, p) == NOTOK) err_abrt (RP_MECH, "tai_chan.c/bptout types unknown"); break; case CH_TABLE: if (lexequ (p, "none") == 0) tbname = NULLCP; else tbname = p; break; case CH_AUTHTBL: if ((cp -> ch_auth_tbl = tb_nm2struct (p)) == NULLTBL) err_abrt (RP_MECH, "tai_chan.c/Unknown table '%s'", p); break; case CH_XMTA: cp -> ch_mta = tai_alloc (p); break; case CH_ACCESS: val = cmd_srch (p, chtbl_access); if (val != NOTOK) cp -> ch_access = val; break; case CH_PROBE: if (lexequ (p, "y") == 0 || lexequ (p, "yes") == 0) cp -> ch_probe = TRUE; break; case CH_DOMPARSE: val = cmd_srch (p, chtbl_domparse); if (val != NOTOK) cp -> ch_domain_norm = val; break; case CH_MAXPROC: cp -> ch_maxproc = atoi (p); break; case CH_CONV: val = cmd_srch (p, chtbl_conv); if (val != NOTOK) cp -> ch_conversion = val; break; default: PP_DBG (("tai_chan.c/default %d %s", retval, argv[ind])); } } if (tbname != NULLCP) { cp->ch_table = tb_nm2struct (tbname); if (cp->ch_table == NULLTBL) err_abrt (RP_MECH, "tai_chan.c/Unknown table %s", tbname); } return (OK); }