home *** CD-ROM | disk | FTP | other *** search
/ The Devil's Doorknob BBS Capture (1996-2003) / devilsdoorknobbbscapture1996-2003.iso / UTIL / WWIVE / MYWIVE.ZIP / DIREDIT.C < prev    next >
C/C++ Source or Header  |  1993-05-06  |  8KB  |  322 lines

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