Started work on virtual directory structure.
authorAdam Dickmeiss <adam@indexdata.dk>
Fri, 17 Nov 1995 15:54:41 +0000 (15:54 +0000)
committerAdam Dickmeiss <adam@indexdata.dk>
Fri, 17 Nov 1995 15:54:41 +0000 (15:54 +0000)
index/Makefile
index/dirs.c [new file with mode: 0644]
index/trav.c

index 06a2c19..9abdee1 100644 (file)
@@ -1,7 +1,7 @@
 # Copyright (C) 1995, Index Data I/S 
 # All rights reserved.
 # Sebastian Hammer, Adam Dickmeiss
-# $Id: Makefile,v 1.18 1995-11-16 17:00:55 adam Exp $
+# $Id: Makefile,v 1.19 1995-11-17 15:54:41 adam Exp $
 
 SHELL=/bin/sh
 RANLIB=ranlib
@@ -14,7 +14,7 @@ TPROG1=index
 TPROG2=kdump
 TPROG3=zserver
 DEFS=$(INCLUDE)
-O1 = main.o dir.o trav.o extract.o kinput.o kcompare.o \
+O1 = main.o dir.o dirs.o trav.o extract.o kinput.o kcompare.o \
  symtab.o text.o recctrl.o structrec.o recindex.o
 O2 = kdump.o
 O3 = zserver.o kcompare.o zrpn.o zsets.o text.o recctrl.o structrec.o  \
diff --git a/index/dirs.c b/index/dirs.c
new file mode 100644 (file)
index 0000000..d4460ba
--- /dev/null
@@ -0,0 +1,139 @@
+/*
+ * Copyright (C) 1994-1995, Index Data I/S 
+ * All rights reserved.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Log: dirs.c,v $
+ * Revision 1.1  1995-11-17 15:54:42  adam
+ * Started work on virtual directory structure.
+ *
+ * Revision 1.9  1995/10/30  13:42:12  adam
+ * Added errno.h
+ *
+ * Revision 1.8  1995/10/10  13:59:23  adam
+ * Function rset_open changed its wflag parameter to general flags.
+ *
+ * Revision 1.7  1995/09/28  09:19:40  adam
+ * xfree/xmalloc used everywhere.
+ * Extract/retrieve method seems to work for text records.
+ *
+ * Revision 1.6  1995/09/08  14:52:26  adam
+ * Minor changes. Dictionary is lower case now.
+ *
+ * Revision 1.5  1995/09/06  16:11:16  adam
+ * Option: only one word key per file.
+ *
+ * Revision 1.4  1995/09/04  12:33:41  adam
+ * Various cleanup. YAZ util used instead.
+ *
+ * Revision 1.3  1995/09/01  14:06:35  adam
+ * Split of work into more files.
+ *
+ * Revision 1.2  1995/09/01  10:57:07  adam
+ * Minor changes.
+ *
+ * Revision 1.1  1995/09/01  10:34:51  adam
+ * Added dir.c
+ *
+ */
+#include <stdio.h>
+#include <assert.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <ctype.h>
+
+#include <alexutil.h>
+#include "index.h"
+
+struct dirs_entry {
+    char path[160];
+    int sysno;
+};
+
+struct dirs_info {
+    int no;
+    struct dirs_entry *entries;
+};
+
+struct dirs_client_info {
+    struct dirs_info *di;
+    int no_max;
+    char *prefix;
+    int prelen;
+};
+
+static int dirs_client_proc (Dict_char *name, const char *info, int pos,
+                             void *client)
+{
+    struct dirs_client_info *ci = client;
+
+    if (memcmp (name, ci->prefix, ci->prelen))
+        return 1;
+    if (ci->di->no == ci->no_max)
+    {
+        if (ci->no_max > 0)
+        {
+            struct dirs_entry *arn;
+
+            ci->no_max += 1000;
+            arn = malloc (sizeof(*arn) * (ci->no_max));
+            if (!arn)
+            {
+                logf (LOG_FATAL|LOG_ERRNO, "malloc");
+                exit (1);
+            }
+            memcpy (arn, ci->di->entries, ci->di->no * sizeof(*arn));
+            free (ci->di->entries);
+            ci->di->entries = arn;
+        }
+    }
+    strcpy ((ci->di->entries + ci->di->no)->path, name); 
+    memcpy (&(ci->di->entries + ci->di->no)->sysno, info+1, *info);
+    assert (*info == sizeof(ci->di->entries->sysno));
+    ++(ci->di->no);
+    return 0;
+}
+
+struct dirs_info *dirs_open (Dict dict, const char *rep)
+{
+    static char wname[200];
+    static char pname[200];
+    int dirid;
+    char *dinfo;
+    struct dirs_client_info dirs_client_info;
+    struct dirs_info *p;
+    int before, after;
+
+    sprintf (wname, "d%s", rep);
+    dinfo = dict_lookup (dict, wname);
+    if (!dinfo)
+        return NULL;
+    if (!(p = malloc (sizeof (*p))))
+    {
+        logf (LOG_FATAL|LOG_ERRNO, "malloc");
+        exit (1);
+    }
+    memcpy (&dirid, dinfo+1, sizeof(dirid));
+    sprintf (wname, "%d.", dirid);
+    strcpy (pname, wname);
+
+    p->no = 0;
+    dirs_client_info.di = p;
+    dirs_client_info.no_max = 0;
+    dirs_client_info.prefix = wname;
+    dirs_client_info.prelen = strlen(wname);
+    strcpy (pname, wname);
+    dict_scan (dict, pname, &before, &after, &dirs_client_info,
+               dirs_client_proc);
+
+    return p;
+}
+
+void dirs_free (struct dirs_info **pp)
+{
+    struct dirs_info *p = *pp;
+
+    free (p->entries);
+    free (p);
+    *pp = NULL;
+}
index 2d888c9..f2f4f35 100644 (file)
@@ -4,7 +4,10 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: trav.c,v $
- * Revision 1.5  1995-10-17 18:02:09  adam
+ * Revision 1.6  1995-11-17 15:54:42  adam
+ * Started work on virtual directory structure.
+ *
+ * Revision 1.5  1995/10/17  18:02:09  adam
  * New feature: databases. Implemented as prefix to words in dictionary.
  *
  * Revision 1.4  1995/09/28  09:19:46  adam
@@ -300,3 +303,15 @@ void repository (int cmd, const char *rep, const char *base_path,
         repository_extract_r (cmd, rep_tmp1, databaseName);
 }
 
+void repositoryUpdate (const char *src, char *databaseName)
+{
+    struct dir_entry *e_src;
+    int i_src = 0;
+    struct stat fs_src;
+    size_t src_len = strlen (src);
+
+    e_src = dir_open (src);
+
+    if (!e_src)
+        return;
+}