home *** CD-ROM | disk | FTP | other *** search
/ The Devil's Doorknob BBS Capture (1996-2003) / devilsdoorknobbbscapture1996-2003.iso / W / WWIVSOR.ZIP / CHNEDIT.C < prev    next >
Text File  |  1995-04-25  |  10KB  |  430 lines

  1. /*****************************************************************************
  2.  
  3.                 WWIV Version 4
  4.                     Copyright (C) 1988-1995 by Wayne Bell
  5.  
  6. Distribution of the source code for WWIV, in any form, modified or unmodified,
  7. without PRIOR, WRITTEN APPROVAL by the author, is expressly prohibited.
  8. Distribution of compiled versions of WWIV is limited to copies compiled BY
  9. THE AUTHOR.  Distribution of any copies of WWIV not compiled by the author
  10. is expressly prohibited.
  11.  
  12.  
  13. *****************************************************************************/
  14.  
  15.  
  16.  
  17. #include "vars.h"
  18.  
  19. #pragma hdrstop
  20.  
  21.  
  22.  
  23. void chaindata(int n, char *s)
  24. {
  25.   char w,x,y,z,i;
  26.   chainfilerec c;
  27.  
  28.   c=chains[n];
  29.   if (c.ar==0)
  30.     x=32;
  31.   else {
  32.     for (i=0; i<16; i++)
  33.       if ((1 << i) & c.ar)
  34.         x='A'+i;
  35.   }
  36.   if (c.ansir & ansir_ansi)
  37.     y='Y';
  38.   else
  39.     y='N';
  40.   if (c.ansir & ansir_no_DOS)
  41.     z='N';
  42.   else
  43.     z='Y';
  44.   if (c.ansir & ansir_shrink)
  45.     w='Y';
  46.   else
  47.     w='N';
  48.   sprintf(s,"%2d %-28.28s  %-27.27s %-3d    %1c  %1c  %1c  %1c",
  49.             n,stripcolors(c.description),c.filename,c.sl,y,x,z,w);
  50. }
  51.  
  52. void showchains(void)
  53. {
  54.   int abort,i;
  55.   char s[180];
  56.  
  57.   outchr(12);
  58.   abort=0;
  59.   pla(get_string(102),
  60.       &abort);
  61.   pla(get_string(103),
  62.       &abort);
  63.   for (i=0; (i<numchain) && (!abort); i++) {
  64.     chaindata(i,s);
  65.     pla(s,&abort);
  66.   }
  67. }
  68.  
  69.  
  70.  
  71. void modify_chain(int n)
  72. {
  73.   chainfilerec c;
  74.   chainregrec r;
  75.   char s[81],s1[81],s2[81],ch,ch2;
  76.   int i,done,un;
  77.   userrec u;
  78.  
  79.   c=chains[n];
  80.   if (sysinfo.flags & OP_FLAGS_CHAIN_REG)
  81.     r=chains_reg[n];
  82.   done=0;
  83.   do {
  84.     outchr(12);
  85.     outstr(get_string(104)); pl(c.description);
  86.     outstr(get_string(105)); pl(c.filename);
  87.     outstr(get_string(106)); pln(c.sl);
  88.     strcpy(s,get_string(5));
  89.     if (c.ar!=0) {
  90.       for (i=0; i<16; i++)
  91.         if ((1 << i) & c.ar)
  92.           s[0]='A'+i;
  93.       s[1]=0;
  94.     }
  95.     outstr(get_string(107)); pl(s);
  96.     outstr(get_string(108));
  97.     pl((c.ansir & ansir_ansi)?get_string(109):get_string(110));
  98.     outstr(get_string(111));
  99.     if (c.ansir & ansir_no_DOS)
  100.       outstr(get_string(112));
  101.     pl(get_string(113));
  102.     outstr(get_string(114));
  103.     if (c.ansir & ansir_no_300)
  104.       outstr(get_string(112));
  105.     pl(get_string(115));
  106.     outstr(get_string(116));
  107.     pl((c.ansir & ansir_shrink)?str_yes:str_no);
  108.     outstr(get_string(117));
  109.     pl((c.ansir & ansir_no_pause)?str_yes:str_no);
  110.     outstr(get_string(118));
  111.     pl((c.ansir & ansir_local_only)?str_yes:str_no);
  112.     outstr(get_string(1486));
  113.     pl((c.ansir & ansir_multi_user)?str_yes:str_no);
  114.     if (sysinfo.flags & OP_FLAGS_CHAIN_REG) {
  115.       if(r.regby[0])
  116.         read_user(r.regby[0],&u);
  117.       outstr(get_string(1069));
  118.       pl((r.regby[0]) ? u.name : get_string(1070));
  119.       for(i=1;i<5;i++) {
  120.         if (r.regby[i]!=0) {
  121.           read_user(r.regby[i],&u);
  122.           outstr(charstr(18,' '));
  123.           pl(u.name);
  124.         }
  125.       }
  126.       outstr(get_string(1071));
  127.       npr("%d\r\n",r.usage);
  128.       outstr(get_string(1487));
  129.       if ((r.maxage==0) && (r.minage==0))
  130.         r.maxage=255;
  131.       npr("%d - %d\r\n", r.minage, r.maxage);
  132.       outstr(get_string(1467));
  133.       pl((c.ansir & ansir_rip_only) ? get_string(109):get_string(110));
  134.       nl();
  135.       prt(2,get_string(1072));
  136.       ch=onek("QABCDEFGHIJKLMNR[]");
  137.     } else {
  138.       outstr(get_string(1467));
  139.       pl((c.ansir & ansir_rip_only) ? get_string(109):get_string(110));
  140.       nl();
  141.       prt(2,get_string(119));
  142.       ch=onek("QABCDEFGHIJKR[]");
  143.     }
  144.     switch(ch) {
  145.       case 'Q':done=1; break;
  146.       case '[':
  147.         chains[n]=c;
  148.         if (sysinfo.flags & OP_FLAGS_CHAIN_REG)
  149.           chains_reg[n]=r;
  150.         if (--n<0)
  151.           n=numchain-1;
  152.         c=chains[n];
  153.         if (sysinfo.flags & OP_FLAGS_CHAIN_REG)
  154.           r=chains_reg[n];
  155.         break;
  156.       case ']':
  157.         chains[n]=c;
  158.         if (sysinfo.flags & OP_FLAGS_CHAIN_REG)
  159.           chains_reg[n]=r;
  160.         if (++n>=numchain)
  161.           n=0;
  162.         c=chains[n];
  163.         if (sysinfo.flags & OP_FLAGS_CHAIN_REG)
  164.           r=chains_reg[n];
  165.         break;
  166.       case 'A':
  167.         nl();
  168.         prt(2,get_string(120));
  169.         inputl(s,40);
  170.         if (s[0])
  171.           strcpy(c.description,s);
  172.         break;
  173.       case 'B':
  174.         nl();
  175.         prt(2,get_string(72));
  176.         input(s,40);
  177.         if (s[0]!=0)
  178.           strcpy(c.filename,s);
  179.         break;
  180.       case 'C':
  181.         nl();
  182.         prt(2,get_string(76));
  183.         input(s,3);
  184.         i=atoi(s);
  185.         if ((i>=0) && (i<256) && (s[0]))
  186.           c.sl=i;
  187.         break;
  188.       case 'D':
  189.         nl();
  190.         prt(2,get_string(80));
  191.         ch2=onek(" ABCDEFGHIJKLMNOP");
  192.         if (ch2==32)
  193.           c.ar=0;
  194.         else
  195.           c.ar=1 << (ch2-'A');
  196.         break;
  197.       case 'E':
  198.         nl();
  199.         prt(5,get_string(121));
  200.         if (yn())
  201.           c.ansir |= ansir_ansi;
  202.         else
  203.           c.ansir &= ~ansir_ansi;
  204.         break;
  205.       case 'F':
  206.         nl();
  207.         prt(5,get_string(122));
  208.         if (ny())
  209.           c.ansir &= ~ansir_no_DOS;
  210.         else
  211.           c.ansir |= ansir_no_DOS;
  212.         break;
  213.       case 'G':
  214.         nl();
  215.         prt(5,get_string(123));
  216.         if (ny())
  217.       c.ansir &= ~ansir_no_300;
  218.     else
  219.       c.ansir |= ansir_no_300;
  220.         break;
  221.       case 'H':
  222.         nl();
  223.         prt(5,get_string(124));
  224.         if (yn())
  225.           c.ansir |= ansir_shrink;
  226.         else
  227.           c.ansir &= ~ansir_shrink;
  228.         break;
  229.       case 'I':
  230.         nl();
  231.         prt(5,get_string(125));
  232.         if (yn())
  233.           c.ansir |= ansir_no_pause;
  234.         else
  235.           c.ansir &= ~ansir_no_pause;
  236.         break;
  237.       case 'J':
  238.         nl();
  239.         prt(5,get_string(126));
  240.         if (yn())
  241.           c.ansir |= ansir_local_only;
  242.         else
  243.           c.ansir &= ~ansir_local_only;
  244.         break;
  245.       case 'K':
  246.         nl();
  247.         prt(5,get_string(1076));
  248.         if (yn())
  249.           c.ansir |= ansir_multi_user;
  250.         else
  251.           c.ansir &= ~ansir_multi_user;
  252.         break;
  253.       case 'L':
  254.         if (!(sysinfo.flags & OP_FLAGS_CHAIN_REG))
  255.           break;
  256.         for (i=0;i<5;i++) {
  257.           nl();
  258.           sprintf(s1,"%s",get_string(268));
  259.           sprintf(s2,"%s",get_string(929));
  260.           npr("2%s%s%s)0 ",s1,get_string(1077),s2);
  261.           mpl(30);
  262.           input(s1,30);
  263.           if ((s1[0]!='Q') && (s1[0]!='q')) {
  264.             if (s1[0]=='0') {
  265.               r.regby[i]=0;
  266.             } else {
  267.               un=finduser1(s1);
  268.               if (un>0) {
  269.                 read_user(un,&u);
  270.                 r.regby[i]=un;
  271.                 nl();
  272.                 npr("1%-20.20s2%d %s",get_string(1078),un,
  273.                   (r.regby[i]) ? u.name : get_string(1070));
  274.               }
  275.             }
  276.           } else
  277.             break;
  278.         }
  279.       break;
  280.       case 'M':
  281.         r.usage=0;
  282.       break;
  283.       case 'N':
  284.         nl();
  285.         prt(5, get_string(1488));
  286.         input(s,3);
  287.         if (s[0])
  288.           if((atoi(s) > 255) || (atoi(s) < 0))
  289.             s[0]=0;
  290.           else
  291.             r.minage=atoi(s);
  292.         prt(5, get_string(1489));
  293.         input(s,3);
  294.         if (s[0]) {
  295.           if(atoi(s) < r.minage)
  296.             break;
  297.           if(atoi(s) > 255)
  298.             r.maxage=255;
  299.           else
  300.             r.maxage=atoi(s);
  301.         }
  302.         break;
  303.       case 'R':
  304.         nl();
  305.         prt(5,get_string(1468));
  306.         if (yn())
  307.           c.ansir |= ansir_rip_only;
  308.         else
  309.           c.ansir &= ~ansir_rip_only;
  310.         break;
  311.     }
  312.   } while ((!done) && (!hangup));
  313.   chains[n]=c;
  314.   if (sysinfo.flags & OP_FLAGS_CHAIN_REG)
  315.     chains_reg[n]=r;
  316. }
  317.  
  318.  
  319. void insert_chain(int n)
  320. {
  321.   chainfilerec c;
  322.   chainregrec r;
  323.   int i;
  324.  
  325.   for (i=numchain-1; i>=n; i--) {
  326.     chains[i+1]=chains[i];
  327.     if (sysinfo.flags & OP_FLAGS_CHAIN_REG)
  328.       chains_reg[i+1]=chains_reg[i];
  329.   }
  330.   strcpy(c.description,get_string(127));
  331.   strcpy(c.filename,get_string(128));
  332.   c.sl=10;
  333.   c.ar=0;
  334.   c.ansir=0;
  335.   chains[n]=c;
  336.   ++numchain;
  337.   if (sysinfo.flags & OP_FLAGS_CHAIN_REG) {
  338.     memset((char *)&r, 0, sizeof(r));
  339.     r.maxage=255;
  340.     chains_reg[n]=r;
  341.   }
  342.   modify_chain(n);
  343. }
  344.  
  345.  
  346. void delete_chain(int n)
  347. {
  348.   int i;
  349.  
  350.   for (i=n; i<numchain; i++) {
  351.     chains[i]=chains[i+1];
  352.     if (sysinfo.flags & OP_FLAGS_CHAIN_REG)
  353.       chains_reg[i]=chains_reg[i+1];
  354.   }
  355.   --numchain;
  356. }
  357.  
  358.  
  359. void chainedit(void)
  360. {
  361.   int i,done,f;
  362.   char s[81],ch;
  363.  
  364.   if (!checkpw())
  365.     return;
  366.   showchains();
  367.   done=0;
  368.   do {
  369.     nl();
  370.     prt(2,get_string(129));
  371.     ch=onek("QDIM?");
  372.     switch(ch) {
  373.       case '?':
  374.         showchains();
  375.         break;
  376.       case 'Q':
  377.         done=1;
  378.         break;
  379.       case 'M':
  380.         nl();
  381.         prt(2,get_string(130));
  382.         input(s,2);
  383.         i=atoi(s);
  384.         if ((s[0]!=0) && (i>=0) && (i<numchain))
  385.           modify_chain(i);
  386.         break;
  387.       case 'I':
  388.         if (numchain<sysinfo.max_chains) {
  389.           nl();
  390.           prt(2,get_string(131));
  391.           input(s,2);
  392.           i=atoi(s);
  393.           if ((s[0]!=0) && (i>=0) && (i<=numchain))
  394.             insert_chain(i);
  395.         }
  396.         break;
  397.       case 'D':
  398.         nl();
  399.         prt(2,get_string(132));
  400.         input(s,2);
  401.         i=atoi(s);
  402.         if ((s[0]!=0) && (i>=0) && (i<numchain)) {
  403.           nl();
  404.           ansic(5);
  405.           outstr(get_string(87));
  406.           outstr(chains[i].description);
  407.           outstr("? ");
  408.           if (yn())
  409.             delete_chain(i);
  410.         }
  411.         break;
  412.     }
  413.   } while ((!done) && (!hangup));
  414.   sprintf(s,"%sCHAINS.DAT",syscfg.datadir);
  415.   f=sh_open(s,O_RDWR | O_BINARY | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE);
  416.   if (f>0) {
  417.     sh_write(f,(void *)chains, numchain * sizeof(chainfilerec));
  418.     sh_close(f);
  419.   }
  420.   if (sysinfo.flags & OP_FLAGS_CHAIN_REG) {
  421.     sprintf(s,"%sCHAINS.REG",syscfg.datadir);
  422.     f=sh_open(s,O_RDWR | O_BINARY | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE);
  423.     if (f>0) {
  424.       sh_write(f,(void *)chains_reg, numchain * sizeof(chainregrec));
  425.       sh_close(f);
  426.     }
  427.   }
  428. }
  429.  
  430.