home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / program / c / plstsrc / names.c < prev    next >
C/C++ Source or Header  |  1989-01-09  |  10KB  |  242 lines

  1. /************************************************************************
  2. *************************************************************************
  3. ** NOTE:                                                               **
  4. **   This Module is part of the ATARI ST Implementation of Parselst    **
  5. **   It should NOT be used for general reference. Please read the com- **
  6. **   plete Disclaimer at the TOP of PARSELST.C.                        **
  7. **   Peter Glasmacher at 1:143/9  Ph (408)985-1538                     **
  8. *************************************************************************
  9. *************************************************************************/
  10.  
  11. /*----------------------------------------------------------------------*
  12. *                              Nodelist Parser                          *
  13. *                                                                       *
  14. *              This module was originally written by Bob Hartman        *
  15. *                       Sysop of FidoNet node 1:132/101                 *
  16. *                                                                       *
  17. * Spark Software, 427-3 Amherst St, CS 2032, Suite 232, Nashua, NH 03061*
  18. *                                                                       *
  19. * This program source code is being released with the following         *
  20. * provisions:                                                           *
  21. *                                                                       *
  22. * 1.  You are  free to make  changes to this source  code for use on    *
  23. *     your own machine,  however,  altered source files may not be      *
  24. *     distributed without the consent of Spark Software.                *
  25. *                                                                       *
  26. * 2.  You may distribute "patches"  or  "diff" files for any changes    *
  27. *     that you have made, provided that the "patch" or "diff" files are *
  28. *     also sent to Spark Software for inclusion in future releases of   *
  29. *     the entire package.   A "diff" file for the source archives may   *
  30. *     also contain a compiled version,  provided it is  clearly marked  *
  31. *     as not  being created  from the original source code.             *
  32. *     No other  executable  versions may be  distributed without  the   *
  33. *     consent of Spark Software.                                        *
  34. *                                                                       *
  35. * 3.  You are free to include portions of this source code in any       *
  36. *     program you develop, providing:  a) Credit is given to Spark      *
  37. *     Software for any code that may is used, and  b) The resulting     *
  38. *     program is free to anyone wanting to use it, including commercial *
  39. *     and government users.                                             *
  40. *                                                                       *
  41. * 4.  There is  NO  technical support  available for dealing with this  *
  42. *     source code, or the accompanying executable files.  This source   *
  43. *     code  is provided as is, with no warranty expressed or implied    *
  44. *     (I hate legalease).   In other words, if you don't know what to   *
  45. *     do with it,  don't use it,  and if you are brave enough to use it,*
  46. *      you're on your own.                                              *
  47. *                                                                       *
  48. * Spark Software may be contacted by modem at (603) 888-8179            *
  49. * (node 1:132/101)                                                      *
  50. * on the public FidoNet network, or at the address given above.         *
  51. *                                                                       *
  52. *-----------------------------------------------------------------------*/
  53.  
  54. #include <stdio.h>
  55. #include <stdlib.h>
  56. #include <string.h>
  57. #  include <ext.h>
  58. #include <ctype.h>
  59. #include <time.h>
  60.  
  61. #include "types.h"
  62. #include "externs.h"
  63. #include "pl.h"
  64.  
  65. void do_names (void)
  66. {
  67. FILE *o1, *o2;
  68. char b1[50];
  69.  
  70.    printf ("Sorting SysOp Name Data\n\n");
  71.    sort();
  72.    if ((o1 = fopen ("FIDOUSER.$$1", "r")) == NULL)  {
  73.       
  74.    }
  75.    if ((o2 = fopen ("FIDOUSER.LST", "w")) == NULL) {
  76.  
  77.    }
  78.  
  79.  
  80.    b1[0] = '\0';
  81.    nnodes = 0;
  82.    printf ("\nDeleting Duplicate SysOp Names\n");
  83.    while (fgets (t_str, 127, o1) != NULL)   {
  84.       if (strncmp (t_str, b1, 40) == 0)    {
  85.          continue;
  86.       }
  87.       ++nnodes;
  88.       if (nnodes % 100 == 0)
  89.          printf ("\r%d", nnodes);
  90.       t_str[60] = '\n';
  91.       t_str[61] = '\0';
  92.       fputs (t_str, o2);
  93.       strncpy (b1, t_str, 40);
  94.    }
  95.    printf ("\r%d Unique SysOp Names Found in Network\n", nnodes);
  96.    fclose (o1);
  97.    fclose (o2);
  98.    unlink ("FIDOUSER.$$1");
  99. }
  100.  
  101. /* Just some random equation to determine likelihood of current address
  102.    being the correct default address for an individual (a good guess -
  103.    at least I hope so <grin>).  */
  104. void how_likely (p, dphone, addrs, node, n_baud)
  105. char *p;
  106. int dphone;
  107. int addrs[];
  108. int node;
  109. int n_baud;
  110. {
  111.  
  112.    /*-------------------------------------------------------------------*
  113.    * It is less likely if it is a coordinator node                      *
  114.    *--------------------------------------------------------------------*/
  115.    if (dphone || (node == 0)) {
  116.       likely = 6000;
  117.    } else {
  118.       likely = 8000;
  119.    }
  120.  
  121.    /*-------------------------------------------------------------------*
  122.    * If its not in my zone, punish it                                   *
  123.    *--------------------------------------------------------------------*/
  124.    if ((myzone > 0) && (addrs[0] != myzone))
  125.       likely -= 3000;
  126.  
  127.    /*-------------------------------------------------------------------*
  128.    * If it is a "normal" net number, add something to it                *
  129.    *--------------------------------------------------------------------*/
  130.    if ((addrs[2] >= 100) && (addrs[2] <= 999))
  131.       likely += 2000 + addrs[2];
  132.    /*-------------------------------------------------------------------*
  133.    * If it is a region, that is better than a private net               *
  134.    *--------------------------------------------------------------------*/
  135.    else if (addrs[2] < 100)
  136.       likely += 250;
  137.    /*-------------------------------------------------------------------*
  138.    * Otherwise, it is probably bad news                                 *
  139.    *--------------------------------------------------------------------*/
  140.    else
  141.       likely -= 1000;
  142.  
  143.    /*-------------------------------------------------------------------*
  144.    * Prefer the higher baud rate                                        *
  145.    *--------------------------------------------------------------------*/
  146.    likely += n_baud / 8;
  147.  
  148.    /*-------------------------------------------------------------------*
  149.    * CM or XP or WZ is real nice                                        *
  150.    *--------------------------------------------------------------------*/
  151.    if (strstr (p, "CM")) {
  152.       likely += 2500;
  153.    } else if (strstr (p, "XP")) {
  154.       likely += 2500;
  155.    }
  156.    else if (strstr (p, "WZ")) {
  157.       likely += 2500;
  158.    }
  159.  
  160.    /*-------------------------------------------------------------------*
  161.    * Favor WZ a bit more                                                *
  162.    *--------------------------------------------------------------------*/
  163.    if (strstr (p, "WZ")) {
  164.       likely += 100;
  165.    }
  166.  
  167.    /*-------------------------------------------------------------------*
  168.    * If it is mail only, then it is probably not his primary            *
  169.    *--------------------------------------------------------------------*/
  170.    if (strstr (p, "MO")) {
  171.       likely -= 100;
  172.    }
  173.  
  174.    /*-------------------------------------------------------------------*
  175.    * Don't be fooled if has restricted hours, probably not primary      *
  176.    *--------------------------------------------------------------------*/
  177.    if (strstr (p, "WK")) {
  178.       likely -= 100;
  179.    }
  180.    if (strstr (p, "WE")) {
  181.       likely -= 100;
  182.    }
  183.    if (strstr (p, "DA")) {
  184.       likely -= 100;
  185.    }
  186.  
  187.    /*-------------------------------------------------------------------*
  188.    * If it is a coordinator, punish it depending on what type of coord  *
  189.    *--------------------------------------------------------------------*/
  190.    if (dphone)
  191.       likely -= (5 - dphone) * 75;
  192. }
  193. int (comp)(char *,char *);
  194.  
  195. sort()
  196. {
  197. int o1;
  198. struct ffblk dta;
  199. size_t recsize,rcount;
  200. char *base,buf[100];
  201.  
  202.    if (findfirst("FIDOUSER.$$1",&dta,0x27) != 0)   {
  203.        printf("\nUnable to open User directory");      
  204.        return;
  205.    }
  206.    if ((base = malloc(dta.ff_fsize)) == 0)   {
  207.       printf( "\nNot enough memory to sort Userlist");
  208.       return;
  209.    }
  210.  
  211.    o1 = open("FIDOUSER.$$1",O_RDWR | O_BINARY);
  212.    read(o1,buf,80);   
  213.    recsize = ( strchr (buf, '\n') -( buf ) + 1);
  214.    rcount  = ( dta.ff_fsize / recsize); /* number of records*/
  215.    lseek(o1,0,SEEK_SET);
  216.  
  217.    if (read(o1,base,dta.ff_fsize)!= dta.ff_fsize)   {
  218.      printf("\Problems reading FIDOUSER.$$1 into memory");
  219.      free (base);
  220.      return;
  221.    }
  222.    close(o1);
  223.    printf("\nSorting....");
  224.    qsort(base,rcount,recsize,comp);
  225.    printf("\nwriting sorted List...");
  226.    if ((o1 = open("FIDOUSER.$$1",O_RDWR|O_TRUNC))<0)   {
  227.       printf("\nunable to write sorted Userlist back to disk");
  228.       free(base);
  229.       return;
  230.    }
  231.    if (write(o1,base,dta.ff_fsize)!= dta.ff_fsize)   {
  232.       printf("\ncouldn't write the complete List");
  233.    }
  234.    free(base);
  235.    return;
  236. }
  237.  
  238. int comp(char *a, char *b)
  239. {
  240.    return(strcmp(a,b));
  241. }
  242.