---[  Phrack Magazine   Volume 7, Issue 51 September 01, 1997, article 17 of 17


-------------------------[  Phrack Magzine Extraction Utility


--------[  Phrack Staff

   This time around, you have the option of using the C version of extract,
or the PERL version, contributed by Daos.


---------------------8<------------CUT-HERE----------->8---------------------

/*  extract.c by Phrack Staff and sirsyko
*
*  (c) Phrack Magazine, 1997
*
*  Extracts textfiles from a specially tagged flatfile into a hierarchical
*  directory strcuture. Use to extract source code from any of the articles
*  in Phrack Magazine (first appeared in Phrack 50).
*
*  gcc -o extract extract.c
*
*  ./extract filename
*/


#include <stdio.h>
#include <sys/stat.h>
#include <string.h>

int main(int argc, char **argv){

   char *s="<++> ",*e="<-->",b[256],*bp;
   FILE *f,*o = NULL;
   int l, n, i=0;

   l = strlen(s);
   n = strlen(e);

   if(argc<2) {
       printf("Usage: %s <inputfile>\n",argv[0]);
       exit(1);
   }

   if(! (f=fopen(argv[1], "r"))) {
       printf("Could not open input file.\n");
       exit(1);
   }

   while(fgets(b, 256, f)){

       if(!strncmp (b, s, l)){
           b[strlen(b)-1] = '\0';

           if((bp=strchr(b+l+1,'/')))
               while (bp){
                   *bp='\0';
                   mkdir(b+l, 0700);
                   *bp='/';
                   bp=strchr(bp+1,'/');
               }
           if((o = fopen(b+l, "w")))
               printf("- Extracting %s\n",b+l);
           else {
               printf("Could not extract '%s'\n",b+l);
               exit(1);
           }
       }
       else if(!strncmp (b, e, n)){
           if(o) fclose(o);
           else {
               printf("Error closing file.\n");
               exit(1);
           }
       }
       else if(o) {
           fputs(b, o);
           i++;
       }
   }
   if(!i) printf("No extraction tags found.\n");
   return(0);
}

---------------------8<------------CUT-HERE----------->8---------------------

# Daos <[email protected]>

<++> extract.pl
#!/bin/sh -- # -*- perl -*- -n
eval 'exec perl $0 -S ${1+"$@"}' if 0;

$opening=0;

if (/^\<\+\+\>/) {$curfile = substr($_ , 5); $opening=1;};
if (/^\<\-\-\>/) {close ct_ex; $opened=0;};
if ($opening) {
       chop $curfile;
       $sex_dir= substr( $curfile, 0, ((rindex($curfile,'/'))) ) if ($curfile =~ m/\//);
       eval {mkdir $sex_dir, "0777";};
       open(ct_ex,">$curfile");
       print "Attempting extraction of $curfile\n";
       $opened=1;
}
if ($opened && !$opening) {print ct_ex $_};
<-->

----[  EOF