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)