|
|
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 a
Length: 4616 (0x1208)
Types: TextFile
Names: »ali.c«
└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit
└─⟦3658e588a⟧ »EurOpenD3/mail/mh/mh-6.7.tar.Z«
└─⟦c75e36ecb⟧
└─⟦this⟧ »mh-6.7/uip/ali.c«
/* ali.c - the new ali */
#ifndef lint
static char ident[] = "@(#)$Id: ali.c,v 1.3 90/04/05 15:03:38 sources Exp $";
#endif lint
#include "../h/mh.h"
#include "../h/addrsbr.h"
#include "../h/aliasbr.h"
#include <stdio.h>
#define NVEC 50 /* maximum number of names */
/* \f
*/
static struct swit switches[] = {
#define ALIASW 0
"alias aliasfile", 0,
#define NALIASW 1
"noalias", -7,
#define LISTSW 2
"list", 0,
#define NLISTSW 3
"nolist", 0,
#define NORMSW 4
"normalize", 0,
#define NNORMSW 5
"nonormalize", 0,
#define USERSW 6
"user", 0,
#define NUSERSW 7
"nouser", 0,
#define HELPSW 8
"help", 4,
NULL, NULL
};
/* \f
*/
static int pos = 1;
extern struct aka *akahead;
/* \f
*/
/* ARGSUSED */
main (argc, argv)
int argc;
char *argv[];
{
int i,
vecp = 0,
inverted = 0,
list = 0,
noalias = 0,
normalize = AD_NHST;
char *cp,
**ap,
**argp,
buf[100],
*vec[NVEC],
*arguments[MAXARGS];
struct aka *ak;
invo_name = r1bindex (argv[0], '/');
mts_init (invo_name);
if ((cp = m_find (invo_name)) != NULL) {
ap = brkstring (cp = getcpy (cp), " ", "\n");
ap = copyip (ap, arguments);
}
else
ap = arguments;
(void) copyip (argv + 1, ap);
argp = arguments;
/* \f
*/
while (cp = *argp++) {
if (*cp == '-')
switch (smatch (++cp, switches)) {
case AMBIGSW:
ambigsw (cp, switches);
done (1);
case UNKWNSW:
adios (NULLCP, "-%s unknown", cp);
case HELPSW:
(void) sprintf (buf, "%s [switches] aliases ...",
invo_name);
help (buf, switches);
done (1);
case ALIASW:
if (!(cp = *argp++) || *cp == '-')
adios (NULLCP, "missing argument to %s", argp[-2]);
if ((i = alias (cp)) != AK_OK)
adios (NULLCP, "aliasing error in %s - %s",
cp, akerror (i));
continue;
case NALIASW:
noalias++;
continue;
case LISTSW:
list++;
continue;
case NLISTSW:
list = 0;
continue;
case NORMSW:
normalize = AD_HOST;
continue;
case NNORMSW:
normalize = AD_NHST;
continue;
case USERSW:
inverted++;
continue;
case NUSERSW:
inverted = 0;
continue;
}
vec[vecp++] = cp;
}
if (!noalias) {
(void) alias (AliasFile);
if (cp = m_find ("Aliasfile")) /* allow Aliasfile: profile entry */
if ((i = alias (cp)) != AK_OK)
adios (NULLCP, "aliasing error in %s - %s", cp, akerror (i));
}
/* \f
*/
if (vecp)
for (i = 0; i < vecp; i++)
if (inverted)
print_usr (vec[i], list, normalize);
else
print_aka (akvalue (vec[i]), list, 0);
else {
if (inverted)
adios (NULLCP, "usage: %s addresses ... (you forgot the addresses)",
invo_name);
for (ak = akahead; ak; ak = ak -> ak_next) {
printf ("%s: ", ak -> ak_name);
pos += strlen (ak -> ak_name) + 1;
print_aka (akresult (ak), list, pos);
}
}
done (0);
}
/* \f
*/
print_aka (p, list, margin)
register char *p;
int list,
margin;
{
register char c;
if (p == NULL) {
printf ("<empty>\n");
return;
}
while (c = *p++)
switch (c) {
case ',':
if (*p)
if (list)
printf ("\n%*s", margin, "");
else
if (pos >= 68) {
printf (",\n ");
pos = 2;
}
else {
printf (", ");
pos += 2;
}
case NULL:
break;
default:
pos++;
(void) putchar (c);
}
(void) putchar ('\n');
pos = 1;
}
/* \f
*/
print_usr (s, list, norm)
register char *s;
int list,
norm;
{
register char *cp,
*pp,
*vp;
register struct aka *ak;
register struct mailname *mp,
*np;
if ((pp = getname (s)) == NULL)
adios (NULLCP, "no address in \"%s\"", s);
if ((mp = getm (pp, NULLCP, 0, norm, NULLCP)) == NULL)
adios (NULLCP, "bad address \"%s\"", s);
while (getname (""))
continue;
vp = NULL;
for (ak = akahead; ak; ak = ak -> ak_next) {
pp = akresult (ak);
while (cp = getname (pp)) {
if ((np = getm (cp, NULLCP, 0, norm, NULLCP)) == NULL)
continue;
if (uleq (mp -> m_host, np -> m_host)
&& uleq (mp -> m_mbox, np -> m_mbox)) {
vp = vp ? add (ak -> ak_name, add (",", vp))
: getcpy (ak -> ak_name);
mnfree (np);
while (getname (""))
continue;
break;
}
mnfree (np);
}
}
mnfree (mp);
printf ("%s: ", s);
print_aka (vp ? vp : s, list, pos += strlen (s) + 1);
if (vp)
free (vp);
}