ui/common/properties.c

Thu, 10 Apr 2014 11:37:41 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Thu, 10 Apr 2014 11:37:41 +0200
changeset 29
c96169444d88
parent 24
06bceda81a03
child 30
34513f76d5a8
permissions
-rw-r--r--

added locale support (Cocoa) and ucx update

24
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
4 * Copyright 2014 Olaf Wintermann. All rights reserved.
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 *
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 *
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 *
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 *
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 */
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29 #include <stdio.h>
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30 #include <stdlib.h>
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
31 #include <string.h>
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
32 #include <sys/stat.h>
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
33 #include <errno.h>
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
34
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
35 #include "properties.h"
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
36 #include "../../ucx/string.h"
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
37 #include "../../ucx/buffer.h"
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
38 #include "../../ucx/properties.h"
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
39
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
40 static UiProperties *application_properties;
29
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
41 static UiProperties *language;
24
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
42
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
43 char* ui_getappdir() {
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
44 if(ui_appname() == NULL) {
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
45 return NULL;
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
46 }
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
47
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
48 return ui_configfile(NULL);
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
49 }
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
50
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
51 char* ui_configfile(char *name) {
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
52 char *appname = ui_appname();
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
53 if(!appname) {
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
54 return NULL;
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
55 }
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
56
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
57 UcxBuffer *buf = ucx_buffer_new(NULL, 128, UCX_BUFFER_AUTOEXTEND);
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
58
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
59 // add base dir
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
60 char *homeenv = getenv("HOME");
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
61 if(homeenv == NULL) {
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
62 ucx_buffer_free(buf);
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
63 return NULL;
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
64 }
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
65 sstr_t home = sstr(homeenv);
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
66
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
67 ucx_buffer_write(home.ptr, 1, home.length, buf);
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
68 if(home.ptr[home.length-1] != '/') {
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
69 ucx_buffer_putc(buf, '/');
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
70 }
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
71
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
72 #ifdef UI_COCOA
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
73 // on OS X the app dir is $HOME/Library/Application Support/$APPNAME/
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
74 ucx_buffer_puts(buf, "Library/Application Support/");
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
75 #else
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
76 // app dir is $HOME/.$APPNAME/
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
77 ucx_buffer_putc(buf, '.');
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
78 #endif
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
79 ucx_buffer_puts(buf, appname);
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
80 ucx_buffer_putc(buf, '/');
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
81
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
82 // add file name
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
83 if(name) {
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
84 ucx_buffer_puts(buf, name);
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
85 }
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
86
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
87 char *path = buf->space;
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
88 free(buf);
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
89 return path;
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
90 }
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
91
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
92 static int ui_mkdir(char *path) {
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
93 #ifdef _WIN32
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
94 return mkdir(path);
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
95 #else
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
96 return mkdir(path, S_IRWXU);
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
97 #endif
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
98 }
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
99
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
100 void uic_load_app_properties() {
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
101 application_properties = ucx_map_new(128);
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
102
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
103 if(!ui_appname()) {
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
104 // applications without name cannot load app properties
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
105 return;
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
106 }
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
107
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
108 char *dir = ui_configfile(NULL);
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
109 if(!dir) {
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
110 return;
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
111 }
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
112 if(ui_mkdir(dir)) {
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
113 if(errno != EEXIST) {
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
114 fprintf(stderr, "Ui Error: Cannot create directory %s\n", dir);
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
115 free(dir);
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
116 return;
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
117 }
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
118 }
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
119 free(dir);
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
120
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
121 char *path = ui_configfile("application.properties");
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
122 if(!path) {
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
123 return;
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
124 }
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
125
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
126 FILE *file = fopen(path, "r");
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
127 if(!file) {
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
128 free(path);
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
129 return;
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
130 }
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
131
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
132 if(ucx_properties_load(application_properties, file)) {
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
133 fprintf(stderr, "Ui Error: Cannot load application properties.\n");
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
134 }
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
135
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
136 fclose(file);
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
137 free(path);
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
138 }
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
139
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
140 void uic_store_app_properties() {
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
141 char *path = ui_configfile("application.properties");
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
142 if(!path) {
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
143 return;
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
144 }
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
145
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
146 FILE *file = fopen(path, "w");
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
147 if(!file) {
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
148 fprintf(stderr, "Ui Error: Cannot open properties file: %s\n", path);
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
149 free(path);
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
150 return;
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
151 }
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
152
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
153 if(ucx_properties_store(application_properties, file)) {
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
154 fprintf(stderr, "Ui Error: Cannot store application properties.\n");
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
155 }
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
156
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
157 fclose(file);
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
158 free(path);
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
159 }
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
160
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
161
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
162 char* ui_get_property(char *name) {
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
163 return ucx_map_cstr_get(application_properties, name);
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
164 }
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
165
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
166 void ui_set_property(char *name, char *value) {
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
167 ucx_map_cstr_put(application_properties, name, value);
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
168 }
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
169
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
170 void ui_set_default_property(char *name, char *value) {
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
171 char *v = ucx_map_cstr_get(application_properties, name);
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
172 if(!v) {
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
173 ucx_map_cstr_put(application_properties, name, value);
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
174 }
06bceda81a03 added application properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
175 }
29
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
176
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
177
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
178
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
179 #ifndef UI_COCOA
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
180
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
181 void ui_load_locale(char *locale) {
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
182 char *basedir = ui_get_locale_basedir();
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
183 }
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
184
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
185 #endif
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
186
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
187 void uic_load_language_file(char *path) {
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
188 UcxMap *lang = ucx_map_new(256);
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
189
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
190 printf("path: %s\n", path);
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
191 FILE *file = fopen(path, "r");
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
192 if(!file) {
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
193 printf("cannot open file: %s\n", path);
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
194 free(path);
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
195 return;
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
196 }
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
197
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
198 if(ucx_properties_load(lang, file)) {
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
199 fprintf(stderr, "Ui Error: Cannot load locale.\n");
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
200 }
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
201
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
202 fclose(file);
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
203
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
204 ucx_map_rehash(lang);
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
205
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
206 language = lang;
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
207 }
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
208
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
209 char* uistr(char *name) {
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
210 if(!language) {
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
211 return "missing string";
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
212 }
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
213 char *value = ucx_map_cstr_get(language, name);
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
214 if(!value) {
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
215 return "missing string";
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
216 } else {
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
217 return value;
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
218 }
c96169444d88 added locale support (Cocoa) and ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
219 }

mercurial