home *** CD-ROM | disk | FTP | other *** search
/ The Devil's Doorknob BBS Capture (1996-2003) / devilsdoorknobbbscapture1996-2003.iso / Dloads / OTHERUTI / WWIV412S.ZIP / CONNECT1.C < prev    next >
C/C++ Source or Header  |  1990-04-29  |  8KB  |  341 lines

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