home *** CD-ROM | disk | FTP | other *** search
/ The Devil's Doorknob BBS Capture (1996-2003) / devilsdoorknobbbscapture1996-2003.iso / W / DEVBBS.ZIP / DIREDIT.C < prev    next >
C/C++ Source or Header  |  1992-07-21  |  8KB  |  329 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 dirdata(int n, char *s)
  12. {
  13.   char x,y,k,i;
  14.   directoryrec r;
  15.  
  16.   r=directories[n];
  17.   if (r.dar==0)
  18.     x=32;
  19.   else {
  20.     for (i=0; i<16; i++)
  21.       if ((1 << i) & r.dar)
  22.         x='A'+i;
  23.   }
  24.   sprintf(s,"%2d  %1c  %-40s  %-8s %-3d %-3d %-3d %-9.9s",
  25.             n,x,r.name,r.filename,r.dsl,r.age,r.maxfiles,r.path);
  26. }
  27.  
  28. void showdirs()
  29. {
  30.   int abort,i;
  31.   char s[180];
  32.  
  33.   outchr(12);
  34.   abort=0;
  35.   pla("NN DAR Name                                      FN       DSL AGE FIL PATH",
  36.       &abort);
  37.   pla("== --- ========================================  -------- === --- === ---------",
  38.       &abort);
  39.   for (i=0; (i<num_dirs) && (!abort); i++) {
  40.     dirdata(i,s);
  41.     pla(s,&abort);
  42.   }
  43. }
  44.  
  45. void modify_dir(int n)
  46. {
  47.   directoryrec r;
  48.   char s[81],s1[81],ch,ch2,*ss;
  49.   int i,i1,done;
  50.  
  51.   r=directories[n];
  52.   done=0;
  53.   do {
  54.     outchr(12);
  55.     npr("A. Name       : %s\r\n",r.name);
  56.     npr("B. Filename   : %s\r\n",r.filename);
  57.     npr("C. Path       : '%s'\r\n",r.path);
  58.     npr("D. DSL        : %d\r\n",r.dsl);
  59.     npr("E. Min. Age   : %d\r\n",r.age);
  60.     npr("F. Max Files  : %d\r\n",r.maxfiles);
  61.     strcpy(s,"None.");
  62.     if (r.dar!=0) {
  63.       for (i=0; i<16; i++)
  64.         if ((1 << i) & r.dar)
  65.           s[0]='A'+i;
  66.       s[1]=0;
  67.     }
  68.     npr("G. DAR        : %s\r\n",s);
  69.     npr("H. Mask       : %d\r\n",r.mask);
  70.     npr("I. Dir Type   : %u\r\n",r.type);
  71.     npr("J. Uploads    : %s\r\n",
  72.         (r.mask & mask_no_uploads) ? "Disallowed" : "Allowed");
  73.     npr("K. Arch. only : %s\r\n",
  74.         (r.mask & mask_archive) ? "Yes" : "No");
  75.     nl();
  76.     prt(2,"Which (A-J,Q) ? ");
  77.     ch=onek("QABCDEFGHIJK");
  78.     switch(ch) {
  79.       case 'Q':done=1; break;
  80.       case 'A':
  81.         nl();
  82.         prt(2,"New name? ");
  83.         inputl(s,40);
  84.         if (s[0])
  85.           strcpy(r.name,s);
  86.         break;
  87.       case 'B':
  88.         nl();
  89.         prt(2,"New filename? ");
  90.         input(s,8);
  91.         if ((s[0]!=0) && (strchr(s,'.')==0))
  92.           strcpy(r.filename,s);
  93.         break;
  94.       case 'C':
  95.         nl();
  96.         pl("Enter new path, optionally with drive specifier.");
  97.         pl("No backslash on end.");
  98.         prt(2,"New Path? ");
  99.         input(s,80);
  100.         if (s[0]) {
  101.           if (chdir(s)) {
  102.             chdir(cdir);
  103.             if (mkdir(s)) {
  104.               pl("Unable to create or change to directory.");
  105.               pl("Hit any key.");
  106.               getkey();
  107.               s[0]=0;
  108.             }
  109.           } else {
  110.             chdir(cdir);
  111.           }
  112.           if (s[0]) {
  113.             strcat(s,"\\");
  114.             strcpy(r.path,s);
  115.             pl("Path for directory changed.");
  116.             pl("If there are any files in it, you must");
  117.             pl("manually move them to the new directory.");
  118.             pl("Hit any key.");
  119.             getkey();
  120.           }
  121.         }
  122.         break;
  123.       case 'D':
  124.         nl();
  125.         prt(2,"New DSL? ");
  126.         input(s,3);
  127.         i=atoi(s);
  128.         if ((i>=0) && (i<256) && (s[0]))
  129.           r.dsl=i;
  130.         break;
  131.       case 'E':
  132.         nl();
  133.         prt(2,"New Min Age? ");
  134.         input(s,3);
  135.         i=atoi(s);
  136.         if ((i>=0) && (i<128) && (s[0]))
  137.           r.age=i;
  138.         break;
  139.       case 'F':
  140.         nl();
  141.         prt(2,"New max files? ");
  142.         input(s,3);
  143.         i=atoi(s);
  144.         if ((i>0) && (i<500) && (s[0]))
  145.           r.maxfiles=i;
  146.         break;
  147.       case 'G':
  148.         nl();
  149.         prt(2,"New DAR (<SPC>=None) ? ");
  150.         ch2=onek("ABCDEFGHIJKLMNOP ");
  151.         if (ch2==32)
  152.           r.dar=0;
  153.         else
  154.           r.dar=1 << (ch2-'A');
  155.         break;
  156.       case 'H':
  157.         nl();
  158.         prt(2,"New Mask? ");
  159.         input(s,3);
  160.         i=atoi(s);
  161.         if ((i>=0) && (i<32767) && (s[0]))
  162.           r.mask=i;
  163.         break;
  164.       case 'I':
  165.         nl();
  166.         prt(2,"New Dir Type? ");
  167.         input(s,4);
  168.         i=atoi(s);
  169.         if (s[0])
  170.           r.type=i;
  171.         break;
  172.       case 'J':
  173.         r.mask &= ~mask_no_uploads;
  174.         nl();
  175.         prt(5,"Allow uploads to this directory? ");
  176.         if (!ny())
  177.           r.mask |= mask_no_uploads;
  178.         break;
  179.       case 'K':
  180.         r.mask &= ~mask_archive;
  181.         nl();
  182.         prt(5,"Require uploads to be archived? ");
  183.         if (yn())
  184.           r.mask |= mask_archive;
  185.         break;
  186.     }
  187.   } while ((!done) && (!hangup));
  188.   directories[n]=r;
  189. }
  190.  
  191. void insert_dir(int n)
  192. {
  193.   directoryrec r;
  194.   int i,i1,nu;
  195.   userrec u;
  196.   long l1,l2,l3;
  197.  
  198.   for (i=num_dirs-1; i>=n; i--) {
  199.     directories[i+1]=directories[i];
  200.     dir_dates[i+1]=dir_dates[i];
  201.   }
  202.   strcpy(r.name,"** NEW DIR **");
  203.   strcpy(r.filename,"NONAME");
  204.   strcpy(r.path,syscfg.dloadsdir);
  205.   r.dsl=10;
  206.   r.age=0;
  207.   r.maxfiles=50;
  208.   r.dar=0;
  209.   r.type=0;
  210.   r.mask=0;
  211.   directories[n]=r;
  212.   ++num_dirs;
  213.   read_user(1,&u);
  214.   nu=number_userrecs();
  215.   if (n>=32) {
  216.     l1=0xffffffff >>(64-n);
  217.     l2=0xffffffff <<(n-31);
  218.     l3=1L << (n-32);
  219.     for (i=1; i<=nu; i++) {
  220.       read_user(i,&u);
  221.       u.nscn2=(u.nscn2 & l1) | ((u.nscn2 << 1) & l2) | l3;
  222.       write_user(i,&u);
  223.     }
  224.   } else {
  225.     l1=0xffffffff >>(32-n);
  226.     l2=0xffffffff <<(n+1);
  227.     l3=1L << n;
  228.     for (i=1; i<=nu; i++) {
  229.       read_user(i,&u);
  230.       u.nscn2=(u.nscn2 << 1) | (u.nscn1 >> 31);
  231.       u.nscn1=(u.nscn1 & l1) | ((u.nscn1 << 1) & l2) | l3;
  232.       write_user(i,&u);
  233.     }
  234.   }
  235.   modify_dir(n);
  236. }
  237.  
  238. void delete_dir(int n)
  239. {
  240.   int i,i1,nu;
  241.   userrec u;
  242.   long l1,l2;
  243.  
  244.   for (i=n; i<num_dirs; i++) {
  245.     directories[i]=directories[i+1];
  246.     dir_dates[i]=dir_dates[i+1];
  247.   }
  248.   --num_dirs;
  249.   read_user(1,&u);
  250.   nu=number_userrecs();
  251.   if (n>=32) {
  252.     l1=0xffffffff >>(64-n);
  253.     l2=0xffffffff <<(n-32);
  254.     for (i=1; i<=nu; i++) {
  255.       read_user(i,&u);
  256.       u.nscn2=(u.nscn2 & l1) | ((u.nscn2 >> 1) & l2);
  257.       write_user(i,&u);
  258.     }
  259.   } else {
  260.     l1=0xffffffff >>(32-n);
  261.     l2=0xffffffff <<(n);
  262.     for (i=1; i<=nu; i++) {
  263.       read_user(i,&u);
  264.       u.nscn1=(u.nscn1 & l1) | ((u.nscn1 >> 1) & l2) | (u.nscn2 << 31);
  265.       u.nscn2=u.nscn2 >> 1;
  266.       write_user(i,&u);
  267.     }
  268.   }
  269. }
  270.  
  271. void dlboardedit()
  272. {
  273.   int i,i1,i2,done,f;
  274.   char s[81],s1[81],s2[81],ch;
  275.  
  276.   showdirs();
  277.   done=0;
  278.   do {
  279.     nl();
  280.     prt(2,"Dirs: D:elete, I:nsert, M:odify, Q:uit, ? : ");
  281.     ch=onek("QDIM?");
  282.     switch(ch) {
  283.       case '?':
  284.         showdirs();
  285.         break;
  286.       case 'Q':
  287.         done=1;
  288.         break;
  289.       case 'M':
  290.         nl();
  291.         prt(2,"Dir number? ");
  292.         input(s,2);
  293.         i=atoi(s);
  294.         if ((s[0]!=0) && (i>=0) && (i<num_dirs))
  295.           modify_dir(i);
  296.         break;
  297.       case 'I':
  298.         if (num_dirs<64) {
  299.           nl();
  300.           prt(2,"Insert before which dir? ");
  301.           input(s,2);
  302.           i=atoi(s);
  303.           if ((s[0]!=0) && (i>=0) && (i<=num_dirs))
  304.             insert_dir(i);
  305.         }
  306.         break;
  307.       case 'D':
  308.         nl();
  309.         prt(2,"Delete which dir? ");
  310.         input(s,2);
  311.         i=atoi(s);
  312.         if ((s[0]!=0) && (i>=0) && (i<num_dirs)) {
  313.           nl();
  314.           sprintf(s1,"Delete %s? ",directories[i].name);
  315.           prt(5,s1);
  316.           if (yn())
  317.             delete_dir(i);
  318.         }
  319.         break;
  320.     }
  321.   } while ((!done) && (!hangup));
  322.   sprintf(s,"%sDIRS.DAT",syscfg.datadir);
  323.   f=open(s,O_RDWR | O_BINARY | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE);
  324.   write(f,(void *)&directories[0], num_dirs * sizeof(directoryrec));
  325.   close(f);
  326.   if (!wfc)
  327.     changedsl();
  328. }
  329.