* Europagate, 1995
*
* $Log: main.c,v $
- * Revision 1.2 1995/02/16 13:21:00 adam
+ * Revision 1.3 1995/02/16 18:35:09 adam
+ * First use of Zdist library. Search requests are supported.
+ * Present requests are not supported yet.
+ *
+ * Revision 1.2 1995/02/16 13:21:00 adam
* Organization of resource files for targets and conversion
* language implemented.
*
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
#include "kernel.h"
-GwRes kernel_res = NULL;
-const char *default_res = "default.res";
-const char *target = NULL;
-const char *lang = NULL;
-CCL_bibset bibset = NULL;
-
FILE *reply_fd = stdout;
+struct gw_kernel_info info;
+
int main (int argc, char **argv)
{
+ info.kernel_res = NULL;
+ info.default_res = "default.res";
+ info.override_res = NULL;
+ *info.target = 0;
+ info.lang = NULL;
+ info.bibset = NULL;
+ info.zass = NULL;
+ info.override_portno = NULL;
+ info.override_hostname = NULL;
+ info.databases = NULL;
+
gw_log_init (*argv);
- kernel_res = gw_res_init ();
+ info.kernel_res = gw_res_init ();
while (--argc > 0)
{
if (**++argv == '-')
break;
case 't':
if (argv[0][2])
- target = argv[0]+2;
+ strcpy (info.target, argv[0]+2);
else if (argc > 0)
{
--argc;
- target= *++argv;
+ strcpy (info.target, *++argv);
}
else
{
break;
case 'l':
if (argv[0][2])
- lang = argv[0]+2;
+ info.lang = argv[0]+2;
else if (argc > 0)
{
--argc;
- lang = *++argv;
+ info.lang = *++argv;
}
else
{
exit (1);
}
break;
+ case 'o':
+ if (argv[0][2])
+ info.override_res = argv[0]+2;
+ else if (argc > 0)
+ {
+ --argc;
+ info.override_res = *++argv;
+ }
+ else
+ {
+ gw_log (GW_LOG_FATAL, "main", "missing language name");
+ exit (1);
+ }
+ break;
+ case 'p':
+ if (argv[0][2])
+ info.override_portno = argv[0]+2;
+ else if (argc > 0)
+ {
+ --argc;
+ info.override_portno = *++argv;
+ }
+ else
+ {
+ gw_log (GW_LOG_FATAL, "main", "missing portno");
+ exit (1);
+ }
+ break;
+ case 'h':
+ if (argv[0][2])
+ info.override_hostname = argv[0]+2;
+ else if (argc > 0)
+ {
+ --argc;
+ info.override_hostname = *++argv;
+ }
+ else
+ {
+ gw_log (GW_LOG_FATAL, "main", "missing hostname");
+ exit (1);
+ }
+ break;
default:
gw_log (GW_LOG_FATAL, "main", "unknown option %s", *argv);
exit (1);
}
}
else
- default_res = *argv;
+ info.default_res = *argv;
}
read_kernel_res ();
urp (stdin);
char path_prefix[128];
char fname[160];
const char *v;
+ char *cp;
char resource_name[256];
- bibset = ccl_qual_mk ();
+ if (info.bibset)
+ ccl_qual_rm (&info.bibset);
+ info.bibset = ccl_qual_mk ();
+
+ if (info.kernel_res)
+ gw_res_close (info.kernel_res);
+ info.kernel_res = gw_res_init ();
gw_log (GW_LOG_DEBUG, "main", "reading kernel resource, default %s",
- default_res);
- if (target)
+ info.default_res);
+ if (*info.target)
gw_log (GW_LOG_DEBUG, "main", "reading kernel resource, target %s",
- target);
- if (lang)
+ info.target);
+ if (info.lang)
gw_log (GW_LOG_DEBUG, "main", "reading kernel resource, lang %s",
- lang);
- if (kernel_res)
- gw_res_close (kernel_res);
- kernel_res = gw_res_init ();
- if (gw_res_merge (kernel_res, default_res))
+ info.lang);
+
+ if (gw_res_merge (info.kernel_res, info.default_res))
{
gw_log (GW_LOG_WARN, "main", "Couldn't read resource file %s",
- default_res);
+ info.default_res);
return;
}
- strcpy (path_prefix, gw_res_get (kernel_res, "gw.path", "."));
+ strcpy (path_prefix, gw_res_get (info.kernel_res, "gw.path", "."));
- if (target)
+ if (*info.target)
{
- sprintf (resource_name, "gw.target.%s", target);
- v = gw_res_get (kernel_res, resource_name, NULL);
+ sprintf (resource_name, "gw.target.%s", info.target);
+ v = gw_res_get (info.kernel_res, resource_name, NULL);
if (v)
{
sprintf (fname, "%s/%s", path_prefix, v);
- gw_res_merge (kernel_res, fname);
+ gw_res_merge (info.kernel_res, fname);
}
- }
- if (lang)
+ }
+ if (info.lang)
{
- sprintf (resource_name, "gw.lang.%s", lang);
- v = gw_res_get (kernel_res, resource_name, NULL);
+ sprintf (resource_name, "gw.lang.%s", info.lang);
+ v = gw_res_get (info.kernel_res, resource_name, NULL);
if (v)
{
sprintf (fname, "%s/%s", path_prefix, v);
- gw_res_merge (kernel_res, fname);
+ gw_res_merge (info.kernel_res, fname);
}
}
- v = gw_res_get (kernel_res, "gw.bibset", NULL);
+ if (info.override_res)
+ {
+ sprintf (fname, "%s/%s", path_prefix, info.override_res);
+ gw_res_merge (info.kernel_res, fname);
+ }
+ v = gw_res_get (info.kernel_res, "gw.bibset", NULL);
if (v)
{
FILE *bib_inf;
else
{
gw_log (GW_LOG_DEBUG, "main", "reading bib file %s", fname);
- ccl_qual_file (bibset, bib_inf);
+ ccl_qual_file (info.bibset, bib_inf);
fclose (bib_inf);
}
}
+ sprintf (resource_name, "gw.target.%s", info.target);
+ if (*info.target && ! gw_res_get (info.kernel_res, resource_name, NULL))
+ {
+ /* target is there, and there is no sub-resource for it... */
+ char *split;
+
+ if ((split = strchr (info.target, ':')))
+ *split++ = '\0';
+ strncpy (info.hostname, info.target, sizeof(info.hostname)-1);
+ if (split)
+ info.port = atoi (split);
+ else
+ info.port = atoi (gw_res_get
+ (info.kernel_res, "gw.portno", "210"));
+ }
+ else
+ {
+ strncpy (info.hostname, gw_res_get (info.kernel_res,
+ "gw.hostname", "localhost"),
+ sizeof(info.hostname)-1);
+ info.port = atoi (gw_res_get (info.kernel_res,
+ "gw.portno", "210"));
+ }
+ if (info.databases)
+ free (info.databases);
+ v = gw_res_get (info.kernel_res, "gw.databases", "Default");
+ info.databases = malloc (1+strlen(v));
+ assert (info.databases);
+ strcpy (info.databases, v);
+ for (cp = info.databases; (cp = strchr (cp, ' ')); cp++)
+ *cp = ',';
+ if (info.override_portno)
+ info.port = atoi (info.override_portno);
+ if (info.override_hostname)
+ strncpy (info.hostname, info.override_hostname,
+ sizeof(info.hostname)-1);
}