home *** CD-ROM | disk | FTP | other *** search
/ The Devil's Doorknob BBS Capture (1996-2003) / devilsdoorknobbbscapture1996-2003.iso / WWIV2.ZIP / DIREDIT.C < prev    next >
C/C++ Source or Header  |  1992-12-16  |  8KB  |  361 lines

  1. /*****************************************************************************
  2.  
  3.                 WWIV Version 4
  4.                     Copyright (C) 1988-1993 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. #include <dir.h>
  22.  
  23.  
  24. void dirdata(int n, char *s)
  25. {
  26.   char x,y,k,i;
  27.   directoryrec r;
  28.  
  29.   r=directories[n];
  30.   if (r.dar==0)
  31.     x=32;
  32.   else {
  33.     for (i=0; i<16; i++)
  34.       if ((1 << i) & r.dar)
  35.         x='A'+i;
  36.   }
  37.   sprintf(s,"%2d  %1c  %-40s  %-8s %-3d %-3d %-3d %-9.9s",
  38.             n,x,r.name,r.filename,r.dsl,r.age,r.maxfiles,r.path);
  39. }
  40.  
  41. void showdirs(void)
  42. {
  43.   int abort,i;
  44.   char s[180];
  45.  
  46.   outchr(12);
  47.   abort=0;
  48.   pla(get_string(133),
  49.       &abort);
  50.   pla(get_string(134),
  51.       &abort);
  52.   for (i=0; (i<num_dirs) && (!abort); i++) {
  53.     dirdata(i,s);
  54.     pla(s,&abort);
  55.   }
  56. }
  57.  
  58.  
  59.  
  60. void modify_dir(int n)
  61. {
  62.   directoryrec r;
  63.   char s[81],s1[81],ch,ch2,*ss;
  64.   int i,i1,done;
  65.  
  66.   r=directories[n];
  67.   done=0;
  68.   do {
  69.     outchr(12);
  70.     outstr(get_string(62)); pl(r.name);
  71.     outstr(get_string(63)); pl(r.filename);
  72.     outstr(get_string(135)); pl(r.path);
  73.     outstr(get_string(136)); pln(r.dsl);
  74.     outstr(get_string(137)); pln(r.age);
  75.     outstr(get_string(138)); pln(r.maxfiles);
  76.     strcpy(s,get_string(5));
  77.     if (r.dar!=0) {
  78.       for (i=0; i<16; i++)
  79.         if ((1 << i) & r.dar)
  80.           s[0]='A'+i;
  81.       s[1]=0;
  82.     }
  83.     outstr(get_string(139)); pl(s);
  84.     outstr(get_string(140)); pl((r.mask&mask_PD)?str_yes:str_no);
  85.     outstr(get_string(141)); pln(r.type);
  86.     outstr(get_string(142));
  87.     pl((r.mask & mask_no_uploads) ? get_string(143) : get_string(115));
  88.     outstr(get_string(144));
  89.     pl((r.mask & mask_archive) ? str_yes : str_no);
  90.     nl();
  91.     prt(2,get_string(119));
  92.     ch=onek("QABCDEFGHIJK");
  93.     switch(ch) {
  94.       case 'Q':done=1; break;
  95.       case 'A':
  96.         nl();
  97.         prt(2,get_string(69));
  98.         inputl(s,40);
  99.         if (s[0])
  100.           strcpy(r.name,s);
  101.         break;
  102.       case 'B':
  103.         nl();
  104.         prt(2,get_string(72));
  105.         input(s,8);
  106.         if ((s[0]!=0) && (strchr(s,'.')==0))
  107.           strcpy(r.filename,s);
  108.         break;
  109.       case 'C':
  110.         nl();
  111.         pl(get_string(145));
  112.         pl(get_string(146));
  113.         prt(2,get_string(147));
  114.         input(s,80);
  115.         if (s[0]) {
  116.           if (chdir(s)) {
  117.             cd_to(cdir);
  118.             if (mkdir(s)) {
  119.               pl(get_string(148));
  120.               pl(get_string(149));
  121.               getkey();
  122.               s[0]=0;
  123.             }
  124.           } else {
  125.             cd_to(cdir);
  126.           }
  127.           if (s[0]) {
  128.             strcat(s,"\\");
  129.             strcpy(r.path,s);
  130.             pl(get_string(150));
  131.             pl(get_string(151));
  132.             pl(get_string(152));
  133.             pl(get_string(149));
  134.             getkey();
  135.           }
  136.         }
  137.         break;
  138.       case 'D':
  139.         nl();
  140.         prt(2,get_string(153));
  141.         input(s,3);
  142.         i=atoi(s);
  143.         if ((i>=0) && (i<256) && (s[0]))
  144.           r.dsl=i;
  145.         break;
  146.       case 'E':
  147.         nl();
  148.         prt(2,get_string(77));
  149.         input(s,3);
  150.         i=atoi(s);
  151.         if ((i>=0) && (i<128) && (s[0]))
  152.           r.age=i;
  153.         break;
  154.       case 'F':
  155.         nl();
  156.         prt(2,get_string(79));
  157.         input(s,3);
  158.         i=atoi(s);
  159.         if ((i>0) && (i<500) && (s[0]))
  160.           r.maxfiles=i;
  161.         break;
  162.       case 'G':
  163.         nl();
  164.         prt(2,get_string(154));
  165.         ch2=onek("ABCDEFGHIJKLMNOP ");
  166.         if (ch2==32)
  167.           r.dar=0;
  168.         else
  169.           r.dar=1 << (ch2-'A');
  170.         break;
  171.       case 'H':
  172.         r.mask &= ~mask_PD;
  173.         nl();
  174.         prt(5,get_string(155));
  175.         if (ny())
  176.           r.mask |= mask_PD;
  177.         break;
  178.       case 'I':
  179.         nl();
  180.         prt(2,get_string(156));
  181.         input(s,4);
  182.         i=atoi(s);
  183.         if (s[0])
  184.           r.type=i;
  185.         break;
  186.       case 'J':
  187.         r.mask &= ~mask_no_uploads;
  188.         nl();
  189.         prt(5,get_string(157));
  190.         if (!ny())
  191.           r.mask |= mask_no_uploads;
  192.         break;
  193.       case 'K':
  194.         r.mask &= ~mask_archive;
  195.         nl();
  196.         prt(5,get_string(158));
  197.         if (yn())
  198.           r.mask |= mask_archive;
  199.         break;
  200.     }
  201.   } while ((!done) && (!hangup));
  202.   directories[n]=r;
  203. }
  204.  
  205.  
  206. void insert_dir(int n)
  207. {
  208.   directoryrec r;
  209.   int i,i1,i2,nu;
  210.   unsigned long *qsc, *qsc_n, m1, m2, m3;
  211.  
  212.   for (i=num_dirs-1; i>=n; i--) {
  213.     directories[i+1]=directories[i];
  214.     dir_dates[i+1]=dir_dates[i];
  215.   }
  216.   strcpy(r.name,get_string(159));
  217.   strcpy(r.filename,get_string(82));
  218.   strcpy(r.path,syscfg.dloadsdir);
  219.   r.dsl=10;
  220.   r.age=0;
  221.   r.maxfiles=50;
  222.   r.dar=0;
  223.   r.type=0;
  224.   r.mask=0;
  225.   directories[n]=r;
  226.   ++num_dirs;
  227.  
  228.   nu=number_userrecs();
  229.   close_user();
  230.  
  231.   qsc=(unsigned long *)farmalloc(syscfg.qscn_len);
  232.   if (qsc) {
  233.     qsc_n=qsc+1;
  234.  
  235.     m1=1L<<(n%32);
  236.     m2=0xffffffff<<((n%32)+1);
  237.     m3=0xffffffff>>(32-(n%32));
  238.  
  239.     for (i=1; i<=nu; i++) {
  240.       read_qscn(i,qsc, 1);
  241.  
  242.       for (i2=num_dirs/32; i2>n/32; i2--) {
  243.         qsc_n[i2]=(qsc_n[i2]<<1) | (qsc_n[i2-1]>>31);
  244.       }
  245.       qsc_n[i2]=m1 | (m2 & (qsc_n[i2]<<1)) | (m3 & qsc_n[i2]);
  246.  
  247.       write_qscn(i,qsc,1);
  248.     }
  249.     close_qscn();
  250.     farfree(qsc);
  251.   }
  252.  
  253.   modify_dir(n);
  254. }
  255.  
  256.  
  257. void delete_dir(int n)
  258. {
  259.   int i,i1,i2,nu;
  260.   unsigned long *qsc, *qsc_n, m2, m3;
  261.  
  262.   for (i=n; i<num_dirs; i++) {
  263.     directories[i]=directories[i+1];
  264.     dir_dates[i]=dir_dates[i+1];
  265.   }
  266.   --num_dirs;
  267.  
  268.   nu=number_userrecs();
  269.   close_user();
  270.  
  271.   qsc=(unsigned long *)farmalloc(syscfg.qscn_len);
  272.   if (qsc) {
  273.     qsc_n=qsc+1;
  274.  
  275.     m2=0xffffffff<<(n%32);
  276.     m3=0xffffffff>>(32-(n%32));
  277.  
  278.     for (i=1; i<=nu; i++) {
  279.       read_qscn(i,qsc, 1);
  280.  
  281.       qsc_n[n/32]=(qsc_n[n/32]&m3) | ((qsc_n[n/32]>>1)&m2) |
  282.                   (qsc_n[(n/32)+1]<<31);
  283.  
  284.       for (i2=(n/32)+1; i2<=(num_dirs/32); i2++) {
  285.         qsc_n[i2]=(qsc_n[i2]>>1) | (qsc_n[i2+1]<<31);
  286.       }
  287.  
  288.       write_qscn(i,qsc,1);
  289.     }
  290.     close_qscn();
  291.     farfree(qsc);
  292.   }
  293. }
  294.  
  295.  
  296. void dlboardedit(void)
  297. {
  298.   int i,i1,i2,done,f;
  299.   char s[81],s1[81],s2[81],ch;
  300.  
  301.   if (!checkpw())
  302.     return;
  303.   showdirs();
  304.   done=0;
  305.   do {
  306.     nl();
  307.     prt(2,get_string(160));
  308.     ch=onek("QDIM?");
  309.     switch(ch) {
  310.       case '?':
  311.         showdirs();
  312.         break;
  313.       case 'Q':
  314.         done=1;
  315.         break;
  316.       case 'M':
  317.         nl();
  318.         prt(2,get_string(161));
  319.         input(s,3);
  320.         i=atoi(s);
  321.         if ((s[0]!=0) && (i>=0) && (i<num_dirs))
  322.           modify_dir(i);
  323.         break;
  324.       case 'I':
  325.         if (num_dirs<max_dirs) {
  326.           nl();
  327.           prt(2,get_string(162));
  328.           input(s,3);
  329.           i=atoi(s);
  330.           if ((s[0]!=0) && (i>=0) && (i<=num_dirs))
  331.             insert_dir(i);
  332.         }
  333.         break;
  334.       case 'D':
  335.         nl();
  336.         prt(2,get_string(163));
  337.         input(s,3);
  338.         i=atoi(s);
  339.         if ((s[0]!=0) && (i>=0) && (i<num_dirs)) {
  340.           nl();
  341.           ansic(5);
  342.           outstr(get_string(87));
  343.           outstr(directories[i].name);
  344.           outstr("? ");
  345.           if (yn())
  346.             delete_dir(i);
  347.         }
  348.         break;
  349.     }
  350.   } while ((!done) && (!hangup));
  351.   sprintf(s,"%sDIRS.DAT",syscfg.datadir);
  352.   f=open(s,O_RDWR | O_BINARY | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE);
  353.   write(f,(void *)&directories[0], num_dirs * sizeof(directoryrec));
  354.   close(f);
  355.   if (!wfc)
  356.     changedsl();
  357. }
  358.  
  359.  
  360.  
  361.