Next: Problems with the catgets
Interface?!, Up: About catgets
[Contents][Index]
The interface to the catgets
implementation consists of three
functions which correspond to those used in file access: catopen
to open the catalog for using, catgets
for accessing the message
tables, and catclose
for closing after work is done. Prototypes
for the functions and the needed definitions are in the
<nl_types.h>
header file.
catopen
is used like in this:
nl_catd catd = catopen ("catalog_name", 0);
The function takes as the argument the name of the catalog. This usual
refers to the name of the program or the package. The second parameter
is not further specified in the standard. I don’t even know whether it
is implemented consistently among various systems. So the common advice
is to use 0
as the value. The return value is a handle to the
message catalog, equivalent to handles to file returned by open
.
This handle is of course used in the catgets
function which can
be used like this:
char *translation = catgets (catd, set_no, msg_id, "original string");
The first parameter is this catalog descriptor. The second parameter
specifies the set of messages in this catalog, in which the message
described by msg_id
is obtained. catgets
therefore uses a
three-stage addressing:
catalog name ⇒ set number ⇒ message ID ⇒ translation
The fourth argument is not used to address the translation. It is given
as a default value in case when one of the addressing stages fail. One
important thing to remember is that although the return type of catgets
is char *
the resulting string must not be changed. It
should better be const char *
, but the standard is published in
1988, one year before ANSI C.
The last of these functions is used and behaves as expected:
catclose (catd);
After this no catgets
call using the descriptor is legal anymore.
Next: Problems with the catgets
Interface?!, Up: About catgets
[Contents][Index]