--- /dev/null
+
+#define GLITE_JP_FILETYPE_TAGS "urn:org.glite.jp.primary:tags"
+#define GLITE_JP_FILETYPE_LB "urn:org.glite.jp.primary:lb"
+#define GLITE_JP_FILETYPE_ISB "urn:org.glite.jp.primary:isb"
+#define GLITE_JP_FILETYPE_OSB "urn:org.glite.jp.primary:osb"
+
+#define GLITE_JP_FPLUG_TAGS_APPEND 0
--- /dev/null
+#include <stdio.h>
+#include <getopt.h>
+#include <dlfcn.h>
+#include <errno.h>
+
+#include <glite/jp/types.h>
+#include "file_plugin.h"
+
+static struct option opts[] = {
+ { "plugin", 1, NULL, 'p' },
+ { NULL }
+};
+
+static void *loadit(glite_jp_context_t ctx,const char *so)
+{
+ void *dl_handle = dlopen(so,RTLD_NOW);
+ glite_jp_error_t err;
+ char *e;
+
+ glite_jpps_fplug_init_t init;
+
+ if (!dl_handle) {
+ err.source = "dlopen()";
+ err.code = EINVAL;
+ err.desc = dlerror();
+ glite_jp_stack_error(ctx,&err);
+ return NULL;
+ }
+
+ dlerror();
+ init = dlsym(dl_handle,"init");
+ e = dlerror();
+ if (e) {
+ char buf[300];
+ snprintf(buf,sizeof buf,"dlsym(\"%s\",\"init\")",so);
+ buf[299] = 0;
+ err.source = buf;
+ err.code = ENOENT;
+ err.desc = e;
+ }
+
+ /* FIXME: zavolat init */
+
+}
+
+int glite_jpps_fplug_load(glite_jp_context_t ctx,int *argc,char **argv)
+{
+ int opt;
+ void *fctx;
+
+ while ((opt = getopt_long(*argc,argv,"p:",opts,NULL)) != EOF) switch (opt) {
+ case 'p': fctx = loadit(ctx,optarg);
+ if (!fctx) return -1;
+ default: break;
+ }
+
+ return 0;
+}
+
+int glite_jpps_fplug_lookup(glite_jp_context_t ctx,const char *uri, glite_jpps_fplug_data_t *plugin_data)
+{
+ /* TODO */
+ return 0;
+}
+