1: /* ali.c - the new ali */
   2: 
   3: #include "../h/mh.h"
   4: #include "../h/addrsbr.h"
   5: #include "../h/aliasbr.h"
   6: #include <stdio.h>
   7: 
   8: 
   9: #define NVEC    50      /* maximum number of names */
  10: 
  11: /*  */
  12: 
  13: static struct swit switches[] = {
  14: #define ALIASW  0
  15:     "alias aliasfile", 0,
  16: #define NALIASW 1
  17:     "noalias", -7,
  18: 
  19: #define LISTSW  2
  20:     "list", 0,
  21: #define NLISTSW 3
  22:     "nolist", 0,
  23: 
  24: #define NORMSW  4
  25:     "normalize", 0,
  26: #define NNORMSW 5
  27:     "nonormalize", 0,
  28: 
  29: #define USERSW  6
  30:     "user", 0,
  31: #define NUSERSW 7
  32:     "nouser", 0,
  33: 
  34: #define HELPSW  8
  35:     "help", 4,
  36: 
  37:     NULL, NULL
  38: };
  39: 
  40: /*  */
  41: 
  42: static  int     pos = 1;
  43: 
  44: extern struct aka  *akahead;
  45: 
  46: /*  */
  47: 
  48: /* ARGSUSED */
  49: 
  50: main (argc, argv)
  51: int     argc;
  52: char   *argv[];
  53: {
  54:     int     i,
  55:             vecp = 0,
  56:         inverted = 0,
  57:             list = 0,
  58:         noalias = 0,
  59:         normalize = AD_NHST;
  60:     char   *cp,
  61:           **ap,
  62:           **argp,
  63:             buf[100],
  64:            *vec[NVEC],
  65:            *arguments[MAXARGS];
  66:     struct aka *ak;
  67: 
  68:     invo_name = r1bindex (argv[0], '/');
  69:     mts_init (invo_name);
  70:     if ((cp = m_find (invo_name)) != NULL) {
  71:     ap = brkstring (cp = getcpy (cp), " ", "\n");
  72:     ap = copyip (ap, arguments);
  73:     }
  74:     else
  75:     ap = arguments;
  76:     (void) copyip (argv + 1, ap);
  77:     argp = arguments;
  78: 
  79: /*  */
  80: 
  81:     while (cp = *argp++) {
  82:     if (*cp == '-')
  83:         switch (smatch (++cp, switches)) {
  84:         case AMBIGSW:
  85:             ambigsw (cp, switches);
  86:             done (1);
  87:         case UNKWNSW:
  88:             adios (NULLCP, "-%s unknown", cp);
  89:         case HELPSW:
  90:             (void) sprintf (buf, "%s [switches] aliases ...",
  91:                 invo_name);
  92:             help (buf, switches);
  93:             done (1);
  94: 
  95:         case ALIASW:
  96:             if (!(cp = *argp++) || *cp == '-')
  97:             adios (NULLCP, "missing argument to %s", argp[-2]);
  98:             if ((i = alias (cp)) != AK_OK)
  99:             adios (NULLCP, "aliasing error in %s - %s",
 100:                 cp, akerror (i));
 101:             continue;
 102:         case NALIASW:
 103:             noalias++;
 104:             continue;
 105: 
 106:         case LISTSW:
 107:             list++;
 108:             continue;
 109:         case NLISTSW:
 110:             list = 0;
 111:             continue;
 112: 
 113:         case NORMSW:
 114:             normalize = AD_HOST;
 115:             continue;
 116:         case NNORMSW:
 117:             normalize = AD_NHST;
 118:             continue;
 119: 
 120:         case USERSW:
 121:             inverted++;
 122:             continue;
 123:         case NUSERSW:
 124:             inverted = 0;
 125:             continue;
 126:         }
 127:     vec[vecp++] = cp;
 128:     }
 129: 
 130:     if (!noalias)
 131:     (void) alias (AliasFile);
 132: 
 133: /*  */
 134: 
 135:     if (vecp)
 136:     for (i = 0; i < vecp; i++)
 137:         if (inverted)
 138:         print_usr (vec[i], list, normalize);
 139:         else
 140:         print_aka (akvalue (vec[i]), list, 0);
 141:     else {
 142:     if (inverted)
 143:         adios (NULLCP, "usage: %s addresses ...  (you forgot the addresses)",
 144:         invo_name);
 145: 
 146:     for (ak = akahead; ak; ak = ak -> ak_next) {
 147:         printf ("%s: ", ak -> ak_name);
 148:         pos += strlen (ak -> ak_name) + 1;
 149:         print_aka (akresult (ak), list, pos);
 150:     }
 151:     }
 152: 
 153:     done (0);
 154: }
 155: 
 156: /*  */
 157: 
 158: print_aka (p, list, margin)
 159: register char  *p;
 160: int     list,
 161:         margin;
 162: {
 163:     register char   c;
 164: 
 165:     if (p == NULL) {
 166:     printf ("<empty>\n");
 167:     return;
 168:     }
 169: 
 170:     while (c = *p++)
 171:     switch (c) {
 172:         case ',':
 173:         if (*p)
 174:             if (list)
 175:             printf ("\n%*s", margin, "");
 176:             else
 177:             if (pos >= 68) {
 178:                 printf (",\n ");
 179:                 pos = 2;
 180:             }
 181:             else {
 182:                 printf (", ");
 183:                 pos += 2;
 184:             }
 185: 
 186:         case NULL:
 187:         break;
 188: 
 189:         default:
 190:         pos++;
 191:         (void) putchar (c);
 192:     }
 193: 
 194:     (void) putchar ('\n');
 195:     pos = 1;
 196: }
 197: 
 198: /*  */
 199: 
 200: print_usr (s, list, norm)
 201: register char  *s;
 202: int     list,
 203:         norm;
 204: {
 205:     register char  *cp,
 206:                    *pp,
 207:                    *vp;
 208:     register struct aka *ak;
 209:     register struct mailname   *mp,
 210:                                *np;
 211: 
 212:     if ((pp = getname (s)) == NULL)
 213:     adios (NULLCP, "no address in \"%s\"", s);
 214:     if ((mp = getm (pp, NULLCP, 0, norm, NULLCP)) == NULL)
 215:     adios (NULLCP, "bad address \"%s\"", s);
 216:     while (getname (""))
 217:     continue;
 218: 
 219:     vp = NULL;
 220:     for (ak = akahead; ak; ak = ak -> ak_next) {
 221:     pp = akresult (ak);
 222:     while (cp = getname (pp)) {
 223:         if ((np = getm (cp, NULLCP, 0, norm, NULLCP)) == NULL)
 224:         continue;
 225:         if (uleq (mp -> m_host, np -> m_host)
 226:             && uleq (mp -> m_mbox, np -> m_mbox)) {
 227:         vp = vp ? add (ak -> ak_name, add (",", vp))
 228:             : getcpy (ak -> ak_name);
 229:         mnfree (np);
 230:         while (getname (""))
 231:             continue;
 232:         break;
 233:         }
 234:         mnfree (np);
 235:     }
 236:     }
 237:     mnfree (mp);
 238: 
 239:     printf ("%s: ", s);
 240:     print_aka (vp ? vp : s, list, pos += strlen (s) + 1);
 241:     if (vp)
 242:     free (vp);
 243: }

Defined functions

main defined in line 50; never used
print_aka defined in line 158; used 3 times
print_usr defined in line 200; used 1 times

Defined variables

pos defined in line 42; used 8 times
switches defined in line 13; used 3 times

Defined macros

ALIASW defined in line 14; never used
HELPSW defined in line 34; never used
LISTSW defined in line 19; never used
NALIASW defined in line 16; never used
NLISTSW defined in line 21; never used
NNORMSW defined in line 26; never used
NORMSW defined in line 24; never used
NUSERSW defined in line 31; never used
NVEC defined in line 9; used 1 times
  • in line 64
USERSW defined in line 29; never used
Last modified: 1986-01-17
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1225
Valid CSS Valid XHTML 1.0 Strict