Index of /pub/programming/tcl/all/t/tcl+ndbm/0.1
tcl+ndbm was hacked together by John.Ellson@att.com
It was derived from tcl+gdbm by Christian Lindig
Tclndbm and Wishndbm (tcl+ndbm 0.1)
-----------------------------------
This directory contains the source of tclndbm and wishndbm, two tcl/tk
extensions for accessing ndbm files from tcl/tk. ndbm files
provide persistent mappings from arbitrary keys to values. tclndbm and
wishndbm use these features to provide mappings from (short) key
strings to (larger) data strings. The following example illustrates
the basic new commands, see below for details:
##
## open database "test.data" for read/write (create if not existent)
##
set db [ndbm open test.data rwc];
foreach i {1 2 3 4 5 6} {
# key is $i, store string "This data for $i"
ndbm store $db $i "This data for $i" ;
}
##
## ndbm list $db gives list of all keys in $db
##
foreach key [lsort [ndbm list $db]] {
# retrieve each content and display it
puts stdout "$key [ndbm fetch $db $key]" ;
}
ndbm close $db ;
Requirements & Installation
---------------------------
For successfull compilation of tclndbm and wishndbm you need:
Tcl 7.3 installed (tcl.h and libtcl.a)
Tk 3.6 installed (tk.h and libtk.a)
X11 installed (libX11.a - only for wishndbm)
Ansi or K&R C compiler like gcc
Edit the Makefile to fit your needs, and simply type `make`. Ignore
the %.pro rule and CPROTO variable settings. This should give two
executable files wishndbm and tclndbm. For a simple test run test.tcl
directly or by calling `./tclndbm test.tcl`.
This distribution has been successfully compiled on:
SunOS Release 4.1.1, SPARC , cc
SunOS Release 4.1.1, SPARC , gcc 2.5.8
Commands
--------
ndbm open [r|rw|rwc|rwn]
Opens a ndbm database with an optional mode. If the mode is not
given it is opened for reading (r). The mode can be (r) (read only),
(rw) (read,write), (rwc) (read,write and create if not already
existent), and (rwn) (read,write and create a new database regardless
if one exists). The command returns a handle which is used to
refer to the open database.
ndbm close
Close a ndbm database with the name .
ndbm insert
is the name of a ndbm database previously opened with ndbm
open. Inserts the data giving it the key . If data
with is already in the database an error is generated. Nothing
returned.
ndbm store
is the name of a ndbm database previously opened with ndbm
open. Inserts to the database. If already exists
the new replaces the old. Nothing returned.
ndbm fetch
is the name of a ndbm database previously opened with ndbm
open . Searches for in the database and if found returns its
contents. Returns the contents of or if not found, the empty
string.
ndbm delete
is the name of a ndbm database previously opened with ndbm
open. Searches for and deletes it in the database. If is
not found an error is generated. Nothing returned.
ndbm list
is the name of a ndbm database previously opened with ndbm
open. Returns a list of all keys in the database.
ndbm firstkey
ndbm nextkey
A fist/next scheme permits to retrieve all keys from a database in
sequential (but unsorted!) order. ndbm firstkey returns a
starting key, which may be used to retrieve the following key with
nextkey. nextkey returns the next key to a given previous key. When no
next key is available, the empty string is returned.
Speed
-----
Here are some (real) execution times on a SparcStation 2 (SunOS
4.1.1). The file was stored on a local and a remote filesystem.
See torture.tcl for details.
local fs network fs
create 1000 short entries 2.2 sec 50.0 sec
read 1000 entries (first/next) 1.2 sec 1.5 sec
read 1000 entries (list) 1.1 sec 1.3 sec
delete 100 entries out of 1000 8.7 sec 23.2 sec
lookup 1000 keys out of 900 0.63 sec 0.82 sec
Summary: write access is expensive, especially on remote file
systems.
Copyright
---------
see the file COPYRIGHT
History
-------
The first version was derived from tclndbm1.0 by
from the tcl distribution. The actual version
is nearly totally rewritten and uses much more of the data structures
provided by tcl.
Future Plans
------------
The current version maps a key string to a data string. Future
versions should map a key string to a list of datastrings i.e.:
ndbm store
ndbm fetch returns a list
Credits
-------
Juergen Schoenwaelder gave much hints that
improved portability and elegance of the code.
Bugs
----
- strings are not allowed to be longer than 1023 Bytes.
- No man page yet - any volunteers?
- not extensively tested yet
Report bugs, ports, improvements and successfull compilation on
platforms different from the ones mentioned above to the author.
Author
------
Christian Lindig
TU Braunschweig
Institut fuer Programmiersprachen
Abteilung Softwaretechnologie
D-38106 Braunschweig
Germany