mkcatdefs(1int)
Name
mkcatdefs − Preprocesses a message source file
Syntax
mkcatdefs symbol_name source_file ...
Description
The mkcatdefs message facility program preprocesses a message source file. The source_file message text source file contains mnemonic identifiers.
The mkcatdefs program produces the symbol_name_msg.h file containing definition statements equating your mnemonic identifiers with set numbers and message ID numbers assigned by mkcatdefs. The symbol_name _msg.h file is required in your application program if you use mnemonic identifiers.
The mkcatdefs program sends message source data, with numbers instead of mnemonic identifiers, to standard output. This output is suitable as input to the gencat program. You can use the > (redirection mnemonic) to write the message source to a file, then use the file as input to gencat. You can create a message text source file using any text editor to enter the messages.
Assign message set numbers and message ID numbers to each message by using the commands described in the following section.
Symbolic Message Identifiers
The operating system provides a mechanism that allows mnemonic references to messages by letting you use alphanumeric identifiers instead of set numbers and message ID numbers. You assign the identifiers to sets and messages in the source file in the same manner that you assign set numbers and message ID numbers.
The mnemonic identifiers can contain ASCII letters, digits, and underscores. The first character cannot be a digit. The maximum length cannot exceed 64 bytes.
The following example shows a message source file with mnemonic message identifiers:
$set symbolic Message Facility - Symbolic ID’s
$quote *
ID_names *Symbolic identifier syntax: \n \
\tASCII alphanumerics or underscores \n \
\tnon-digit first character \n \
\t64 byte maximum length *
set_use *To assign set ID: \n \
\t$set "identifier" [comment] *
msg_use *To assign message ID: \n \
\t"identifier" message-text *
Subcommands
Use the $set command in a source file to give a group of messages a set number. The format of the $set command is as follows:
$ set n [ comment ]
The set number is specified by n. Instead of a number, you can specify a mnemonic identifier that must contain only ASCII letters, digits, or the _ (underscore character). The maximum length of an identifier is 65 bytes. The mkcatdefs program assigns a set number to the identifier. The assigned set number is one higher than the preceding set number, or 1 if it is the first $set.
Note
The mkcatdefs program inserts a $delset before the $set in the output message source file.
You can mix numbers and mnemonic identifiers.
You can include a comment in the $set command, but it is not required. The following example includes a comment:
set CEM Communication Error Messages
Use the $delset command to remove all of the messages belonging to the specified set from a catalog. The format of the $delset command is as follows:
$delset n [ comment ]
The message set is specified by n. The $delset command must be placed in the proper set number order with respect to any $set commands in the same source file. You can include a comment in the $delset command also.
You can include a comment line anywhere in the source file, except within message text. Indicate comments as follows:
$ [ comment ]
You must leave at least one space after the $ prompt.
Enter the message text and mnemonic message identifier as follows:
identifier message_text
identifier can be either a number or a mnemonic identifier and can contain only ASCII letters, digits, or the _ (underscore character). The maximum length of an identifier is 65 bytes. The mkcatdefs program assigns a message number to the identifier. The assigned number is one higher than the preceding message number, or 1 if it is the first message after the $set command.
Note that mkcatdefs inserts a $delset before the $set, which means you cannot add, delete, or replace single messages in the catalog if you are using mnemonic message identifiers. You must enter all of the messages in the set.
You can mix numbers and mnemonic identifiers.
You must leave at least one space after the message identifier or number.
Any amount of white space is allowed after the message ID number; however, X/Open specifies that you leave only one space between the message number and the message text. All text following the first nonspace character to the end of the line is included in the message text. If the source contains a $quote command preceding the message, all text between the quotation marks is included. Use a \ (backslash) character to continue message text on the following line. The \ must be the last character on the line, as in the following example:
FIVE Text associated with \
message FIVE.
These two lines define the following single-line message:
FIVE Text associated with message FIVE.
The \ can be used to include special characters in the message text. These special characters are defined as follows:
\n Inserts a newline character.
\t Inserts a horizontal tab character.
\v Inserts a vertical tab.
\b Inserts a backspace character.
\r Inserts a carriage-return character.
\f Inserts a formfeed character.
\\ Inserts a \ (backslash) character.
\ddd Inserts the single-byte character associated with the octal value represented by the valid octal digits ddd. One, two, or three octal digits can be specified; however, you must include leading zeros if the characters following the octal digits are also valid octal digits. For example, the octal value for $ is 44. To display $5.00, use \0445.00, not \445.00, or the 5 is parsed as part of the octal value.
You can also include printf() conversion specifications in messages that are displayed by applications using printf(). You can use the $quote command in a message source file to define a character for delimiting message text. The format for this command is as follows:
$quote [ char ] [ comment ]
Use the specified character before and after the message text as shown in the following example source file:
$quote " Use a double quotation mark to delimit message text
$set MSFAC Message Facility - symbolic identifiers
SYM_FORM "Symbolic identifiers can only contain ASCII letters \
or digits or the _ (underscore character)\n"
SYM_LEN "Symbolic identifiers cannot be more than 65 \
bytes long\n"
5 "You can mix symbolic identifiers and numbers \n"
$quote
MSG_H Remember to include the "msg_h" file in
your program\n
In this example, the $quote command sets the quote character to " (double quote), then disables it before the last message, which contains double quotes.
The preceding file can be processed with mkcatdefs as follows:
$ mkcatdefs symb symb.src >symb.msg
When you process the file with mkcatdefs, the modified source is written to standard output. Standard output can either be redirected to a file using the > (redirection mnemonic) or piped to gencat.
The following source is created:
$quote " Use double quotation marks to delimit message text
$delset 1
$set 1
1 "Symbolic identifiers can only contain ASCII letters \
or digits or the _ (underscore character)\n"
2 "Symbolic identifiers cannot be more than 65 \
bytes long\n"
5 "You can mix symbolic identifiers and numbers\n"
$quote
6 remember to include the "msg_h" file in your program
Note that the assigned message numbers are noncontiguous because the source contained a specific number. The mkcatdefs program always assigns the previous number plus 1 to a mnemonic identifier.
The mkcatdefs program also produces a definition file for inclusion in your program. The name of the file is symbol_name, and is entered as the first argument to the mkcatdefs command.
Examples
If the message text source defined under Subcommands were in a file called symb.src, you could use the mkcatdefs command as follows:
$ mkcatdefs symb symb.src >symb.msg
or
$ mkcatdefs symb symb.src | gencat symb.cat
The generated symb_msg.h file would appear as follows:
#ifndef _H_SYMB_MSG
#define _H_SYMB_MSG
#include <limits.h>
#include <nl_types.h>
#define MF_SYMB "symb.cat"
/* The following was generated from symb.src. */
/* definitions for set MSFAC */
#define MSFAC 1
#define SYM_FORM 1
#define SYM_LEN 2
#define MSG_H 6
Note that mkcatdefs also created a mnemonic MF_SYMB by adding MF_ to the symbol_name using uppercase letters. The mkcatdefs program assumes that the name of the generated catalog should be symbol_name.cat, and generates this mnemonic for your use with catopen.
Note
The symbol_name.cat file includes limits.h and nl_types.h, you do not need to include them in your application program. (nl_types defines special data types required by the message facility routines.)
See Also
extract(1int), gencat(1int), trans(1int), catgets(3int), catopen(3int), environ(5int)
Guide to Developing International Software