Table cdbtoplevel TopLevel_Command cdb subcmd enum(Cdb/_SubCommand, "cdb subcommand") ... obj cdb-wr subcmd enum(Cdbwr/_SubCommand, "cdb-wr subcommand") ... obj Table cdb Cdb_SubCommand open path string => iddata(&cdbtcl_databases) lookup db iddata(&cdbtcl_databases) key obj => obj lookup-hb db iddata(&cdbtcl_databases) key hb => hb close db iddata(&cdbtcl_databases) Table cdbwr Cdbwr_SubCommand create-empty pathb string # files: # .main # .cdb # .log # .tmp (might be new .main or new .cdb) # invariants: # .main is a cdb native text file # and always exists # if .tmp exists it is irrelevant # if .cdb exists it is a cdb database # containing exactly the same as .main # if .log exists, it is a cdb native # text file _without the trailing newline_; # its contents override values from .main or .cdb open pathb string on_info obj => iddata(&cdbtcl_rwdatabases) # on_info ...: # on_info open-clean # on_info open-dirty # on_info compact-start # on_info compact-end # on_info close lookup db iddata(&cdbtcl_rwdatabases) key obj => obj lookup-hb db iddata(&cdbtcl_rwdatabases) key hb => hb update db iddata(&cdbtcl_rwdatabases) key obj value obj update-hb db iddata(&cdbtcl_rwdatabases) key hb value hb update-quick db iddata(&cdbtcl_rwdatabases) key obj value obj update-quick-hb db iddata(&cdbtcl_rwdatabases) key hb value hb close db iddata(&cdbtcl_rwdatabases) close-quick db iddata(&cdbtcl_rwdatabases)