OSDN Git Service

support db5 library.
authorvisor <visor@users.sourceforge.jp>
Tue, 4 Oct 2011 13:39:49 +0000 (22:39 +0900)
committervisor <visor@users.sourceforge.jp>
Sat, 22 Oct 2011 00:55:28 +0000 (09:55 +0900)
14 files changed:
Makefile
Makefile.conf
Makefile.src [new file with mode: 0644]
bin/MKID.pl
bin/MKTABLE.pl
ext/Makefile
ext/ml-fetch.cc [new file with mode: 0644]
ext/ml-fetch.h [new file with mode: 0644]
ext/ml-sqlite3.h
lib/bdbmacro.h
lib/db_185+.h [deleted file]
lib/heapdebug.cc
lib/motorconst.h
ml/Makefile

index 9644c30..1329cc1 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,12 +1,14 @@
+.include "Makefile.conf"
+
 SUBDIR += ext
 SUBDIR += mldump
 SUBDIR += ml_debug
 SUBDIR += ml
-SUBDIR += cgi_debug
-SUBDIR += cgi
+#SUBDIR += cgi_debug
+#SUBDIR += cgi
 
 install: dist
-#      rsync -avH dist/* /usr/web/htcmd/i/
+       rsync -avH dist/* ${HTCMDDIR}/
 
 .include <bsd.subdir.mk>
 
index cd086c2..4bd24b7 100644 (file)
@@ -1,40 +1,6 @@
 UTF8JP = 1
 BSD = 1
 #Linux = 1
-
-.ifdef UTF8JP
-MSRCS += ml-japanese.cc
-.endif
-MSRCS += diff.cc
-MSRCS += ml-addon.cc
-MSRCS += ml-apache.cc
-MSRCS += ml-bool.cc
-MSRCS += ml-config.cc
-MSRCS += ml-cookielogin.cc
-MSRCS += ml-db.cc
-MSRCS += ml-debug.cc
-MSRCS += ml-defun.cc
-MSRCS += ml-diff.cc
-MSRCS += ml-encode.cc
-MSRCS += ml-formvar.cc
-MSRCS += ml-http.cc
-MSRCS += ml-include.cc
-MSRCS += ml-inet.cc
-MSRCS += ml-json.cc
-MSRCS += ml-math.cc
-MSRCS += ml-memcached.cc
-MLDADD += -lmemcached
-MSRCS += ml-motor.cc
-MSRCS += ml-sendmail.cc
-MSRCS += ml-sqlite3.cc
-MLDADD += ../ext/libsqlite3.a
-MSRCS += ml-store.cc
-MSRCS += ml-string.cc
-MSRCS += ml-struct.cc
-MSRCS += ml-tcpserver.cc
-MSRCS += ml-time.cc
-MSRCS += ml-variable.cc
-MSRCS += ml-wiki.cc
-MSRCS += ml-xml.cc
-MLDADD += -lexpat
-MSRCS += motor-function.cc
+#BDB5 = 1
+BDB5SQLITE = 1
+HTCMDDIR = /usr/web/htcmd/i
diff --git a/Makefile.src b/Makefile.src
new file mode 100644 (file)
index 0000000..0e0f2f1
--- /dev/null
@@ -0,0 +1,54 @@
+MSRCS += ml-fetch.cc
+MLDADD += -lfetch
+.ifdef UTF8JP
+MSRCS += ml-japanese.cc
+.endif
+#MSRCS += ml-tokyocabinet.cc
+#MLDADD += -ltokyocabinet
+MSRCS += diff.cc
+MSRCS += ml-addon.cc
+MSRCS += ml-apache.cc
+MSRCS += ml-bool.cc
+MSRCS += ml-config.cc
+MSRCS += ml-cookielogin.cc
+MSRCS += ml-db.cc
+.ifdef BDB5
+MSRCS += ml-db5.cc
+.ifdef BDB5SQLITE
+.else
+MLDADD += -ldb-5
+.endif
+.endif
+MSRCS += ml-debug.cc
+MSRCS += ml-defun.cc
+MSRCS += ml-diff.cc
+MSRCS += ml-encode.cc
+# MSRCS += ml-event.cc
+# MLDADD += -levent
+MSRCS += ml-formvar.cc
+MSRCS += ml-http.cc
+MSRCS += ml-include.cc
+MSRCS += ml-inet.cc
+MSRCS += ml-json.cc
+MSRCS += ml-math.cc
+MSRCS += ml-memcached.cc
+MLDADD += -lmemcached
+MSRCS += ml-motor.cc
+MSRCS += ml-sendmail.cc
+MSRCS += ml-sqlite3.cc
+.ifdef BDB5SQLITE
+MLDADD += -ldb_sql-5
+#MLDADD += ../ext/libdb_sql-5
+.else
+MLDADD += ../ext/libsqlite3.a
+.endif
+MSRCS += ml-store.cc
+MSRCS += ml-string.cc
+MSRCS += ml-struct.cc
+MSRCS += ml-tcpserver.cc
+MSRCS += ml-time.cc
+MSRCS += ml-variable.cc
+MSRCS += ml-wiki.cc
+MSRCS += ml-xml.cc
+MLDADD += -lexpat
+MSRCS += motor-function.cc
index f1a2b88..1bdbde2 100755 (executable)
@@ -4,8 +4,10 @@ my @ID;
 my @SRCS;
 my $target = "ml-id.h";
 my $targetTmp = "$target-$$";
+my $FileList = $ARGV[0];
 
-open (IN, "../Makefile.conf");
+#open (IN, "../Makefile.conf");
+open (IN, $FileList);
 while (<IN>) {
     chomp;
     if (/^MSRCS\s*\+?=\s*(.*\.cc)/) {
index 8ce3a89..2f02f95 100755 (executable)
@@ -10,8 +10,10 @@ my @HDR;
 my @SRCS;
 my $target = "ftable.cc";
 my $targetTmp = "$target-$$";
+my $FileList = $ARGV[0];
 
-open (IN, "../Makefile.conf");
+#open (IN, "../Makefile.conf");
+open (IN, $FileList);
 while (<IN>) {
     chomp;
     if (/^MSRCS\s*\+?=\s*(.*\.cc)/) {
index 27c08da..fc745c7 100644 (file)
@@ -1,4 +1,9 @@
+.include "../Makefile.conf"
+
+.ifdef BDB5SQLITE
+.else
 SUBDIR += sqlite
+.endif
 SUBDIR += cdblib
 .include <bsd.subdir.mk>
 dist:
diff --git a/ext/ml-fetch.cc b/ext/ml-fetch.cc
new file mode 100644 (file)
index 0000000..73a21d7
--- /dev/null
@@ -0,0 +1,211 @@
+#include "ml-fetch.h"
+#include "ml.h"
+#include "mlenv.h"
+#include "motorenv.h"
+#include "motoroutput.h"
+#include "util_check.h"
+#include "util_string.h"
+#include "iconv_glue.h"
+#include "utf8.h"
+#include "expr.h"
+#include "ustring.h"
+#include <fetch.h>
+#include <iostream>
+
+/*DOC:
+==fetch==
+
+*/
+void  MLFetch::clear () {
+    if (fetch) {
+       fetchFreeURL (fetch);
+       fetch = NULL;
+    }
+}
+
+void  MLFetch::parseURL (const ustring& url) {
+    if (fetch)
+       clear ();
+    fetch = fetchParseURL (url.c_str ());
+}
+
+ustring  MLFetch::queryString (MNode* e) {
+    ustring  ans;
+    int  c = 0;
+    MNode*  a;
+
+    while (e) {
+       a = e->car ();
+       if (a) {
+           if (c > 0)
+               ans.append (uAmp);
+           ans.append (urlencode (cv (to_string (a->car ())))).append (uEq).append (urlencode (cv (to_string (a->cdr ()))));
+       }
+       nextNode (e);
+    }
+    return ans;
+}
+
+
+
+/*DOC:
+==$fetch==
+ ($fetch URL [#post] [#sjis] [:id STRING] [:password STRING | :pw STRING] [:query '((NAME. VALUE) ...)] [:cookie '((NAME . VALUE) ...)] [:header '((NAME . VALUE) ...)] [SUBFUNCTION...])
+
+*/
+//#MFUNC       $fetch  ml_fetch        cMLFetchID
+MNode*  ml_fetch (MNode* cell, MlEnv* mlenv) {
+    MNode*  arg = cell->cdr ();
+    MLFetch  obj (mlenv);
+    ustring  url;
+    MNodePtr  query;
+    std::vector<MNode*>  params;
+    std::vector<MNode*>  keywords;
+    MNode*  rest;
+    MNodePtr  ans;
+    static paramList  kwlist[] = {
+       {CharConst ("query"), false},
+       {CharConst ("sjis"), true},
+       {NULL, 0, 0}
+    };
+
+    setParams (arg, 1, &params, kwlist, &keywords, &rest);
+    url = eval_str (params[0], mlenv);
+    if (keywords[0])           // query
+       query = eval (keywords[4], mlenv);
+    if (keywords[1])           // sjis
+       obj.sjis = true;
+
+    obj.parseURL (url);
+
+    mlenv->setMStack (&obj);
+    ans = progn (rest, mlenv);
+    if (mlenv->breaksym ()
+       && (mlenv->breaksym ()->isNil () || eq (mlenv->breaksym (), cell->car ()))) {
+       mlenv->setBreaksym (NULL);
+    }
+
+    return mlenv->retval = ans ();
+}
+
+/*DOC:
+===subfunctions of $fetch===
+
+*/
+/*DOC:
+====http-response====
+ (http-response) -> STRING
+
+*/
+//#SFUNC       http-response   ml_fetch_http_response
+MNode*  ml_fetch_http_response (MNode* cell, MlEnv* mlenv, MLFunc* mobj) {
+    MNode*  arg = cell->cdr ();
+    MLFetch*  obj = (MLFetch*)mobj;
+
+    if (obj->fetch) {
+       FILE*  f;
+       ustring  ans;
+       size_t  s;
+       char  b[65536];
+
+       f = fetchGet (obj->fetch, NULL);
+       if (f) {
+           while ((s = fread (b, 1, 65536, f)) > 0) {
+               ans.append (b, s);
+           }
+           fclose (f);
+       }
+       if (obj->sjis) {
+           iconv_t  cd;
+           size_t  isize, rsize, osize;
+           ustring  ans2;
+           const char*  p;
+           char*  obuf;
+           char  b[65536];
+
+           cd = iconv_open ("UTF-8", "SHIFT_JIS");
+           if (cd != ICONV_ERR) {
+               isize = ans.length ();
+               p = ans.begin ().base ();
+               while (isize > 0) {
+                   obuf = b;
+                   osize = 65536;
+#ifdef Linux
+                   rsize = ::iconv (cd, (char**)&p, &isize, &obuf, &osize);
+#else
+                   rsize = ::iconv (cd, &p, &isize, &obuf, &osize);
+#endif
+                   if (obuf - b <= 0)
+                       break;
+                   ans2.append (b, obuf - b);
+               }
+               iconv_close (cd);
+           }
+           ans2 = fixUTF8 (ans2);
+           return newMNode_str (new ustring (ans2));
+       } else {
+           ans = fixUTF8 (ans);
+           return newMNode_str (new ustring (ans));
+       }
+    }
+
+    return NULL;
+}
+
+/*DOC:
+====http-response-file====
+ (http-response-file FILENAME) -> NIL
+
+*/
+//#SFUNC       http-response-file      ml_fetch_http_response_file
+MNode*  ml_fetch_http_response_file (MNode* cell, MlEnv* mlenv, MLFunc* mobj) {
+    MNode*  arg = cell->cdr ();
+    MLFetch*  obj = (MLFetch*)mobj;
+
+    return NULL;
+}
+
+/*DOC:
+====http-response-output====
+ (http-response-output [#continue | :continue BOOL]) -> NIL
+
+*/
+//#SFUNC       http-response-output    ml_fetch_http_response_output
+MNode*  ml_fetch_http_response_output (MNode* cell, MlEnv* mlenv, MLFunc* mobj) {
+    MNode*  arg = cell->cdr ();
+    MLFetch*  obj = (MLFetch*)mobj;
+    bool  cflag = false;
+    std::vector<MNode*>  params;
+    std::vector<MNode*>  keywords;
+    static paramList  kwlist[] = {
+       {CharConst ("continue"), true},
+       {NULL, 0, 0}
+    };
+
+    assert (0);
+
+    setParams (arg, 0, &params, kwlist, &keywords, NULL);
+    if (keywords[0] && eval_bool (keywords[0], mlenv))
+       cflag = true;
+
+    if (! cflag)
+       mlenv->breakProg ();
+
+    if (obj->fetch) {
+       FILE*  f;
+       ustring  ans;
+       size_t  s;
+       char  b[65536];
+
+       f = fetchGet (obj->fetch, NULL);
+       if (f) {
+           while ((s = fread (b, 1, 65536, f)) > 0) {
+               ans.append (b, s);
+           }
+           fclose (f);
+       }
+       return newMNode_str (new ustring (ans));
+    }
+
+    return NULL;
+}
diff --git a/ext/ml-fetch.h b/ext/ml-fetch.h
new file mode 100644 (file)
index 0000000..efaed18
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef ML_FETCH_H
+#define ML_FETCH_H
+
+#include "ml.h"
+#include "ml-id.h"
+#include <sys/param.h>
+#include <stdio.h>
+#include <fetch.h>
+
+class  MNode;
+class  MlEnv;
+
+class  MLFetch: public MLFunc {
+ public:
+    struct url*  fetch;
+    bool  sjis;
+
+    MLFetch (MlEnv* _mlenv): MLFunc (cMLFetchID, _mlenv) {
+       fetch = NULL;
+       sjis = false;
+    };
+    virtual  ~MLFetch () {
+       clear ();
+    };
+
+    virtual void  clear ();
+    virtual void  parseURL (const ustring& url);
+    virtual ustring  queryString (MNode* e);
+    virtual ustring  cv (const ustring& s) {
+       return s;
+    }
+};
+
+MNode*  ml_fetch (MNode* cell, MlEnv* mlenv);
+MNode*  ml_fetch_http_status (MNode* cell, MlEnv* mlenv, MLFunc* mobj);
+MNode*  ml_fetch_http_response (MNode* cell, MlEnv* mlenv, MLFunc* mobj);
+MNode*  ml_fetch_http_response_file (MNode* cell, MlEnv* mlenv, MLFunc* mobj);
+MNode*  ml_fetch_http_response_output (MNode* cell, MlEnv* mlenv, MLFunc* mobj);
+MNode*  ml_fetch_get_cookie (MNode* cell, MlEnv* mlenv, MLFunc* mobj);
+MNode*  ml_fetch_get_cookie_all (MNode* cell, MlEnv* mlenv, MLFunc* mobj);
+MNode*  ml_fetch_http_content_type (MNode* cell, MlEnv* mlenv, MLFunc* mobj);
+MNode*  ml_fetch_http_get_header (MNode* cell, MlEnv* mlenv, MLFunc* mobj);
+MNode*  ml_fetch_http_get_header_all (MNode* cell, MlEnv* mlenv, MLFunc* mobj);
+
+#endif /* ML_FETCH_H */
index b8b409b..46b0cd0 100644 (file)
@@ -7,7 +7,11 @@
 #include "motorconst.h"
 #include <boost/ptr_container/ptr_vector.hpp>
 extern "C" {
+#ifdef BDB5
+#include <db5/dbsql.h>
+#else
 #include "sqlite3.h"
+#endif
 }
 
 class  MNode;
