Initial version
[spider.git] / perl / persist.c
diff --git a/perl/persist.c b/perl/persist.c
new file mode 100644 (file)
index 0000000..d0839e0
--- /dev/null
@@ -0,0 +1,48 @@
+       
+       /* persistent.c */
+#include <EXTERN.h>
+#include <perl.h>
+       
+       /* 1 = clean out filename's symbol table after each request, 0 = don't */
+#ifndef DO_CLEAN
+# define DO_CLEAN 0
+#endif
+       
+static PerlInterpreter *perl = NULL;
+
+int    main(int argc, char **argv, char **env)
+{
+       char *embedding[] = { "", "persistent.pl"};
+       char *args[] = { "", DO_CLEAN, NULL     };
+       char filename [1024];
+       int exitstatus = 0;
+       
+       if ((perl = perl_alloc()) == NULL) {
+               fprintf(stderr, "no memory!");
+               exit(1);
+       }
+       perl_construct(perl);
+       
+       exitstatus = perl_parse(perl, NULL, 2, embedding, NULL);
+       
+       if(!exitstatus) {
+               exitstatus = perl_run(perl);
+               
+               while(printf("Enter file name: ") && gets(filename)) {
+                       
+                       /* call the subroutine, passing it the filename as an argument */
+                       args[0] = filename;
+                       perl_call_argv("Embed::Persistent::eval_file",
+                                                  G_DISCARD | G_EVAL, args);
+                       
+                       /* check $@ */
+                       if(SvTRUE(GvSV(errgv)))
+                               fprintf(stderr, "eval error: %s\n", SvPV(GvSV(errgv),na));
+               }
+       }
+       
+       perl_destruct_level = 0;
+       perl_destruct(perl);
+       perl_free(perl);
+       exit(exitstatus);
+}