xref: /freebsd/usr.bin/xstr/xstr.1 (revision bdcbfde31e8e9b343f113a1956384bdf30d1ed62)
19b50d902SRodney W. Grimes.\" Copyright (c) 1980, 1993
29b50d902SRodney W. Grimes.\"	The Regents of the University of California.  All rights reserved.
39b50d902SRodney W. Grimes.\"
49b50d902SRodney W. Grimes.\" Redistribution and use in source and binary forms, with or without
59b50d902SRodney W. Grimes.\" modification, are permitted provided that the following conditions
69b50d902SRodney W. Grimes.\" are met:
79b50d902SRodney W. Grimes.\" 1. Redistributions of source code must retain the above copyright
89b50d902SRodney W. Grimes.\"    notice, this list of conditions and the following disclaimer.
99b50d902SRodney W. Grimes.\" 2. Redistributions in binary form must reproduce the above copyright
109b50d902SRodney W. Grimes.\"    notice, this list of conditions and the following disclaimer in the
119b50d902SRodney W. Grimes.\"    documentation and/or other materials provided with the distribution.
12*fbbd9655SWarner Losh.\" 3. Neither the name of the University nor the names of its contributors
139b50d902SRodney W. Grimes.\"    may be used to endorse or promote products derived from this software
149b50d902SRodney W. Grimes.\"    without specific prior written permission.
159b50d902SRodney W. Grimes.\"
169b50d902SRodney W. Grimes.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
179b50d902SRodney W. Grimes.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
189b50d902SRodney W. Grimes.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
199b50d902SRodney W. Grimes.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
209b50d902SRodney W. Grimes.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
219b50d902SRodney W. Grimes.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
229b50d902SRodney W. Grimes.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
239b50d902SRodney W. Grimes.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
249b50d902SRodney W. Grimes.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
259b50d902SRodney W. Grimes.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
269b50d902SRodney W. Grimes.\" SUCH DAMAGE.
279b50d902SRodney W. Grimes.\"
289b50d902SRodney W. Grimes.Dd December 30, 1993
299b50d902SRodney W. Grimes.Dt XSTR 1
3062500372SRuslan Ermilov.Os
319b50d902SRodney W. Grimes.Sh NAME
329b50d902SRodney W. Grimes.Nm xstr
339b50d902SRodney W. Grimes.Nd "extract strings from C programs to implement shared strings"
349b50d902SRodney W. Grimes.Sh SYNOPSIS
358fe908efSRuslan Ermilov.Nm
36f682f10cSRuslan Ermilov.Op Fl cv
379b50d902SRodney W. Grimes.Op Fl
38f682f10cSRuslan Ermilov.Op Ar
399b50d902SRodney W. Grimes.Sh DESCRIPTION
40e8937ba0SPhilippe CharnierThe
41e8937ba0SPhilippe Charnier.Nm
42e8937ba0SPhilippe Charnierutility maintains a file
439b50d902SRodney W. Grimes.Pa strings
449b50d902SRodney W. Grimesinto which strings in component parts of a large program are hashed.
459b50d902SRodney W. GrimesThese strings are replaced with references to this common area.
469b50d902SRodney W. GrimesThis serves to implement shared constant strings, most useful if they
479b50d902SRodney W. Grimesare also read-only.
489b50d902SRodney W. Grimes.Pp
4923b03a12SPhilippe CharnierThe following options are available:
5023b03a12SPhilippe Charnier.Bl -tag -width indent
519b50d902SRodney W. Grimes.It Fl
52e8937ba0SPhilippe CharnierRead from the standard input.
539b50d902SRodney W. Grimes.It Fl c
54e8937ba0SPhilippe CharnierExtract the strings from the C source
559b50d902SRodney W. Grimes.Ar file
569b50d902SRodney W. Grimesor the standard input
579b50d902SRodney W. Grimes.Pq Fl ,
589b50d902SRodney W. Grimesreplacing
5946122f64SRuslan Ermilovstring references by expressions of the form
6046122f64SRuslan Ermilov.Li (&xstr[number])
6146122f64SRuslan Ermilovfor some
6246122f64SRuslan Ermilov.Ar number .
639b50d902SRodney W. GrimesAn appropriate declaration of
6446122f64SRuslan Ermilov.Va xstr
659b50d902SRodney W. Grimesis prepended to the file.
669b50d902SRodney W. GrimesThe resulting C text is placed in the file
679b50d902SRodney W. Grimes.Pa x.c ,
689b50d902SRodney W. Grimesto then be compiled.
699b50d902SRodney W. GrimesThe strings from this file are placed in the
709b50d902SRodney W. Grimes.Pa strings
719b50d902SRodney W. Grimesdata base if they are not there already.
729b50d902SRodney W. GrimesRepeated strings and strings which are suffixes of existing strings
739b50d902SRodney W. Grimesdo not cause changes to the data base.
747720a19dSPhilippe Charnier.It Fl v
757720a19dSPhilippe CharnierVerbose mode.
769b50d902SRodney W. Grimes.El
779b50d902SRodney W. Grimes.Pp
789b50d902SRodney W. GrimesAfter all components of a large program have been compiled a file
799b50d902SRodney W. Grimes.Pa xs.c
809b50d902SRodney W. Grimesdeclaring the common
8146122f64SRuslan Ermilov.Va xstr
829b50d902SRodney W. Grimesspace can be created by a command of the form
8346122f64SRuslan Ermilov.Pp
8446122f64SRuslan Ermilov.Dl xstr
859b50d902SRodney W. Grimes.Pp
869b50d902SRodney W. GrimesThe file
879b50d902SRodney W. Grimes.Pa xs.c
889b50d902SRodney W. Grimesshould then be compiled and loaded with the rest
899b50d902SRodney W. Grimesof the program.
909b50d902SRodney W. GrimesIf possible, the array can be made read-only (shared) saving
919b50d902SRodney W. Grimesspace and swap overhead.
929b50d902SRodney W. Grimes.Pp
93e8937ba0SPhilippe CharnierThe
94e8937ba0SPhilippe Charnier.Nm
95e8937ba0SPhilippe Charnierutility can also be used on a single file.
969b50d902SRodney W. GrimesA command
979b50d902SRodney W. Grimes.Bd -literal -offset indent
989b50d902SRodney W. Grimesxstr name
999b50d902SRodney W. Grimes.Ed
1009b50d902SRodney W. Grimes.Pp
1019b50d902SRodney W. Grimescreates files
1029b50d902SRodney W. Grimes.Pa x.c
1039b50d902SRodney W. Grimesand
1049b50d902SRodney W. Grimes.Pa xs.c
1059b50d902SRodney W. Grimesas before, without using or affecting any
1069b50d902SRodney W. Grimes.Pa strings
1079b50d902SRodney W. Grimesfile in the same directory.
1089b50d902SRodney W. Grimes.Pp
1099b50d902SRodney W. GrimesIt may be useful to run
1107720a19dSPhilippe Charnier.Nm
1119b50d902SRodney W. Grimesafter the C preprocessor if any macro definitions yield strings
1129b50d902SRodney W. Grimesor if there is conditional code which contains strings
1139b50d902SRodney W. Grimeswhich may not, in fact, be needed.
1149b50d902SRodney W. GrimesAn appropriate command sequence for running
1158fe908efSRuslan Ermilov.Nm
1169b50d902SRodney W. Grimesafter the C preprocessor is:
1179b50d902SRodney W. Grimes.Pp
1189b50d902SRodney W. Grimes.Bd -literal -offset indent -compact
11946122f64SRuslan Ermilovcc -E name.c | xstr -c -
12046122f64SRuslan Ermilovcc -c x.c
1219b50d902SRodney W. Grimesmv x.o name.o
1229b50d902SRodney W. Grimes.Ed
1239b50d902SRodney W. Grimes.Pp
124e8937ba0SPhilippe CharnierThe
125e8937ba0SPhilippe Charnier.Nm
126e8937ba0SPhilippe Charnierutility does not touch the file
1279b50d902SRodney W. Grimes.Pa strings
1289b50d902SRodney W. Grimesunless new items are added, thus
1299b50d902SRodney W. Grimes.Xr make 1
1309b50d902SRodney W. Grimescan avoid remaking
1319b50d902SRodney W. Grimes.Pa xs.o
1329b50d902SRodney W. Grimesunless truly necessary.
1339b50d902SRodney W. Grimes.Sh FILES
13446122f64SRuslan Ermilov.Bl -tag -width ".Pa /tmp/xs*" -compact
1359b50d902SRodney W. Grimes.It Pa strings
13623b03a12SPhilippe Charnierdata base of strings
1379b50d902SRodney W. Grimes.It Pa x.c
13823b03a12SPhilippe Charniermassaged C source
1399b50d902SRodney W. Grimes.It Pa xs.c
14046122f64SRuslan ErmilovC source for definition of array
14146122f64SRuslan Ermilov.Va xstr
1429b50d902SRodney W. Grimes.It Pa /tmp/xs*
14346122f64SRuslan Ermilovtemporary file when
14446122f64SRuslan Ermilov.Dq Li "xstr name"
14546122f64SRuslan Ermilovdoes not touch
1469b50d902SRodney W. Grimes.Pa strings
1479b50d902SRodney W. Grimes.El
1489b50d902SRodney W. Grimes.Sh SEE ALSO
1499b50d902SRodney W. Grimes.Xr mkstr 1
1506c7216dfSRuslan Ermilov.Sh HISTORY
1516c7216dfSRuslan ErmilovThe
1526c7216dfSRuslan Ermilov.Nm
1536c7216dfSRuslan Ermilovcommand appeared in
1546c7216dfSRuslan Ermilov.Bx 3.0 .
1559b50d902SRodney W. Grimes.Sh BUGS
1569b50d902SRodney W. GrimesIf a string is a suffix of another string in the data base,
1579b50d902SRodney W. Grimesbut the shorter string is seen first by
1587720a19dSPhilippe Charnier.Nm
1599b50d902SRodney W. Grimesboth strings will be placed in the data base, when just
1609b50d902SRodney W. Grimesplacing the longer one there will do.
161