home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 2 BBS / 02-BBS.zip / msq31004.zip / vsevops.c < prev   
C/C++ Source or Header  |  1995-07-12  |  5KB  |  191 lines

  1. /* vsevops - perform version 7 lookup operations */
  2. /* written by Paul Edwards and released to the public domain */
  3.  
  4. #include "mxbt.h"
  5. #include "vsev.h"
  6. #include "msged.h"
  7.  
  8. static int compareSysop(void *a, void *b, int len)
  9. {
  10.     int ret;
  11.     
  12.     ret = strncmpi((char *)a, (char *)b, len);
  13.     return (ret);
  14. }
  15.  
  16. static int compareNode(void *a, void *b, int len)
  17. {
  18.     struct {
  19.         short zone;
  20.         short net;
  21.         short node;
  22.         short point;
  23.     } v7addr;
  24.     ADDRESS *addrp;
  25.  
  26.     addrp = (ADDRESS *)b;
  27.     memcpy(&v7addr, a, len);
  28.     if (len <= 6)
  29.     {
  30.         v7addr.point = 0;
  31.     }
  32.     if (v7addr.zone < addrp->zone) return (-1);
  33.     else if (v7addr.zone > addrp->zone) return (1);
  34.     else if (v7addr.net < addrp->net) return (-1);
  35.     else if (v7addr.net > addrp->net) return (1);
  36.     else if (v7addr.node < addrp->node) return (-1);
  37.     else if (v7addr.node > addrp->node) return (1);
  38.     else if (v7addr.point < addrp->point) return (-1);
  39.     else if (v7addr.point > addrp->point) return (1);
  40.     else return (0);
  41. }
  42.  
  43. /* the following stuff was written by John Dennis (with mods by
  44.    Paul Edwards) and was also released to the public domain */
  45.    
  46. char *v7lookupnode(ADDRESS *faddr, char *name)
  47. {
  48.     long record;
  49.     char index_filename[FILENAME_MAX];
  50.     char data_filename[FILENAME_MAX];
  51.     MXBT mxbt;
  52.     VSEV vsev;
  53.  
  54.     strcpy(index_filename, ST->nodepath); 
  55.     strcat(index_filename, "\\");         
  56.     if (ST->nodebase != NULL)
  57.     {
  58.         strcat(index_filename, ST->nodebase); 
  59.     }
  60.     strcat(index_filename, ".NDX");       
  61.     strcpy(data_filename, ST->nodepath);  
  62.     strcat(data_filename, "\\");
  63.     if (ST->nodebase != NULL)
  64.     {
  65.         strcat(data_filename, ST->nodebase);  
  66.     }
  67.     strcat(data_filename, ".DAT");        
  68.  
  69.     record = mxbtOneSearch(&mxbt, 
  70.                            index_filename, 
  71.                            (void *)faddr, 
  72.                            compareNode);
  73.  
  74.     if (record == -1)
  75.        return (NULL);
  76.  
  77.     if (vsevGetInfo(&vsev, data_filename, record) == 0)
  78.     {
  79.         strcpy(name, (char *)vsev.sysop);
  80.         return (name);
  81.     }
  82.     else return (NULL);
  83. }
  84.  
  85. ADDRESS v7lookup(char *name)
  86. {
  87.     ADDRESS faddr;
  88.     char reverse[80];
  89.     long record;
  90.     char index_filename[FILENAME_MAX];
  91.     char data_filename[FILENAME_MAX];
  92.     MXBT mxbt;
  93.     VSEV vsev;
  94.  
  95.     faddr        = CurArea.addr;
  96.     faddr.domain = NULL;
  97.  
  98.     makeReverse(reverse, name);
  99.  
  100.     strcpy(index_filename, ST->nodepath); 
  101.     strcat(index_filename, "\\");
  102.     if (ST->sysop != NULL)
  103.     {
  104.         strcat(index_filename, ST->sysop);    
  105.     }
  106.     strcpy(data_filename, ST->nodepath);  
  107.     strcat(data_filename, "\\");
  108.     if (ST->nodebase != NULL)
  109.     {
  110.         strcat(data_filename, ST->nodebase);  
  111.     }
  112.     strcat(data_filename, ".DAT");        
  113.  
  114.     record = mxbtOneSearch(&mxbt, 
  115.                            index_filename, 
  116.                            (void *)reverse, 
  117.                            compareSysop);
  118.  
  119.     if (record == -1) {
  120.         faddr.notfound = 1;
  121.         return faddr;
  122.     }
  123.     
  124.     if (vsevGetInfo(&vsev, data_filename, record) != 0)
  125.     {
  126.         faddr.notfound = 1;
  127.         return (faddr);
  128.     }
  129.  
  130.     faddr.zone = vsev.zone;
  131.     faddr.net = vsev.net;
  132.     faddr.node = vsev.node;
  133.     faddr.point = vsev.point;
  134.     faddr.notfound = 0;
  135.     
  136.     return (faddr);
  137. }
  138.  
  139.  
  140. char *v7lookupsystem(ADDRESS *faddr, char *system)
  141. {
  142.     long record;
  143.     int is_point = 0;
  144.     char index_filename[FILENAME_MAX];
  145.     char data_filename[FILENAME_MAX];
  146.     MXBT mxbt;
  147.     VSEV vsev;
  148.  
  149.     strcpy(index_filename, ST->nodepath); 
  150.     strcat(index_filename, "\\");         
  151.     if (ST->nodebase != NULL)
  152.     {
  153.         strcat(index_filename, ST->nodebase); 
  154.     }
  155.     strcat(index_filename, ".NDX");       
  156.     strcpy(data_filename, ST->nodepath);  
  157.     strcat(data_filename, "\\");
  158.     if (ST->nodebase != NULL)
  159.     {
  160.         strcat(data_filename, ST->nodebase);  
  161.     }
  162.     strcat(data_filename, ".DAT");        
  163.  
  164.     if (faddr->point)
  165.     {
  166.         is_point = faddr->point;
  167.     faddr->point = 0;
  168.     }
  169.     
  170.     record = mxbtOneSearch(&mxbt, 
  171.                            index_filename, 
  172.                            (void *)faddr, 
  173.                            compareNode);
  174.  
  175.     if (is_point)
  176.         faddr->point = is_point;
  177.     
  178.     if (record == -1)
  179.        return (NULL);
  180.  
  181.     if (vsevGetInfo(&vsev, data_filename, record) == 0)
  182.     {
  183.         strcpy(system, (char *)vsev.board);
  184.     if (is_point)
  185.         strcat(system, " (point)");
  186.         return (system);
  187.     }
  188.     else return (NULL);
  189. }
  190.  
  191.