home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 2 BBS / 02-BBS.zip / gigop806.zip / FIDOADR.CPP < prev    next >
Text File  |  1994-08-04  |  3KB  |  118 lines

  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #include "fidoadr.h"
  5.  
  6. /*
  7.  * Split a fido address into it's seperate parts.  The following are valid
  8.  * fido address specifictions.
  9.  */
  10. void            fidoadr_split(char *addr, FIDOADR * fadr)
  11. {
  12.     char           *p,
  13.                    *q;
  14.     char            st[255];
  15.     /*
  16.      * Zone
  17.      */
  18.     p = strchr(addr, ':');
  19.     if ((p!=NULL) && (*p == '*'))
  20.         fadr->zone = 65535;
  21.     else if (p)
  22.         fadr->zone = (word) atol(addr);
  23.     else
  24.         fadr->zone = 0;
  25.     /*
  26.      * Net
  27.      */
  28.     p = strchr(addr, '/');
  29.     if (p) {
  30.         p--;
  31.         while (strchr("0123456789*", *p) && (p >= addr))
  32.             p--;
  33.         p++;
  34.         if ((*p == '*') || (fadr->zone == 65535))
  35.             fadr->net = 65535;
  36.         else
  37.             fadr->net = (word) atol(p);
  38.     } else
  39.         fadr->net = 0;
  40.     /*
  41.      * Node
  42.      */
  43.     p = strchr(addr, '/');
  44.     if (p) {
  45.         p++;
  46.         if ((*p == '*') || (fadr->net == 65535))
  47.             fadr->node = 65535;
  48.         else
  49.             fadr->node = (word) atol(p);
  50.     } else
  51.         fadr->node = (word) atol(addr);
  52.     /*
  53.      * Point
  54.      */
  55.     p = strchr(addr, '.');
  56.     if (p) {
  57.         p++;
  58.         if ((*p == '*') || (fadr->node == 65535))
  59.             fadr->point = 65535;
  60.         else
  61.             fadr->point = (word) atol(p);
  62.     } else
  63.         fadr->point = 0;
  64.     /*
  65.      * Domain
  66.      */
  67.     p = strchr(addr, '@');
  68.     if (p) {
  69.         p++;
  70.         strcpy(fadr->domain, p);
  71.     } else
  72.         *(fadr->domain) = '\0';
  73. }
  74. /*
  75.  * Merge the parts specified in FIDOADR into a ASCII fidonet specification
  76.  *
  77.  * Beware of results if you don't pass good values in FIDOADR.
  78.  *
  79.  */
  80. char           *fidoadr_merge(char *addr, FIDOADR * fadr)
  81. {
  82.     static char     tmp[64];
  83.     *addr = '\0';
  84.     if (fadr->zone) {
  85.         ltoa((long) (fadr->zone), tmp, 10);
  86.         strcat(addr, tmp);
  87.         strcat(addr, ":");
  88.     }
  89.     if (fadr->zone || fadr->net) {
  90.         ltoa((long) fadr->net, tmp, 10);
  91.         strcat(addr, tmp);
  92.         strcat(addr, "/");
  93.     }
  94.     ltoa((long) fadr->node, tmp, 10);
  95.     strcat(addr, tmp);
  96.     if (fadr->point && fadr->node) {
  97.         strcat(addr, ".");
  98.         ltoa((long) fadr->point, tmp, 10);
  99.         strcat(addr, tmp);
  100.     }
  101.     if (*(fadr->domain)) {
  102.         strcat(addr, "@");
  103.         strcat(addr, fadr->domain);
  104.     }
  105.     return (addr);
  106. }
  107. /*
  108.  * Split simple 3-part address
  109.  */
  110. void            fidosplit(char *src, word * zone, word * net, word * node)
  111. {
  112.     FIDOADR         fadr = DEF_FIDOADR;
  113.     fidoadr_split(src, &fadr);
  114.     *zone = fadr.zone;
  115.     *net = fadr.net;
  116.     *node = fadr.node;
  117. }
  118.