VMS Help  —  CRTL  catgets
    Retrieves a message from a message catalog.

    Format

      #include  <nl_types.h>

      char *catgets  (nl_catd catd, int set_id, int msg_id, const char *s);

1  –  Function Variants

    The catgets function has variants named _catgets32 and _catgets64
    for use with 32-bit and 64-bit pointer sizes, respectively.

2  –  Arguments

 catd

    A message catalog descriptor. This is returned by a successful
    call to catopen.

 set_id

    An integer set identifier.

 msg_id

    An integer message identifier.

 s

    A pointer to a default message string that is returned by the
    function if the message cannot be retrieved.

3  –  Description

    The catgets function retrieves a message identified by set_id
    and msg_id, in the message catalog catd. The message is stored in
    a message buffer in the nl_catd structure, which is overwritten
    by subsequent calls to catgets. If a message string needs to
    be preserved, it should be copied to another location by the
    program.

4  –  Return Values

    x                  Pointer to the retrieved message.
    s                  Pointer to the default message string.
                       Indicates that the function is not able
                       to retrieve the requested message from
                       the catalog. This condition can arise if
                       the requested pair (set_d, msg_id) does
                       not represent an existing message from the
                       open catalog, or it indicates that an error
                       occurred. If an error occurred, the function
                       sets errno to one of the following values:

                       o  EBADF - The catalog descriptor is not
                          valid.

                       o  EVMSRR - An OpenVMS I/O read error;
                          the OpenVMS error code can be found in
                          vaxc$errno.

5  –  Example

 #include <nl_types.h>
 #include <locale.h>
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <unixio.h>

  /* This test makes use of all the message catalog routines. catopen  */
  /* opens the catalog ready for reading, then each of the three       */
  /* messages in the catalog are extracted in turn using catgets and   */
  /* printed out. catclose closes the catalog after use.               */
  /* The catalog source file used to create the catalog is as follows: */
  /* $ This is a message file
  * $
  * $quote "
  * $ another comment line
  * $set 1
  * 1 "First set, first message"
  * 2 "second message - This long message uses a backslash \
  * for continuation."
  * $set 2
  * 1 "Second set, first message"                                      */

 char *default_msg = "this is the first message.";

 main()
 {
   nl_catd catalog;
   int msg1,
       msg2,
       retval;

   char *cat = "sys$disk:[]catgets_example.cat"; /*Force local catalog*/

   char *msgtxt;

   char string[128];

   /* Create the message test catalog */

   system("gencat catgets_example.msgx catgets_example.cat") ;

   if ((catalog = catopen(cat, 0)) == (nl_catd) - 1) {
       perror("catopen");
       exit(EXIT_FAILURE);
   }

   msgtxt = catgets(catalog, 1, 1, default_msg);
   printf("%s\n", msgtxt);

   msgtxt = catgets(catalog, 1, 2, default_msg);
   printf("%s\n", msgtxt);

   msgtxt = catgets(catalog, 2, 1, default_msg);
   printf("%s\n", msgtxt);

   if ((retval = catclose(catalog)) == -1) {
       perror("catclose");
       exit(EXIT_FAILURE);
   }

   delete("catgets_example.cat;") ;  /* Remove the test catalog */
 }

      Running the example program produces the following result:

        First set, first message
        second message - This long message uses a backslash for
                                                  continuation.
        Second set, first message
Close Help