* Copyright (c) 1992 Eric P. Allman.
* Copyright (c) 1992 Regents of the University of California.
* %sccs.include.redist.c%
static char sccsid
[] = "@(#)makemap.c 5.2 (Berkeley) %G%";
#if defined(HASH_MAP) || defined(BTREE_MAP)
enum type
{ T_DBM
, T_BTREE
, T_HASH
, T_ERR
, T_UNKNOWN
};
#if defined(HASH_MAP) || defined(BTREE_MAP)
bool allowreplace
= FALSE
;
#if defined(HASH_MAP) || defined(BTREE_MAP)
while ((opt
= getopt(argc
, argv
, "Nforv")) != EOF
)
if (strcmp(typename
, "dbm") == 0)
else if (strcmp(typename
, "btree") == 0)
else if (strcmp(typename
, "hash") == 0)
fprintf(stderr
, "Usage: %s [-N] [-o] [-v] type mapname\n", progname
);
fprintf(stderr
, "%s: Unknown database type %s\n",
fprintf(stderr
, "%s: Type %s not supported in this version\n",
dbp
.dbm
= dbm_open(mapname
, mode
, 0644);
dbp
.db
= dbopen(mapname
, mode
, 0644, DB_HASH
, NULL
);
dbp
.db
= dbopen(mapname
, mode
, 0644, DB_BTREE
, NULL
);
fprintf(stderr
, "%s: internal error: type %d\n", progname
, type
);
fprintf(stderr
, "%s: cannot create type %s map %s\n",
progname
, typename
, mapname
);
while (fgets(ibuf
, sizeof ibuf
, stdin
) != NULL
)
if (ibuf
[0] == '\0' || ibuf
[0] == '#')
fprintf(stderr
, "%s: %s: line %d: syntax error (leading space)\n",
progname
, mapname
, lineno
);
for (p
= ibuf
; *p
!= '\0' && !isspace(*p
); p
++)
if (foldcase
&& isupper(*p
))
key
.xx
.size
= p
- key
.xx
.data
;
fprintf(stderr
, "%s: %s: line %d: no RHS for LHS %s\n",
progname
, mapname
, lineno
, key
.xx
.data
);
** Do the database insert.
printf("key=`%s', val=`%s'\n", key
.xx
.data
, val
.xx
.data
);
st
= dbm_store(dbp
.dbm
, key
.dbm
, val
.dbm
,
allowreplace
? DBM_REPLACE
: DBM_INSERT
);
#if defined(BTREE_MAP) || defined(HASH_MAP)
st
= (*dbp
.db
->put
)(dbp
.db
, &key
.db
, &val
.db
,
allowreplace
? 0 : R_NOOVERWRITE
);
fprintf(stderr
, "%s: %s: line %d: key %s: put error\n",
progname
, mapname
, lineno
, key
.xx
.data
);
fprintf(stderr
, "%s: %s: line %d: key %s: duplicate key\n",
progname
, mapname
, lineno
, key
.xx
.data
);
** Now close the database.
#if defined(HASH_MAP) || defined(BTREE_MAP)
if ((*dbp
.db
->close
)(dbp
.db
) < 0)
fprintf(stderr
, "%s: %s: error on close\n",