MKSTR(1) UNIX Programmer's Manual MKSTR(1) NAME mkstr - create an error message file by massaging C source SYNOPSIS mkstr [ - ] messagefile prefix file ... DESCRIPTION _M_k_s_t_r is used to create files of error messages. Its use can make programs with large numbers of error diagnostics much smaller, and reduce system overhead in running the pro- gram as the error messages do not have to be constantly swapped in and out. _M_k_s_t_r will process each of the specified _f_i_l_e_s, placing a massaged version of the input file in a file whose name con- sists of the specified _p_r_e_f_i_x and the original name. A typ- ical usage of _m_k_s_t_r would be mkstr pistrings 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 _p_i_s_t_r_i_n_g_s and processed copies of the source for these files to be placed in files whose names are prefixed with _x_x. To process the error messages in the source to the message file _m_k_s_t_r keys on the string `error("' in the input stream. Each time it occurs, the C string starting at the `"' is placed in the message file followed by a null character and a new-line character; the null character terminates the mes- sage so it can be easily used when retrieved, the new-line character makes it possible to sensibly _c_a_t the error mes- sage file to see its contents. The massaged copy of the input file then contains a _l_s_e_e_k pointer into the file which can be used to retrieve the message, i.e.: char efilname[] = "/usr/share/pascal/pi_strings"; int efil = -1; error(a1, a2, a3, a4) { char buf[256]; if (efil < 0) { efil = open(efilname, 0); if (efil < 0) { oops: perror(efilname); exit(1); } Printed 11/26/99 October 22, 1996 1 MKSTR(1) UNIX Programmer's Manual MKSTR(1) } if (lseek(efil, (long) a1, 0) || read(efil, buf, 256) <= 0) goto oops; printf(buf, a2, a3, a4); } The optional - causes the error messages to be placed at the end of the specified message file for recompiling part of a large _m_k_s_t_red program. SEE ALSO lseek(2), xstr(1) Printed 11/26/99 October 22, 1996 2