00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #define KATE_INTERNAL
00011 #include "kate_internal.h"
00012
00013 #ifdef HAVE_STDLIB_H
00014 #include <stdlib.h>
00015 #endif
00016 #ifdef HAVE_STRING_H
00017 #include <string.h>
00018 #endif
00019 #include "kate/kate.h"
00020 #include "kate_decode_state.h"
00021 #include "kate_encode_state.h"
00022
00023 #define MKVER1(x) #x
00024 #define MKVER2(x,y) MKVER1(x) "." MKVER1(y)
00025 #define MKVER3(x,y,z) MKVER1(x)"."MKVER1(y)"."MKVER1(z)
00026
00032 int kate_get_version(void)
00033 {
00034 return (KATE_VERSION_MAJOR<<16)|(KATE_VERSION_MINOR<<8)|KATE_VERSION_PATCH;
00035 }
00036
00042 const char *kate_get_version_string(void)
00043 {
00044 return "libkate " MKVER3(KATE_VERSION_MAJOR,KATE_VERSION_MINOR,KATE_VERSION_PATCH) " (Tiger)";
00045 }
00046
00052 int kate_get_bitstream_version(void)
00053 {
00054 return (KATE_BITSTREAM_VERSION_MAJOR<<8)|(KATE_BITSTREAM_VERSION_MINOR);
00055 }
00056
00062 const char *kate_get_bitstream_version_string(void)
00063 {
00064 return "kate bitstream " MKVER2(KATE_BITSTREAM_VERSION_MAJOR,KATE_BITSTREAM_VERSION_MINOR);
00065 }
00066
00074 int kate_clear(kate_state *k)
00075 {
00076 if (!k) return KATE_E_INVALID_PARAMETER;
00077
00078 if (k->kds) {
00079 kate_decode_state_destroy(k->kds);
00080 k->kds=NULL;
00081 }
00082 if (k->kes) {
00083 kate_encode_state_destroy(k->kes);
00084 k->kes=NULL;
00085 }
00086
00087 return 0;
00088 }
00089
00090 static inline int kate_ascii_tolower(int c) __attribute__((const));
00091 static inline int kate_ascii_tolower(int c)
00092 {
00093 if (c>='A' && c<='Z') return c|32;
00094 return c;
00095 }
00096
00097 int kate_ascii_strncasecmp(const char *s0,const char *s1,size_t n)
00098 {
00099 while (n--) {
00100 int c0=kate_ascii_tolower(*s0++);
00101 int c1=kate_ascii_tolower(*s1++);
00102 if (c0!=c1) return c0-c1;
00103 if (!c0) return 0;
00104 }
00105 return 0;
00106 }
00107
00115 int kate_region_init(kate_region *kr)
00116 {
00117 static const kate_region default_region={
00118 kate_percentage,
00119 10,80,80,10,
00120 -1,
00121 0,
00122 0,
00123 {0,0,0,0,0,0}
00124 };
00125
00126 if (!kr) return KATE_E_INVALID_PARAMETER;
00127 memcpy(kr,&default_region,sizeof(kate_region));
00128 return 0;
00129 }
00130
00138 int kate_style_init(kate_style *ks)
00139 {
00140 static const kate_style default_style={
00141 0,0,
00142 {255,255,255,255},
00143 {0,0,0,0},
00144 {255,255,255,255},
00145 kate_pixel,
00146 -1,-1,
00147 kate_pixel,
00148 0,0,0,0,
00149 0,
00150 0,
00151 0,
00152 0,
00153 0,
00154 kate_wrap_word,
00155 0,
00156 NULL,
00157 {0,0,0,0,0,0,0,0,0}
00158 };
00159
00160 if (!ks) return KATE_E_INVALID_PARAMETER;
00161 memcpy(ks,&default_style,sizeof(kate_style));
00162 return 0;
00163 }
00164
00172 int kate_palette_init(kate_palette *kp)
00173 {
00174 static const kate_palette default_palette={
00175 0,
00176 NULL,
00177 {0,0}
00178 };
00179
00180 if (!kp) return KATE_E_INVALID_PARAMETER;
00181 memcpy(kp,&default_palette,sizeof(kate_palette));
00182 return 0;
00183 }
00184
00192 int kate_bitmap_init(kate_bitmap *kb)
00193 {
00194 static const kate_bitmap default_bitmap={
00195 0,0,
00196 0,
00197 kate_bitmap_type_png,
00198 {0,0},
00199 -1,
00200 NULL,
00201 0,
00202 0,0
00203 };
00204
00205 if (!kb) return KATE_E_INVALID_PARAMETER;
00206 memcpy(kb,&default_bitmap,sizeof(kate_bitmap));
00207 return 0;
00208 }
00209
00217 int kate_curve_init(kate_curve *kc)
00218 {
00219 static const kate_curve default_curve={
00220 kate_curve_none,
00221 0,
00222 NULL,
00223 {0,0,0,0,0}
00224 };
00225
00226 if (!kc) return KATE_E_INVALID_PARAMETER;
00227 memcpy(kc,&default_curve,sizeof(kate_curve));
00228 return 0;
00229 }
00230
00238 int kate_motion_init(kate_motion *km)
00239 {
00240 static const kate_motion default_motion={
00241 0,
00242 NULL,
00243 NULL,
00244 kate_motion_mapping_none,
00245 kate_motion_mapping_none,
00246 kate_motion_semantics_time,
00247 0,
00248 0,
00249 {0,0,0,0,0}
00250 };
00251
00252 if (!km) return KATE_E_INVALID_PARAMETER;
00253 memcpy(km,&default_motion,sizeof(kate_motion));
00254 return 0;
00255 }
00256
00257 void *kate_checked_malloc(size_t n,size_t sz)
00258 {
00259 size_t mul;
00260 if (kate_check_mul_overflow(n,sz,&mul)) return NULL;
00261 return kate_malloc(mul);
00262 }
00263
00264 void *kate_checked_realloc(void *ptr,size_t n,size_t sz)
00265 {
00266 size_t mul;
00267 if (kate_check_mul_overflow(n,sz,&mul)) return NULL;
00268 return kate_realloc(ptr,mul);
00269 }
00270