GnuCash  2.6.99
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
gncmod-tax-us.c
1 /*********************************************************************
2  * gncmod-tax-us.c
3  * module definition/initialization for us tax info
4  *
5  * Copyright (c) 2001 Linux Developers Group, Inc.
6  *********************************************************************/
7 
8 #include "config.h"
9 #ifdef LOCALE_SPECIFIC_TAX
10 #include <string.h>
11 #include <locale.h>
12 #endif // LOCALE_SPECIFIC_TAX
13 #include <gmodule.h>
14 #include <libguile.h>
15 
16 #include "gnc-module.h"
17 #include "gnc-module-api.h"
18 
19 GNC_MODULE_API_DECL(libgncmod_tax_us)
20 
21 /* version of the gnc module system interface we require */
22 int libgncmod_tax_us_gnc_module_system_interface = 0;
23 
24 /* module versioning uses libtool semantics. */
25 int libgncmod_tax_us_gnc_module_current = 0;
26 int libgncmod_tax_us_gnc_module_revision = 0;
27 int libgncmod_tax_us_gnc_module_age = 0;
28 
29 
30 char *
31 libgncmod_tax_us_gnc_module_path(void)
32 {
33 #ifdef LOCALE_SPECIFIC_TAX
34 # ifdef G_OS_WIN32
35  gchar *thislocale = g_win32_getlocale();
36  gboolean is_de_DE = (strncmp(thislocale, "de_DE", 5) == 0);
37  g_free(thislocale);
38 # else /* !G_OS_WIN32 */
39  const char *thislocale = setlocale(LC_ALL, NULL);
40  gboolean is_de_DE = (strncmp(thislocale, "de_DE", 5) == 0);
41 # endif /* G_OS_WIN32 */
42  if (is_de_DE)
43  return g_strdup("gnucash/tax/de_DE");
44  else
45  return g_strdup("gnucash/tax/us");
46 #endif /* LOCALE_SPECIFIC_TAX */
47  return g_strdup("gnucash/tax/us");
48 }
49 
50 char *
51 libgncmod_tax_us_gnc_module_description(void)
52 {
53  return g_strdup("US income tax information");
54 }
55 
56 static void
57 lmod(char * mn)
58 {
59  char * form = g_strdup_printf("(use-modules %s)\n", mn);
60  scm_c_eval_string(form);
61  g_free(form);
62 }
63 
64 int
65 libgncmod_tax_us_gnc_module_init(int refcount)
66 {
67  /* This is a very simple hack that loads the (new, special) German
68  tax definition file in a German locale, or (default) loads the
69  previous US tax file. */
70 #ifdef LOCALE_SPECIFIC_TAX
71 # ifdef G_OS_WIN32
72  gchar *thislocale = g_win32_getlocale();
73  gboolean is_de_DE = (strncmp(thislocale, "de_DE", 5) == 0);
74  g_free(thislocale);
75 # else /* !G_OS_WIN32 */
76  const char *thislocale = setlocale(LC_ALL, NULL);
77  gboolean is_de_DE = (strncmp(thislocale, "de_DE", 5) == 0);
78 # endif /* G_OS_WIN32 */
79  if (is_de_DE)
80  lmod("(gnucash tax de_DE)");
81  else
82 #endif /* LOCALE_SPECIFIC_TAX */
83  lmod("(gnucash tax us)");
84  return TRUE;
85 }
86 
87 int
88 libgncmod_tax_us_gnc_module_end(int refcount)
89 {
90  return TRUE;
91 }