home *** CD-ROM | disk | FTP | other *** search
/ The Devil's Doorknob BBS Capture (1996-2003) / devilsdoorknobbbscapture1996-2003.iso / WWIV2.ZIP / SYSOPF.C < prev    next >
Text File  |  1995-12-16  |  14KB  |  620 lines

  1. #include "vars.h"
  2.  
  3. #pragma hdrstop
  4.  
  5.  
  6.  
  7. void isr1(int un, char *name)
  8. {
  9.   int cp,i;
  10.   char s[81];
  11.   smalrec sr;
  12.  
  13.   cp=0;
  14.   while ((cp<status.users) && (strcmp(name,(smallist[cp].name))>0))
  15.     ++cp;
  16.   memmove(&(smallist[cp+1]),&(smallist[cp]),sizeof(smalrec)*(status.users-cp));
  17.   strcpy(sr.name,name);
  18.   sr.number=un;
  19.   smallist[cp]=sr;
  20.   ++status.users;
  21. }
  22.  
  23.  
  24.  
  25. void reset_files(void)
  26. {
  27.   int i,i1;
  28.   userrec u;
  29.   char s[81];
  30.  
  31.   status.users=0;
  32.  
  33.   read_user(1,&u);
  34.   i1=number_userrecs();
  35.   for (i=1; i<=i1; i++) {
  36.     read_user(i,&u);
  37.     if ((u.inact & inact_deleted)==0)
  38.       isr1(i,u.name);
  39.     if ((i % 10)==0) {
  40.       npr("%d\r",i);
  41.     }
  42.   }
  43.  
  44.   outstr("\r\n\r\n");
  45.  
  46.   sprintf(s,"%sNAMES.LST",syscfg.datadir);
  47.   i=open(s,O_RDWR | O_BINARY | O_TRUNC);
  48.   if (i<0) {
  49.     printf("%s NOT FOUND.\n",s);
  50.     exit(noklevel);
  51.   }
  52.   write(i,(void *) (smallist), (sizeof(smalrec) * status.users));
  53.   close(i);
  54.  
  55.   save_status();
  56.   close_user();
  57. }
  58.  
  59.  
  60. void get_status(void)
  61. {
  62.   char s[81];
  63.   int statusfile;
  64.  
  65.   sprintf(s,"%sSTATUS.DAT",syscfg.datadir);
  66.   statusfile=open(s,O_RDWR | O_BINARY);
  67.   if (statusfile>=0) {
  68.     read(statusfile,(void *)(&status), sizeof(statusrec));
  69.     close(statusfile);
  70.   } else
  71.     save_status();
  72. }
  73.  
  74.  
  75.  
  76.  
  77. void prstatus(void)
  78. {
  79.   int i;
  80.   long l;
  81.  
  82.   outchr(12);
  83.   outstr(get_string(298)); pl(syscfg.newuserpw);
  84.   outstr(get_string(299)); pl(syscfg.closedsystem?get_string(300):get_string(301));
  85.   outstr(get_string(302)); pln(status.users);
  86.   outstr(get_string(303)); npr("%ld\r\n",status.callernum1);
  87.   outstr(get_string(304)); pl(status.date1);
  88.   outstr(get_string(305)); pl(times());
  89.   outstr(get_string(306)); pln(status.activetoday);
  90.   outstr(get_string(307)); pln(status.callstoday);
  91.   outstr(get_string(308)); pln(status.msgposttoday);
  92.   outstr(get_string(309)); pln(status.emailtoday);
  93.   outstr(get_string(310)); pln(status.fbacktoday);
  94.   outstr(get_string(311)); pln(status.uptoday);
  95.   outstr(get_string(312)); pln(fwaiting);
  96.   i=3;
  97.   l=(long) freek(3);
  98.   while ((l>0) && ((i+'@')<=cdir[0])) {
  99.     npr("%c",i+'@');
  100.     outstr(get_string(313));
  101.     npr("%ldk\r\n",l);
  102.     i++;
  103.     if ((i+'@')<=cdir[0])
  104.       l=(long) freek(i);
  105.   }
  106.   outstr(get_string(314));
  107.   if (!sysop2())
  108.     outstr(get_string(112));
  109.   pl(get_string(315));
  110. }
  111.  
  112. void valuser(int un)
  113. {
  114.   userrec u;
  115.   char s[81],s1[81],s2[81],s3[81],ar1[20],dar1[20],ch1;
  116.   int i,i1,ar2,dar2;
  117.  
  118.   read_user(un,&u);
  119.   if ((u.inact & inact_deleted)==0) {
  120.     nl();
  121.     npr("1Name : %s\r\n",nam(&u,un));
  122.     npr("1RN : %s\r\n",u.realname);
  123.     npr("Change it? ");
  124.     if(yn()) {
  125.      prt(0,"New name: ");
  126.      inputl(s,sizeof(u.realname)-1);
  127.      if (s[0]) {
  128.       strcpy(u.realname,s);
  129.       write_user(un,&u);
  130.      }
  131.     }
  132.     npr("1Address : %s\r\n",u.street);
  133.     npr("Change it? ");
  134.     if(yn()) {
  135.      prt(0,"New address: ");
  136.      inputl(s1,sizeof(u.street)-1);
  137.      if (s1[0]) {
  138.       strcpy(u.street,s1);
  139.       write_user(un,&u);
  140.      }
  141.     }
  142.     npr("1City: %s\r\n",u.city);
  143.     npr("Change it? ");
  144.     if(yn()) {
  145.      prt(0,"New city: ");
  146.      inputl(s1,sizeof(u.city)-1);
  147.      if (s1[0]) {
  148.       strcpy(u.city,s1);
  149.       write_user(un,&u);
  150.      }
  151.     }
  152.     npr("1Zip : %s\r\n",u.zipcode);
  153.     npr("Change it? ");
  154.     if (yn()) {
  155.      prt(0,"New zip: ");
  156.      input(s1,sizeof(u.zipcode)-1);
  157.      if (s1[0]) {
  158.       strcpy(u.zipcode,s1);
  159.       write_user(un,&u);
  160.      }
  161.     }
  162.     npr("1Phone: %s\r\n",u.phone);
  163.     npr("1Age : %d %c (%02d/%02d/%02d)\r\n", u.age, u.sex,u.month, u.day, u.year);
  164.     npr("Reset age? ");
  165.     if(yn()) {
  166.      npr("Enter in current birthdate for comparison: ");
  167.      inputl(s,sizeof(u.note)-1);
  168.      strcpy(u.note,s);
  169.      write_user(un,&u);
  170.      u.year=0;
  171.     }
  172.     npr("1Computer: %s\r\n",ctypes[u.comp_type]);
  173.     if (u.note[0]) {
  174.       npr("1Note: %s\r\n",u.note);
  175.     }
  176.     npr("1SL: %d\r\n",u.sl);
  177.     if ((u.sl!=255) && (u.sl<actsl)) {
  178.       outstr(get_string(316));
  179.       input(s,3);
  180.       if (s[0]) {
  181.         i=atoi(s);
  182.         if ((!wfc) && (i>=actsl))
  183.           i=-2;
  184.         if ((i>=0) && (i<255))
  185.           u.sl=i;
  186.     if (i==-1) {
  187.       nl();
  188.       prt(5,get_string(267));
  189.       if (yn()) {
  190.             deluser(un);
  191.         nl();
  192.         pl(get_string(56));
  193.         nl();
  194.       } else {
  195.         nl();
  196.         pl(get_string(317));
  197.       }
  198.       return;
  199.     }
  200.       }
  201.     }
  202.     npr("1DSL: %d\r\n",u.dsl);
  203.     if ((u.dsl!=255) && (u.dsl<thisuser.dsl)) {
  204.       outstr(get_string(316));
  205.       input(s,3);
  206.       if (s[0]) {
  207.         i=atoi(s);
  208.         if ((!wfc) && (i>=thisuser.dsl))
  209.           i=-1;
  210.         if ((i>=0) && (i<255))
  211.           u.dsl=i;
  212.       }
  213.     }
  214.     strcpy(s3,restrict_string);
  215.     ar2=1;
  216.     dar2=1;
  217.     ar1[0]=13;
  218.     dar1[0]=13;
  219.     for (i=0; i<=15; i++) {
  220.       if (u.ar & (1 << i))
  221.         s[i]='A'+i;
  222.       else
  223.         s[i]=32;
  224.       if (thisuser.ar & (1 << i))
  225.         ar1[ar2++]='A'+i;
  226.       if (u.dar & (1 << i))
  227.         s1[i]='A'+i;
  228.       else
  229.         s1[i]=32;
  230.       if (thisuser.dar & (1 << i))
  231.         dar1[dar2++]='A'+i;
  232.       if (u.restrict & (1 << i))
  233.         s2[i]=s3[i];
  234.       else
  235.         s2[i]=32;
  236.     }
  237.     s[16]=0;
  238.     s1[16]=0;
  239.     s2[16]=0;
  240.     ar1[ar2]=0;
  241.     dar1[dar2]=0;
  242.     nl();
  243.     ch1=0;
  244.     if (ar2>1)
  245.     pl("Note: Males get 'A' Ar, females get 'F' Ar.");
  246.       do {
  247.     npr("1AR: %s\r\n",s);
  248.     prt(0,get_string(319));
  249.         ch1=onek(ar1);
  250.         if (ch1!=13) {
  251.           ch1-='A';
  252.           if (s[ch1]==32)
  253.             s[ch1]=ch1+'A';
  254.           else
  255.             s[ch1]=32;
  256.           u.ar ^= (1 << ch1);
  257.           ch1=0;
  258.         }
  259.       } while ((!hangup) && (ch1!=13));
  260.     nl();
  261.     ch1=0;
  262.     if (dar2>1)
  263.       do {
  264.     npr("1DAR: %s\r\n",s1);
  265.     prt(0,get_string(319));
  266.     ch1=onek(dar1);
  267.         if (ch1!=13) {
  268.           ch1-='A';
  269.           if (s1[ch1]==32)
  270.             s1[ch1]=ch1+'A';
  271.           else
  272.             s1[ch1]=32;
  273.           u.dar ^= (1 << ch1);
  274.           ch1=0;
  275.         }
  276.       } while ((!hangup) && (ch1!=13));
  277.     nl();
  278.     npr("Has this user been voice validated? ");
  279.     if(yn()) {
  280.      strcpy(u.voiced,"YES");
  281.     } else {
  282.      strcpy(u.voiced,"NO");
  283.     }
  284.     nl();
  285.     ch1=0;
  286.     s[0]=13;
  287.     s[1]='?';
  288.     strcpy(&(s[2]),restrict_string);
  289.     do {
  290.       npr("      %s\r\n",s3);
  291.       npr("1Restr: %s\r\n",s2);
  292.       prt(0,get_string(319));
  293.       ch1=onek(s);
  294.       if ((ch1!=13) && (ch1!=32) && (ch1!='?')) {
  295.         i=-1;
  296.         for (i1=0; i1<16; i1++)
  297.           if (ch1==s[i1+2])
  298.             i=i1;
  299.         if (i>-1) {
  300.           u.restrict ^= (1 << i);
  301.           if (s2[i]==32)
  302.             s2[i]=s3[i];
  303.           else
  304.             s2[i]=32;
  305.         }
  306.         ch1=0;
  307.       }
  308.       if (ch1=='?') {
  309.         ch1=0;
  310.         printmenu(10);
  311.       }
  312.     } while ((!hangup) && (ch1==0));
  313.     write_user(un,&u);
  314.     close_user();
  315.     nl();
  316.   } else {
  317.     nl();
  318.     pl(get_string(321));
  319.     nl();
  320.   }
  321. }
  322.  
  323.  
  324. void print_net_listing(unsigned int ss)
  325. {
  326.   int i,i1,i2,abort,f;
  327.   char s[161],ch,onx[20],*mmk;
  328.   int onxi,odci;
  329.   net_system_list_rec csne;
  330.  
  331.  
  332.   if (net_num_max>1) {
  333.     odc[0]=0;
  334.     odci=0;
  335.     onx[0]='Q';
  336.     onx[1]=0;
  337.     onxi=1;
  338.     nl();
  339.     for (i=0; i<net_num_max; i++) {
  340.       if (i<9) {
  341.         onx[onxi++]=i+'1';
  342.         onx[onxi]=0;
  343.       } else {
  344.         odci=(i+1)/10;
  345.         odc[odci-1]=odci+'0';
  346.         odc[odci]=0;
  347.       }
  348.       npr("%d. %s\r\n",i+1,net_networks[i].name);
  349.     }
  350.     pl(get_string(12));
  351.     nl();
  352.     prt(2,get_string(13));
  353.     if (net_num_max<9) {
  354.       ch=onek(onx);
  355.       if (ch=='Q')
  356.         i=-1;
  357.       else
  358.         i=ch-'1';
  359.     } else {
  360.       mmk=mmkey(2);
  361.       if (*mmk=='Q')
  362.         i=-1;
  363.       else
  364.         i=atoi(mmk)-1;
  365.     }
  366.     if ((i>=0) && (i<net_num_max)) {
  367.       set_net_num(i);
  368.     } else
  369.       return;
  370.   }
  371.  
  372.   read_bbs_list_index();
  373.  
  374.   ss = ss%10000;
  375.  
  376.   abort=0;
  377.   nl();
  378.   outstr(net_name);
  379.   pl(get_string(322));
  380.   nl();
  381.   pla(get_string(323),&abort);
  382.   pla(get_string(324),&abort);
  383.   sprintf(s,"%sBBSDATA.NET",net_data);
  384.   f=open(s,O_RDONLY | O_BINARY);
  385.   for (i=0; (i<num_sys_list) && (!abort); i++) {
  386.     read(f,&csne,sizeof(net_system_list_rec));
  387.     if ((csne.forsys!=65535) && ((csne.sysnum%10000)>=ss)) {
  388.       if (csne.other & other_net_coord)
  389.         ch='&';
  390.       else if (csne.other & other_group_coord)
  391.         ch='%';
  392.       else if (csne.other & other_coordinator)
  393.         ch='^';
  394.       else
  395.         ch=' ';
  396.       sprintf(s,"%5u%c %12s  %-40s %3d %5d %3d",
  397.         csne.sysnum,ch,csne.phone,csne.name,csne.numhops,
  398.         csne.forsys, csne.group);
  399.       pla(s,&abort);
  400.       ss=0;
  401.     }
  402.   }
  403.   close(f);
  404. }
  405.  
  406.  
  407. void read_new_stuff(void)
  408. {
  409.   int i;
  410.   char s[81];
  411.  
  412.   zap_bbs_list();
  413.   for (i=0; i<net_num_max; i++) {
  414.     zap_call_out_list();
  415.     zap_contacts();
  416.   }
  417.  
  418.   set_language(0);
  419.  
  420. }
  421.  
  422.  
  423. void mailr(void)
  424. {
  425.   int i,abort,a,f,next,tp,nn;
  426.   mailrec m;
  427.   char c,s[81];
  428.   userrec u;
  429.  
  430.   sprintf(s,"%sEMAIL.DAT",syscfg.datadir);
  431.   f=open(s,O_BINARY | O_RDWR);
  432.   if (f!=-1) {
  433.     i=filelength(f)/sizeof(mailrec)-1;
  434.     c=' ';
  435.     while ((i>=0) && (c!='Q') && (!hangup)) {
  436.       lseek(f,((long) (i)) * ((long) sizeof(mailrec)),SEEK_SET);
  437.       read(f,(void *)&m,sizeof(mailrec));
  438.       if (m.touser!=0) {
  439.         do {
  440.           read_user(m.touser,&u);
  441.           outstr(get_string(325));
  442.           pl(nam(&u,m.touser));
  443.           tp=80;
  444.           if (m.status & status_source_verified)
  445.             tp -= 2;
  446.           if (m.status & status_new_net) {
  447.             tp -= 1;
  448.             if (strlen(m.title)<=tp) {
  449.               nn=m.title[tp+1];
  450.             } else
  451.               nn=0;
  452.           } else
  453.             nn=0;
  454.           set_net_num(nn);
  455.           outstr(get_string(326)); pl(m.title);
  456.           setorigin(m.fromsys, m.fromuser);
  457.           read_message1(&(m.msg),m.anony & 0x0f,1,&next,"EMAIL");
  458.           prt(2,get_string(327));
  459.           if (next)
  460.         c=' ';
  461.       else
  462.         c=onek("QRD ");
  463.           if (c=='D') {
  464.             delmail(f,i);
  465.         if ((!useron) && (m.touser==1) && (m.tosys==0))
  466.           --thisuser.waiting;
  467.           }
  468.           nl();
  469.       nl();
  470.         } while ((c=='R') && (!hangup));
  471.       }
  472.       i-=1;
  473.     }
  474.     close(f);
  475.     close_user();
  476.   }
  477. }
  478.  
  479.  
  480. void chuser(void)
  481. {
  482.   char s[81];
  483.   int i;
  484.  
  485.   if (!checkpw())
  486.     return;
  487.   if (!so())
  488.     return;
  489.   prt(2,get_string(328));
  490.   input(s,30);
  491.   i=finduser1(s);
  492.   if (i>0) {
  493.     write_user(usernum,&thisuser);
  494.     read_user(i,&thisuser);
  495.     usernum=i;
  496.     close_user();
  497.     actsl=255;
  498.     sprintf(s,get_stringx(1,17),nam(&thisuser,usernum));
  499.     sysoplog(s);
  500.     changedsl();
  501.     topscreen();
  502.   } else
  503.     pl(get_string(8));
  504. }
  505.  
  506. void zlog(void)
  507. {
  508.   zlogrec z;
  509.   char s[81];
  510.   int abort,f,i,i1;
  511.  
  512.   sprintf(s,"%sZLOG.DAT",syscfg.datadir);
  513.   f=open(s,O_RDWR | O_BINARY);
  514.   if (f<0)
  515.     return;
  516.   i=0;
  517.   abort=0;
  518.   read(f,(void *)&z,sizeof(zlogrec));
  519.   pla(get_string(329),&abort);
  520.   pla(get_string(330),&abort);
  521.   while ((i<97) && (!abort) && (!hangup) && (z.date[0]!=0)) {
  522.     if (z.calls)
  523.       i1=z.active/z.calls;
  524.     else
  525.       i1=0;
  526.     sprintf(s,"%s    %4d    %4d     %3d     %3d     %3d    %3d     %3d      %3d",
  527.          z.date,z.calls,z.active,z.posts,z.email,z.fback,z.up,10*z.active/144,i1);
  528.     pla(s,&abort);
  529.     ++i;
  530.     if (i<97) {
  531.       lseek(f,((long) i) * sizeof(zlogrec),SEEK_SET);
  532.       read(f,(void *)&z,sizeof(zlogrec));
  533.     }
  534.   }
  535.   close(f);
  536. }
  537.  
  538.  
  539. void beginday(void)
  540. {
  541.   char s[255];
  542.   zlogrec z,z1;
  543.   int f,i,i1;
  544.  
  545.   double fk;
  546.   int    nus;
  547.  
  548.   pl(get_string(331));
  549.  
  550.   strcpy(z.date,status.date1);
  551.   z.active=status.activetoday;
  552.   z.calls=status.callstoday;
  553.   z.posts=status.msgposttoday;
  554.   z.email=status.emailtoday;
  555.   z.fback=status.fbacktoday;
  556.   z.up=status.uptoday;
  557.   status.callstoday=0;
  558.   status.msgposttoday=0;
  559.   status.emailtoday=0;
  560.   status.fbacktoday=0;
  561.   status.uptoday=0;
  562.   status.activetoday=0;
  563.   strcpy(status.date3,status.date2);
  564.   strcpy(status.date2,status.date1);
  565.   strcpy(status.date1,date());
  566.   strcpy(status.log2,status.log1);
  567.   sl1(3,status.log1);
  568.   sl1(2,date());
  569.  
  570.   sprintf(s,"%s%s",syscfg.gfilesdir, status.log2);
  571.   unlink(s);
  572.  
  573.   sprintf(s,"%sUSER.LOG",syscfg.gfilesdir);
  574.   unlink(s);
  575.   save_status();
  576.   sprintf(s,"%sZLOG.DAT",syscfg.datadir);
  577.   f=open(s,O_RDWR | O_BINARY);
  578.   if (f<0) {
  579.     f=open(s,O_RDWR | O_BINARY | O_CREAT, S_IREAD | S_IWRITE);
  580.     z1.date[0]=0;
  581.     z1.active=0;
  582.     z1.calls=0;
  583.     z1.posts=0;
  584.     z1.email=0;
  585.     z1.fback=0;
  586.     z1.up=0;
  587.     for (i=0; i<97; i++)
  588.       write(f,(void *)&z1,sizeof(zlogrec));
  589.   } else {
  590.     for (i=96; i>=1; i--) {
  591.       lseek(f,(long) ((i-1) * sizeof(zlogrec)),SEEK_SET);
  592.       read(f,(void *)&z1,sizeof(zlogrec));
  593.       lseek(f,(long) (i * sizeof(zlogrec)),SEEK_SET);
  594.       write(f,(void *)&z1,sizeof(zlogrec));
  595.     }
  596.   }
  597.   lseek(f,0L,SEEK_SET);
  598.   write(f,(void *)&z,sizeof(zlogrec));
  599.   close(f);
  600.   if (syscfg.beginday_c[0]) {
  601.     stuff_in(s,syscfg.beginday_c,create_chain_file("CHAIN.TXT"),"","","","");
  602.     do_remote(s,1);
  603.   }
  604.  
  605.   fk=freek1(syscfg.datadir);
  606.   nus=syscfg.maxusers-status.users;
  607.  
  608.   if (fk<512.0) {
  609.     sprintf(s,get_stringx(1,18),(int) fk);
  610.     ssm(1,0,s);
  611.   }
  612.  
  613.   if ((!syscfg.closedsystem) && (nus<15)){
  614.     sprintf(s,get_stringx(1,19),nus);
  615.     ssm(1,0,s);
  616.   }
  617. }
  618.  
  619.  
  620.