XSTR(1) BSD XSTR(1)
NAME
xstr - extract strings from C programs to implement shared strings
SYNOPSIS
xstr [ -c ] [ - ] [ file ]
DESCRIPTION
xstr maintains a file strings into which strings in component parts of a
large program are hashed. xtsr replaces these strings with references to
this common area. This serves to implement shared constant strings,
which are most useful if they are also read-only.
The command
xstr -c name
extracts the strings from the C source in name, replacing string
references by expressions of the form (&xstr[number]) for some number.
An appropriate declaration of xstr is prefixed to the file. The
resulting C text is placed in the file x.c to be compiled. The strings
from this file are placed in the strings database if they are not there
already. Repeated strings and strings that are suffixes of existing
strings do not cause changes to the database.
After all components of a large program have been compiled, a file xs.c
declaring the common xstr space can be created by a command of the form
xstr
This xs.c file should then be compiled and loaded with the rest of the
program. If possible, the array can be made read-only (shared) saving
space and swap overhead.
xstr can also be used on a single file. A command
xstr name
creates files x.c and xs.c as before, without using or affecting any
strings file in the same directory.
It may be useful to run xstr after the C preprocessor if any macro
definitions yield strings or if there is conditional code that contains
strings which may not, in fact, be needed. xstr reads from its standard
input when the dash argument (-) is given. An appropriate command
sequence for running xstr after the C preprocessor is
cc -E name.c | xstr -c -
cc -c x.c
mv x.o name.o
xstr does not touch the file strings unless new items are added; thus
make can avoid remaking xs.o unless truly necessary.
FILES
strings Database of strings
x.c Massaged C source
xs.c C source for definition of array `xstr'
/tmp/xs* Temp file when `xstr name' doesn't touch strings
BUGS
If a string is a suffix of another string in the database but the shorter
string is seen first by xstr, both strings will be placed in the database
when just placing the longer one there will do.
SEE ALSO
mkstr(1)