home *** CD-ROM | disk | FTP | other *** search
/ The Devil's Doorknob BBS Capture (1996-2003) / devilsdoorknobbbscapture1996-2003.iso / W / DEVBBS.ZIP / CONNECT1.C < prev    next >
C/C++ Source or Header  |  1992-07-20  |  7KB  |  290 lines

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