home *** CD-ROM | disk | FTP | other *** search
/ The Devil's Doorknob BBS Capture (1996-2003) / devilsdoorknobbbscapture1996-2003.iso / UTIL / WWIVE / MYWIVE.ZIP / GFILES.C < prev    next >
Text File  |  1993-05-06  |  5KB  |  226 lines

  1. #include "vars.h"
  2. #pragma hdrstop
  3.  
  4. char *get_file(char *fn, long *len)
  5. {
  6.   int i;
  7.   char *s;
  8.  
  9.   i=open(fn,O_RDWR | O_BINARY);
  10.   if (i<0) {
  11.     *len=0L;
  12.     return(NULL);
  13.   }
  14.   if ((s=malloca(filelength(i)+50))==NULL) {
  15.     *len=0L;
  16.     close(i);
  17.     return(NULL);
  18.   }
  19.   *len=(long) read(i,(void *)s, filelength(i));
  20.   close(i);
  21.   return(s);
  22. }
  23.  
  24. gfilerec *read_sec(int sn, int *nf)
  25. {
  26.   gfilerec *g;
  27.   int f,i;
  28.   char s[81];
  29.  
  30.   i=sizeof(gfilerec)*(gfilesec[sn].maxfiles);
  31.   if ((g=malloca((long) i))==NULL) {
  32.     *nf=0;
  33.     return(NULL);
  34.   }
  35.   sprintf(s,"%s%s.GFL",syscfg.datadir,gfilesec[sn].filename);
  36.   f=open(s,O_RDWR | O_BINARY);
  37.   if (f<0)
  38.     *nf=0;
  39.   else
  40.     *nf=read(f,(void *)g,i)/sizeof(gfilerec);
  41.   close(f);
  42.   return(g);
  43. }
  44.  
  45. void list_sec(int *map, int nmap)
  46. {
  47.   int i,abort;
  48.   char s[81];
  49.  
  50.   abort=0;
  51.   pla("",&abort);
  52.   pla("",&abort);
  53.   pla("1G-Files sections available:",&abort);
  54.   pla("",&abort);
  55.   for (i=0; (i<nmap) && (!abort) && (!hangup); i++) {
  56.     sprintf(s,"7[1%2d7] 1%s",i+1, gfilesec[map[i]].name);
  57.     pla(s,&abort);
  58.   }
  59.   nl();
  60. }
  61.  
  62. void list_gfiles(gfilerec *g, int nf)
  63. {
  64.   int i,abort;
  65.   char s[81];
  66.  
  67.   abort=0;
  68.   pla("",&abort);
  69.   pla("",&abort);
  70.   pla("1G-Files in this section:",&abort);
  71.   pla("",&abort);
  72.   if ((nf==0) && (abort==0)) {
  73.     nl();
  74.     pl("6None.");
  75.     nl();
  76.   }
  77.   for (i=0; (i<nf) && (!abort) && (!hangup); i++) {
  78.     sprintf(s,"7[1%2d7] 1%s",i+1, g[i].description);
  79.     pla(s,&abort);
  80.   }
  81.   nl();
  82.   if ((!abort) && (cs())) {
  83.     pl("1A. Add G-files");
  84.     pl("1D. Delete G-files");
  85.     nl();
  86.   }
  87. }
  88.  
  89. void gfile_sec(int sn)
  90. {
  91.   gfilerec *g;
  92.   int i,done,nf,i1;
  93.   char xdc[81],*ss,*ss1,s[81];
  94.  
  95.   g=read_sec(sn,&nf);
  96.   if (g==NULL)
  97.     return;
  98.   strcpy(xdc,odc);
  99.   for (i=0; i<20; i++)
  100.     odc[i]=0;
  101.   for (i=1; i<=nf/10; i++)
  102.     odc[i-1]=i+'0';
  103.   list_gfiles(g,nf);
  104.   done=0;
  105.   while ((!done) && (!hangup)) {
  106.     nl();
  107.     tleft(1);
  108.     prt(2,"1Which G7-1file 7(1Q7=1Quit7) 1? ");
  109.     ss=mmkey(2);
  110.     i=atoi(ss);
  111.     if (strcmp(ss,"Q")==0)
  112.       done=1;
  113.     else
  114.       if ((strcmp(ss,"A")==0) && (cs())) {
  115.     farfree(g);
  116.     fill_sec(sn);
  117.         g=read_sec(sn,&nf);
  118.         if (g==NULL)
  119.           return;
  120.         for (i=0; i<20; i++)
  121.           odc[i]=0;
  122.         for (i=1; i<=nf/10; i++)
  123.           odc[i-1]=i+'0';
  124.       } else
  125.     if ((strcmp(ss,"D")==0) && (cs())) {
  126.       nl();
  127.       prt(2,"G-file number to delete? ");
  128.           ss1=mmkey(2);
  129.       i=atoi(ss1);
  130.       if ((i>0) && (i<=nf)) {
  131.             sprintf(s,"Remove %s? ",g[i-1].description);
  132.         prt(5,s);
  133.         if (yn()) {
  134.           prt(5,"Erase file too? ");
  135.           if (yn()) {
  136.                 sprintf(s,"%s%s\\%s",syscfg.gfilesdir,
  137.                       gfilesec[sn].filename,g[i-1].filename);
  138.         unlink(s);
  139.           }
  140.               for (i1=i; i1<nf; i1++)
  141.         g[i1-1]=g[i1];
  142.           --nf;
  143.               sprintf(s,"%s%s.GFL",syscfg.datadir,gfilesec[sn].filename);
  144.               i=open(s,O_RDWR | O_BINARY | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE);
  145.               write(i,(void *)g,nf*sizeof(gfilerec));
  146.               close(i);
  147.               nl();
  148.           pl("Deleted.");
  149.           nl();
  150.         }
  151.       }
  152.     } else
  153.           if (strcmp(ss,"?")==0)
  154.         list_gfiles(g,nf);
  155.       else
  156.             if ((i>0) && (i<=nf)) {
  157.               sprintf(s,"%s\\%s",gfilesec[sn].filename,g[i-1].filename);
  158.           i1=printfile(s);
  159.           if (i1==0) {
  160.                 sprintf(s,"Read G-file '%s'",g[i-1].filename);
  161.             sysoplog(s);
  162.           }
  163.             }
  164.   }
  165.   farfree(g);
  166.   strcpy(odc,xdc);
  167. }
  168.  
  169. void gfiles()
  170. {
  171.   int i,i1,i2,done,abort,map[32],nmap,ok;
  172.   char s[81],s1[81],s2[81],*ss;
  173.  
  174.   done=0;
  175.   nmap=0;
  176.   for (i=0; i<20; i++)
  177.     odc[i]=0;
  178.   for (i=0; i<num_sec; i++) {
  179.     ok=1;
  180.     if (thisuser.age<gfilesec[i].age)
  181.       ok=0;
  182.     if (actsl<gfilesec[i].sl)
  183.       ok=0;
  184.     if (((thisuser.ar & gfilesec[i].ar)==0) && (gfilesec[i].ar))
  185.       ok=0;
  186.     if (ok) {
  187.       map[nmap++]=i;
  188.       if ((nmap % 10)==0)
  189.     odc[nmap/10-1]='0'+(nmap/10);
  190.     }
  191.   }
  192.   if (nmap==0) {
  193.     nl();
  194.     pl("No G-file sections available.");
  195.     nl();
  196.     return;
  197.   }
  198.   list_sec(map,nmap);
  199.   while ((!done) && (!hangup)) {
  200.     nl();
  201.     tleft(1);
  202.     prt(2,"1Which section 7(1Q7=1Quit7) 1? ");
  203.     ss=mmkey(2);
  204.     if (strcmp(ss,"Q")==0)
  205.       done=1;
  206.     else
  207.       if (strcmp(ss,"?")==0)
  208.     list_sec(map,nmap);
  209.       else
  210.     if ((strcmp(ss,"A")==0) && (cs())) {
  211.       i1=0;
  212.       for (i=0; (i<nmap) && (!i1); i++) {
  213.         nl();
  214.             npr("Now loading files for %s\r\n",gfilesec[map[i]].name);
  215.         nl();
  216.         i1=fill_sec(map[i]);
  217.       }
  218.     } else {
  219.           i=atoi(ss);
  220.           if ((i>0) && (i<=nmap)) {
  221.         gfile_sec(map[i-1]);
  222.           }
  223.         }
  224.   }
  225. }
  226.