BSD 4_3_Tahoe development
[unix-history] / usr / man / cat1 / xstr.0
XSTR(1) UNIX Programmer's Manual XSTR(1)
N\bNA\bAM\bME\bE
xstr - extract strings from C programs to implement shared
strings
S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
x\bxs\bst\btr\br [ -\b-c\bc ] [ -\b- ] [ file ]
D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
_\bX_\bs_\bt_\br maintains a file _\bs_\bt_\br_\bi_\bn_\bg_\bs into which strings in com-
ponent parts of a large program are hashed. These strings
are replaced with references to this common area. This
serves to implement shared constant strings, most useful if
they are also read-only.
The command
x\bxs\bst\btr\br -\b-c\bc name
will extract the strings from the C source in name, replac-
ing string references by expressions of the form
(&xstr[number]) for some number. An appropriate declaration
of _\bx_\bs_\bt_\br is prepended to the file. The resulting C text is
placed in the file _\bx._\bc, to then be compiled. The strings
from this file are placed in the _\bs_\bt_\br_\bi_\bn_\bg_\bs data base if they
are not there already. Repeated strings and strings which
are suffices of existing strings do not cause changes to the
data base.
After all components of a large program have been compiled a
file _\bx_\bs._\bc declaring the common _\bx_\bs_\bt_\br space can be created by
a command of the form
x\bxs\bst\btr\br
This _\bx_\bs._\bc 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.
_\bX_\bs_\bt_\br can also be used on a single file. A command
x\bxs\bst\btr\br name
creates files _\bx._\bc and _\bx_\bs._\bc as before, without using or
affecting any _\bs_\bt_\br_\bi_\bn_\bg_\bs file in the same directory.
It may be useful to run _\bx_\bs_\bt_\br after the C preprocessor if any
macro definitions yield strings or if there is conditional
code which contains strings which may not, in fact, be
needed. _\bX_\bs_\bt_\br reads from its standard input when the argu-
ment `-' is given. An appropriate command sequence for run-
ning _\bx_\bs_\bt_\br after the C preprocessor is:
Printed 7/9/88 May 7, 1986 1
XSTR(1) UNIX Programmer's Manual XSTR(1)
c\bcc\bc -\b-E\bE name.c | x\bxs\bst\btr\br -\b-c\bc -
c\bcc\bc -\b-c\bc x.c
m\bmv\bv x.o name.o
_\bX_\bs_\bt_\br does not touch the file _\bs_\bt_\br_\bi_\bn_\bg_\bs unless new items are
added, thus _\bm_\ba_\bk_\be can avoid remaking _\bx_\bs._\bo unless truly neces-
sary.
F\bFI\bIL\bLE\bES\bS
strings Data base 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 _\bs_\bt_\br_\bi_\bn_\bg_\bs
S\bSE\bEE\bE A\bAL\bLS\bSO\bO
mkstr(1)
B\bBU\bUG\bGS\bS
If a string is a suffix of another string in the data base,
but the shorter string is seen first by _\bx_\bs_\bt_\br both strings
will be placed in the data base, when just placing the
longer one there will do.
Printed 7/9/88 May 7, 1986 2