#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <libintl.h>
#include <locale.h>
#include <string.h>
#include "tcl.h"
static int
tcl_gettext (ClientData client_data, Tcl_Interp *interp,
int argc, char *argv[])
{
const char *domainname = NULL;
int category = LC_MESSAGES;
const char *msgid;
msgid = argv[1];
switch (argc)
{
case 4:
#ifdef LC_CTYPE
if (strcmp (argv[3], "LC_CTYPE") == 0)
category = LC_CTYPE;
else
#endif
#ifdef LC_COLLATE
if (strcmp (argv[3], "LC_COLLATE") == 0)
category = LC_COLLATE;
else
#endif
#ifdef LC_MESSAGES
if (strcmp (argv[3], "LC_MESSAGES") == 0)
category = LC_MESSAGES;
else
#endif
#ifdef LC_MONETARY
if (strcmp (argv[3], "LC_MONETARY") == 0)
category = LC_MONETARY;
else
#endif
#ifdef LC_NUMERIC
if (strcmp (argv[3], "LC_NUMERIC") == 0)
category = LC_NUMERIC;
else
#endif
#ifdef LC_TIME
if (strcmp (argv[3], "LC_TIME") == 0)
category = LC_TIME;
else
#endif
{
interp->result = gettext ("invalid third argument");
return TCL_ERROR;
}
case 3:
domainname = argv[1];
msgid = argv[2];
case 2:
interp->result = dcgettext (domainname, msgid, category);
break;
default:
interp->result = gettext ("wrong number of arguments");
return TCL_ERROR;
}
return TCL_OK;
}
static int
tcl_textdomain (ClientData client_data, Tcl_Interp *interp,
int argc, char *argv[])
{
if (argc != 2)
{
interp->result = gettext ("wrong number of arguments");
return TCL_ERROR;
}
interp->result = textdomain (argv[1]);
return TCL_OK;
}
static int
tcl_bindtextdomain (ClientData client_data, Tcl_Interp *interp,
int argc, char *argv[])
{
if (argc != 3)
{
interp->result = gettext ("wrong number of arguments");
return TCL_ERROR;
}
return bindtextdomain (argv[1], argv[2]) == NULL ? TCL_ERROR : TCL_OK;
}
int
Gettext_Init (Tcl_Interp *interp)
{
Tcl_CreateCommand (interp, "gettext", tcl_gettext, (ClientData) 0,
(Tcl_CmdDeleteProc *) NULL);
Tcl_CreateCommand (interp, "textdomain", tcl_textdomain, (ClientData) 0,
(Tcl_CmdDeleteProc *) NULL);
Tcl_CreateCommand (interp, "bindtextdomain", tcl_bindtextdomain,
(ClientData) 0, (Tcl_CmdDeleteProc *) NULL);
return TCL_OK;
}