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

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