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

  1. #include "vars.h"
  2. #pragma hdrstop
  3.  
  4. void read_automessage()
  5. {
  6.   int i,i1,i2,i3,f,len,ptrbeg[10],ptrend[10];
  7.   char s[81],l[10][81],anon,buf[512];
  8.   slrec ss;
  9.  
  10.   sprintf(s,"%sAUTO.MSG",syscfg.gfilesdir);
  11.   f=open(s,O_RDWR | O_BINARY);
  12.   nl();
  13.   anon=status.amsganon;
  14.   if (f<1) {
  15.     pl("1No Auto-Post! Write One!");
  16.   } else {
  17.     len=read(f,(void *)buf,512);
  18.     close(f);
  19.     for (i=0; i<10; i++) {
  20.       ptrbeg[i]=0;
  21.       ptrend[i]=0;
  22.     }
  23.     i=0;
  24.     i1=0;
  25.     i2=0;
  26.     for(i=0; i<len; i++) {
  27.       if (i1) {
  28.         if (buf[i]==10) {
  29.           ptrbeg[i2]=i+1;
  30.           i1=0;
  31.         }
  32.       } else {
  33.         if (buf[i]==13) {
  34.           ptrend[i2]=i-1;
  35.       if (i2<10) {
  36.         for (i3=ptrbeg[i2]; i3<=ptrend[i2]; i3++)
  37.           l[i2][i3-ptrbeg[i2]]=buf[i3];
  38.           l[i2][ptrend[i2]-ptrbeg[i2]+1]=0;
  39.       }
  40.       ++i2;
  41.       i1=1;
  42.     }
  43.       }
  44.     }
  45.     ss=syscfg.sl[actsl];
  46.     if (anon)
  47.       if (ss.ability & ability_read_post_anony) {
  48.         sprintf(s,"%s",&(l[0][0]));
  49.       } else
  50.         strcpy(s,"NoBoDy #xxx");
  51.     else
  52.       strcpy(s,&(l[0][0]));
  53.     nl();
  54.     npr("7[3══── 1Auto Post Entered By5:1 %s 3──══7]\r\n",s);
  55.     nl();
  56.     i=1;
  57.     while ((ptrend[i]) && (i<10)) {
  58.       pl(&(l[i][0]));
  59.       ++i;
  60.     }
  61.   }
  62.   nl();
  63. }
  64.  
  65. void write_automessage1()
  66. {
  67.   int i,i1,f;
  68.   char s[81],l[10][81];
  69.   slrec ss;
  70.  
  71.   nl();
  72.   pl("fWrite Auto-Poste! f9 Linese: 3Ctrl-P Colors Work Heree!");
  73.   s[0]=0;
  74.   nl();
  75.   for (i=0; i<9; i++) {
  76.     outchr(i+'1');
  77.     outchr('>');
  78.     inli(&(l[i][0]),s,77,1);
  79.     strcat(&(l[i][0]),"\r\n");
  80.   }
  81.   nl();
  82.   ss=syscfg.sl[actsl];
  83.   if (ss.ability & ability_post_anony) {
  84.     prt(5,"eAnonymous!? [Y/N]: ");
  85.     if (yn())
  86.       i1=anony_sender;
  87.     else
  88.       i1=0;
  89.   } else
  90.     i1=0;
  91.   prt(5,"eIs This Ok? [Y/N]: ");
  92.   if (yn()) {
  93.     status.amsganon=i1;
  94.     status.amsguser=usernum;
  95.     save_status();
  96.     sprintf(s,"%sAUTO.MSG",syscfg.gfilesdir);
  97.     f=open(s,O_RDWR | O_BINARY | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE);
  98.     strcpy(s,nam(&thisuser,usernum));
  99.     strcat(s,"\r\n");
  100.     write(f,(void *)s,strlen(s));
  101.     for (i=0; i<10; i++)
  102.       write(f,(void *)&(l[i][0]),strlen(&(l[i][0])));
  103.     sysoplog("-+*+- Changed Auto-Post!");
  104.     for (i=0; i<10; i++) {
  105.       strcpy(s,"   ");
  106.       l[i][strlen(&(l[i][0]))-2]=0;
  107.       strcat(s,&(l[i][0]));
  108.       sysoplog(s);
  109.     }
  110.     nl();
  111.     pl("eAuto-Post Saved!");
  112.     nl();
  113.     close(f);
  114.   }
  115. }
  116.  
  117. void write_automessage()
  118. {
  119.   char ch;
  120.   int done,okwrite;
  121.   slrec ss;
  122.  
  123.   ss=syscfg.sl[actsl];
  124.   if (ss.posts)
  125.     okwrite=1;
  126.   else
  127.     okwrite=0;
  128.   if (thisuser.restrict & restrict_automessage)
  129.     okwrite=0;
  130.   done=0;
  131.   do {
  132.     nl();
  133.     if (okwrite) {
  134.       prt(3,"fAuto-Post7! e[fReade/fWritee/fEmaile/fQuite]7: ");
  135.       ch=onek("QRWE");
  136.     } else {
  137.       prt(2,"Auto-Post! [Read/Email/Quit]: ");
  138.       ch=onek("QRE");
  139.     }
  140.     switch(ch) {
  141.       case 'Q':
  142.         done=1;
  143.         break;
  144.       case 'R':
  145.         read_automessage();
  146.         break;
  147.       case 'W':
  148.         write_automessage1();
  149.         break;
  150.       case 'E':
  151.         if (status.amsguser)
  152.           email(status.amsguser,0,0,status.amsganon);
  153.         break;
  154.     }
  155.   } while ((!done) && (!hangup));
  156. }
  157.  
  158. void bbslist()
  159. {
  160.   int i,i1,i2,f,done,ok;
  161.   char s[150],s1[150],s2[150],ch,ch1,*ss;
  162.   char phone[13], name[51], speed[5], type[5];
  163.   long l,l1;
  164.  
  165.   done=0;
  166.   do {
  167.     nl();
  168.     prt(2,"7[1BBS list7]f: 1R7:1ead7, 1A7:1dd7, 1N7:1et7, 1Q7:1uit  7: ");
  169.     ch=onek("QRNA");
  170.     switch(ch) {
  171.       case 'Q':
  172.         done=1;
  173.         break;
  174.       case 'R':
  175.     pl("7╔════════════════════════════════════════════════════════════════════════════╗");
  176.     pl("7║3   Number                    2BBS Name                           7Baud   1Type7 ║");
  177.     pl("7╚════════════════════════════════════════════════════════════════════════════╝");
  178.     printfile("BBSLIST.MSG");
  179.     break;
  180.       case 'N':
  181.         print_net_listing(0);
  182.     break;
  183.       case 'A':
  184.     if ((actsl<=1)) {
  185.           nl();
  186.           nl();
  187.       pl("7You must be a validated user to add to the BBS list.");
  188.       nl();
  189.       break;
  190.     }
  191.     if (thisuser.restrict & restrict_automessage) {
  192.           nl();
  193.           nl();
  194.       pl("fYou can not add to the BBS list.");
  195.       nl();
  196.       break;
  197.     }
  198.         nl();
  199.     pl("1Please enter phone number:");
  200.     pl(" 7■■■-■■■-■■■■");
  201.     outstr(":");
  202.     mpl(12);
  203.     input(phone,12);
  204.     if ((phone[3]!='-') || (phone[7]!='-'))
  205.       phone[0]=0;
  206.     if (strlen(phone)==12) {
  207.       ok=1;
  208.       sprintf(s1,"%sBBSLIST.MSG",syscfg.gfilesdir);
  209.       f=open(s1,O_RDWR | O_CREAT | O_BINARY, S_IREAD | S_IWRITE);
  210.       if (f>0) {
  211.         lseek(f,0L,SEEK_SET);
  212.         l=filelength(f);
  213.         if ((ss=malloca(l+500L))==NULL) {
  214.           close(f);
  215.           return;
  216.         }
  217.         read(f,ss,(int)l);
  218.         l1=0L;
  219.         while ((l1<l) && (ok)) {
  220.           i=0;
  221.           do {
  222.         ch=ss[l1++];
  223.         s1[i]=ch;
  224.         if (ch==13)
  225.           s1[i]=0;
  226.         ++i;
  227.           } while ((ch!=10) && (i<120) && (l1<l));
  228.           if (strstr(s1,phone)!=NULL)
  229.         ok=0;
  230.           if (strncmp(s1,phone,12)==0)
  231.         ok=0;
  232.             }
  233.             farfree(ss);
  234.             close(f);
  235.           }
  236.           if (ok) {
  237.         pl("1Number not yet in BBS list.");
  238.         nl();
  239.         nl();
  240.         pl("fEnter BBS name and comments (incl. V.32/HST) :");
  241.         outstr(":");
  242.         mpl(47);
  243.         inputl(name,47);
  244.         nl();
  245.         pl("eEnter maximum speed of the BBS:");
  246.         pl("eie, 300,1200,2400,9600,14.4,19.2");
  247.         outstr(":");
  248.         mpl(4);
  249.         input(speed,4);
  250.         nl();
  251.         pl("1Enter BBS type (ie, WWIV):");
  252.         outstr(":");
  253.             mpl(4);
  254.         input(type,4);
  255.         sprintf(s,"1*f%12s  2%-47s  7[1%4s7] (1%4s7)1*\r\n",
  256.           phone, name, speed, type);
  257.         nl();
  258.         nl();
  259.         pl(s);
  260.         nl();
  261.         prt(5,"eIs this correct? ");
  262.         if (yn()) {
  263.           sprintf(s1,"%sBBSLIST.MSG",syscfg.gfilesdir);
  264.           f=open(s1,O_RDWR | O_CREAT | O_BINARY, S_IREAD | S_IWRITE);
  265.           if (filelength(f)) {
  266.                 lseek(f,-1L,SEEK_END);
  267.                 read(f,((void *)&ch1),1);
  268.                 if (ch1==26)
  269.                   lseek(f,-1L,SEEK_END);
  270.           }
  271.               write(f,(void *)s,strlen(s));
  272.               close(f);
  273.               nl();
  274.           pl("fAdded to BBS list.");
  275.         }
  276.       } else {
  277.         pl("6It's already in the BBS list.");
  278.         nl();
  279.         nl();
  280.       }
  281.     } else {
  282.       nl();
  283.       pl("6Please enter number in correct format.");
  284.       nl();
  285.     }
  286.         break;
  287.     }
  288.   } while ((!done) && (!hangup));
  289. }
  290.  
  291. void donate()
  292. {
  293.   int i,i1,i2,f,done,ok;
  294.   char s[150],s1[150],s2[150],ch,ch1,*ss;
  295.   char amount[5];
  296.   long l,l1;
  297.  
  298.   done=0;
  299.   printfile("DONATE.MSG");
  300.   do {
  301.     nl();
  302.     prt(2,"Donations [I]:nfo, [L]:ist, [D]:onate, [Q]:uit > ");
  303.     ch=onek("QILD");
  304.     switch(ch) {
  305.       case 'Q':
  306.         done=1;
  307.     break;
  308.       case 'I':
  309.     printfile("DINFO.MSG");
  310.     break;
  311.       case 'L':
  312.     pl("╔══════════════════════════════════════════╗");
  313.     pl("║   Name                            Amount ║");
  314.     pl("╚══════════════════════════════════════════╝");
  315.     printfile("DONATES.MSG");
  316.     break;
  317.       case 'D':
  318.     if ((actsl<=1)) {
  319.           nl();
  320.           nl();
  321.       pl("You must be a validated user to add to the Donations list.");
  322.       nl();
  323.       break;
  324.     }
  325.     nl();
  326.     npr("Hello %s ",thisuser.name);
  327.     nl();
  328.     pl("Enter the amount you wish to donate");
  329.     pl("In the form ##.##");
  330.     outstr(":");
  331.     mpl(5);
  332.     input(amount,5);
  333.     sprintf(s,"%-34s  $%5s\r\n",thisuser.name, amount);
  334.     nl();
  335.     nl();
  336.     pl(s);
  337.     nl();
  338.     prt(5,"Is this correct? ");
  339.     if (yn()) {
  340.       sprintf(s1,"%sDONATES.MSG",syscfg.gfilesdir);
  341.       f=open(s1,O_RDWR | O_CREAT | O_BINARY, S_IREAD | S_IWRITE);
  342.       if (filelength(f)) {
  343.         lseek(f,-1L,SEEK_END);
  344.         read(f,((void *)&ch1),1);
  345.         if (ch1==26)
  346.         lseek(f,-1L,SEEK_END);
  347.       }
  348.       write(f,(void *)s,strlen(s));
  349.       close(f);
  350.       nl();
  351.       pl("Added to Donations list.");
  352.     }
  353.       break;
  354.     }
  355.   } while ((!done) && (!hangup));
  356. }
  357.  
  358. void kill_old_email()
  359. {
  360.   int cur,max,i,i1,f,done,done1,forward;
  361.   char s[81],s1[81],ch;
  362.   long l;
  363.   mailrec m;
  364.   userrec u;
  365.   slrec ss;
  366.  
  367.   prt(5,"eList mail starting at most recent? ");
  368.   forward=(yn());
  369.   ss=syscfg.sl[actsl];
  370.   sprintf(s,"%sEMAIL.DAT",syscfg.datadir);
  371.   f=open(s,O_RDWR | O_BINARY);
  372.   if (f==-1) {
  373.     nl();
  374.     pl("6No mail.");
  375.     return;
  376.   }
  377.   max=(int) (filelength(f) / sizeof(mailrec));
  378.   if (forward)
  379.     cur=max-1;
  380.   else
  381.     cur=0;
  382.   done=0;
  383.   do {
  384.     lseek(f,((long) cur) * sizeof(mailrec), SEEK_SET);
  385.     read(f,(void *)&m,sizeof(mailrec));
  386.     while (((m.fromsys!=0) || (m.fromuser!=usernum) || (m.touser==0)) && (cur<max) && (cur>=0)) {
  387.       if (forward)
  388.         --cur;
  389.       else
  390.         ++cur;
  391.       if ((cur<max) && (cur>=0)) {
  392.         lseek(f,((long) cur) * sizeof(mailrec), SEEK_SET);
  393.         read(f,(void *)&m,sizeof(mailrec));
  394.       }
  395.     }
  396.     if ((m.fromsys!=0) || (m.fromuser!=usernum) || (m.touser==0) || (cur>=max) || (cur<0))
  397.       done=1;
  398.     else {
  399.       do {
  400.         done1=0;
  401.         nl();
  402.         if (m.tosys==0) {
  403.           read_user(m.touser,&u);
  404.           strcpy(s1,nam(&u,m.touser));
  405.           if ((m.anony & (anony_receiver | anony_receiver_pp | anony_receiver_da))
  406.               && ((ss.ability & ability_read_email_anony)==0))
  407.         strcpy(s1,"7>1UNKNOWN7<");
  408.       npr("1To   7: 1%s\r\n",s1);
  409.     } else {
  410.       npr("1To   7: 1User %d, system %d\r\n", m.touser, m.tosys);
  411.     }
  412.     npr("1Title7: 1%s\r\n",m.title);
  413.     time(&l);
  414.     i=(int) ((l-m.daten)/24.0/3600.0);
  415.     npr("1Sent 7: 1%d days ago\r\n",i);
  416.     nl();
  417.     prt(2,"fRe:feade, fDe:feletee, fNe:fexte, fQe:fuit e: ");
  418.     ch=onek("QRDN");
  419.     switch(ch) {
  420.       case 'Q':
  421.             done1=1;
  422.             done=1;
  423.             break;
  424.           case 'N':
  425.             done1=1;
  426.             if (forward)
  427.               --cur;
  428.             else
  429.               ++cur;
  430.             if ((cur>=max) || (cur<0))
  431.               done=1;
  432.             break;
  433.           case 'D':
  434.             done1=1;
  435.             delmail(f,cur);
  436.             nl();
  437.         pl("6Mail deleted.");
  438.         nl();
  439.         sysoplog("Deleted mail.");
  440.         break;
  441.       case 'R':
  442.         nl();
  443.         nl();
  444.         npr("1Title7: 1%s\r\n",m.title);
  445.         setorigin(0,0);
  446.         read_message1(&m.msg,(m.anony & 0x0f), 0, &i1,"EMAIL");
  447.         break;
  448.     }
  449.       } while ((!hangup) && (!done1));
  450.     }
  451.   } while ((!done) && (!hangup));
  452.   close(f);
  453. }
  454.  
  455. void list_users()
  456. {
  457.   subboardrec s;
  458.   userrec u;
  459.   int i,nu,abort,ok,num;
  460.   char st[81];
  461.  
  462.   if (usub[cursub].subnum==-1) {
  463.     nl();
  464.     pl("No sub!");
  465.     nl();
  466.     return;
  467.   }
  468.   s=subboards[usub[cursub].subnum];
  469.   nl();
  470.   pl("1Users with access to current subf:");
  471.   nl();
  472.   abort=0;
  473.   num=0;
  474.   for (i=0; (i<status.users) && (!abort) && (!hangup); i++) {
  475.     read_user(smallist[i].number,&u);
  476.     ok=1;
  477.     if (u.sl<s.readsl)
  478.       ok=0;
  479.     if (u.age<s.age)
  480.       ok=0;
  481.     if ((s.ar!=0) && ((u.ar & s.ar)==0))
  482.       ok=0;
  483.     if (ok) {
  484.       pla(nam(&u,smallist[i].number),&abort);
  485.       ++num;
  486.     }
  487.   }
  488.   if (!abort) {
  489.     nl();
  490.     npr("f%d 7users.\r\n",num);
  491.     nl();
  492.   }
  493. }
  494.  
  495. void print_quest(int f, int mapp, int map[21])
  496. {
  497.   char s[100];
  498.   int i,abort;
  499.   votingrec v;
  500.  
  501.   outchr(12);
  502.   abort=0;
  503.   for (i=1; (i<=mapp) && (abort==0); i++) {
  504.     lseek(f,((long) (map[i])) * sizeof(votingrec), SEEK_SET);
  505.     read(f,(void *)&v,sizeof(votingrec));
  506.     sprintf(s,"e%c 1%2d7: 1%s",
  507.       thisuser.votes[map[i]]?' ':'*',i, v.question);
  508.     pla(s,&abort);
  509.   }
  510.   nl();
  511.   if (abort)
  512.     nl();
  513. }
  514.  
  515. int print_question(int f, int i, int ii)
  516. {
  517.   char s[81],s1[81],s2[81];
  518.   int i1,i2,i3,t,t1,abort;
  519.   votingrec v;
  520.   voting_response vr;
  521.  
  522.   lseek(f,((long) ii)*sizeof(votingrec),SEEK_SET);
  523.   read(f,(void *)&v,sizeof(votingrec));
  524.   abort=0;
  525.   outchr(12);
  526.   sprintf(s,"c│                          7Voting question 1#%-2d                              c│",i);
  527.   pl("c╒═══════════════════════════════════════════════════════════════════════════╕");
  528.   pla(s,&abort);
  529.   npr("c│ 1%-73s c│\r\n",v.question);
  530.   pl("c╘═══════════════════════════════════════════════════════════════════════════╛");
  531.   nl();
  532.   t=0;
  533.   for (i1=0; i1<v.numanswers; i1++) {
  534.     vr=v.responses[i1];
  535.     t+=vr.numresponses;
  536.   }
  537.  
  538.   sprintf(s,"eUsers voting: 5%4.1f%%\r\n",
  539.     ((double) t) / ((double) status.users) * 100.0);
  540.   pla(s,&abort);
  541.   nl();
  542.   if (t)
  543.     t1=t;
  544.   else
  545.     t1=1;
  546.   pla(" d0: No Comment",&abort);
  547.   for (i1=0; i1<5; i1++)
  548.     odc[i1]=0;
  549.   for (i1=0; (i1<v.numanswers) && (!abort); i1++) {
  550.     vr=v.responses[i1];
  551.     if (((i1+1) % 10)==0)
  552.       odc[((i1+1)/10)-1]='0'+((i1+1)/10);
  553.     sprintf(s,"1%2d: %-60s : %4d  %5.1f%%",
  554.       i1+1, vr.response, vr.numresponses,
  555.       ((float)vr.numresponses)/((float)t1)*100.0);
  556.     pla(s,&abort);
  557.   }
  558.   nl();
  559.   if (abort)
  560.     nl();
  561.   return(!abort);
  562. }
  563.  
  564. void vote_question(int f, int i, int ii)
  565. {
  566.   int ok,pqo,i1,i2;
  567.   char s[81],*ss;
  568.   votingrec v;
  569.   voting_response vr;
  570.  
  571.   pqo=print_question(f,i,ii);
  572.   ok=pqo;
  573.   ok=1;
  574.   if (restrict_vote & thisuser.restrict)
  575.     ok=0;
  576.   if (actsl<=1)
  577.     ok=0;
  578.   if (!ok)
  579.     return;
  580.   lseek(f,((long) ii)*sizeof(votingrec),SEEK_SET);
  581.   read(f,(void *)&v,sizeof(votingrec));
  582.   strcpy(s,"1Your vote7:1 ");
  583.   vr=v.responses[thisuser.votes[ii]-1];
  584.   if (thisuser.votes[ii])
  585.     strcat(s,vr.response);
  586.   else
  587.     strcat(s,"1No Comment");
  588.   pl(s);
  589.   nl();
  590.   prt(5,"eChange it? ");
  591.   if (!yn())
  592.     return;
  593.   prt(2,"fWhich? ");
  594.   ss=mmkey(2);
  595.   i1=atoi(ss);
  596.   if (i1>v.numanswers)
  597.     i1=0;
  598.   if ((i1==0) && (strcmp(ss,"0")))
  599.     return;
  600.   if (thisuser.votes[ii]) {
  601.     vr=v.responses[thisuser.votes[ii]-1];
  602.     --vr.numresponses;
  603.     v.responses[thisuser.votes[ii]-1]=vr;
  604.   }
  605.   thisuser.votes[ii]=i1;
  606.   if (i1) {
  607.     vr=v.responses[thisuser.votes[ii]-1];
  608.     ++vr.numresponses;
  609.     v.responses[thisuser.votes[ii]-1]=vr;
  610.   }
  611.   lseek(f,((long) ii)*sizeof(votingrec),SEEK_SET);
  612.   write(f,(void *)&v,sizeof(votingrec));
  613.   nl();
  614.   nl();
  615. }
  616.  
  617. void vote()
  618. {
  619.   int i,i1,i2,f,map[21],mapp,abort,n,done,loop;
  620.   char s[81],s1[81],s2[81],sodc[10],*ss;
  621.   votingrec v;
  622.  
  623.   sprintf(s,"%sVOTING.DAT",syscfg.datadir);
  624.   f=open(s,O_RDWR | O_BINARY | O_CREAT, S_IREAD | S_IWRITE);
  625.   n=(int) (filelength(f) / sizeof(votingrec)) -1;
  626.   if (n<20) {
  627.     v.question[0]=0;
  628.     v.numanswers=0;
  629.     for (i=n; i<20; i++)
  630.       write(f,(void *)&v,sizeof(votingrec));
  631.   }
  632.   mapp=0;
  633.   for (i=0; i<5; i++)
  634.     odc[i]=0;
  635.   for (i=0; i<20; i++) {
  636.     lseek(f,((long) i) * sizeof(votingrec),SEEK_SET);
  637.     read(f,(void *)&v,sizeof(votingrec));
  638.     if (v.numanswers) {
  639.       map[++mapp]=i;
  640.       if ((mapp % 10)==0)
  641.         odc[(mapp/10)-1]='0'+(mapp/10);
  642.     }
  643.   }
  644.   strcpy(sodc,odc);
  645.   if (mapp==0) {
  646.     nl();
  647.     nl();
  648.     pl("6No voting questions currently.");
  649.     nl();
  650.     close(f);
  651.     return;
  652.   }
  653.   print_quest(f,mapp,&map[0]);
  654.   done=0;
  655.   do {
  656.     nl();
  657.     nl();
  658.     prt(2,"1Voting Boothe: 7[1A7]1utovotee,1Numbere,1Qe,1? 7: ");
  659.     strcpy(odc,sodc);
  660.     ss=mmkey(2);
  661.     i=atoi(ss);
  662.     if ((i>0) && (i<=mapp))
  663.       vote_question(f,i,map[i]);
  664.     else
  665.       if (strcmp(ss,"A")==0) {
  666.     for (loop=1; loop <= mapp; loop++)
  667.     if ((!thisuser.votes[ map[loop] ]) && (!hangup))
  668.       vote_question(f,loop,map[loop]);
  669.     nl();
  670.     prt(1,"AutoVote Complete.");
  671.     done=1; }
  672.     else
  673.       if (strcmp(ss,"Q")==0)
  674.     done=1;
  675.       else
  676.         if (strcmp(ss,"?")==0)
  677.           print_quest(f,mapp,&map[0]);
  678.   } while ((!done) && (!hangup));
  679.   close(f);
  680.   pl("1Now updating the Voting Results!");
  681.   voteprint();
  682. }
  683.