
mkstr(1) | mkstr(1) |
NAME
mkstr - extract error messages from C source into a ®le
SYNOPSIS
mkstr
DESCRIPTION
mkstr examines a C program and creates a ®le containing error message strings used by the program. Programs with many error diagnostics can be made much smaller by referring to places in the ®le, and reduce system overhead in running the program.
mkstr processes each of the speci®ed ®les, placing a revised version of each in a ®le whose name consists of the speci®ed pre®x 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 ®les in the current directory to be placed in the ®le mystrings and revised copies of the source for these ®les to be placed in ®les whose names are pre®xed with xx.
When processing the error messages in the source for transfer to the message ®le, mkstr searches for the string error( in the input ®le. Each time it is encountered, the C string starting after the leading quote is placed in the message ®le, followed by a null character and a
The modi®ed copy of the input ®le is identical to the original, except that each occurrence of any string that was moved to the error message ®le is replaced by an offset pointer usable by lseek to retrieve the mes- sage.
If the command line includes the optional
All functions used by the original program whose names end in "error" that also can take a constant string as their ®rst argument should be rewritten so that they search for the string in the error message ®le.
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 =
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);
}
m
− 1 − | Section 1−537 |