Table of Contents
# $EPIC: dbmctl.txt,v 1.6 2007/05/15 01:28:58 jnelson Exp $
Synopsis:
$dbmctl(OPEN type filename)
$dbmctl(OPEN_READ type filename)
$dbmctl(CLOSE refnum)
$dbmctl(ADD refnum “varname” value)
$dbmctl(CHANGE refnum “varname” value)
$dbmctl(DELETE refnum “varname”)
$dbmctl(READ refnum “varname”)
$dbmctl(NEXT_KEY refnum start-over)
$dbmctl(ALL_KEYS refnum)
$dbmctl(ERROR refnum)
refnum is a value returned by OPEN and OPEN_READ.
type must always be STD for now.
filename is a dbm file (without the .db extension!)
varname is a dbm key. It is always a dword. Spaces are important!
value is a dbm value. Spaces are important!
start-over is 1 if you want to begin at the first key, and 0 if you
want to move to the next key.
Technical:
The dbmctl function is a low-level interface to reading and writing variables from a permanent file.
The format of the permanent file is an SDBM hash file, which is compatable with perl and apache, but is not compatable with ndbm or gdbm.
About Hash Files:
Hash files are binary files that let you read and write variables and values. Because the values are stored in a file, they persist after you quit. So it's a great place to put the user's permanent configuration options that need to reload every time they start your script.
It's faster than using save and load, but because it stores in a binary format, the user can't read (and edit) the values directly.
Because the values are stored in a file, the variables you don't use don't take up any memory, and don't cause namespace pollution for your script.
Hash file operations:
OPEN | Return a refnum that can be used to read and write variables in the file filename. Right now the type argument must be STD. |
OPEN_READ | Return a refnum that can be used only for reading variables in the file filename. Right now the type argument must be STD. |
CLOSE | Close the file previous opened with OPEN or OPEN_READ |
ADD | Add a new variable to the file and set its value. |
CHANGE | Change the value of an existing variable in the file. |
DELETE | Remove a variable from the file. |
READ | Return the value of a variable from the file |
NEXT_KEY | Iterate over all of the variable names in the file. The ordering is always unspecified. The first time you call NEXT_KEY, start-over should be 1. Afterwards, it should be 0. When this operations returns the empty string, you have visited all the keys |
ALL_KEYS | Return all of the variable names in the file. This could take a long time, and it might return a very large string! This operation implicitly does a “start-over”, and you must “start-over” next time you call NEXT_KEY. |
ERROR | Return the errno value for the last operation. Use this if any previous value returns the empty string. |
Notes:
Hash files use file descriptors, along with $open() and logfiles, and connections to servers, and dcc, and so on, so you shouldn't just open up a bunch of hash files and ignore them forever. Make sure you CLOSE your hash files you aren't using if this becomes a problem.
This whole thing was specifically written for people who wanted hash table support for saving script configuration values permanently.
Examples:
History:
The dbmctl function first appeared in EPIC5-0.0.8.