index 143b828..a70bbfc 100644 (file)
@@ -2,15 +2,24 @@
 #define BDBMACRO_H
 
 #include "ustring.h"
+#ifdef BDB5
+#include <db5/db_185.h>
+#else
 #ifdef Linux
 #include <db_185.h>
 #else
-//#include <db.h>
-#include "db_185+.h"
+#include <db.h>
+//#include "db_185+.h"
+#endif
 #endif
 #include <fcntl.h>
 #include <exception>
 
+#define DB1    DB
+#define DBT1   DBT
+#define DB1_BTREE      DB_BTREE
+#define DB1_HASH       DB_HASH
+
 class  BDB {
  public:
     DB1*  db;
diff --git a/lib/db_185+.h b/lib/db_185+.h
deleted file mode 100644 (file)
index 2f8308d..0000000
+++ /dev/null
@@ -1,219 +0,0 @@
-/*-
- * Copyright (c) 1990, 1993, 1994
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     @(#)db.h        8.7 (Berkeley) 6/16/94
- * $FreeBSD: src/include/db.h,v 1.5.36.1 2010/02/10 00:26:20 kensmith Exp $
- */
-
-#ifndef _DB_185_H_
-#define        _DB_185_H_
-
-#include <sys/types.h>
-#include <sys/cdefs.h>
-
-#include <limits.h>
-
-#define        RET_ERROR       -1              /* Return values. */
-#define        RET_SUCCESS      0
-#define        RET_SPECIAL      1
-
-#define        MAX_PAGE_NUMBER 0xffffffff      /* >= # of pages in a file */
-typedef u_int32_t      pgno_t;
-#define        MAX_PAGE_OFFSET 65535           /* >= # of bytes in a page */
-typedef u_int16_t      indx_t;
-#define        MAX_REC_NUMBER  0xffffffff      /* >= # of records in a tree */
-typedef u_int32_t      recno_t;
-
-/* Key/data structure -- a Data-Base Thang. */
-typedef struct {
-       void    *data;                  /* data */
-       size_t   size;                  /* data length */
-} DBT1;
-
-/* Routine flags. */
-#define        R_CURSOR        1               /* del, put, seq */
-#define        __R_UNUSED      2               /* UNUSED */
-#define        R_FIRST         3               /* seq */
-#define        R_IAFTER        4               /* put (RECNO) */
-#define        R_IBEFORE       5               /* put (RECNO) */
-#define        R_LAST          6               /* seq (BTREE, RECNO) */
-#define        R_NEXT          7               /* seq */
-#define        R_NOOVERWRITE   8               /* put */
-#define        R_PREV          9               /* seq (BTREE, RECNO) */
-#define        R_SETCURSOR     10              /* put (RECNO) */
-#define        R_RECNOSYNC     11              /* sync (RECNO) */
-
-typedef enum { DB1_BTREE, DB1_HASH, DB1_RECNO } DB1TYPE;
-
-/*
- * !!!
- * The following flags are included in the dbopen(3) call as part of the
- * open(2) flags.  In order to avoid conflicts with the open flags, start
- * at the top of the 16 or 32-bit number space and work our way down.  If
- * the open flags were significantly expanded in the future, it could be
- * a problem.  Wish I'd left another flags word in the dbopen call.
- *
- * !!!
- * None of this stuff is implemented yet.  The only reason that it's here
- * is so that the access methods can skip copying the key/data pair when
- * the DB_LOCK flag isn't set.
- */
-#if UINT_MAX > 65535
-#define        DB_LOCK         0x20000000      /* Do locking. */
-#define        DB_SHMEM        0x40000000      /* Use shared memory. */
-#define        DB_TXN          0x80000000      /* Do transactions. */
-#else
-#define        DB_LOCK             0x2000      /* Do locking. */
-#define        DB_SHMEM            0x4000      /* Use shared memory. */
-#define        DB_TXN              0x8000      /* Do transactions. */
-#endif
-
-/* Access method description structure. */
-typedef struct __db1 {
-       DB1TYPE type;                   /* Underlying db type. */
-       int (*close)(struct __db1 *);
-       int (*del)(const struct __db1 *, const DBT1 *, u_int);
-       int (*get)(const struct __db1 *, const DBT1 *, DBT1 *, u_int);
-       int (*put)(const struct __db1 *, DBT1 *, const DBT1 *, u_int);
-       int (*seq)(const struct __db1 *, DBT1 *, DBT1 *, u_int);
-       int (*sync)(const struct __db1 *, u_int);
-       void *internal;                 /* Access method private. */
-       int (*fd)(const struct __db1 *);
-} DB1;
-
-#define        BTREEMAGIC      0x053162
-#define        BTREEVERSION    3
-
-/* Structure used to pass parameters to the btree routines. */
-typedef struct {
-#define        R_DUP           0x01    /* duplicate keys */
-       u_long  flags;
-       u_int   cachesize;      /* bytes to cache */
-       int     maxkeypage;     /* maximum keys per page */
-       int     minkeypage;     /* minimum keys per page */
-       u_int   psize;          /* page size */
-       int     (*compare)      /* comparison function */
-           (const DBT1 *, const DBT1 *);
-       size_t  (*prefix)       /* prefix function */
-           (const DBT1 *, const DBT1 *);
-       int     lorder;         /* byte order */
-} BTREE1INFO;
-
-#define        HASHMAGIC       0x061561
-#define        HASHVERSION     2
-
-/* Structure used to pass parameters to the hashing routines. */
-typedef struct {
-       u_int   bsize;          /* bucket size */
-       u_int   ffactor;        /* fill factor */
-       u_int   nelem;          /* number of elements */
-       u_int   cachesize;      /* bytes to cache */
-       u_int32_t               /* hash function */
-               (*hash)(const void *, size_t);
-       int     lorder;         /* byte order */
-} HASH1INFO;
-
-/* Structure used to pass parameters to the record routines. */
-typedef struct {
-#define        R_FIXEDLEN      0x01    /* fixed-length records */
-#define        R_NOKEY         0x02    /* key not required */
-#define        R_SNAPSHOT      0x04    /* snapshot the input */
-       u_long  flags;
-       u_int   cachesize;      /* bytes to cache */
-       u_int   psize;          /* page size */
-       int     lorder;         /* byte order */
-       size_t  reclen;         /* record length (fixed-length records) */
-       u_char  bval;           /* delimiting byte (variable-length records */
-       char    *bfname;        /* btree file name */ 
-} RECNO1INFO;
-
-#ifdef __DBINTERFACE_PRIVATE
-/*
- * Little endian <==> big endian 32-bit swap macros.
- *     M_32_SWAP       swap a memory location
- *     P_32_SWAP       swap a referenced memory location
- *     P_32_COPY       swap from one location to another
- */
-#define        M_32_SWAP(a) {                                                  \
-       u_int32_t _tmp = a;                                             \
-       ((char *)&a)[0] = ((char *)&_tmp)[3];                           \
-       ((char *)&a)[1] = ((char *)&_tmp)[2];                           \
-       ((char *)&a)[2] = ((char *)&_tmp)[1];                           \
-       ((char *)&a)[3] = ((char *)&_tmp)[0];                           \
-}
-#define        P_32_SWAP(a) {                                                  \
-       u_int32_t _tmp = *(u_int32_t *)a;                               \
-       ((char *)a)[0] = ((char *)&_tmp)[3];                            \
-       ((char *)a)[1] = ((char *)&_tmp)[2];                            \
-       ((char *)a)[2] = ((char *)&_tmp)[1];                            \
-       ((char *)a)[3] = ((char *)&_tmp)[0];                            \
-}
-#define        P_32_COPY(a, b) {                                               \
-       ((char *)&(b))[0] = ((char *)&(a))[3];                          \
-       ((char *)&(b))[1] = ((char *)&(a))[2];                          \
-       ((char *)&(b))[2] = ((char *)&(a))[1];                          \
-       ((char *)&(b))[3] = ((char *)&(a))[0];                          \
-}
-
-/*
- * Little endian <==> big endian 16-bit swap macros.
- *     M_16_SWAP       swap a memory location
- *     P_16_SWAP       swap a referenced memory location
- *     P_16_COPY       swap from one location to another
- */
-#define        M_16_SWAP(a) {                                                  \
-       u_int16_t _tmp = a;                                             \
-       ((char *)&a)[0] = ((char *)&_tmp)[1];                           \
-       ((char *)&a)[1] = ((char *)&_tmp)[0];                           \
-}
-#define        P_16_SWAP(a) {                                                  \
-       u_int16_t _tmp = *(u_int16_t *)a;                               \
-       ((char *)a)[0] = ((char *)&_tmp)[1];                            \
-       ((char *)a)[1] = ((char *)&_tmp)[0];                            \
-}
-#define        P_16_COPY(a, b) {                                               \
-       ((char *)&(b))[0] = ((char *)&(a))[1];                          \
-       ((char *)&(b))[1] = ((char *)&(a))[0];                          \
-}
-#endif
-
-__BEGIN_DECLS
-DB1 *dbopen(const char *, int, int, DB1TYPE, const void *);
-
-#ifdef __DBINTERFACE_PRIVATE
-DB1    *__bt_open(const char *, int, int, const BTREE1INFO *, int);
-DB1    *__hash_open(const char *, int, int, const HASH1INFO *, int);
-DB1    *__rec_open(const char *, int, int, const RECNO1INFO *, int);
-void    __dbpanic(DB1 *dbp);
-#endif
-__END_DECLS
-#endif /* !_DB_185_H_ */
index af391d9..42fabb4 100644 (file)
@@ -7,11 +7,15 @@
 #include <fcntl.h>
 
 extern "C"{
+#ifdef BDB5
+#include <db5/db_185.h>
+#else
 #ifdef Linux
 #include <db_185.h>
 #else
-//#include <db.h>
-#include "db_185+.h"
+#include <db.h>
+//#include "db_185+.h"
+#endif
 #endif
 }
 #include <sys/file.h>
