📄 ali.c
字号:
/* ali.c - the new ali */#ifndef lintstatic char ident[] = "@(#)$Id: ali.c,v 1.2 90/11/25 19:04:21 sharpe 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 *//* */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};/* */static int pos = 1;extern struct aka *akahead;/* *//* 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;/* */ 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)); } /* */ 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);}/* */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;}/* */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);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -