mkstr(1)

mkstr(1)

NAME

mkstr - extract error messages from C source into a ®le

SYNOPSIS

mkstr [-]message®le pre®x ®le ...

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 new-line character. The null character terminates the message so that it can be easily used when retrieved, and the new-line character makes it possible to conveniently list the error message ®le (using cat, more, etc. Ð see cat(1) and more(1)) to review its contents.

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 -, extracted error messages are placed at the end of the speci®ed message ®le (append) instead of overwriting it. This enables you to process individual ®les that are part of larger programs that have been previously processed by mkstr without reprocessing all the ®les.

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 = -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);

}

m

HP-UX Release 11i: December 2000

− 1 −

Section 1537