00001 #ifndef _LIBRCC_H
00002 #define _LIBRCC_H
00003
00004 #include <stdlib.h>
00005
00006
00007
00008
00009
00010 #define RCC_MAX_CHARSETS 16
00011 #define RCC_MAX_ENGINES 5
00012 #define RCC_MAX_LANGUAGES 64
00013 #define RCC_MAX_ALIASES 64
00014 #define RCC_MAX_CLASSES 16
00015
00016 #define RCC_MAX_ERRORS 3
00017
00018 #define RCC_MAX_CHARSET_CHARS 16
00019 #define RCC_MAX_LANGUAGE_CHARS 16
00020 #define RCC_MAX_VARIABLE_CHARS 16
00021
00022
00023
00031 typedef unsigned char rcc_language_id;
00035 typedef unsigned char rcc_alias_id;
00042 typedef unsigned char rcc_charset_id;
00048 typedef unsigned char rcc_autocharset_id;
00055 typedef unsigned char rcc_engine_id;
00059 typedef int rcc_class_id;
00060
00061
00062 typedef struct rcc_context_t *rcc_context;
00070 typedef struct rcc_engine_context_t *rcc_engine_context;
00076 typedef struct rcc_language_config_t *rcc_language_config;
00077 typedef const struct rcc_class_t *rcc_class_ptr;
00078
00079 #ifdef __cplusplus
00080 extern "C" {
00081 #endif
00082
00087 int rccInit();
00088
00092 void rccFree();
00093
00094
00095
00096
00100 typedef unsigned int rcc_init_flags;
00101
00105 #define RCC_FLAG_NO_DEFAULT_CONFIGURATION 1
00106
00118 rcc_context rccCreateContext(const char *locale_variable, unsigned int max_languages, unsigned int max_classes, rcc_class_ptr defclasses, rcc_init_flags flags);
00131 int rccInitDefaultContext(const char *locale_variable, unsigned int max_languages, unsigned int max_classes, rcc_class_ptr defclasses, rcc_init_flags flags);
00132
00138 void rccFreeContext(rcc_context ctx);
00139
00140
00144 typedef unsigned int rcc_db4_flags;
00145
00154 int rccInitDb4(rcc_context ctx, const char *name, rcc_db4_flags flags);
00155
00156 int rccLockConfiguration(rcc_context ctx, unsigned int lock_code);
00157 int rccUnlockConfiguration(rcc_context ctx, unsigned int lock_code);
00158
00159
00160
00161
00165 typedef const char *rcc_charset;
00169 typedef rcc_charset rcc_charset_list[RCC_MAX_CHARSETS+1];
00170
00171
00175 typedef void *rcc_engine_internal;
00184 typedef rcc_engine_internal (*rcc_engine_init_function)(rcc_engine_context ctx);
00192 typedef rcc_autocharset_id (*rcc_engine_function)(rcc_engine_context ctx, const char *buf, int len);
00196 typedef void (*rcc_engine_free_function)(rcc_engine_context ctx);
00197
00203 struct rcc_engine_t {
00204 const char *title;
00205 rcc_engine_init_function init_func;
00206 rcc_engine_free_function free_func;
00207 rcc_engine_function func;
00208 rcc_charset_list charsets;
00209 };
00210 typedef struct rcc_engine_t rcc_engine;
00211 typedef rcc_engine *rcc_engine_ptr;
00212 typedef rcc_engine_ptr rcc_engine_list[RCC_MAX_ENGINES+1];
00213
00217 struct rcc_language_t {
00218 const char *sn;
00219 rcc_charset_list charsets;
00220 rcc_engine_list engines;
00221 };
00222 typedef struct rcc_language_t rcc_language;
00223 typedef rcc_language *rcc_language_ptr;
00224 typedef rcc_language_ptr rcc_language_list[RCC_MAX_LANGUAGES+1];
00225
00230 struct rcc_language_alias_t {
00231 const char *alias;
00232 const char *lang;
00233 };
00234 typedef struct rcc_language_alias_t rcc_language_alias;
00235 typedef rcc_language_alias *rcc_language_alias_ptr;
00236 typedef rcc_language_alias_ptr rcc_language_alias_list[RCC_MAX_ALIASES+1];
00237
00244 rcc_language_id rccRegisterLanguage(rcc_context ctx, rcc_language *language);
00251 rcc_charset_id rccLanguageRegisterCharset(rcc_language *language, rcc_charset charset);
00258 rcc_engine_id rccLanguageRegisterEngine(rcc_language *language, rcc_engine *engine);
00265 rcc_alias_id rccRegisterLanguageAlias(rcc_context ctx, rcc_language_alias *alias);
00266
00267
00268
00269
00273 typedef enum rcc_class_type_t {
00274 RCC_CLASS_INVALID = 0,
00275 RCC_CLASS_STANDARD,
00276 RCC_CLASS_KNOWN,
00277 RCC_CLASS_FS
00278 } rcc_class_type;
00279
00283 struct rcc_class_default_charset_t {
00284 const char *lang;
00285 const char *charset;
00286 };
00287 typedef const struct rcc_class_default_charset_t rcc_class_default_charset;
00288
00290 #define RCC_CLASS_FLAG_CONST 0x01
00291
00292 #define RCC_CLASS_FLAG_SKIP_SAVELOAD 0x02
00293
00326 struct rcc_class_t {
00327 const char *name;
00328 const rcc_class_type class_type;
00329 const char *defvalue;
00330 rcc_class_default_charset *defcharset;
00331 const char *fullname;
00332 const unsigned long flags;
00333 };
00334 typedef const struct rcc_class_t rcc_class;
00335 typedef rcc_class_ptr rcc_class_list[RCC_MAX_CLASSES+1];
00336
00343 rcc_class_id rccRegisterClass(rcc_context ctx, rcc_class *cl);
00350 rcc_class_type rccGetClassType(rcc_context ctx, rcc_class_id class_id);
00351
00352
00353
00354
00355 typedef int rcc_option_value;
00356
00360 #define RCC_OPTION_LEARNING_FLAG_USE 1
00361
00364 #define RCC_OPTION_LEARNING_FLAG_LEARN 2
00365
00369 typedef enum rcc_option_t {
00370 RCC_OPTION_LEARNING_MODE = 0,
00371 RCC_OPTION_AUTODETECT_FS_TITLES,
00372 RCC_OPTION_AUTODETECT_FS_NAMES,
00373 RCC_OPTION_CONFIGURED_LANGUAGES_ONLY,
00374 RCC_MAX_OPTIONS
00375 } rcc_option;
00376
00380 typedef enum rcc_option_type_t {
00381 RCC_OPTION_TYPE_INVISIBLE = 0,
00382 RCC_OPTION_TYPE_STANDARD,
00383 RCC_OPTION_TYPE_MAX
00384 } rcc_option_type;
00385
00389 typedef enum rcc_option_range_type_t {
00390 RCC_OPTION_RANGE_TYPE_BOOLEAN = 0,
00391 RCC_OPTION_RANGE_TYPE_RANGE,
00392 RCC_OPTION_RANGE_TYPE_FLAGS,
00393 RCC_OPTION_RANGE_TYPE_MENU,
00394 RCC_OPTION_RANGE_TYPE_MAX
00395 } rcc_option_range_type;
00396
00400 typedef struct rcc_option_range_t {
00401 rcc_option_range_type type;
00402 rcc_option_value min;
00403 rcc_option_value max;
00404 rcc_option_value step;
00405 }rcc_option_range;
00406
00407
00415 const char *rccGetLanguageName(rcc_context ctx, rcc_language_id language_id);
00423 rcc_language_id rccGetLanguageByName(rcc_context ctx, const char *name);
00437 rcc_language_id rccGetRealLanguage(rcc_context ctx, rcc_language_id language_id);
00446 const char *rccGetRealLanguageName(rcc_context ctx, rcc_language_id language_id);
00453 rcc_language_id rccGetSelectedLanguage(rcc_context ctx);
00461 const char *rccGetSelectedLanguageName(rcc_context ctx);
00469 rcc_language_id rccGetCurrentLanguage(rcc_context ctx);
00477 const char *rccGetCurrentLanguageName(rcc_context ctx);
00478
00479
00487 int rccSetLanguage(rcc_context ctx, rcc_language_id language_id);
00495 int rccSetLanguageByName(rcc_context ctx, const char *name);
00496
00497
00505 rcc_option_value rccGetOption(rcc_context ctx, rcc_option option);
00513 int rccOptionIsDefault(rcc_context ctx, rcc_option option);
00521 int rccOptionSetDefault(rcc_context ctx, rcc_option option);
00530 int rccSetOption(rcc_context ctx, rcc_option option, rcc_option_value value);
00538 rcc_option_type rccOptionGetType(rcc_context ctx, rcc_option option);
00546 rcc_option_range *rccOptionGetRange(rcc_context ctx, rcc_option option);
00547
00554 const char *rccGetOptionName(rcc_option option);
00555
00563 const char *rccGetOptionValueName(rcc_option option, rcc_option_value value);
00570 rcc_option rccGetOptionByName(const char *name);
00578 rcc_option_value rccGetOptionValueByName(rcc_option option, const char *name);
00579
00580
00581
00593 rcc_language_config rccCheckConfig(rcc_context ctx, rcc_language_id language_id);
00605 rcc_language_config rccGetConfig(rcc_context ctx, rcc_language_id language_id);
00614 rcc_language_config rccGetConfigByName(rcc_context ctx, const char *name);
00622 rcc_language_config rccGetCurrentConfig(rcc_context ctx);
00623
00631 const char *rccConfigGetEngineName(rcc_language_config config, rcc_engine_id engine_id);
00639 const char *rccConfigGetCharsetName(rcc_language_config config, rcc_charset_id charset_id);
00647 rcc_engine_id rccConfigGetEngineByName(rcc_language_config config, const char *name);
00655 rcc_charset_id rccConfigGetCharsetByName(rcc_language_config config, const char *name);
00656
00666 rcc_engine_id rccConfigGetSelectedEngine(rcc_language_config config);
00674 const char *rccConfigGetSelectedEngineName(rcc_language_config config);
00685 rcc_engine_id rccConfigGetCurrentEngine(rcc_language_config config);
00693 const char *rccConfigGetCurrentEngineName(rcc_language_config config);
00694
00704 rcc_charset_id rccConfigGetSelectedCharset(rcc_language_config config, rcc_class_id class_id);
00713 const char *rccConfigGetSelectedCharsetName(rcc_language_config config, rcc_class_id class_id);
00726 rcc_charset_id rccConfigGetCurrentCharset(rcc_language_config config, rcc_class_id class_id);
00735 const char *rccConfigGetCurrentCharsetName(rcc_language_config config, rcc_class_id class_id);
00736
00744 int rccConfigSetEngine(rcc_language_config config, rcc_engine_id engine_id);
00753 int rccConfigSetCharset(rcc_language_config config, rcc_class_id class_id, rcc_charset_id charset_id);
00761 int rccConfigSetEngineByName(rcc_language_config config, const char *name);
00770 int rccConfigSetCharsetByName(rcc_language_config config, rcc_class_id class_id, const char *name);
00771
00779 rcc_charset_id rccConfigGetLocaleCharset(rcc_language_config config, const char *locale_variable);
00780
00781
00782
00783 const char *rccGetEngineName(rcc_context ctx, rcc_engine_id engine_id);
00784 const char *rccGetCharsetName(rcc_context ctx, rcc_charset_id charset_id);
00785
00786 rcc_engine_id rccGetEngineByName(rcc_context ctx, const char *name);
00787 rcc_charset_id rccGetCharsetByName(rcc_context ctx, const char *name);
00788
00789 rcc_engine_id rccGetSelectedEngine(rcc_context ctx);
00790 const char *rccGetSelectedEngineName(rcc_context ctx);
00791 rcc_engine_id rccGetCurrentEngine(rcc_context ctx);
00792 const char *rccGetCurrentEngineName(rcc_context ctx);
00793 rcc_charset_id rccGetSelectedCharset(rcc_context ctx, rcc_class_id class_id);
00794 const char *rccGetSelectedCharsetName(rcc_context ctx, rcc_class_id class_id);
00795 rcc_charset_id rccGetCurrentCharset(rcc_context ctx, rcc_class_id class_id);
00796 const char *rccGetCurrentCharsetName(rcc_context ctx, rcc_class_id class_id);
00797
00798 int rccSetEngine(rcc_context ctx, rcc_engine_id engine_id);
00799 int rccSetCharset(rcc_context ctx, rcc_class_id class_id, rcc_charset_id charset_id);
00800 int rccSetEngineByName(rcc_context ctx, const char *name);
00801 int rccSetCharsetByName(rcc_context ctx, rcc_class_id class_id, const char *name);
00802
00803 rcc_charset_id rccGetLocaleCharset(rcc_context ctx, const char *locale_variable);
00804
00805
00806
00807
00808
00809 rcc_language_ptr *rccGetLanguageList(rcc_context ctx);
00810 rcc_charset *rccGetCharsetList(rcc_context ctx, rcc_language_id language_id);
00811 rcc_engine_ptr *rccGetEngineList(rcc_context ctx, rcc_language_id language_id);
00812 rcc_charset *rccGetCurrentCharsetList(rcc_context ctx);
00813 rcc_engine_ptr *rccGetCurrentEngineList(rcc_context ctx);
00814 rcc_charset *rccGetCurrentAutoCharsetList(rcc_context ctx);
00815 rcc_class_ptr *rccGetClassList(rcc_context ctx);
00816
00817
00818
00819
00820
00826 typedef char *rcc_string;
00832 typedef const char *rcc_const_string;
00833
00839 size_t rccStringCheck(const char *str);
00847 size_t rccStringSizedCheck(const char *str, size_t len);
00848
00855 rcc_language_id rccStringGetLanguage(rcc_const_string str);
00862 const char *rccStringGetString(rcc_const_string str);
00869 char *rccStringExtractString(rcc_const_string str);
00870
00878 const char *rccGetString(const char *str);
00887 const char *rccSizedGetString(const char *str, size_t len);
00888
00889 int rccStringCmp(const char *str1, const char *str2);
00890 int rccStringNCmp(const char *str1, const char *str2, size_t n);
00891 int rccStringCaseCmp(const char *str1, const char *str2);
00892 int rccStringNCaseCmp(const char *str1, const char *str2, size_t n);
00893
00894
00895
00896
00900 typedef struct rcc_iconv_t *rcc_iconv;
00901
00902
00913 rcc_iconv rccIConvOpen(const char *from, const char *to);
00918 void rccIConvClose(rcc_iconv icnv);
00929 size_t rccIConvRecode(rcc_iconv icnv, char *outbuf, size_t outsize, const char *buf, size_t size);
00930
00931
00943 rcc_string rccSizedFrom(rcc_context ctx, rcc_class_id class_id, const char *buf, size_t len);
00955 char *rccSizedTo(rcc_context ctx, rcc_class_id class_id, const rcc_string buf, size_t *rlen);
00970 char *rccSizedRecode(rcc_context ctx, rcc_class_id from, rcc_class_id to, const char *buf, size_t len, size_t *rlen);
00990 char *rccFS(rcc_context ctx, rcc_class_id from, rcc_class_id to, const char *fspath, const char *path, const char *filename);
00991
01001 rcc_string rccSizedFromCharset(rcc_context ctx, const char *charset, const char *buf, size_t len);
01011 char *rccSizedToCharset(rcc_context ctx, const char *charset, const rcc_string buf, size_t *rlen);
01026 char *rccSizedRecodeToCharset(rcc_context ctx, rcc_class_id class_id, const char *charset, const rcc_string buf, size_t len, size_t *rlen);
01041 char *rccSizedRecodeFromCharset(rcc_context ctx, rcc_class_id class_id, const char *charset, const char *buf, size_t len, size_t *rlen);
01053 char *rccSizedRecodeCharsets(rcc_context ctx, const char *from, const char *to, const char *buf, size_t len, size_t *rlen);
01054
01055
01056 #define rccFrom(ctx, class_id, buf) rccSizedFrom(ctx, class_id, buf, 0)
01057 #define rccTo(ctx, class_id, buf) rccSizedTo(ctx, class_id, buf, NULL)
01058 #define rccRecode(ctx, from, to, buf) rccSizedRecode(ctx, from, to, buf, 0, NULL)
01059
01060 #define rccFromCharset(ctx, charset, buf) rccSizedFromCharset(ctx, charset, buf, 0)
01061 #define rccToCharset(ctx, charset, buf) rccSizedToCharset(ctx, charset, buf, NULL)
01062 #define rccRecodeToCharset(ctx, class_id, charset, buf) rccSizedRecodeToCharset(ctx, class_id, charset, buf, 0, NULL)
01063 #define rccRecodeFromCharset(ctx, class_id, charset, buf) rccSizedRecodeFromCharset(ctx, class_id, charset, buf, 0, NULL)
01064 #define rccRecodeCharsets(ctx, from, to, buf) rccSizedRecodeCharsets(ctx, from, to, buf, 0, NULL)
01065
01066
01067
01068
01069
01070
01071 typedef void *rcc_config;
01072 rcc_config rccGetConfiguration();
01073
01081 int rccSave(rcc_context ctx, const char *name);
01089 int rccLoad(rcc_context ctx, const char *name);
01090
01091
01092
01093
01094
01095 typedef rcc_engine *(*rcc_plugin_engine_info_function)(const char *lang);
01096
01097 rcc_engine_internal rccEngineGetInternal(rcc_engine_context ctx);
01098 rcc_language *rccEngineGetLanguage(rcc_engine_context ctx);
01099 rcc_context rccEngineGetRccContext(rcc_engine_context ctx);
01100
01101
01102
01103
01104
01108 #define RCC_CC_FLAG_HAVE_BERKLEY_DB 0x01
01109
01112 #define RCC_CC_FLAG_HAVE_DYNAMIC_ENGINES 0x02
01113
01116 #define RCC_CC_FLAG_HAVE_ENCA 0x04
01117
01120 #define RCC_CC_FLAG_HAVE_RCD 0x08
01121
01124 struct rcc_compiled_configuration_t {
01125 unsigned long flags;
01126 };
01127 typedef struct rcc_compiled_configuration_t rcc_compiled_configuration_s;
01128 typedef const struct rcc_compiled_configuration_t *rcc_compiled_configuration;
01129
01133 rcc_compiled_configuration rccGetCompiledConfiguration();
01134
01135 int rccLocaleGetClassByName(const char *locale);
01136 int rccLocaleGetLanguage(char *result, const char *lv, unsigned int n);
01137 int rccLocaleGetCharset(char *result, const char *lv, unsigned int n);
01138
01139 #ifdef __cplusplus
01140 }
01141 #endif
01142
01143 #endif