home *** CD-ROM | disk | FTP | other *** search
/ The Devil's Doorknob BBS Capture (1996-2003) / devilsdoorknobbbscapture1996-2003.iso / UTIL / WWIVE / MYWIVE.ZIP / CONNECT1.C < prev    next >
C/C++ Source or Header  |  1993-05-06  |  7KB  |  283 lines

  1. #include "vars.h"
  2. #pragma hdrstop
  3. #include <math.h>
  4.  
  5. void read_call_out_list()
  6. {
  7.   char s[161],b[256],s1[81],*ss;
  8.   int f,i,i1,i2,n,cur_sys;
  9.   long l,p;
  10.   float fl;
  11.  
  12.   sprintf(s,"%sCALLOUT.NET",syscfg.datadir);
  13.   f=open(s,O_RDWR | O_BINARY);
  14.   if (f<0)
  15.     con=NULL;
  16.   else {
  17.     l=filelength(f);
  18.     if ((ss=malloca(l+512))==NULL)
  19.       end_bbs(noklevel);
  20.     read(f,(void *)ss,(int) l);
  21.     close(f);
  22.     num_call_sys=0;
  23.     for (p=0L; p<l; p++)
  24.       if (ss[p]=='@')
  25.     ++num_call_sys;
  26.     farfree(ss);
  27.     if ((con=malloca(((long)(num_call_sys+2))*sizeof(net_call_out_rec)))==NULL)
  28.       end_bbs(noklevel);
  29.     f=open(s,O_RDWR | O_BINARY);
  30.     if ((ss=malloca(l+512))==NULL)
  31.       end_bbs(noklevel);
  32.     read(f,(void *)ss,(int) l);
  33.     close(f);
  34.     p=0L;
  35.     cur_sys=-1;
  36.     while (p<l) {
  37.       while ((p<l) && (strchr("@%/\"&-=+~!();",ss[p])==NULL))
  38.     ++p;
  39.       if (p<l) {
  40.     switch(ss[p]) {
  41.       case '@':
  42.         ++p;
  43.         ++cur_sys;
  44.         con[cur_sys].macnum=0;
  45.         con[cur_sys].options=0;
  46.         con[cur_sys].call_anyway=0;
  47.         con[cur_sys].password[0]=0;
  48.         con[cur_sys].sysnum=atoi(&(ss[p]));
  49.             con[cur_sys].min_hr=-1;
  50.             con[cur_sys].max_hr=-1;
  51.             con[cur_sys].times_per_day=0;
  52.         break;
  53.           case '&':
  54.         con[cur_sys].options |= options_sendback;
  55.         ++p;
  56.         break;
  57.           case '-':
  58.         con[cur_sys].options |= options_ATT_night;
  59.         ++p;
  60.         break;
  61.           case '=':
  62.         con[cur_sys].options |= options_PCP_night;
  63.         ++p;
  64.         break;
  65.           case '+':
  66.         con[cur_sys].options |= options_no_call;
  67.         ++p;
  68.         break;
  69.       case '~':
  70.         con[cur_sys].options |= options_receive_only;
  71.         ++p;
  72.         break;
  73.       case '!':
  74.         con[cur_sys].options |= options_once_per_day;
  75.         ++p;
  76.             con[cur_sys].times_per_day=atoi(&(ss[p]));
  77.             if (!con[cur_sys].times_per_day)
  78.               con[cur_sys].times_per_day=1;
  79.         break;
  80.       case '%':
  81.         ++p;
  82.         con[cur_sys].macnum=(unsigned char) atoi(&(ss[p]));
  83.         break;
  84.       case '/':
  85.         ++p;
  86.         con[cur_sys].call_anyway=(unsigned char) atoi(&(ss[p]));
  87.         break;
  88.           case '(':
  89.             ++p;
  90.             con[cur_sys].min_hr = (unsigned char) atoi(&(ss[p]));
  91.             break;
  92.           case ')':
  93.             ++p;
  94.             con[cur_sys].max_hr = (unsigned char) atoi(&(ss[p]));
  95.             break;
  96.           case ';':
  97.             ++p;
  98.             con[cur_sys].options |= options_compress;
  99.             break;
  100.       case '\"':
  101.         ++p;
  102.         i=0;
  103.             while ((i<40) && (ss[p+(long)i]!='\"'))
  104.           ++i;
  105.         for (i1=0; i1<i; i1++)
  106.           con[cur_sys].password[i1]=ss[p+(long)i1];
  107.         con[cur_sys].password[i]=0;
  108.         p+=(long)(i+1);
  109.         break;
  110.     }
  111.       }
  112.     }
  113.     farfree(ss);
  114.   }
  115. }
  116.  
  117. void write_call_out_list()
  118. {
  119.   char s[161],b[256],s1[81],*ss;
  120.   int f,i,i1,i2,n,cur_sys;
  121.   long l,p;
  122.   float fl;
  123.  
  124.   sprintf(s,"%sCALLOUT.NET",syscfg.datadir);
  125.   f=open(s,O_RDWR | O_BINARY | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE);
  126.   if (f>0) {
  127.     for (i=0; i<num_call_sys; i++) {
  128.       sprintf(s,"@%-6u ",con[i].sysnum);
  129.       if (con[i].macnum) {
  130.         sprintf(s1,"%%%-3u ",(int) con[i].macnum);
  131.     strcat(s,s1);
  132.       } else
  133.         strcat(s,"     ");
  134.       if (con[i].call_anyway) {
  135.         sprintf(s1,"/%-3u ",(int) con[i].call_anyway);
  136.     strcat(s,s1);
  137.       } else
  138.         strcat(s,"     ");
  139.       sprintf(s1,"%c %c %c %c %c %c %c",
  140.         (con[i].options & options_sendback)?'&':' ',
  141.         (con[i].options & options_ATT_night)?'-':' ',
  142.         (con[i].options & options_PCP_night)?'=':' ',
  143.         (con[i].options & options_no_call)?'+':' ',
  144.         (con[i].options & options_receive_only)?'~':' ',
  145.         (con[i].options & options_compress)     ? ';' : ' ',
  146.         (con[i].options & options_once_per_day) ? '!' : ' ');
  147.       strcat(s,s1);
  148.       if ((con[i].options & options_once_per_day) &&
  149.           (con[i].times_per_day!=1)) {
  150.         sprintf(s1,"%-3u ",(int) con[i].times_per_day);
  151.         strcat(s,s1);
  152.       } else
  153.         strcat(s,"    ");
  154.       if (con[i].min_hr>0) {
  155.         sprintf(s1,"(%-3u ",(int) con[i].min_hr);
  156.         strcat(s,s1);
  157.       } else
  158.         strcat(s,"     ");
  159.       if (con[i].max_hr>0) {
  160.         sprintf(s1,")%-3u ",(int) con[i].max_hr);
  161.         strcat(s,s1);
  162.       } else
  163.         strcat(s,"     ");
  164.       sprintf(s1,"\"%s\"\r\n",con[i].password);
  165.       strcat(s,s1);
  166.       write(f,(void *)s,strlen(s));
  167.     }
  168.     close(f);
  169.   }
  170. }
  171.  
  172. void read_bbs_list()
  173. {
  174.   char s[161];
  175.   int f,i;
  176.   long l,p;
  177.  
  178.   csn=NULL;
  179.   cnn=NULL;
  180.   con=NULL;
  181.   num_sys=0;
  182.   num_sys_list=0;
  183.   num_call_sys=0;
  184.   if (syscfg.systemnumber==0)
  185.     return;
  186.   sprintf(s,"%sBBSDATA.NET",syscfg.datadir);
  187.   f=open(s,O_RDWR | O_BINARY);
  188.   if (f>0) {
  189.     l=filelength(f);
  190.     num_sys_list=(int) (l/sizeof(net_system_list_rec));
  191.     if ((csn=malloca(l+512L))==NULL)
  192.       end_bbs(noklevel);
  193.     for (i=0; i<num_sys_list; i+=256) {
  194.       read(f,(void *)&(csn[i]),256*sizeof(net_system_list_rec));
  195.     }
  196.     close(f);
  197.     read_call_out_list();
  198.   }
  199. }
  200.  
  201. void read_bbs_list_index()
  202. {
  203.   char s[161];
  204.   int f;
  205.   long l;
  206.  
  207.   csn=NULL;
  208.   cnn=NULL;
  209.   con=NULL;
  210.   num_sys=0;
  211.   num_sys_list=0;
  212.   num_call_sys=0;
  213.   if (syscfg.systemnumber==0)
  214.     return;
  215.   sprintf(s,"%sBBSDATA.IND",syscfg.datadir);
  216.   f=open(s,O_RDWR | O_BINARY);
  217.   if (f>0) {
  218.     l=filelength(f);
  219.     num_sys_list=(int) (l/2);
  220.     if ((csn_index=malloca(l))==NULL)
  221.       end_bbs(noklevel);
  222.     read(f,(void *)csn_index,l);
  223.     close(f);
  224.     read_call_out_list();
  225.   } else
  226.     read_bbs_list();
  227. }
  228.  
  229. net_system_list_rec *next_system(unsigned int ts)
  230. {
  231.   int i,f;
  232.   static net_system_list_rec csne;
  233.   char s[81];
  234.  
  235.   if (csn) {
  236.     for (i=0; i<num_sys_list; i++)
  237.       if (csn[i].sysnum==ts) {
  238.         if (csn[i].forsys==65535)
  239.           return(NULL);
  240.         else
  241.           return((net_system_list_rec *) &(csn[i]));
  242.       }
  243.     return(NULL);
  244.   } else {
  245.     for (i=0; i<num_sys_list; i++)
  246.       if (csn_index[i]==ts) {
  247.         sprintf(s,"%sBBSDATA.NET",syscfg.datadir);
  248.         f=open(s,O_RDONLY | O_BINARY);
  249.         lseek(f,sizeof(net_system_list_rec)*((long)i),SEEK_SET);
  250.         read(f,&csne,sizeof(net_system_list_rec));
  251.         close(f);
  252.         if (csne.forsys==65535)
  253.           return(NULL);
  254.         else
  255.           return(&csne);
  256.       }
  257.     return(NULL);
  258.   }
  259. }
  260.  
  261. void read_contacts()
  262. {
  263.   int i,f;
  264.   char s[81];
  265.   long l;
  266.  
  267.   if (ncn!=NULL)
  268.     farfree(ncn);
  269.   ncn=NULL;
  270.   num_ncn=0;
  271.   sprintf(s,"%sCONTACT.NET",syscfg.datadir);
  272.   f=open(s,O_RDWR | O_BINARY);
  273.   if (f>=0) {
  274.     l=filelength(f);
  275.     num_ncn=(int) (l/sizeof(net_contact_rec));
  276.     if ((ncn=malloca((num_ncn+2)*sizeof(net_contact_rec)))==NULL)
  277.       end_bbs(noklevel);
  278.     lseek(f,0L,SEEK_SET);
  279.     read(f,(void *)ncn,num_ncn*sizeof(net_contact_rec));
  280.     close(f);
  281.   }
  282. }
  283.