home *** CD-ROM | disk | FTP | other *** search
/ The Devil's Doorknob BBS Capture (1996-2003) / devilsdoorknobbbscapture1996-2003.iso / UTIL / WWIVE / GFLEDIT.C < prev    next >
Text File  |  1991-12-26  |  7KB  |  329 lines

  1. /*****************************************************************************
  2.  
  3.                 WWIV Version 4
  4.                     Copyright (C) 1988-1991 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.  
  25. #define utoa(s,v,r) ultoa((unsigned long)(s),v,r)
  26.  
  27.  
  28. void gfiledata(int n, char *s)
  29. {
  30.   char x,y,k,i;
  31.   gfiledirrec r;
  32.  
  33.   r=gfilesec[n];
  34.   if (r.ar==0)
  35.     x=32;
  36.   else {
  37.     for (i=0; i<16; i++)
  38.       if ((1 << i) & r.ar)
  39.         x='A'+i;
  40.   }
  41.   sprintf(s,"3%2d %1c  %-40s  %-8s %-3d %-3d %-3d",
  42.             n,x,r.name,r.filename,r.sl,r.age,r.maxfiles);
  43. }
  44.  
  45. void showsec()
  46. {
  47.   int abort,i;
  48.   char s[180];
  49.  
  50.   outchr(12);
  51.   abort=0;
  52.   pla("3NN AR Name                                      FN       SL  AGE MAX",
  53.       &abort);
  54.   pla("7════════════════════════════════════════════════════════════════════",
  55.       &abort);
  56.   for (i=0; (i<num_sec) && (!abort); i++) {
  57.     gfiledata(i,s);
  58.     pla(s,&abort);
  59.   }
  60. }
  61.  
  62.  
  63. int exist_dir(char *s)
  64. {
  65.   int ok;
  66.  
  67.   cd_to(syscfg.gfilesdir);
  68.   if (chdir(s))
  69.     ok=0;
  70.   else
  71.     ok=1;
  72.   cd_to(cdir);
  73.   return(ok);
  74. }
  75.  
  76.  
  77. void modify_sec(int n)
  78. {
  79.   gfiledirrec r;
  80.   char s[81],s1[81],ch,ch2;
  81.   int i,i1,done;
  82.  
  83.   r=gfilesec[n];
  84.   done=0;
  85.   do {
  86.     outchr(12);
  87.     npr("1A.3 Name      1 :7 %s\r\n",r.name);
  88.     npr("1B.3 Filename  1 :7 %s\r\n",r.filename);
  89.     npr("1C.3 SL        1 :7 %d\r\n",r.sl);
  90.     npr("1D.3 Min. Age  1 :7 %d\r\n",r.age);
  91.     npr("1E.3 Max Files 1 :7 %d\r\n",r.maxfiles);
  92.     strcpy(s,"None.");
  93.     if (r.ar!=0) {
  94.       for (i=0; i<16; i++)
  95.         if ((1 << i) & r.ar)
  96.           s[0]='A'+i;
  97.       s[1]=0;
  98.     }
  99.     npr("1F.3 AR        1 :7 %s\r\n",s);
  100.     nl();
  101.     prt(7,"[1Which7] 5(1A-F,Q5) 3? ");
  102.     ch=onek("QABCDEF");
  103.     switch(ch) {
  104.       case 'Q':done=1; break;
  105.       case 'A':
  106.         nl();
  107.     prt(1,"New name? ");
  108.     inputl(s,40);
  109.     if (s[0])
  110.       strcpy(r.name,s);
  111.     break;
  112.       case 'B':
  113.     nl();
  114.     if (exist_dir(r.filename)) {
  115.           nl();
  116.       pl("3There is currently a directory for this g-file section.");
  117.       pl("3If you change the filename, the directory will still be there.");
  118.       nl();
  119.     }
  120.         nl();
  121.     prt(1,"New filename? ");
  122.     input(s,8);
  123.     if ((s[0]!=0) && (strchr(s,'.')==0)) {
  124.       strcpy(r.filename,s);
  125.       if (!exist_dir(r.filename)) {
  126.             nl();
  127.         prt(5,"Create directory for this section? ");
  128.         if (yn()) {
  129.           cd_to(syscfg.gfilesdir);
  130.           mkdir(r.filename);
  131.           cd_to(cdir);
  132.         } else {
  133.           nl();
  134.           pl("3You will have to create the directory manually, then.");
  135.           nl();
  136.         }
  137.       } else {
  138.         nl();
  139.         pl("3A directory already exists under this filename.");
  140.         nl();
  141.       }
  142.       pausescr();
  143.     }
  144.         break;
  145.       case 'C':
  146.         nl();
  147.     prt(1,"New SL? ");
  148.     input(s,3);
  149.     i=atoi(s);
  150.     if ((i>=0) && (i<256) && (s[0]))
  151.       r.sl=i;
  152.     break;
  153.       case 'D':
  154.         nl();
  155.     prt(1,"New Min Age? ");
  156.     input(s,3);
  157.     i=atoi(s);
  158.     if ((i>=0) && (i<128) && (s[0]))
  159.       r.age=i;
  160.     break;
  161.       case 'E':
  162.         nl();
  163.     pl("7Max 99 files/section.");
  164.     prt(1,"New max files? ");
  165.     input(s,3);
  166.     i=atoi(s);
  167.     if ((i>=0) && (i<99) && (s[0]))
  168.       r.maxfiles=i;
  169.     break;
  170.       case 'F':
  171.         nl();
  172.     prt(1,"New AR 5(7<1SPC7>1=None5) 1? ");
  173.         ch2=onek("ABCDEFGHIJKLMNOP ");
  174.         if (ch2==32)
  175.           r.ar=0;
  176.         else
  177.           r.ar=1 << (ch2-'A');
  178.         break;
  179.     }
  180.   } while ((!done) && (!hangup));
  181.   gfilesec[n]=r;
  182. }
  183.  
  184.  
  185. void insert_sec(int n)
  186. {
  187.   gfiledirrec r;
  188.   int i,i1,nu;
  189.  
  190.   for (i=num_sec-1; i>=n; i--)
  191.     gfilesec[i+1]=gfilesec[i];
  192.   strcpy(r.name,"** NEW SECTION **");
  193.   strcpy(r.filename,"NONAME");
  194.   r.sl=10;
  195.   r.age=0;
  196.   r.maxfiles=99;
  197.   r.ar=0;
  198.   gfilesec[n]=r;
  199.   ++num_sec;
  200.   modify_sec(n);
  201. }
  202.  
  203.  
  204. void delete_sec(int n)
  205. {
  206.   int i,i1,nu;
  207.  
  208.   for (i=n; i<num_sec; i++)
  209.     gfilesec[i]=gfilesec[i+1];
  210.   --num_sec;
  211. }
  212.  
  213.  
  214. void gfileedit()
  215. {
  216.   int i,i1,i2,done,f;
  217.   char s[81],s1[81],s2[81],ch;
  218.  
  219.   if (!checkpw())
  220.     return;
  221.   showsec();
  222.   done=0;
  223.   do {
  224.     nl();
  225.     prt(1,"G-files: 7D1:elete, 7I1:nsert, 7M1:odify, 7Q1:uit, ? : ");
  226.     ch=onek("QDIM?");
  227.     switch(ch) {
  228.       case '?':
  229.         showsec();
  230.         break;
  231.       case 'Q':
  232.         done=1;
  233.         break;
  234.       case 'M':
  235.         nl();
  236.     prt(1,"Section number? ");
  237.     input(s,2);
  238.     i=atoi(s);
  239.     if ((s[0]!=0) && (i>=0) && (i<num_sec))
  240.       modify_sec(i);
  241.     break;
  242.       case 'I':
  243.         if (num_sec<32) {
  244.           nl();
  245.       prt(1,"Insert before which section? ");
  246.       input(s,2);
  247.       i=atoi(s);
  248.       if ((s[0]!=0) && (i>=0) && (i<=num_sec))
  249.         insert_sec(i);
  250.     }
  251.     break;
  252.       case 'D':
  253.         nl();
  254.     prt(1,"Delete which section? ");
  255.     input(s,2);
  256.     i=atoi(s);
  257.     if ((s[0]!=0) && (i>=0) && (i<num_sec)) {
  258.       nl();
  259.       ansic(5);
  260.       npr("3Delete %s? ",gfilesec[i].name);
  261.       if (yn())
  262.             delete_sec(i);
  263.         }
  264.         break;
  265.     }
  266.   } while ((!done) && (!hangup));
  267.   sprintf(s,"%sGFILE.DAT",syscfg.datadir);
  268.   f=open(s,O_RDWR | O_BINARY | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE);
  269.   write(f,(void *)(&gfilesec[0]), num_sec * sizeof(gfiledirrec));
  270.   close(f);
  271. }
  272.  
  273.  
  274. int fill_sec(int sn)
  275. {
  276.   gfilerec *g,g1;
  277.   int f1,nf,ok,i,i1,i2,chd;
  278.   char s[81],s1[81];
  279.   struct ffblk ff;
  280.  
  281.   g=read_sec(sn,&nf);
  282.   sprintf(s1,"%s%s\\*.*",syscfg.gfilesdir,gfilesec[sn].filename);
  283.   f1=findfirst(s1,&ff,0);
  284.   ok=1;
  285.   chd=0;
  286.   while ((f1==0) && (!hangup) && (nf<gfilesec[sn].maxfiles) && (ok)) {
  287.     strcpy(s,(ff.ff_name));
  288.     align(s);
  289.     i=1;
  290.     for (i1=0; i1<nf; i1++)
  291.       if (compare(s,g[i1].filename))
  292.     i=0;
  293.     if (i) {
  294.       ansic(2);
  295.       npr("%s : ",s);
  296.       inputl(s1,60);
  297.       if (s1[0]) {
  298.     chd=1;
  299.     i=0;
  300.     while ((strcmp(s1,g[i].description)>0) && (i<nf))
  301.       ++i;
  302.     for (i1=nf; i1>i; i1--)
  303.       g[i1]=g[i1-1];
  304.     ++nf;
  305.     strcpy(g1.filename,s);
  306.     strcpy(g1.description,s1);
  307.     time(&(g1.daten));
  308.     g[i]=g1;
  309.       } else
  310.     ok=0;
  311.     }
  312.     f1=findnext(&ff);
  313.   }
  314.   if (!ok)
  315.     pl("6Aborted.");
  316.   if (nf>=gfilesec[sn].maxfiles)
  317.     pl("6Section full.");
  318.   if (chd) {
  319.     sprintf(s,"%s%s.GFL",syscfg.datadir,gfilesec[sn].filename);
  320.     i=open(s,O_RDWR | O_BINARY | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE);
  321.     write(i,(void *)g,nf*sizeof(gfilerec));
  322.     close(i);
  323.   }
  324.   farfree(g);
  325.   return(!ok);
  326. }
  327.  
  328.  
  329.