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. 129b50d902SRodney W. Grimes.\" 3. All advertising materials mentioning features or use of this software 139b50d902SRodney W. Grimes.\" must display the following acknowledgement: 149b50d902SRodney W. Grimes.\" This product includes software developed by the University of 159b50d902SRodney W. Grimes.\" California, Berkeley and its contributors. 169b50d902SRodney W. Grimes.\" 4. Neither the name of the University nor the names of its contributors 179b50d902SRodney W. Grimes.\" may be used to endorse or promote products derived from this software 189b50d902SRodney W. Grimes.\" without specific prior written permission. 199b50d902SRodney W. Grimes.\" 209b50d902SRodney W. Grimes.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 219b50d902SRodney W. Grimes.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 229b50d902SRodney W. Grimes.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 239b50d902SRodney W. Grimes.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 249b50d902SRodney W. Grimes.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 259b50d902SRodney W. Grimes.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 269b50d902SRodney W. Grimes.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 279b50d902SRodney W. Grimes.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 289b50d902SRodney W. Grimes.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 299b50d902SRodney W. Grimes.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 309b50d902SRodney W. Grimes.\" SUCH DAMAGE. 319b50d902SRodney W. Grimes.\" 329b50d902SRodney W. Grimes.\" @(#)xstr.1 8.2 (Berkeley) 12/30/93 33c3aac50fSPeter Wemm.\" $FreeBSD$ 349b50d902SRodney W. Grimes.\" 359b50d902SRodney W. Grimes.Dd December 30, 1993 369b50d902SRodney W. Grimes.Dt XSTR 1 379b50d902SRodney W. Grimes.Os BSD 3 389b50d902SRodney W. Grimes.Sh NAME 399b50d902SRodney W. Grimes.Nm xstr 409b50d902SRodney W. Grimes.Nd "extract strings from C programs to implement shared strings" 419b50d902SRodney W. Grimes.Sh SYNOPSIS 428fe908efSRuslan Ermilov.Nm 439b50d902SRodney W. Grimes.Op Fl c 449b50d902SRodney W. Grimes.Op Fl 457720a19dSPhilippe Charnier.Op Fl v 469b50d902SRodney W. Grimes.Op Ar file 479b50d902SRodney W. Grimes.Sh DESCRIPTION 489b50d902SRodney W. Grimes.Nm Xstr 499b50d902SRodney W. Grimesmaintains a file 509b50d902SRodney W. Grimes.Pa strings 519b50d902SRodney W. Grimesinto which strings in component parts of a large program are hashed. 529b50d902SRodney W. GrimesThese strings are replaced with references to this common area. 539b50d902SRodney W. GrimesThis serves to implement shared constant strings, most useful if they 549b50d902SRodney W. Grimesare also read-only. 559b50d902SRodney W. Grimes.Pp 569b50d902SRodney W. GrimesAvailable options: 579b50d902SRodney W. Grimes.Bl -tag -width Ds 589b50d902SRodney W. Grimes.It Fl 599b50d902SRodney W. Grimes.Nm Xstr 609b50d902SRodney W. Grimesreads from the standard input. 619b50d902SRodney W. Grimes.It Fl c 629b50d902SRodney W. Grimes.Nm Xstr 639b50d902SRodney W. Grimeswill extract the strings from the C source 649b50d902SRodney W. Grimes.Ar file 659b50d902SRodney W. Grimesor the standard input 669b50d902SRodney W. Grimes.Pq Fl , 679b50d902SRodney W. Grimesreplacing 689b50d902SRodney W. Grimesstring references by expressions of the form (&xstr[number]) 699b50d902SRodney W. Grimesfor some number. 709b50d902SRodney W. GrimesAn appropriate declaration of 717720a19dSPhilippe Charnier.Nm 729b50d902SRodney W. Grimesis prepended to the file. 739b50d902SRodney W. GrimesThe resulting C text is placed in the file 749b50d902SRodney W. Grimes.Pa x.c , 759b50d902SRodney W. Grimesto then be compiled. 769b50d902SRodney W. GrimesThe strings from this file are placed in the 779b50d902SRodney W. Grimes.Pa strings 789b50d902SRodney W. Grimesdata base if they are not there already. 799b50d902SRodney W. GrimesRepeated strings and strings which are suffixes of existing strings 809b50d902SRodney W. Grimesdo not cause changes to the data base. 817720a19dSPhilippe Charnier.It Fl v 827720a19dSPhilippe CharnierVerbose mode. 839b50d902SRodney W. Grimes.El 849b50d902SRodney W. Grimes.Pp 859b50d902SRodney W. GrimesAfter all components of a large program have been compiled a file 869b50d902SRodney W. Grimes.Pa xs.c 879b50d902SRodney W. Grimesdeclaring the common 888fe908efSRuslan Ermilov.Nm 899b50d902SRodney W. Grimesspace can be created by a command of the form 909b50d902SRodney W. Grimes.Bd -literal -offset indent 919b50d902SRodney W. Grimesxstr 929b50d902SRodney W. Grimes.Ed 939b50d902SRodney W. Grimes.Pp 949b50d902SRodney W. GrimesThe file 959b50d902SRodney W. Grimes.Pa xs.c 969b50d902SRodney W. Grimesshould then be compiled and loaded with the rest 979b50d902SRodney W. Grimesof the program. 989b50d902SRodney W. GrimesIf possible, the array can be made read-only (shared) saving 999b50d902SRodney W. Grimesspace and swap overhead. 1009b50d902SRodney W. Grimes.Pp 1019b50d902SRodney W. Grimes.Nm Xstr 1029b50d902SRodney W. Grimescan also be used on a single file. 1039b50d902SRodney W. GrimesA command 1049b50d902SRodney W. Grimes.Bd -literal -offset indent 1059b50d902SRodney W. Grimesxstr name 1069b50d902SRodney W. Grimes.Ed 1079b50d902SRodney W. Grimes.Pp 1089b50d902SRodney W. Grimescreates files 1099b50d902SRodney W. Grimes.Pa x.c 1109b50d902SRodney W. Grimesand 1119b50d902SRodney W. Grimes.Pa xs.c 1129b50d902SRodney W. Grimesas before, without using or affecting any 1139b50d902SRodney W. Grimes.Pa strings 1149b50d902SRodney W. Grimesfile in the same directory. 1159b50d902SRodney W. Grimes.Pp 1169b50d902SRodney W. GrimesIt may be useful to run 1177720a19dSPhilippe Charnier.Nm 1189b50d902SRodney W. Grimesafter the C preprocessor if any macro definitions yield strings 1199b50d902SRodney W. Grimesor if there is conditional code which contains strings 1209b50d902SRodney W. Grimeswhich may not, in fact, be needed. 1219b50d902SRodney W. GrimesAn appropriate command sequence for running 1228fe908efSRuslan Ermilov.Nm 1239b50d902SRodney W. Grimesafter the C preprocessor is: 1249b50d902SRodney W. Grimes.Pp 1259b50d902SRodney W. Grimes.Bd -literal -offset indent -compact 1269b50d902SRodney W. Grimescc \-E name.c | xstr \-c \- 1279b50d902SRodney W. Grimescc \-c x.c 1289b50d902SRodney W. Grimesmv x.o name.o 1299b50d902SRodney W. Grimes.Ed 1309b50d902SRodney W. Grimes.Pp 1319b50d902SRodney W. Grimes.Nm Xstr 1329b50d902SRodney W. Grimesdoes not touch the file 1339b50d902SRodney W. Grimes.Pa strings 1349b50d902SRodney W. Grimesunless new items are added, thus 1359b50d902SRodney W. Grimes.Xr make 1 1369b50d902SRodney W. Grimescan avoid remaking 1379b50d902SRodney W. Grimes.Pa xs.o 1389b50d902SRodney W. Grimesunless truly necessary. 1399b50d902SRodney W. Grimes.Sh FILES 1409b50d902SRodney W. Grimes.Bl -tag -width /tmp/xsxx* -compact 1419b50d902SRodney W. Grimes.It Pa strings 1429b50d902SRodney W. GrimesData base of strings 1439b50d902SRodney W. Grimes.It Pa x.c 1449b50d902SRodney W. GrimesMassaged C source 1459b50d902SRodney W. Grimes.It Pa xs.c 1469b50d902SRodney W. GrimesC source for definition of array `xstr' 1479b50d902SRodney W. Grimes.It Pa /tmp/xs* 1489b50d902SRodney W. GrimesTemp file when `xstr name' doesn't touch 1499b50d902SRodney W. Grimes.Pa strings 1509b50d902SRodney W. Grimes.El 1519b50d902SRodney W. Grimes.Sh SEE ALSO 1529b50d902SRodney W. Grimes.Xr mkstr 1 1539b50d902SRodney W. Grimes.Sh BUGS 1549b50d902SRodney W. GrimesIf a string is a suffix of another string in the data base, 1559b50d902SRodney W. Grimesbut the shorter string is seen first by 1567720a19dSPhilippe Charnier.Nm 1579b50d902SRodney W. Grimesboth strings will be placed in the data base, when just 1589b50d902SRodney W. Grimesplacing the longer one there will do. 1599b50d902SRodney W. Grimes.Sh HISTORY 1609b50d902SRodney W. GrimesThe 1619b50d902SRodney W. Grimes.Nm 1629b50d902SRodney W. Grimescommand appeared in 1639b50d902SRodney W. Grimes.Bx 3.0 . 164