home *** CD-ROM | disk | FTP | other *** search
/ The Devil's Doorknob BBS Capture (1996-2003) / devilsdoorknobbbscapture1996-2003.iso / UTIL / WWIVE / MYWIVE.ZIP / BBS.C < prev    next >
Text File  |  1993-05-05  |  34KB  |  1,542 lines

  1. #pragma hdrstop
  2. #define _DEFINE_GLOBALS_
  3. #include "vars.h"
  4. #include <math.h>
  5. unsigned _stklen=15360;
  6. #define modem_time 3.5
  7. int goldflag;
  8.  
  9. int checkpw()
  10. {
  11.   char s[81];
  12.  
  13.   nl();
  14.   outstr("1SY 7> f");
  15.   echo=0;
  16.   input(s,20);
  17.   echo=1;
  18.   if (strcmp(s,(syscfg.systempw))==0)
  19.     return(1);
  20.   else
  21.     return(0);
  22. }
  23.  
  24. void end_bbs(int lev)
  25. {
  26.   sl1(1,"");
  27.   if (ok_modem_stuff)
  28.     closeport();
  29.   dtr(0);
  30.   outs(VERSION_NUMBER);
  31.   outs(" run complete.\r\n\r\n");
  32.   exit(lev);
  33. }
  34.  
  35. void sublist()  
  36. {               
  37.   int i,abort;
  38.   char s[80];
  39.  
  40.   abort=0;
  41.   nl();
  42.   pla("1-=*Message Subs Available*=-",&abort);
  43.   nl();
  44.   i=0;
  45.   while ((i<MAX_SUBS) && (usub[i].subnum!=-1)) {
  46.     npr("7[1%2s7] 1%-34s",usub[i].keys,subboards[usub[i].subnum].name);
  47.     i=i+1;
  48.     if ((i<MAX_SUBS) && (usub[i].subnum!=-1))
  49.       npr("7[1%2s7] 1%-34s\r\n",usub[i].keys,subboards[usub[i].subnum].name);
  50.     i++;
  51.   }
  52.   nl();
  53.   if (i==0)
  54.     pla("6None.",&abort);
  55.   nl();
  56. }
  57.  
  58. void dirlist()
  59. {
  60.   int i,abort;
  61.   char s[80];
  62.  
  63.   abort=0;
  64.   nl();
  65.   pla("                         1Directories availablee: ",&abort);
  66.   nl();
  67.   i=0;
  68.   while ((i<MAX_DIRS) && (udir[i].subnum!=-1)) {
  69.     npr("             7[1%2s7] e- 1%-25s",udir[i].keys, directories[udir[i].subnum].name);
  70.     i=i+1;
  71.     if ((i<MAX_DIRS) && (udir[i].subnum!=-1))
  72.       npr("7[1%2s7] e- 1%-27s\r\n",udir[i].keys, directories[udir[i].subnum].name);
  73.     i++;
  74.   }
  75.   nl();
  76.   if (i==0)
  77.     pla("6None.",&abort);
  78.   nl();
  79. }
  80.  
  81. void text_edit()
  82. {
  83.   char s[81],s1[81];
  84.  
  85.   nl();
  86.   prt(3,"1What is the filename? ");
  87.   mpl(12);
  88.   input(s,12);
  89.   if (strstr(s,".LOG")!=NULL)
  90.     s[0]=0;
  91.   if (s[0]) {
  92.     sprintf(s1,"@ Edited: %s",s);
  93.     sysoplog(s1);
  94.     if (okfsed())
  95.       external_edit(s,syscfg.gfilesdir,thisuser.defed-1,500);
  96.     else
  97.       tedit(s);
  98.   }
  99. }
  100.  
  101. void send_email()
  102. {
  103.   char s1[81],*ss;
  104.   int i,sy,un;
  105.  
  106.   nl();
  107.   nl();
  108.   pl("1Who do you want to E-mail? ");
  109.   helpl=14;
  110.   outstr("7> ");
  111.   mpl(40);
  112.   input(s1,40);
  113.   helpl=0;
  114.   irt[0]=0;
  115.   irt_name[0]=0;
  116.   un=0;
  117.   sy=0;
  118.   ss=strchr(s1,'@');
  119.   if (ss==NULL) {
  120.     un=finduser1(s1);
  121.     if (un>0)
  122.       email(un,sy,0,0);
  123.     else
  124.       pl("1Sorry, there is nobody here by that name!");
  125.   } else {
  126.       ss[0]=0;
  127.       ss=&(ss[1]);
  128.       i=strlen(s1);
  129.       while ((i>0) && (s1[i-1]==' '))
  130.     --i;
  131.       s1[i]=0;
  132.       un=atoi(s1);
  133.       sy=atoi(ss);
  134.       if ((un<0) || (sy<=0) || (sy==syscfg.systemnumber)) {
  135.     un=finduser1(s1);
  136.     if (un>0)
  137.       email(un,0,0,0);
  138.     else
  139.       pl("1Sorry there is nobody here by that name!");
  140.   } else {
  141.       if (un==0) {
  142.         strcpy(net_email_name,s1);
  143.         i=strlen(net_email_name);
  144.         while ((i>0) && (net_email_name[i-1]==' '))
  145.           --i;
  146.         net_email_name[i]=0;
  147.         if (net_email_name[0])
  148.           email(un,sy,0,0);
  149.       } else
  150.       email(un,sy,0,0);
  151.     }
  152.   }
  153. }
  154.  
  155. void logoff1()
  156. {
  157.   char ch;
  158.  
  159.   helpl=12;
  160.   nl();
  161.   nl();
  162.   npr("eGoodbye\r\n");
  163.   nl();
  164.   pl("7[117] 1Oops7, 1Quit back to board");
  165.   pl("7[127] 1Fast Logoff");
  166.   pl("7[137] 1Logoff with ansi");
  167.   pl("7[147] 1Leave a note to the Sysop before leaving");
  168.   if (usernum==133)
  169.     pl("7[157] 1Apply For Access To System");
  170.   nl();
  171.   outstr("7() 1Command 7(> f");
  172.   ch=onek("12345");
  173.   switch(ch) {
  174.     case '1':
  175.       break;
  176.     case '2':
  177.       hangup=1;
  178.       break;
  179.     case '3':
  180.       outchr(12);
  181.       npr("Time on   = %s\r\n",ctim(timer()-timeon));
  182.       printfile("LOGOFF");
  183.       hangup=1;
  184.       break;
  185.     case '4':
  186.       strcpy(irt,"Log Off Feedback");
  187.       email(1,0,0,0);
  188.       hangup=1;
  189.       break;
  190.     case '5':
  191.       newuser();
  192.       break;
  193.     }
  194. }
  195.  
  196. void sysopmenu()
  197. {
  198.   int done,i;
  199.   char ch,*s, s1[81],s2[81];
  200.  
  201.   done=0;
  202.   printmenu(5);
  203.   do {
  204.   tleft(1);
  205.   npr("7[1Time left7] - 1%s\r\n",ctim(nsl()));
  206.   npr("1The Devil's Doorknob Sysop Menu\r\n");
  207.   outstr("7() 1Command 7(> f");
  208.   ch=onek("ABCDEFGHIJKLMNOPQRSTUVWXYZ?");
  209.   switch(ch) {
  210.     case 'A':
  211.       sysoplog("@ Ran Boardedit");
  212.       boardedit();
  213.       break;
  214.     case 'B':
  215.       sysoplog("@ Ran Diredit");
  216.       dlboardedit();
  217.       break;
  218.     case 'C':
  219.       sysoplog("@ Ran Chainedit");
  220.       chainedit();
  221.       break;
  222.     case 'D':
  223.       sysoplog("@ Ran Gfileedit");
  224.       gfileedit();
  225.       break;
  226.     case 'E':
  227.       nl();
  228.       outstr("1PW 7> f");
  229.       echo=0;
  230.       input(s,20);
  231.       echo=1;
  232.       if (strcmp(s,("REGARD"))==0) {
  233.     sysoplog("@ Molested DOS");
  234.     shrink_out(getenv("COMSPEC"),1,1,1,0);
  235.     topscreen();
  236.       }
  237.       break;
  238.     case 'F':
  239.       reset_files();
  240.       break;
  241.     case 'G':
  242.       dtr(0);
  243.       sysoplog("@ Reset the computer");
  244.       logoff();
  245.       sl1(1,"");
  246.       if (ok_modem_stuff)
  247.         closeport();
  248.       setvect(INT_SAVE_21,(void interrupt (*) ()) MK_FP(0xffff,0x0000));
  249.       geninterrupt(INT_SAVE_21);
  250.       break;
  251.     case 'H':
  252.       read_new_stuff();
  253.       break;
  254.     case 'I':
  255.       nl();
  256.       prt(1,"What is the filename? ");
  257.       mpl(50);
  258.       input(s1,50);
  259.       if (s1[0]) {
  260.         if ((okansi()) && (thisuser.defed))
  261.           external_edit(s1,"",thisuser.defed-1,500);
  262.         else
  263.           tedit(s1);
  264.       }
  265.       break;
  266.     case 'J':
  267.       nl();
  268.       prt(1,"What is the filename? ");
  269.       mpl(50);
  270.       input(s1,50);
  271.       if (s1[0]) {
  272.         nl();
  273.     prt(5,"eAllow editing? ");
  274.     if (yn()) {
  275.       nl();
  276.       load_workspace(s1,0);
  277.     } else {
  278.       nl();
  279.       load_workspace(s1,1);
  280.     }
  281.       }
  282.       break;
  283.     case 'K':
  284.       chuser();
  285.       break;
  286.     case 'L':
  287.       nl();
  288.       npr("1Stack size7: 1%d\r\n",_stklen);
  289.       npr("1Heap free 7: 1%dk\r\n", (int) (farcoreleft()/1024));
  290.       nl();
  291.       break;
  292.     case 'M':
  293.       sysoplog("@ Read all mail");
  294.       mailr();
  295.       break;
  296.     case 'N':
  297.       nl();
  298.       pl(((*(char far *)0x00000417L ^= 0x10) & 0x10) ?
  299.                "fGilgamesh is now available" :
  300.                "fGilgamesh is now unavailable");
  301.       sysoplog("@ Changed sysop avail status");
  302.       topscreen();
  303.       break;
  304.     case 'O':
  305.       prstatus();
  306.       break;
  307.     case 'P':
  308.       sysoplog("@ Ran Ivotes");
  309.       ivotes();
  310.       break;
  311.     case 'Q':
  312.       done=1;
  313.       break;
  314.     case 'R':
  315.       sl1(3,s1);
  316.       printfile(s1);
  317.       break;
  318.     case 'S':
  319.       sysoplog("@ Ran Tedit");
  320.       text_edit();
  321.       break;
  322.     case 'T':
  323.       printfile(status.log1);
  324.       break;
  325.     case 'U':
  326.       sysoplog("@ Ran Uedit");
  327.       uedit(usernum,0);
  328.       break;
  329.     case 'V':
  330.       zlog();
  331.       break;
  332.     case 'W':
  333.       voteprint();
  334.       break;
  335.     case 'Z':
  336.       helpl=14;
  337.       if (!cs())
  338.     return;
  339.       nl();
  340.       nl();
  341.       pl("1Which user?");
  342.       outstr("7>");
  343.       mpl(30);
  344.       input(s1,30);
  345.       i=finduser1(s1);
  346.       if (i>0) {
  347.     sysoplog("@ Validated user");
  348.     valuser(i);
  349.       } else
  350.     pl("1Sorry there is nobody here by that name!");
  351.     break;
  352.     case '?':
  353.       printmenu(5);
  354.       break;
  355.     }
  356.   } while ((!done) && (!hangup));
  357. }
  358.  
  359. void msgmenu()
  360. {
  361.   char *s, s1[81],s2[81],s3[81];
  362.   int msgloads,i;
  363.   long l;
  364.   subboardrec r;           /* Added */
  365.  
  366.   msgloads=0;
  367.  
  368. do{
  369.   if ((sysstatus_expert & thisuser.sysstatus)==0)
  370.     printmenu(17);
  371.  
  372.   nl();
  373.   nl();
  374.   npr("1Post7/1Call Ratio 1%-5.3f\r\n",post_ratio(),syscfg.post_call_ratio);
  375.   tleft(1);
  376.   npr("7[1Time left7] - 1%s\r\n",ctim(nsl()));
  377.   s1[0]=0;
  378.   if (usub[cursub].subnum==-1) {
  379.     cursub=0;
  380.     if (usub[cursub].subnum==-1) {
  381.       strcpy(s1,"[] No Subs Available :");
  382.     }
  383.   }
  384.   if (s1[0]==0)
  385.     npr("1Sub 7(> [1%s7] [1%s7]\r\n",usub[cursub].keys,subboards[usub[cursub].subnum].name);
  386.   outstr("1Command 7(> f");
  387.   helpl=29;
  388.   s=mmkey(0);
  389.   helpl=0;
  390.   if (s[0])
  391.     for (i=0; i<MAX_SUBS; i++)
  392.       if (strcmp(usub[i].keys,s)==0)
  393.     cursub=i;
  394.   sysopchar(s);
  395. /****************************************/
  396.   if ((strcmp(s,"UPLOAD")==0) && (actsl>1))
  397.     upload_post();
  398.   if (strcmp(s,"QSCAN")==0) {
  399.     nl();
  400.     prt(5,"eDo you really want to clear your Q-Scan pointers? ");
  401.     if (yn()) {
  402.       for (i=0; i<33; i++)
  403.         thisuser.qscnptr[i]=status.qscanptr-1L;
  404. #if MAX_SUBS>32
  405.       for (i=0; i<MAX_SUBS-32; i++)
  406.         thisuser.qscnptr2[i]=status.qscanptr-1L;
  407. #endif
  408.       nl();
  409.       pl("fOk the Q-Scan are pointers cleared.");
  410.       nl();
  411.     }
  412.   }
  413.   if (strcmp(s,"/N")==0)
  414.     nscan(cursub);
  415.   if (strcmp(s,"RSET")==0) {
  416.     for (i=0; i<MAX_SUBS; i++)
  417.       sub_dates[i]=0L;
  418.   }
  419.   if ((s[1]==0) && (s[0]!=0)) {
  420.     switch(s[0]) {
  421.       case ']':
  422.     if ((cursub<MAX_SUBS-2) && (usub[cursub+1].subnum>=0))
  423.       ++cursub;
  424.     else
  425.       cursub=0;
  426.     break;
  427.       case '[':
  428.     if (cursub>0)
  429.       --cursub;
  430.     else {
  431.       while ((usub[cursub+1].subnum>=0) && (cursub<MAX_SUBS-1))
  432.         ++cursub;
  433.     }
  434.     break;
  435.       case 'Q':
  436.     msgloads=1;
  437.     break;
  438.       case 'A':
  439.     r=subboards[cursub];
  440.     sprintf(s3,"%s.INT", r.filename);
  441.     printfile(s3);
  442.     break;
  443.       case 'C':
  444.     reqchat();
  445.     break;
  446.       case 'E':
  447.     feedback();
  448.     break;
  449.       case 'H':
  450.     if ((actsl==255) && (checkpw())) {
  451.       nl();
  452.       outstr("1PW 7> f");
  453.       echo=0;
  454.       input(s,20);
  455.       echo=1;
  456.       if (strcmp(s,("STEEPLE"))==0)
  457.         sysopmenu();
  458.        } else
  459.       pl("1You do not have access to that command");
  460.     break;     
  461.       case 'N':
  462.         express=0;
  463.         expressabort=0;
  464.         nscan(0);
  465.         break;
  466.       case 'G':
  467.     logoff1();
  468.     break;
  469.       case 'P':
  470.         irt[0]=0;
  471.         irt_name[0]=0;
  472.         if (usub[0].subnum!=-1)
  473.           post();
  474.         break;
  475.       case 'S':
  476.     i=0;
  477.     express=0;
  478.     expressabort=0;
  479.     qscan(cursub,&i);
  480.     break;
  481.       case 'D':
  482.         helpl=15;
  483.         remove_post();
  484.         break;
  485.       case 'R':
  486.         express=0;
  487.         expressabort=0;
  488.         scan2();
  489.     break;
  490.       case 'U':
  491.         list_users();
  492.         break;
  493.       case 'X':
  494.         thisuser.sysstatus ^= sysstatus_expert;
  495.     break;
  496.       case 'Z':
  497.         express=1;
  498.         expressabort=0;
  499.         l=thisuser.sysstatus;
  500.         if (l & sysstatus_pause_on_page)
  501.           thisuser.sysstatus ^= sysstatus_pause_on_page;
  502.         nscan(0);
  503.         express=0;
  504.         expressabort=0;
  505.         thisuser.sysstatus=l;
  506.         break;
  507.       case '?':
  508.         if ((sysstatus_expert & thisuser.sysstatus))
  509.       printmenu(17);
  510.         break;
  511.       case '*':
  512.     sublist();
  513.     break;
  514.     }
  515.   }
  516.   helpl=0;
  517.   } while ((!msgloads) && (!hangup));
  518. }
  519.  
  520. void mainmenu()
  521. {
  522.   FILE *fp;
  523.  
  524.   char *s, s1[81],s2[81],ch;
  525.   int golds,golda,goldb,i;
  526.   long l;
  527.  
  528.   if ((sysstatus_expert & thisuser.sysstatus)==0)
  529.     printmenu(0);
  530.  
  531.   nl();
  532.   nl();
  533.   if (sysop2())
  534.       npr("1Gilgamesh is7: 1Watching your every move!\r\n");
  535.     else
  536.       npr("1Gilgamesh is7: 1Out Llama tipping!\r\n");
  537.   tleft(1);
  538.   npr("7[1Time left7] - 1%s\r\n",ctim(nsl()));
  539.   s1[0]=0;
  540.   if (usub[cursub].subnum==-1) {
  541.     cursub=0;
  542.     if (usub[cursub].subnum==-1) {
  543.       strcpy(s1,"[] No Subs Available :");
  544.     }
  545.   }
  546.   if (s1[0]==0)
  547.     outstr("1Main Menu Command 7(> f");
  548.   /*prt(2,s1);*/
  549.   helpl=1;
  550.   s=mmkey(0);
  551.   helpl=0;
  552. /*  if (s[0])
  553.     for (i=0; i<MAX_SUBS; i++)
  554.       if (strcmp(usub[i].keys,s)==0)
  555.     cursub=i;*/
  556.   sysopchar(s);
  557. /****************************************/
  558.   if (cs()) {
  559.     if (strcmp(s,"PENDING")==0) {
  560.       print_pending_list();
  561.     }
  562.     if (strcmp(s,"NLOG")==0) {
  563.       printfile("NET.LOG");
  564.     }
  565.   }
  566. /*************************************************/
  567.   if (strcmp(s,"CLS")==0)   
  568.     outstr("\x0c");
  569.   if (strcmp(s,"NET")==0)
  570.     print_net_listing(0);
  571.   if (strncmp(s,"NET=",4)==0) {
  572.     print_net_listing(atoi(s+4));
  573.   }
  574.   if (strcmp(s,"RSET")==0) {
  575.     for (i=0; i<MAX_SUBS; i++)
  576.       sub_dates[i]=0L;
  577.   }
  578.   if (strcmp(s,"BBSADD")==0)
  579.     write_bbsadd();
  580.   if (strcmp(s,"VER")==0) {
  581.     nl();
  582.     pl(VERSION_NUMBER);
  583.     nl();
  584.     pl("1The author may be contacted ate:");
  585.     nl();
  586.     pl("   1Wayne Bell");
  587.     pl("   1904 Silver Spur Road #636");
  588.     pl("   1Rolling Hills Estates, CA  90274");
  589.     nl();
  590.   }
  591.   if ((s[1]==0) && (s[0]!=0)) {
  592.     switch(s[0]) {
  593.       case 'O':
  594.     if (thisuser.ass_pts>=10) {
  595.     npr("1You have too many 6ass 1points to play games");
  596.     break; }
  597.     helpl=26;
  598.     game_ratio();
  599.     break;
  600.       case 'A':
  601.         helpl=19;
  602.         write_automessage();
  603.         break;
  604.       case 'B':
  605.         helpl=25;
  606.         bbslist();
  607.         break;
  608.       case 'C':
  609.     reqchat();
  610.         break;
  611.       case 'D':
  612.     helpl=4;
  613.         defaults();
  614.     break;
  615.       case '$':
  616.     donate();
  617.     break;
  618.       case 'F':
  619.     if (goldflag==1) {
  620.       pl("1I am sorry you can only buy time once per call");
  621.       }    else {
  622.       if (thisuser.gold<=0) {
  623.         pl("1I am sorry you do not have any gold to buy time with");
  624.     } else {
  625.         npr("1You have 7%d 1gold\r\n",(int) thisuser.gold);
  626.         pl("1Any time you buy is good only for this call");
  627.         pl("1One gold piece is worth two minutes");
  628.         pl("1How much gold would you like to spend?");
  629.         pl("1`Enter' for none");
  630.         outstr(": ");
  631.         mpl(2);
  632.         input(s,2);
  633.         i=atoi(s);
  634.         if (s[0]==0)
  635.           golds=0;
  636.         else {
  637.           if (s[0])
  638.         golds=i;
  639.           if (golds>thisuser.gold) {
  640.         pl("You do not have that much gold!");
  641.         golds=0;
  642.           } else {
  643.         thisuser.gold=thisuser.gold-golds;
  644.         golda=(golds*2.0)*60.0;
  645.         /*goldb=golda*60.0;*/
  646.         thisuser.extratime=golda;
  647.         goldflag=1; }}
  648.         if (golds==0)
  649.           goldflag=0;
  650.       }
  651.     }
  652.     break;
  653.       case 'E':
  654.     feedback();
  655.     break;
  656.       case '.':
  657.         helpl=28;
  658.         gfiles();
  659.     break;
  660.       case 'H':
  661.     if ((actsl==255) && (checkpw())) {
  662.       nl();
  663.       outstr("1PW 7> f");
  664.       echo=0;
  665.       input(s,20);
  666.       echo=1;
  667.       if (strcmp(s,("STEEPLE"))==0)
  668.         sysopmenu();
  669.        } else
  670.       pl("1You do not have access to that command");
  671.     break;     
  672.       case 'I':
  673.         nl();
  674.     pl(VERSION_NUMBER);
  675.     nl();
  676.     printfile("LOGON");
  677.     printfile("SYSTEM");
  678.     break;
  679.       case 'L':
  680.         printfile("USER.LOG");
  681.         break;
  682.       case 'G':
  683.     logoff1();
  684.     break;
  685.       case 'M':
  686.     msgmenu();
  687.     break;
  688.       case 'T':
  689.     if (thisuser.ass_pts>=10) {
  690.     npr("1You have too many 6ass 1points to transfer");
  691.     break; }
  692.         if (syscfg.sysconfig & sysconfig_no_xfer) {
  693.           nl();
  694.           pl("Sorry, the transfer section has been closed by the sysop.");
  695.           nl();
  696.           break;
  697.         }
  698.     if (udir[0].subnum!=-1) {
  699.       curdloads=1;
  700.       printmenu(16);
  701.       }    else {
  702.       nl();
  703.       pl("1You cannot currently access the file section.");
  704.       nl();
  705.     }
  706.     break;
  707.       case 'V':
  708.         helpl=18;
  709.         vote();
  710.         break;
  711.       case 'X':
  712.         thisuser.sysstatus ^= sysstatus_expert;
  713.     break;
  714.       case '?':
  715.         if ((sysstatus_expert & thisuser.sysstatus))
  716.           printmenu(0);
  717.         break;
  718.     }
  719.   }
  720.   helpl=0;
  721. }
  722.  
  723. void dlmainmenu()
  724. {
  725.   char *s, s1[81],s2[81],ch;
  726.   int i,i1,i2,abort,next;
  727.   messagerec m;
  728.  
  729.   if ((sysstatus_expert & thisuser.sysstatus)==0)
  730.     printmenu(3);
  731.   nl();
  732.   nl();
  733.   tleft(1);
  734.   npr("7[1Time left7] - 1%s\r\n",ctim(nsl()));
  735.   s1[0]=0;
  736.   if (udir[curdir].subnum==-1) {
  737.     curdir=0;
  738.     if (udir[curdir].subnum==-1) {
  739.       strcpy(s1,"() No Dirs Available :");
  740.       curdloads=0;
  741.       return;
  742.     }
  743.   }
  744.   if (s1[0]==0)
  745.     npr("1Dir 7(1%s7) 7(1%s7)\r\n",udir[curdir].keys,directories[udir[curdir].subnum].name);
  746.   outstr("1Command 7(> f");
  747.   helpl=2;
  748.   s=mmkey(1);
  749.   helpl=0;
  750.   if (s[0])
  751.     for (i=0; i<64; i++)
  752.       if (strcmp(udir[i].keys,s)==0)
  753.         curdir=i;
  754.   sysopchar(s);
  755.   if ((strcmp(s,"/?")==0) && (dcs()))
  756.     printmenu(8);
  757.   if ((strcmp(s,"UPLOADALL")==0) && (dcs())) {
  758.     i1=0;
  759.     for (i=0; (i<64) && (udir[i].subnum>=0) && (!i1); i++) {
  760.       nl();
  761.       nl();
  762.       outstr("Now uploading files for: ");
  763.       pl(directories[udir[i].subnum].name);
  764.       nl();
  765.       i1=uploadall(udir[i].subnum);
  766.     }
  767.   }
  768.   if ((strcmp(s,"UPLOAD")==0) && (dcs()))
  769.     uploadall(udir[curdir].subnum);
  770.   if ((strcmp(s,"UPLOADFILE")==0) && (so())) {
  771.     nl();
  772.     pl("1. PCB, RBBS   - <filename> <size> <date> <description>");
  773.     pl("2. QBBS format - <filename> <description>");
  774.     nl();
  775.     prt(5,"Which format (1,2,Q) ? ");
  776.     ch=onek("Q12");
  777.     nl();
  778.     if (ch!='Q') {
  779.       outstr("Filename? ");
  780.       mpl(60);
  781.       inputl(s2,80);
  782.       switch(ch) {
  783.         case '1': i2=2; break;
  784.         case '2': i2=0; break;
  785.         default : i2=0; break;
  786.       }
  787.       upload_files(s2,udir[curdir].subnum,i2);
  788.     }
  789.   }
  790.   if ((strcmp(s,"REN")==0) && (dcs())) {
  791.     helpl=39;
  792.     rename_file();
  793.   }
  794.   if ((strcmp(s,"MOVE")==0) && (dcs()))
  795.     move_file();
  796.   if ((strcmp(s,"SORT")==0) && (dcs())) {
  797.     nl();
  798.     prt(2,"Sort all dirs? ");
  799.     i=yn();
  800.     nl();
  801.     prt(2,"Sort by date? ");
  802.     if (yn())
  803.       i1=2;
  804.     else
  805.       i1=0;
  806.     if (i)
  807.       sort_all(i1);
  808.     else
  809.       sortdir(udir[curdir].subnum,i1);
  810.   }
  811.   if ((strcmp(s,"RSORT")==0) && (dcs())) {
  812.     sort_all(1);
  813.   }
  814.   if ((s[1]==0) && (s[0]!=0)) {
  815.     switch(s[0]) {
  816.       case '>':
  817.       case '+':
  818.         if ((curdir<MAX_DIRS-2) && (udir[curdir+1].subnum>=0))
  819.           ++curdir;
  820.         else
  821.           curdir=0;
  822.         break;
  823.       case '<':
  824.       case '-':
  825.         if (curdir>0)
  826.           --curdir;
  827.         else {
  828.           while ((udir[curdir+1].subnum>=0) && (curdir<MAX_DIRS-1))
  829.             ++curdir;
  830.         }
  831.         break;
  832.       case '*': dirlist(); break;
  833.       case 'Q': curdloads=0; break;
  834.       case '.':
  835.         if (dcs()) {
  836.           m.stored_as=0L;
  837.           m.storage_type=255;
  838.           next=0;
  839.           read_message1(&m,0,0,&next,dszlog);
  840.         }
  841.         break;
  842.       case '?':
  843.         if ((sysstatus_expert & thisuser.sysstatus))
  844.           printmenu(3);
  845.         break;
  846.       case 'A':
  847.         helpl=23;
  848.         arc_l();
  849.         break;
  850.       case 'B':
  851.         helpl=22;
  852.         batchdl();
  853.         break;
  854.       case 'C':
  855.     reqchat();
  856.         break;
  857.       case 'D':
  858.     helpl=20;
  859.     if (usernum==133)
  860.       pl("Guest accounts cannot download");
  861.     else
  862.       download();
  863.     break;
  864.       case 'F':
  865.         helpl=21;
  866.         finddescription();
  867.     break;
  868.       case 'H':
  869.     if ((actsl==255) && (checkpw())) {
  870.       nl();
  871.       outstr("1PW 7> f");
  872.       echo=0;
  873.       input(s,20);
  874.       echo=1;
  875.       if (strcmp(s,("STEEPLE"))==0)
  876.         sysopmenu();
  877.        } else
  878.       pl("1You do not have access to that command");
  879.     break;     
  880.       case 'L':
  881.         listfiles();
  882.         break;
  883.       case 'M':
  884.         helpl=31;
  885.         if (dcs())
  886.           move_file();
  887.         break;
  888.       case 'N':
  889.         abort=0;
  890.         nl();
  891.     prt(1,"Search all directories? ");
  892.     if (yn())
  893.       nscanall();
  894.     else {
  895.       nl();
  896.       nl();
  897.       nl();
  898.       nscandir(curdir,&abort,0);
  899.     }
  900.     break;
  901.       case 'G':
  902.     logoff1();
  903.     break;
  904.       case 'P':
  905.         helpl=13;
  906.         setldate();
  907.         break;
  908.       case 'R':
  909.         helpl=38;
  910.         removefile();
  911.         break;
  912.       case 'S':
  913.         searchall();
  914.         break;
  915.       case 'T':
  916.         helpl=32;
  917.         xfer_defaults();
  918.         break;
  919.       case 'U':
  920.     helpl=17;
  921.         if ((thisuser.restrict & (restrict_validate | restrict_upload)) ||
  922.             (syscfg.sysconfig & sysconfig_all_sysop)) {
  923.           if (syscfg.newuploads<num_dirs)
  924.             upload((int) syscfg.newuploads);
  925.           else
  926.             upload(0);
  927.         } else
  928.           upload(udir[curdir].subnum);
  929.         break;
  930.       case 'V':
  931.         helpl=23;
  932.         arc_l();
  933.         break;
  934.       case 'X':
  935.         helpl=22;
  936.         batchdl();
  937.         break;
  938.       case 'Y':
  939.         yourinfodl();
  940.         break;
  941.       case 'Z':
  942.         nl();
  943.         nl();
  944.     pl("1Sending file to sysop 7(> ");
  945.     nl();
  946.     helpl=17;
  947.     upload(0);
  948.     break;
  949.     }
  950.   }
  951.   helpl=0;
  952. }
  953.  
  954. int date_changed()
  955. {
  956.   struct date today,today1;
  957.  
  958.   getdate(&today);
  959.   getdate(&today1);
  960.   if (today.da_day==today1.da_day)
  961.     return(0);
  962.   else
  963.     return(1);
  964. }
  965.  
  966. void print_local_file(char *ss, char *ss1)
  967. {
  968.   char s[81];
  969.   char s1[81];
  970.  
  971.   if (syscfg.sysconfig & sysconfig_list) {
  972.     sprintf(s,"LIST %s%s",syscfg.gfilesdir,ss);
  973.     if (ss1[0]) {
  974.       sprintf(s1,"%s %s%s",s,syscfg.gfilesdir,ss1);
  975.       strcpy(s,s1);
  976.     }
  977.     do_remote(s,1);
  978.   } else {
  979.     printfile(ss);
  980.     nl();
  981.     nl();
  982.     getkey();
  983.   }
  984. }
  985.  
  986. void getcaller()
  987. {
  988.   char s[81],s1[81],ch,done,lokb;
  989.   int i,i1,i2,i3,any;
  990.   double d,d1;
  991.   long l,l1;
  992.  
  993.   c_sub=c_dir=0;
  994.   frequent_init();
  995.   sl1(1,"");
  996.   imodem(0);
  997.   usernum=0;
  998.   wfc=0;
  999.   read_user(1,&thisuser);
  1000.   usernum=1;
  1001.   reset_act_sl();
  1002.   fwaiting=thisuser.waiting;
  1003.   if (thisuser.inact & inact_deleted) {
  1004.     thisuser.screenchars=80;
  1005.     thisuser.screenlines=25;
  1006.   }
  1007.   screenlinest=defscreenbottom+1;
  1008.   d=(1.0+timer()) / 102.723;
  1009.   d-=floor(d);
  1010.   d*=10000.0;
  1011.   srand((unsigned int)d);
  1012.   do {
  1013.     any=0;
  1014.     wfc=1;
  1015.     if (date_changed())
  1016.       if (date_changed()) {
  1017.         printf("\n\nClock Corrupted.\n\n");
  1018.         printf("Should put BBS in a batch file like:\n\n");
  1019.         printf("copy con: wwiv.bat\n");
  1020.         printf(":top\n");
  1021.         printf("setclock\n");
  1022.         printf("bbs\n");
  1023.         printf("if errorlevel 1 goto top\n");
  1024.         printf("^Z\n");
  1025.         end_bbs(noklevel);
  1026.       }
  1027.     check_event();
  1028.     if (do_event) {
  1029.       run_event();
  1030.       any=1;
  1031.     }
  1032.     lokb=0;
  1033.     strcpy(curspeed,"KB");
  1034.     if ((!any) && ((rand() % 8000)==0) && (syscfg.systemnumber) &&
  1035.                    (ok_modem_stuff)) {
  1036.       attempt_callout();
  1037.       any=1;
  1038.     }
  1039.     okskey=0;
  1040.     ch=upcase(inkey());
  1041.     if (ch) {
  1042.       any=1;
  1043.       switch(ch) {
  1044.         case '?':
  1045.           if (ok_local()) {
  1046.             printmenu(7);
  1047.             nl();
  1048.             getkey();
  1049.           }
  1050.           break;
  1051.         case ' ':
  1052.           outs("Log on? ");
  1053.           d=timer();
  1054.           while ((!kbhitb()) && (fabs(timer()-d)<60.0));
  1055.           if (kbhitb()) {
  1056.             ch=upcase(getchd1());
  1057.             if (ch=='Y') {
  1058.               outs("Yes\r\n");
  1059.               lokb=1;
  1060.               if ((syscfg.sysconfig & sysconfig_off_hook)==0)
  1061.                 dtr(0);
  1062.             }
  1063.             if ((ch=='F') && (ok_local())) {
  1064.               outs("Fast\r\n\r\n\r\n\r\n\r\n\r\n");
  1065.               read_user(1,&thisuser);
  1066.               reset_act_sl();
  1067.               if (thisuser.inact & inact_deleted) {
  1068.                 out1ch(12);
  1069.                 break;
  1070.               }
  1071.               lokb=2;
  1072.               if ((syscfg.sysconfig & sysconfig_off_hook)==0)
  1073.                 dtr(0);
  1074.             }
  1075.             if (ch==0)
  1076.               getchd1();
  1077.           }
  1078.           if (!lokb)
  1079.             out1ch(12);
  1080.           break;
  1081.         case 'A':
  1082.           if (!ok_modem_stuff)
  1083.             break;
  1084.           answer_phone();
  1085.           break;
  1086.         case 'B':
  1087.           okskey=1;
  1088.           if (ok_local()) {
  1089.             holdphone(1);
  1090.             boardedit();
  1091.             holdphone(0);
  1092.           }
  1093.           okskey=0;
  1094.           break;
  1095.         case 'C':
  1096.           okskey=1;
  1097.           if (ok_local()) {
  1098.             holdphone(1);
  1099.             chainedit();
  1100.             holdphone(0);
  1101.           }
  1102.           okskey=0;
  1103.           break;
  1104.         case 'D':
  1105.           okskey=1;
  1106.           if (ok_local()) {
  1107.             holdphone(1);
  1108.             dlboardedit();
  1109.             holdphone(0);
  1110.           }
  1111.           okskey=0;
  1112.           break;
  1113.         case 'E':
  1114.           okskey=1;
  1115.           if (ok_local()) {
  1116.             holdphone(1);
  1117.             text_edit();
  1118.             holdphone(0);
  1119.           }
  1120.           okskey=0;
  1121.           break;
  1122.         case 'F':
  1123.           if (ok_local()) {
  1124.             holdphone(1);
  1125.             nl();
  1126.             pl("Type \"EXIT\" to return to the BBS");
  1127.             nl();
  1128.             full_external(getenv("COMSPEC"),1,0);
  1129.             out1ch(12);
  1130.             cleanup_net();
  1131.             holdphone(0);
  1132.           }
  1133.           break;
  1134.         case 'G':
  1135.           okskey=1;
  1136.           if (ok_local()) {
  1137.             holdphone(1);
  1138.             gfileedit();
  1139.             holdphone(0);
  1140.           }
  1141.           okskey=0;
  1142.           break;
  1143.         case 'I':
  1144.           okskey=1;
  1145.           if (ok_local()) {
  1146.             holdphone(1);
  1147.             ivotes();
  1148.             holdphone(0);
  1149.           }
  1150.           okskey=0;
  1151.           break;
  1152.         case 'K':
  1153.           if (ok_local()) {
  1154.             usernum=1;
  1155.             useron=1;
  1156.             holdphone(1);
  1157.             okskey=1;
  1158.         prt(2,"Filename: ");
  1159.         mpl(50);
  1160.         input(s1,50);
  1161.             load_workspace(s1,0);
  1162.             send_email();
  1163.             okskey=0;
  1164.             useron=0;
  1165.             write_user(1,&thisuser);
  1166.             close_user();
  1167.             cleanup_net();
  1168.             holdphone(0);
  1169.           }
  1170.           break;
  1171.         case 'L':
  1172.           if (ok_local()) {
  1173.             sl1(3,s1);
  1174.             print_local_file(s1,status.log1);
  1175.           }
  1176.           break;
  1177.         case 'M':
  1178.           okskey=1;
  1179.           if (ok_local()) {
  1180.             holdphone(1);
  1181.             mailr();
  1182.             holdphone(0);
  1183.           }
  1184.           okskey=0;
  1185.           break;
  1186.         case 'N':
  1187.           if (ok_local())
  1188.             print_local_file("NET.LOG","");
  1189.           break;
  1190.         case 'P':
  1191.           print_pending_list();
  1192.           break;
  1193.         case 'Q':
  1194.           end_bbs(oklevel);
  1195.           break;
  1196.         case 'R':
  1197.           if (ok_local()) {
  1198.             usernum=1;
  1199.             if (thisuser.waiting) {
  1200.               holdphone(1);
  1201.               okskey=1;
  1202.               readmail();
  1203.               okskey=0;
  1204.               write_user(1,&thisuser);
  1205.               close_user();
  1206.               cleanup_net();
  1207.               holdphone(0);
  1208.             }
  1209.           }
  1210.           break;
  1211.         case 'S':
  1212.           if (ok_local()) {
  1213.             prstatus();
  1214.             getkey();
  1215.           }
  1216.           break;
  1217.         case 'T':
  1218.           if ((ok_local()) && (syscfg.terminal[0])) {
  1219.             if (syscfg.sysconfig & sysconfig_shrink_term)
  1220.               shrink_out(syscfg.terminal,0,0,0,1);
  1221.             else
  1222.               run_external(syscfg.terminal);
  1223.             imodem(0);
  1224.           }
  1225.           break;
  1226.         case 'U':
  1227.           okskey=1;
  1228.           if (ok_local()) {
  1229.             holdphone(1);
  1230.             uedit(1,0);
  1231.             holdphone(0);
  1232.           }
  1233.           okskey=0;
  1234.           break;
  1235.         case 'W':
  1236.           if (ok_local()) {
  1237.             usernum=1;
  1238.             useron=1;
  1239.             holdphone(1);
  1240.             okskey=1;
  1241.             send_email();
  1242.             okskey=0;
  1243.             useron=0;
  1244.             write_user(1,&thisuser);
  1245.             close_user();
  1246.             cleanup_net();
  1247.             holdphone(0);
  1248.           }
  1249.           break;
  1250.         case 'Y':
  1251.           if (ok_local()) {
  1252.             sl1(3,s1);
  1253.             print_local_file(status.log1,s1);
  1254.           }
  1255.           break;
  1256.         case 'Z':
  1257.           if (ok_local()) {
  1258.             zlog();
  1259.             nl();
  1260.             getkey();
  1261.           }
  1262.           break;
  1263.         case '/':
  1264.           if ((syscfg.systemnumber) && (ok_local()))
  1265.             force_callout();
  1266.           break;
  1267.       }
  1268.       if (!incom) {
  1269.         frequent_init();
  1270.         read_user(1,&thisuser);
  1271.         fwaiting=thisuser.waiting;
  1272.         reset_act_sl();
  1273.         usernum=1;
  1274.       }
  1275.       okskey=0;
  1276.     }
  1277.     if ((comhit()) && (ok_modem_stuff) && (!lokb)) {
  1278.       any=1;
  1279.       if (peek1c()==10)
  1280.         get1c();
  1281.       else {
  1282.         outs("* ");
  1283.         if (mode_switch(1.0,0)==mode_ring)
  1284.           answer_phone();
  1285.         else if (modem_mode == mode_con) {
  1286.           incom=outcom=1;
  1287.           if (!(modem_flag & flag_ec))
  1288.             wait1(45);
  1289.           else
  1290.             wait1(2);
  1291.         }
  1292.       }
  1293.     }
  1294.     if (!any) {
  1295.       if (c_sub<num_subs) {
  1296.         if (!sub_dates[c_sub]) {
  1297.           any=1;
  1298.           iscan_hash(c_sub);
  1299.         }
  1300.         c_sub++;
  1301.       } else if (c_dir<num_dirs) {
  1302.         if (!dir_dates[c_dir]) {
  1303.           any=1;
  1304.           dliscan_hash(c_dir);
  1305.         }
  1306.         c_dir++;
  1307.       }
  1308.     }
  1309.   } while ((!incom) && (!lokb) && (!endday));
  1310.   if (lokb)
  1311.     modem_speed = modem_i->defl.modem_speed;
  1312.   using_modem=incom;
  1313.   if (lokb==2)
  1314.     using_modem=-1;
  1315.   okskey=1;
  1316.   if (!endday) {
  1317.     if (modem_mode==mode_fax)
  1318.       sprintf(s,"\x0c""Fax connection at %s...\r\n",curspeed);
  1319.     else
  1320.       sprintf(s,"\x0cLogging on at %s...\r\n",curspeed);
  1321.     outs(s);
  1322.   }
  1323.   wfc=0;
  1324. }
  1325.  
  1326. void gotcaller(unsigned int ms, unsigned int cs)
  1327. {
  1328.   char s[81];
  1329.   double d;
  1330.  
  1331.   frequent_init();
  1332.   com_speed = cs;
  1333.   set_baud(cs);
  1334.   modem_speed = ms;
  1335.   sl1(1,"");
  1336.   incom=1;
  1337.   outcom=1;
  1338.   read_user(1,&thisuser);
  1339.   reset_act_sl();
  1340.   usernum=1;
  1341.   if (thisuser.inact & inact_deleted) {
  1342.     thisuser.screenchars=80;
  1343.     thisuser.screenlines=25;
  1344.   }
  1345.   screenlinest=25;
  1346.   sprintf(s,"\x0cLogging on at %s...\r\n",curspeed);
  1347.   outs(s);
  1348.   using_modem=1;
  1349.   d=(timer()) / 102.723;
  1350.   d-=floor(d);
  1351.   d*=10000.0;
  1352.   srand((unsigned int)d);
  1353. }
  1354.  
  1355. void main(int argc, char *argv[])
  1356. {
  1357.   char s[81],s1[81],ch,frc[81];
  1358.   int i,i1,i2;
  1359.   unsigned int ui, us;
  1360.   double dt;
  1361.  
  1362.   strcpy(s,getenv("BBS"));
  1363.   if (strncmp(s,"WWIV",4)==0) {
  1364.     printf("You are already in the BBS, type 'EXIT' instead.\n\n");
  1365.     abort();
  1366.   }
  1367.   already_on=0;
  1368.   endday=0;
  1369.   oklevel=0;
  1370.   noklevel=0;
  1371.   ooneuser=0;
  1372.   no_hangup=0;
  1373.   ok_modem_stuff=1;
  1374.   if (exist("restore.wwv"))
  1375.     restoring_shrink=1;
  1376.   else
  1377.     restoring_shrink=0;
  1378.  
  1379.   frc[0]=0;
  1380.  
  1381.   /* /Brate /Srate /Nlevel /Alevel /O /H /M */
  1382.   /* /B - someone already logged on at rate (modem speed)
  1383.      /S - used only with /B, indicates com port speed
  1384.      /N - normal exit level
  1385.      /A - abnormal exit level
  1386.      /O - quit WWIV after one user done
  1387.      /H - don't hang up on user when he loggs off
  1388.      /M - don't access modem at all
  1389.    */
  1390.   for (i=1; i<argc; i++) {
  1391.     strcpy(s,argv[i]);
  1392.     if ((s[0]=='-') || (s[0]=='/')) {
  1393.       ch=upcase(s[1]);
  1394.       switch(ch) {
  1395.         case 'B':
  1396.           ui=(unsigned int) atol(&(s[2]));
  1397.           if ((ui==300)   || (ui==1200) ||  (ui==2400)  || (ui==4800)  ||
  1398.               (ui==7200)  || (ui==9600) ||  (ui==12000) || (ui==14400) ||
  1399.               (ui==19200) || (ui==38400) || (ui==57600)) {
  1400.             ultoa((unsigned long) ui,curspeed,10);
  1401.             us=ui;
  1402.             already_on=1;
  1403.           } else {
  1404.             ui=us=0;
  1405.           }
  1406.           break;
  1407.         case 'F':
  1408.           strcpy(frc,s+2);
  1409.           strupr(frc);
  1410.           already_on=1;
  1411.           break;
  1412.         case 'S':
  1413.           us=(unsigned int) atol(&(s[2]));
  1414.           if (!((us==300)   || (us==1200)  || (us==2400)  || (us==4800)  ||
  1415.                 (us==7200)  || (us==9600)  || (us==12000) || (us==14400) ||
  1416.                 (us==19200) || (us==38400) || (us==57600))) {
  1417.             us=ui;
  1418.           }
  1419.           break;
  1420.         case 'N':
  1421.           oklevel=atoi(&(s[2]));
  1422.           break;
  1423.         case 'A':
  1424.           noklevel=atoi(&(s[2]));
  1425.           break;
  1426.         case 'O':
  1427.           ooneuser=1;
  1428.           break;
  1429.         case 'H':
  1430.           no_hangup=1;
  1431.           break;
  1432.         case 'M':
  1433.           ok_modem_stuff=0;
  1434.           break;
  1435.       }
  1436.     }
  1437.   }
  1438.   init();
  1439.   if (frc[0])
  1440.     process_full_result(frc);
  1441.   if (restoring_shrink) {
  1442.     restoring_shrink=0;
  1443.     switch(restore_data("restore.wwv")) {
  1444.       case 0: /* WFC */
  1445.         goto wfc_label;
  1446.       case 1: /* main menu */
  1447.       case 2:
  1448.         goto main_menu_label;
  1449.     }
  1450.   }
  1451.   do {
  1452.     wait1(9);
  1453.     if (already_on)
  1454.       gotcaller(ui, us);
  1455.     else
  1456.       getcaller();
  1457.     if (modem_mode==mode_fax) {
  1458.       /* nothing here yet */
  1459.       goto hanging_up;
  1460.     }
  1461.     if (using_modem>-1) {
  1462.       if (!using_modem)
  1463.         holdphone(1);
  1464.       getuser();
  1465.     } else {
  1466.       holdphone(1);
  1467.       using_modem=0;
  1468.       checkit=0;
  1469.       okmacro=1;
  1470.       usernum=1;
  1471.       reset_act_sl();
  1472.       changedsl();
  1473.     }
  1474.     if (!hangup) {
  1475.       logon();
  1476.       goldflag=0;
  1477.       thisuser.extratime=0;
  1478. main_menu_label:
  1479.       while (!hangup) {
  1480.         if (curdloads)
  1481.           dlmainmenu();
  1482.         else
  1483.           mainmenu();
  1484.       }
  1485.       logoff();
  1486.     }
  1487. hanging_up:
  1488.     frequent_init();
  1489.     if ((!no_hangup) && (using_modem) && ok_modem_stuff) {
  1490.       dtr(0);
  1491.       if (cdet()) {
  1492.         wait1(9);
  1493.         if (cdet()) {
  1494.           wait1(9);
  1495.           if (cdet()) {
  1496.             i=0;
  1497.             dtr(1);
  1498.             while ((i++<2) && (cdet())) {
  1499.               wait1(27);
  1500.               pr1("\001\001\001");
  1501.               wait1(54);
  1502.               if (modem_i->hang[0])
  1503.                 pr1(modem_i->hang);
  1504.               else
  1505.                 pr1("ATH\r");
  1506.               wait1(6);
  1507.             }
  1508.           }
  1509.         }
  1510.       }
  1511.     }
  1512. wfc_label:
  1513.     cleanup_net();
  1514.     if (!using_modem)
  1515.       holdphone(0);
  1516.     if ((!no_hangup) && ok_modem_stuff)
  1517.       dtr(0);
  1518.     already_on=0;
  1519.     if (sysop_alert && (!kbhitb())) {
  1520.       dtr(1);
  1521.       wait1(2);
  1522.       holdphone(1);
  1523.       dt=timer();
  1524.       clrscrb();
  1525.       nl();
  1526.       pl(">> SYSOP ALERT ACTIVATED <<");
  1527.       nl();
  1528.       while ((!kbhitb()) && (fabs(timer()-dt)<60.0)) {
  1529.         setbeep(1);
  1530.         wait1(9);
  1531.         setbeep(0);
  1532.         wait1(18);
  1533.       }
  1534.       clrscrb();
  1535.       holdphone(0);
  1536.     }
  1537.     sysop_alert=0;
  1538.   } while ((!endday) && (!ooneuser));
  1539.   outs("\x0c");
  1540.   end_bbs(oklevel);
  1541. }
  1542.