The Source-Navigator utilities dbdump, dbcp, and dbimp access and maintain databases that can be started from user shells or applications. These utilities are located in the .../bin directory.
The scripts in this chapter are written to work under the UNIX operating system. When running under DOS, the scripts must be changed.
The dbdump utility provides a complete listing, or a dump, of the contents of a database table. Its usage is:
dbdump ?-separator char? file
dbdump separates the key and data parts with a semicolon (;). The hash character (#) and brackets ({}) indicate an empty field. The shell script below lists the name and locations of the project class.
#!/bin/sh dbdump=$HOME/snavigator/bin/dbdump project=tmp $dbdump -s ' ' $project.cl | awk '{printf "%s,%s,%s\n",$1,$3,$2}'
The dbcp utility copies and compacts the database. Space freed up by deleting key/data pairs from btree tables is never reclaimed, although it is normally made available for reuse. When copying a database with dbcp, deleted records are not copied, resulting in a much better page-fill factor and reduced disk space requirements. Its usage is:
dbcp input_table output_table
The following shell script compresses the tables of a Source-Navigator project.
#!/bin/sh execdir=$HOME/snavigator/bin dbcp=$execdir/dbcp project=TEST cd .paf for i in $project.[a-z]* do $dbcp $i $$.tmp mv $$.tmp $i done
You can use this script even for currently-running Source-Navigator projects because compressing database tables does not affect performance. Hash tables may also be copied with dbcp, but there will be no space savings.
The dbimp utility inserts, updates, and deletes records in a project database. It reads commands from its standard input.
dbimp ?-c cache_size? ?-C cross_cache_size? ?-l? ?-f file? db_prefix
References to local variables are stored only if the -l flag is specified.
db_prefix contains the name of the database directory, for example, .sn and the base name of the project file. If the project file is called test.proj, db_prefix could be called SNDB4/test.
The format of the commands (read from standard input) must follow this syntax:
COMMAND;KEY;DATA
If COMMAND is greater than or equal to 0, dbimp inserts KEY/DATA pairs. The value of COMMAND must be between PAF_FILE and PAF_COMMENT_DEF, inclusive. (For the numerical values see sn.h.)
The following example inserts a function (strcopy) definition.
8;strcopy 000001.004 x.c;4.1 0x0 {int} {} {} {}
The following example inserts a method definition (pro3) of the class xharom.
17;xharom pro3 000036.005 x.C;36.11 0x2 {int} {} {} {}
The instructions below insert cross-references (Refers-to and Referred-by) into the project database. The ? symbol represents the sn_sep separator character in the instructions below.
16;#?abc?fu?abc?var?lv?w?000004?x.c;# 15;abc?var?lv?#?abc?fu?w?000004?x.c;# 16;#?abc?fu?#?hello?fu?p?000005?x.c;# 15;#?hello?fu?#?abc?fu?p?000005?x.c;#
See Database Table Structures for information on the structure of the Source-Navigator database tables.
If COMMAND is 0, KEY must contain a known source file name of the project, and dbimp deletes the definitions of, but not cross-references to, the file.
If COMMAND is -1, KEY must be 0 and DATA must contain a known source file name of the project, and dbimp deletes the definitions of, but not cross-references to, the file.
If COMMAND is -2, KEY must be 0 and DATA must contain a known source file name of the project, and dbimp deletes the cross-references to, but not definitions of, the file.
The following example deletes the cross-reference information for the file x.c:
-2;0;x.c
Undefined results occur if the COMMAND does not have a legal value.
In the commands, you may use only single blank spaces and no tabs.