Command Reference Guide

__________________________________________________________________________________________________________________________________________________________________________________________________
__________________________________________________________________________________________________________________________________________________________________________________________________
STANDARD Printed by: Nora Chuang [nchuang] STANDARD
/build/1111/BRICK/man1/!!!intro.1
________________________________________________________________
___ ___
m
mkstr(1) mkstr(1)
NAME
mkstr - extract error messages from C source into a file
SYNOPSIS
mkstr [-] messagefile prefix file ...
DESCRIPTION
mkstr examines a C program and creates a file containing error message strings used by the program.
Programs with many error diagnostics can be made much smaller by referring to places in the file, and
reduce system overhead in running the program.
mkstr processes each of the specified files, placing a revised version of each in a file whose name consists
of the specified prefix concatenated in front of the original name. A typical usage of mkstr would be
mkstr mystrings xx *.c
This command would cause all the error messages from the C source files in the current directory to be
placed in the file mystrings and revised copies of the source for these files to be placed in files whose names
are prefixed with xx.
When processing the error messages in the source for transfer to the message file,
mkstr searches for the
string
error( in the input file. Each time it is encountered, the C string starting after the leading quote
is placed in the message file, followed by a null character and a new-line character. The null character ter-
minates the message so that it can be easily used when retrieved, and the new-line character makes it pos-
sible to conveniently list the error message file (using cat, more, etc. — see cat(1) and more(1)) to review
its contents.
The modified copy of the input file is identical to the original, except that each occurrence of any string that
was moved to the error message file is replaced by an offset pointer usable by
lseek to retrieve the mes-
sage.
If the command line includes the optional
-, extracted error messages are placed at the end of the specified
message file (append) instead of overwriting it. This enables you to process individual files that are part of
larger programs that have been previously processed by mkstr without reprocessing all the files.
All functions used by the original program whose names end in "error" that also can take a constant string
as their first argument should be rewritten so that they search for the string in the error message file.
For example, a program based on the previous example usage would resemble the following:
#include <stdio.h>
#include <sys/types.h>
#include <fcntl.h>
char errfile[] = "mystrings" ;
error(offset, a2, a3, a4)
int offset, a1, a2, a3;
{
char msg[256];
static int fd = -1;
if (fd < 0) {
fd = open(errfile, O_RDONLY);
if (fd < 0) {
perror(errfile);
exit(1);
}
}
if (lseek(fd, (off_t) offset, 0) | | read(fd, msg, 256) <= 0) {
printf("? Can’t find error message in %s:\n", errfile);
perror(errfile);
exit(1);
}
printf(msg, a1, a2, a3);
}
HP-UX Release 11i: December 2000 − 1 − Section 1−−537
___
___