FMTMSG(3C) Standard C Library Functions FMTMSG(3C)
NAME
fmtmsg - display a message on stderr or system console
SYNOPSIS
#include <fmtmsg.h>
int fmtmsg(
long classification,
const char *label,
int severity,
const char *text,
const char *action,
const char *tag);
DESCRIPTION
The
fmtmsg() function writes a formatted message to
stderr, to the
console, or to both, on a message's classification component. It can
be used instead of the traditional
printf(3C) interface to display
messages to
stderr, and in conjunction with
gettxt(3C), provides a
simple interface for producing language-independent applications.
A formatted message consists of up to five standard components (
label,
severity,
text,
action, and
tag) as described below. The
classification component is not part of the standard message
displayed to the user, but rather defines the source of the message
and directs the display of the formatted message.
classification Contains identifiers from the following groups of
major classifications and subclassifications. Any
one identifier from a subclass may be used in
combination by ORing the values together with a
single identifier from a different subclass. Two or
more identifiers from the same subclass should not
be used together, with the exception of identifiers
from the display subclass. (Both display subclass
identifiers may be used so that messages can be
displayed to both
stderr and the system console).
o "Major classifications" identify the
source of the condition. Identifiers
are:
MM_HARD (hardware),
MM_SOFT (software), and
MM_FIRM (firmware).
o "Message source subclassifications"
identify the type of software in which
the problem is spotted. Identifiers are:
MM_APPL (application),
MM_UTIL (utility), and
MM_OPSYS (operating
system).
o "Display subclassifications" indicate
where the message is to be displayed.
Identifiers are:
MM_PRINT to display the
message on the standard error stream,
MM_CONSOLE to display the message on the
system console. Neither, either, or both
identifiers may be used.
o "Status subclassifications" indicate
whether the application will recover
from the condition. Identifiers are:
MM_RECOVER (recoverable) and
MM_NRECOV (non-recoverable).
o An additional identifier,
MM_NULLMC,
indicates that no classification
component is supplied for the message.
label Identifies the source of the message. The format of
this component is two fields separated by a colon.
The first field is up to 10 characters long; the
second is up to 14 characters. Suggested usage is
that
label identifies the package in which the
application resides as well as the program or
application name. For example, the
label UX:cat indicates the
UNIX System V package and the
cat(1) utility.
severity Indicates the seriousness of the condition.
Identifiers for the standard levels of
severity are:
o
MM_HALT indicates that the application
has encountered a severe fault and is
halting. Produces the print string
HALT.
o
MM_ERROR indicates that the application
has detected a fault. Produces the print
string
ERROR.
o
MM_WARNING indicates a condition out of
the ordinary that might be a problem and
should be watched. Produces the print
string
WARNING.
o
MM_INFO provides information about a
condition that is not in error.
Produces the print string
INFO.
o
MM_NOSEV indicates that no severity
level is supplied for the message.
Other severity levels may be added by using the
addseverity() routine.
text Describes the condition that produced the message.
The
text string is not limited to a specific size.
action Describes the first step to be taken in the error
recovery process.
fmtmsg() precedes each action
string with the prefix:
TOFIX
:. The
action string
is not limited to a specific size.
tag An identifier which references on-line
documentation for the message. Suggested usage is
that
tag includes the
label and a unique
identifying number. A sample
tag is
UX:cat:146.
Environment Variables
The
MSGVERB and
SEV_LEVEL environment variables control the behavior
of
fmtmsg() as follows:
MSGVERB This variable determines which message components
fmtmsg() selects when writing messages to
stderr. Its
value is a colon-separated list of optional keywords and
can be set as follows:
MSGVERB=[
keyword[
:keyword[
:...]]]
export MSGVERB Valid
keywords are:
label,
severity,
text,
action, and
tag. If
MSGVERB contains a keyword for a component and
the component's value is not the component's null value,
fmtmsg() includes that component in the message when
writing the message to
stderr. If
MSGVERB does not
include a keyword for a message component, that
component is not included in the display of the message.
The keywords may appear in any order. If
MSGVERB is not
defined, if its value is the null string, if its value
is not of the correct format, or if it contains keywords
other than the valid ones listed above,
fmtmsg() selects
all components.
The first time
fmtmsg() is called, it examines
MSGVERB to determine which message components are to be selected
when generating a message to write to the standard error
stream,
stderr. The values accepted on the initial call
are saved for future calls.
The
MSGVERB environment variable affects only those
components that are selected for display to the standard
error stream. All message components are included in
console messages.
SEV_LEVEL This variable defines severity levels and associates
print strings with them for use by
fmtmsg(). The
standard severity levels listed below cannot be
modified. Additional severity levels can also be
defined, redefined, and removed using
addseverity() (see
addseverity(3C)). If the same severity level is defined
by both
SEV_LEVEL and
addseverity(), the definition by
addseverity() takes precedence.
0 (no severity is used)
1 HALT 2 ERROR 3 WARNING 4 INFO The
SEV_LEVEL variable can be set as follows:
SEV_LEVEL=[
description[
:description[
:...]]]
export SEV_LEVEL where
description is a comma-separated list containing
three fields:
description=
severity_keyword,
level,
printstring The
severity_keyword field is a character string that is
used as the keyword on the
-s severity option to the
fmtmsg(1) utility. (This field is not used by the
fmtmsg() function.)
The
level field is a character string that evaluates to
a positive integer (other than 0, 1, 2, 3, or 4, which
are reserved for the standard severity levels). If the
keyword
severity_keyword is used,
level is the severity
value passed on to the
fmtmsg() function.
The
printstring field is the character string used by
fmtmsg() in the standard message format whenever the
severity value
level is used.
If a
description in the colon list is not a three-field
comma list, or if the second field of a comma list does
not evaluate to a positive integer, that
description in
the colon list is ignored.
The first time
fmtmsg() is called, it examines the
SEV_LEVEL environment variable, if defined, to determine
whether the environment expands the levels of severity
beyond the five standard levels and those defined using
addseverity(). The values accepted on the initial call
are saved for future calls.
Use in Applications
One or more message components may be systematically omitted from
messages generated by an application by using the null value of the
argument for that component.
The table below indicates the null values and identifiers for
fmtmsg() arguments.
+---------------------------------------------+
|Argument Type Null-Value Identifier |
|
label char* (char*) NULL MM_NULLLBL |
|
severity int 0 MM_NULLSEV |
|
class long 0L MM_NULLMC |
|
text char* (char*) NULL MM_NULLTXT |
|
action char* (char*) NULL MM_NULLACT |
|
tag char* (char*) NULL MM_NULLTAG |
+---------------------------------------------+
Another means of systematically omitting a component is by omitting
the component keyword(s) when defining the
MSGVERB environment
variable (see the
Environment Variables section above).
RETURN VALUES
The
fmtmsg() returns the following values:
MM_OK The function succeeded.
MM_NOTOK The function failed completely.
MM_NOMSG The function was unable to generate a message on the
standard error stream, but otherwise succeeded.
MM_NOCON The function was unable to generate a console message,
but otherwise succeeded.
EXAMPLES
Example 1: The following example of fmtmsg():
fmtmsg(MM_PRINT, "UX:cat", MM_ERROR, "invalid syntax",
"refer to manual", "UX:cat:001")
produces a complete message in the standard message format:
UX:cat: ERROR: invalid syntax
TO FIX: refer to manual UX:cat:001
Example 2: When the environment variable MSGVERB is set as follows:
MSGVERB=severity:text:action
and the Example 1 is used,
fmtmsg() produces:
ERROR: invalid syntax
TO FIX: refer to manual
Example 3: When the environment variable SEV_LEVEL is set as follows:
SEV_LEVEL=note,5,NOTE
the following call to
fmtmsg() fmtmsg(MM_UTIL | MM_PRINT, "UX:cat", 5, "invalid syntax",
"refer to manual", "UX:cat:001")
produces
UX:cat: NOTE: invalid syntax
TO FIX: refer to manual UX:cat:001
ATTRIBUTES
See
attributes(7) for descriptions of the following attributes:
+--------------------+-----------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+--------------------+-----------------+
|Interface Stability | Standard |
+--------------------+-----------------+
|MT-Level | Safe |
+--------------------+-----------------+
SEE ALSO
fmtmsg(1),
addseverity(3C),
gettxt(3C),
printf(3C),
attributes(7),
standards(7) July 24, 2002 FMTMSG(3C)