@@ -19,6 +23,11 @@ extern "C"{
 #include <sys/types.h>
 #include <sys/uio.h>
 
+#define DB1    DB
+#define DBT1   DBT
+#define DB1_BTREE      DB_BTREE
+#define DB1_HASH       DB_HASH
+
 static void  ex ();
 static void  initDB ();
 class  HdInit {
@@ -37,7 +46,11 @@ static int Exited = 0;
 static DB1*  db;
 
 static void  initDB () {
+#ifdef BDB5
+    db = dbopen (NULL, O_CREAT | O_RDWR, 0, DB1_BTREE, NULL);
+#else
     db = dbopen (NULL, O_RDWR, 0, DB1_BTREE, NULL);
+#endif
     Inited = 1;
 }
 
index 9f12a51..d32d43e 100644 (file)
 #define  kBin          "/bin/"
 #define  kEtc          "/etc/"
 #define  kStoreSerial  "serial"
+#ifdef BDB5SQLITE
+#define  kEXT_SQLITE3  ".db5sqlite"
+#else
 #define  kEXT_SQLITE3  ".sqlite3"
+#endif
+#ifdef BDB5
+#define  kEXT_HASH     ".db5"
+#define  kEXT_BTREE    ".btree5"
+#define  kMimeTypeDB   "/etc/mimetype.db5"
+#else
 #define  kEXT_HASH     ".db"
 #define  kEXT_BTREE    ".btree"
-#define  kEXT_LOCK     ".lock"
 #define  kMimeTypeDB   "/etc/mimetype.db"
+#endif
+#define  kEXT_LOCK     ".lock"
 #define  kARRAYMAX     10000
 #define  kIncludeMax   8
 #define  kSearchName   "HMLSEARCHPATH"
index c4424b4..d8d7445 100644 (file)
@@ -1,4 +1,5 @@
 .include "../Makefile.conf"
+.include "../Makefile.src"
 
 SRCS += app.cc
 SRCS += expr.cc
@@ -77,6 +78,12 @@ CFLAGS += -DUTF8JP
 .ifdef TARGET_MLDUMP
 CFLAGS += -DTARGET_MLDUMP
 .endif
+.ifdef BDB5
+CFLAGS += -DBDB5
+.endif
+.ifdef BDB5SQLITE
+CFLAGS += -DBDB5SQLITE
+.endif
 .ifdef DEBUG
 CFLAGS += -I../ml_debug
 .endif
@@ -104,7 +111,7 @@ PROG = ml
 NO_MAN = 1
 CLEANFILES += ftable.cc ml-id.h wikitable.cc heapdebug.o
 
-${PROG}: ftable.cc ml-id.h wikitable.cc
+${PROG}: ml-id.h ftable.cc wikitable.cc
 .ifdef HEAPDEBUG
 ${PROG}: heapdebug.o
 .endif
@@ -114,21 +121,18 @@ dist: ${PROG}
 
 .PHONY: dist
 
-beforedepend:
-       ../bin/MKTABLE.pl
-       ../bin/MKWTABLE.pl
-       ../bin/MKID.pl
+beforedepend: ml-id.h ftable.cc wikitable.cc
 
-ftable.cc: ${MSRCS} ../Makefile.conf
 #ftable.cc:
-       ../bin/MKTABLE.pl
+ftable.cc: ${MSRCS} ../Makefile.src
+       ../bin/MKTABLE.pl ../Makefile.src
 
-wikitable.cc: wikicmd.cc wikiline.cc
 #wikitable.cc:
+wikitable.cc: wikicmd.cc wikiline.cc
        ../bin/MKWTABLE.pl
 
-ml-id.h: ${MSRCS} ../Makefile.conf
 #ml-id.h:
-       ../bin/MKID.pl
+ml-id.h: ${MSRCS} ../Makefile.src
+       ../bin/MKID.pl ../Makefile.src
 
 .include <bsd.prog.mk>