home *** CD-ROM | disk | FTP | other *** search
/ The Devil's Doorknob BBS Capture (1996-2003) / devilsdoorknobbbscapture1996-2003.iso / W / DEVBBS.ZIP / CHNEDIT.C < prev    next >
C/C++ Source or Header  |  1992-07-21  |  6KB  |  251 lines

  1. /*****************************************************************************
  2.  
  3.                 WWIV Version 4
  4.                     Copyright (C) 1988-1991 by Wayne Bell
  5.  
  6. *****************************************************************************/
  7.  
  8. #include "vars.h"
  9. #pragma hdrstop
  10.  
  11. void chaindata(int n, char *s)
  12. {
  13.   char w,x,y,z,i;
  14.   chainfilerec c;
  15.  
  16.   c=chains[n];
  17.   if (c.ar==0)
  18.     x=32;
  19.   else {
  20.     for (i=0; i<16; i++)
  21.       if ((1 << i) & c.ar)
  22.         x='A'+i;
  23.   }
  24.   if (c.ansir & ansir_ansi)
  25.     y='Y';
  26.   else
  27.     y='N';
  28.   if (c.ansir & ansir_no_DOS)
  29.     z='N';
  30.   else
  31.     z='Y';
  32.   if (c.ansir & ansir_shrink)
  33.     w='Y';
  34.   else
  35.     w='N';
  36.   sprintf(s,"%2d %-28.28s  %-27.27s %-3d    %1c  %1c  %1c  %1c",
  37.             n,c.description,c.filename,c.sl,y,x,z,w);
  38. }
  39.  
  40. void showchains()
  41. {
  42.   int abort,i;
  43.   char s[180];
  44.  
  45.   outchr(12);
  46.   abort=0;
  47.   pla("NN Description                   Path Name                   SL  ANSI AR DOS S",
  48.       &abort);
  49.   pla("== ----------------------------  =========================== --- ==== -- === -",
  50.       &abort);
  51.   for (i=0; (i<numchain) && (!abort); i++) {
  52.     chaindata(i,s);
  53.     pla(s,&abort);
  54.   }
  55. }
  56.  
  57. void modify_chain(int n)
  58. {
  59.   chainfilerec c;
  60.   char s[81],s1[81],ch,ch2;
  61.   int i,i1,done;
  62.  
  63.   c=chains[n];
  64.   done=0;
  65.   do {
  66.     outchr(12);
  67.     npr("A. Description  : %s\r\n",c.description);
  68.     npr("B. Filename     : %s\r\n",c.filename);
  69.     npr("C. SL           : %d\r\n",c.sl);
  70.     strcpy(s,"None.");
  71.     if (c.ar!=0) {
  72.       for (i=0; i<16; i++)
  73.         if ((1 << i) & c.ar)
  74.           s[0]='A'+i;
  75.       s[1]=0;
  76.     }
  77.     npr("D. AR           : %s\r\n",s);
  78.     npr("E. ANSI         : %s\r\n",
  79.         (c.ansir & ansir_ansi)?"Required":"Optional");
  80.     npr("F. DOS Interrupt: %sUsed\r\n",
  81.         (c.ansir & ansir_no_DOS)?"NOT ":"");
  82.     npr("G. 300 Baud     : %sAllowed\r\n",
  83.         (c.ansir & ansir_no_300)?"NOT ":"");
  84.     npr("H. Shrink       : %s\r\n",
  85.         (c.ansir & ansir_shrink)?"Yes":"No");
  86.     npr("I. Disable pause: %s\r\n",
  87.         (c.ansir & ansir_no_pause)?"Yes":"No");
  88.     nl();
  89.     prt(2,"Which (A-G,Q) ? ");
  90.     ch=onek("QABCDEFGHI");
  91.     switch(ch) {
  92.       case 'Q':done=1; break;
  93.       case 'A':
  94.         nl();
  95.         prt(2,"New description? ");
  96.         inputl(s,40);
  97.         if (s[0])
  98.           strcpy(c.description,s);
  99.         break;
  100.       case 'B':
  101.         nl();
  102.         prt(2,"New filename? ");
  103.         input(s,40);
  104.         if (s[0]!=0)
  105.           strcpy(c.filename,s);
  106.         break;
  107.       case 'C':
  108.         nl();
  109.         prt(2,"New SL? ");
  110.         input(s,3);
  111.         i=atoi(s);
  112.         if ((i>=0) && (i<256) && (s[0]))
  113.           c.sl=i;
  114.         break;
  115.       case 'D':
  116.         nl();
  117.         prt(2,"New AR (<SPC>=None) ? ");
  118.         ch2=onek("ABCDEFGHIJKLMNOP ");
  119.         if (ch2==32)
  120.           c.ar=0;
  121.         else
  122.           c.ar=1 << (ch2-'A');
  123.         break;
  124.       case 'E':
  125.         nl();
  126.         prt(5,"Require ANSI? ");
  127.         if (yn())
  128.       c.ansir |= ansir_ansi;
  129.     else
  130.       c.ansir &= ~ansir_ansi;
  131.         break;
  132.       case 'F':
  133.         nl();
  134.         prt(5,"Have BBS intercept DOS calls? ");
  135.         if (ny())
  136.       c.ansir &= ~ansir_no_DOS;
  137.     else
  138.       c.ansir |= ansir_no_DOS;
  139.         break;
  140.       case 'G':
  141.         nl();
  142.         prt(5,"Allow 300 baud users to run? ");
  143.         if (ny())
  144.       c.ansir &= ~ansir_no_300;
  145.     else
  146.       c.ansir |= ansir_no_300;
  147.         break;
  148.       case 'H':
  149.         nl();
  150.         prt(5,"Shrink the BBS to run? ");
  151.         if (yn())
  152.           c.ansir |= ansir_shrink;
  153.         else
  154.           c.ansir &= ~ansir_shrink;
  155.         break;
  156.       case 'I':
  157.         nl();
  158.         prt(5,"Disable screen pause in program? ");
  159.         if (yn())
  160.           c.ansir |= ansir_no_pause;
  161.         else
  162.           c.ansir &= ~ansir_no_pause;
  163.         break;
  164.     }
  165.   } while ((!done) && (!hangup));
  166.   chains[n]=c;
  167. }
  168.  
  169. void insert_chain(int n)
  170. {
  171.   chainfilerec c;
  172.   int i,i1,nu;
  173.  
  174.   for (i=numchain-1; i>=n; i--)
  175.     chains[i+1]=chains[i];
  176.   strcpy(c.description,"** NEW CHAIN **");
  177.   strcpy(c.filename,"REM");
  178.   c.sl=10;
  179.   c.ar=0;
  180.   c.ansir=0;
  181.   chains[n]=c;
  182.   ++numchain;
  183.   modify_chain(n);
  184. }
  185.  
  186. void delete_chain(int n)
  187. {
  188.   int i,i1,nu;
  189.  
  190.   for (i=n; i<numchain; i++)
  191.     chains[i]=chains[i+1];
  192.   --numchain;
  193. }
  194.  
  195. void chainedit()
  196. {
  197.   int i,i1,i2,done,f;
  198.   char s[81],s1[81],s2[81],ch;
  199.  
  200.   showchains();
  201.   done=0;
  202.   do {
  203.     nl();
  204.     prt(2,"Chains: D:elete, I:nsert, M:odify, Q:uit, ? : ");
  205.     ch=onek("QDIM?");
  206.     switch(ch) {
  207.       case '?':
  208.         showchains();
  209.         break;
  210.       case 'Q':
  211.         done=1;
  212.         break;
  213.       case 'M':
  214.         nl();
  215.         prt(2,"Chain number? ");
  216.         input(s,2);
  217.         i=atoi(s);
  218.         if ((s[0]!=0) && (i>=0) && (i<numchain))
  219.           modify_chain(i);
  220.         break;
  221.       case 'I':
  222.         if (numchain<50) {
  223.           nl();
  224.           prt(2,"Insert before which chain? ");
  225.           input(s,2);
  226.           i=atoi(s);
  227.           if ((s[0]!=0) && (i>=0) && (i<=numchain))
  228.             insert_chain(i);
  229.         }
  230.         break;
  231.       case 'D':
  232.         nl();
  233.         prt(2,"Delete which chain? ");
  234.         input(s,2);
  235.         i=atoi(s);
  236.         if ((s[0]!=0) && (i>=0) && (i<numchain)) {
  237.           nl();
  238.           ansic(5);
  239.           npr("Delete %s? ",chains[i].description);
  240.           if (yn())
  241.             delete_chain(i);
  242.         }
  243.         break;
  244.     }
  245.   } while ((!done) && (!hangup));
  246.   sprintf(s,"%sCHAINS.DAT",syscfg.datadir);
  247.   f=open(s,O_RDWR | O_BINARY | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE);
  248.   write(f,(void *)chains, numchain * sizeof(chainfilerec));
  249.   close(f);
  250. }
  251.