EXSTR(1)                        User Commands                       EXSTR(1)
NAME
       exstr - extract strings from source files
SYNOPSIS
       exstr filename...       
exstr -e filename...       
exstr -r [
-d] 
filename...
DESCRIPTION
       The 
exstr utility is used to extract strings from C-language source
       files and replace them by calls to the message retrieval function
       (see 
gettxt(3C)). This utility will extract all character strings
       surrounded by double quotes, not just strings used as arguments to
       the 
printf command or the 
printf routine. In the first form, 
exstr       finds all strings in the source files and writes them on the standard
       output. Each string is preceded by the source file name and a colon
       (
:).
       The first step is to use 
exstr -e to extract a list of strings and
       save it in a file. Next, examine this list and determine which
       strings can be translated and subsequently retrieved by the message
       retrieval function. Then, modify this file by deleting lines that
       can't be translated and, for lines that can be translated, by adding
       the message file names and the message numbers as the fourth
       (
msgfile) and fifth (
msgnum) entries on a line. The message files
       named must have been created by 
mkmsgs(1) and exist in       
/usr/lib/locale/locale/LC_MESSAGES   . (The directory 
locale       corresponds to the language in which the text strings are written;
       see 
setlocale(3C)). The message numbers used must correspond to the
       sequence numbers of strings in the message files.
       Now use this modified file as input to 
exstr -r to produce a new
       version of the original C-language source file in which the strings
       have been replaced by calls to the message retrieval function       
gettxt(). The 
msgfile and 
msgnum fields are used to construct the
       first argument to 
gettxt(). The second argument to 
gettxt() is
       printed if the message retrieval fails at run-time. This argument is
       the null string, unless the 
-d option is used.
       This utility cannot replace strings in all instances. For example, a
       static initialized character string cannot be replaced by a function
       call. A second example is that a string could be in a form of an
       escape sequence which could not be translated. In order not to break
       existing code, the files created by invoking 
exstr -e must be
       examined and lines containing strings not replaceable by function
       calls must be deleted. In some cases the code may require
       modifications so that strings can be extracted and replaced by calls
       to the message retrieval function.
OPTIONS
       The following options are supported:       
-e              Extract a list of strings from the named C-language source
              files, with positional information. This list is produced on
              standard output in the following format:              
file:line:position:msgfile:msgnum:string              file                  the name of a C-language source file              
line                  line number in the file              
position                  character position in the line              
msgfile                  null              
msgnum                  null              
string                  the extracted text string
              Normally you would redirect this output into a file. Then you
              would edit this file to add the values you want to use for              
msgfile and 
msgnum:              
msgfile                          the file that contains the text strings that will
                          replace 
string. A file with this name must be
                          created and installed in the appropriate place by
                          the 
mkmsgs(1) utility.              
msgnum                          the sequence number of the string in 
msgfile.
              The next step is to use 
exstr -r to replace 
strings in 
file.       
-r              Replace strings in a C-language source file with function
              calls to the message retrieval function 
gettxt().       
-d              This option is used together with the 
-r option. If the
              message retrieval fails when 
gettxt() is invoked at run-time,
              then the extracted string is printed. You would use the
              capability provided by 
exstr on an application program that
              needs to run in an international environment and have messages
              print in more than one language. 
exstr replaces text strings
              with function calls that point at strings in a message data
              base. The data base used depends on the run-time value of the              
LC_MESSAGES environment variable (see 
environ(7)).
EXAMPLES
       Example 1: The following examples show uses of exstr
       Assume that the file 
example.c contains two strings:
         main()
         {
                 printf("This is an example\n");
                 printf("Hello world!\n");
         }
       The 
exstr utility, invoked with the argument 
example.c extracts
       strings from the named file and prints them on the standard output.
         example% 
exstr example.c       produces the following output:
         example.c:This is an example\n
         example.c:Hello world!\n
       The 
exstr utility, invoked with the 
-e option and the argument       
example.c, and redirecting output to the file 
example.stringsout         example% 
exstr -e example.c > example.stringsout       produces the following output in the file 
example.stringsout         example.c:3:8:::This is an example\n
         example.c:4:8:::Hello world!\n
       You must edit 
example.stringsout to add the values you want to use
       for the 
msgfile and 
msgnum fields before these strings can be
       replaced by calls to the retrieval function. If 
UX is the name of the
       message file, and the numbers 
1 and 
2 represent the sequence number
       of the strings in the file, here is what 
example.stringsout looks
       like after you add this information:
         example.c:3:8:UX:1:This is an example\n
         example.c:4:8:UX:2:Hello world!\n
       The 
exstr utility can now be invoked with the 
-r option to replace
       the strings in the source file by calls to the message retrieval
       function 
gettxt().
         example% 
exstr -r example.c <example.stringsout >intlexample.c       produces the following output:         
extern char *gettxt();         main()         {              printf(gettxt("UX:1", ""));              printf(gettxt("UX:2", ""));         }       The following example:
         example% 
exstr -rd example.c <example.stringsout >intlexample.c       uses the extracted strings as a second argument to 
gettxt():
         extern char *gettxt();
         main()
         {
                 printf(gettxt("UX:1", "This is an example\n"));
                 printf(gettxt("UX:2", "Hello world!\n"));
         }
FILES
       /usr/lib/locale/locale/LC_MESSAGES/*           files created by 
mkmsgs(1)SEE ALSO
       gettxt(1), 
mkmsgs(1), 
printf(1), 
srchtxt(1), 
gettxt(3C), 
printf(3C),       
setlocale(3C), 
attributes(7), 
environ(7)DIAGNOSTICS
       The error messages produced by 
exstr are intended to be self-
       explanatory.  They indicate errors in the command line or format
       errors encountered within the input file.
                                July 5, 1990                        EXSTR(1)