home *** CD-ROM | disk | FTP | other *** search
/ The Devil's Doorknob BBS Capture (1996-2003) / devilsdoorknobbbscapture1996-2003.iso / UTIL / WWIVE / MYWIVE.ZIP / LILO.C < prev    next >
Text File  |  1993-09-18  |  13KB  |  551 lines

  1. #include "vars.h"
  2. #pragma hdrstop
  3.  
  4. int check_ansi()
  5. {
  6.   long l;
  7.   char ch;
  8.  
  9.   while (comhit())
  10.     get1c();
  11.   pr1("\x1b[6n");
  12.   l=timer1()+36;
  13.   if (modem_flag & flag_ec)
  14.     l += 18;
  15.   while ((timer1()<l) && (!hangup)) {
  16.     checkhangup();
  17.     ch=get1c();
  18.     if (ch=='\x1b')
  19.       return(1);
  20.     if (ch=='N')
  21.       return(-1);
  22.   }
  23.   return(0);
  24. }
  25.  
  26. void getuser()
  27. {
  28.   char s[81],s2[81],s3[81],*ss;
  29.   int ok,count,net_only,ans;
  30.   long l;
  31.   FILE *f;
  32.  
  33.   thisuser.sysstatus &= (~sysstatus_ansi);
  34.   net_only=1;
  35.   if (syscfg.netlowtime!= syscfg.nethightime) {
  36.     if (syscfg.nethightime>syscfg.netlowtime) {
  37.       if ((timer()<=(syscfg.netlowtime*60.0)) || (timer()>=(syscfg.nethightime*60.0)))
  38.         net_only=0;
  39.     } else {
  40.       if ((timer()<=(syscfg.netlowtime*60.0)) && (timer()>=(syscfg.nethightime*60.0)))
  41.         net_only=0;
  42.     }
  43.   } else
  44.     net_only=0;
  45.   count=0;
  46.   ok=0;
  47.   checkit=1;
  48.   okmacro=0;
  49.   actsl=syscfg.newusersl;
  50.   if ((!net_only) && (incom)) {
  51.     sprintf(s,"%sWELCOME.ANS",syscfg.gfilesdir);
  52.     if (exist(s)) {
  53.       nl();
  54. #ifdef OLD
  55.       outstr("Can you support ANSI graphics? ");
  56.       thisuser.sysstatus=0;
  57.       ans=yn();
  58. #else
  59.       ans=check_ansi();
  60. #endif
  61.       if (ans>0)
  62.         printfile("welcome.ans");
  63.       else if (ans==0)
  64.     printfile("welcome.msg");
  65.     } else
  66.       printfile("welcome.msg");
  67.   }
  68.   makeansi(0x07, s, 1);
  69.   outs(s);
  70.   do {
  71.     nl();
  72.     if (net_only) {
  73.       pl("This time is reserved for net-mail ONLY.");
  74.       pl("Please try calling back again later.");
  75.     } else
  76.       printfile("open.msg");
  77.     outstr("NN:\b\b\b1Logon ID 7> ");
  78.     /*outstr("NN: ");  */
  79.     input(s,30);
  80.     usernum=finduser(s);
  81.     if ((net_only) && (usernum!=-2))
  82.       usernum=0;
  83.     if (usernum>0) {
  84.       read_user(usernum,&thisuser);
  85.       actsl = syscfg.newusersl;
  86.       topscreen();
  87.       ok=1;
  88.       outstr("1Password 7> ");
  89.       echo=0;
  90.       input(s,8);
  91.       if (strcmp(s,thisuser.pw)!=0)
  92.         ok=0;
  93.       if ((syscfg.sysconfig & sysconfig_free_phone)==0 && (usernum!=133)) {
  94.     outstr("1Phone 7> e■■■-■■■-");
  95.     echo=0;
  96.     input(s2,4);
  97.     if (strcmp(s2,&thisuser.phone[8])!=0) {
  98.       ok=0;
  99.       if ((strlen(s2)==4) && (s2[3]=='-')) {
  100.         nl();
  101.         pl("6!! Enter the LAST 4 DIGITS of your phone number ONLY !!");
  102.         nl();
  103.           }
  104.         }
  105.       }
  106.       if ((thisuser.sl==255) && (incom) && (ok)) {
  107.     outstr("6SY: ");
  108.         echo=0;
  109.         input(s,20);
  110.         if (strcmp(s,syscfg.systempw)!=0)
  111.           ok=0;
  112.       }
  113.       echo=1;
  114.       if (ok) {
  115.         reset_act_sl();
  116.         changedsl();
  117.       } else {
  118.         ++thisuser.illegal;
  119.         write_user(usernum,&thisuser);
  120.         close_user();
  121.         nl();
  122.         pl("\7ILLEGAL LOGON\7");
  123.         nl();
  124.     sprintf(s3,"### ILLEGAL LOGON for %s (%s) (PW=%s) (PH=%s)",
  125.         nam(&thisuser,usernum),
  126.         ctim(timer()),
  127.         s,s2);
  128.         sl1(0,s3);
  129.     usernum=0;
  130.       }
  131.     } else
  132.       if (usernum==-1) {
  133.         newuser();
  134.         ok=1;
  135.       } else
  136.         if (usernum==0) {
  137.       if (net_only)
  138.         nl();
  139.       else
  140.         pl("6Unknown user.");
  141.     } else
  142.       if ((usernum==-2) || (usernum==-3) || (usernum==-4)) {
  143.         if (incom) {
  144.           save_status();
  145.           time(&l);
  146.           s2[0]=0;
  147.           switch(usernum) {
  148.         case -2:
  149.           sprintf(s2,"NETWORK /B%u /T%ld /F%u",modem_speed,l,modem_flag);
  150.           run_external1(s2);
  151.           break;
  152.         case -3:
  153.           sprintf(s2,"REMOTE /B%u /F%u",modem_speed,modem_flag);
  154.           run_external1(s2);
  155.           break;
  156.         case -4:
  157.           s[8]=0;
  158.           if (s[0]) {
  159.             sprintf(s2,"%s /B%u /F%u",s,modem_speed,modem_flag);
  160.             sprintf(s3,"%sREMOTES.DAT",syscfg.datadir);
  161.             f=fopen(s3,"r");
  162.             if (f) {
  163.               ok=0;
  164.               while ((!ok) && (fgets(s3,80,f))) {
  165.             ss=strchr(s3,'\n');
  166.             if (ss)
  167.               *ss=0;
  168.             if (stricmp(s3,s)==0)
  169.               ok=1;
  170.               }
  171.               fclose(f);
  172.               if (ok) {
  173.             run_external1(s2);
  174.               }
  175.             }
  176.           }
  177.           break;
  178.           }
  179.           get_status();
  180.           hangup=1;
  181.           dtr(0);
  182.           global_xx=0;
  183.           wait(1.0);
  184.           dtr(1);
  185.           wait(0.1);
  186.           cleanup_net();
  187.               imodem(0);
  188.         }
  189.         hangup=1;
  190.           }
  191.  
  192.   } while ((!hangup) && (!ok) && (++count<3));
  193.   if (count==3)
  194.     hangup=1;
  195.   checkit=0;
  196.   okmacro=1;
  197.   if ((!hangup) && (usernum>0) && (thisuser.restrict & restrict_logon) &&
  198.     (strcmp(date(),thisuser.laston)==0) && (thisuser.ontoday>0)) {
  199.     nl();
  200.     pl("1Sorry, you can only logon once per day.");
  201.     nl();
  202.     hangup=1;
  203.   }
  204. }
  205.  
  206. void logon()
  207. {
  208.   char s[255],s1[81],s2[81],s4[2],*ss;
  209.   int i,i1,f,j;
  210.   long len,pos;
  211.   char s3[31],l[4][81];
  212.  
  213.   if (usernum<1) {
  214.     hangup=1;
  215.     return;
  216.   }
  217.  
  218.   if (live_user) {
  219.     ansic(0);
  220.     outchr(12);
  221.   }
  222.   if (strcmp(date(),status.date1)!=0) {
  223.     if (live_user) {
  224.       nl();
  225.       pl("6Now doing daily maintenance.");
  226.       nl();
  227.     }
  228.     beginday();
  229.   }
  230.   if (usernum==1)
  231.     auto_delete();
  232.   if (usernum==133)
  233.     input_ansistat();
  234.   if (incom && live_user) {
  235.     i=printfile("LOGON");
  236.     if ((!i) && (!(thisuser.sysstatus & sysstatus_pause_on_page)))
  237.       pausescr();
  238.   }
  239.  
  240.   strcpy(xdate,date());
  241.   if (strcmp(xdate,thisuser.laston)==0)
  242.     ++thisuser.ontoday;
  243.   else {
  244.     thisuser.ontoday=1;
  245.     thisuser.timeontoday=0.0;
  246.     thisuser.extratime=0.0;
  247.     thisuser.posttoday=0;
  248.     thisuser.etoday=0;
  249.     thisuser.fsenttoday1=0;
  250.   }
  251.   ++thisuser.logons;
  252.   cursub=0;
  253.   msgreadlogon=0;
  254.   if (udir[0].subnum==0)
  255.     curdir=1;
  256.   else
  257.     curdir=0;
  258.   curdloads=0;
  259.   if (actsl!=255) {
  260.     ++status.callernum1;
  261.     ++status.callstoday;
  262.   }
  263.   sprintf(s,"%ld: %s %s %s   %s - %d",
  264.        status.callernum1,
  265.        nam(&thisuser,usernum),
  266.        times(),
  267.        date(),
  268.        curspeed,
  269.        thisuser.ontoday);
  270.  
  271.   sprintf(s2,"%sLASTON.TXT",syscfg.gfilesdir);
  272.   ss=get_file(s2,&len);
  273.   pos=0;
  274.   if (ss!=NULL) {
  275.     if (!cs())
  276.       for (i=0; i<4; i++)
  277.     copy_line(s1,ss,&pos,len);
  278.     i=1;
  279.     do {
  280.       copy_line(s1,ss,&pos,len);
  281.       if ((s1[0]) && live_user) {
  282.     if (i) {
  283.       i=0;
  284.       nl();
  285.       nl();
  286.       pl("7Last few callers: ");
  287.       nl();
  288.     }
  289.     pl(s1);
  290.       }
  291.     } while (pos<len);
  292.   }
  293.   if ((actsl!=255) || (incom)) {
  294.     sl1(0,"");
  295.     sl1(0,s);
  296.     sl1(1,"");
  297.     sprintf(s,"1%ld> f%s  %s  e%s - %d\r\n",
  298.       status.callernum1,
  299.       nam(&thisuser,usernum),
  300.       thisuser.citstate,
  301.       curspeed,
  302.       thisuser.ontoday);
  303.     sprintf(s1,"%sUSER.LOG",syscfg.gfilesdir);
  304.     f=open(s1,O_RDWR | O_BINARY | O_CREAT, S_IREAD | S_IWRITE);
  305.     lseek(f,0L,SEEK_END);
  306.     i=strlen(s);
  307.     if (actsl!=255) {
  308.       write(f,(void *)s,i);
  309.       close(f);
  310.       f=open(s2,O_RDWR | O_BINARY | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE);
  311.       pos=0;
  312.       copy_line(s1,ss,&pos,len);
  313.       for (i=1; i<8; i++) {
  314.         copy_line(s1,ss,&pos,len);
  315.         strcat(s1,"\r\n");
  316.         write(f,(void *)s1,strlen(s1));
  317.       }
  318.       write(f,(void *)s,strlen(s));
  319.       close(f);
  320.     } else
  321.       close(f);
  322.   }
  323.   if (ss!=NULL)
  324.     farfree(ss);
  325.   if (live_user) {
  326.     pausescr();
  327.     outchr(12);
  328.     read_automessage();
  329.     }
  330.   if (live_user) {
  331.     pausescr();
  332.     outchr(12);
  333.     read_bbsadd();
  334.     }
  335.   timeon=timer();
  336.   useron=1;
  337.   if (live_user)
  338.     topscreen();
  339.   if ((syscfg.logon_c[0]) && live_user) {
  340.     nl();
  341.     stuff_in(s,syscfg.logon_c,create_chain_file("CHAIN.TXT"),"","","","");
  342.     full_external(s,0,1);
  343.     nl();
  344.     nl();
  345.   }
  346.   if (live_user) {
  347.     nl();
  348.     npr("                  7 Name           6: 1%s\r\n",nam(&thisuser,usernum));
  349.     npr("                  7 Time allowed on6: 1%d\r\n", (int) ((nsl()+30)/60.0));
  350.     npr("                   7Illegal logons 6: 1%d\r\n",thisuser.illegal);
  351.     npr("                   7Mail waiting   6: 1%d\r\n",thisuser.waiting);
  352.     if (thisuser.ontoday==1)
  353.       npr("                   7Last on        6: 1%s\r\n",thisuser.laston);
  354.     else
  355.       npr("                   7Times on today 6: 1%d\r\n",thisuser.ontoday);
  356.     if (sysop2())
  357.       npr("                   7Sysop is       6: 1Watching your every move!\r\n");
  358.     else
  359.       npr("                   7Sysop is       6: 1Out Llama tipping!\r\n");
  360.  
  361.  
  362. /****************************************************************************/
  363. /*
  364.  * Do NOT remove or modify this part of the code.  If the registration number
  365.  * (or an indicator that it is unregistered) is not printed out, it will
  366.  * be plainly obvious that this is a 'pirated' version of the source code.
  367.  */
  368.     if (syscfg.wwiv_reg_number)
  369.       sprintf(s,"(Reg #%ld)",syscfg.wwiv_reg_number);
  370.     else
  371.       strcpy(s,"(Unregistered)");
  372.     sprintf(s1,"                   7System is      6: 1%s   %s",VERSION_NUMBER,s);
  373.     pl(s1);
  374. /****************************************************************************/
  375.     if (syscfg.systemnumber)
  376.       npr("                   7NuclearArms6NET : 1@%u   (net%u)\r\n",syscfg.systemnumber,
  377.     status.net_version);
  378.     nl();
  379.     if (thisuser.forwardusr) {
  380.       if (thisuser.forwardsys) {
  381.         if (!next_system(thisuser.forwardsys)) {
  382.           thisuser.forwardusr=0;
  383.           thisuser.forwardsys=0;
  384.           strcpy(s1,"Forwarded to unknown system; forwarding reset.");
  385.         } else {
  386.           sprintf(s1,"Forwarding mail to #%u @%u.",
  387.               thisuser.forwardusr,thisuser.forwardsys);
  388.         }
  389.       } else {
  390.         sprintf(s1,"Forwarding mail to user #%u.",thisuser.forwardusr);
  391.       }
  392.       pl(s1);
  393.       nl();
  394.     }
  395.     fsenttoday=0;
  396.     if (usernum==133)
  397.       thisuser.year=0;
  398.     if (thisuser.year) {
  399.       s[0]=years_old(thisuser.month,thisuser.day,thisuser.year);
  400.       if (thisuser.age!=s[0]) {
  401.     thisuser.age=s[0];
  402.     topscreen();
  403.       }
  404.     } else {
  405.       nl();
  406.       pl("Please enter the following information:");
  407.       do {
  408.     nl();
  409.     input_sex();
  410.     input_age(&thisuser);
  411.     sprintf(s,"%02d/%02d/%02d",(int) thisuser.month,
  412.                 (int) thisuser.day,
  413.                 (int) thisuser.year);
  414.     nl();
  415.     npr("Birthdate: %s.  Correct? ",s);
  416.     if (!yn())
  417.       thisuser.year=0;
  418.       } while ((!hangup) && (thisuser.year==0));
  419.       topscreen();
  420.       nl();
  421.     }
  422.     if (thisuser.sex_type[0]==0)
  423.       input_sex_type();
  424.     rsm(usernum,&thisuser);
  425.     if (thisuser.waiting) {
  426.       prt(5,"eRead your mail now? ");
  427.       if (ny())
  428.     readmail();
  429.     }
  430.     prt(5,"Would you like to see the deleted user list? ");
  431.     if (yn())
  432.       printfile("DELETED.MSG");    
  433.   }
  434.   nscandate=thisuser.daten;
  435.   batchtime=0.0;
  436.   numbatchdl=numbatch=0;
  437.   i1=0;
  438.   for (i=0; i<20; i++) {
  439.     if (questused[i])
  440.       if (thisuser.votes[i]==0)
  441.     i1=1;
  442.   }
  443.   if (restrict_vote & thisuser.restrict)
  444.     i1=0;
  445.   if (actsl<=1)
  446.     i1=0;
  447.   if (i1 && live_user) {
  448.     nl();
  449.     prt(3,"fYou haven't voted yet.");
  450.     nl();
  451.     pausescr();
  452.     vote();
  453.     nl();
  454.     nl();
  455.   }
  456.   save_status();
  457.   create_chain_file("CHAIN.TXT");
  458.   prt(1,"Scan for New Messagese?");
  459.   if (ny())
  460.     nscan(0);
  461. }
  462.  
  463. void logoff()
  464. {
  465.   long l;
  466.   int f,r,w,t,i;
  467.   char s[81];
  468.   mailrec m;
  469.   shortmsgrec sm;
  470.   double ton;
  471.  
  472.   dtr(0);
  473.   hangup=1;
  474.   if (usernum<1)
  475.     return;
  476.   thisuser.lastrate=modem_speed;
  477.   strcpy(thisuser.laston,xdate);
  478.   thisuser.illegal=0;
  479.   if ((timer()-timeon)<-30.0)
  480.     timeon-=24.0*3600.0;
  481.   ton=timer()-timeon;
  482.   thisuser.timeon += ton;
  483.   thisuser.timeontoday += (ton-extratimecall);
  484.   status.activetoday += (int) (ton/60.0);
  485.   save_status();
  486.   time(&l);
  487.   thisuser.daten=l;
  488.   close_user();
  489.   write_user(usernum,&thisuser);
  490.   close_user();
  491.   sprintf(s,"Read: %u   Time on: %u",msgreadlogon,
  492.         (int)((timer()-timeon)/60.0));
  493.   if ((incom) || (actsl!=255))
  494.     sl1(0,s);
  495.   if (mailcheck) {
  496.     sprintf(s,"%sEMAIL.DAT",syscfg.datadir);
  497.     f=open(s,O_BINARY | O_RDWR);
  498.     if (f!=-1) {
  499.       t=(int) (filelength(f)/sizeof(mailrec));
  500.       r=0;
  501.       w=0;
  502.       while (r<t) {
  503.         lseek(f,(long)(sizeof(mailrec)) * (long)(r),SEEK_SET);
  504.         read(f,(void *)&m,sizeof(mailrec));
  505.         if ((m.tosys!=0) || (m.touser!=0)) {
  506.           if (r!=w) {
  507.             lseek(f,(long)(sizeof(mailrec)) * (long)(w),SEEK_SET);
  508.             write(f,(void *)&m,sizeof(mailrec));
  509.           }
  510.           ++w;
  511.         }
  512.         ++r;
  513.       }
  514.       chsize(f,(long)(sizeof(mailrec)) * (long)(w));
  515.       close(f);
  516.     }
  517.   }
  518.   if (smwcheck) {
  519.     sprintf(s,"%sSMW.DAT",syscfg.datadir);
  520.     f=open(s,O_BINARY | O_RDWR);
  521.     if (f!=-1) {
  522.       t=(int) (filelength(f)/sizeof(shortmsgrec));
  523.       r=0;
  524.       w=0;
  525.       while (r<t) {
  526.         lseek(f,(long)(sizeof(shortmsgrec)) * (long)(r),SEEK_SET);
  527.         read(f,(void *)&sm,sizeof(shortmsgrec));
  528.         if ((sm.tosys!=0) || (sm.touser!=0)) {
  529.           if (r!=w) {
  530.             lseek(f,(long)(sizeof(shortmsgrec)) * (long)(w),SEEK_SET);
  531.             write(f,(void *)&sm,sizeof(shortmsgrec));
  532.           }
  533.           ++w;
  534.         }
  535.         ++r;
  536.       }
  537.       chsize(f,(long)(sizeof(shortmsgrec)) * (long)(w));
  538.       close(f);
  539.     }
  540.   }
  541.   remove_from_temp("*.*", syscfg.tempdir, 0);
  542.   remove_from_temp("*.*", syscfg.batchdir, 0);
  543.   if (numbatch && (numbatch != numbatchdl)) {
  544.     for (i=0; i<numbatch; i++) {
  545.       if (!batch[i].sending) {
  546.         didnt_upload(i);
  547.       }
  548.     }
  549.   }
  550. }
  551.