home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / mm / mm-0.90 / alias.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-12-18  |  3.5 KB  |  150 lines

  1. /*
  2.  * Copyright (c) 1986, 1990 by The Trustees of Columbia University in
  3.  * the City of New York.  Permission is granted to any individual or
  4.  * institution to use, copy, or redistribute this software so long as it
  5.  * is not sold for profit, provided this copyright notice is retained.
  6.  */
  7.  
  8. #ifndef lint
  9. static char *rcsid = "$Header: /f/src2/encore.bin/cucca/mm/tarring-it-up/RCS/alias.c,v 2.1 90/10/04 18:23:26 melissa Exp $";
  10. #endif
  11.  
  12. #include "mm.h"
  13. #include "parse.h"
  14.  
  15. Mail_aliases mail_aliases = { nil, 0 };
  16.  
  17. static brktab fldbrk = {
  18.     {
  19.     0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x00, 0x3f,
  20.     0x80, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x00, 0x1f,
  21.     },
  22.     {
  23.     0xff, 0xff, 0xff, 0xff, 0xfb, 0xf9, 0x00, 0x1f,
  24.     0x00, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x00, 0x1f,
  25.     },
  26. };
  27.  
  28. cmd_define(n)
  29. int n;
  30. {
  31.     char *safe_strcpy();
  32.     static char *alias = nil;
  33.     static addresslist alias_addr = { nil, nil };
  34.     keytab *mk_alias_keys(), *ak;
  35.     static fdb fldfdb = { _CMFLD, CM_SDH, NULL, NULL, "new alias name",
  36.               NULL, &fldbrk};
  37.     extern fdb aliasfdb;        /* get from parse.c */
  38.     pval pv;
  39.     fdb *used;
  40.     
  41.     ak = mk_alias_keys();
  42.     aliasfdb._cmdat = (pdat) ak;
  43.  
  44.     noise("alias");
  45.     if (mail_aliases.count > 0)
  46.     parse(fdbchn(&aliasfdb, &fldfdb, nil), &pv, &used);
  47.     else
  48.     parse(fdbchn(&fldfdb, nil), &pv, &used);
  49.     if (alias)
  50.     free(alias);
  51.     if (used == &aliasfdb) {
  52.     alias = safe_strcpy(ak->_ktwds[pv._pvkey]._kwkwd);
  53.     }
  54.     else {
  55.     if (strlen(atmbuf) < 1)
  56.         cmerr("Invalid character in alias name");
  57.     alias = safe_strcpy(atmbuf);
  58.     }
  59.     noise("as");
  60.     parse_define(&alias_addr);    /* get an addresslist for it */
  61.     if (alias_addr.first)
  62.     set_alias(safe_strcpy(alias),&alias_addr,MA_USER); /* set new alias */
  63.     else
  64.     free_alias(alias);
  65.     alias_addr.first = alias_addr.last = nil;
  66.     free(alias);
  67.     alias = nil;
  68. }
  69.  
  70. free_alias(name) 
  71. char *name;
  72. {
  73.     mail_alias *ma;
  74.     int i,j;
  75.  
  76.  
  77.     if (mail_aliases.count == 0) 
  78.     return;
  79.  
  80.     for(i = 0; i < mail_aliases.count; i++) {
  81.     ma = &mail_aliases.aliases[i];
  82.     if (ustrcmp(ma->name, name) == 0) {
  83.         free(ma->name);
  84.         free_addresslist(&ma->alias);
  85.         for(j = i+1; j < mail_aliases.count; i++, j++) {
  86.         mail_aliases.aliases[i].name = 
  87.             mail_aliases.aliases[j].name;
  88.         mail_aliases.aliases[i].alias = 
  89.             mail_aliases.aliases[j].alias;
  90.         mail_aliases.aliases[i].type =
  91.             mail_aliases.aliases[j].type;
  92.         }
  93.         mail_aliases.count--;
  94.         return;
  95.     }
  96.     }
  97. }
  98.  
  99.  
  100. set_alias(name,addr,type)
  101. char *name;
  102. addresslist *addr;
  103. {
  104.     int i;
  105.     free_alias(name);            /* free any old definition */
  106.     i = mail_aliases.count;        /* remember old count */
  107.     mail_aliases.aliases = (mail_alias *)safe_realloc(mail_aliases.aliases,
  108.                    (++mail_aliases.count) *
  109.                    sizeof(struct mail_alias));
  110.     mail_aliases.aliases[i].name = name;
  111.     mail_aliases.aliases[i].alias.first = addr->first;
  112.     mail_aliases.aliases[i].alias.last = addr->last;
  113.     mail_aliases.aliases[i].type = type;
  114. }
  115.  
  116.  
  117. disp_alias(fp,n,verbose,newline) 
  118. FILE *fp;
  119. int n;
  120. int newline;
  121. {
  122.     mail_alias *ma = &mail_aliases.aliases[n];
  123.     if (verbose)
  124.     fprintf(fp,"define %s ", ma->name);
  125.     disp_addresses(fp, nil, &ma->alias, true, newline, false);
  126.     if (!newline)            /* add trailing newline */
  127.         fputc ('\n', fp);
  128. }
  129.  
  130.  
  131. addresslist *
  132. lookup_alias(name) 
  133. char *name;
  134. {
  135.     mail_alias *ma;
  136.     int i,j;
  137.  
  138.     if (mail_aliases.count == 0) 
  139.     return(nil);
  140.  
  141.     for(i = 0; i < mail_aliases.count; i++) {
  142.     ma = &mail_aliases.aliases[i];
  143.     if (ustrcmp(ma->name, name) == 0) {
  144.         return(&ma->alias);
  145.     }
  146.     }
  147.     return(nil);
  148. }
  149.  
  150.