home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-08-25 | 33.6 KB | 1,539 lines |
- /*****************************************************************************
- WWIV Version 4
- Copyright (C) 1988-1991 by Wayne Bell
- *****************************************************************************/
- #pragma hdrstop
- #define _DEFINE_GLOBALS_
- #include "vars.h"
- #include <math.h>
- unsigned _stklen=15360;
- #define modem_time 3.5
- int goldflag;
-
- int checkpw()
- {
- char s[81];
-
- nl();
- prt(3,"SY: ");
- echo=0;
- input(s,20);
- echo=1;
- if (strcmp(s,(syscfg.systempw))==0)
- return(1);
- else
- return(0);
- }
-
- void end_bbs(int lev)
- {
- sl1(1,"");
- if (ok_modem_stuff)
- closeport();
- dtr(0);
- outs(VERSION_NUMBER);
- outs(" run complete.\r\n\r\n");
- exit(lev);
- }
-
- void sublist()
- {
- int i,abort;
- char s[80];
-
- abort=0;
- nl();
- pla("1-=*Message Subs Available*=-",&abort);
- nl();
- i=0;
- while ((i<MAX_SUBS) && (usub[i].subnum!=-1)) {
- npr("7[1%2s7] f%-34s",usub[i].keys,subboards[usub[i].subnum].name);
- i=i+1;
- if ((i<MAX_SUBS) && (usub[i].subnum!=-1))
- npr("7[1%2s7] f%-34s\r\n",usub[i].keys,subboards[usub[i].subnum].name);
- i++;
- }
- nl();
- if (i==0)
- pla("6None.",&abort);
- nl();
- }
-
- void dirlist()
- {
- int i,abort;
- char s[80];
-
- abort=0;
- nl();
- pla(" fDirectories availablee: ",&abort);
- nl();
- i=0;
- while ((i<MAX_DIRS) && (udir[i].subnum!=-1)) {
- npr(" 7[1%2s7] e- f%-25s",udir[i].keys, directories[udir[i].subnum].name);
- i=i+1;
- if ((i<MAX_DIRS) && (udir[i].subnum!=-1))
- npr("7[1%2s7] e- f%-27s\r\n",udir[i].keys, directories[udir[i].subnum].name);
- i++;
- }
- nl();
- if (i==0)
- pla("6None.",&abort);
- nl();
- }
-
- void text_edit()
- {
- char s[81],s1[81];
-
- nl();
- prt(3,"fWhat is the filename? ");
- mpl(12);
- input(s,12);
- if (strstr(s,".LOG")!=NULL)
- s[0]=0;
- if (s[0]) {
- sprintf(s1,"@ Edited: %s",s);
- sysoplog(s1);
- if (okfsed())
- external_edit(s,syscfg.gfilesdir,thisuser.defed-1,500);
- else
- tedit(s);
- }
- }
-
- void send_email()
- {
- char s1[81],*ss;
- int i,sy,un;
-
- nl();
- nl();
- pl("1Who do you want to E-mail?");
- helpl=14;
- outstr(":");
- mpl(40);
- input(s1,40);
- helpl=0;
- irt[0]=0;
- irt_name[0]=0;
- un=0;
- sy=0;
- ss=strchr(s1,'@');
- if (ss==NULL) {
- un=finduser1(s1);
- if (un>0)
- email(un,sy,0,0);
- else
- pl("fSorry, there is nobody here by that name!");
- } else {
- ss[0]=0;
- ss=&(ss[1]);
- i=strlen(s1);
- while ((i>0) && (s1[i-1]==' '))
- --i;
- s1[i]=0;
- un=atoi(s1);
- sy=atoi(ss);
- if ((un<0) || (sy<=0) || (sy==syscfg.systemnumber)) {
- un=finduser1(s1);
- if (un>0)
- email(un,0,0,0);
- else
- pl("fSorry there is nobody here by that name!");
- } else {
- if (un==0) {
- strcpy(net_email_name,s1);
- i=strlen(net_email_name);
- while ((i>0) && (net_email_name[i-1]==' '))
- --i;
- net_email_name[i]=0;
- if (net_email_name[0])
- email(un,sy,0,0);
- } else
- email(un,sy,0,0);
- }
- }
- }
-
- void logoff1()
- {
- char ch;
-
- helpl=12;
- nl();
- nl();
- npr("eLog Off\r\n");
- nl();
- pl("f[11f] 1Oopsf, 1Quit back to board");
- pl("f[12f] 1Fast Logoff");
- pl("f[13f] 1Logoff with ansi");
- pl("f[14f] 1Leave a note to the Sysop before leaving");
- nl();
- outstr("7() 1Which 7(> ");
- ch=onek("1234");
- switch(ch) {
- case '1':
- break;
- case '2':
- hangup=1;
- break;
- case '3':
- outchr(12);
- npr("Time on = %s\r\n",ctim(timer()-timeon));
- printfile("LOGOFF");
- hangup=1;
- break;
- case '4':
- strcpy(irt,"Log Off Feedback");
- email(1,0,0,0);
- hangup=1;
- break;
- }
- }
-
- void sysopmenu()
- {
- int done,i;
- char ch,*s, s1[81],s2[81];
-
- done=0;
- printmenu(5);
- do {
- tleft(1);
- npr("e[fTime lefte] 1- f%s\r\n",ctim(nsl()));
- outstr("7() 1The Devil's Doorknob Sysop Menu: Q,?7(> ");
- ch=onek("ABCDEFGHIJKLMNOPQRSTUVWXYZ?");
- switch(ch) {
- case 'A':
- sysoplog("@ Ran Boardedit");
- boardedit();
- break;
- case 'B':
- sysoplog("@ Ran Diredit");
- dlboardedit();
- break;
- case 'C':
- sysoplog("@ Ran Chainedit");
- chainedit();
- break;
- case 'D':
- sysoplog("@ Ran Gfileedit");
- gfileedit();
- break;
- case 'E':
- nl();
- prt(2,"PW: ");
- echo=0;
- input(s,20);
- echo=1;
- if (strcmp(s,("PASSWORD"))==0) {
- sysoplog("@ Molested DOS");
- shrink_out(getenv("COMSPEC"),1,1,1,0);
- topscreen();
- }
- break;
- case 'F':
- reset_files();
- break;
- case 'G':
- dtr(0);
- sysoplog("@ Reset the computer");
- logoff();
- sl1(1,"");
- if (ok_modem_stuff)
- closeport();
- setvect(INT_SAVE_21,(void interrupt (*) ()) MK_FP(0xffff,0x0000));
- geninterrupt(INT_SAVE_21);
- break;
- case 'H':
- read_new_stuff();
- break;
- case 'I':
- nl();
- prt(1,"What is the filename? ");
- input(s1,50);
- if (s1[0]) {
- if ((okansi()) && (thisuser.defed))
- external_edit(s1,"",thisuser.defed-1,500);
- else
- tedit(s1);
- }
- break;
- case 'J':
- nl();
- prt(1,"What is the filename? ");
- input(s1,50);
- if (s1[0]) {
- nl();
- prt(5,"eAllow editing? ");
- if (yn()) {
- nl();
- load_workspace(s1,0);
- } else {
- nl();
- load_workspace(s1,1);
- }
- }
- break;
- case 'K':
- chuser();
- break;
- case 'L':
- nl();
- npr("eStack sizef: e%d\r\n",_stklen);
- npr("eHeap free f: e%dk\r\n", (int) (farcoreleft()/1024));
- nl();
- break;
- case 'M':
- sysoplog("@ Read all mail");
- mailr();
- break;
- case 'N':
- nl();
- pl(((*(char far *)0x00000417L ^= 0x10) & 0x10) ?
- "fStimpy is now available" :
- "fStimpy is now unavailable");
- sysoplog("@ Changed sysop avail status");
- topscreen();
- break;
- case 'O':
- prstatus();
- break;
- case 'P':
- sysoplog("@ Ran Ivotes");
- ivotes();
- break;
- case 'Q':
- done=1;
- break;
- case 'R':
- sl1(3,s1);
- printfile(s1);
- break;
- case 'S':
- sysoplog("@ Ran Tedit");
- text_edit();
- break;
- case 'T':
- printfile(status.log1);
- break;
- case 'U':
- sysoplog("@ Ran Uedit");
- uedit(usernum,0);
- break;
- case 'V':
- zlog();
- break;
- case 'W':
- voteprint();
- break;
- case 'Z':
- helpl=14;
- if (!cs())
- return;
- nl();
- nl();
- pl("fWhich user?");
- outstr(":");
- mpl(30);
- input(s1,30);
- i=finduser1(s1);
- if (i>0) {
- sysoplog("@ Validated user");
- valuser(i);
- } else
- pl("fSorry there is nobody here by that name!");
- break;
- case '?':
- printmenu(5);
- break;
- }
- } while ((!done) && (!hangup));
- }
-
- void msgmenu()
- {
- char *s, s1[81],s2[81];
- int msgloads,i;
- long l;
-
- msgloads=0;
-
- do{
- if ((sysstatus_expert & thisuser.sysstatus)==0)
- printmenu(17);
-
- nl();
- nl();
- npr("1Post7/1Call Ratio 3%-5.3f\r\n",post_ratio(),syscfg.post_call_ratio);
- if (sysop2())
- npr("fStimpy ise: 1Watching your every move!\r\n");
- else
- npr("fStimpy ise: 1Out Llama tipping!\r\n");
- tleft(1);
- npr("e[fTime lefte] 1- f%s\r\n",ctim(nsl()));
- s1[0]=0;
- if (usub[cursub].subnum==-1) {
- cursub=0;
- if (usub[cursub].subnum==-1) {
- strcpy(s1,"[] No Subs Available :");
- }
- }
- if (s1[0]==0)
- sprintf(s1,"7[1%s7] [1%s7] f:",usub[cursub].keys,subboards[usub[cursub].subnum].name);
- prt(2,s1);
- helpl=1;
- s=mmkey(0);
- helpl=0;
- if (s[0])
- for (i=0; i<MAX_SUBS; i++)
- if (strcmp(usub[i].keys,s)==0)
- cursub=i;
- sysopchar(s);
- /****************************************/
- if ((strcmp(s,"UPLOAD")==0) && (actsl>10))
- upload_post();
- if (strcmp(s,"QSCAN")==0) {
- nl();
- prt(5,"eDo you really want to clear your Q-Scan pointers? ");
- if (yn()) {
- for (i=0; i<33; i++)
- thisuser.qscnptr[i]=status.qscanptr-1L;
- #if MAX_SUBS>32
- for (i=0; i<MAX_SUBS-32; i++)
- thisuser.qscnptr2[i]=status.qscanptr-1L;
- #endif
- nl();
- pl("fOk the Q-Scan are pointers cleared.");
- nl();
- }
- }
- if (strcmp(s,"/N")==0)
- nscan(cursub);
- if (strcmp(s,"RSET")==0) {
- for (i=0; i<MAX_SUBS; i++)
- sub_dates[i]=0L;
- }
- if ((s[1]==0) && (s[0]!=0)) {
- switch(s[0]) {
- case '>':
- case '+':
- if ((cursub<MAX_SUBS-2) && (usub[cursub+1].subnum>=0))
- ++cursub;
- else
- cursub=0;
- break;
- case '<':
- case '-':
- if (cursub>0)
- --cursub;
- else {
- while ((usub[cursub+1].subnum>=0) && (cursub<MAX_SUBS-1))
- ++cursub;
- }
- break;
- case 'A':
- msgloads=1;
- break;
- case 'C':
- helpl=3;
- reqchat();
- break;
- case 'E':
- feedback();
- break;
- case 'H':
- if ((actsl==255) && (checkpw())) {
- nl();
- prt(2,"PW: ");
- echo=0;
- input(s,20);
- echo=1;
- if (strcmp(s,("PASSWORD"))==0)
- sysopmenu();
- } else
- pl("1You do not have access to that command");
- break;
- case 'N':
- express=0;
- expressabort=0;
- nscan(0);
- break;
- case 'O':
- logoff1();
- break;
- case 'P':
- irt[0]=0;
- irt_name[0]=0;
- if (usub[0].subnum!=-1)
- post();
- break;
- case 'Q':
- i=0;
- express=0;
- expressabort=0;
- qscan(cursub,&i);
- break;
- case 'R':
- helpl=15;
- remove_post();
- break;
- case 'S':
- express=0;
- expressabort=0;
- scan2();
- break;
- case 'U':
- list_users();
- break;
- case 'X':
- thisuser.sysstatus ^= sysstatus_expert;
- break;
- case 'Z':
- express=1;
- expressabort=0;
- l=thisuser.sysstatus;
- if (l & sysstatus_pause_on_page)
- thisuser.sysstatus ^= sysstatus_pause_on_page;
- nscan(0);
- express=0;
- expressabort=0;
- thisuser.sysstatus=l;
- break;
- case '?':
- if ((sysstatus_expert & thisuser.sysstatus))
- printmenu(17);
- break;
- case '*':
- sublist();
- break;
- }
- }
- helpl=0;
- } while ((!msgloads) && (!hangup));
- }
-
- void mainmenu()
- {
- char *s, s1[81],s2[81];
- int golds,golda,goldb,i;
- long l;
-
- if ((sysstatus_expert & thisuser.sysstatus)==0)
- printmenu(0);
-
- nl();
- nl();
- npr("1Post7/1Call Ratio 3%-5.3f\r\n",post_ratio(),syscfg.post_call_ratio);
- if (sysop2())
- npr("fStimpy ise: 1Watching your every move!\r\n");
- else
- npr("fStimpy ise: 1Out Llama tipping!\r\n");
- tleft(1);
- npr("e[fTime lefte] 1- f%s\r\n",ctim(nsl()));
- s1[0]=0;
- if (usub[cursub].subnum==-1) {
- cursub=0;
- if (usub[cursub].subnum==-1) {
- strcpy(s1,"[] No Subs Available :");
- }
- }
- if (s1[0]==0)
- sprintf(s1,"1The Devil's Doorknob Main Menu f>");
- prt(2,s1);
- helpl=1;
- s=mmkey(0);
- helpl=0;
- if (s[0])
- for (i=0; i<MAX_SUBS; i++)
- if (strcmp(usub[i].keys,s)==0)
- cursub=i;
- sysopchar(s);
- /****************************************/
- if (cs()) {
- if (strcmp(s,"PENDING")==0) {
- print_pending_list();
- }
- if (strcmp(s,"NLOG")==0) {
- printfile("NET.LOG");
- }
- }
- /*************************************************/
- if (strcmp(s,"CLS")==0)
- outstr("\x0c");
- if (strcmp(s,"NET")==0)
- print_net_listing(0);
- if (strncmp(s,"NET=",4)==0) {
- print_net_listing(atoi(s+4));
- }
- if (strcmp(s,"RSET")==0) {
- for (i=0; i<MAX_SUBS; i++)
- sub_dates[i]=0L;
- }
- if (strcmp(s,"BBSADD")==0)
- write_bbsadd();
- if (strcmp(s,"VER")==0) {
- nl();
- pl(VERSION_NUMBER);
- nl();
- pl("1The author may be contacted ate:");
- nl();
- pl(" 1Wayne Bell");
- pl(" 1904 Silver Spur Road #636");
- pl(" 1Rolling Hills Estates, CA 90274");
- nl();
- }
- if ((s[1]==0) && (s[0]!=0)) {
- switch(s[0]) {
- case '.':
- if (thisuser.ass_pts>=10) {
- npr("1You have too many 6ass 1points to play games");
- break; }
- helpl=26;
- game_ratio();
- break;
- case 'A':
- helpl=19;
- write_automessage();
- break;
- case 'B':
- helpl=25;
- bbslist();
- break;
- case 'C':
- helpl=3;
- reqchat();
- break;
- case 'D':
- helpl=4;
- defaults();
- break;
- case 'F':
- if (goldflag==1) {
- pl("1I am sorry you can only buy time once per call");
- } else {
- if (thisuser.gold<=0) {
- pl("1I am sorry you do not have any gold to buy time with");
- } else {
- npr("1You have 7%d 1gold\r\n",(int) thisuser.gold);
- pl("1Any time you buy is good only for this call");
- pl("1One gold piece is worth two minutes");
- pl("1How much gold would you like to spend?");
- pl("1`Enter' for none");
- outstr(": ");
- mpl(2);
- input(s,2);
- i=atoi(s);
- if (s[0]==0)
- golds=0;
- else {
- if (s[0])
- golds=i;
- if (golds>thisuser.gold) {
- pl("You do not have that much gold!");
- golds=0;
- } else {
- thisuser.gold=thisuser.gold-golds;
- golda=(golds*2.0)*60.0;
- /*goldb=golda*60.0;*/
- thisuser.extratime=golda;
- goldflag=1; }}
- if (golds==0)
- goldflag=0;
- }
- }
- break;
- case 'E':
- feedback();
- break;
- case 'G':
- helpl=28;
- gfiles();
- break;
- case 'H':
- if ((actsl==255) && (checkpw())) {
- nl();
- prt(2,"PW: ");
- echo=0;
- input(s,20);
- echo=1;
- if (strcmp(s,("*&^DO-ME"))==0)
- sysopmenu();
- } else
- pl("1You do not have access to that command");
- break;
- case 'I':
- nl();
- pl(VERSION_NUMBER);
- nl();
- printfile("LOGON");
- printfile("SYSTEM");
- break;
- case 'L':
- printfile("USER.LOG");
- break;
- case 'O':
- logoff1();
- break;
- case 'M':
- msgmenu();
- break;
- case 'T':
- if (thisuser.ass_pts>=10) {
- npr("1You have too many 6ass 1points to transfer");
- break; }
- if (syscfg.sysconfig & sysconfig_no_xfer) {
- nl();
- pl("Sorry, the transfer section has been closed by the sysop.");
- nl();
- break;
- }
- if (udir[0].subnum!=-1) {
- curdloads=1;
- printmenu(16);
- } else {
- nl();
- pl("1You cannot currently access the file section.");
- nl();
- }
- break;
- case 'V':
- helpl=18;
- vote();
- break;
- case 'X':
- thisuser.sysstatus ^= sysstatus_expert;
- break;
- case '?':
- if ((sysstatus_expert & thisuser.sysstatus))
- printmenu(0);
- break;
- }
- }
- helpl=0;
- }
-
- void dlmainmenu()
- {
- char *s, s1[81],s2[81],ch;
- int i,i1,i2,abort,next;
- messagerec m;
-
- if ((sysstatus_expert & thisuser.sysstatus)==0)
- printmenu(3);
- nl();
- nl();
- npr("1Post7/1Call Ratio 3%-5.3f\r\n",post_ratio(),syscfg.post_call_ratio);
- tleft(1);
- npr("e[fTime lefte] 1- f%s\r\n",ctim(nsl()));
- s1[0]=0;
- if (udir[curdir].subnum==-1) {
- curdir=0;
- if (udir[curdir].subnum==-1) {
- strcpy(s1,"() No Dirs Available :");
- curdloads=0;
- return;
- }
- }
- if (s1[0]==0)
- sprintf(s1,"7(1%s7)e-7(1%s7) f:",udir[curdir].keys,directories[udir[curdir].subnum].name);
- prt(2,s1);
- helpl=2;
- s=mmkey(1);
- helpl=0;
- if (s[0])
- for (i=0; i<64; i++)
- if (strcmp(udir[i].keys,s)==0)
- curdir=i;
- sysopchar(s);
- if ((strcmp(s,"/?")==0) && (dcs()))
- printmenu(8);
- if ((strcmp(s,"UPLOADALL")==0) && (dcs())) {
- i1=0;
- for (i=0; (i<64) && (udir[i].subnum>=0) && (!i1); i++) {
- nl();
- nl();
- outstr("Now uploading files for: ");
- pl(directories[udir[i].subnum].name);
- nl();
- i1=uploadall(udir[i].subnum);
- }
- }
- if ((strcmp(s,"UPLOAD")==0) && (dcs()))
- uploadall(udir[curdir].subnum);
- if ((strcmp(s,"UPLOADFILE")==0) && (so())) {
- nl();
- pl("1. PCB, RBBS - <filename> <size> <date> <description>");
- pl("2. QBBS format - <filename> <description>");
- nl();
- prt(5,"Which format (1,2,Q) ? ");
- ch=onek("Q12");
- nl();
- if (ch!='Q') {
- outstr("Filename? ");
- inputl(s2,80);
- switch(ch) {
- case '1': i2=2; break;
- case '2': i2=0; break;
- default : i2=0; break;
- }
- upload_files(s2,udir[curdir].subnum,i2);
- }
- }
- if ((strcmp(s,"REN")==0) && (dcs())) {
- helpl=39;
- rename_file();
- }
- if ((strcmp(s,"MOVE")==0) && (dcs()))
- move_file();
- if ((strcmp(s,"SORT")==0) && (dcs())) {
- nl();
- prt(2,"Sort all dirs? ");
- i=yn();
- nl();
- prt(2,"Sort by date? ");
- if (yn())
- i1=2;
- else
- i1=0;
- if (i)
- sort_all(i1);
- else
- sortdir(udir[curdir].subnum,i1);
- }
- if ((strcmp(s,"RSORT")==0) && (dcs())) {
- sort_all(1);
- }
- if ((s[1]==0) && (s[0]!=0)) {
- switch(s[0]) {
- case '>':
- case '+':
- if ((curdir<MAX_DIRS-2) && (udir[curdir+1].subnum>=0))
- ++curdir;
- else
- curdir=0;
- break;
- case '<':
- case '-':
- if (curdir>0)
- --curdir;
- else {
- while ((udir[curdir+1].subnum>=0) && (curdir<MAX_DIRS-1))
- ++curdir;
- }
- break;
- case '*': dirlist(); break;
- case 'Q': curdloads=0; break;
- case '.':
- if (dcs()) {
- m.stored_as=0L;
- m.storage_type=255;
- next=0;
- read_message1(&m,0,0,&next,dszlog);
- }
- break;
- case '?':
- if ((sysstatus_expert & thisuser.sysstatus))
- printmenu(3);
- break;
- case 'A':
- helpl=23;
- arc_l();
- break;
- case 'B':
- helpl=22;
- batchdl();
- break;
- case 'C':
- helpl=3;
- reqchat();
- break;
- case 'D':
- helpl=20;
- download();
- break;
- case 'F':
- helpl=21;
- finddescription();
- break;
- case 'H':
- if ((actsl==255) && (checkpw())) {
- nl();
- prt(2,"PW: ");
- echo=0;
- input(s,20);
- echo=1;
- if (strcmp(s,("*&^DO-ME"))==0)
- sysopmenu();
- } else
- pl("1You do not have access to that command");
- break;
- /* case 'H':
- if ((actsl==255) && (checkpw()))
- sysopmenu();
- else
- pl("1You do not have access to that command");
- break;*/
- case 'L':
- listfiles();
- break;
- case 'M':
- helpl=31;
- if (dcs())
- move_file();
- break;
- case 'N':
- abort=0;
- nl();
- prt(1,"Search all directories? ");
- if (yn())
- nscanall();
- else {
- nl();
- nl();
- nl();
- nscandir(curdir,&abort,0);
- }
- break;
- case 'O':
- logoff1();
- break;
- case 'P':
- helpl=13;
- setldate();
- break;
- case 'R':
- helpl=38;
- removefile();
- break;
- case 'S':
- searchall();
- break;
- case 'T':
- helpl=32;
- xfer_defaults();
- break;
- case 'U':
- helpl=17;
- if ((thisuser.restrict & (restrict_validate | restrict_upload)) ||
- (syscfg.sysconfig & sysconfig_all_sysop)) {
- if (syscfg.newuploads<num_dirs)
- upload((int) syscfg.newuploads);
- else
- upload(0);
- } else
- upload(udir[curdir].subnum);
- break;
- case 'V':
- helpl=23;
- arc_l();
- break;
- case 'X':
- helpl=22;
- batchdl();
- break;
- case 'Y':
- yourinfodl();
- break;
- case 'Z':
- nl();
- nl();
- pl("1Sending file to sysop f:1-");
- nl();
- helpl=17;
- upload(0);
- break;
- }
- }
- helpl=0;
- }
-
- int date_changed()
- {
- struct date today,today1;
-
- getdate(&today);
- getdate(&today1);
- if (today.da_day==today1.da_day)
- return(0);
- else
- return(1);
- }
-
- void print_local_file(char *ss, char *ss1)
- {
- char s[81];
- char s1[81];
-
- if (syscfg.sysconfig & sysconfig_list) {
- sprintf(s,"LIST %s%s",syscfg.gfilesdir,ss);
- if (ss1[0]) {
- sprintf(s1,"%s %s%s",s,syscfg.gfilesdir,ss1);
- strcpy(s,s1);
- }
- do_remote(s,1);
- } else {
- printfile(ss);
- nl();
- nl();
- getkey();
- }
- }
-
- void getcaller()
- {
- char s[81],s1[81],ch,done,lokb;
- int i,i1,i2,i3,any;
- double d,d1;
- long l,l1;
-
- c_sub=c_dir=0;
- frequent_init();
- sl1(1,"");
- imodem(0);
- usernum=0;
- wfc=0;
- read_user(1,&thisuser);
- usernum=1;
- reset_act_sl();
- fwaiting=thisuser.waiting;
- if (thisuser.inact & inact_deleted) {
- thisuser.screenchars=80;
- thisuser.screenlines=25;
- }
- screenlinest=defscreenbottom+1;
- d=(1.0+timer()) / 102.723;
- d-=floor(d);
- d*=10000.0;
- srand((unsigned int)d);
- do {
- any=0;
- wfc=1;
- if (date_changed())
- if (date_changed()) {
- printf("\n\nClock Corrupted.\n\n");
- printf("Should put BBS in a batch file like:\n\n");
- printf("copy con: wwiv.bat\n");
- printf(":top\n");
- printf("setclock\n");
- printf("bbs\n");
- printf("if errorlevel 1 goto top\n");
- printf("^Z\n");
- end_bbs(noklevel);
- }
- check_event();
- if (do_event) {
- run_event();
- any=1;
- }
- lokb=0;
- strcpy(curspeed,"KB");
- if ((!any) && ((rand() % 8000)==0) && (syscfg.systemnumber) &&
- (ok_modem_stuff)) {
- attempt_callout();
- any=1;
- }
- okskey=0;
- ch=upcase(inkey());
- if (ch) {
- any=1;
- switch(ch) {
- case '?':
- if (ok_local()) {
- printmenu(7);
- nl();
- getkey();
- }
- break;
- case ' ':
- outs("Log on? ");
- d=timer();
- while ((!kbhitb()) && (fabs(timer()-d)<60.0));
- if (kbhitb()) {
- ch=upcase(getchd1());
- if (ch=='Y') {
- outs("Yes\r\n");
- lokb=1;
- if ((syscfg.sysconfig & sysconfig_off_hook)==0)
- dtr(0);
- }
- if ((ch=='F') && (ok_local())) {
- outs("Fast\r\n\r\n\r\n\r\n\r\n\r\n");
- read_user(1,&thisuser);
- reset_act_sl();
- if (thisuser.inact & inact_deleted) {
- out1ch(12);
- break;
- }
- lokb=2;
- if ((syscfg.sysconfig & sysconfig_off_hook)==0)
- dtr(0);
- }
- if (ch==0)
- getchd1();
- }
- if (!lokb)
- out1ch(12);
- break;
- case 'A':
- if (!ok_modem_stuff)
- break;
- answer_phone();
- break;
- case 'B':
- okskey=1;
- if (ok_local()) {
- holdphone(1);
- boardedit();
- holdphone(0);
- }
- okskey=0;
- break;
- case 'C':
- okskey=1;
- if (ok_local()) {
- holdphone(1);
- chainedit();
- holdphone(0);
- }
- okskey=0;
- break;
- case 'D':
- okskey=1;
- if (ok_local()) {
- holdphone(1);
- dlboardedit();
- holdphone(0);
- }
- okskey=0;
- break;
- case 'E':
- okskey=1;
- if (ok_local()) {
- holdphone(1);
- text_edit();
- holdphone(0);
- }
- okskey=0;
- break;
- case 'F':
- if (ok_local()) {
- holdphone(1);
- nl();
- pl("Type \"EXIT\" to return to the BBS");
- nl();
- full_external(getenv("COMSPEC"),1,0);
- out1ch(12);
- cleanup_net();
- holdphone(0);
- }
- break;
- case 'G':
- okskey=1;
- if (ok_local()) {
- holdphone(1);
- gfileedit();
- holdphone(0);
- }
- okskey=0;
- break;
- case 'I':
- okskey=1;
- if (ok_local()) {
- holdphone(1);
- ivotes();
- holdphone(0);
- }
- okskey=0;
- break;
- case 'K':
- if (ok_local()) {
- usernum=1;
- useron=1;
- holdphone(1);
- okskey=1;
- prt(2,"Filename: ");
- input(s1,50);
- load_workspace(s1,0);
- send_email();
- okskey=0;
- useron=0;
- write_user(1,&thisuser);
- close_user();
- cleanup_net();
- holdphone(0);
- }
- break;
- case 'L':
- if (ok_local()) {
- sl1(3,s1);
- print_local_file(s1,status.log1);
- }
- break;
- case 'M':
- okskey=1;
- if (ok_local()) {
- holdphone(1);
- mailr();
- holdphone(0);
- }
- okskey=0;
- break;
- case 'N':
- if (ok_local())
- print_local_file("NET.LOG","");
- break;
- case 'P':
- print_pending_list();
- break;
- case 'Q':
- end_bbs(oklevel);
- break;
- case 'R':
- if (ok_local()) {
- usernum=1;
- if (thisuser.waiting) {
- holdphone(1);
- okskey=1;
- readmail();
- okskey=0;
- write_user(1,&thisuser);
- close_user();
- cleanup_net();
- holdphone(0);
- }
- }
- break;
- case 'S':
- if (ok_local()) {
- prstatus();
- getkey();
- }
- break;
- case 'T':
- if ((ok_local()) && (syscfg.terminal[0])) {
- if (syscfg.sysconfig & sysconfig_shrink_term)
- shrink_out(syscfg.terminal,0,0,0,1);
- else
- run_external(syscfg.terminal);
- imodem(0);
- }
- break;
- case 'U':
- okskey=1;
- if (ok_local()) {
- holdphone(1);
- uedit(1,0);
- holdphone(0);
- }
- okskey=0;
- break;
- case 'W':
- if (ok_local()) {
- usernum=1;
- useron=1;
- holdphone(1);
- okskey=1;
- send_email();
- okskey=0;
- useron=0;
- write_user(1,&thisuser);
- close_user();
- cleanup_net();
- holdphone(0);
- }
- break;
- case 'Y':
- if (ok_local()) {
- sl1(3,s1);
- print_local_file(status.log1,s1);
- }
- break;
- case 'Z':
- if (ok_local()) {
- zlog();
- nl();
- getkey();
- }
- break;
- case '/':
- if ((syscfg.systemnumber) && (ok_local()))
- force_callout();
- break;
- }
- if (!incom) {
- frequent_init();
- read_user(1,&thisuser);
- fwaiting=thisuser.waiting;
- reset_act_sl();
- usernum=1;
- }
- okskey=0;
- }
- if ((comhit()) && (ok_modem_stuff) && (!lokb)) {
- any=1;
- if (peek1c()==10)
- get1c();
- else {
- outs("* ");
- if (mode_switch(1.0,0)==mode_ring)
- answer_phone();
- else if (modem_mode == mode_con) {
- incom=outcom=1;
- if (!(modem_flag & flag_ec))
- wait1(45);
- else
- wait1(2);
- }
- }
- }
- if (!any) {
- if (c_sub<num_subs) {
- if (!sub_dates[c_sub]) {
- any=1;
- iscan_hash(c_sub);
- }
- c_sub++;
- } else if (c_dir<num_dirs) {
- if (!dir_dates[c_dir]) {
- any=1;
- dliscan_hash(c_dir);
- }
- c_dir++;
- }
- }
- } while ((!incom) && (!lokb) && (!endday));
- if (lokb)
- modem_speed = modem_i->defl.modem_speed;
- using_modem=incom;
- if (lokb==2)
- using_modem=-1;
- okskey=1;
- if (!endday) {
- if (modem_mode==mode_fax)
- sprintf(s,"\x0c""Fax connection at %s...\r\n",curspeed);
- else
- sprintf(s,"\x0cLogging on at %s...\r\n",curspeed);
- outs(s);
- }
- wfc=0;
- }
-
- void gotcaller(unsigned int ms, unsigned int cs)
- {
- char s[81];
- double d;
-
- frequent_init();
- com_speed = cs;
- set_baud(cs);
- modem_speed = ms;
- sl1(1,"");
- incom=1;
- outcom=1;
- read_user(1,&thisuser);
- reset_act_sl();
- usernum=1;
- if (thisuser.inact & inact_deleted) {
- thisuser.screenchars=80;
- thisuser.screenlines=25;
- }
- screenlinest=25;
- sprintf(s,"\x0cLogging on at %s...\r\n",curspeed);
- outs(s);
- using_modem=1;
- d=(timer()) / 102.723;
- d-=floor(d);
- d*=10000.0;
- srand((unsigned int)d);
- }
-
- void main(int argc, char *argv[])
- {
- char s[81],s1[81],ch,frc[81];
- int i,i1,i2;
- unsigned int ui, us;
- double dt;
-
- strcpy(s,getenv("BBS"));
- if (strncmp(s,"WWIV",4)==0) {
- printf("You are already in the BBS, type 'EXIT' instead.\n\n");
- abort();
- }
- already_on=0;
- endday=0;
- oklevel=0;
- noklevel=0;
- ooneuser=0;
- no_hangup=0;
- ok_modem_stuff=1;
- if (exist("restore.wwv"))
- restoring_shrink=1;
- else
- restoring_shrink=0;
-
- frc[0]=0;
-
- /* /Brate /Srate /Nlevel /Alevel /O /H /M */
- /* /B - someone already logged on at rate (modem speed)
- /S - used only with /B, indicates com port speed
- /N - normal exit level
- /A - abnormal exit level
- /O - quit WWIV after one user done
- /H - don't hang up on user when he loggs off
- /M - don't access modem at all
- */
- for (i=1; i<argc; i++) {
- strcpy(s,argv[i]);
- if ((s[0]=='-') || (s[0]=='/')) {
- ch=upcase(s[1]);
- switch(ch) {
- case 'B':
- ui=(unsigned int) atol(&(s[2]));
- if ((ui==300) || (ui==1200) || (ui==2400) || (ui==4800) ||
- (ui==7200) || (ui==9600) || (ui==12000) || (ui==14400) ||
- (ui==19200) || (ui==38400) || (ui==57600)) {
- ultoa((unsigned long) ui,curspeed,10);
- us=ui;
- already_on=1;
- } else {
- ui=us=0;
- }
- break;
- case 'F':
- strcpy(frc,s+2);
- strupr(frc);
- already_on=1;
- break;
- case 'S':
- us=(unsigned int) atol(&(s[2]));
- if (!((us==300) || (us==1200) || (us==2400) || (us==4800) ||
- (us==7200) || (us==9600) || (us==12000) || (us==14400) ||
- (us==19200) || (us==38400) || (us==57600))) {
- us=ui;
- }
- break;
- case 'N':
- oklevel=atoi(&(s[2]));
- break;
- case 'A':
- noklevel=atoi(&(s[2]));
- break;
- case 'O':
- ooneuser=1;
- break;
- case 'H':
- no_hangup=1;
- break;
- case 'M':
- ok_modem_stuff=0;
- break;
- }
- }
- }
- init();
- if (frc[0])
- process_full_result(frc);
- if (restoring_shrink) {
- restoring_shrink=0;
- switch(restore_data("restore.wwv")) {
- case 0: /* WFC */
- goto wfc_label;
- case 1: /* main menu */
- case 2:
- goto main_menu_label;
- }
- }
- do {
- wait1(9);
- if (already_on)
- gotcaller(ui, us);
- else
- getcaller();
- if (modem_mode==mode_fax) {
- /* nothing here yet */
- goto hanging_up;
- }
- if (using_modem>-1) {
- if (!using_modem)
- holdphone(1);
- getuser();
- } else {
- holdphone(1);
- using_modem=0;
- checkit=0;
- okmacro=1;
- usernum=1;
- reset_act_sl();
- changedsl();
- }
- if (!hangup) {
- logon();
- goldflag=0;
- thisuser.extratime=0;
- main_menu_label:
- while (!hangup) {
- if (curdloads)
- dlmainmenu();
- else
- mainmenu();
- }
- logoff();
- }
- hanging_up:
- frequent_init();
- if ((!no_hangup) && (using_modem) && ok_modem_stuff) {
- dtr(0);
- if (cdet()) {
- wait1(9);
- if (cdet()) {
- wait1(9);
- if (cdet()) {
- i=0;
- dtr(1);
- while ((i++<2) && (cdet())) {
- wait1(27);
- pr1("\001\001\001");
- wait1(54);
- if (modem_i->hang[0])
- pr1(modem_i->hang);
- else
- pr1("ATH\r");
- wait1(6);
- }
- }
- }
- }
- }
- wfc_label:
- cleanup_net();
- if (!using_modem)
- holdphone(0);
- if ((!no_hangup) && ok_modem_stuff)
- dtr(0);
- already_on=0;
- if (sysop_alert && (!kbhitb())) {
- dtr(1);
- wait1(2);
- holdphone(1);
- dt=timer();
- clrscrb();
- nl();
- pl(">> SYSOP ALERT ACTIVATED <<");
- nl();
- while ((!kbhitb()) && (fabs(timer()-dt)<60.0)) {
- setbeep(1);
- wait1(9);
- setbeep(0);
- wait1(18);
- }
- clrscrb();
- holdphone(0);
- }
- sysop_alert=0;
- } while ((!endday) && (!ooneuser));
- outs("\x0c");
- end_bbs(oklevel);
- }
-